@pawells/nestjs-shared 1.0.0-dev.3052c75

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,262 @@
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 MetricsRegistryService_1;
11
+ import { Injectable } from '@nestjs/common';
12
+ import { ModuleRef } from '@nestjs/core';
13
+ import { Registry, collectDefaultMetrics, Histogram, Counter, Gauge } from 'prom-client';
14
+ import { HTTP_DURATION_BUCKETS, HTTP_REQUEST_SIZE_BUCKETS, MILLISECONDS_TO_SECONDS, } from '../constants/histogram-buckets.constants.js';
15
+ import { AppLogger } from './logger.service.js';
16
+ import { getErrorMessage } from '../utils/error.utils.js';
17
+ const HTTP_STATUS_CODE_500 = 500;
18
+ const HTTP_STATUS_CODE_400 = 400;
19
+ /**
20
+ * Metrics Registry Service.
21
+ * Centralized service for managing Prometheus metrics across the application.
22
+ *
23
+ * Features:
24
+ * - HTTP request metrics (duration, count, size)
25
+ * - Custom metric creation (counter, gauge, histogram)
26
+ * - Default Node.js metrics collection
27
+ * - Prometheus registry management
28
+ * - Per-route metric cardinality prevention
29
+ *
30
+ * @remarks
31
+ * - Controlled by METRICS_ENABLED environment variable (default: true)
32
+ * - Automatically collects Node.js default metrics
33
+ * - HTTP request metrics use normalized route paths to prevent unbounded label cardinality
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * // Record HTTP request
38
+ * metricsService.recordHttpRequest('GET', '/users/:id', 200, 45, 2048);
39
+ *
40
+ * // Create custom metric
41
+ * const customCounter = metricsService.createCounter('orders_total', 'Total orders processed');
42
+ * customCounter.inc({ status: 'completed' });
43
+ *
44
+ * // Get metrics in Prometheus format
45
+ * const metrics = await metricsService.getMetrics();
46
+ * ```
47
+ */
48
+ let MetricsRegistryService = MetricsRegistryService_1 = class MetricsRegistryService {
49
+ _contextualLogger;
50
+ registry;
51
+ enabled;
52
+ // HTTP Request Metrics
53
+ httpRequestDuration = null;
54
+ httpRequestTotal = null;
55
+ httpRequestSize = null;
56
+ Module;
57
+ constructor(module) {
58
+ this.Module = module;
59
+ this.registry = new Registry();
60
+ this.enabled = process.env['METRICS_ENABLED'] !== 'false';
61
+ if (this.enabled) {
62
+ // Collect default Node.js metrics
63
+ collectDefaultMetrics({ register: this.registry });
64
+ // HTTP Request Duration Histogram
65
+ this.httpRequestDuration = new Histogram({
66
+ name: 'http_request_duration_seconds',
67
+ help: 'Duration of HTTP requests in seconds',
68
+ labelNames: ['method', 'route', 'status_code', 'status_class'],
69
+ buckets: HTTP_DURATION_BUCKETS,
70
+ registers: [this.registry],
71
+ });
72
+ // HTTP Request Total Counter
73
+ this.httpRequestTotal = new Counter({
74
+ name: 'http_requests_total',
75
+ help: 'Total number of HTTP requests',
76
+ labelNames: ['method', 'route', 'status_code', 'status_class'],
77
+ registers: [this.registry],
78
+ });
79
+ // HTTP Request Size Histogram
80
+ this.httpRequestSize = new Histogram({
81
+ name: 'http_request_size_bytes',
82
+ help: 'Size of HTTP requests in bytes',
83
+ labelNames: ['method', 'route'],
84
+ buckets: HTTP_REQUEST_SIZE_BUCKETS,
85
+ registers: [this.registry],
86
+ });
87
+ }
88
+ }
89
+ onModuleInit() {
90
+ if (!this.enabled) {
91
+ this.Logger.info('Prometheus metrics disabled');
92
+ }
93
+ else {
94
+ this.Logger.info('MetricsRegistryService initialized with HTTP metrics');
95
+ }
96
+ }
97
+ /**
98
+ * Get contextual logger for metrics registry
99
+ * Memoized for performance
100
+ */
101
+ get Logger() {
102
+ this._contextualLogger ??= this.Module.get(AppLogger).createContextualLogger(MetricsRegistryService_1.name);
103
+ return this._contextualLogger;
104
+ }
105
+ /**
106
+ * Get the Prometheus registry
107
+ */
108
+ getRegistry() {
109
+ return this.registry;
110
+ }
111
+ /**
112
+ * Record HTTP request metrics
113
+ */
114
+ recordHttpRequest(method, route, statusCode, duration, size) {
115
+ if (!this.enabled || !this.httpRequestDuration || !this.httpRequestTotal)
116
+ return;
117
+ const statusClass = statusCode >= HTTP_STATUS_CODE_500 ? '5xx' : statusCode >= HTTP_STATUS_CODE_400 ? '4xx' : '2xx';
118
+ const labels = { method, route, status_code: statusCode.toString(), status_class: statusClass };
119
+ this.httpRequestDuration.observe(labels, duration / MILLISECONDS_TO_SECONDS); // Convert to seconds
120
+ this.httpRequestTotal.inc(labels);
121
+ if (size !== undefined && this.httpRequestSize) {
122
+ this.httpRequestSize.observe({ method, route }, size);
123
+ }
124
+ }
125
+ /**
126
+ * Record a counter metric
127
+ */
128
+ recordCounter(name, value = 1, labels = {}) {
129
+ if (!this.enabled)
130
+ return;
131
+ try {
132
+ const counter = this.registry.getSingleMetric(name);
133
+ if (counter) {
134
+ counter.inc(labels, value);
135
+ }
136
+ else {
137
+ this.Logger.warn(`Counter metric '${name}' not found in registry`);
138
+ }
139
+ }
140
+ catch (error) {
141
+ const errorMsg = getErrorMessage(error);
142
+ this.Logger.error(`Failed to record counter '${name}': ${errorMsg}`);
143
+ }
144
+ }
145
+ /**
146
+ * Record a gauge metric
147
+ */
148
+ recordGauge(name, value, labels = {}) {
149
+ if (!this.enabled)
150
+ return;
151
+ try {
152
+ const gauge = this.registry.getSingleMetric(name);
153
+ if (gauge) {
154
+ gauge.set(labels, value);
155
+ }
156
+ else {
157
+ this.Logger.warn(`Gauge metric '${name}' not found in registry`);
158
+ }
159
+ }
160
+ catch (error) {
161
+ this.Logger.error(`Failed to record gauge '${name}': ${getErrorMessage(error)}`);
162
+ }
163
+ }
164
+ /**
165
+ * Record a histogram observation
166
+ */
167
+ recordHistogram(name, value, labels = {}) {
168
+ if (!this.enabled)
169
+ return;
170
+ try {
171
+ const histogram = this.registry.getSingleMetric(name);
172
+ if (histogram) {
173
+ histogram.observe(labels, value);
174
+ }
175
+ else {
176
+ this.Logger.warn(`Histogram metric '${name}' not found in registry`);
177
+ }
178
+ }
179
+ catch (error) {
180
+ this.Logger.error(`Failed to record histogram '${name}': ${getErrorMessage(error)}`);
181
+ }
182
+ }
183
+ /**
184
+ * Create and register a new counter metric
185
+ */
186
+ createCounter(name, help, labelNames = []) {
187
+ const counter = new Counter({
188
+ name,
189
+ help,
190
+ labelNames,
191
+ registers: [this.registry],
192
+ });
193
+ this.Logger.info(`Created counter metric: ${name}`);
194
+ return counter;
195
+ }
196
+ /**
197
+ * Create and register a new gauge metric
198
+ */
199
+ createGauge(name, help, labelNames = []) {
200
+ const gauge = new Gauge({
201
+ name,
202
+ help,
203
+ labelNames,
204
+ registers: [this.registry],
205
+ });
206
+ this.Logger.info(`Created gauge metric: ${name}`);
207
+ return gauge;
208
+ }
209
+ /**
210
+ * Create and register a new histogram metric
211
+ */
212
+ createHistogram(name, help, labelNames = [], buckets) {
213
+ const config = {
214
+ name,
215
+ help,
216
+ labelNames,
217
+ registers: [this.registry],
218
+ };
219
+ if (buckets !== undefined) {
220
+ config.buckets = buckets;
221
+ }
222
+ const histogram = new Histogram(config);
223
+ this.Logger.info(`Created histogram metric: ${name}`);
224
+ return histogram;
225
+ }
226
+ /**
227
+ * Register a custom metric
228
+ */
229
+ registerMetric(metric) {
230
+ if (metric && typeof metric === 'object' && 'register' in metric && typeof metric.register === 'function') {
231
+ metric.register(this.registry);
232
+ }
233
+ return metric;
234
+ }
235
+ /**
236
+ * Get metrics in Prometheus format
237
+ */
238
+ // eslint-disable-next-line require-await
239
+ async getMetrics() {
240
+ return this.registry.metrics();
241
+ }
242
+ /**
243
+ * Get registry metrics as JSON for debugging
244
+ */
245
+ // eslint-disable-next-line require-await
246
+ async getMetricsAsJSON() {
247
+ return this.registry.getMetricsAsJSON();
248
+ }
249
+ /**
250
+ * Clear all metrics (useful for testing)
251
+ */
252
+ clear() {
253
+ this.registry.clear();
254
+ this.Logger.warn('All metrics cleared');
255
+ }
256
+ };
257
+ MetricsRegistryService = MetricsRegistryService_1 = __decorate([
258
+ Injectable(),
259
+ __metadata("design:paramtypes", [ModuleRef])
260
+ ], MetricsRegistryService);
261
+ export { MetricsRegistryService };
262
+ //# sourceMappingURL=metrics-registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-registry.service.js","sourceRoot":"","sources":["../../../src/common/services/metrics-registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { LoggerService } from '@nestjs/common';
2
+ import { AppLogger } from './logger.service.js';
3
+ /**
4
+ * Adapts {@link AppLogger} to the NestJS {@link LoggerService} interface.
5
+ *
6
+ * Pass an instance to `NestFactory.create()` via the `logger` option to route
7
+ * all framework bootstrap and lifecycle logs through `AppLogger`, eliminating
8
+ * the default `[Nest]` format and producing a single, consistent log format.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const app = await NestFactory.create(AppModule, {
13
+ * logger: new NestLoggerAdapter(),
14
+ * });
15
+ * ```
16
+ */
17
+ export declare class NestLoggerAdapter implements LoggerService {
18
+ private readonly logger;
19
+ /**
20
+ * @param logger - Optional existing `AppLogger` instance to delegate to.
21
+ * When omitted, a new `AppLogger` is created using environment variables
22
+ * (`SERVICE_NAME`, `LOG_LEVEL`, `LOG_FORMAT`).
23
+ */
24
+ constructor(logger?: AppLogger);
25
+ /** Maps NestJS `log()` (INFO level) to {@link AppLogger.info}. */
26
+ log(message: any, ...optionalParams: any[]): void;
27
+ /**
28
+ * Maps NestJS `error()` to {@link AppLogger.error}.
29
+ *
30
+ * NestJS calls this as `error(message, stack?, context?)`.
31
+ * When a stack trace is present it is forwarded as `metadata.stack`.
32
+ */
33
+ error(message: any, ...optionalParams: any[]): void;
34
+ /** Maps NestJS `warn()` to {@link AppLogger.warn}. */
35
+ warn(message: any, ...optionalParams: any[]): void;
36
+ /** Maps NestJS `debug()` to {@link AppLogger.debug}. */
37
+ debug(message: any, ...optionalParams: any[]): void;
38
+ /**
39
+ * Maps NestJS `verbose()` to {@link AppLogger.debug}.
40
+ * `AppLogger` has no `verbose` level; `debug` is the nearest equivalent.
41
+ */
42
+ verbose(message: any, ...optionalParams: any[]): void;
43
+ /** Maps NestJS `fatal()` to {@link AppLogger.fatal}. */
44
+ fatal(message: any, ...optionalParams: any[]): void;
45
+ /**
46
+ * Extracts the NestJS context string (e.g. `"NestFactory"`, `"RouterExplorer"`)
47
+ * from variadic params. NestJS passes context as the last string argument.
48
+ */
49
+ private extractContext;
50
+ /**
51
+ * Extracts `stack` and `context` from variadic error params.
52
+ *
53
+ * NestJS error signature: `error(message, stack?, context?)` where `stack`
54
+ * is a multiline string (contains `\n`) or begins with `"Error:"`.
55
+ */
56
+ private extractErrorParams;
57
+ /** Returns `true` if the string looks like a stack trace. */
58
+ private looksLikeStack;
59
+ /** Coerces any log message type to a string. */
60
+ private formatMessage;
61
+ }
62
+ //# sourceMappingURL=nest-logger-adapter.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-logger-adapter.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/nest-logger-adapter.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,SAAS;IAI9B,kEAAkE;IAC3D,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAKxD;;;;;OAKG;IACI,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAU1D,sDAAsD;IAC/C,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAKzD,wDAAwD;IACjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAK1D;;;OAGG;IACI,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAK5D,wDAAwD;IACjD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAK1D;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuB1B,6DAA6D;IAC7D,OAAO,CAAC,cAAc;IAItB,gDAAgD;IAChD,OAAO,CAAC,aAAa;CAKrB"}
@@ -0,0 +1,120 @@
1
+ import { AppLogger } from './logger.service.js';
2
+ /**
3
+ * Adapts {@link AppLogger} to the NestJS {@link LoggerService} interface.
4
+ *
5
+ * Pass an instance to `NestFactory.create()` via the `logger` option to route
6
+ * all framework bootstrap and lifecycle logs through `AppLogger`, eliminating
7
+ * the default `[Nest]` format and producing a single, consistent log format.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const app = await NestFactory.create(AppModule, {
12
+ * logger: new NestLoggerAdapter(),
13
+ * });
14
+ * ```
15
+ */
16
+ export class NestLoggerAdapter {
17
+ logger;
18
+ /**
19
+ * @param logger - Optional existing `AppLogger` instance to delegate to.
20
+ * When omitted, a new `AppLogger` is created using environment variables
21
+ * (`SERVICE_NAME`, `LOG_LEVEL`, `LOG_FORMAT`).
22
+ */
23
+ constructor(logger) {
24
+ this.logger = logger ?? new AppLogger();
25
+ }
26
+ /** Maps NestJS `log()` (INFO level) to {@link AppLogger.info}. */
27
+ log(message, ...optionalParams) {
28
+ const context = this.extractContext(optionalParams);
29
+ this.logger.info(this.formatMessage(message), context);
30
+ }
31
+ /**
32
+ * Maps NestJS `error()` to {@link AppLogger.error}.
33
+ *
34
+ * NestJS calls this as `error(message, stack?, context?)`.
35
+ * When a stack trace is present it is forwarded as `metadata.stack`.
36
+ */
37
+ error(message, ...optionalParams) {
38
+ const { context, stack } = this.extractErrorParams(optionalParams);
39
+ const msg = this.formatMessage(message);
40
+ if (stack !== undefined) {
41
+ this.logger.error(msg, context, { stack });
42
+ }
43
+ else {
44
+ this.logger.error(msg, context);
45
+ }
46
+ }
47
+ /** Maps NestJS `warn()` to {@link AppLogger.warn}. */
48
+ warn(message, ...optionalParams) {
49
+ const context = this.extractContext(optionalParams);
50
+ this.logger.warn(this.formatMessage(message), context);
51
+ }
52
+ /** Maps NestJS `debug()` to {@link AppLogger.debug}. */
53
+ debug(message, ...optionalParams) {
54
+ const context = this.extractContext(optionalParams);
55
+ this.logger.debug(this.formatMessage(message), context);
56
+ }
57
+ /**
58
+ * Maps NestJS `verbose()` to {@link AppLogger.debug}.
59
+ * `AppLogger` has no `verbose` level; `debug` is the nearest equivalent.
60
+ */
61
+ verbose(message, ...optionalParams) {
62
+ const context = this.extractContext(optionalParams);
63
+ this.logger.debug(this.formatMessage(message), context);
64
+ }
65
+ /** Maps NestJS `fatal()` to {@link AppLogger.fatal}. */
66
+ fatal(message, ...optionalParams) {
67
+ const context = this.extractContext(optionalParams);
68
+ this.logger.fatal(this.formatMessage(message), context);
69
+ }
70
+ /**
71
+ * Extracts the NestJS context string (e.g. `"NestFactory"`, `"RouterExplorer"`)
72
+ * from variadic params. NestJS passes context as the last string argument.
73
+ */
74
+ extractContext(params) {
75
+ if (params.length === 0)
76
+ return undefined;
77
+ const last = params[params.length - 1];
78
+ return typeof last === 'string' ? last : undefined;
79
+ }
80
+ /**
81
+ * Extracts `stack` and `context` from variadic error params.
82
+ *
83
+ * NestJS error signature: `error(message, stack?, context?)` where `stack`
84
+ * is a multiline string (contains `\n`) or begins with `"Error:"`.
85
+ */
86
+ extractErrorParams(params) {
87
+ if (params.length === 0)
88
+ return {};
89
+ if (params.length === 1) {
90
+ const [param] = params;
91
+ if (typeof param !== 'string')
92
+ return {};
93
+ return this.looksLikeStack(param) ? { stack: param } : { context: param };
94
+ }
95
+ const [first, ...rest] = params;
96
+ if (typeof first === 'string' && this.looksLikeStack(first)) {
97
+ const contextParam = rest[rest.length - 1];
98
+ return {
99
+ stack: first,
100
+ context: typeof contextParam === 'string' ? contextParam : undefined,
101
+ };
102
+ }
103
+ // No stack — treat last string param as context
104
+ const last = params[params.length - 1];
105
+ return { context: typeof last === 'string' ? last : undefined };
106
+ }
107
+ /** Returns `true` if the string looks like a stack trace. */
108
+ looksLikeStack(value) {
109
+ return value.includes('\n') || value.startsWith('Error:');
110
+ }
111
+ /** Coerces any log message type to a string. */
112
+ formatMessage(message) {
113
+ if (message instanceof Error)
114
+ return message.message;
115
+ if (typeof message === 'string')
116
+ return message;
117
+ return String(message);
118
+ }
119
+ }
120
+ //# sourceMappingURL=nest-logger-adapter.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-logger-adapter.service.js","sourceRoot":"","sources":["../../../src/common/services/nest-logger-adapter.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Extracts a string representation of an error suitable for use as a log
3
+ * stack-trace argument. Returns the stack trace when available, falls back to
4
+ * the error message, and stringifies any non-Error thrown value.
5
+ *
6
+ * @param error Any caught value (ideally an Error, but can be anything)
7
+ */
8
+ export declare function getErrorStack(error: unknown): string;
9
+ /**
10
+ * Extracts the human-readable message from a caught value.
11
+ * Returns `error.message` for Error instances and stringifies anything else.
12
+ *
13
+ * @param error Any caught value (ideally an Error, but can be anything)
14
+ */
15
+ export declare function getErrorMessage(error: unknown): string;
16
+ //# sourceMappingURL=error.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.utils.d.ts","sourceRoot":"","sources":["../../../src/common/utils/error.utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKpD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Extracts a string representation of an error suitable for use as a log
3
+ * stack-trace argument. Returns the stack trace when available, falls back to
4
+ * the error message, and stringifies any non-Error thrown value.
5
+ *
6
+ * @param error Any caught value (ideally an Error, but can be anything)
7
+ */
8
+ export function getErrorStack(error) {
9
+ if (error instanceof Error) {
10
+ return error.stack ?? error.message;
11
+ }
12
+ return String(error);
13
+ }
14
+ /**
15
+ * Extracts the human-readable message from a caught value.
16
+ * Returns `error.message` for Error instances and stringifies anything else.
17
+ *
18
+ * @param error Any caught value (ideally an Error, but can be anything)
19
+ */
20
+ export function getErrorMessage(error) {
21
+ if (error instanceof Error) {
22
+ return error.message;
23
+ }
24
+ return String(error);
25
+ }
26
+ //# sourceMappingURL=error.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.utils.js","sourceRoot":"","sources":["../../../src/common/utils/error.utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}