apitally 0.18.0 → 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 +5341 -451
- 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 +5294 -406
- package/dist/nestjs/index.js.map +1 -1
- package/package.json +4 -3
package/dist/koa/middleware.js
CHANGED
|
@@ -9,9 +9,12 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
9
9
|
});
|
|
10
10
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
11
|
|
|
12
|
+
// src/koa/middleware.ts
|
|
13
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
14
|
+
|
|
12
15
|
// src/common/client.ts
|
|
13
|
-
import { randomUUID as randomUUID3 } from "crypto";
|
|
14
16
|
import fetchRetry from "fetch-retry";
|
|
17
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
15
18
|
|
|
16
19
|
// src/common/consumerRegistry.ts
|
|
17
20
|
var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
@@ -71,7 +74,7 @@ var ConsumerRegistry = _ConsumerRegistry;
|
|
|
71
74
|
|
|
72
75
|
// src/common/logging.ts
|
|
73
76
|
import { createLogger, format, transports } from "winston";
|
|
74
|
-
|
|
77
|
+
function getLogger() {
|
|
75
78
|
return createLogger({
|
|
76
79
|
level: process.env.APITALLY_DEBUG ? "debug" : "warn",
|
|
77
80
|
format: format.combine(format.colorize(), format.timestamp(), format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
|
|
@@ -79,7 +82,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
|
|
|
79
82
|
new transports.Console()
|
|
80
83
|
]
|
|
81
84
|
});
|
|
82
|
-
}
|
|
85
|
+
}
|
|
86
|
+
__name(getLogger, "getLogger");
|
|
83
87
|
|
|
84
88
|
// src/common/paramValidation.ts
|
|
85
89
|
function isValidClientId(clientId) {
|
|
@@ -183,7 +187,7 @@ var RequestCounter = _RequestCounter;
|
|
|
183
187
|
import AsyncLock from "async-lock";
|
|
184
188
|
import { Buffer as Buffer3 } from "buffer";
|
|
185
189
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
186
|
-
import { unlinkSync
|
|
190
|
+
import { unlinkSync, writeFileSync } from "fs";
|
|
187
191
|
import { tmpdir as tmpdir2 } from "os";
|
|
188
192
|
import { join as join2 } from "path";
|
|
189
193
|
|
|
@@ -246,6 +250,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
|
|
|
246
250
|
});
|
|
247
251
|
this.errorCounts.clear();
|
|
248
252
|
this.errorDetails.clear();
|
|
253
|
+
this.sentryEventIds.clear();
|
|
249
254
|
return data;
|
|
250
255
|
}
|
|
251
256
|
getKey(serverError) {
|
|
@@ -292,7 +297,8 @@ __name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
|
|
|
292
297
|
// src/common/tempGzipFile.ts
|
|
293
298
|
import { Buffer as Buffer2 } from "buffer";
|
|
294
299
|
import { randomUUID } from "crypto";
|
|
295
|
-
import { createWriteStream, readFile
|
|
300
|
+
import { createWriteStream, readFile } from "fs";
|
|
301
|
+
import { unlink } from "fs/promises";
|
|
296
302
|
import { tmpdir } from "os";
|
|
297
303
|
import { join } from "path";
|
|
298
304
|
import { createGzip } from "zlib";
|
|
@@ -357,7 +363,7 @@ var _TempGzipFile = class _TempGzipFile {
|
|
|
357
363
|
}
|
|
358
364
|
async delete() {
|
|
359
365
|
await this.close();
|
|
360
|
-
|
|
366
|
+
await unlink(this.filePath);
|
|
361
367
|
}
|
|
362
368
|
};
|
|
363
369
|
__name(_TempGzipFile, "TempGzipFile");
|
|
@@ -368,6 +374,7 @@ var MAX_BODY_SIZE = 5e4;
|
|
|
368
374
|
var MAX_FILE_SIZE = 1e6;
|
|
369
375
|
var MAX_FILES = 50;
|
|
370
376
|
var MAX_PENDING_WRITES = 100;
|
|
377
|
+
var MAX_LOG_MSG_LENGTH = 2048;
|
|
371
378
|
var BODY_TOO_LARGE = Buffer3.from("<body too large>");
|
|
372
379
|
var BODY_MASKED = Buffer3.from("<masked>");
|
|
373
380
|
var MASKED = "******";
|
|
@@ -424,6 +431,7 @@ var DEFAULT_CONFIG = {
|
|
|
424
431
|
logResponseHeaders: true,
|
|
425
432
|
logResponseBody: false,
|
|
426
433
|
logException: true,
|
|
434
|
+
captureLogs: false,
|
|
427
435
|
maskQueryParams: [],
|
|
428
436
|
maskHeaders: [],
|
|
429
437
|
maskBodyFields: [],
|
|
@@ -578,7 +586,7 @@ var _RequestLogger = class _RequestLogger {
|
|
|
578
586
|
item.request.url = url.toString();
|
|
579
587
|
return item;
|
|
580
588
|
}
|
|
581
|
-
logRequest(request, response, error) {
|
|
589
|
+
logRequest(request, response, error, logs) {
|
|
582
590
|
var _a2, _b, _c;
|
|
583
591
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
584
592
|
const url = new URL(request.url);
|
|
@@ -610,6 +618,14 @@ var _RequestLogger = class _RequestLogger {
|
|
|
610
618
|
sentryEventId: getSentryEventId()
|
|
611
619
|
} : void 0
|
|
612
620
|
};
|
|
621
|
+
if (logs && logs.length > 0) {
|
|
622
|
+
item.logs = logs.map((log) => ({
|
|
623
|
+
timestamp: log.timestamp,
|
|
624
|
+
logger: log.logger,
|
|
625
|
+
level: log.level,
|
|
626
|
+
message: truncateLogMessage(log.message)
|
|
627
|
+
}));
|
|
628
|
+
}
|
|
613
629
|
this.pendingWrites.push(item);
|
|
614
630
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
615
631
|
this.pendingWrites.shift();
|
|
@@ -631,7 +647,8 @@ var _RequestLogger = class _RequestLogger {
|
|
|
631
647
|
uuid: item.uuid,
|
|
632
648
|
request: skipEmptyValues(item.request),
|
|
633
649
|
response: skipEmptyValues(item.response),
|
|
634
|
-
exception: item.exception
|
|
650
|
+
exception: item.exception,
|
|
651
|
+
logs: item.logs
|
|
635
652
|
};
|
|
636
653
|
[
|
|
637
654
|
finalItem.request.body,
|
|
@@ -765,11 +782,19 @@ function skipEmptyValues(data) {
|
|
|
765
782
|
}));
|
|
766
783
|
}
|
|
767
784
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
785
|
+
function truncateLogMessage(msg) {
|
|
786
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
787
|
+
const suffix = "... (truncated)";
|
|
788
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
789
|
+
}
|
|
790
|
+
return msg;
|
|
791
|
+
}
|
|
792
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
768
793
|
function checkWritableFs() {
|
|
769
794
|
try {
|
|
770
795
|
const testPath = join2(tmpdir2(), `apitally-${randomUUID2()}`);
|
|
771
796
|
writeFileSync(testPath, "test");
|
|
772
|
-
|
|
797
|
+
unlinkSync(testPath);
|
|
773
798
|
return true;
|
|
774
799
|
} catch (error) {
|
|
775
800
|
return false;
|
|
@@ -1120,6 +1145,143 @@ function getPackageVersion(name) {
|
|
|
1120
1145
|
}
|
|
1121
1146
|
__name(getPackageVersion, "getPackageVersion");
|
|
1122
1147
|
|
|
1148
|
+
// src/loggers/console.ts
|
|
1149
|
+
import { format as format2 } from "util";
|
|
1150
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1151
|
+
var isPatched = false;
|
|
1152
|
+
var globalLogsContext;
|
|
1153
|
+
function patchConsole(logsContext) {
|
|
1154
|
+
globalLogsContext = logsContext;
|
|
1155
|
+
if (isPatched) {
|
|
1156
|
+
return;
|
|
1157
|
+
}
|
|
1158
|
+
const logMethods = [
|
|
1159
|
+
"log",
|
|
1160
|
+
"warn",
|
|
1161
|
+
"error",
|
|
1162
|
+
"info",
|
|
1163
|
+
"debug"
|
|
1164
|
+
];
|
|
1165
|
+
logMethods.forEach((method) => {
|
|
1166
|
+
const originalMethod = console[method];
|
|
1167
|
+
console[method] = function(...args) {
|
|
1168
|
+
captureLog(method, args);
|
|
1169
|
+
return originalMethod.apply(console, args);
|
|
1170
|
+
};
|
|
1171
|
+
});
|
|
1172
|
+
isPatched = true;
|
|
1173
|
+
}
|
|
1174
|
+
__name(patchConsole, "patchConsole");
|
|
1175
|
+
function captureLog(level, args) {
|
|
1176
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1177
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1178
|
+
logs.push({
|
|
1179
|
+
timestamp: Date.now() / 1e3,
|
|
1180
|
+
logger: "console",
|
|
1181
|
+
level,
|
|
1182
|
+
message: format2(...args)
|
|
1183
|
+
});
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
__name(captureLog, "captureLog");
|
|
1187
|
+
|
|
1188
|
+
// src/loggers/utils.ts
|
|
1189
|
+
import { format as format3 } from "util";
|
|
1190
|
+
function formatMessage(message, ...args) {
|
|
1191
|
+
return [
|
|
1192
|
+
message,
|
|
1193
|
+
...args
|
|
1194
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1195
|
+
}
|
|
1196
|
+
__name(formatMessage, "formatMessage");
|
|
1197
|
+
function removeKeys(obj, keys) {
|
|
1198
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1199
|
+
}
|
|
1200
|
+
__name(removeKeys, "removeKeys");
|
|
1201
|
+
function formatArg(arg) {
|
|
1202
|
+
if (typeof arg === "string") {
|
|
1203
|
+
return arg.trim();
|
|
1204
|
+
}
|
|
1205
|
+
if (arg instanceof Error) {
|
|
1206
|
+
return format3(arg).trim();
|
|
1207
|
+
}
|
|
1208
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1209
|
+
return "";
|
|
1210
|
+
}
|
|
1211
|
+
try {
|
|
1212
|
+
return JSON.stringify(arg);
|
|
1213
|
+
} catch {
|
|
1214
|
+
return format3(arg).trim();
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
__name(formatArg, "formatArg");
|
|
1218
|
+
function isEmptyObject(obj) {
|
|
1219
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1220
|
+
}
|
|
1221
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1222
|
+
|
|
1223
|
+
// src/loggers/pino.ts
|
|
1224
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1225
|
+
|
|
1226
|
+
// src/loggers/winston.ts
|
|
1227
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1228
|
+
var isPatched2 = false;
|
|
1229
|
+
var globalLogsContext2;
|
|
1230
|
+
async function patchWinston(logsContext) {
|
|
1231
|
+
var _a2, _b;
|
|
1232
|
+
globalLogsContext2 = logsContext;
|
|
1233
|
+
if (isPatched2) {
|
|
1234
|
+
return;
|
|
1235
|
+
}
|
|
1236
|
+
try {
|
|
1237
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1238
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1239
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1240
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1241
|
+
captureLog2(info);
|
|
1242
|
+
return originalWrite.call(this, info);
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
} catch {
|
|
1246
|
+
}
|
|
1247
|
+
isPatched2 = true;
|
|
1248
|
+
}
|
|
1249
|
+
__name(patchWinston, "patchWinston");
|
|
1250
|
+
function captureLog2(info) {
|
|
1251
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1252
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1253
|
+
return;
|
|
1254
|
+
}
|
|
1255
|
+
try {
|
|
1256
|
+
const rest = removeKeys(info, [
|
|
1257
|
+
"timestamp",
|
|
1258
|
+
"level",
|
|
1259
|
+
"message",
|
|
1260
|
+
"splat"
|
|
1261
|
+
]);
|
|
1262
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1263
|
+
if (formattedMessage) {
|
|
1264
|
+
logs.push({
|
|
1265
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1266
|
+
level: info.level || "info",
|
|
1267
|
+
message: formattedMessage.trim()
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
} catch (e) {
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
__name(captureLog2, "captureLog");
|
|
1274
|
+
function parseTimestamp(timestamp) {
|
|
1275
|
+
if (timestamp) {
|
|
1276
|
+
const ts = new Date(timestamp).getTime();
|
|
1277
|
+
if (!isNaN(ts)) {
|
|
1278
|
+
return ts / 1e3;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
return Date.now() / 1e3;
|
|
1282
|
+
}
|
|
1283
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1284
|
+
|
|
1123
1285
|
// src/koa/middleware.ts
|
|
1124
1286
|
function useApitally(app, config) {
|
|
1125
1287
|
const client = new ApitallyClient(config);
|
|
@@ -1137,77 +1299,85 @@ function useApitally(app, config) {
|
|
|
1137
1299
|
}
|
|
1138
1300
|
__name(useApitally, "useApitally");
|
|
1139
1301
|
function getMiddleware(client) {
|
|
1302
|
+
const logsContext = new AsyncLocalStorage();
|
|
1303
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1304
|
+
patchConsole(logsContext);
|
|
1305
|
+
patchWinston(logsContext);
|
|
1306
|
+
}
|
|
1140
1307
|
return async (ctx, next) => {
|
|
1141
|
-
var _a2;
|
|
1142
1308
|
if (!client.isEnabled() || ctx.request.method.toUpperCase() === "OPTIONS") {
|
|
1143
1309
|
await next();
|
|
1144
1310
|
return;
|
|
1145
1311
|
}
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
if (path && statusCode === 500 && error instanceof Error) {
|
|
1156
|
-
serverError = error;
|
|
1157
|
-
client.serverErrorCounter.addServerError({
|
|
1158
|
-
consumer: (_a2 = getConsumer(ctx)) == null ? void 0 : _a2.identifier,
|
|
1159
|
-
method: ctx.request.method,
|
|
1160
|
-
path,
|
|
1161
|
-
type: error.name,
|
|
1162
|
-
msg: error.message,
|
|
1163
|
-
traceback: error.stack || ""
|
|
1164
|
-
});
|
|
1165
|
-
}
|
|
1166
|
-
throw error;
|
|
1167
|
-
} finally {
|
|
1168
|
-
const responseTime = performance.now() - startTime;
|
|
1169
|
-
const consumer = getConsumer(ctx);
|
|
1170
|
-
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1171
|
-
if (!path) {
|
|
1312
|
+
await logsContext.run([], async () => {
|
|
1313
|
+
var _a2;
|
|
1314
|
+
let path;
|
|
1315
|
+
let statusCode;
|
|
1316
|
+
let serverError;
|
|
1317
|
+
const startTime = performance.now();
|
|
1318
|
+
try {
|
|
1319
|
+
await next();
|
|
1320
|
+
} catch (error) {
|
|
1172
1321
|
path = getPath(ctx);
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
client.
|
|
1177
|
-
consumer:
|
|
1322
|
+
statusCode = error.statusCode || error.status || 500;
|
|
1323
|
+
if (path && statusCode === 500 && error instanceof Error) {
|
|
1324
|
+
serverError = error;
|
|
1325
|
+
client.serverErrorCounter.addServerError({
|
|
1326
|
+
consumer: (_a2 = getConsumer(ctx)) == null ? void 0 : _a2.identifier,
|
|
1178
1327
|
method: ctx.request.method,
|
|
1179
1328
|
path,
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
responseSize: ctx.response.length
|
|
1184
|
-
});
|
|
1185
|
-
} catch (error) {
|
|
1186
|
-
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
1187
|
-
context: ctx,
|
|
1188
|
-
error
|
|
1329
|
+
type: error.name,
|
|
1330
|
+
msg: error.message,
|
|
1331
|
+
traceback: error.stack || ""
|
|
1189
1332
|
});
|
|
1190
1333
|
}
|
|
1334
|
+
throw error;
|
|
1335
|
+
} finally {
|
|
1336
|
+
const responseTime = performance.now() - startTime;
|
|
1337
|
+
const consumer = getConsumer(ctx);
|
|
1338
|
+
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1339
|
+
if (!path) {
|
|
1340
|
+
path = getPath(ctx);
|
|
1341
|
+
}
|
|
1342
|
+
if (path) {
|
|
1343
|
+
try {
|
|
1344
|
+
client.requestCounter.addRequest({
|
|
1345
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1346
|
+
method: ctx.request.method,
|
|
1347
|
+
path,
|
|
1348
|
+
statusCode: statusCode || ctx.response.status,
|
|
1349
|
+
responseTime,
|
|
1350
|
+
requestSize: ctx.request.length,
|
|
1351
|
+
responseSize: ctx.response.length
|
|
1352
|
+
});
|
|
1353
|
+
} catch (error) {
|
|
1354
|
+
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
1355
|
+
context: ctx,
|
|
1356
|
+
error
|
|
1357
|
+
});
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
if (client.requestLogger.enabled) {
|
|
1361
|
+
const logs = logsContext.getStore();
|
|
1362
|
+
client.requestLogger.logRequest({
|
|
1363
|
+
timestamp: Date.now() / 1e3,
|
|
1364
|
+
method: ctx.request.method,
|
|
1365
|
+
path,
|
|
1366
|
+
url: ctx.request.href,
|
|
1367
|
+
headers: convertHeaders(ctx.request.headers),
|
|
1368
|
+
size: ctx.request.length,
|
|
1369
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1370
|
+
body: convertBody(ctx.request.body, ctx.request.get("content-type"))
|
|
1371
|
+
}, {
|
|
1372
|
+
statusCode: statusCode || ctx.response.status,
|
|
1373
|
+
responseTime: responseTime / 1e3,
|
|
1374
|
+
headers: convertHeaders(ctx.response.headers),
|
|
1375
|
+
size: ctx.response.length,
|
|
1376
|
+
body: convertBody(ctx.response.body, ctx.response.get("content-type"))
|
|
1377
|
+
}, serverError, logs);
|
|
1378
|
+
}
|
|
1191
1379
|
}
|
|
1192
|
-
|
|
1193
|
-
client.requestLogger.logRequest({
|
|
1194
|
-
timestamp: Date.now() / 1e3,
|
|
1195
|
-
method: ctx.request.method,
|
|
1196
|
-
path,
|
|
1197
|
-
url: ctx.request.href,
|
|
1198
|
-
headers: convertHeaders(ctx.request.headers),
|
|
1199
|
-
size: ctx.request.length,
|
|
1200
|
-
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1201
|
-
body: convertBody(ctx.request.body, ctx.request.get("content-type"))
|
|
1202
|
-
}, {
|
|
1203
|
-
statusCode: statusCode || ctx.response.status,
|
|
1204
|
-
responseTime: responseTime / 1e3,
|
|
1205
|
-
headers: convertHeaders(ctx.response.headers),
|
|
1206
|
-
size: ctx.response.length,
|
|
1207
|
-
body: convertBody(ctx.response.body, ctx.response.get("content-type"))
|
|
1208
|
-
}, serverError);
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1380
|
+
});
|
|
1211
1381
|
};
|
|
1212
1382
|
}
|
|
1213
1383
|
__name(getMiddleware, "getMiddleware");
|