apitally 0.18.1 → 0.19.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/dist/adonisjs/configure.cjs +2 -2
- package/dist/adonisjs/configure.cjs.map +1 -1
- package/dist/adonisjs/configure.js.map +1 -1
- package/dist/adonisjs/index.cjs +2 -2
- package/dist/adonisjs/index.cjs.map +1 -1
- package/dist/adonisjs/index.d.cts +2 -2
- package/dist/adonisjs/index.d.ts +2 -2
- package/dist/adonisjs/index.js.map +1 -1
- package/dist/adonisjs/middleware.cjs +104 -84
- package/dist/adonisjs/middleware.cjs.map +1 -1
- package/dist/adonisjs/middleware.d.cts +2 -2
- package/dist/adonisjs/middleware.d.ts +2 -2
- package/dist/adonisjs/middleware.js +103 -83
- package/dist/adonisjs/middleware.js.map +1 -1
- package/dist/adonisjs/provider.cjs +4750 -60
- package/dist/adonisjs/provider.cjs.map +1 -1
- package/dist/adonisjs/provider.d.cts +7 -4
- package/dist/adonisjs/provider.d.ts +7 -4
- package/dist/adonisjs/provider.js +4728 -15
- package/dist/adonisjs/provider.js.map +1 -1
- package/dist/common/client.cjs +62 -40
- package/dist/common/client.cjs.map +1 -1
- package/dist/common/client.d.cts +2 -2
- package/dist/common/client.d.ts +2 -2
- package/dist/common/client.js +31 -9
- package/dist/common/client.js.map +1 -1
- package/dist/common/consumerRegistry.d.cts +2 -2
- package/dist/common/consumerRegistry.d.ts +2 -2
- package/dist/common/headers.cjs.map +1 -1
- package/dist/common/headers.d.cts +1 -1
- package/dist/common/headers.d.ts +1 -1
- package/dist/common/headers.js.map +1 -1
- package/dist/common/logging.cjs +3 -2
- package/dist/common/logging.cjs.map +1 -1
- package/dist/common/logging.d.cts +1 -1
- package/dist/common/logging.d.ts +1 -1
- package/dist/common/logging.js +3 -2
- package/dist/common/logging.js.map +1 -1
- package/dist/common/packageVersions.cjs +2 -2
- package/dist/common/packageVersions.cjs.map +1 -1
- package/dist/common/packageVersions.js.map +1 -1
- package/dist/common/requestCounter.d.cts +2 -2
- package/dist/common/requestCounter.d.ts +2 -2
- package/dist/common/requestLogger.cjs +54 -33
- package/dist/common/requestLogger.cjs.map +1 -1
- package/dist/common/requestLogger.d.cts +11 -4
- package/dist/common/requestLogger.d.ts +11 -4
- package/dist/common/requestLogger.js +27 -6
- package/dist/common/requestLogger.js.map +1 -1
- package/dist/common/serverErrorCounter.cjs +3 -2
- package/dist/common/serverErrorCounter.cjs.map +1 -1
- package/dist/common/serverErrorCounter.d.cts +2 -2
- package/dist/common/serverErrorCounter.d.ts +2 -2
- package/dist/common/serverErrorCounter.js +1 -0
- package/dist/common/serverErrorCounter.js.map +1 -1
- package/dist/common/tempGzipFile.cjs +15 -14
- package/dist/common/tempGzipFile.cjs.map +1 -1
- package/dist/common/tempGzipFile.d.cts +1 -1
- package/dist/common/tempGzipFile.d.ts +1 -1
- package/dist/common/tempGzipFile.js +3 -2
- package/dist/common/tempGzipFile.js.map +1 -1
- package/dist/common/types.d.cts +2 -2
- package/dist/common/types.d.ts +2 -2
- package/dist/common/validationErrorCounter.cjs +2 -2
- package/dist/common/validationErrorCounter.cjs.map +1 -1
- package/dist/common/validationErrorCounter.d.cts +2 -2
- package/dist/common/validationErrorCounter.d.ts +2 -2
- package/dist/common/validationErrorCounter.js.map +1 -1
- package/dist/express/index.cjs +4979 -167
- package/dist/express/index.cjs.map +1 -1
- package/dist/express/index.d.cts +2 -2
- package/dist/express/index.d.ts +2 -2
- package/dist/express/index.js +4951 -118
- package/dist/express/index.js.map +1 -1
- package/dist/express/middleware.cjs +4979 -167
- package/dist/express/middleware.cjs.map +1 -1
- package/dist/express/middleware.d.cts +2 -2
- package/dist/express/middleware.d.ts +2 -2
- package/dist/express/middleware.js +4951 -118
- package/dist/express/middleware.js.map +1 -1
- package/dist/fastify/index.cjs +4908 -70
- package/dist/fastify/index.cjs.map +1 -1
- package/dist/fastify/index.d.cts +3 -2
- package/dist/fastify/index.d.ts +3 -2
- package/dist/fastify/index.js +4881 -22
- package/dist/fastify/index.js.map +1 -1
- package/dist/fastify/plugin.cjs +4908 -70
- package/dist/fastify/plugin.cjs.map +1 -1
- package/dist/fastify/plugin.d.cts +8 -3
- package/dist/fastify/plugin.d.ts +8 -3
- package/dist/fastify/plugin.js +4881 -22
- package/dist/fastify/plugin.js.map +1 -1
- package/dist/h3/index.cjs +219 -50
- package/dist/h3/index.cjs.map +1 -1
- package/dist/h3/index.d.cts +2 -2
- package/dist/h3/index.d.ts +2 -2
- package/dist/h3/index.js +184 -15
- package/dist/h3/index.js.map +1 -1
- package/dist/h3/plugin.cjs +219 -50
- package/dist/h3/plugin.cjs.map +1 -1
- package/dist/h3/plugin.d.cts +6 -4
- package/dist/h3/plugin.d.ts +6 -4
- package/dist/h3/plugin.js +184 -15
- package/dist/h3/plugin.js.map +1 -1
- package/dist/h3/utils.cjs +2 -2
- package/dist/h3/utils.cjs.map +1 -1
- package/dist/h3/utils.js.map +1 -1
- package/dist/hono/index.cjs +278 -110
- package/dist/hono/index.cjs.map +1 -1
- package/dist/hono/index.d.cts +2 -2
- package/dist/hono/index.d.ts +2 -2
- package/dist/hono/index.js +244 -76
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/middleware.cjs +278 -110
- package/dist/hono/middleware.cjs.map +1 -1
- package/dist/hono/middleware.d.cts +2 -2
- package/dist/hono/middleware.d.ts +2 -2
- package/dist/hono/middleware.js +244 -76
- package/dist/hono/middleware.js.map +1 -1
- package/dist/hono/utils.cjs +2 -2
- package/dist/hono/utils.cjs.map +1 -1
- package/dist/hono/utils.d.cts +2 -2
- package/dist/hono/utils.d.ts +2 -2
- package/dist/hono/utils.js.map +1 -1
- package/dist/koa/index.cjs +275 -105
- package/dist/koa/index.cjs.map +1 -1
- package/dist/koa/index.d.cts +2 -2
- package/dist/koa/index.d.ts +2 -2
- package/dist/koa/index.js +239 -69
- package/dist/koa/index.js.map +1 -1
- package/dist/koa/middleware.cjs +273 -105
- package/dist/koa/middleware.cjs.map +1 -1
- package/dist/koa/middleware.d.cts +2 -2
- package/dist/koa/middleware.d.ts +2 -2
- package/dist/koa/middleware.js +239 -69
- package/dist/koa/middleware.js.map +1 -1
- package/dist/loggers/console.cjs +69 -0
- package/dist/loggers/console.cjs.map +1 -0
- package/dist/loggers/console.d.cts +9 -0
- package/dist/loggers/console.d.ts +9 -0
- package/dist/loggers/console.js +46 -0
- package/dist/loggers/console.js.map +1 -0
- package/dist/loggers/index.cjs +4824 -0
- package/dist/loggers/index.cjs.map +1 -0
- package/dist/loggers/index.d.cts +9 -0
- package/dist/loggers/index.d.ts +9 -0
- package/dist/loggers/index.js +4813 -0
- package/dist/loggers/index.js.map +1 -0
- package/dist/loggers/nestjs.cjs +135 -0
- package/dist/loggers/nestjs.cjs.map +1 -0
- package/dist/loggers/nestjs.d.cts +9 -0
- package/dist/loggers/nestjs.d.ts +9 -0
- package/dist/loggers/nestjs.js +100 -0
- package/dist/loggers/nestjs.js.map +1 -0
- package/dist/loggers/pino.cjs +4656 -0
- package/dist/loggers/pino.cjs.map +1 -0
- package/dist/loggers/pino.d.cts +9 -0
- package/dist/loggers/pino.d.ts +9 -0
- package/dist/loggers/pino.js +4648 -0
- package/dist/loggers/pino.js.map +1 -0
- package/dist/loggers/utils.cjs +66 -0
- package/dist/loggers/utils.cjs.map +1 -0
- package/dist/loggers/utils.d.cts +6 -0
- package/dist/loggers/utils.d.ts +6 -0
- package/dist/loggers/utils.js +42 -0
- package/dist/loggers/utils.js.map +1 -0
- package/dist/loggers/winston.cjs +135 -0
- package/dist/loggers/winston.cjs.map +1 -0
- package/dist/loggers/winston.d.cts +9 -0
- package/dist/loggers/winston.d.ts +9 -0
- package/dist/loggers/winston.js +100 -0
- package/dist/loggers/winston.js.map +1 -0
- package/dist/nestjs/index.cjs +5340 -450
- package/dist/nestjs/index.cjs.map +1 -1
- package/dist/nestjs/index.d.cts +2 -2
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.js +5293 -405
- package/dist/nestjs/index.js.map +1 -1
- package/package.json +4 -3
package/dist/koa/index.cjs
CHANGED
|
@@ -38,9 +38,12 @@ __export(koa_exports, {
|
|
|
38
38
|
});
|
|
39
39
|
module.exports = __toCommonJS(koa_exports);
|
|
40
40
|
|
|
41
|
+
// src/koa/middleware.ts
|
|
42
|
+
var import_node_async_hooks = require("async_hooks");
|
|
43
|
+
|
|
41
44
|
// src/common/client.ts
|
|
42
|
-
var import_crypto5 = require("crypto");
|
|
43
45
|
var import_fetch_retry = __toESM(require("fetch-retry"), 1);
|
|
46
|
+
var import_node_crypto5 = require("crypto");
|
|
44
47
|
|
|
45
48
|
// src/common/consumerRegistry.ts
|
|
46
49
|
var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
@@ -100,7 +103,7 @@ var ConsumerRegistry = _ConsumerRegistry;
|
|
|
100
103
|
|
|
101
104
|
// src/common/logging.ts
|
|
102
105
|
var import_winston = require("winston");
|
|
103
|
-
|
|
106
|
+
function getLogger() {
|
|
104
107
|
return (0, import_winston.createLogger)({
|
|
105
108
|
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
106
109
|
format: import_winston.format.combine(import_winston.format.colorize(), import_winston.format.timestamp(), import_winston.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
|
|
@@ -108,7 +111,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
|
|
|
108
111
|
new import_winston.transports.Console()
|
|
109
112
|
]
|
|
110
113
|
});
|
|
111
|
-
}
|
|
114
|
+
}
|
|
115
|
+
__name(getLogger, "getLogger");
|
|
112
116
|
|
|
113
117
|
// src/common/paramValidation.ts
|
|
114
118
|
function isValidClientId(clientId) {
|
|
@@ -210,11 +214,11 @@ var RequestCounter = _RequestCounter;
|
|
|
210
214
|
|
|
211
215
|
// src/common/requestLogger.ts
|
|
212
216
|
var import_async_lock = __toESM(require("async-lock"), 1);
|
|
213
|
-
var
|
|
214
|
-
var
|
|
215
|
-
var
|
|
216
|
-
var
|
|
217
|
-
var
|
|
217
|
+
var import_node_buffer2 = require("buffer");
|
|
218
|
+
var import_node_crypto3 = require("crypto");
|
|
219
|
+
var import_node_fs2 = require("fs");
|
|
220
|
+
var import_node_os2 = require("os");
|
|
221
|
+
var import_node_path2 = require("path");
|
|
218
222
|
|
|
219
223
|
// src/common/sentry.ts
|
|
220
224
|
var sentry;
|
|
@@ -233,7 +237,7 @@ function getSentryEventId() {
|
|
|
233
237
|
__name(getSentryEventId, "getSentryEventId");
|
|
234
238
|
|
|
235
239
|
// src/common/serverErrorCounter.ts
|
|
236
|
-
var
|
|
240
|
+
var import_node_crypto = require("crypto");
|
|
237
241
|
var MAX_MSG_LENGTH = 2048;
|
|
238
242
|
var MAX_STACKTRACE_LENGTH = 65536;
|
|
239
243
|
var _ServerErrorCounter = class _ServerErrorCounter {
|
|
@@ -275,6 +279,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
275
279
|
});
|
|
276
280
|
this.errorCounts.clear();
|
|
277
281
|
this.errorDetails.clear();
|
|
282
|
+
this.sentryEventIds.clear();
|
|
278
283
|
return data;
|
|
279
284
|
}
|
|
280
285
|
getKey(serverError) {
|
|
@@ -286,7 +291,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
286
291
|
serverError.msg.trim(),
|
|
287
292
|
serverError.traceback.trim()
|
|
288
293
|
].join("|");
|
|
289
|
-
return (0,
|
|
294
|
+
return (0, import_node_crypto.createHash)("md5").update(hashInput).digest("hex");
|
|
290
295
|
}
|
|
291
296
|
};
|
|
292
297
|
__name(_ServerErrorCounter, "ServerErrorCounter");
|
|
@@ -319,12 +324,13 @@ function truncateExceptionStackTrace(stack) {
|
|
|
319
324
|
__name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
|
|
320
325
|
|
|
321
326
|
// src/common/tempGzipFile.ts
|
|
322
|
-
var
|
|
323
|
-
var
|
|
324
|
-
var
|
|
325
|
-
var
|
|
326
|
-
var
|
|
327
|
-
var
|
|
327
|
+
var import_node_buffer = require("buffer");
|
|
328
|
+
var import_node_crypto2 = require("crypto");
|
|
329
|
+
var import_node_fs = require("fs");
|
|
330
|
+
var import_promises = require("fs/promises");
|
|
331
|
+
var import_node_os = require("os");
|
|
332
|
+
var import_node_path = require("path");
|
|
333
|
+
var import_node_zlib = require("zlib");
|
|
328
334
|
var _TempGzipFile = class _TempGzipFile {
|
|
329
335
|
uuid;
|
|
330
336
|
filePath;
|
|
@@ -333,9 +339,9 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
333
339
|
readyPromise;
|
|
334
340
|
closedPromise;
|
|
335
341
|
constructor() {
|
|
336
|
-
this.uuid = (0,
|
|
337
|
-
this.filePath = (0,
|
|
338
|
-
this.writeStream = (0,
|
|
342
|
+
this.uuid = (0, import_node_crypto2.randomUUID)();
|
|
343
|
+
this.filePath = (0, import_node_path.join)((0, import_node_os.tmpdir)(), `apitally-${this.uuid}.gz`);
|
|
344
|
+
this.writeStream = (0, import_node_fs.createWriteStream)(this.filePath);
|
|
339
345
|
this.readyPromise = new Promise((resolve, reject) => {
|
|
340
346
|
this.writeStream.once("ready", resolve);
|
|
341
347
|
this.writeStream.once("error", reject);
|
|
@@ -344,7 +350,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
344
350
|
this.writeStream.once("close", resolve);
|
|
345
351
|
this.writeStream.once("error", reject);
|
|
346
352
|
});
|
|
347
|
-
this.gzip = (0,
|
|
353
|
+
this.gzip = (0, import_node_zlib.createGzip)();
|
|
348
354
|
this.gzip.pipe(this.writeStream);
|
|
349
355
|
}
|
|
350
356
|
get size() {
|
|
@@ -353,9 +359,9 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
353
359
|
async writeLine(data) {
|
|
354
360
|
await this.readyPromise;
|
|
355
361
|
return new Promise((resolve, reject) => {
|
|
356
|
-
this.gzip.write(
|
|
362
|
+
this.gzip.write(import_node_buffer.Buffer.concat([
|
|
357
363
|
data,
|
|
358
|
-
|
|
364
|
+
import_node_buffer.Buffer.from("\n")
|
|
359
365
|
]), (error) => {
|
|
360
366
|
if (error) {
|
|
361
367
|
reject(error);
|
|
@@ -367,7 +373,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
367
373
|
}
|
|
368
374
|
async getContent() {
|
|
369
375
|
return new Promise((resolve, reject) => {
|
|
370
|
-
(0,
|
|
376
|
+
(0, import_node_fs.readFile)(this.filePath, (error, data) => {
|
|
371
377
|
if (error) {
|
|
372
378
|
reject(error);
|
|
373
379
|
} else {
|
|
@@ -386,7 +392,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
386
392
|
}
|
|
387
393
|
async delete() {
|
|
388
394
|
await this.close();
|
|
389
|
-
(0,
|
|
395
|
+
await (0, import_promises.unlink)(this.filePath);
|
|
390
396
|
}
|
|
391
397
|
};
|
|
392
398
|
__name(_TempGzipFile, "TempGzipFile");
|
|
@@ -397,8 +403,9 @@ var MAX_BODY_SIZE = 5e4;
|
|
|
397
403
|
var MAX_FILE_SIZE = 1e6;
|
|
398
404
|
var MAX_FILES = 50;
|
|
399
405
|
var MAX_PENDING_WRITES = 100;
|
|
400
|
-
var
|
|
401
|
-
var
|
|
406
|
+
var MAX_LOG_MSG_LENGTH = 2048;
|
|
407
|
+
var BODY_TOO_LARGE = import_node_buffer2.Buffer.from("<body too large>");
|
|
408
|
+
var BODY_MASKED = import_node_buffer2.Buffer.from("<masked>");
|
|
402
409
|
var MASKED = "******";
|
|
403
410
|
var ALLOWED_CONTENT_TYPES = [
|
|
404
411
|
"application/json",
|
|
@@ -453,6 +460,7 @@ var DEFAULT_CONFIG = {
|
|
|
453
460
|
logResponseHeaders: true,
|
|
454
461
|
logResponseBody: false,
|
|
455
462
|
logException: true,
|
|
463
|
+
captureLogs: false,
|
|
456
464
|
maskQueryParams: [],
|
|
457
465
|
maskHeaders: [],
|
|
458
466
|
maskBodyFields: [],
|
|
@@ -595,7 +603,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
595
603
|
try {
|
|
596
604
|
const parsedBody = JSON.parse(bodyData.toString());
|
|
597
605
|
const maskedBody = this.maskBody(parsedBody);
|
|
598
|
-
item[key].body =
|
|
606
|
+
item[key].body = import_node_buffer2.Buffer.from(JSON.stringify(maskedBody));
|
|
599
607
|
} catch {
|
|
600
608
|
}
|
|
601
609
|
}
|
|
@@ -607,7 +615,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
607
615
|
item.request.url = url.toString();
|
|
608
616
|
return item;
|
|
609
617
|
}
|
|
610
|
-
logRequest(request, response, error) {
|
|
618
|
+
logRequest(request, response, error, logs) {
|
|
611
619
|
var _a2, _b, _c;
|
|
612
620
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
613
621
|
const url = new URL(request.url);
|
|
@@ -629,7 +637,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
629
637
|
response.size = void 0;
|
|
630
638
|
}
|
|
631
639
|
const item = {
|
|
632
|
-
uuid: (0,
|
|
640
|
+
uuid: (0, import_node_crypto3.randomUUID)(),
|
|
633
641
|
request,
|
|
634
642
|
response,
|
|
635
643
|
exception: error && this.config.logException ? {
|
|
@@ -639,6 +647,14 @@ var _RequestLogger = class _RequestLogger {
|
|
|
639
647
|
sentryEventId: getSentryEventId()
|
|
640
648
|
} : void 0
|
|
641
649
|
};
|
|
650
|
+
if (logs && logs.length > 0) {
|
|
651
|
+
item.logs = logs.map((log) => ({
|
|
652
|
+
timestamp: log.timestamp,
|
|
653
|
+
logger: log.logger,
|
|
654
|
+
level: log.level,
|
|
655
|
+
message: truncateLogMessage(log.message)
|
|
656
|
+
}));
|
|
657
|
+
}
|
|
642
658
|
this.pendingWrites.push(item);
|
|
643
659
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
644
660
|
this.pendingWrites.shift();
|
|
@@ -660,7 +676,8 @@ var _RequestLogger = class _RequestLogger {
|
|
|
660
676
|
uuid: item.uuid,
|
|
661
677
|
request: skipEmptyValues(item.request),
|
|
662
678
|
response: skipEmptyValues(item.response),
|
|
663
|
-
exception: item.exception
|
|
679
|
+
exception: item.exception,
|
|
680
|
+
logs: item.logs
|
|
664
681
|
};
|
|
665
682
|
[
|
|
666
683
|
finalItem.request.body,
|
|
@@ -672,7 +689,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
672
689
|
};
|
|
673
690
|
}
|
|
674
691
|
});
|
|
675
|
-
await this.currentFile.writeLine(
|
|
692
|
+
await this.currentFile.writeLine(import_node_buffer2.Buffer.from(JSON.stringify(finalItem)));
|
|
676
693
|
}
|
|
677
694
|
}
|
|
678
695
|
});
|
|
@@ -753,13 +770,13 @@ function convertBody(body, contentType) {
|
|
|
753
770
|
try {
|
|
754
771
|
if (contentType.startsWith("application/json")) {
|
|
755
772
|
if (isValidJsonString(body)) {
|
|
756
|
-
return
|
|
773
|
+
return import_node_buffer2.Buffer.from(body);
|
|
757
774
|
} else {
|
|
758
|
-
return
|
|
775
|
+
return import_node_buffer2.Buffer.from(JSON.stringify(body));
|
|
759
776
|
}
|
|
760
777
|
}
|
|
761
778
|
if (contentType.startsWith("text/") && typeof body === "string") {
|
|
762
|
-
return
|
|
779
|
+
return import_node_buffer2.Buffer.from(body);
|
|
763
780
|
}
|
|
764
781
|
} catch (error) {
|
|
765
782
|
return;
|
|
@@ -787,18 +804,26 @@ __name(matchPatterns, "matchPatterns");
|
|
|
787
804
|
function skipEmptyValues(data) {
|
|
788
805
|
return Object.fromEntries(Object.entries(data).filter(([_, v]) => {
|
|
789
806
|
if (v == null || Number.isNaN(v)) return false;
|
|
790
|
-
if (Array.isArray(v) ||
|
|
807
|
+
if (Array.isArray(v) || import_node_buffer2.Buffer.isBuffer(v) || typeof v === "string") {
|
|
791
808
|
return v.length > 0;
|
|
792
809
|
}
|
|
793
810
|
return true;
|
|
794
811
|
}));
|
|
795
812
|
}
|
|
796
813
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
814
|
+
function truncateLogMessage(msg) {
|
|
815
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
816
|
+
const suffix = "... (truncated)";
|
|
817
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
818
|
+
}
|
|
819
|
+
return msg;
|
|
820
|
+
}
|
|
821
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
797
822
|
function checkWritableFs() {
|
|
798
823
|
try {
|
|
799
|
-
const testPath = (0,
|
|
800
|
-
(0,
|
|
801
|
-
(0,
|
|
824
|
+
const testPath = (0, import_node_path2.join)((0, import_node_os2.tmpdir)(), `apitally-${(0, import_node_crypto3.randomUUID)()}`);
|
|
825
|
+
(0, import_node_fs2.writeFileSync)(testPath, "test");
|
|
826
|
+
(0, import_node_fs2.unlinkSync)(testPath);
|
|
802
827
|
return true;
|
|
803
828
|
} catch (error) {
|
|
804
829
|
return false;
|
|
@@ -807,7 +832,7 @@ function checkWritableFs() {
|
|
|
807
832
|
__name(checkWritableFs, "checkWritableFs");
|
|
808
833
|
|
|
809
834
|
// src/common/validationErrorCounter.ts
|
|
810
|
-
var
|
|
835
|
+
var import_node_crypto4 = require("crypto");
|
|
811
836
|
var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
812
837
|
errorCounts;
|
|
813
838
|
errorDetails;
|
|
@@ -851,7 +876,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
851
876
|
validationError.msg.trim(),
|
|
852
877
|
validationError.type
|
|
853
878
|
].join("|");
|
|
854
|
-
return (0,
|
|
879
|
+
return (0, import_node_crypto4.createHash)("md5").update(hashInput).digest("hex");
|
|
855
880
|
}
|
|
856
881
|
};
|
|
857
882
|
__name(_ValidationErrorCounter, "ValidationErrorCounter");
|
|
@@ -902,7 +927,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
902
927
|
_ApitallyClient.instance = this;
|
|
903
928
|
this.clientId = clientId;
|
|
904
929
|
this.env = env;
|
|
905
|
-
this.instanceUuid = (0,
|
|
930
|
+
this.instanceUuid = (0, import_node_crypto5.randomUUID)();
|
|
906
931
|
this.syncDataQueue = [];
|
|
907
932
|
this.requestCounter = new RequestCounter();
|
|
908
933
|
this.requestLogger = new RequestLogger(requestLogging ?? requestLoggingConfig);
|
|
@@ -1008,7 +1033,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
1008
1033
|
this.logger.debug("Sending startup data to Apitally Hub");
|
|
1009
1034
|
const payload = {
|
|
1010
1035
|
instance_uuid: this.instanceUuid,
|
|
1011
|
-
message_uuid: (0,
|
|
1036
|
+
message_uuid: (0, import_node_crypto5.randomUUID)(),
|
|
1012
1037
|
...this.startupData
|
|
1013
1038
|
};
|
|
1014
1039
|
try {
|
|
@@ -1030,7 +1055,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
1030
1055
|
const newPayload = {
|
|
1031
1056
|
timestamp: Date.now() / 1e3,
|
|
1032
1057
|
instance_uuid: this.instanceUuid,
|
|
1033
|
-
message_uuid: (0,
|
|
1058
|
+
message_uuid: (0, import_node_crypto5.randomUUID)(),
|
|
1034
1059
|
requests: this.requestCounter.getAndResetRequests(),
|
|
1035
1060
|
validation_errors: this.validationErrorCounter.getAndResetValidationErrors(),
|
|
1036
1061
|
server_errors: this.serverErrorCounter.getAndResetServerErrors(),
|
|
@@ -1133,7 +1158,7 @@ __publicField(_ApitallyClient, "instance");
|
|
|
1133
1158
|
var ApitallyClient = _ApitallyClient;
|
|
1134
1159
|
|
|
1135
1160
|
// src/common/packageVersions.ts
|
|
1136
|
-
var
|
|
1161
|
+
var import_node_module = require("module");
|
|
1137
1162
|
var import_meta = {};
|
|
1138
1163
|
function getPackageVersion(name) {
|
|
1139
1164
|
const packageJsonPath = `${name}/package.json`;
|
|
@@ -1141,7 +1166,7 @@ function getPackageVersion(name) {
|
|
|
1141
1166
|
return require(packageJsonPath).version || null;
|
|
1142
1167
|
} catch (error) {
|
|
1143
1168
|
try {
|
|
1144
|
-
const _require = (0,
|
|
1169
|
+
const _require = (0, import_node_module.createRequire)(import_meta.url);
|
|
1145
1170
|
return _require(packageJsonPath).version || null;
|
|
1146
1171
|
} catch (error2) {
|
|
1147
1172
|
return null;
|
|
@@ -1150,6 +1175,143 @@ function getPackageVersion(name) {
|
|
|
1150
1175
|
}
|
|
1151
1176
|
__name(getPackageVersion, "getPackageVersion");
|
|
1152
1177
|
|
|
1178
|
+
// src/loggers/console.ts
|
|
1179
|
+
var import_node_util = require("util");
|
|
1180
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1181
|
+
var isPatched = false;
|
|
1182
|
+
var globalLogsContext;
|
|
1183
|
+
function patchConsole(logsContext) {
|
|
1184
|
+
globalLogsContext = logsContext;
|
|
1185
|
+
if (isPatched) {
|
|
1186
|
+
return;
|
|
1187
|
+
}
|
|
1188
|
+
const logMethods = [
|
|
1189
|
+
"log",
|
|
1190
|
+
"warn",
|
|
1191
|
+
"error",
|
|
1192
|
+
"info",
|
|
1193
|
+
"debug"
|
|
1194
|
+
];
|
|
1195
|
+
logMethods.forEach((method) => {
|
|
1196
|
+
const originalMethod = console[method];
|
|
1197
|
+
console[method] = function(...args) {
|
|
1198
|
+
captureLog(method, args);
|
|
1199
|
+
return originalMethod.apply(console, args);
|
|
1200
|
+
};
|
|
1201
|
+
});
|
|
1202
|
+
isPatched = true;
|
|
1203
|
+
}
|
|
1204
|
+
__name(patchConsole, "patchConsole");
|
|
1205
|
+
function captureLog(level, args) {
|
|
1206
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1207
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1208
|
+
logs.push({
|
|
1209
|
+
timestamp: Date.now() / 1e3,
|
|
1210
|
+
logger: "console",
|
|
1211
|
+
level,
|
|
1212
|
+
message: (0, import_node_util.format)(...args)
|
|
1213
|
+
});
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
__name(captureLog, "captureLog");
|
|
1217
|
+
|
|
1218
|
+
// src/loggers/utils.ts
|
|
1219
|
+
var import_node_util2 = require("util");
|
|
1220
|
+
function formatMessage(message, ...args) {
|
|
1221
|
+
return [
|
|
1222
|
+
message,
|
|
1223
|
+
...args
|
|
1224
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1225
|
+
}
|
|
1226
|
+
__name(formatMessage, "formatMessage");
|
|
1227
|
+
function removeKeys(obj, keys) {
|
|
1228
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1229
|
+
}
|
|
1230
|
+
__name(removeKeys, "removeKeys");
|
|
1231
|
+
function formatArg(arg) {
|
|
1232
|
+
if (typeof arg === "string") {
|
|
1233
|
+
return arg.trim();
|
|
1234
|
+
}
|
|
1235
|
+
if (arg instanceof Error) {
|
|
1236
|
+
return (0, import_node_util2.format)(arg).trim();
|
|
1237
|
+
}
|
|
1238
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1239
|
+
return "";
|
|
1240
|
+
}
|
|
1241
|
+
try {
|
|
1242
|
+
return JSON.stringify(arg);
|
|
1243
|
+
} catch {
|
|
1244
|
+
return (0, import_node_util2.format)(arg).trim();
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
__name(formatArg, "formatArg");
|
|
1248
|
+
function isEmptyObject(obj) {
|
|
1249
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1250
|
+
}
|
|
1251
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1252
|
+
|
|
1253
|
+
// src/loggers/pino.ts
|
|
1254
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1255
|
+
|
|
1256
|
+
// src/loggers/winston.ts
|
|
1257
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1258
|
+
var isPatched2 = false;
|
|
1259
|
+
var globalLogsContext2;
|
|
1260
|
+
async function patchWinston(logsContext) {
|
|
1261
|
+
var _a2, _b;
|
|
1262
|
+
globalLogsContext2 = logsContext;
|
|
1263
|
+
if (isPatched2) {
|
|
1264
|
+
return;
|
|
1265
|
+
}
|
|
1266
|
+
try {
|
|
1267
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1268
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1269
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1270
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1271
|
+
captureLog2(info);
|
|
1272
|
+
return originalWrite.call(this, info);
|
|
1273
|
+
};
|
|
1274
|
+
}
|
|
1275
|
+
} catch {
|
|
1276
|
+
}
|
|
1277
|
+
isPatched2 = true;
|
|
1278
|
+
}
|
|
1279
|
+
__name(patchWinston, "patchWinston");
|
|
1280
|
+
function captureLog2(info) {
|
|
1281
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1282
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1285
|
+
try {
|
|
1286
|
+
const rest = removeKeys(info, [
|
|
1287
|
+
"timestamp",
|
|
1288
|
+
"level",
|
|
1289
|
+
"message",
|
|
1290
|
+
"splat"
|
|
1291
|
+
]);
|
|
1292
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1293
|
+
if (formattedMessage) {
|
|
1294
|
+
logs.push({
|
|
1295
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1296
|
+
level: info.level || "info",
|
|
1297
|
+
message: formattedMessage.trim()
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
} catch (e) {
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
__name(captureLog2, "captureLog");
|
|
1304
|
+
function parseTimestamp(timestamp) {
|
|
1305
|
+
if (timestamp) {
|
|
1306
|
+
const ts = new Date(timestamp).getTime();
|
|
1307
|
+
if (!isNaN(ts)) {
|
|
1308
|
+
return ts / 1e3;
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
return Date.now() / 1e3;
|
|
1312
|
+
}
|
|
1313
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1314
|
+
|
|
1153
1315
|
// src/koa/middleware.ts
|
|
1154
1316
|
function useApitally(app, config) {
|
|
1155
1317
|
const client = new ApitallyClient(config);
|
|
@@ -1167,77 +1329,85 @@ function useApitally(app, config) {
|
|
|
1167
1329
|
}
|
|
1168
1330
|
__name(useApitally, "useApitally");
|
|
1169
1331
|
function getMiddleware(client) {
|
|
1332
|
+
const logsContext = new import_node_async_hooks.AsyncLocalStorage();
|
|
1333
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1334
|
+
patchConsole(logsContext);
|
|
1335
|
+
patchWinston(logsContext);
|
|
1336
|
+
}
|
|
1170
1337
|
return async (ctx, next) => {
|
|
1171
|
-
var _a2;
|
|
1172
1338
|
if (!client.isEnabled() || ctx.request.method.toUpperCase() === "OPTIONS") {
|
|
1173
1339
|
await next();
|
|
1174
1340
|
return;
|
|
1175
1341
|
}
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
if (path && statusCode === 500 && error instanceof Error) {
|
|
1186
|
-
serverError = error;
|
|
1187
|
-
client.serverErrorCounter.addServerError({
|
|
1188
|
-
consumer: (_a2 = getConsumer(ctx)) == null ? void 0 : _a2.identifier,
|
|
1189
|
-
method: ctx.request.method,
|
|
1190
|
-
path,
|
|
1191
|
-
type: error.name,
|
|
1192
|
-
msg: error.message,
|
|
1193
|
-
traceback: error.stack || ""
|
|
1194
|
-
});
|
|
1195
|
-
}
|
|
1196
|
-
throw error;
|
|
1197
|
-
} finally {
|
|
1198
|
-
const responseTime = performance.now() - startTime;
|
|
1199
|
-
const consumer = getConsumer(ctx);
|
|
1200
|
-
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1201
|
-
if (!path) {
|
|
1342
|
+
await logsContext.run([], async () => {
|
|
1343
|
+
var _a2;
|
|
1344
|
+
let path;
|
|
1345
|
+
let statusCode;
|
|
1346
|
+
let serverError;
|
|
1347
|
+
const startTime = performance.now();
|
|
1348
|
+
try {
|
|
1349
|
+
await next();
|
|
1350
|
+
} catch (error) {
|
|
1202
1351
|
path = getPath(ctx);
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
client.
|
|
1207
|
-
consumer:
|
|
1352
|
+
statusCode = error.statusCode || error.status || 500;
|
|
1353
|
+
if (path && statusCode === 500 && error instanceof Error) {
|
|
1354
|
+
serverError = error;
|
|
1355
|
+
client.serverErrorCounter.addServerError({
|
|
1356
|
+
consumer: (_a2 = getConsumer(ctx)) == null ? void 0 : _a2.identifier,
|
|
1208
1357
|
method: ctx.request.method,
|
|
1209
1358
|
path,
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
responseSize: ctx.response.length
|
|
1214
|
-
});
|
|
1215
|
-
} catch (error) {
|
|
1216
|
-
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
1217
|
-
context: ctx,
|
|
1218
|
-
error
|
|
1359
|
+
type: error.name,
|
|
1360
|
+
msg: error.message,
|
|
1361
|
+
traceback: error.stack || ""
|
|
1219
1362
|
});
|
|
1220
1363
|
}
|
|
1364
|
+
throw error;
|
|
1365
|
+
} finally {
|
|
1366
|
+
const responseTime = performance.now() - startTime;
|
|
1367
|
+
const consumer = getConsumer(ctx);
|
|
1368
|
+
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1369
|
+
if (!path) {
|
|
1370
|
+
path = getPath(ctx);
|
|
1371
|
+
}
|
|
1372
|
+
if (path) {
|
|
1373
|
+
try {
|
|
1374
|
+
client.requestCounter.addRequest({
|
|
1375
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1376
|
+
method: ctx.request.method,
|
|
1377
|
+
path,
|
|
1378
|
+
statusCode: statusCode || ctx.response.status,
|
|
1379
|
+
responseTime,
|
|
1380
|
+
requestSize: ctx.request.length,
|
|
1381
|
+
responseSize: ctx.response.length
|
|
1382
|
+
});
|
|
1383
|
+
} catch (error) {
|
|
1384
|
+
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
1385
|
+
context: ctx,
|
|
1386
|
+
error
|
|
1387
|
+
});
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
if (client.requestLogger.enabled) {
|
|
1391
|
+
const logs = logsContext.getStore();
|
|
1392
|
+
client.requestLogger.logRequest({
|
|
1393
|
+
timestamp: Date.now() / 1e3,
|
|
1394
|
+
method: ctx.request.method,
|
|
1395
|
+
path,
|
|
1396
|
+
url: ctx.request.href,
|
|
1397
|
+
headers: convertHeaders(ctx.request.headers),
|
|
1398
|
+
size: ctx.request.length,
|
|
1399
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1400
|
+
body: convertBody(ctx.request.body, ctx.request.get("content-type"))
|
|
1401
|
+
}, {
|
|
1402
|
+
statusCode: statusCode || ctx.response.status,
|
|
1403
|
+
responseTime: responseTime / 1e3,
|
|
1404
|
+
headers: convertHeaders(ctx.response.headers),
|
|
1405
|
+
size: ctx.response.length,
|
|
1406
|
+
body: convertBody(ctx.response.body, ctx.response.get("content-type"))
|
|
1407
|
+
}, serverError, logs);
|
|
1408
|
+
}
|
|
1221
1409
|
}
|
|
1222
|
-
|
|
1223
|
-
client.requestLogger.logRequest({
|
|
1224
|
-
timestamp: Date.now() / 1e3,
|
|
1225
|
-
method: ctx.request.method,
|
|
1226
|
-
path,
|
|
1227
|
-
url: ctx.request.href,
|
|
1228
|
-
headers: convertHeaders(ctx.request.headers),
|
|
1229
|
-
size: ctx.request.length,
|
|
1230
|
-
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1231
|
-
body: convertBody(ctx.request.body, ctx.request.get("content-type"))
|
|
1232
|
-
}, {
|
|
1233
|
-
statusCode: statusCode || ctx.response.status,
|
|
1234
|
-
responseTime: responseTime / 1e3,
|
|
1235
|
-
headers: convertHeaders(ctx.response.headers),
|
|
1236
|
-
size: ctx.response.length,
|
|
1237
|
-
body: convertBody(ctx.response.body, ctx.response.get("content-type"))
|
|
1238
|
-
}, serverError);
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1410
|
+
});
|
|
1241
1411
|
};
|
|
1242
1412
|
}
|
|
1243
1413
|
__name(getMiddleware, "getMiddleware");
|