@pawells/nestjs-shared 1.0.0-dev.4c8c698

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +802 -0
  3. package/build/LICENSE +21 -0
  4. package/build/README.md +802 -0
  5. package/build/common/common.module.d.ts +49 -0
  6. package/build/common/common.module.d.ts.map +1 -0
  7. package/build/common/common.module.js +178 -0
  8. package/build/common/common.module.js.map +1 -0
  9. package/build/common/constants/histogram-buckets.constants.d.ts +12 -0
  10. package/build/common/constants/histogram-buckets.constants.d.ts.map +1 -0
  11. package/build/common/constants/histogram-buckets.constants.js +51 -0
  12. package/build/common/constants/histogram-buckets.constants.js.map +1 -0
  13. package/build/common/constants/http-status.constants.d.ts +27 -0
  14. package/build/common/constants/http-status.constants.d.ts.map +1 -0
  15. package/build/common/constants/http-status.constants.js +27 -0
  16. package/build/common/constants/http-status.constants.js.map +1 -0
  17. package/build/common/constants/timeout.constants.d.ts +29 -0
  18. package/build/common/constants/timeout.constants.d.ts.map +1 -0
  19. package/build/common/constants/timeout.constants.js +45 -0
  20. package/build/common/constants/timeout.constants.js.map +1 -0
  21. package/build/common/controllers/metrics.controller.d.ts +23 -0
  22. package/build/common/controllers/metrics.controller.d.ts.map +1 -0
  23. package/build/common/controllers/metrics.controller.js +66 -0
  24. package/build/common/controllers/metrics.controller.js.map +1 -0
  25. package/build/common/decorators/common-decorators.d.ts +90 -0
  26. package/build/common/decorators/common-decorators.d.ts.map +1 -0
  27. package/build/common/decorators/common-decorators.js +101 -0
  28. package/build/common/decorators/common-decorators.js.map +1 -0
  29. package/build/common/decorators/decorator-factory.d.ts +108 -0
  30. package/build/common/decorators/decorator-factory.d.ts.map +1 -0
  31. package/build/common/decorators/decorator-factory.js +104 -0
  32. package/build/common/decorators/decorator-factory.js.map +1 -0
  33. package/build/common/decorators/guard.decorators.d.ts +48 -0
  34. package/build/common/decorators/guard.decorators.d.ts.map +1 -0
  35. package/build/common/decorators/guard.decorators.js +49 -0
  36. package/build/common/decorators/guard.decorators.js.map +1 -0
  37. package/build/common/decorators/index.d.ts +10 -0
  38. package/build/common/decorators/index.d.ts.map +1 -0
  39. package/build/common/decorators/index.js +11 -0
  40. package/build/common/decorators/index.js.map +1 -0
  41. package/build/common/decorators/instrument.decorator.d.ts +128 -0
  42. package/build/common/decorators/instrument.decorator.d.ts.map +1 -0
  43. package/build/common/decorators/instrument.decorator.js +165 -0
  44. package/build/common/decorators/instrument.decorator.js.map +1 -0
  45. package/build/common/decorators/metric.decorators.d.ts +42 -0
  46. package/build/common/decorators/metric.decorators.d.ts.map +1 -0
  47. package/build/common/decorators/metric.decorators.js +85 -0
  48. package/build/common/decorators/metric.decorators.js.map +1 -0
  49. package/build/common/decorators/request-property.decorator.d.ts +65 -0
  50. package/build/common/decorators/request-property.decorator.d.ts.map +1 -0
  51. package/build/common/decorators/request-property.decorator.js +102 -0
  52. package/build/common/decorators/request-property.decorator.js.map +1 -0
  53. package/build/common/errors/base-application-error.d.ts +98 -0
  54. package/build/common/errors/base-application-error.d.ts.map +1 -0
  55. package/build/common/errors/base-application-error.js +133 -0
  56. package/build/common/errors/base-application-error.js.map +1 -0
  57. package/build/common/errors/error-factory.d.ts +93 -0
  58. package/build/common/errors/error-factory.d.ts.map +1 -0
  59. package/build/common/errors/error-factory.js +105 -0
  60. package/build/common/errors/error-factory.js.map +1 -0
  61. package/build/common/errors/index.d.ts +13 -0
  62. package/build/common/errors/index.d.ts.map +1 -0
  63. package/build/common/errors/index.js +15 -0
  64. package/build/common/errors/index.js.map +1 -0
  65. package/build/common/factories/index.d.ts +5 -0
  66. package/build/common/factories/index.d.ts.map +1 -0
  67. package/build/common/factories/index.js +3 -0
  68. package/build/common/factories/index.js.map +1 -0
  69. package/build/common/factories/module-factory.d.ts +178 -0
  70. package/build/common/factories/module-factory.d.ts.map +1 -0
  71. package/build/common/factories/module-factory.js +253 -0
  72. package/build/common/factories/module-factory.js.map +1 -0
  73. package/build/common/factories/rate-limit-config.factory.d.ts +79 -0
  74. package/build/common/factories/rate-limit-config.factory.d.ts.map +1 -0
  75. package/build/common/factories/rate-limit-config.factory.js +115 -0
  76. package/build/common/factories/rate-limit-config.factory.js.map +1 -0
  77. package/build/common/factories/security-bootstrap.factory.d.ts +77 -0
  78. package/build/common/factories/security-bootstrap.factory.d.ts.map +1 -0
  79. package/build/common/factories/security-bootstrap.factory.js +222 -0
  80. package/build/common/factories/security-bootstrap.factory.js.map +1 -0
  81. package/build/common/filters/global-exception.filter.d.ts +78 -0
  82. package/build/common/filters/global-exception.filter.d.ts.map +1 -0
  83. package/build/common/filters/global-exception.filter.js +192 -0
  84. package/build/common/filters/global-exception.filter.js.map +1 -0
  85. package/build/common/filters/http-exception.filter.d.ts +37 -0
  86. package/build/common/filters/http-exception.filter.d.ts.map +1 -0
  87. package/build/common/filters/http-exception.filter.js +91 -0
  88. package/build/common/filters/http-exception.filter.js.map +1 -0
  89. package/build/common/guards/csrf.guard.d.ts +53 -0
  90. package/build/common/guards/csrf.guard.d.ts.map +1 -0
  91. package/build/common/guards/csrf.guard.js +109 -0
  92. package/build/common/guards/csrf.guard.js.map +1 -0
  93. package/build/common/guards/metrics.guard.d.ts +42 -0
  94. package/build/common/guards/metrics.guard.d.ts.map +1 -0
  95. package/build/common/guards/metrics.guard.js +124 -0
  96. package/build/common/guards/metrics.guard.js.map +1 -0
  97. package/build/common/index.d.ts +43 -0
  98. package/build/common/index.d.ts.map +1 -0
  99. package/build/common/index.js +50 -0
  100. package/build/common/index.js.map +1 -0
  101. package/build/common/interceptors/http-client.interceptor.d.ts +11 -0
  102. package/build/common/interceptors/http-client.interceptor.d.ts.map +1 -0
  103. package/build/common/interceptors/http-client.interceptor.js +69 -0
  104. package/build/common/interceptors/http-client.interceptor.js.map +1 -0
  105. package/build/common/interceptors/http-instrumentation.interceptor.d.ts +64 -0
  106. package/build/common/interceptors/http-instrumentation.interceptor.d.ts.map +1 -0
  107. package/build/common/interceptors/http-instrumentation.interceptor.js +148 -0
  108. package/build/common/interceptors/http-instrumentation.interceptor.js.map +1 -0
  109. package/build/common/interceptors/http-metrics.interceptor.d.ts +46 -0
  110. package/build/common/interceptors/http-metrics.interceptor.d.ts.map +1 -0
  111. package/build/common/interceptors/http-metrics.interceptor.js +120 -0
  112. package/build/common/interceptors/http-metrics.interceptor.js.map +1 -0
  113. package/build/common/interceptors/logging.interceptor.d.ts +22 -0
  114. package/build/common/interceptors/logging.interceptor.d.ts.map +1 -0
  115. package/build/common/interceptors/logging.interceptor.js +67 -0
  116. package/build/common/interceptors/logging.interceptor.js.map +1 -0
  117. package/build/common/interfaces/cache-provider.interface.d.ts +54 -0
  118. package/build/common/interfaces/cache-provider.interface.d.ts.map +1 -0
  119. package/build/common/interfaces/cache-provider.interface.js +6 -0
  120. package/build/common/interfaces/cache-provider.interface.js.map +1 -0
  121. package/build/common/interfaces/index.d.ts +7 -0
  122. package/build/common/interfaces/index.d.ts.map +1 -0
  123. package/build/common/interfaces/index.js +3 -0
  124. package/build/common/interfaces/index.js.map +1 -0
  125. package/build/common/interfaces/log-context.interface.d.ts +77 -0
  126. package/build/common/interfaces/log-context.interface.d.ts.map +1 -0
  127. package/build/common/interfaces/log-context.interface.js +2 -0
  128. package/build/common/interfaces/log-context.interface.js.map +1 -0
  129. package/build/common/interfaces/log-entry.interface.d.ts +26 -0
  130. package/build/common/interfaces/log-entry.interface.d.ts.map +1 -0
  131. package/build/common/interfaces/log-entry.interface.js +33 -0
  132. package/build/common/interfaces/log-entry.interface.js.map +1 -0
  133. package/build/common/interfaces/logger.interface.d.ts +62 -0
  134. package/build/common/interfaces/logger.interface.d.ts.map +1 -0
  135. package/build/common/interfaces/logger.interface.js +2 -0
  136. package/build/common/interfaces/logger.interface.js.map +1 -0
  137. package/build/common/interfaces/metrics-exporter.interface.d.ts +275 -0
  138. package/build/common/interfaces/metrics-exporter.interface.d.ts.map +1 -0
  139. package/build/common/interfaces/metrics-exporter.interface.js +8 -0
  140. package/build/common/interfaces/metrics-exporter.interface.js.map +1 -0
  141. package/build/common/metrics/base-metrics-collector.d.ts +81 -0
  142. package/build/common/metrics/base-metrics-collector.d.ts.map +1 -0
  143. package/build/common/metrics/base-metrics-collector.js +88 -0
  144. package/build/common/metrics/base-metrics-collector.js.map +1 -0
  145. package/build/common/metrics/index.d.ts +2 -0
  146. package/build/common/metrics/index.d.ts.map +1 -0
  147. package/build/common/metrics/index.js +2 -0
  148. package/build/common/metrics/index.js.map +1 -0
  149. package/build/common/metrics.module.d.ts +50 -0
  150. package/build/common/metrics.module.d.ts.map +1 -0
  151. package/build/common/metrics.module.js +77 -0
  152. package/build/common/metrics.module.js.map +1 -0
  153. package/build/common/modules/throttler.module.d.ts +69 -0
  154. package/build/common/modules/throttler.module.d.ts.map +1 -0
  155. package/build/common/modules/throttler.module.js +117 -0
  156. package/build/common/modules/throttler.module.js.map +1 -0
  157. package/build/common/pipes/base-validation.pipe.d.ts +67 -0
  158. package/build/common/pipes/base-validation.pipe.d.ts.map +1 -0
  159. package/build/common/pipes/base-validation.pipe.js +95 -0
  160. package/build/common/pipes/base-validation.pipe.js.map +1 -0
  161. package/build/common/pipes/validation.pipe.d.ts +32 -0
  162. package/build/common/pipes/validation.pipe.d.ts.map +1 -0
  163. package/build/common/pipes/validation.pipe.js +60 -0
  164. package/build/common/pipes/validation.pipe.js.map +1 -0
  165. package/build/common/registry/instrumentation-registry.d.ts +227 -0
  166. package/build/common/registry/instrumentation-registry.d.ts.map +1 -0
  167. package/build/common/registry/instrumentation-registry.js +414 -0
  168. package/build/common/registry/instrumentation-registry.js.map +1 -0
  169. package/build/common/services/audit-logger.service.d.ts +91 -0
  170. package/build/common/services/audit-logger.service.d.ts.map +1 -0
  171. package/build/common/services/audit-logger.service.js +180 -0
  172. package/build/common/services/audit-logger.service.js.map +1 -0
  173. package/build/common/services/csrf.service.d.ts +202 -0
  174. package/build/common/services/csrf.service.d.ts.map +1 -0
  175. package/build/common/services/csrf.service.js +478 -0
  176. package/build/common/services/csrf.service.js.map +1 -0
  177. package/build/common/services/error-categorizer.service.d.ts +82 -0
  178. package/build/common/services/error-categorizer.service.d.ts.map +1 -0
  179. package/build/common/services/error-categorizer.service.js +339 -0
  180. package/build/common/services/error-categorizer.service.js.map +1 -0
  181. package/build/common/services/error-sanitizer.service.d.ts +146 -0
  182. package/build/common/services/error-sanitizer.service.d.ts.map +1 -0
  183. package/build/common/services/error-sanitizer.service.js +287 -0
  184. package/build/common/services/error-sanitizer.service.js.map +1 -0
  185. package/build/common/services/health-check.service.d.ts +86 -0
  186. package/build/common/services/health-check.service.d.ts.map +1 -0
  187. package/build/common/services/health-check.service.js +132 -0
  188. package/build/common/services/health-check.service.js.map +1 -0
  189. package/build/common/services/http-client.service.d.ts +113 -0
  190. package/build/common/services/http-client.service.d.ts.map +1 -0
  191. package/build/common/services/http-client.service.js +294 -0
  192. package/build/common/services/http-client.service.js.map +1 -0
  193. package/build/common/services/logger.service.d.ts +189 -0
  194. package/build/common/services/logger.service.d.ts.map +1 -0
  195. package/build/common/services/logger.service.js +423 -0
  196. package/build/common/services/logger.service.js.map +1 -0
  197. package/build/common/services/metrics-registry.service.d.ts +98 -0
  198. package/build/common/services/metrics-registry.service.d.ts.map +1 -0
  199. package/build/common/services/metrics-registry.service.js +262 -0
  200. package/build/common/services/metrics-registry.service.js.map +1 -0
  201. package/build/common/services/nest-logger-adapter.service.d.ts +62 -0
  202. package/build/common/services/nest-logger-adapter.service.d.ts.map +1 -0
  203. package/build/common/services/nest-logger-adapter.service.js +120 -0
  204. package/build/common/services/nest-logger-adapter.service.js.map +1 -0
  205. package/build/common/utils/error.utils.d.ts +16 -0
  206. package/build/common/utils/error.utils.d.ts.map +1 -0
  207. package/build/common/utils/error.utils.js +26 -0
  208. package/build/common/utils/error.utils.js.map +1 -0
  209. package/build/common/utils/lazy-getter.types.d.ts +190 -0
  210. package/build/common/utils/lazy-getter.types.d.ts.map +1 -0
  211. package/build/common/utils/lazy-getter.types.js +114 -0
  212. package/build/common/utils/lazy-getter.types.js.map +1 -0
  213. package/build/common/utils/module.utils.d.ts +33 -0
  214. package/build/common/utils/module.utils.d.ts.map +1 -0
  215. package/build/common/utils/module.utils.js +48 -0
  216. package/build/common/utils/module.utils.js.map +1 -0
  217. package/build/common/utils/sanitization.utils.d.ts +69 -0
  218. package/build/common/utils/sanitization.utils.d.ts.map +1 -0
  219. package/build/common/utils/sanitization.utils.js +141 -0
  220. package/build/common/utils/sanitization.utils.js.map +1 -0
  221. package/build/config/config.module.d.ts +30 -0
  222. package/build/config/config.module.d.ts.map +1 -0
  223. package/build/config/config.module.js +49 -0
  224. package/build/config/config.module.js.map +1 -0
  225. package/build/config/config.service.d.ts +74 -0
  226. package/build/config/config.service.d.ts.map +1 -0
  227. package/build/config/config.service.js +145 -0
  228. package/build/config/config.service.js.map +1 -0
  229. package/build/config/config.types.d.ts +143 -0
  230. package/build/config/config.types.d.ts.map +1 -0
  231. package/build/config/config.types.js +2 -0
  232. package/build/config/config.types.js.map +1 -0
  233. package/build/config/decorators/config.decorators.d.ts +43 -0
  234. package/build/config/decorators/config.decorators.d.ts.map +1 -0
  235. package/build/config/decorators/config.decorators.js +68 -0
  236. package/build/config/decorators/config.decorators.js.map +1 -0
  237. package/build/config/decorators/index.d.ts +2 -0
  238. package/build/config/decorators/index.d.ts.map +1 -0
  239. package/build/config/decorators/index.js +2 -0
  240. package/build/config/decorators/index.js.map +1 -0
  241. package/build/config/index.d.ts +7 -0
  242. package/build/config/index.d.ts.map +1 -0
  243. package/build/config/index.js +9 -0
  244. package/build/config/index.js.map +1 -0
  245. package/build/config/validation.utils.d.ts +136 -0
  246. package/build/config/validation.utils.d.ts.map +1 -0
  247. package/build/config/validation.utils.js +263 -0
  248. package/build/config/validation.utils.js.map +1 -0
  249. package/build/errors/index.d.ts +9 -0
  250. package/build/errors/index.d.ts.map +1 -0
  251. package/build/errors/index.js +12 -0
  252. package/build/errors/index.js.map +1 -0
  253. package/build/guards/custom-throttle.guard.d.ts +28 -0
  254. package/build/guards/custom-throttle.guard.d.ts.map +1 -0
  255. package/build/guards/custom-throttle.guard.js +52 -0
  256. package/build/guards/custom-throttle.guard.js.map +1 -0
  257. package/build/guards/index.d.ts +2 -0
  258. package/build/guards/index.d.ts.map +1 -0
  259. package/build/guards/index.js +2 -0
  260. package/build/guards/index.js.map +1 -0
  261. package/build/index.d.ts +53 -0
  262. package/build/index.d.ts.map +1 -0
  263. package/build/index.js +61 -0
  264. package/build/index.js.map +1 -0
  265. package/build/logging/index.d.ts +7 -0
  266. package/build/logging/index.d.ts.map +1 -0
  267. package/build/logging/index.js +7 -0
  268. package/build/logging/index.js.map +1 -0
  269. package/build/metrics/index.d.ts +6 -0
  270. package/build/metrics/index.d.ts.map +1 -0
  271. package/build/metrics/index.js +11 -0
  272. package/build/metrics/index.js.map +1 -0
  273. package/build/package.json +72 -0
  274. package/build/security/index.d.ts +8 -0
  275. package/build/security/index.d.ts.map +1 -0
  276. package/build/security/index.js +11 -0
  277. package/build/security/index.js.map +1 -0
  278. package/build/test-setup.d.ts +2 -0
  279. package/build/test-setup.d.ts.map +1 -0
  280. package/build/test-setup.js +40 -0
  281. package/build/test-setup.js.map +1 -0
  282. package/build/validation/index.d.ts +6 -0
  283. package/build/validation/index.d.ts.map +1 -0
  284. package/build/validation/index.js +8 -0
  285. package/build/validation/index.js.map +1 -0
  286. package/package.json +71 -0
@@ -0,0 +1,294 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var HttpClientService_1;
11
+ import { Injectable } from '@nestjs/common';
12
+ import { ModuleRef } from '@nestjs/core';
13
+ import * as https from 'https';
14
+ import * as http from 'http';
15
+ import { AppLogger } from './logger.service.js';
16
+ import { getHttpClientTimeout } from '../constants/timeout.constants.js';
17
+ import { HTTP_STATUS_OK } from '../constants/http-status.constants.js';
18
+ /**
19
+ * HTTP Client Service.
20
+ * Provides a robust HTTP client with timeout handling, SSL/TLS configuration, payload size limits,
21
+ * and comprehensive logging with sensitive data redaction.
22
+ *
23
+ * Features:
24
+ * - Configurable timeouts (default: HTTP_CLIENT_TIMEOUT)
25
+ * - SSL/TLS certificate validation (default: strict)
26
+ * - Custom CA certificate support for self-signed certs
27
+ * - Payload size limit enforcement (10MB default)
28
+ * - Automatic content-type parsing (JSON, text)
29
+ * - Correlation ID support for request tracing
30
+ * - Sensitive data redaction in logs (passwords, tokens, auth headers)
31
+ * - Request/response duration tracking
32
+ *
33
+ * @remarks
34
+ * - Maximum payload size: 10MB (prevents memory exhaustion from large responses)
35
+ * - Timeout error handling with clear error messages
36
+ * - Content-type validation before JSON parsing
37
+ * - All sensitive headers (Authorization, Cookie, X-API-Key) redacted in logs
38
+ * - URLs with embedded credentials are sanitized before logging
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Simple GET request
43
+ * const response = await client.get('https://api.example.com/users');
44
+ *
45
+ * // POST with custom timeout and correlation ID
46
+ * const response = await client.post('https://api.example.com/users',
47
+ * { name: 'John', email: 'john@example.com' },
48
+ * { timeout: 5000, correlationId: 'req-123' }
49
+ * );
50
+ *
51
+ * // HTTPS with custom CA certificate
52
+ * const cert = fs.readFileSync('/path/to/ca.pem');
53
+ * const response = await client.get('https://internal-api.local/data', { ca: cert });
54
+ * ```
55
+ */
56
+ let HttpClientService = HttpClientService_1 = class HttpClientService {
57
+ _contextualLogger;
58
+ Module;
59
+ constructor(module) {
60
+ this.Module = module;
61
+ }
62
+ get Logger() {
63
+ if (!this._contextualLogger) {
64
+ const baseLogger = this.Module.get(AppLogger);
65
+ this._contextualLogger = baseLogger.createContextualLogger(HttpClientService_1.name);
66
+ }
67
+ return this._contextualLogger;
68
+ }
69
+ /**
70
+ * Makes an HTTP request. URLs with embedded credentials and sensitive headers
71
+ * are sanitized before logging.
72
+ */
73
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
74
+ request(options) {
75
+ const { method, url: requestUrl, headers, data, timeout = getHttpClientTimeout(), correlationId, rejectUnauthorized = true, ca } = options;
76
+ const startTime = Date.now();
77
+ const MAX_PAYLOAD_SIZE = 10_485_760; // 10MB in bytes
78
+ const safeUrl = this.sanitizeUrl(requestUrl);
79
+ this.Logger.debug('Making HTTP request', JSON.stringify({
80
+ method,
81
+ url: safeUrl,
82
+ headers: this.sanitizeHeaders(headers),
83
+ hasData: !!data,
84
+ timeout,
85
+ correlationId: correlationId ?? 'unknown',
86
+ }));
87
+ return new Promise((resolve, reject) => {
88
+ const parsedUrl = new URL(requestUrl); // Use raw URL for actual request
89
+ const isHttps = parsedUrl.protocol === 'https:';
90
+ const client = isHttps ? https : http;
91
+ const requestOptions = {
92
+ hostname: parsedUrl.hostname,
93
+ port: parsedUrl.port || undefined,
94
+ path: parsedUrl.pathname + parsedUrl.search,
95
+ method,
96
+ headers: headers ?? {},
97
+ timeout,
98
+ };
99
+ // Add SSL/TLS options for HTTPS requests
100
+ if (isHttps) {
101
+ requestOptions.rejectUnauthorized = rejectUnauthorized;
102
+ if (ca) {
103
+ requestOptions.ca = ca;
104
+ }
105
+ }
106
+ const req = client.request(requestOptions, (res) => {
107
+ const chunks = [];
108
+ let totalSize = 0;
109
+ res.on('data', (chunk) => {
110
+ totalSize += chunk.length;
111
+ if (totalSize > MAX_PAYLOAD_SIZE) {
112
+ const duration = Date.now() - startTime;
113
+ req.destroy();
114
+ const error = new Error('Payload too large');
115
+ this.Logger.error('HTTP response payload exceeded size limit', JSON.stringify({
116
+ method,
117
+ url: safeUrl,
118
+ maxSize: MAX_PAYLOAD_SIZE,
119
+ actualSize: totalSize,
120
+ durationMs: duration,
121
+ correlationId: correlationId ?? 'unknown',
122
+ }));
123
+ reject(error);
124
+ return;
125
+ }
126
+ chunks.push(chunk);
127
+ });
128
+ res.on('error', (error) => {
129
+ const duration = Date.now() - startTime;
130
+ this.Logger.error('HTTP response error', JSON.stringify({
131
+ method,
132
+ url: safeUrl,
133
+ error: error.message,
134
+ durationMs: duration,
135
+ correlationId: correlationId ?? 'unknown',
136
+ }));
137
+ reject(error);
138
+ });
139
+ res.on('end', () => {
140
+ const duration = Date.now() - startTime;
141
+ try {
142
+ const body = Buffer.concat(chunks).toString('utf-8');
143
+ // Validate payload size before parsing JSON
144
+ if (body.length > MAX_PAYLOAD_SIZE) {
145
+ this.Logger.error('HTTP response payload exceeded size limit', JSON.stringify({
146
+ method,
147
+ url: safeUrl,
148
+ maxSize: MAX_PAYLOAD_SIZE,
149
+ actualSize: body.length,
150
+ durationMs: duration,
151
+ correlationId: correlationId ?? 'unknown',
152
+ }));
153
+ reject(new Error('Payload too large'));
154
+ return;
155
+ }
156
+ // Validate content-type before parsing JSON
157
+ const contentType = res.headers['content-type'] ?? '';
158
+ let parsedData = null;
159
+ if (body) {
160
+ if (contentType.includes('application/json')) {
161
+ parsedData = JSON.parse(body);
162
+ }
163
+ else if (contentType.includes('text/')) {
164
+ parsedData = body;
165
+ }
166
+ else {
167
+ // For other content types, return raw body
168
+ parsedData = body;
169
+ }
170
+ }
171
+ this.Logger.info('HTTP request successful', JSON.stringify({
172
+ method,
173
+ url: safeUrl,
174
+ statusCode: res.statusCode,
175
+ durationMs: duration,
176
+ responseSize: body.length,
177
+ correlationId: correlationId ?? 'unknown',
178
+ }));
179
+ resolve({
180
+ data: parsedData,
181
+ status: res.statusCode ?? HTTP_STATUS_OK,
182
+ statusText: res.statusMessage ?? 'OK',
183
+ headers: res.headers,
184
+ duration,
185
+ });
186
+ }
187
+ catch (error) {
188
+ this.Logger.error('HTTP response parsing failed', JSON.stringify({
189
+ method,
190
+ url: safeUrl,
191
+ statusCode: res.statusCode,
192
+ error: error.message,
193
+ durationMs: duration,
194
+ correlationId: correlationId ?? 'unknown',
195
+ }));
196
+ reject(error);
197
+ }
198
+ });
199
+ });
200
+ req.on('error', (error) => {
201
+ const duration = Date.now() - startTime;
202
+ this.Logger.error('HTTP request failed', JSON.stringify({
203
+ method,
204
+ url: safeUrl,
205
+ error: error.message,
206
+ durationMs: duration,
207
+ correlationId: correlationId ?? 'unknown',
208
+ }));
209
+ reject(error);
210
+ });
211
+ req.on('timeout', () => {
212
+ const duration = Date.now() - startTime;
213
+ req.destroy();
214
+ this.Logger.warn('HTTP request timeout', JSON.stringify({
215
+ method,
216
+ url: safeUrl,
217
+ timeout,
218
+ durationMs: duration,
219
+ correlationId: correlationId ?? 'unknown',
220
+ }));
221
+ reject(new Error('Request timeout'));
222
+ });
223
+ if (data) {
224
+ const bodyData = typeof data === 'string' ? data : JSON.stringify(data);
225
+ req.write(bodyData);
226
+ }
227
+ req.end();
228
+ });
229
+ }
230
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
231
+ get(url, options = {}) {
232
+ return this.request({ ...options, method: 'GET', url });
233
+ }
234
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
235
+ post(url, data, options = {}) {
236
+ return this.request({ ...options, method: 'POST', url, data });
237
+ }
238
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
239
+ put(url, data, options = {}) {
240
+ return this.request({ ...options, method: 'PUT', url, data });
241
+ }
242
+ // eslint-disable-next-line @typescript-eslint/promise-function-async
243
+ delete(url, options = {}) {
244
+ return this.request({ ...options, method: 'DELETE', url });
245
+ }
246
+ /**
247
+ * Sanitize a URL to remove embedded credentials (e.g., https://user:pass@host/)
248
+ */
249
+ sanitizeUrl(url) {
250
+ try {
251
+ const parsed = new URL(url);
252
+ if (parsed.username || parsed.password) {
253
+ parsed.username = '[REDACTED]';
254
+ parsed.password = '[REDACTED]';
255
+ return parsed.toString();
256
+ }
257
+ return url;
258
+ }
259
+ catch {
260
+ return url;
261
+ }
262
+ }
263
+ /**
264
+ * Redacts sensitive headers (authorization, cookies, API keys, CSRF tokens)
265
+ * before logging.
266
+ */
267
+ sanitizeHeaders(headers) {
268
+ if (!headers)
269
+ return undefined;
270
+ const sensitiveHeaders = [
271
+ 'authorization',
272
+ 'x-api-key',
273
+ 'cookie',
274
+ 'set-cookie',
275
+ 'x-auth-token',
276
+ 'proxy-authorization',
277
+ 'x-csrf-token',
278
+ ];
279
+ const sanitized = { ...headers };
280
+ // Replace sensitive headers with redacted value (case-insensitive)
281
+ for (const [key] of Object.entries(sanitized)) {
282
+ if (sensitiveHeaders.includes(key.toLowerCase())) {
283
+ sanitized[key] = '[REDACTED]';
284
+ }
285
+ }
286
+ return sanitized;
287
+ }
288
+ };
289
+ HttpClientService = HttpClientService_1 = __decorate([
290
+ Injectable(),
291
+ __metadata("design:paramtypes", [ModuleRef])
292
+ ], HttpClientService);
293
+ export { HttpClientService };
294
+ //# sourceMappingURL=http-client.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.service.js","sourceRoot":"","sources":["../../../src/common/services/http-client.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { LogMetadata } from '../interfaces/log-entry.interface.js';
3
+ import { IContextualLogger } from '../interfaces/logger.interface.js';
4
+ /**
5
+ * Options object for logging methods.
6
+ * Provides a cleaner alternative to positional parameters.
7
+ */
8
+ export interface LogOptions {
9
+ context?: string;
10
+ trace?: string;
11
+ metadata?: LogMetadata;
12
+ }
13
+ /**
14
+ * Centralized application logger service.
15
+ * Wraps @pawells/logger and respects LOG_LEVEL environment variable for filtering.
16
+ * Automatically redacts sensitive information (passwords, tokens, API keys) from logs.
17
+ * Supports structured logging with context and metadata.
18
+ * Integrates with OpenTelemetry for trace and span ID correlation.
19
+ * Implements Interface Segregation Principle with focused interfaces.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Use flexible logging methods
24
+ * logger.info('User logged in', 'AuthService', { userId: '123' });
25
+ * logger.error('Database error', error.stack, 'DatabaseService', { query: '...' });
26
+ * logger.debug('Cache hit', { metadata: { key: 'users:123' } });
27
+ * ```
28
+ */
29
+ export declare class AppLogger implements IContextualLogger {
30
+ private readonly configService?;
31
+ private readonly context;
32
+ private readonly pawellsLogger;
33
+ private readonly minLevel;
34
+ private readonly serviceName;
35
+ /**
36
+ * Set of field names that contain sensitive information requiring redaction in logs.
37
+ * Stored as lowercase for case-insensitive matching against object keys.
38
+ * Prevents leaking credentials, tokens, and other security-sensitive data into log output.
39
+ * Includes passwords, API keys, tokens, and payment card information.
40
+ */
41
+ private readonly sensitiveKeys;
42
+ constructor(configService?: ConfigService | undefined, context?: string);
43
+ /**
44
+ * Parse LOG_LEVEL environment variable
45
+ * @returns LogLevel enum value (numeric)
46
+ */
47
+ private parseLogLevel;
48
+ /**
49
+ * Parse LOG_FORMAT environment variable
50
+ * @returns Format type ('json' | 'text'), defaults to 'json'
51
+ */
52
+ private parseLogFormat;
53
+ /**
54
+ * Map nestjs-shared numeric LogLevel to @pawells/logger LogLevel
55
+ * @param level - Numeric LogLevel from nestjs-shared
56
+ * @returns String LogLevel for @pawells/logger
57
+ */
58
+ private mapNestjsLogLevelToPawells;
59
+ /**
60
+ * Check if a log level should be output
61
+ * @param level - Level to check
62
+ * @returns true if level should be logged
63
+ */
64
+ private shouldLog;
65
+ /**
66
+ * Sanitize metadata to remove sensitive information and handle circular references
67
+ * @param metadata - Metadata to sanitize
68
+ * @returns Sanitized metadata with circular references replaced by '[CIRCULAR_REF]'
69
+ */
70
+ private sanitizeMetadata;
71
+ /**
72
+ * Extract OpenTelemetry trace context
73
+ * @returns Object with traceId and spanId if available
74
+ */
75
+ private extractTraceContext;
76
+ /**
77
+ * Build metadata with context and trace info
78
+ * @param logContext - Logger context
79
+ * @param metadata - User-provided metadata
80
+ * @returns Combined metadata
81
+ */
82
+ private buildMetadata;
83
+ /**
84
+ * Log debug message
85
+ * @param message - Log message
86
+ * @param options - Optional context/metadata options
87
+ */
88
+ debug(message: string | Error, options: LogOptions): void;
89
+ /**
90
+ * Log debug message
91
+ * @param message - Log message
92
+ * @param context - Optional context override
93
+ * @param metadata - Optional structured metadata
94
+ */
95
+ debug(message: string | Error, context?: string, metadata?: LogMetadata): void;
96
+ /**
97
+ * Log debug message
98
+ * @param message - Log message
99
+ * @param metadata - Optional structured metadata
100
+ */
101
+ debug(message: string | Error, metadata?: LogMetadata): void;
102
+ /**
103
+ * Log info message
104
+ * @param message - Log message
105
+ * @param options - Optional context/metadata options
106
+ */
107
+ info(message: string | Error, options: LogOptions): void;
108
+ /**
109
+ * Log info message
110
+ * @param message - Log message
111
+ * @param context - Optional context override
112
+ * @param metadata - Optional structured metadata
113
+ */
114
+ info(message: string | Error, context?: string, metadata?: LogMetadata): void;
115
+ /**
116
+ * Log info message
117
+ * @param message - Log message
118
+ * @param metadata - Optional structured metadata
119
+ */
120
+ info(message: string | Error, metadata?: LogMetadata): void;
121
+ /**
122
+ * Log warning message
123
+ * @param message - Log message
124
+ * @param options - Optional context/metadata options
125
+ */
126
+ warn(message: string | Error, options: LogOptions): void;
127
+ /**
128
+ * Log warning message
129
+ * @param message - Log message
130
+ * @param context - Optional context override
131
+ * @param metadata - Optional structured metadata
132
+ */
133
+ warn(message: string | Error, context?: string, metadata?: LogMetadata): void;
134
+ /**
135
+ * Log warning message
136
+ * @param message - Log message
137
+ * @param metadata - Optional structured metadata
138
+ */
139
+ warn(message: string | Error, metadata?: LogMetadata): void;
140
+ /**
141
+ * Log error message
142
+ * @param message - Log message or Error object
143
+ * @param options - Optional context/trace/metadata options
144
+ */
145
+ error(message: string | Error, options: LogOptions): void;
146
+ /**
147
+ * Log error message
148
+ * @param message - Log message or Error object
149
+ * @param trace - Optional stack trace
150
+ * @param context - Optional context override
151
+ * @param metadata - Optional structured metadata
152
+ */
153
+ error(message: string | Error, trace?: string, context?: string, metadata?: LogMetadata): void;
154
+ /**
155
+ * Log error message
156
+ * @param message - Log message or Error object
157
+ * @param context - Optional context override
158
+ * @param metadata - Optional structured metadata
159
+ */
160
+ error(message: string | Error, context?: string, metadata?: LogMetadata): void;
161
+ /**
162
+ * Log fatal message
163
+ * @param message - Log message or Error object
164
+ * @param options - Optional context/trace/metadata options
165
+ */
166
+ fatal(message: string | Error, options: LogOptions): void;
167
+ /**
168
+ * Log fatal message
169
+ * @param message - Log message or Error object
170
+ * @param trace - Optional stack trace
171
+ * @param context - Optional context override
172
+ * @param metadata - Optional structured metadata
173
+ */
174
+ fatal(message: string | Error, trace?: string, context?: string, metadata?: LogMetadata): void;
175
+ /**
176
+ * Log fatal message
177
+ * @param message - Log message or Error object
178
+ * @param context - Optional context override
179
+ * @param metadata - Optional structured metadata
180
+ */
181
+ fatal(message: string | Error, context?: string, metadata?: LogMetadata): void;
182
+ /**
183
+ * Create a contextual logger instance
184
+ * @param context - Context string
185
+ * @returns New AppLogger instance with context
186
+ */
187
+ createContextualLogger(context: string): AppLogger;
188
+ }
189
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/logger.service.ts"],"names":[],"mappings":"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"}