microservice-common-nestjs 1.0.0

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 (90) hide show
  1. package/README.md +452 -0
  2. package/dist/cache/cache.module.d.ts +5 -0
  3. package/dist/cache/cache.module.js +32 -0
  4. package/dist/cache/cache.module.js.map +1 -0
  5. package/dist/cache/cache.service.d.ts +18 -0
  6. package/dist/cache/cache.service.js +68 -0
  7. package/dist/cache/cache.service.js.map +1 -0
  8. package/dist/client/client.interface.d.ts +14 -0
  9. package/dist/client/client.interface.js +3 -0
  10. package/dist/client/client.interface.js.map +1 -0
  11. package/dist/client/http-client.module.d.ts +2 -0
  12. package/dist/client/http-client.module.js +22 -0
  13. package/dist/client/http-client.module.js.map +1 -0
  14. package/dist/client/http-client.service.d.ts +12 -0
  15. package/dist/client/http-client.service.js +100 -0
  16. package/dist/client/http-client.service.js.map +1 -0
  17. package/dist/config/config.interface.d.ts +42 -0
  18. package/dist/config/config.interface.js +3 -0
  19. package/dist/config/config.interface.js.map +1 -0
  20. package/dist/config/config.module.d.ts +2 -0
  21. package/dist/config/config.module.js +28 -0
  22. package/dist/config/config.module.js.map +1 -0
  23. package/dist/config/config.service.d.ts +10 -0
  24. package/dist/config/config.service.js +85 -0
  25. package/dist/config/config.service.js.map +1 -0
  26. package/dist/database/prisma.module.d.ts +21 -0
  27. package/dist/database/prisma.module.js +121 -0
  28. package/dist/database/prisma.module.js.map +1 -0
  29. package/dist/health/health.controller.d.ts +10 -0
  30. package/dist/health/health.controller.js +75 -0
  31. package/dist/health/health.controller.js.map +1 -0
  32. package/dist/health/health.interface.d.ts +14 -0
  33. package/dist/health/health.interface.js +3 -0
  34. package/dist/health/health.interface.js.map +1 -0
  35. package/dist/health/health.module.d.ts +2 -0
  36. package/dist/health/health.module.js +23 -0
  37. package/dist/health/health.module.js.map +1 -0
  38. package/dist/health/health.service.d.ts +10 -0
  39. package/dist/health/health.service.js +25 -0
  40. package/dist/health/health.service.js.map +1 -0
  41. package/dist/http/http-response.decorator.d.ts +6 -0
  42. package/dist/http/http-response.decorator.js +8 -0
  43. package/dist/http/http-response.decorator.js.map +1 -0
  44. package/dist/http/http-response.module.d.ts +2 -0
  45. package/dist/http/http-response.module.js +22 -0
  46. package/dist/http/http-response.module.js.map +1 -0
  47. package/dist/http/http-response.service.d.ts +17 -0
  48. package/dist/http/http-response.service.js +73 -0
  49. package/dist/http/http-response.service.js.map +1 -0
  50. package/dist/http/response.interface.d.ts +10 -0
  51. package/dist/http/response.interface.js +3 -0
  52. package/dist/http/response.interface.js.map +1 -0
  53. package/dist/i18n/i18n.module.d.ts +5 -0
  54. package/dist/i18n/i18n.module.js +32 -0
  55. package/dist/i18n/i18n.module.js.map +1 -0
  56. package/dist/i18n/i18n.service.d.ts +16 -0
  57. package/dist/i18n/i18n.service.js +58 -0
  58. package/dist/i18n/i18n.service.js.map +1 -0
  59. package/dist/index.d.ts +32 -0
  60. package/dist/index.js +50 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/microservice-common.module.d.ts +17 -0
  63. package/dist/microservice-common.module.js +76 -0
  64. package/dist/microservice-common.module.js.map +1 -0
  65. package/dist/middleware/correlation-id.middleware.d.ts +9 -0
  66. package/dist/middleware/correlation-id.middleware.js +34 -0
  67. package/dist/middleware/correlation-id.middleware.js.map +1 -0
  68. package/dist/middleware/cors.middleware.d.ts +9 -0
  69. package/dist/middleware/cors.middleware.js +71 -0
  70. package/dist/middleware/cors.middleware.js.map +1 -0
  71. package/dist/middleware/logging.middleware.d.ts +10 -0
  72. package/dist/middleware/logging.middleware.js +75 -0
  73. package/dist/middleware/logging.middleware.js.map +1 -0
  74. package/dist/middleware/middleware.interface.d.ts +18 -0
  75. package/dist/middleware/middleware.interface.js +3 -0
  76. package/dist/middleware/middleware.interface.js.map +1 -0
  77. package/dist/middleware/middleware.module.d.ts +9 -0
  78. package/dist/middleware/middleware.module.js +61 -0
  79. package/dist/middleware/middleware.module.js.map +1 -0
  80. package/dist/prometheus/prometheus.module.d.ts +8 -0
  81. package/dist/prometheus/prometheus.module.js +44 -0
  82. package/dist/prometheus/prometheus.module.js.map +1 -0
  83. package/dist/prometheus/prometheus.service.d.ts +14 -0
  84. package/dist/prometheus/prometheus.service.js +56 -0
  85. package/dist/prometheus/prometheus.service.js.map +1 -0
  86. package/dist/rate-limit/rate-limit.module.d.ts +4 -0
  87. package/dist/rate-limit/rate-limit.module.js +47 -0
  88. package/dist/rate-limit/rate-limit.module.js.map +1 -0
  89. package/dist/tsconfig.tsbuildinfo +1 -0
  90. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.middleware.js","sourceRoot":"","sources":["../../src/middleware/cors.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAKrD,IAAM,cAAc,GAApB,MAAM,cAAc;IAGzB,YAAY,UAA6C;QACvD,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;YACrE,cAAc,EAAE;gBACd,cAAc;gBACd,eAAe;gBACf,cAAc;gBACd,mBAAmB;gBACnB,sBAAsB;aACvB;YACD,cAAc,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAClD,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACjD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAElC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC;YACpC,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC;YACjC,GAAG,CAAC,SAAS,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,eAAe,CAAC,MAAe;QACrC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAjEY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;;GACA,cAAc,CAiE1B"}
@@ -0,0 +1,10 @@
1
+ import { NestMiddleware } from '@nestjs/common';
2
+ import { Request, Response, NextFunction } from 'express';
3
+ import { LoggingOptions } from '../middleware/middleware.interface';
4
+ export declare class LoggingMiddleware implements NestMiddleware {
5
+ private readonly logger;
6
+ private readonly options;
7
+ constructor(options?: LoggingOptions);
8
+ use(req: Request, res: Response, next: NextFunction): void;
9
+ private shouldIgnoreRoute;
10
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.LoggingMiddleware = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ let LoggingMiddleware = class LoggingMiddleware {
15
+ constructor(options) {
16
+ this.logger = new common_1.Logger('HTTP');
17
+ this.options = {
18
+ logRequestBody: options?.logRequestBody ?? false,
19
+ logResponseBody: options?.logResponseBody ?? false,
20
+ logHeaders: options?.logHeaders ?? false,
21
+ ignoreRoutes: options?.ignoreRoutes || ['/health', '/ping', '/metrics'],
22
+ };
23
+ }
24
+ use(req, res, next) {
25
+ const { method, originalUrl, ip } = req;
26
+ const startTime = Date.now();
27
+ const correlationId = req.headers['x-correlation-id'];
28
+ if (this.shouldIgnoreRoute(originalUrl)) {
29
+ return next();
30
+ }
31
+ const logData = {
32
+ method,
33
+ url: originalUrl,
34
+ ip,
35
+ correlationId,
36
+ };
37
+ if (this.options.logHeaders) {
38
+ logData.headers = req.headers;
39
+ }
40
+ if (this.options.logRequestBody && req.body) {
41
+ logData.body = req.body;
42
+ }
43
+ this.logger.log(JSON.stringify(logData));
44
+ res.on('finish', () => {
45
+ const { statusCode } = res;
46
+ const duration = Date.now() - startTime;
47
+ const responseLog = {
48
+ method,
49
+ url: originalUrl,
50
+ statusCode,
51
+ duration: `${duration}ms`,
52
+ correlationId,
53
+ };
54
+ if (this.options.logResponseBody && res.locals.responseBody) {
55
+ responseLog.body = res.locals.responseBody;
56
+ }
57
+ if (statusCode >= 400) {
58
+ this.logger.error(JSON.stringify(responseLog));
59
+ }
60
+ else {
61
+ this.logger.log(JSON.stringify(responseLog));
62
+ }
63
+ });
64
+ next();
65
+ }
66
+ shouldIgnoreRoute(url) {
67
+ return this.options.ignoreRoutes?.some((route) => url.startsWith(route)) ?? false;
68
+ }
69
+ };
70
+ exports.LoggingMiddleware = LoggingMiddleware;
71
+ exports.LoggingMiddleware = LoggingMiddleware = __decorate([
72
+ (0, common_1.Injectable)(),
73
+ __metadata("design:paramtypes", [Object])
74
+ ], LoggingMiddleware);
75
+ //# sourceMappingURL=logging.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.middleware.js","sourceRoot":"","sources":["../../src/middleware/logging.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoE;AAK7D,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAI5B,YAAY,OAAwB;QAHnB,WAAM,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;QAI3C,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,KAAK;YAChD,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,KAAK;YAClD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,KAAK;YACxC,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC;SACxE,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB;QACjD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAW,CAAC;QAEhE,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAA4B;YACvC,MAAM;YACN,GAAG,EAAE,WAAW;YAChB,EAAE;YACF,aAAa;SACd,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,MAAM,WAAW,GAA4B;gBAC3C,MAAM;gBACN,GAAG,EAAE,WAAW;gBAChB,UAAU;gBACV,QAAQ,EAAE,GAAG,QAAQ,IAAI;gBACzB,aAAa;aACd,CAAC;YAEF,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;YAC7C,CAAC;YAED,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC;IAEO,iBAAiB,CAAC,GAAW;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC;IACpF,CAAC;CACF,CAAA;AApEY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;;GACA,iBAAiB,CAoE7B"}
@@ -0,0 +1,18 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export interface CorrelationIdOptions {
3
+ headerName?: string;
4
+ generateIfMissing?: boolean;
5
+ }
6
+ export interface LoggingOptions {
7
+ logRequestBody?: boolean;
8
+ logResponseBody?: boolean;
9
+ logHeaders?: boolean;
10
+ ignoreRoutes?: string[];
11
+ }
12
+ export interface JwtOptions {
13
+ secret: string;
14
+ tokenLookup?: string;
15
+ signingMethod?: string;
16
+ ignoreRoutes?: string[];
17
+ }
18
+ export type MiddlewareFunction = (req: Request, res: Response, next: NextFunction) => void;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=middleware.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.interface.js","sourceRoot":"","sources":["../../src/middleware/middleware.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { MiddlewareConsumer, NestModule, DynamicModule } from '@nestjs/common';
2
+ import { CorrelationIdOptions, LoggingOptions } from '../middleware/middleware.interface';
3
+ export declare class MiddlewareModule implements NestModule {
4
+ private readonly correlationIdOptions?;
5
+ private readonly loggingOptions?;
6
+ constructor(correlationIdOptions?: CorrelationIdOptions, loggingOptions?: LoggingOptions);
7
+ static forRoot(correlationIdOptions?: CorrelationIdOptions, loggingOptions?: LoggingOptions): DynamicModule;
8
+ configure(consumer: MiddlewareConsumer): void;
9
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var MiddlewareModule_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.MiddlewareModule = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const correlation_id_middleware_1 = require("../middleware/correlation-id.middleware");
16
+ const logging_middleware_1 = require("../middleware/logging.middleware");
17
+ let MiddlewareModule = MiddlewareModule_1 = class MiddlewareModule {
18
+ constructor(correlationIdOptions, loggingOptions) {
19
+ this.correlationIdOptions = correlationIdOptions;
20
+ this.loggingOptions = loggingOptions;
21
+ }
22
+ static forRoot(correlationIdOptions, loggingOptions) {
23
+ return {
24
+ module: MiddlewareModule_1,
25
+ providers: [
26
+ {
27
+ provide: correlation_id_middleware_1.CorrelationIdMiddleware,
28
+ useValue: new correlation_id_middleware_1.CorrelationIdMiddleware(correlationIdOptions),
29
+ },
30
+ {
31
+ provide: logging_middleware_1.LoggingMiddleware,
32
+ useValue: new logging_middleware_1.LoggingMiddleware(loggingOptions),
33
+ },
34
+ {
35
+ provide: MiddlewareModule_1,
36
+ useFactory: () => {
37
+ return new MiddlewareModule_1(correlationIdOptions, loggingOptions);
38
+ },
39
+ },
40
+ ],
41
+ exports: [correlation_id_middleware_1.CorrelationIdMiddleware, logging_middleware_1.LoggingMiddleware],
42
+ };
43
+ }
44
+ configure(consumer) {
45
+ const correlationIdMiddleware = new correlation_id_middleware_1.CorrelationIdMiddleware(this.correlationIdOptions);
46
+ const loggingMiddleware = new logging_middleware_1.LoggingMiddleware(this.loggingOptions);
47
+ const correlationIdHandler = (req, res, next) => {
48
+ correlationIdMiddleware.use(req, res, next);
49
+ };
50
+ const loggingHandler = (req, res, next) => {
51
+ loggingMiddleware.use(req, res, next);
52
+ };
53
+ consumer.apply(correlationIdHandler, loggingHandler).forRoutes('*');
54
+ }
55
+ };
56
+ exports.MiddlewareModule = MiddlewareModule;
57
+ exports.MiddlewareModule = MiddlewareModule = MiddlewareModule_1 = __decorate([
58
+ (0, common_1.Module)({}),
59
+ __metadata("design:paramtypes", [Object, Object])
60
+ ], MiddlewareModule);
61
+ //# sourceMappingURL=middleware.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.module.js","sourceRoot":"","sources":["../../src/middleware/middleware.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAuF;AAEvF,sFAAiF;AACjF,wEAAoE;AAQ7D,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAI3B,YAAY,oBAA2C,EAAE,cAA+B;QACtF,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,oBAA2C,EAC3C,cAA+B;QAE/B,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mDAAuB;oBAChC,QAAQ,EAAE,IAAI,mDAAuB,CAAC,oBAAoB,CAAC;iBAC5D;gBACD;oBACE,OAAO,EAAE,sCAAiB;oBAC1B,QAAQ,EAAE,IAAI,sCAAiB,CAAC,cAAc,CAAC;iBAChD;gBACD;oBACE,OAAO,EAAE,kBAAgB;oBACzB,UAAU,EAAE,GAAG,EAAE;wBACf,OAAO,IAAI,kBAAgB,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;oBACpE,CAAC;iBACF;aACF;YACD,OAAO,EAAE,CAAC,mDAAuB,EAAE,sCAAiB,CAAC;SACtD,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAA4B;QAEpC,MAAM,uBAAuB,GAAG,IAAI,mDAAuB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvF,MAAM,iBAAiB,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAGrE,MAAM,oBAAoB,GAAuB,CAC/C,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;YACF,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,MAAM,cAAc,GAAuB,CACzC,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;YACF,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC;QAGF,QAAQ,CAAC,KAAK,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;CACF,CAAA;AA5DY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,eAAM,EAAC,EAAE,CAAC;;GACE,gBAAgB,CA4D5B"}
@@ -0,0 +1,8 @@
1
+ import { PrometheusService } from '../prometheus/prometheus.service';
2
+ export declare class PrometheusController {
3
+ private readonly prometheusService;
4
+ constructor(prometheusService: PrometheusService);
5
+ getMetrics(): Promise<string>;
6
+ }
7
+ export declare class PrometheusModule {
8
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PrometheusModule = exports.PrometheusController = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const prometheus_service_1 = require("../prometheus/prometheus.service");
15
+ let PrometheusController = class PrometheusController {
16
+ constructor(prometheusService) {
17
+ this.prometheusService = prometheusService;
18
+ }
19
+ async getMetrics() {
20
+ return this.prometheusService.getMetrics();
21
+ }
22
+ };
23
+ exports.PrometheusController = PrometheusController;
24
+ __decorate([
25
+ (0, common_1.Get)(),
26
+ __metadata("design:type", Function),
27
+ __metadata("design:paramtypes", []),
28
+ __metadata("design:returntype", Promise)
29
+ ], PrometheusController.prototype, "getMetrics", null);
30
+ exports.PrometheusController = PrometheusController = __decorate([
31
+ (0, common_1.Controller)('metrics'),
32
+ __metadata("design:paramtypes", [prometheus_service_1.PrometheusService])
33
+ ], PrometheusController);
34
+ let PrometheusModule = class PrometheusModule {
35
+ };
36
+ exports.PrometheusModule = PrometheusModule;
37
+ exports.PrometheusModule = PrometheusModule = __decorate([
38
+ (0, common_1.Module)({
39
+ providers: [prometheus_service_1.PrometheusService],
40
+ controllers: [PrometheusController],
41
+ exports: [prometheus_service_1.PrometheusService],
42
+ })
43
+ ], PrometheusModule);
44
+ //# sourceMappingURL=prometheus.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.module.js","sourceRoot":"","sources":["../../src/prometheus/prometheus.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyD;AACzD,wEAAoE;AAG7D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAG,CAAC;IAG/D,AAAN,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;IAC7C,CAAC;CACF,CAAA;AAPY,oDAAoB;AAIzB;IADL,IAAA,YAAG,GAAE;;;;sDAGL;+BANU,oBAAoB;IADhC,IAAA,mBAAU,EAAC,SAAS,CAAC;qCAE4B,sCAAiB;GADtD,oBAAoB,CAOhC;AAOM,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAL5B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,sCAAiB,CAAC;QAC9B,WAAW,EAAE,CAAC,oBAAoB,CAAC;QACnC,OAAO,EAAE,CAAC,sCAAiB,CAAC;KAC7B,CAAC;GACW,gBAAgB,CAAG"}
@@ -0,0 +1,14 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { Registry, Counter, Histogram } from 'prom-client';
3
+ export declare class PrometheusService implements OnModuleInit {
4
+ private readonly logger;
5
+ private readonly register;
6
+ private readonly httpRequestDuration;
7
+ private readonly httpRequestTotal;
8
+ constructor();
9
+ onModuleInit(): void;
10
+ getRegister(): Registry;
11
+ getHttpRequestDuration(): Histogram<string>;
12
+ getHttpRequestTotal(): Counter<string>;
13
+ getMetrics(): Promise<string>;
14
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var PrometheusService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PrometheusService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const prom_client_1 = require("prom-client");
16
+ let PrometheusService = PrometheusService_1 = class PrometheusService {
17
+ constructor() {
18
+ this.logger = new common_1.Logger(PrometheusService_1.name);
19
+ this.register = new prom_client_1.Registry();
20
+ (0, prom_client_1.collectDefaultMetrics)({ register: this.register });
21
+ this.httpRequestDuration = new prom_client_1.Histogram({
22
+ name: 'http_request_duration_seconds',
23
+ help: 'Duration of HTTP requests in seconds',
24
+ labelNames: ['method', 'route', 'status_code'],
25
+ buckets: [0.1, 0.3, 0.5, 0.7, 1, 3, 5, 7, 10],
26
+ registers: [this.register],
27
+ });
28
+ this.httpRequestTotal = new prom_client_1.Counter({
29
+ name: 'http_requests_total',
30
+ help: 'Total number of HTTP requests',
31
+ labelNames: ['method', 'route', 'status_code'],
32
+ registers: [this.register],
33
+ });
34
+ }
35
+ onModuleInit() {
36
+ this.logger.log('Prometheus metrics initialized');
37
+ }
38
+ getRegister() {
39
+ return this.register;
40
+ }
41
+ getHttpRequestDuration() {
42
+ return this.httpRequestDuration;
43
+ }
44
+ getHttpRequestTotal() {
45
+ return this.httpRequestTotal;
46
+ }
47
+ async getMetrics() {
48
+ return this.register.metrics();
49
+ }
50
+ };
51
+ exports.PrometheusService = PrometheusService;
52
+ exports.PrometheusService = PrometheusService = PrometheusService_1 = __decorate([
53
+ (0, common_1.Injectable)(),
54
+ __metadata("design:paramtypes", [])
55
+ ], PrometheusService);
56
+ //# sourceMappingURL=prometheus.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.service.js","sourceRoot":"","sources":["../../src/prometheus/prometheus.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAkE;AAClE,6CAAkF;AAG3E,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAM5B;QALiB,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;QAM3D,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAQ,EAAE,CAAC;QAC/B,IAAA,mCAAqB,EAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAGnD,IAAI,CAAC,mBAAmB,GAAG,IAAI,uBAAS,CAAC;YACvC,IAAI,EAAE,+BAA+B;YACrC,IAAI,EAAE,sCAAsC;YAC5C,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC;YAC9C,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC3B,CAAC,CAAC;QAGH,IAAI,CAAC,gBAAgB,GAAG,IAAI,qBAAO,CAAC;YAClC,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,+BAA+B;YACrC,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC;YAC9C,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,sBAAsB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;CACF,CAAA;AA/CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;;GACA,iBAAiB,CA+C7B"}
@@ -0,0 +1,4 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export declare class RateLimitModule {
3
+ static forRoot(): DynamicModule;
4
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var RateLimitModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.RateLimitModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const throttler_1 = require("@nestjs/throttler");
13
+ const config_module_1 = require("../config/config.module");
14
+ const config_service_1 = require("../config/config.service");
15
+ let RateLimitModule = RateLimitModule_1 = class RateLimitModule {
16
+ static forRoot() {
17
+ return {
18
+ module: RateLimitModule_1,
19
+ imports: [
20
+ config_module_1.ConfigModule,
21
+ throttler_1.ThrottlerModule.forRootAsync({
22
+ imports: [config_module_1.ConfigModule],
23
+ inject: [config_service_1.ConfigService],
24
+ useFactory: (configService) => {
25
+ const config = configService.getConfig();
26
+ const rateLimitConfig = config.rateLimit || { ttl: 60, limit: 100 };
27
+ const options = {
28
+ throttlers: [
29
+ {
30
+ ttl: rateLimitConfig.ttl,
31
+ limit: rateLimitConfig.limit,
32
+ },
33
+ ],
34
+ };
35
+ return options;
36
+ },
37
+ }),
38
+ ],
39
+ exports: [throttler_1.ThrottlerModule],
40
+ };
41
+ }
42
+ };
43
+ exports.RateLimitModule = RateLimitModule;
44
+ exports.RateLimitModule = RateLimitModule = RateLimitModule_1 = __decorate([
45
+ (0, common_1.Module)({})
46
+ ], RateLimitModule);
47
+ //# sourceMappingURL=rate-limit.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.module.js","sourceRoot":"","sources":["../../src/rate-limit/rate-limit.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,iDAA4E;AAC5E,0DAAsD;AACtD,4DAAwD;AAGjD,IAAM,eAAe,uBAArB,MAAM,eAAe;IAC1B,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,MAAM,EAAE,iBAAe;YACvB,OAAO,EAAE;gBACP,4BAAY;gBACZ,2BAAe,CAAC,YAAY,CAAC;oBAC3B,OAAO,EAAE,CAAC,4BAAY,CAAC;oBACvB,MAAM,EAAE,CAAC,8BAAa,CAAC;oBACvB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE;wBAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;wBACzC,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;wBAEpE,MAAM,OAAO,GAA2B;4BACtC,UAAU,EAAE;gCACV;oCACE,GAAG,EAAE,eAAe,CAAC,GAAG;oCACxB,KAAK,EAAE,eAAe,CAAC,KAAK;iCAC7B;6BACF;yBACF,CAAC;wBAEF,OAAO,OAAO,CAAC;oBACjB,CAAC;iBACF,CAAC;aACH;YACD,OAAO,EAAE,CAAC,2BAAe,CAAC;SAC3B,CAAC;IACJ,CAAC;CACF,CAAA;AA7BY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,eAAe,CA6B3B"}