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/h3/plugin.js
CHANGED
|
@@ -11,11 +11,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
11
11
|
|
|
12
12
|
// src/h3/plugin.ts
|
|
13
13
|
import { definePlugin, onError, onRequest, onResponse } from "h3";
|
|
14
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
14
15
|
import { performance } from "perf_hooks";
|
|
15
16
|
|
|
16
17
|
// src/common/client.ts
|
|
17
|
-
import { randomUUID as randomUUID3 } from "crypto";
|
|
18
18
|
import fetchRetry from "fetch-retry";
|
|
19
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
19
20
|
|
|
20
21
|
// src/common/consumerRegistry.ts
|
|
21
22
|
var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
@@ -75,7 +76,7 @@ var ConsumerRegistry = _ConsumerRegistry;
|
|
|
75
76
|
|
|
76
77
|
// src/common/logging.ts
|
|
77
78
|
import { createLogger, format, transports } from "winston";
|
|
78
|
-
|
|
79
|
+
function getLogger() {
|
|
79
80
|
return createLogger({
|
|
80
81
|
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
81
82
|
format: format.combine(format.colorize(), format.timestamp(), format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
|
|
@@ -83,7 +84,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
|
|
|
83
84
|
new transports.Console()
|
|
84
85
|
]
|
|
85
86
|
});
|
|
86
|
-
}
|
|
87
|
+
}
|
|
88
|
+
__name(getLogger, "getLogger");
|
|
87
89
|
|
|
88
90
|
// src/common/paramValidation.ts
|
|
89
91
|
function isValidClientId(clientId) {
|
|
@@ -187,7 +189,7 @@ var RequestCounter = _RequestCounter;
|
|
|
187
189
|
import AsyncLock from "async-lock";
|
|
188
190
|
import { Buffer as Buffer3 } from "buffer";
|
|
189
191
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
190
|
-
import { unlinkSync
|
|
192
|
+
import { unlinkSync, writeFileSync } from "fs";
|
|
191
193
|
import { tmpdir as tmpdir2 } from "os";
|
|
192
194
|
import { join as join2 } from "path";
|
|
193
195
|
|
|
@@ -250,6 +252,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
250
252
|
});
|
|
251
253
|
this.errorCounts.clear();
|
|
252
254
|
this.errorDetails.clear();
|
|
255
|
+
this.sentryEventIds.clear();
|
|
253
256
|
return data;
|
|
254
257
|
}
|
|
255
258
|
getKey(serverError) {
|
|
@@ -296,7 +299,8 @@ __name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
|
|
|
296
299
|
// src/common/tempGzipFile.ts
|
|
297
300
|
import { Buffer as Buffer2 } from "buffer";
|
|
298
301
|
import { randomUUID } from "crypto";
|
|
299
|
-
import { createWriteStream, readFile
|
|
302
|
+
import { createWriteStream, readFile } from "fs";
|
|
303
|
+
import { unlink } from "fs/promises";
|
|
300
304
|
import { tmpdir } from "os";
|
|
301
305
|
import { join } from "path";
|
|
302
306
|
import { createGzip } from "zlib";
|
|
@@ -361,7 +365,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
361
365
|
}
|
|
362
366
|
async delete() {
|
|
363
367
|
await this.close();
|
|
364
|
-
|
|
368
|
+
await unlink(this.filePath);
|
|
365
369
|
}
|
|
366
370
|
};
|
|
367
371
|
__name(_TempGzipFile, "TempGzipFile");
|
|
@@ -372,6 +376,7 @@ var MAX_BODY_SIZE = 5e4;
|
|
|
372
376
|
var MAX_FILE_SIZE = 1e6;
|
|
373
377
|
var MAX_FILES = 50;
|
|
374
378
|
var MAX_PENDING_WRITES = 100;
|
|
379
|
+
var MAX_LOG_MSG_LENGTH = 2048;
|
|
375
380
|
var BODY_TOO_LARGE = Buffer3.from("<body too large>");
|
|
376
381
|
var BODY_MASKED = Buffer3.from("<masked>");
|
|
377
382
|
var MASKED = "******";
|
|
@@ -428,6 +433,7 @@ var DEFAULT_CONFIG = {
|
|
|
428
433
|
logResponseHeaders: true,
|
|
429
434
|
logResponseBody: false,
|
|
430
435
|
logException: true,
|
|
436
|
+
captureLogs: false,
|
|
431
437
|
maskQueryParams: [],
|
|
432
438
|
maskHeaders: [],
|
|
433
439
|
maskBodyFields: [],
|
|
@@ -582,7 +588,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
582
588
|
item.request.url = url.toString();
|
|
583
589
|
return item;
|
|
584
590
|
}
|
|
585
|
-
logRequest(request, response, error) {
|
|
591
|
+
logRequest(request, response, error, logs) {
|
|
586
592
|
var _a2, _b, _c;
|
|
587
593
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
588
594
|
const url = new URL(request.url);
|
|
@@ -614,6 +620,14 @@ var _RequestLogger = class _RequestLogger {
|
|
|
614
620
|
sentryEventId: getSentryEventId()
|
|
615
621
|
} : void 0
|
|
616
622
|
};
|
|
623
|
+
if (logs && logs.length > 0) {
|
|
624
|
+
item.logs = logs.map((log) => ({
|
|
625
|
+
timestamp: log.timestamp,
|
|
626
|
+
logger: log.logger,
|
|
627
|
+
level: log.level,
|
|
628
|
+
message: truncateLogMessage(log.message)
|
|
629
|
+
}));
|
|
630
|
+
}
|
|
617
631
|
this.pendingWrites.push(item);
|
|
618
632
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
619
633
|
this.pendingWrites.shift();
|
|
@@ -635,7 +649,8 @@ var _RequestLogger = class _RequestLogger {
|
|
|
635
649
|
uuid: item.uuid,
|
|
636
650
|
request: skipEmptyValues(item.request),
|
|
637
651
|
response: skipEmptyValues(item.response),
|
|
638
|
-
exception: item.exception
|
|
652
|
+
exception: item.exception,
|
|
653
|
+
logs: item.logs
|
|
639
654
|
};
|
|
640
655
|
[
|
|
641
656
|
finalItem.request.body,
|
|
@@ -737,11 +752,19 @@ function skipEmptyValues(data) {
|
|
|
737
752
|
}));
|
|
738
753
|
}
|
|
739
754
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
755
|
+
function truncateLogMessage(msg) {
|
|
756
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
757
|
+
const suffix = "... (truncated)";
|
|
758
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
759
|
+
}
|
|
760
|
+
return msg;
|
|
761
|
+
}
|
|
762
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
740
763
|
function checkWritableFs() {
|
|
741
764
|
try {
|
|
742
765
|
const testPath = join2(tmpdir2(), `apitally-${randomUUID2()}`);
|
|
743
766
|
writeFileSync(testPath, "test");
|
|
744
|
-
|
|
767
|
+
unlinkSync(testPath);
|
|
745
768
|
return true;
|
|
746
769
|
} catch (error) {
|
|
747
770
|
return false;
|
|
@@ -1156,6 +1179,143 @@ async function teeResponse(response) {
|
|
|
1156
1179
|
}
|
|
1157
1180
|
__name(teeResponse, "teeResponse");
|
|
1158
1181
|
|
|
1182
|
+
// src/loggers/console.ts
|
|
1183
|
+
import { format as format2 } from "util";
|
|
1184
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1185
|
+
var isPatched = false;
|
|
1186
|
+
var globalLogsContext;
|
|
1187
|
+
function patchConsole(logsContext) {
|
|
1188
|
+
globalLogsContext = logsContext;
|
|
1189
|
+
if (isPatched) {
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1192
|
+
const logMethods = [
|
|
1193
|
+
"log",
|
|
1194
|
+
"warn",
|
|
1195
|
+
"error",
|
|
1196
|
+
"info",
|
|
1197
|
+
"debug"
|
|
1198
|
+
];
|
|
1199
|
+
logMethods.forEach((method) => {
|
|
1200
|
+
const originalMethod = console[method];
|
|
1201
|
+
console[method] = function(...args) {
|
|
1202
|
+
captureLog(method, args);
|
|
1203
|
+
return originalMethod.apply(console, args);
|
|
1204
|
+
};
|
|
1205
|
+
});
|
|
1206
|
+
isPatched = true;
|
|
1207
|
+
}
|
|
1208
|
+
__name(patchConsole, "patchConsole");
|
|
1209
|
+
function captureLog(level, args) {
|
|
1210
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1211
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1212
|
+
logs.push({
|
|
1213
|
+
timestamp: Date.now() / 1e3,
|
|
1214
|
+
logger: "console",
|
|
1215
|
+
level,
|
|
1216
|
+
message: format2(...args)
|
|
1217
|
+
});
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
__name(captureLog, "captureLog");
|
|
1221
|
+
|
|
1222
|
+
// src/loggers/utils.ts
|
|
1223
|
+
import { format as format3 } from "util";
|
|
1224
|
+
function formatMessage(message, ...args) {
|
|
1225
|
+
return [
|
|
1226
|
+
message,
|
|
1227
|
+
...args
|
|
1228
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1229
|
+
}
|
|
1230
|
+
__name(formatMessage, "formatMessage");
|
|
1231
|
+
function removeKeys(obj, keys) {
|
|
1232
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1233
|
+
}
|
|
1234
|
+
__name(removeKeys, "removeKeys");
|
|
1235
|
+
function formatArg(arg) {
|
|
1236
|
+
if (typeof arg === "string") {
|
|
1237
|
+
return arg.trim();
|
|
1238
|
+
}
|
|
1239
|
+
if (arg instanceof Error) {
|
|
1240
|
+
return format3(arg).trim();
|
|
1241
|
+
}
|
|
1242
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1243
|
+
return "";
|
|
1244
|
+
}
|
|
1245
|
+
try {
|
|
1246
|
+
return JSON.stringify(arg);
|
|
1247
|
+
} catch {
|
|
1248
|
+
return format3(arg).trim();
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
__name(formatArg, "formatArg");
|
|
1252
|
+
function isEmptyObject(obj) {
|
|
1253
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1254
|
+
}
|
|
1255
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1256
|
+
|
|
1257
|
+
// src/loggers/pino.ts
|
|
1258
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1259
|
+
|
|
1260
|
+
// src/loggers/winston.ts
|
|
1261
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1262
|
+
var isPatched2 = false;
|
|
1263
|
+
var globalLogsContext2;
|
|
1264
|
+
async function patchWinston(logsContext) {
|
|
1265
|
+
var _a2, _b;
|
|
1266
|
+
globalLogsContext2 = logsContext;
|
|
1267
|
+
if (isPatched2) {
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
try {
|
|
1271
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1272
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1273
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1274
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1275
|
+
captureLog2(info);
|
|
1276
|
+
return originalWrite.call(this, info);
|
|
1277
|
+
};
|
|
1278
|
+
}
|
|
1279
|
+
} catch {
|
|
1280
|
+
}
|
|
1281
|
+
isPatched2 = true;
|
|
1282
|
+
}
|
|
1283
|
+
__name(patchWinston, "patchWinston");
|
|
1284
|
+
function captureLog2(info) {
|
|
1285
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1286
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1287
|
+
return;
|
|
1288
|
+
}
|
|
1289
|
+
try {
|
|
1290
|
+
const rest = removeKeys(info, [
|
|
1291
|
+
"timestamp",
|
|
1292
|
+
"level",
|
|
1293
|
+
"message",
|
|
1294
|
+
"splat"
|
|
1295
|
+
]);
|
|
1296
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1297
|
+
if (formattedMessage) {
|
|
1298
|
+
logs.push({
|
|
1299
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1300
|
+
level: info.level || "info",
|
|
1301
|
+
message: formattedMessage.trim()
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1304
|
+
} catch (e) {
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
__name(captureLog2, "captureLog");
|
|
1308
|
+
function parseTimestamp(timestamp) {
|
|
1309
|
+
if (timestamp) {
|
|
1310
|
+
const ts = new Date(timestamp).getTime();
|
|
1311
|
+
if (!isNaN(ts)) {
|
|
1312
|
+
return ts / 1e3;
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
return Date.now() / 1e3;
|
|
1316
|
+
}
|
|
1317
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1318
|
+
|
|
1159
1319
|
// src/common/packageVersions.ts
|
|
1160
1320
|
import { createRequire } from "module";
|
|
1161
1321
|
function getPackageVersion(name) {
|
|
@@ -1223,11 +1383,14 @@ function getAppInfo(h3, appVersion) {
|
|
|
1223
1383
|
__name(getAppInfo, "getAppInfo");
|
|
1224
1384
|
|
|
1225
1385
|
// src/h3/plugin.ts
|
|
1386
|
+
var REQUEST_TIMESTAMP_SYMBOL = Symbol("apitally.requestTimestamp");
|
|
1387
|
+
var REQUEST_BODY_SYMBOL = Symbol("apitally.requestBody");
|
|
1226
1388
|
var jsonHeaders = new Headers({
|
|
1227
1389
|
"content-type": "application/json;charset=UTF-8"
|
|
1228
1390
|
});
|
|
1229
1391
|
var apitallyPlugin = definePlugin((app, config) => {
|
|
1230
1392
|
const client = new ApitallyClient(config);
|
|
1393
|
+
const logsContext = new AsyncLocalStorage();
|
|
1231
1394
|
const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
|
|
1232
1395
|
const appInfo = getAppInfo(app, config.appVersion);
|
|
1233
1396
|
if (appInfo.paths.length > 0 || attempt >= 10) {
|
|
@@ -1237,12 +1400,16 @@ var apitallyPlugin = definePlugin((app, config) => {
|
|
|
1237
1400
|
}
|
|
1238
1401
|
}, "setStartupData");
|
|
1239
1402
|
setTimeout(() => setStartupData(), 500);
|
|
1403
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1404
|
+
patchConsole(logsContext);
|
|
1405
|
+
patchWinston(logsContext);
|
|
1406
|
+
}
|
|
1240
1407
|
const handleResponse = /* @__PURE__ */ __name(async (event, response, error) => {
|
|
1241
1408
|
var _a2, _b;
|
|
1242
1409
|
if (event.req.method.toUpperCase() === "OPTIONS") {
|
|
1243
1410
|
return response;
|
|
1244
1411
|
}
|
|
1245
|
-
const startTime = event.context
|
|
1412
|
+
const startTime = event.context[REQUEST_TIMESTAMP_SYMBOL];
|
|
1246
1413
|
const responseTime = startTime ? performance.now() - startTime : 0;
|
|
1247
1414
|
const path = (_a2 = event.context.matchedRoute) == null ? void 0 : _a2.route;
|
|
1248
1415
|
const statusCode = (response == null ? void 0 : response.status) || (error == null ? void 0 : error.status) || 500;
|
|
@@ -1297,33 +1464,35 @@ var apitallyPlugin = definePlugin((app, config) => {
|
|
|
1297
1464
|
} else if (error && client.requestLogger.config.logResponseBody) {
|
|
1298
1465
|
responseBody = Buffer.from(JSON.stringify(error.toJSON()));
|
|
1299
1466
|
}
|
|
1467
|
+
const logs = logsContext.getStore();
|
|
1300
1468
|
client.requestLogger.logRequest({
|
|
1301
1469
|
timestamp: (Date.now() - responseTime) / 1e3,
|
|
1302
1470
|
method: event.req.method,
|
|
1303
1471
|
path,
|
|
1304
1472
|
url: event.req.url,
|
|
1305
1473
|
headers: convertHeaders(Object.fromEntries(event.req.headers.entries())),
|
|
1306
|
-
size:
|
|
1474
|
+
size: requestSize,
|
|
1307
1475
|
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1308
|
-
body: event.context
|
|
1476
|
+
body: event.context[REQUEST_BODY_SYMBOL]
|
|
1309
1477
|
}, {
|
|
1310
1478
|
statusCode,
|
|
1311
1479
|
responseTime: responseTime / 1e3,
|
|
1312
1480
|
headers: convertHeaders(Object.fromEntries(responseHeaders.entries())),
|
|
1313
1481
|
size: responseSize,
|
|
1314
1482
|
body: responseBody
|
|
1315
|
-
});
|
|
1483
|
+
}, (error == null ? void 0 : error.cause) instanceof Error ? error.cause : void 0, logs);
|
|
1316
1484
|
}
|
|
1317
1485
|
return newResponse;
|
|
1318
1486
|
}, "handleResponse");
|
|
1319
1487
|
app.use(onRequest(async (event) => {
|
|
1320
|
-
|
|
1488
|
+
logsContext.enterWith([]);
|
|
1489
|
+
event.context[REQUEST_TIMESTAMP_SYMBOL] = performance.now();
|
|
1321
1490
|
const requestContentType = event.req.headers.get("content-type");
|
|
1322
1491
|
const requestSize = parseContentLength(event.req.headers.get("content-length")) ?? 0;
|
|
1323
1492
|
if (client.requestLogger.enabled && client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType) && requestSize <= client.requestLogger.maxBodySize) {
|
|
1324
1493
|
const clonedRequest = event.req.clone();
|
|
1325
1494
|
const requestBody = Buffer.from(await clonedRequest.arrayBuffer());
|
|
1326
|
-
event.context
|
|
1495
|
+
event.context[REQUEST_BODY_SYMBOL] = requestBody;
|
|
1327
1496
|
}
|
|
1328
1497
|
})).use(onResponse((response, event) => {
|
|
1329
1498
|
if (client.isEnabled()) {
|