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.
- package/README.md +452 -0
- package/dist/cache/cache.module.d.ts +5 -0
- package/dist/cache/cache.module.js +32 -0
- package/dist/cache/cache.module.js.map +1 -0
- package/dist/cache/cache.service.d.ts +18 -0
- package/dist/cache/cache.service.js +68 -0
- package/dist/cache/cache.service.js.map +1 -0
- package/dist/client/client.interface.d.ts +14 -0
- package/dist/client/client.interface.js +3 -0
- package/dist/client/client.interface.js.map +1 -0
- package/dist/client/http-client.module.d.ts +2 -0
- package/dist/client/http-client.module.js +22 -0
- package/dist/client/http-client.module.js.map +1 -0
- package/dist/client/http-client.service.d.ts +12 -0
- package/dist/client/http-client.service.js +100 -0
- package/dist/client/http-client.service.js.map +1 -0
- package/dist/config/config.interface.d.ts +42 -0
- package/dist/config/config.interface.js +3 -0
- package/dist/config/config.interface.js.map +1 -0
- package/dist/config/config.module.d.ts +2 -0
- package/dist/config/config.module.js +28 -0
- package/dist/config/config.module.js.map +1 -0
- package/dist/config/config.service.d.ts +10 -0
- package/dist/config/config.service.js +85 -0
- package/dist/config/config.service.js.map +1 -0
- package/dist/database/prisma.module.d.ts +21 -0
- package/dist/database/prisma.module.js +121 -0
- package/dist/database/prisma.module.js.map +1 -0
- package/dist/health/health.controller.d.ts +10 -0
- package/dist/health/health.controller.js +75 -0
- package/dist/health/health.controller.js.map +1 -0
- package/dist/health/health.interface.d.ts +14 -0
- package/dist/health/health.interface.js +3 -0
- package/dist/health/health.interface.js.map +1 -0
- package/dist/health/health.module.d.ts +2 -0
- package/dist/health/health.module.js +23 -0
- package/dist/health/health.module.js.map +1 -0
- package/dist/health/health.service.d.ts +10 -0
- package/dist/health/health.service.js +25 -0
- package/dist/health/health.service.js.map +1 -0
- package/dist/http/http-response.decorator.d.ts +6 -0
- package/dist/http/http-response.decorator.js +8 -0
- package/dist/http/http-response.decorator.js.map +1 -0
- package/dist/http/http-response.module.d.ts +2 -0
- package/dist/http/http-response.module.js +22 -0
- package/dist/http/http-response.module.js.map +1 -0
- package/dist/http/http-response.service.d.ts +17 -0
- package/dist/http/http-response.service.js +73 -0
- package/dist/http/http-response.service.js.map +1 -0
- package/dist/http/response.interface.d.ts +10 -0
- package/dist/http/response.interface.js +3 -0
- package/dist/http/response.interface.js.map +1 -0
- package/dist/i18n/i18n.module.d.ts +5 -0
- package/dist/i18n/i18n.module.js +32 -0
- package/dist/i18n/i18n.module.js.map +1 -0
- package/dist/i18n/i18n.service.d.ts +16 -0
- package/dist/i18n/i18n.service.js +58 -0
- package/dist/i18n/i18n.service.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/microservice-common.module.d.ts +17 -0
- package/dist/microservice-common.module.js +76 -0
- package/dist/microservice-common.module.js.map +1 -0
- package/dist/middleware/correlation-id.middleware.d.ts +9 -0
- package/dist/middleware/correlation-id.middleware.js +34 -0
- package/dist/middleware/correlation-id.middleware.js.map +1 -0
- package/dist/middleware/cors.middleware.d.ts +9 -0
- package/dist/middleware/cors.middleware.js +71 -0
- package/dist/middleware/cors.middleware.js.map +1 -0
- package/dist/middleware/logging.middleware.d.ts +10 -0
- package/dist/middleware/logging.middleware.js +75 -0
- package/dist/middleware/logging.middleware.js.map +1 -0
- package/dist/middleware/middleware.interface.d.ts +18 -0
- package/dist/middleware/middleware.interface.js +3 -0
- package/dist/middleware/middleware.interface.js.map +1 -0
- package/dist/middleware/middleware.module.d.ts +9 -0
- package/dist/middleware/middleware.module.js +61 -0
- package/dist/middleware/middleware.module.js.map +1 -0
- package/dist/prometheus/prometheus.module.d.ts +8 -0
- package/dist/prometheus/prometheus.module.js +44 -0
- package/dist/prometheus/prometheus.module.js.map +1 -0
- package/dist/prometheus/prometheus.service.d.ts +14 -0
- package/dist/prometheus/prometheus.service.js +56 -0
- package/dist/prometheus/prometheus.service.js.map +1 -0
- package/dist/rate-limit/rate-limit.module.d.ts +4 -0
- package/dist/rate-limit/rate-limit.module.js +47 -0
- package/dist/rate-limit/rate-limit.module.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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 @@
|
|
|
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,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"}
|