@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,423 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var AppLogger_1;
14
+ import { Injectable, Inject, Optional } from '@nestjs/common';
15
+ import { ConfigService } from '@nestjs/config';
16
+ import { Logger as PawellsLogger, LogLevel as PawellsLogLevel } from '@pawells/logger';
17
+ import { CreateJsonCircularReplacer } from '@pawells/typescript-common';
18
+ import { trace, context } from '@opentelemetry/api';
19
+ import { LogLevel, LOG_LEVEL_FROM_STRING } from '../interfaces/log-entry.interface.js';
20
+ import { MAX_SANITIZE_DEPTH } from '../utils/sanitization.utils.js';
21
+ /**
22
+ * Centralized application logger service.
23
+ * Wraps @pawells/logger and respects LOG_LEVEL environment variable for filtering.
24
+ * Automatically redacts sensitive information (passwords, tokens, API keys) from logs.
25
+ * Supports structured logging with context and metadata.
26
+ * Integrates with OpenTelemetry for trace and span ID correlation.
27
+ * Implements Interface Segregation Principle with focused interfaces.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Use flexible logging methods
32
+ * logger.info('User logged in', 'AuthService', { userId: '123' });
33
+ * logger.error('Database error', error.stack, 'DatabaseService', { query: '...' });
34
+ * logger.debug('Cache hit', { metadata: { key: 'users:123' } });
35
+ * ```
36
+ */
37
+ let AppLogger = AppLogger_1 = class AppLogger {
38
+ configService;
39
+ context;
40
+ pawellsLogger;
41
+ minLevel;
42
+ serviceName;
43
+ /**
44
+ * Set of field names that contain sensitive information requiring redaction in logs.
45
+ * Stored as lowercase for case-insensitive matching against object keys.
46
+ * Prevents leaking credentials, tokens, and other security-sensitive data into log output.
47
+ * Includes passwords, API keys, tokens, and payment card information.
48
+ */
49
+ sensitiveKeys = new Set([
50
+ 'password', 'passwd', 'pwd',
51
+ 'token', 'authorization', 'auth', 'authtoken', 'refreshtoken', 'accesstoken', 'bearertoken', 'sessiontoken',
52
+ 'secret', 'api_key', 'apikey', 'apisecret', 'privatekey', 'encryptionkey',
53
+ 'credit_card', 'creditcard', 'cc_number', 'ccnumber', 'cardnumber',
54
+ 'ssn', 'social_security', 'socialsecurity',
55
+ 'cookie', 'session',
56
+ ]);
57
+ constructor(configService, context = 'AppLogger') {
58
+ this.configService = configService;
59
+ this.context = context;
60
+ this.serviceName = this.configService?.get('SERVICE_NAME') ?? process.env['SERVICE_NAME'] ?? 'unknown-service';
61
+ this.minLevel = this.parseLogLevel();
62
+ // Create instance of @pawells/logger
63
+ const pawellsLogLevel = this.mapNestjsLogLevelToPawells(this.minLevel);
64
+ const logFormat = this.parseLogFormat();
65
+ this.pawellsLogger = new PawellsLogger({
66
+ service: this.serviceName,
67
+ level: pawellsLogLevel,
68
+ format: logFormat,
69
+ });
70
+ }
71
+ /**
72
+ * Parse LOG_LEVEL environment variable
73
+ * @returns LogLevel enum value (numeric)
74
+ */
75
+ parseLogLevel() {
76
+ const level = (this.configService?.get('LOG_LEVEL') ?? process.env['LOG_LEVEL'] ?? 'info').toLowerCase();
77
+ const parsedLevel = LOG_LEVEL_FROM_STRING[level];
78
+ // Warn if the LOG_LEVEL value is invalid and log valid values
79
+ if (parsedLevel === undefined) {
80
+ const validLevels = Object.keys(LOG_LEVEL_FROM_STRING).join(', ');
81
+ const message = `[AppLogger] Invalid LOG_LEVEL value: "${level}". Valid values are: ${validLevels}. Falling back to "info".`;
82
+ try {
83
+ console.error(message);
84
+ }
85
+ catch {
86
+ // Ignore console error failures silently
87
+ }
88
+ return LogLevel.INFO;
89
+ }
90
+ return parsedLevel;
91
+ }
92
+ /**
93
+ * Parse LOG_FORMAT environment variable
94
+ * @returns Format type ('json' | 'text'), defaults to 'json'
95
+ */
96
+ parseLogFormat() {
97
+ const format = (this.configService?.get('LOG_FORMAT') ?? process.env['LOG_FORMAT'] ?? 'json').toLowerCase();
98
+ // Validate format is either 'json' or 'text'
99
+ if (format !== 'json' && format !== 'text') {
100
+ const message = `[AppLogger] Invalid LOG_FORMAT value: "${format}". Valid values are: json, text. Falling back to "json".`;
101
+ try {
102
+ console.error(message);
103
+ }
104
+ catch {
105
+ // Ignore console error failures silently
106
+ }
107
+ return 'json';
108
+ }
109
+ return format;
110
+ }
111
+ /**
112
+ * Map nestjs-shared numeric LogLevel to @pawells/logger LogLevel
113
+ * @param level - Numeric LogLevel from nestjs-shared
114
+ * @returns String LogLevel for @pawells/logger
115
+ */
116
+ mapNestjsLogLevelToPawells(level) {
117
+ const mapping = {
118
+ [LogLevel.DEBUG]: PawellsLogLevel.DEBUG,
119
+ [LogLevel.INFO]: PawellsLogLevel.INFO,
120
+ [LogLevel.WARN]: PawellsLogLevel.WARN,
121
+ [LogLevel.ERROR]: PawellsLogLevel.ERROR,
122
+ [LogLevel.FATAL]: PawellsLogLevel.FATAL,
123
+ [LogLevel.SILENT]: PawellsLogLevel.SILENT,
124
+ };
125
+ return mapping[level] ?? PawellsLogLevel.INFO;
126
+ }
127
+ /**
128
+ * Check if a log level should be output
129
+ * @param level - Level to check
130
+ * @returns true if level should be logged
131
+ */
132
+ shouldLog(level) {
133
+ return level >= this.minLevel;
134
+ }
135
+ /**
136
+ * Sanitize metadata to remove sensitive information and handle circular references
137
+ * @param metadata - Metadata to sanitize
138
+ * @returns Sanitized metadata with circular references replaced by '[CIRCULAR_REF]'
139
+ */
140
+ sanitizeMetadata(metadata) {
141
+ if (!metadata)
142
+ return undefined;
143
+ const sanitized = { ...metadata };
144
+ const visited = new WeakSet();
145
+ const sanitize = (obj, depth = 0) => {
146
+ if (depth >= MAX_SANITIZE_DEPTH)
147
+ return '[DEPTH_EXCEEDED]';
148
+ if (typeof obj !== 'object' || obj === null)
149
+ return obj;
150
+ if (visited.has(obj)) {
151
+ return '[CIRCULAR_REF]';
152
+ }
153
+ visited.add(obj);
154
+ const result = Array.isArray(obj) ? [] : {};
155
+ for (const [key, value] of Object.entries(obj)) {
156
+ const lowerKey = key.toLowerCase();
157
+ const isExactMatch = this.sensitiveKeys.has(lowerKey);
158
+ if (isExactMatch) {
159
+ // Exact match: keep key, redact value
160
+ result[key] = '[REDACTED]';
161
+ }
162
+ else {
163
+ // Check if key contains any sensitive pattern
164
+ let containsSensitivePattern = false;
165
+ for (const sensitivePattern of this.sensitiveKeys) {
166
+ if (lowerKey.includes(sensitivePattern)) {
167
+ containsSensitivePattern = true;
168
+ break;
169
+ }
170
+ }
171
+ if (containsSensitivePattern) {
172
+ // Contains pattern: redact the key name itself
173
+ result['[REDACTED_KEY]'] = '[REDACTED]';
174
+ }
175
+ else {
176
+ // Not sensitive: process normally
177
+ result[key] = sanitize(value, depth + 1);
178
+ }
179
+ }
180
+ }
181
+ return result;
182
+ };
183
+ try {
184
+ const stringified = JSON.stringify(sanitize(sanitized), CreateJsonCircularReplacer('[CIRCULAR_REF]'));
185
+ return JSON.parse(stringified);
186
+ }
187
+ catch {
188
+ // If JSON.stringify fails, return the sanitized object as-is
189
+ return sanitize(sanitized);
190
+ }
191
+ }
192
+ /**
193
+ * Extract OpenTelemetry trace context
194
+ * @returns Object with traceId and spanId if available
195
+ */
196
+ extractTraceContext() {
197
+ try {
198
+ const span = trace.getSpan(context.active());
199
+ if (span) {
200
+ const spanContext = span.spanContext();
201
+ return {
202
+ traceId: spanContext.traceId,
203
+ spanId: spanContext.spanId,
204
+ };
205
+ }
206
+ }
207
+ catch {
208
+ // Silently ignore tracing errors
209
+ }
210
+ return {};
211
+ }
212
+ /**
213
+ * Build metadata with context and trace info
214
+ * @param logContext - Logger context
215
+ * @param metadata - User-provided metadata
216
+ * @returns Combined metadata
217
+ */
218
+ buildMetadata(logContext, metadata) {
219
+ const { traceId, spanId } = this.extractTraceContext();
220
+ const sanitized = this.sanitizeMetadata(metadata);
221
+ const result = {
222
+ context: logContext,
223
+ };
224
+ if (sanitized) {
225
+ result.metadata = sanitized;
226
+ }
227
+ if (traceId) {
228
+ result.traceId = traceId;
229
+ }
230
+ if (spanId) {
231
+ result.spanId = spanId;
232
+ }
233
+ return result;
234
+ }
235
+ debug(message, contextOrMetadata, metadata) {
236
+ if (this.shouldLog(LogLevel.DEBUG)) {
237
+ let ctx = this.context;
238
+ let meta = metadata;
239
+ // Handle options-object form
240
+ if (contextOrMetadata !== undefined && typeof contextOrMetadata === 'object' && !Array.isArray(contextOrMetadata) && 'context' in contextOrMetadata) {
241
+ const opts = contextOrMetadata;
242
+ ctx = opts.context ?? this.context;
243
+ meta = opts.metadata;
244
+ }
245
+ else if (typeof contextOrMetadata === 'string') {
246
+ ctx = contextOrMetadata;
247
+ }
248
+ else if (typeof contextOrMetadata === 'object' && !('context' in contextOrMetadata)) {
249
+ meta = contextOrMetadata;
250
+ }
251
+ const msg = message instanceof Error ? message.message : message;
252
+ const builtMetadata = this.buildMetadata(ctx, meta);
253
+ void this.pawellsLogger.debug(msg, builtMetadata).catch((err) => {
254
+ const fallbackMsg = `[AppLogger fallback] ${String(err)}\n`;
255
+ try {
256
+ process.stderr.write(fallbackMsg);
257
+ }
258
+ catch {
259
+ // Ignore stderr write failures silently as final fallback
260
+ }
261
+ });
262
+ }
263
+ }
264
+ info(message, contextOrMetadata, metadata) {
265
+ if (this.shouldLog(LogLevel.INFO)) {
266
+ let ctx = this.context;
267
+ let meta = metadata;
268
+ // Handle options-object form
269
+ if (contextOrMetadata !== undefined && typeof contextOrMetadata === 'object' && !Array.isArray(contextOrMetadata) && 'context' in contextOrMetadata) {
270
+ const opts = contextOrMetadata;
271
+ ctx = opts.context ?? this.context;
272
+ meta = opts.metadata;
273
+ }
274
+ else if (typeof contextOrMetadata === 'string') {
275
+ ctx = contextOrMetadata;
276
+ }
277
+ else if (typeof contextOrMetadata === 'object' && !('context' in contextOrMetadata)) {
278
+ meta = contextOrMetadata;
279
+ }
280
+ const msg = message instanceof Error ? message.message : message;
281
+ const builtMetadata = this.buildMetadata(ctx, meta);
282
+ void this.pawellsLogger.info(msg, builtMetadata).catch((err) => {
283
+ const fallbackMsg = `[AppLogger fallback] ${String(err)}\n`;
284
+ try {
285
+ process.stderr.write(fallbackMsg);
286
+ }
287
+ catch {
288
+ // Ignore stderr write failures silently as final fallback
289
+ }
290
+ });
291
+ }
292
+ }
293
+ warn(message, contextOrMetadata, metadata) {
294
+ if (this.shouldLog(LogLevel.WARN)) {
295
+ let ctx = this.context;
296
+ let meta = metadata;
297
+ // Handle options-object form
298
+ if (contextOrMetadata !== undefined && typeof contextOrMetadata === 'object' && !Array.isArray(contextOrMetadata) && 'context' in contextOrMetadata) {
299
+ const opts = contextOrMetadata;
300
+ ctx = opts.context ?? this.context;
301
+ meta = opts.metadata;
302
+ }
303
+ else if (typeof contextOrMetadata === 'string') {
304
+ ctx = contextOrMetadata;
305
+ }
306
+ else if (typeof contextOrMetadata === 'object' && !('context' in contextOrMetadata)) {
307
+ meta = contextOrMetadata;
308
+ }
309
+ const msg = message instanceof Error ? message.message : message;
310
+ const builtMetadata = this.buildMetadata(ctx, meta);
311
+ void this.pawellsLogger.warn(msg, builtMetadata).catch((err) => {
312
+ const fallbackMsg = `[AppLogger fallback] ${String(err)}\n`;
313
+ try {
314
+ process.stderr.write(fallbackMsg);
315
+ }
316
+ catch {
317
+ // Ignore stderr write failures silently as final fallback
318
+ }
319
+ });
320
+ }
321
+ }
322
+ error(message, traceOrContext, contextOrMetadata, metadata) {
323
+ if (this.shouldLog(LogLevel.ERROR)) {
324
+ let ctx = this.context;
325
+ let meta = metadata;
326
+ let trace;
327
+ // Handle options-object form
328
+ if (traceOrContext !== undefined && typeof traceOrContext === 'object' && !Array.isArray(traceOrContext) && 'context' in traceOrContext) {
329
+ const opts = traceOrContext;
330
+ ctx = opts.context ?? this.context;
331
+ meta = opts.metadata;
332
+ trace = opts.trace;
333
+ }
334
+ else if (typeof traceOrContext === 'string' && typeof contextOrMetadata === 'string') {
335
+ // error(message, trace, context, metadata?)
336
+ trace = traceOrContext;
337
+ ctx = contextOrMetadata;
338
+ }
339
+ else if (typeof traceOrContext === 'string' && typeof contextOrMetadata === 'object') {
340
+ // error(message, trace, metadata)
341
+ trace = traceOrContext;
342
+ meta = contextOrMetadata;
343
+ }
344
+ else if (typeof traceOrContext === 'string') {
345
+ // error(message, context)
346
+ ctx = traceOrContext;
347
+ }
348
+ else if (typeof contextOrMetadata === 'object') {
349
+ // error(message, metadata)
350
+ meta = contextOrMetadata;
351
+ }
352
+ const msg = message instanceof Error ? message.message : message;
353
+ const metaWithTrace = trace ? { ...meta, stack: trace } : meta;
354
+ const builtMetadata = this.buildMetadata(ctx, metaWithTrace);
355
+ void this.pawellsLogger.error(msg, builtMetadata).catch((err) => {
356
+ const fallbackMsg = `[AppLogger fallback] ${String(err)}\n`;
357
+ try {
358
+ process.stderr.write(fallbackMsg);
359
+ }
360
+ catch {
361
+ // Ignore stderr write failures silently as final fallback
362
+ }
363
+ });
364
+ }
365
+ }
366
+ fatal(message, traceOrContext, contextOrMetadata, metadata) {
367
+ if (this.shouldLog(LogLevel.FATAL)) {
368
+ let ctx = this.context;
369
+ let meta = metadata;
370
+ let trace;
371
+ // Handle options-object form
372
+ if (traceOrContext !== undefined && typeof traceOrContext === 'object' && !Array.isArray(traceOrContext) && 'context' in traceOrContext) {
373
+ const opts = traceOrContext;
374
+ ctx = opts.context ?? this.context;
375
+ meta = opts.metadata;
376
+ trace = opts.trace;
377
+ }
378
+ else if (typeof traceOrContext === 'string' && typeof contextOrMetadata === 'string') {
379
+ trace = traceOrContext;
380
+ ctx = contextOrMetadata;
381
+ }
382
+ else if (typeof traceOrContext === 'string' && typeof contextOrMetadata === 'object') {
383
+ trace = traceOrContext;
384
+ meta = contextOrMetadata;
385
+ }
386
+ else if (typeof traceOrContext === 'string') {
387
+ ctx = traceOrContext;
388
+ }
389
+ else if (typeof contextOrMetadata === 'object') {
390
+ meta = contextOrMetadata;
391
+ }
392
+ const msg = message instanceof Error ? message.message : message;
393
+ const metaWithTrace = trace ? { ...meta, stack: trace } : meta;
394
+ const builtMetadata = this.buildMetadata(ctx, metaWithTrace);
395
+ void this.pawellsLogger.fatal(msg, builtMetadata).catch((err) => {
396
+ const fallbackMsg = `[AppLogger fallback] ${String(err)}\n`;
397
+ try {
398
+ process.stderr.write(fallbackMsg);
399
+ }
400
+ catch {
401
+ // Ignore stderr write failures silently as final fallback
402
+ }
403
+ });
404
+ }
405
+ }
406
+ /**
407
+ * Create a contextual logger instance
408
+ * @param context - Context string
409
+ * @returns New AppLogger instance with context
410
+ */
411
+ createContextualLogger(context) {
412
+ return new AppLogger_1(this.configService, context);
413
+ }
414
+ };
415
+ AppLogger = AppLogger_1 = __decorate([
416
+ Injectable(),
417
+ __param(0, Inject(ConfigService)),
418
+ __param(0, Optional()),
419
+ __param(1, Optional()),
420
+ __metadata("design:paramtypes", [ConfigService, String])
421
+ ], AppLogger);
422
+ export { AppLogger };
423
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/common/services/logger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { ModuleRef } from '@nestjs/core';
3
+ import { Registry, Histogram, Counter, Gauge } from 'prom-client';
4
+ import { LazyModuleRefService } from '../utils/lazy-getter.types.js';
5
+ /**
6
+ * Metrics Registry Service.
7
+ * Centralized service for managing Prometheus metrics across the application.
8
+ *
9
+ * Features:
10
+ * - HTTP request metrics (duration, count, size)
11
+ * - Custom metric creation (counter, gauge, histogram)
12
+ * - Default Node.js metrics collection
13
+ * - Prometheus registry management
14
+ * - Per-route metric cardinality prevention
15
+ *
16
+ * @remarks
17
+ * - Controlled by METRICS_ENABLED environment variable (default: true)
18
+ * - Automatically collects Node.js default metrics
19
+ * - HTTP request metrics use normalized route paths to prevent unbounded label cardinality
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * // Record HTTP request
24
+ * metricsService.recordHttpRequest('GET', '/users/:id', 200, 45, 2048);
25
+ *
26
+ * // Create custom metric
27
+ * const customCounter = metricsService.createCounter('orders_total', 'Total orders processed');
28
+ * customCounter.inc({ status: 'completed' });
29
+ *
30
+ * // Get metrics in Prometheus format
31
+ * const metrics = await metricsService.getMetrics();
32
+ * ```
33
+ */
34
+ export declare class MetricsRegistryService implements OnModuleInit, LazyModuleRefService {
35
+ private _contextualLogger;
36
+ private readonly registry;
37
+ private readonly enabled;
38
+ private readonly httpRequestDuration;
39
+ private readonly httpRequestTotal;
40
+ private readonly httpRequestSize;
41
+ readonly Module: ModuleRef;
42
+ constructor(module: ModuleRef);
43
+ onModuleInit(): void;
44
+ /**
45
+ * Get contextual logger for metrics registry
46
+ * Memoized for performance
47
+ */
48
+ private get Logger();
49
+ /**
50
+ * Get the Prometheus registry
51
+ */
52
+ getRegistry(): Registry;
53
+ /**
54
+ * Record HTTP request metrics
55
+ */
56
+ recordHttpRequest(method: string, route: string, statusCode: number, duration: number, size?: number): void;
57
+ /**
58
+ * Record a counter metric
59
+ */
60
+ recordCounter(name: string, value?: number, labels?: Record<string, string | number>): void;
61
+ /**
62
+ * Record a gauge metric
63
+ */
64
+ recordGauge(name: string, value: number, labels?: Record<string, string | number>): void;
65
+ /**
66
+ * Record a histogram observation
67
+ */
68
+ recordHistogram(name: string, value: number, labels?: Record<string, string | number>): void;
69
+ /**
70
+ * Create and register a new counter metric
71
+ */
72
+ createCounter(name: string, help: string, labelNames?: string[]): Counter<string>;
73
+ /**
74
+ * Create and register a new gauge metric
75
+ */
76
+ createGauge(name: string, help: string, labelNames?: string[]): Gauge<string>;
77
+ /**
78
+ * Create and register a new histogram metric
79
+ */
80
+ createHistogram(name: string, help: string, labelNames?: string[], buckets?: number[]): Histogram<string>;
81
+ /**
82
+ * Register a custom metric
83
+ */
84
+ registerMetric<T>(metric: T): T;
85
+ /**
86
+ * Get metrics in Prometheus format
87
+ */
88
+ getMetrics(): Promise<string>;
89
+ /**
90
+ * Get registry metrics as JSON for debugging
91
+ */
92
+ getMetricsAsJSON(): Promise<any>;
93
+ /**
94
+ * Clear all metrics (useful for testing)
95
+ */
96
+ clear(): void;
97
+ }
98
+ //# sourceMappingURL=metrics-registry.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-registry.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/metrics-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAyB,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAMrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBACa,sBAAuB,YAAW,YAAY,EAAE,oBAAoB;IAChF,OAAO,CAAC,iBAAiB,CAAwB;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAGlC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkC;IAEtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IAEjE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,SAAgB,MAAM,EAAE,SAAS,CAAC;gBAEtB,MAAM,EAAE,SAAS;IAqCtB,YAAY,IAAI,IAAI;IAQ3B;;;OAGG;IACH,OAAO,KAAK,MAAM,GAGjB;IAED;;OAEG;IACI,WAAW,IAAI,QAAQ;IAI9B;;OAEG;IACI,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAclH;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,IAAI;IAezG;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,IAAI;IAcnG;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAM,GAAG,IAAI;IAcvG;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5F;;OAEG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAWxF;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC;IAiBpH;;OAEG;IACI,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC;IAOtC;;OAEG;IAEU,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1C;;OAEG;IAEU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC;IAI7C;;OAEG;IACI,KAAK,IAAI,IAAI;CAIpB"}