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/hono/index.cjs
CHANGED
|
@@ -39,11 +39,12 @@ __export(hono_exports, {
|
|
|
39
39
|
module.exports = __toCommonJS(hono_exports);
|
|
40
40
|
|
|
41
41
|
// src/hono/middleware.ts
|
|
42
|
-
var
|
|
42
|
+
var import_node_async_hooks = require("async_hooks");
|
|
43
|
+
var import_node_perf_hooks = require("perf_hooks");
|
|
43
44
|
|
|
44
45
|
// src/common/client.ts
|
|
45
|
-
var import_crypto5 = require("crypto");
|
|
46
46
|
var import_fetch_retry = __toESM(require("fetch-retry"), 1);
|
|
47
|
+
var import_node_crypto5 = require("crypto");
|
|
47
48
|
|
|
48
49
|
// src/common/consumerRegistry.ts
|
|
49
50
|
var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
@@ -103,7 +104,7 @@ var ConsumerRegistry = _ConsumerRegistry;
|
|
|
103
104
|
|
|
104
105
|
// src/common/logging.ts
|
|
105
106
|
var import_winston = require("winston");
|
|
106
|
-
|
|
107
|
+
function getLogger() {
|
|
107
108
|
return (0, import_winston.createLogger)({
|
|
108
109
|
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
109
110
|
format: import_winston.format.combine(import_winston.format.colorize(), import_winston.format.timestamp(), import_winston.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
|
|
@@ -111,7 +112,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
|
|
|
111
112
|
new import_winston.transports.Console()
|
|
112
113
|
]
|
|
113
114
|
});
|
|
114
|
-
}
|
|
115
|
+
}
|
|
116
|
+
__name(getLogger, "getLogger");
|
|
115
117
|
|
|
116
118
|
// src/common/paramValidation.ts
|
|
117
119
|
function isValidClientId(clientId) {
|
|
@@ -213,11 +215,11 @@ var RequestCounter = _RequestCounter;
|
|
|
213
215
|
|
|
214
216
|
// src/common/requestLogger.ts
|
|
215
217
|
var import_async_lock = __toESM(require("async-lock"), 1);
|
|
216
|
-
var
|
|
217
|
-
var
|
|
218
|
-
var
|
|
219
|
-
var
|
|
220
|
-
var
|
|
218
|
+
var import_node_buffer2 = require("buffer");
|
|
219
|
+
var import_node_crypto3 = require("crypto");
|
|
220
|
+
var import_node_fs2 = require("fs");
|
|
221
|
+
var import_node_os2 = require("os");
|
|
222
|
+
var import_node_path2 = require("path");
|
|
221
223
|
|
|
222
224
|
// src/common/sentry.ts
|
|
223
225
|
var sentry;
|
|
@@ -236,7 +238,7 @@ function getSentryEventId() {
|
|
|
236
238
|
__name(getSentryEventId, "getSentryEventId");
|
|
237
239
|
|
|
238
240
|
// src/common/serverErrorCounter.ts
|
|
239
|
-
var
|
|
241
|
+
var import_node_crypto = require("crypto");
|
|
240
242
|
var MAX_MSG_LENGTH = 2048;
|
|
241
243
|
var MAX_STACKTRACE_LENGTH = 65536;
|
|
242
244
|
var _ServerErrorCounter = class _ServerErrorCounter {
|
|
@@ -278,6 +280,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
278
280
|
});
|
|
279
281
|
this.errorCounts.clear();
|
|
280
282
|
this.errorDetails.clear();
|
|
283
|
+
this.sentryEventIds.clear();
|
|
281
284
|
return data;
|
|
282
285
|
}
|
|
283
286
|
getKey(serverError) {
|
|
@@ -289,7 +292,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
289
292
|
serverError.msg.trim(),
|
|
290
293
|
serverError.traceback.trim()
|
|
291
294
|
].join("|");
|
|
292
|
-
return (0,
|
|
295
|
+
return (0, import_node_crypto.createHash)("md5").update(hashInput).digest("hex");
|
|
293
296
|
}
|
|
294
297
|
};
|
|
295
298
|
__name(_ServerErrorCounter, "ServerErrorCounter");
|
|
@@ -322,12 +325,13 @@ function truncateExceptionStackTrace(stack) {
|
|
|
322
325
|
__name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
|
|
323
326
|
|
|
324
327
|
// src/common/tempGzipFile.ts
|
|
325
|
-
var
|
|
326
|
-
var
|
|
327
|
-
var
|
|
328
|
-
var
|
|
329
|
-
var
|
|
330
|
-
var
|
|
328
|
+
var import_node_buffer = require("buffer");
|
|
329
|
+
var import_node_crypto2 = require("crypto");
|
|
330
|
+
var import_node_fs = require("fs");
|
|
331
|
+
var import_promises = require("fs/promises");
|
|
332
|
+
var import_node_os = require("os");
|
|
333
|
+
var import_node_path = require("path");
|
|
334
|
+
var import_node_zlib = require("zlib");
|
|
331
335
|
var _TempGzipFile = class _TempGzipFile {
|
|
332
336
|
uuid;
|
|
333
337
|
filePath;
|
|
@@ -336,9 +340,9 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
336
340
|
readyPromise;
|
|
337
341
|
closedPromise;
|
|
338
342
|
constructor() {
|
|
339
|
-
this.uuid = (0,
|
|
340
|
-
this.filePath = (0,
|
|
341
|
-
this.writeStream = (0,
|
|
343
|
+
this.uuid = (0, import_node_crypto2.randomUUID)();
|
|
344
|
+
this.filePath = (0, import_node_path.join)((0, import_node_os.tmpdir)(), `apitally-${this.uuid}.gz`);
|
|
345
|
+
this.writeStream = (0, import_node_fs.createWriteStream)(this.filePath);
|
|
342
346
|
this.readyPromise = new Promise((resolve, reject) => {
|
|
343
347
|
this.writeStream.once("ready", resolve);
|
|
344
348
|
this.writeStream.once("error", reject);
|
|
@@ -347,7 +351,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
347
351
|
this.writeStream.once("close", resolve);
|
|
348
352
|
this.writeStream.once("error", reject);
|
|
349
353
|
});
|
|
350
|
-
this.gzip = (0,
|
|
354
|
+
this.gzip = (0, import_node_zlib.createGzip)();
|
|
351
355
|
this.gzip.pipe(this.writeStream);
|
|
352
356
|
}
|
|
353
357
|
get size() {
|
|
@@ -356,9 +360,9 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
356
360
|
async writeLine(data) {
|
|
357
361
|
await this.readyPromise;
|
|
358
362
|
return new Promise((resolve, reject) => {
|
|
359
|
-
this.gzip.write(
|
|
363
|
+
this.gzip.write(import_node_buffer.Buffer.concat([
|
|
360
364
|
data,
|
|
361
|
-
|
|
365
|
+
import_node_buffer.Buffer.from("\n")
|
|
362
366
|
]), (error) => {
|
|
363
367
|
if (error) {
|
|
364
368
|
reject(error);
|
|
@@ -370,7 +374,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
370
374
|
}
|
|
371
375
|
async getContent() {
|
|
372
376
|
return new Promise((resolve, reject) => {
|
|
373
|
-
(0,
|
|
377
|
+
(0, import_node_fs.readFile)(this.filePath, (error, data) => {
|
|
374
378
|
if (error) {
|
|
375
379
|
reject(error);
|
|
376
380
|
} else {
|
|
@@ -389,7 +393,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
389
393
|
}
|
|
390
394
|
async delete() {
|
|
391
395
|
await this.close();
|
|
392
|
-
(0,
|
|
396
|
+
await (0, import_promises.unlink)(this.filePath);
|
|
393
397
|
}
|
|
394
398
|
};
|
|
395
399
|
__name(_TempGzipFile, "TempGzipFile");
|
|
@@ -400,8 +404,9 @@ var MAX_BODY_SIZE = 5e4;
|
|
|
400
404
|
var MAX_FILE_SIZE = 1e6;
|
|
401
405
|
var MAX_FILES = 50;
|
|
402
406
|
var MAX_PENDING_WRITES = 100;
|
|
403
|
-
var
|
|
404
|
-
var
|
|
407
|
+
var MAX_LOG_MSG_LENGTH = 2048;
|
|
408
|
+
var BODY_TOO_LARGE = import_node_buffer2.Buffer.from("<body too large>");
|
|
409
|
+
var BODY_MASKED = import_node_buffer2.Buffer.from("<masked>");
|
|
405
410
|
var MASKED = "******";
|
|
406
411
|
var ALLOWED_CONTENT_TYPES = [
|
|
407
412
|
"application/json",
|
|
@@ -456,6 +461,7 @@ var DEFAULT_CONFIG = {
|
|
|
456
461
|
logResponseHeaders: true,
|
|
457
462
|
logResponseBody: false,
|
|
458
463
|
logException: true,
|
|
464
|
+
captureLogs: false,
|
|
459
465
|
maskQueryParams: [],
|
|
460
466
|
maskHeaders: [],
|
|
461
467
|
maskBodyFields: [],
|
|
@@ -598,7 +604,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
598
604
|
try {
|
|
599
605
|
const parsedBody = JSON.parse(bodyData.toString());
|
|
600
606
|
const maskedBody = this.maskBody(parsedBody);
|
|
601
|
-
item[key].body =
|
|
607
|
+
item[key].body = import_node_buffer2.Buffer.from(JSON.stringify(maskedBody));
|
|
602
608
|
} catch {
|
|
603
609
|
}
|
|
604
610
|
}
|
|
@@ -610,7 +616,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
610
616
|
item.request.url = url.toString();
|
|
611
617
|
return item;
|
|
612
618
|
}
|
|
613
|
-
logRequest(request, response, error) {
|
|
619
|
+
logRequest(request, response, error, logs) {
|
|
614
620
|
var _a2, _b, _c;
|
|
615
621
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
616
622
|
const url = new URL(request.url);
|
|
@@ -632,7 +638,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
632
638
|
response.size = void 0;
|
|
633
639
|
}
|
|
634
640
|
const item = {
|
|
635
|
-
uuid: (0,
|
|
641
|
+
uuid: (0, import_node_crypto3.randomUUID)(),
|
|
636
642
|
request,
|
|
637
643
|
response,
|
|
638
644
|
exception: error && this.config.logException ? {
|
|
@@ -642,6 +648,14 @@ var _RequestLogger = class _RequestLogger {
|
|
|
642
648
|
sentryEventId: getSentryEventId()
|
|
643
649
|
} : void 0
|
|
644
650
|
};
|
|
651
|
+
if (logs && logs.length > 0) {
|
|
652
|
+
item.logs = logs.map((log) => ({
|
|
653
|
+
timestamp: log.timestamp,
|
|
654
|
+
logger: log.logger,
|
|
655
|
+
level: log.level,
|
|
656
|
+
message: truncateLogMessage(log.message)
|
|
657
|
+
}));
|
|
658
|
+
}
|
|
645
659
|
this.pendingWrites.push(item);
|
|
646
660
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
647
661
|
this.pendingWrites.shift();
|
|
@@ -663,7 +677,8 @@ var _RequestLogger = class _RequestLogger {
|
|
|
663
677
|
uuid: item.uuid,
|
|
664
678
|
request: skipEmptyValues(item.request),
|
|
665
679
|
response: skipEmptyValues(item.response),
|
|
666
|
-
exception: item.exception
|
|
680
|
+
exception: item.exception,
|
|
681
|
+
logs: item.logs
|
|
667
682
|
};
|
|
668
683
|
[
|
|
669
684
|
finalItem.request.body,
|
|
@@ -675,7 +690,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
675
690
|
};
|
|
676
691
|
}
|
|
677
692
|
});
|
|
678
|
-
await this.currentFile.writeLine(
|
|
693
|
+
await this.currentFile.writeLine(import_node_buffer2.Buffer.from(JSON.stringify(finalItem)));
|
|
679
694
|
}
|
|
680
695
|
}
|
|
681
696
|
});
|
|
@@ -758,18 +773,26 @@ __name(matchPatterns, "matchPatterns");
|
|
|
758
773
|
function skipEmptyValues(data) {
|
|
759
774
|
return Object.fromEntries(Object.entries(data).filter(([_, v]) => {
|
|
760
775
|
if (v == null || Number.isNaN(v)) return false;
|
|
761
|
-
if (Array.isArray(v) ||
|
|
776
|
+
if (Array.isArray(v) || import_node_buffer2.Buffer.isBuffer(v) || typeof v === "string") {
|
|
762
777
|
return v.length > 0;
|
|
763
778
|
}
|
|
764
779
|
return true;
|
|
765
780
|
}));
|
|
766
781
|
}
|
|
767
782
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
783
|
+
function truncateLogMessage(msg) {
|
|
784
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
785
|
+
const suffix = "... (truncated)";
|
|
786
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
787
|
+
}
|
|
788
|
+
return msg;
|
|
789
|
+
}
|
|
790
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
768
791
|
function checkWritableFs() {
|
|
769
792
|
try {
|
|
770
|
-
const testPath = (0,
|
|
771
|
-
(0,
|
|
772
|
-
(0,
|
|
793
|
+
const testPath = (0, import_node_path2.join)((0, import_node_os2.tmpdir)(), `apitally-${(0, import_node_crypto3.randomUUID)()}`);
|
|
794
|
+
(0, import_node_fs2.writeFileSync)(testPath, "test");
|
|
795
|
+
(0, import_node_fs2.unlinkSync)(testPath);
|
|
773
796
|
return true;
|
|
774
797
|
} catch (error) {
|
|
775
798
|
return false;
|
|
@@ -778,7 +801,7 @@ function checkWritableFs() {
|
|
|
778
801
|
__name(checkWritableFs, "checkWritableFs");
|
|
779
802
|
|
|
780
803
|
// src/common/validationErrorCounter.ts
|
|
781
|
-
var
|
|
804
|
+
var import_node_crypto4 = require("crypto");
|
|
782
805
|
var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
783
806
|
errorCounts;
|
|
784
807
|
errorDetails;
|
|
@@ -822,7 +845,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
822
845
|
validationError.msg.trim(),
|
|
823
846
|
validationError.type
|
|
824
847
|
].join("|");
|
|
825
|
-
return (0,
|
|
848
|
+
return (0, import_node_crypto4.createHash)("md5").update(hashInput).digest("hex");
|
|
826
849
|
}
|
|
827
850
|
};
|
|
828
851
|
__name(_ValidationErrorCounter, "ValidationErrorCounter");
|
|
@@ -873,7 +896,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
873
896
|
_ApitallyClient.instance = this;
|
|
874
897
|
this.clientId = clientId;
|
|
875
898
|
this.env = env;
|
|
876
|
-
this.instanceUuid = (0,
|
|
899
|
+
this.instanceUuid = (0, import_node_crypto5.randomUUID)();
|
|
877
900
|
this.syncDataQueue = [];
|
|
878
901
|
this.requestCounter = new RequestCounter();
|
|
879
902
|
this.requestLogger = new RequestLogger(requestLogging ?? requestLoggingConfig);
|
|
@@ -979,7 +1002,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
979
1002
|
this.logger.debug("Sending startup data to Apitally Hub");
|
|
980
1003
|
const payload = {
|
|
981
1004
|
instance_uuid: this.instanceUuid,
|
|
982
|
-
message_uuid: (0,
|
|
1005
|
+
message_uuid: (0, import_node_crypto5.randomUUID)(),
|
|
983
1006
|
...this.startupData
|
|
984
1007
|
};
|
|
985
1008
|
try {
|
|
@@ -1001,7 +1024,7 @@ var _ApitallyClient = class _ApitallyClient {
|
|
|
1001
1024
|
const newPayload = {
|
|
1002
1025
|
timestamp: Date.now() / 1e3,
|
|
1003
1026
|
instance_uuid: this.instanceUuid,
|
|
1004
|
-
message_uuid: (0,
|
|
1027
|
+
message_uuid: (0, import_node_crypto5.randomUUID)(),
|
|
1005
1028
|
requests: this.requestCounter.getAndResetRequests(),
|
|
1006
1029
|
validation_errors: this.validationErrorCounter.getAndResetValidationErrors(),
|
|
1007
1030
|
server_errors: this.serverErrorCounter.getAndResetServerErrors(),
|
|
@@ -1193,11 +1216,148 @@ async function teeResponse(response) {
|
|
|
1193
1216
|
}
|
|
1194
1217
|
__name(teeResponse, "teeResponse");
|
|
1195
1218
|
|
|
1219
|
+
// src/loggers/console.ts
|
|
1220
|
+
var import_node_util = require("util");
|
|
1221
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1222
|
+
var isPatched = false;
|
|
1223
|
+
var globalLogsContext;
|
|
1224
|
+
function patchConsole(logsContext) {
|
|
1225
|
+
globalLogsContext = logsContext;
|
|
1226
|
+
if (isPatched) {
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1229
|
+
const logMethods = [
|
|
1230
|
+
"log",
|
|
1231
|
+
"warn",
|
|
1232
|
+
"error",
|
|
1233
|
+
"info",
|
|
1234
|
+
"debug"
|
|
1235
|
+
];
|
|
1236
|
+
logMethods.forEach((method) => {
|
|
1237
|
+
const originalMethod = console[method];
|
|
1238
|
+
console[method] = function(...args) {
|
|
1239
|
+
captureLog(method, args);
|
|
1240
|
+
return originalMethod.apply(console, args);
|
|
1241
|
+
};
|
|
1242
|
+
});
|
|
1243
|
+
isPatched = true;
|
|
1244
|
+
}
|
|
1245
|
+
__name(patchConsole, "patchConsole");
|
|
1246
|
+
function captureLog(level, args) {
|
|
1247
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1248
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1249
|
+
logs.push({
|
|
1250
|
+
timestamp: Date.now() / 1e3,
|
|
1251
|
+
logger: "console",
|
|
1252
|
+
level,
|
|
1253
|
+
message: (0, import_node_util.format)(...args)
|
|
1254
|
+
});
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
__name(captureLog, "captureLog");
|
|
1258
|
+
|
|
1259
|
+
// src/loggers/utils.ts
|
|
1260
|
+
var import_node_util2 = require("util");
|
|
1261
|
+
function formatMessage(message, ...args) {
|
|
1262
|
+
return [
|
|
1263
|
+
message,
|
|
1264
|
+
...args
|
|
1265
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1266
|
+
}
|
|
1267
|
+
__name(formatMessage, "formatMessage");
|
|
1268
|
+
function removeKeys(obj, keys) {
|
|
1269
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1270
|
+
}
|
|
1271
|
+
__name(removeKeys, "removeKeys");
|
|
1272
|
+
function formatArg(arg) {
|
|
1273
|
+
if (typeof arg === "string") {
|
|
1274
|
+
return arg.trim();
|
|
1275
|
+
}
|
|
1276
|
+
if (arg instanceof Error) {
|
|
1277
|
+
return (0, import_node_util2.format)(arg).trim();
|
|
1278
|
+
}
|
|
1279
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1280
|
+
return "";
|
|
1281
|
+
}
|
|
1282
|
+
try {
|
|
1283
|
+
return JSON.stringify(arg);
|
|
1284
|
+
} catch {
|
|
1285
|
+
return (0, import_node_util2.format)(arg).trim();
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
__name(formatArg, "formatArg");
|
|
1289
|
+
function isEmptyObject(obj) {
|
|
1290
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1291
|
+
}
|
|
1292
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1293
|
+
|
|
1294
|
+
// src/loggers/pino.ts
|
|
1295
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1296
|
+
|
|
1297
|
+
// src/loggers/winston.ts
|
|
1298
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1299
|
+
var isPatched2 = false;
|
|
1300
|
+
var globalLogsContext2;
|
|
1301
|
+
async function patchWinston(logsContext) {
|
|
1302
|
+
var _a2, _b;
|
|
1303
|
+
globalLogsContext2 = logsContext;
|
|
1304
|
+
if (isPatched2) {
|
|
1305
|
+
return;
|
|
1306
|
+
}
|
|
1307
|
+
try {
|
|
1308
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1309
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1310
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1311
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1312
|
+
captureLog2(info);
|
|
1313
|
+
return originalWrite.call(this, info);
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
} catch {
|
|
1317
|
+
}
|
|
1318
|
+
isPatched2 = true;
|
|
1319
|
+
}
|
|
1320
|
+
__name(patchWinston, "patchWinston");
|
|
1321
|
+
function captureLog2(info) {
|
|
1322
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1323
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1324
|
+
return;
|
|
1325
|
+
}
|
|
1326
|
+
try {
|
|
1327
|
+
const rest = removeKeys(info, [
|
|
1328
|
+
"timestamp",
|
|
1329
|
+
"level",
|
|
1330
|
+
"message",
|
|
1331
|
+
"splat"
|
|
1332
|
+
]);
|
|
1333
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1334
|
+
if (formattedMessage) {
|
|
1335
|
+
logs.push({
|
|
1336
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1337
|
+
level: info.level || "info",
|
|
1338
|
+
message: formattedMessage.trim()
|
|
1339
|
+
});
|
|
1340
|
+
}
|
|
1341
|
+
} catch (e) {
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
__name(captureLog2, "captureLog");
|
|
1345
|
+
function parseTimestamp(timestamp) {
|
|
1346
|
+
if (timestamp) {
|
|
1347
|
+
const ts = new Date(timestamp).getTime();
|
|
1348
|
+
if (!isNaN(ts)) {
|
|
1349
|
+
return ts / 1e3;
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
return Date.now() / 1e3;
|
|
1353
|
+
}
|
|
1354
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1355
|
+
|
|
1196
1356
|
// src/hono/utils.ts
|
|
1197
1357
|
var import_handler = require("hono/utils/handler");
|
|
1198
1358
|
|
|
1199
1359
|
// src/common/packageVersions.ts
|
|
1200
|
-
var
|
|
1360
|
+
var import_node_module = require("module");
|
|
1201
1361
|
var import_meta = {};
|
|
1202
1362
|
function getPackageVersion(name) {
|
|
1203
1363
|
const packageJsonPath = `${name}/package.json`;
|
|
@@ -1205,7 +1365,7 @@ function getPackageVersion(name) {
|
|
|
1205
1365
|
return require(packageJsonPath).version || null;
|
|
1206
1366
|
} catch (error) {
|
|
1207
1367
|
try {
|
|
1208
|
-
const _require = (0,
|
|
1368
|
+
const _require = (0, import_node_module.createRequire)(import_meta.url);
|
|
1209
1369
|
return _require(packageJsonPath).version || null;
|
|
1210
1370
|
} catch (error2) {
|
|
1211
1371
|
return null;
|
|
@@ -1307,84 +1467,92 @@ function useApitally(app, config) {
|
|
|
1307
1467
|
}
|
|
1308
1468
|
__name(useApitally, "useApitally");
|
|
1309
1469
|
function getMiddleware(client) {
|
|
1470
|
+
const logsContext = new import_node_async_hooks.AsyncLocalStorage();
|
|
1471
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1472
|
+
patchConsole(logsContext);
|
|
1473
|
+
patchWinston(logsContext);
|
|
1474
|
+
}
|
|
1310
1475
|
return async (c, next) => {
|
|
1311
1476
|
if (!client.isEnabled() || c.req.method.toUpperCase() === "OPTIONS") {
|
|
1312
1477
|
await next();
|
|
1313
1478
|
return;
|
|
1314
1479
|
}
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
method: c.req.method,
|
|
1327
|
-
path: c.req.routePath,
|
|
1328
|
-
statusCode: c.res.status,
|
|
1329
|
-
responseTime,
|
|
1330
|
-
requestSize,
|
|
1331
|
-
responseSize
|
|
1332
|
-
});
|
|
1333
|
-
response = newResponse;
|
|
1334
|
-
if (c.res.status === 400) {
|
|
1335
|
-
const [responseJson, newResponse2] = await getResponseJson(response);
|
|
1336
|
-
const validationErrors = extractZodErrors(responseJson);
|
|
1337
|
-
validationErrors.forEach((error) => {
|
|
1338
|
-
client.validationErrorCounter.addValidationError({
|
|
1339
|
-
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1340
|
-
method: c.req.method,
|
|
1341
|
-
path: c.req.routePath,
|
|
1342
|
-
...error
|
|
1343
|
-
});
|
|
1344
|
-
});
|
|
1345
|
-
response = newResponse2;
|
|
1346
|
-
}
|
|
1347
|
-
if (c.error) {
|
|
1348
|
-
client.serverErrorCounter.addServerError({
|
|
1480
|
+
await logsContext.run([], async () => {
|
|
1481
|
+
const timestamp = Date.now() / 1e3;
|
|
1482
|
+
const startTime = import_node_perf_hooks.performance.now();
|
|
1483
|
+
await next();
|
|
1484
|
+
let response;
|
|
1485
|
+
const responseTime = import_node_perf_hooks.performance.now() - startTime;
|
|
1486
|
+
const [responseSize, newResponse] = await measureResponseSize(c.res);
|
|
1487
|
+
const requestSize = parseContentLength(c.req.header("content-length"));
|
|
1488
|
+
const consumer = getConsumer(c);
|
|
1489
|
+
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1490
|
+
client.requestCounter.addRequest({
|
|
1349
1491
|
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1350
1492
|
method: c.req.method,
|
|
1351
1493
|
path: c.req.routePath,
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1494
|
+
statusCode: c.res.status,
|
|
1495
|
+
responseTime,
|
|
1496
|
+
requestSize,
|
|
1497
|
+
responseSize
|
|
1355
1498
|
});
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1499
|
+
response = newResponse;
|
|
1500
|
+
if (c.res.status === 400) {
|
|
1501
|
+
const [responseJson, newResponse2] = await getResponseJson(response);
|
|
1502
|
+
const validationErrors = extractZodErrors(responseJson);
|
|
1503
|
+
validationErrors.forEach((error) => {
|
|
1504
|
+
client.validationErrorCounter.addValidationError({
|
|
1505
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1506
|
+
method: c.req.method,
|
|
1507
|
+
path: c.req.routePath,
|
|
1508
|
+
...error
|
|
1509
|
+
});
|
|
1510
|
+
});
|
|
1368
1511
|
response = newResponse2;
|
|
1369
1512
|
}
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
}
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1513
|
+
if (c.error) {
|
|
1514
|
+
client.serverErrorCounter.addServerError({
|
|
1515
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1516
|
+
method: c.req.method,
|
|
1517
|
+
path: c.req.routePath,
|
|
1518
|
+
type: c.error.name,
|
|
1519
|
+
msg: c.error.message,
|
|
1520
|
+
traceback: c.error.stack || ""
|
|
1521
|
+
});
|
|
1522
|
+
}
|
|
1523
|
+
if (client.requestLogger.enabled) {
|
|
1524
|
+
let requestBody;
|
|
1525
|
+
let responseBody;
|
|
1526
|
+
let newResponse2 = response;
|
|
1527
|
+
const requestContentType = c.req.header("content-type");
|
|
1528
|
+
const responseContentType = c.res.headers.get("content-type");
|
|
1529
|
+
if (client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType)) {
|
|
1530
|
+
requestBody = Buffer.from(await c.req.arrayBuffer());
|
|
1531
|
+
}
|
|
1532
|
+
if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
|
|
1533
|
+
[responseBody, newResponse2] = await getResponseBody(response);
|
|
1534
|
+
response = newResponse2;
|
|
1535
|
+
}
|
|
1536
|
+
const logs = logsContext.getStore();
|
|
1537
|
+
client.requestLogger.logRequest({
|
|
1538
|
+
timestamp,
|
|
1539
|
+
method: c.req.method,
|
|
1540
|
+
path: c.req.routePath,
|
|
1541
|
+
url: c.req.url,
|
|
1542
|
+
headers: convertHeaders(c.req.header()),
|
|
1543
|
+
size: requestSize,
|
|
1544
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1545
|
+
body: requestBody
|
|
1546
|
+
}, {
|
|
1547
|
+
statusCode: c.res.status,
|
|
1548
|
+
responseTime: responseTime / 1e3,
|
|
1549
|
+
headers: convertHeaders(c.res.headers),
|
|
1550
|
+
size: responseSize,
|
|
1551
|
+
body: responseBody
|
|
1552
|
+
}, c.error, logs);
|
|
1553
|
+
}
|
|
1554
|
+
c.res = response;
|
|
1555
|
+
});
|
|
1388
1556
|
};
|
|
1389
1557
|
}
|
|
1390
1558
|
__name(getMiddleware, "getMiddleware");
|