apitally 0.18.1 → 0.20.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/README.md +71 -44
- 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 +107 -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 +106 -83
- package/dist/adonisjs/middleware.js.map +1 -1
- package/dist/adonisjs/provider.cjs +4765 -62
- 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 +4743 -17
- package/dist/adonisjs/provider.js.map +1 -1
- package/dist/common/client.cjs +64 -42
- 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 +33 -11
- 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 +57 -33
- package/dist/common/requestLogger.cjs.map +1 -1
- package/dist/common/requestLogger.d.cts +12 -5
- package/dist/common/requestLogger.d.ts +12 -5
- package/dist/common/requestLogger.js +30 -6
- package/dist/common/requestLogger.js.map +1 -1
- package/dist/common/response.cjs +12 -6
- package/dist/common/response.cjs.map +1 -1
- package/dist/common/response.d.cts +3 -3
- package/dist/common/response.d.ts +3 -3
- package/dist/common/response.js +12 -6
- package/dist/common/response.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 +4 -4
- 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 +2 -2
- package/dist/common/validationErrorCounter.js.map +1 -1
- package/dist/elysia/index.cjs +1582 -0
- package/dist/elysia/index.cjs.map +1 -0
- package/dist/elysia/index.d.cts +9 -0
- package/dist/elysia/index.d.ts +9 -0
- package/dist/elysia/index.js +1552 -0
- package/dist/elysia/index.js.map +1 -0
- package/dist/elysia/plugin.cjs +1576 -0
- package/dist/elysia/plugin.cjs.map +1 -0
- package/dist/elysia/plugin.d.cts +53 -0
- package/dist/elysia/plugin.d.ts +53 -0
- package/dist/elysia/plugin.js +1552 -0
- package/dist/elysia/plugin.js.map +1 -0
- package/dist/elysia/utils.cjs +98 -0
- package/dist/elysia/utils.cjs.map +1 -0
- package/dist/elysia/utils.d.cts +12 -0
- package/dist/elysia/utils.d.ts +12 -0
- package/dist/elysia/utils.js +78 -0
- package/dist/elysia/utils.js.map +1 -0
- package/dist/express/index.cjs +4997 -169
- 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 +4969 -120
- package/dist/express/index.js.map +1 -1
- package/dist/express/middleware.cjs +4997 -169
- 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 +4969 -120
- package/dist/express/middleware.js.map +1 -1
- package/dist/fastify/index.cjs +4926 -72
- 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 +4899 -24
- package/dist/fastify/index.js.map +1 -1
- package/dist/fastify/plugin.cjs +4926 -72
- 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 +4899 -24
- package/dist/fastify/plugin.js.map +1 -1
- package/dist/h3/index.cjs +235 -57
- 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 +200 -22
- package/dist/h3/index.js.map +1 -1
- package/dist/h3/plugin.cjs +235 -57
- 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 +200 -22
- 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 +295 -118
- 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 +261 -84
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/middleware.cjs +295 -118
- 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 +261 -84
- 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 +280 -107
- 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 +244 -71
- package/dist/koa/index.js.map +1 -1
- package/dist/koa/middleware.cjs +278 -107
- 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 +244 -71
- 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 +4837 -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 +4826 -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 +4669 -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 +4661 -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 +5448 -542
- 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 +5364 -460
- package/dist/nestjs/index.js.map +1 -1
- package/package.json +26 -4
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,
|
|
@@ -695,6 +712,9 @@ var _RequestLogger = class _RequestLogger {
|
|
|
695
712
|
__name(_RequestLogger, "RequestLogger");
|
|
696
713
|
var RequestLogger = _RequestLogger;
|
|
697
714
|
function convertHeaders(headers) {
|
|
715
|
+
if (!headers) {
|
|
716
|
+
return [];
|
|
717
|
+
}
|
|
698
718
|
if (headers instanceof Headers) {
|
|
699
719
|
return Array.from(headers.entries());
|
|
700
720
|
}
|
|
@@ -765,11 +785,19 @@ function skipEmptyValues(data) {
|
|
|
765
785
|
}));
|
|
766
786
|
}
|
|
767
787
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
788
|
+
function truncateLogMessage(msg) {
|
|
789
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
790
|
+
const suffix = "... (truncated)";
|
|
791
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
792
|
+
}
|
|
793
|
+
return msg;
|
|
794
|
+
}
|
|
795
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
768
796
|
function checkWritableFs() {
|
|
769
797
|
try {
|
|
770
798
|
const testPath = join2(tmpdir2(), `apitally-${randomUUID2()}`);
|
|
771
799
|
writeFileSync(testPath, "test");
|
|
772
|
-
|
|
800
|
+
unlinkSync(testPath);
|
|
773
801
|
return true;
|
|
774
802
|
} catch (error) {
|
|
775
803
|
return false;
|
|
@@ -802,7 +830,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
802
830
|
consumer: validationError.consumer || null,
|
|
803
831
|
method: validationError.method,
|
|
804
832
|
path: validationError.path,
|
|
805
|
-
loc: validationError.loc.split("."),
|
|
833
|
+
loc: validationError.loc.split(".").filter(Boolean),
|
|
806
834
|
msg: validationError.msg,
|
|
807
835
|
type: validationError.type,
|
|
808
836
|
error_count: count
|
|
@@ -818,7 +846,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
818
846
|
validationError.consumer || "",
|
|
819
847
|
validationError.method.toUpperCase(),
|
|
820
848
|
validationError.path,
|
|
821
|
-
validationError.loc,
|
|
849
|
+
validationError.loc.split(".").filter(Boolean),
|
|
822
850
|
validationError.msg.trim(),
|
|
823
851
|
validationError.type
|
|
824
852
|
].join("|");
|
|
@@ -1120,6 +1148,143 @@ function getPackageVersion(name) {
|
|
|
1120
1148
|
}
|
|
1121
1149
|
__name(getPackageVersion, "getPackageVersion");
|
|
1122
1150
|
|
|
1151
|
+
// src/loggers/console.ts
|
|
1152
|
+
import { format as format2 } from "util";
|
|
1153
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1154
|
+
var isPatched = false;
|
|
1155
|
+
var globalLogsContext;
|
|
1156
|
+
function patchConsole(logsContext) {
|
|
1157
|
+
globalLogsContext = logsContext;
|
|
1158
|
+
if (isPatched) {
|
|
1159
|
+
return;
|
|
1160
|
+
}
|
|
1161
|
+
const logMethods = [
|
|
1162
|
+
"log",
|
|
1163
|
+
"warn",
|
|
1164
|
+
"error",
|
|
1165
|
+
"info",
|
|
1166
|
+
"debug"
|
|
1167
|
+
];
|
|
1168
|
+
logMethods.forEach((method) => {
|
|
1169
|
+
const originalMethod = console[method];
|
|
1170
|
+
console[method] = function(...args) {
|
|
1171
|
+
captureLog(method, args);
|
|
1172
|
+
return originalMethod.apply(console, args);
|
|
1173
|
+
};
|
|
1174
|
+
});
|
|
1175
|
+
isPatched = true;
|
|
1176
|
+
}
|
|
1177
|
+
__name(patchConsole, "patchConsole");
|
|
1178
|
+
function captureLog(level, args) {
|
|
1179
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1180
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1181
|
+
logs.push({
|
|
1182
|
+
timestamp: Date.now() / 1e3,
|
|
1183
|
+
logger: "console",
|
|
1184
|
+
level,
|
|
1185
|
+
message: format2(...args)
|
|
1186
|
+
});
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
__name(captureLog, "captureLog");
|
|
1190
|
+
|
|
1191
|
+
// src/loggers/utils.ts
|
|
1192
|
+
import { format as format3 } from "util";
|
|
1193
|
+
function formatMessage(message, ...args) {
|
|
1194
|
+
return [
|
|
1195
|
+
message,
|
|
1196
|
+
...args
|
|
1197
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1198
|
+
}
|
|
1199
|
+
__name(formatMessage, "formatMessage");
|
|
1200
|
+
function removeKeys(obj, keys) {
|
|
1201
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1202
|
+
}
|
|
1203
|
+
__name(removeKeys, "removeKeys");
|
|
1204
|
+
function formatArg(arg) {
|
|
1205
|
+
if (typeof arg === "string") {
|
|
1206
|
+
return arg.trim();
|
|
1207
|
+
}
|
|
1208
|
+
if (arg instanceof Error) {
|
|
1209
|
+
return format3(arg).trim();
|
|
1210
|
+
}
|
|
1211
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1212
|
+
return "";
|
|
1213
|
+
}
|
|
1214
|
+
try {
|
|
1215
|
+
return JSON.stringify(arg);
|
|
1216
|
+
} catch {
|
|
1217
|
+
return format3(arg).trim();
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
__name(formatArg, "formatArg");
|
|
1221
|
+
function isEmptyObject(obj) {
|
|
1222
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1223
|
+
}
|
|
1224
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1225
|
+
|
|
1226
|
+
// src/loggers/pino.ts
|
|
1227
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1228
|
+
|
|
1229
|
+
// src/loggers/winston.ts
|
|
1230
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1231
|
+
var isPatched2 = false;
|
|
1232
|
+
var globalLogsContext2;
|
|
1233
|
+
async function patchWinston(logsContext) {
|
|
1234
|
+
var _a2, _b;
|
|
1235
|
+
globalLogsContext2 = logsContext;
|
|
1236
|
+
if (isPatched2) {
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1239
|
+
try {
|
|
1240
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1241
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1242
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1243
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1244
|
+
captureLog2(info);
|
|
1245
|
+
return originalWrite.call(this, info);
|
|
1246
|
+
};
|
|
1247
|
+
}
|
|
1248
|
+
} catch {
|
|
1249
|
+
}
|
|
1250
|
+
isPatched2 = true;
|
|
1251
|
+
}
|
|
1252
|
+
__name(patchWinston, "patchWinston");
|
|
1253
|
+
function captureLog2(info) {
|
|
1254
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1255
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1256
|
+
return;
|
|
1257
|
+
}
|
|
1258
|
+
try {
|
|
1259
|
+
const rest = removeKeys(info, [
|
|
1260
|
+
"timestamp",
|
|
1261
|
+
"level",
|
|
1262
|
+
"message",
|
|
1263
|
+
"splat"
|
|
1264
|
+
]);
|
|
1265
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1266
|
+
if (formattedMessage) {
|
|
1267
|
+
logs.push({
|
|
1268
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1269
|
+
level: info.level || "info",
|
|
1270
|
+
message: formattedMessage.trim()
|
|
1271
|
+
});
|
|
1272
|
+
}
|
|
1273
|
+
} catch (e) {
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
__name(captureLog2, "captureLog");
|
|
1277
|
+
function parseTimestamp(timestamp) {
|
|
1278
|
+
if (timestamp) {
|
|
1279
|
+
const ts = new Date(timestamp).getTime();
|
|
1280
|
+
if (!isNaN(ts)) {
|
|
1281
|
+
return ts / 1e3;
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
return Date.now() / 1e3;
|
|
1285
|
+
}
|
|
1286
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1287
|
+
|
|
1123
1288
|
// src/koa/middleware.ts
|
|
1124
1289
|
function useApitally(app, config) {
|
|
1125
1290
|
const client = new ApitallyClient(config);
|
|
@@ -1137,77 +1302,85 @@ function useApitally(app, config) {
|
|
|
1137
1302
|
}
|
|
1138
1303
|
__name(useApitally, "useApitally");
|
|
1139
1304
|
function getMiddleware(client) {
|
|
1305
|
+
const logsContext = new AsyncLocalStorage();
|
|
1306
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1307
|
+
patchConsole(logsContext);
|
|
1308
|
+
patchWinston(logsContext);
|
|
1309
|
+
}
|
|
1140
1310
|
return async (ctx, next) => {
|
|
1141
|
-
var _a2;
|
|
1142
1311
|
if (!client.isEnabled() || ctx.request.method.toUpperCase() === "OPTIONS") {
|
|
1143
1312
|
await next();
|
|
1144
1313
|
return;
|
|
1145
1314
|
}
|
|
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) {
|
|
1315
|
+
await logsContext.run([], async () => {
|
|
1316
|
+
var _a2;
|
|
1317
|
+
let path;
|
|
1318
|
+
let statusCode;
|
|
1319
|
+
let serverError;
|
|
1320
|
+
const startTime = performance.now();
|
|
1321
|
+
try {
|
|
1322
|
+
await next();
|
|
1323
|
+
} catch (error) {
|
|
1172
1324
|
path = getPath(ctx);
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
client.
|
|
1177
|
-
consumer:
|
|
1325
|
+
statusCode = error.statusCode || error.status || 500;
|
|
1326
|
+
if (path && statusCode === 500 && error instanceof Error) {
|
|
1327
|
+
serverError = error;
|
|
1328
|
+
client.serverErrorCounter.addServerError({
|
|
1329
|
+
consumer: (_a2 = getConsumer(ctx)) == null ? void 0 : _a2.identifier,
|
|
1178
1330
|
method: ctx.request.method,
|
|
1179
1331
|
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
|
|
1332
|
+
type: error.name,
|
|
1333
|
+
msg: error.message,
|
|
1334
|
+
traceback: error.stack || ""
|
|
1189
1335
|
});
|
|
1190
1336
|
}
|
|
1337
|
+
throw error;
|
|
1338
|
+
} finally {
|
|
1339
|
+
const responseTime = performance.now() - startTime;
|
|
1340
|
+
const consumer = getConsumer(ctx);
|
|
1341
|
+
client.consumerRegistry.addOrUpdateConsumer(consumer);
|
|
1342
|
+
if (!path) {
|
|
1343
|
+
path = getPath(ctx);
|
|
1344
|
+
}
|
|
1345
|
+
if (path) {
|
|
1346
|
+
try {
|
|
1347
|
+
client.requestCounter.addRequest({
|
|
1348
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1349
|
+
method: ctx.request.method,
|
|
1350
|
+
path,
|
|
1351
|
+
statusCode: statusCode || ctx.response.status,
|
|
1352
|
+
responseTime,
|
|
1353
|
+
requestSize: ctx.request.length,
|
|
1354
|
+
responseSize: ctx.response.length
|
|
1355
|
+
});
|
|
1356
|
+
} catch (error) {
|
|
1357
|
+
client.logger.error("Error while logging request in Apitally middleware.", {
|
|
1358
|
+
context: ctx,
|
|
1359
|
+
error
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
if (client.requestLogger.enabled) {
|
|
1364
|
+
const logs = logsContext.getStore();
|
|
1365
|
+
client.requestLogger.logRequest({
|
|
1366
|
+
timestamp: Date.now() / 1e3,
|
|
1367
|
+
method: ctx.request.method,
|
|
1368
|
+
path,
|
|
1369
|
+
url: ctx.request.href,
|
|
1370
|
+
headers: convertHeaders(ctx.request.headers),
|
|
1371
|
+
size: ctx.request.length,
|
|
1372
|
+
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1373
|
+
body: convertBody(ctx.request.body, ctx.request.get("content-type"))
|
|
1374
|
+
}, {
|
|
1375
|
+
statusCode: statusCode || ctx.response.status,
|
|
1376
|
+
responseTime: responseTime / 1e3,
|
|
1377
|
+
headers: convertHeaders(ctx.response.headers),
|
|
1378
|
+
size: ctx.response.length,
|
|
1379
|
+
body: convertBody(ctx.response.body, ctx.response.get("content-type"))
|
|
1380
|
+
}, serverError, logs);
|
|
1381
|
+
}
|
|
1191
1382
|
}
|
|
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
|
-
}
|
|
1383
|
+
});
|
|
1211
1384
|
};
|
|
1212
1385
|
}
|
|
1213
1386
|
__name(getMiddleware, "getMiddleware");
|