@tc-libs/http-log 3.12.0 → 3.14.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/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@tc-libs/http-log",
3
- "version": "3.12.0",
3
+ "version": "3.14.0",
4
4
  "dependencies": {
5
- "@tc-libs/authentication": "3.12.0",
6
- "@tc-libs/request": "3.12.0",
7
- "@tc-libs/helper": "3.12.0",
8
- "@tc-libs/database": "3.12.0",
9
- "@tc-libs/app-cache": "3.12.0",
5
+ "@tc-libs/authentication": "3.14.0",
6
+ "@tc-libs/request": "3.14.0",
7
+ "@tc-libs/helper": "3.14.0",
8
+ "@tc-libs/database": "3.14.0",
9
+ "@tc-libs/app-cache": "3.14.0",
10
10
  "@nestjs/common": "^11.0.12",
11
+ "@aws-sdk/client-cloudwatch-logs": "^3.779.0",
11
12
  "morgan": "^1.10.0",
12
13
  "rotating-file-stream": "^3.2.7",
13
14
  "express": "5.0.1",
@@ -17,6 +17,7 @@ export declare class HttpLogMiddleware implements NestMiddleware {
17
17
  private readonly _options;
18
18
  private readonly writeIntoFile;
19
19
  private readonly writeIntoConsole;
20
+ private readonly writeIntoCloudwatch;
20
21
  private readonly logReqBody;
21
22
  private readonly logResBody;
22
23
  private readonly logHeaders;
@@ -40,6 +41,18 @@ export declare class HttpLogWriteIntoFileMiddleware implements NestMiddleware {
40
41
  private createHttpLogger;
41
42
  use(req: Request, res: Response, next: NextFunction): Promise<void>;
42
43
  }
44
+ export declare class HttpLogWriteIntoCloudwatchMiddleware implements NestMiddleware {
45
+ private readonly _options;
46
+ private readonly writeIntoCloudwatch;
47
+ private readonly logReqBody;
48
+ private readonly logResBody;
49
+ private readonly logHeaders;
50
+ private readonly logReqParams;
51
+ private readonly httpLogger?;
52
+ constructor(_options: HttpLogModuleOptions);
53
+ private createHttpLogger;
54
+ use(req: Request, res: Response, next: NextFunction): Promise<void>;
55
+ }
43
56
  export declare class HttpLogWriteIntoConsoleMiddleware implements NestMiddleware {
44
57
  private readonly _options;
45
58
  private readonly writeIntoConsole;
@@ -55,6 +68,7 @@ export declare class HttpLogResponseMiddleware implements NestMiddleware {
55
68
  private readonly _options;
56
69
  private readonly writeIntoFile;
57
70
  private readonly writeIntoConsole;
71
+ private readonly writeIntoCloudwatch;
58
72
  constructor(_options: HttpLogModuleOptions);
59
73
  use(req: Request, res: Response, next: NextFunction): void;
60
74
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HttpLogResponseMiddleware = exports.HttpLogWriteIntoConsoleMiddleware = exports.HttpLogWriteIntoFileMiddleware = exports.HttpLogMiddleware = void 0;
3
+ exports.HttpLogResponseMiddleware = exports.HttpLogWriteIntoConsoleMiddleware = exports.HttpLogWriteIntoCloudwatchMiddleware = exports.HttpLogWriteIntoFileMiddleware = exports.HttpLogMiddleware = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const common_1 = require("@nestjs/common");
6
6
  const morgan_1 = tslib_1.__importDefault(require("morgan"));
@@ -8,11 +8,13 @@ const rotating_file_stream_1 = require("rotating-file-stream");
8
8
  const helper_1 = require("@tc-libs/helper");
9
9
  const http_log_contants_1 = require("./constants/http-log.contants");
10
10
  const http_log_module_options_1 = require("./http-log.module.options");
11
+ const cloudwatch_stream_1 = require("./transports/cloudwatch.stream");
11
12
  let HttpLogMiddleware = class HttpLogMiddleware {
12
13
  constructor(_options) {
13
14
  this._options = _options;
14
15
  this.writeIntoFile = _options.http.writeIntoFile;
15
16
  this.writeIntoConsole = _options.http.writeIntoConsole;
17
+ this.writeIntoCloudwatch = _options.http.writeIntoCloudwatch;
16
18
  this.logReqBody = _options.http.logReqBody;
17
19
  this.logResBody = _options.http.logResBody;
18
20
  this.logHeaders = _options.http.logHeaders;
@@ -29,7 +31,7 @@ let HttpLogMiddleware = class HttpLogMiddleware {
29
31
  morgan_1.default.token('req-headers', (req) => JSON.stringify(req.headers));
30
32
  }
31
33
  async use(req, res, next) {
32
- if (this.writeIntoConsole || this.writeIntoFile) {
34
+ if (this.writeIntoConsole || this.writeIntoFile || this.writeIntoCloudwatch) {
33
35
  this.customToken();
34
36
  }
35
37
  next();
@@ -91,6 +93,49 @@ exports.HttpLogWriteIntoFileMiddleware = HttpLogWriteIntoFileMiddleware = tslib_
91
93
  tslib_1.__param(0, (0, common_1.Inject)(http_log_module_options_1.HTTP_LOG_CONFIG_OPTIONS)),
92
94
  tslib_1.__metadata("design:paramtypes", [Object, helper_1.DateService])
93
95
  ], HttpLogWriteIntoFileMiddleware);
96
+ let HttpLogWriteIntoCloudwatchMiddleware = class HttpLogWriteIntoCloudwatchMiddleware {
97
+ constructor(_options) {
98
+ this._options = _options;
99
+ this.writeIntoCloudwatch = _options.http.writeIntoCloudwatch;
100
+ this.logReqBody = _options.http.logReqBody;
101
+ this.logResBody = _options.http.logResBody;
102
+ this.logHeaders = _options.http.logHeaders;
103
+ this.logReqParams = _options.http.logReqParams;
104
+ if (this.writeIntoCloudwatch)
105
+ this.httpLogger = this.createHttpLogger();
106
+ }
107
+ createHttpLogger() {
108
+ const cw = this._options.cloudwatch;
109
+ if (!cw) {
110
+ throw new Error('HttpLogModule: writeIntoCloudwatch è abilitato ma manca la configurazione "cloudwatch".');
111
+ }
112
+ const stream = new cloudwatch_stream_1.CloudwatchStream({
113
+ region: cw.region,
114
+ credentials: {
115
+ accessKeyId: cw.credential.key,
116
+ secretAccessKey: cw.credential.secret,
117
+ },
118
+ // suffisso fisso del modulo: <base>/http
119
+ logGroupName: `${cw.logGroup.replace(/\/+$/, '')}/http`,
120
+ logStreamName: cw.logStream,
121
+ });
122
+ return (0, morgan_1.default)((0, http_log_contants_1.DEBUGGER_HTTP_FORMAT)(this.logReqBody, this.logResBody, this.logHeaders, this.logReqParams), { stream });
123
+ }
124
+ async use(req, res, next) {
125
+ if (this.httpLogger) {
126
+ this.httpLogger(req, res, next);
127
+ }
128
+ else {
129
+ next();
130
+ }
131
+ }
132
+ };
133
+ exports.HttpLogWriteIntoCloudwatchMiddleware = HttpLogWriteIntoCloudwatchMiddleware;
134
+ exports.HttpLogWriteIntoCloudwatchMiddleware = HttpLogWriteIntoCloudwatchMiddleware = tslib_1.__decorate([
135
+ (0, common_1.Injectable)(),
136
+ tslib_1.__param(0, (0, common_1.Inject)(http_log_module_options_1.HTTP_LOG_CONFIG_OPTIONS)),
137
+ tslib_1.__metadata("design:paramtypes", [Object])
138
+ ], HttpLogWriteIntoCloudwatchMiddleware);
94
139
  let HttpLogWriteIntoConsoleMiddleware = class HttpLogWriteIntoConsoleMiddleware {
95
140
  constructor(_options) {
96
141
  this._options = _options;
@@ -126,9 +171,10 @@ let HttpLogResponseMiddleware = class HttpLogResponseMiddleware {
126
171
  this._options = _options;
127
172
  this.writeIntoFile = _options.http.writeIntoFile;
128
173
  this.writeIntoConsole = _options.http.writeIntoConsole;
174
+ this.writeIntoCloudwatch = _options.http.writeIntoCloudwatch;
129
175
  }
130
176
  use(req, res, next) {
131
- if (this.writeIntoConsole || this.writeIntoFile) {
177
+ if (this.writeIntoConsole || this.writeIntoFile || this.writeIntoCloudwatch) {
132
178
  const send = res.send;
133
179
  const resOld = res;
134
180
  // Add response data to request
@@ -1 +1 @@
1
- {"version":3,"file":"http-log.middleware.js","sourceRoot":"","sources":["../../../../packages/http-log/src/http-log.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-log.middleware.js","sourceRoot":"","sources":["../../../../packages/http-log/src/http-log.middleware.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ let HttpLogModule = HttpLogModule_1 = class HttpLogModule {
33
33
  }
34
34
  configure(consumer) {
35
35
  consumer
36
- .apply(http_log_middleware_1.HttpLogResponseMiddleware, http_log_middleware_1.HttpLogMiddleware, http_log_middleware_1.HttpLogWriteIntoConsoleMiddleware, http_log_middleware_1.HttpLogWriteIntoFileMiddleware)
36
+ .apply(http_log_middleware_1.HttpLogResponseMiddleware, http_log_middleware_1.HttpLogMiddleware, http_log_middleware_1.HttpLogWriteIntoConsoleMiddleware, http_log_middleware_1.HttpLogWriteIntoFileMiddleware, http_log_middleware_1.HttpLogWriteIntoCloudwatchMiddleware)
37
37
  .forRoutes('*');
38
38
  }
39
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"http-log.module.js","sourceRoot":"","sources":["../../../../packages/http-log/src/http-log.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAKwB;AACxB,+DAK+B;AAC/B,uEAGmC;AAG5B,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB,MAAM,CAAC,QAAQ,CACb,OAA6B,EAC7B,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iDAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YACpE,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,aAAa,CAClB,OAAkC,EAClC,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,iDAAuB;oBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;aACF;YACD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,QAAQ;aACL,KAAK,CACJ,+CAAyB,EACzB,uCAAiB,EACjB,uDAAiC,EACjC,oDAA8B,CAC/B;aACA,SAAS,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF,CAAA;AA1CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;GACX,aAAa,CA0CzB"}
1
+ {"version":3,"file":"http-log.module.js","sourceRoot":"","sources":["../../../../packages/http-log/src/http-log.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAKwB;AACxB,+DAM+B;AAC/B,uEAGmC;AAG5B,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACxB,MAAM,CAAC,QAAQ,CACb,OAA6B,EAC7B,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iDAAuB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YACpE,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,aAAa,CAClB,OAAkC,EAClC,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,iDAAuB;oBAChC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;aACF;YACD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAA4B;QACpC,QAAQ;aACL,KAAK,CACJ,+CAAyB,EACzB,uCAAiB,EACjB,uDAAiC,EACjC,oDAA8B,EAC9B,0DAAoC,CACrC;aACA,SAAS,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;CACF,CAAA;AA3CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;GACX,aAAa,CA2CzB"}
@@ -9,9 +9,19 @@ export interface HttpLogModuleOptions {
9
9
  logHeaders: boolean;
10
10
  writeIntoFile: boolean;
11
11
  writeIntoConsole: boolean;
12
+ writeIntoCloudwatch: boolean;
12
13
  maxFiles: number;
13
14
  maxSize: `${number}M` | `${number}B` | `${number}K` | `${number}G` | undefined;
14
15
  };
16
+ cloudwatch?: {
17
+ credential: {
18
+ key: string;
19
+ secret: string;
20
+ };
21
+ region: string;
22
+ logGroup: string;
23
+ logStream: string;
24
+ };
15
25
  }
16
26
  type HttpLogModuleAsyncOptions = Pick<ModuleMetadata, 'imports'> & Pick<FactoryProvider<HttpLogModuleOptions>, 'useFactory' | 'inject'>;
17
27
  export default HttpLogModuleAsyncOptions;
@@ -0,0 +1,29 @@
1
+ interface CloudwatchStreamOpts {
2
+ region: string;
3
+ credentials?: {
4
+ accessKeyId: string;
5
+ secretAccessKey: string;
6
+ };
7
+ logGroupName: string;
8
+ logStreamName: string;
9
+ flushInterval?: number;
10
+ }
11
+ export declare class CloudwatchStream {
12
+ private readonly _client;
13
+ private readonly _logGroupName;
14
+ private readonly _logStreamName;
15
+ private readonly _flushInterval;
16
+ private _buffer;
17
+ private _timer;
18
+ private _flushing;
19
+ private _ready;
20
+ constructor(opts: CloudwatchStreamOpts);
21
+ write(line: string): void;
22
+ private _scheduleFlush;
23
+ private _ensureStream;
24
+ private _createIgnoringExisting;
25
+ private _flush;
26
+ private _chunk;
27
+ close(): void;
28
+ }
29
+ export {};
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudwatchStream = void 0;
4
+ const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs");
5
+ // Limiti dell'API PutLogEvents: max 10.000 eventi e 1.048.576 byte per batch,
6
+ // dove ogni evento conta come byte UTF-8 del messaggio + 26 byte di overhead.
7
+ const MAX_BATCH_COUNT = 10000;
8
+ const MAX_BATCH_BYTES = 1048576;
9
+ const EVENT_OVERHEAD = 26;
10
+ const FLUSH_THRESHOLD = 1000;
11
+ // Stream compatibile con morgan ({ write(line) }) che spedisce gli access-log
12
+ // HTTP su CloudWatch in batch. http-log non usa winston, quindi il batching qui
13
+ // è esposto come stream invece che come transport winston.
14
+ class CloudwatchStream {
15
+ constructor(opts) {
16
+ this._buffer = [];
17
+ this._timer = null;
18
+ this._flushing = false;
19
+ this._ready = null;
20
+ this._client = new client_cloudwatch_logs_1.CloudWatchLogsClient({
21
+ region: opts.region,
22
+ ...(opts.credentials ? { credentials: opts.credentials } : {}),
23
+ });
24
+ this._logGroupName = opts.logGroupName;
25
+ this._logStreamName = opts.logStreamName;
26
+ this._flushInterval = opts.flushInterval ?? 2000;
27
+ }
28
+ write(line) {
29
+ const message = line.trim();
30
+ if (!message)
31
+ return;
32
+ this._buffer.push({ timestamp: Date.now(), message });
33
+ if (this._buffer.length >= FLUSH_THRESHOLD) {
34
+ void this._flush();
35
+ }
36
+ else {
37
+ this._scheduleFlush();
38
+ }
39
+ }
40
+ _scheduleFlush() {
41
+ if (this._timer)
42
+ return;
43
+ this._timer = setTimeout(() => {
44
+ this._timer = null;
45
+ void this._flush();
46
+ }, this._flushInterval);
47
+ }
48
+ async _ensureStream() {
49
+ if (this._ready)
50
+ return this._ready;
51
+ this._ready = (async () => {
52
+ await this._createIgnoringExisting(new client_cloudwatch_logs_1.CreateLogGroupCommand({ logGroupName: this._logGroupName }));
53
+ await this._createIgnoringExisting(new client_cloudwatch_logs_1.CreateLogStreamCommand({
54
+ logGroupName: this._logGroupName,
55
+ logStreamName: this._logStreamName,
56
+ }));
57
+ })();
58
+ return this._ready;
59
+ }
60
+ async _createIgnoringExisting(command) {
61
+ try {
62
+ await this._client.send(command);
63
+ }
64
+ catch (err) {
65
+ // se group/stream esistono già non è un errore; altrimenti rilancio e
66
+ // azzero _ready così un log successivo riprova la creazione.
67
+ if (err?.name !== 'ResourceAlreadyExistsException') {
68
+ this._ready = null;
69
+ throw err;
70
+ }
71
+ }
72
+ }
73
+ async _flush() {
74
+ if (this._flushing || this._buffer.length === 0)
75
+ return;
76
+ this._flushing = true;
77
+ if (this._timer) {
78
+ clearTimeout(this._timer);
79
+ this._timer = null;
80
+ }
81
+ // gli eventi di un batch devono essere ordinati per timestamp crescente.
82
+ const events = this._buffer
83
+ .splice(0)
84
+ .sort((a, b) => (a.timestamp ?? 0) - (b.timestamp ?? 0));
85
+ try {
86
+ await this._ensureStream();
87
+ for (const batch of this._chunk(events)) {
88
+ await this._client.send(new client_cloudwatch_logs_1.PutLogEventsCommand({
89
+ logGroupName: this._logGroupName,
90
+ logStreamName: this._logStreamName,
91
+ logEvents: batch,
92
+ }));
93
+ }
94
+ }
95
+ catch (err) {
96
+ // non rimettiamo in coda gli eventi falliti per evitare crescita
97
+ // illimitata del buffer: il logging non deve mai far crashare l'app.
98
+ console.error('[CloudwatchStream] flush failed:', err);
99
+ }
100
+ finally {
101
+ this._flushing = false;
102
+ if (this._buffer.length > 0)
103
+ this._scheduleFlush();
104
+ }
105
+ }
106
+ *_chunk(events) {
107
+ let batch = [];
108
+ let bytes = 0;
109
+ for (const event of events) {
110
+ const size = Buffer.byteLength(event.message ?? '', 'utf8') + EVENT_OVERHEAD;
111
+ if (batch.length >= MAX_BATCH_COUNT || bytes + size > MAX_BATCH_BYTES) {
112
+ if (batch.length)
113
+ yield batch;
114
+ batch = [];
115
+ bytes = 0;
116
+ }
117
+ batch.push(event);
118
+ bytes += size;
119
+ }
120
+ if (batch.length)
121
+ yield batch;
122
+ }
123
+ close() {
124
+ if (this._timer) {
125
+ clearTimeout(this._timer);
126
+ this._timer = null;
127
+ }
128
+ void this._flush();
129
+ }
130
+ }
131
+ exports.CloudwatchStream = CloudwatchStream;
132
+ //# sourceMappingURL=cloudwatch.stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudwatch.stream.js","sourceRoot":"","sources":["../../../../../packages/http-log/src/transports/cloudwatch.stream.ts"],"names":[],"mappings":"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"}