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/middleware.js
CHANGED
|
@@ -10,11 +10,12 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
10
10
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
11
|
|
|
12
12
|
// src/hono/middleware.ts
|
|
13
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
13
14
|
import { performance } from "perf_hooks";
|
|
14
15
|
|
|
15
16
|
// src/common/client.ts
|
|
16
|
-
import { randomUUID as randomUUID3 } from "crypto";
|
|
17
17
|
import fetchRetry from "fetch-retry";
|
|
18
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
18
19
|
|
|
19
20
|
// src/common/consumerRegistry.ts
|
|
20
21
|
var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
@@ -74,7 +75,7 @@ var ConsumerRegistry = _ConsumerRegistry;
|
|
|
74
75
|
|
|
75
76
|
// src/common/logging.ts
|
|
76
77
|
import { createLogger, format, transports } from "winston";
|
|
77
|
-
|
|
78
|
+
function getLogger() {
|
|
78
79
|
return createLogger({
|
|
79
80
|
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
80
81
|
format: format.combine(format.colorize(), format.timestamp(), format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
|
|
@@ -82,7 +83,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
|
|
|
82
83
|
new transports.Console()
|
|
83
84
|
]
|
|
84
85
|
});
|
|
85
|
-
}
|
|
86
|
+
}
|
|
87
|
+
__name(getLogger, "getLogger");
|
|
86
88
|
|
|
87
89
|
// src/common/paramValidation.ts
|
|
88
90
|
function isValidClientId(clientId) {
|
|
@@ -186,7 +188,7 @@ var RequestCounter = _RequestCounter;
|
|
|
186
188
|
import AsyncLock from "async-lock";
|
|
187
189
|
import { Buffer as Buffer3 } from "buffer";
|
|
188
190
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
189
|
-
import { unlinkSync
|
|
191
|
+
import { unlinkSync, writeFileSync } from "fs";
|
|
190
192
|
import { tmpdir as tmpdir2 } from "os";
|
|
191
193
|
import { join as join2 } from "path";
|
|
192
194
|
|
|
@@ -249,6 +251,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
249
251
|
});
|
|
250
252
|
this.errorCounts.clear();
|
|
251
253
|
this.errorDetails.clear();
|
|
254
|
+
this.sentryEventIds.clear();
|
|
252
255
|
return data;
|
|
253
256
|
}
|
|
254
257
|
getKey(serverError) {
|
|
@@ -295,7 +298,8 @@ __name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
|
|
|
295
298
|
// src/common/tempGzipFile.ts
|
|
296
299
|
import { Buffer as Buffer2 } from "buffer";
|
|
297
300
|
import { randomUUID } from "crypto";
|
|
298
|
-
import { createWriteStream, readFile
|
|
301
|
+
import { createWriteStream, readFile } from "fs";
|
|
302
|
+
import { unlink } from "fs/promises";
|
|
299
303
|
import { tmpdir } from "os";
|
|
300
304
|
import { join } from "path";
|
|
301
305
|
import { createGzip } from "zlib";
|
|
@@ -360,7 +364,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
360
364
|
}
|
|
361
365
|
async delete() {
|
|
362
366
|
await this.close();
|
|
363
|
-
|
|
367
|
+
await unlink(this.filePath);
|
|
364
368
|
}
|
|
365
369
|
};
|
|
366
370
|
__name(_TempGzipFile, "TempGzipFile");
|
|
@@ -371,6 +375,7 @@ var MAX_BODY_SIZE = 5e4;
|
|
|
371
375
|
var MAX_FILE_SIZE = 1e6;
|
|
372
376
|
var MAX_FILES = 50;
|
|
373
377
|
var MAX_PENDING_WRITES = 100;
|
|
378
|
+
var MAX_LOG_MSG_LENGTH = 2048;
|
|
374
379
|
var BODY_TOO_LARGE = Buffer3.from("<body too large>");
|
|
375
380
|
var BODY_MASKED = Buffer3.from("<masked>");
|
|
376
381
|
var MASKED = "******";
|
|
@@ -427,6 +432,7 @@ var DEFAULT_CONFIG = {
|
|
|
427
432
|
logResponseHeaders: true,
|
|
428
433
|
logResponseBody: false,
|
|
429
434
|
logException: true,
|
|
435
|
+
captureLogs: false,
|
|
430
436
|
maskQueryParams: [],
|
|
431
437
|
maskHeaders: [],
|
|
432
438
|
maskBodyFields: [],
|
|
@@ -581,7 +587,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
581
587
|
item.request.url = url.toString();
|
|
582
588
|
return item;
|
|
583
589
|
}
|
|
584
|
-
logRequest(request, response, error) {
|
|
590
|
+
logRequest(request, response, error, logs) {
|
|
585
591
|
var _a2, _b, _c;
|
|
586
592
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
587
593
|
const url = new URL(request.url);
|
|
@@ -613,6 +619,14 @@ var _RequestLogger = class _RequestLogger {
|
|
|
613
619
|
sentryEventId: getSentryEventId()
|
|
614
620
|
} : void 0
|
|
615
621
|
};
|
|
622
|
+
if (logs && logs.length > 0) {
|
|
623
|
+
item.logs = logs.map((log) => ({
|
|
624
|
+
timestamp: log.timestamp,
|
|
625
|
+
logger: log.logger,
|
|
626
|
+
level: log.level,
|
|
627
|
+
message: truncateLogMessage(log.message)
|
|
628
|
+
}));
|
|
629
|
+
}
|
|
616
630
|
this.pendingWrites.push(item);
|
|
617
631
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
618
632
|
this.pendingWrites.shift();
|
|
@@ -634,7 +648,8 @@ var _RequestLogger = class _RequestLogger {
|
|
|
634
648
|
uuid: item.uuid,
|
|
635
649
|
request: skipEmptyValues(item.request),
|
|
636
650
|
response: skipEmptyValues(item.response),
|
|
637
|
-
exception: item.exception
|
|
651
|
+
exception: item.exception,
|
|
652
|
+
logs: item.logs
|
|
638
653
|
};
|
|
639
654
|
[
|
|
640
655
|
finalItem.request.body,
|
|
@@ -736,11 +751,19 @@ function skipEmptyValues(data) {
|
|
|
736
751
|
}));
|
|
737
752
|
}
|
|
738
753
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
754
|
+
function truncateLogMessage(msg) {
|
|
755
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
756
|
+
const suffix = "... (truncated)";
|
|
757
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
758
|
+
}
|
|
759
|
+
return msg;
|
|
760
|
+
}
|
|
761
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
739
762
|
function checkWritableFs() {
|
|
740
763
|
try {
|
|
741
764
|
const testPath = join2(tmpdir2(), `apitally-${randomUUID2()}`);
|
|
742
765
|
writeFileSync(testPath, "test");
|
|
743
|
-
|
|
766
|
+
unlinkSync(testPath);
|
|
744
767
|
return true;
|
|
745
768
|
} catch (error) {
|
|
746
769
|
return false;
|
|
@@ -1164,6 +1187,143 @@ async function teeResponse(response) {
|
|
|
1164
1187
|
}
|
|
1165
1188
|
__name(teeResponse, "teeResponse");
|
|
1166
1189
|
|
|
1190
|
+
// src/loggers/console.ts
|
|
1191
|
+
import { format as format2 } from "util";
|
|
1192
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1193
|
+
var isPatched = false;
|
|
1194
|
+
var globalLogsContext;
|
|
1195
|
+
function patchConsole(logsContext) {
|
|
1196
|
+
globalLogsContext = logsContext;
|
|
1197
|
+
if (isPatched) {
|
|
1198
|
+
return;
|
|
1199
|
+
}
|
|
1200
|
+
const logMethods = [
|
|
1201
|
+
"log",
|
|
1202
|
+
"warn",
|
|
1203
|
+
"error",
|
|
1204
|
+
"info",
|
|
1205
|
+
"debug"
|
|
1206
|
+
];
|
|
1207
|
+
logMethods.forEach((method) => {
|
|
1208
|
+
const originalMethod = console[method];
|
|
1209
|
+
console[method] = function(...args) {
|
|
1210
|
+
captureLog(method, args);
|
|
1211
|
+
return originalMethod.apply(console, args);
|
|
1212
|
+
};
|
|
1213
|
+
});
|
|
1214
|
+
isPatched = true;
|
|
1215
|
+
}
|
|
1216
|
+
__name(patchConsole, "patchConsole");
|
|
1217
|
+
function captureLog(level, args) {
|
|
1218
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1219
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1220
|
+
logs.push({
|
|
1221
|
+
timestamp: Date.now() / 1e3,
|
|
1222
|
+
logger: "console",
|
|
1223
|
+
level,
|
|
1224
|
+
message: format2(...args)
|
|
1225
|
+
});
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
__name(captureLog, "captureLog");
|
|
1229
|
+
|
|
1230
|
+
// src/loggers/utils.ts
|
|
1231
|
+
import { format as format3 } from "util";
|
|
1232
|
+
function formatMessage(message, ...args) {
|
|
1233
|
+
return [
|
|
1234
|
+
message,
|
|
1235
|
+
...args
|
|
1236
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1237
|
+
}
|
|
1238
|
+
__name(formatMessage, "formatMessage");
|
|
1239
|
+
function removeKeys(obj, keys) {
|
|
1240
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1241
|
+
}
|
|
1242
|
+
__name(removeKeys, "removeKeys");
|
|
1243
|
+
function formatArg(arg) {
|
|
1244
|
+
if (typeof arg === "string") {
|
|
1245
|
+
return arg.trim();
|
|
1246
|
+
}
|
|
1247
|
+
if (arg instanceof Error) {
|
|
1248
|
+
return format3(arg).trim();
|
|
1249
|
+
}
|
|
1250
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1251
|
+
return "";
|
|
1252
|
+
}
|
|
1253
|
+
try {
|
|
1254
|
+
return JSON.stringify(arg);
|
|
1255
|
+
} catch {
|
|
1256
|
+
return format3(arg).trim();
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
__name(formatArg, "formatArg");
|
|
1260
|
+
function isEmptyObject(obj) {
|
|
1261
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1262
|
+
}
|
|
1263
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1264
|
+
|
|
1265
|
+
// src/loggers/pino.ts
|
|
1266
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1267
|
+
|
|
1268
|
+
// src/loggers/winston.ts
|
|
1269
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1270
|
+
var isPatched2 = false;
|
|
1271
|
+
var globalLogsContext2;
|
|
1272
|
+
async function patchWinston(logsContext) {
|
|
1273
|
+
var _a2, _b;
|
|
1274
|
+
globalLogsContext2 = logsContext;
|
|
1275
|
+
if (isPatched2) {
|
|
1276
|
+
return;
|
|
1277
|
+
}
|
|
1278
|
+
try {
|
|
1279
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1280
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1281
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1282
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1283
|
+
captureLog2(info);
|
|
1284
|
+
return originalWrite.call(this, info);
|
|
1285
|
+
};
|
|
1286
|
+
}
|
|
1287
|
+
} catch {
|
|
1288
|
+
}
|
|
1289
|
+
isPatched2 = true;
|
|
1290
|
+
}
|
|
1291
|
+
__name(patchWinston, "patchWinston");
|
|
1292
|
+
function captureLog2(info) {
|
|
1293
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1294
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1295
|
+
return;
|
|
1296
|
+
}
|
|
1297
|
+
try {
|
|
1298
|
+
const rest = removeKeys(info, [
|
|
1299
|
+
"timestamp",
|
|
1300
|
+
"level",
|
|
1301
|
+
"message",
|
|
1302
|
+
"splat"
|
|
1303
|
+
]);
|
|
1304
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1305
|
+
if (formattedMessage) {
|
|
1306
|
+
logs.push({
|
|
1307
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1308
|
+
level: info.level || "info",
|
|
1309
|
+
message: formattedMessage.trim()
|
|
1310
|
+
});
|
|
1311
|
+
}
|
|
1312
|
+
} catch (e) {
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
__name(captureLog2, "captureLog");
|
|
1316
|
+
function parseTimestamp(timestamp) {
|
|
1317
|
+
if (timestamp) {
|
|
1318
|
+
const ts = new Date(timestamp).getTime();
|
|
1319
|
+
if (!isNaN(ts)) {
|
|
1320
|
+
return ts / 1e3;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
return Date.now() / 1e3;
|
|
1324
|
+
}
|
|
1325
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1326
|
+
|
|
1167
1327
|
// src/hono/utils.ts
|
|
1168
1328
|
import { isMiddleware } from "hono/utils/handler";
|
|
1169
1329
|
|
|
@@ -1277,84 +1437,92 @@ function useApitally(app, config) {
|
|
|
1277
1437
|
}
|
|
1278
1438
|
__name(useApitally, "useApitally");
|
|
1279
1439
|
function getMiddleware(client) {
|
|
1440
|
+
const logsContext = new AsyncLocalStorage();
|
|
1441
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1442
|
+
patchConsole(logsContext);
|
|
1443
|
+
patchWinston(logsContext);
|
|
1444
|
+
}
|
|
1280
1445
|
return async (c, next) => {
|
|
1281
1446
|
if (!client.isEnabled() || c.req.method.toUpperCase() === "OPTIONS") {
|
|
1282
1447
|
await next();
|
|
1283
1448
|
return;
|
|
1284
1449
|
}
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
method: c.req.method,
|
|
1297
|
-
path: c.req.routePath,
|
|
1298
|
-
statusCode: c.res.status,
|
|
1299
|
-
responseTime,
|
|
1300
|
-
requestSize,
|
|
1301
|
-
responseSize
|
|
1302
|
-
});
|
|
1303
|
-
response = newResponse;
|
|
1304
|
-
if (c.res.status === 400) {
|
|
1305
|
-
const [responseJson, newResponse2] = await getResponseJson(response);
|
|
1306
|
-
const validationErrors = extractZodErrors(responseJson);
|
|
1307
|
-
validationErrors.forEach((error) => {
|
|
1308
|
-
client.validationErrorCounter.addValidationError({
|
|
1309
|
-
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1310
|
-
method: c.req.method,
|
|
1311
|
-
path: c.req.routePath,
|
|
1312
|
-
...error
|
|
1313
|
-
});
|
|
1314
|
-
});
|
|
1315
|
-
response = newResponse2;
|
|
1316
|
-
}
|
|
1317
|
-
if (c.error) {
|
|
1318
|
-
client.serverErrorCounter.addServerError({
|
|
1450
|
+
await logsContext.run([], async () => {
|
|
1451
|
+
const timestamp = Date.now() / 1e3;
|
|
1452
|
+
const startTime = performance.now();
|
|
1453
|
+
await next();
|
|
1454
|
+
let response;
|
|
1455
|
+
const responseTime = performance.now() - startTime;
|
|
1456
|
+
const [responseSize, newResponse] = await measureResponseSize(c.res);
|
|
1457
|
+
const requestSize = parseContentLength(c.req.header("content-length"));
|
|
1458
|
+
const consumer = getConsumer(c);
|
|
1459
|
+
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1460
|
+
client.requestCounter.addRequest({
|
|
1319
1461
|
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1320
1462
|
method: c.req.method,
|
|
1321
1463
|
path: c.req.routePath,
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1464
|
+
statusCode: c.res.status,
|
|
1465
|
+
responseTime,
|
|
1466
|
+
requestSize,
|
|
1467
|
+
responseSize
|
|
1325
1468
|
});
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1469
|
+
response = newResponse;
|
|
1470
|
+
if (c.res.status === 400) {
|
|
1471
|
+
const [responseJson, newResponse2] = await getResponseJson(response);
|
|
1472
|
+
const validationErrors = extractZodErrors(responseJson);
|
|
1473
|
+
validationErrors.forEach((error) => {
|
|
1474
|
+
client.validationErrorCounter.addValidationError({
|
|
1475
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1476
|
+
method: c.req.method,
|
|
1477
|
+
path: c.req.routePath,
|
|
1478
|
+
...error
|
|
1479
|
+
});
|
|
1480
|
+
});
|
|
1338
1481
|
response = newResponse2;
|
|
1339
1482
|
}
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
}
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1483
|
+
if (c.error) {
|
|
1484
|
+
client.serverErrorCounter.addServerError({
|
|
1485
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1486
|
+
method: c.req.method,
|
|
1487
|
+
path: c.req.routePath,
|
|
1488
|
+
type: c.error.name,
|
|
1489
|
+
msg: c.error.message,
|
|
1490
|
+
traceback: c.error.stack || ""
|
|
1491
|
+
});
|
|
1492
|
+
}
|
|
1493
|
+
if (client.requestLogger.enabled) {
|
|
1494
|
+
let requestBody;
|
|
1495
|
+
let responseBody;
|
|
1496
|
+
let newResponse2 = response;
|
|
1497
|
+
const requestContentType = c.req.header("content-type");
|
|
1498
|
+
const responseContentType = c.res.headers.get("content-type");
|
|
1499
|
+
if (client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType)) {
|
|
1500
|
+
requestBody = Buffer.from(await c.req.arrayBuffer());
|
|
1501
|
+
}
|
|
1502
|
+
if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
|
|
1503
|
+
[responseBody, newResponse2] = await getResponseBody(response);
|
|
1504
|
+
response = newResponse2;
|
|
1505
|
+
}
|
|
1506
|
+
const logs = logsContext.getStore();
|
|
1507
|
+
client.requestLogger.logRequest({
|
|
1508
|
+
timestamp,
|
|
1509
|
+
method: c.req.method,
|
|
1510
|
+
path: c.req.routePath,
|
|
1511
|
+
url: c.req.url,
|
|
1512
|
+
headers: convertHeaders(c.req.header()),
|
|
1513
|
+
size: requestSize,
|
|
1514
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1515
|
+
body: requestBody
|
|
1516
|
+
}, {
|
|
1517
|
+
statusCode: c.res.status,
|
|
1518
|
+
responseTime: responseTime / 1e3,
|
|
1519
|
+
headers: convertHeaders(c.res.headers),
|
|
1520
|
+
size: responseSize,
|
|
1521
|
+
body: responseBody
|
|
1522
|
+
}, c.error, logs);
|
|
1523
|
+
}
|
|
1524
|
+
c.res = response;
|
|
1525
|
+
});
|
|
1358
1526
|
};
|
|
1359
1527
|
}
|
|
1360
1528
|
__name(getMiddleware, "getMiddleware");
|