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/h3/index.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,
|
|
@@ -699,6 +714,9 @@ var _RequestLogger = class _RequestLogger {
|
|
|
699
714
|
__name(_RequestLogger, "RequestLogger");
|
|
700
715
|
var RequestLogger = _RequestLogger;
|
|
701
716
|
function convertHeaders(headers) {
|
|
717
|
+
if (!headers) {
|
|
718
|
+
return [];
|
|
719
|
+
}
|
|
702
720
|
if (headers instanceof Headers) {
|
|
703
721
|
return Array.from(headers.entries());
|
|
704
722
|
}
|
|
@@ -737,11 +755,19 @@ function skipEmptyValues(data) {
|
|
|
737
755
|
}));
|
|
738
756
|
}
|
|
739
757
|
__name(skipEmptyValues, "skipEmptyValues");
|
|
758
|
+
function truncateLogMessage(msg) {
|
|
759
|
+
if (msg.length > MAX_LOG_MSG_LENGTH) {
|
|
760
|
+
const suffix = "... (truncated)";
|
|
761
|
+
return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
|
|
762
|
+
}
|
|
763
|
+
return msg;
|
|
764
|
+
}
|
|
765
|
+
__name(truncateLogMessage, "truncateLogMessage");
|
|
740
766
|
function checkWritableFs() {
|
|
741
767
|
try {
|
|
742
768
|
const testPath = join2(tmpdir2(), `apitally-${randomUUID2()}`);
|
|
743
769
|
writeFileSync(testPath, "test");
|
|
744
|
-
|
|
770
|
+
unlinkSync(testPath);
|
|
745
771
|
return true;
|
|
746
772
|
} catch (error) {
|
|
747
773
|
return false;
|
|
@@ -774,7 +800,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
774
800
|
consumer: validationError.consumer || null,
|
|
775
801
|
method: validationError.method,
|
|
776
802
|
path: validationError.path,
|
|
777
|
-
loc: validationError.loc.split("."),
|
|
803
|
+
loc: validationError.loc.split(".").filter(Boolean),
|
|
778
804
|
msg: validationError.msg,
|
|
779
805
|
type: validationError.type,
|
|
780
806
|
error_count: count
|
|
@@ -790,7 +816,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
|
|
|
790
816
|
validationError.consumer || "",
|
|
791
817
|
validationError.method.toUpperCase(),
|
|
792
818
|
validationError.path,
|
|
793
|
-
validationError.loc,
|
|
819
|
+
validationError.loc.split(".").filter(Boolean),
|
|
794
820
|
validationError.msg.trim(),
|
|
795
821
|
validationError.type
|
|
796
822
|
].join("|");
|
|
@@ -1102,8 +1128,11 @@ function mergeHeaders(base, merge) {
|
|
|
1102
1128
|
__name(mergeHeaders, "mergeHeaders");
|
|
1103
1129
|
|
|
1104
1130
|
// src/common/response.ts
|
|
1105
|
-
async function measureResponseSize(response) {
|
|
1106
|
-
const [newResponse1, newResponse2] =
|
|
1131
|
+
async function measureResponseSize(response, tee = true) {
|
|
1132
|
+
const [newResponse1, newResponse2] = tee ? teeResponse(response) : [
|
|
1133
|
+
response,
|
|
1134
|
+
response
|
|
1135
|
+
];
|
|
1107
1136
|
let size = 0;
|
|
1108
1137
|
if (newResponse2.body) {
|
|
1109
1138
|
let done = false;
|
|
@@ -1122,8 +1151,11 @@ async function measureResponseSize(response) {
|
|
|
1122
1151
|
];
|
|
1123
1152
|
}
|
|
1124
1153
|
__name(measureResponseSize, "measureResponseSize");
|
|
1125
|
-
async function getResponseBody(response) {
|
|
1126
|
-
const [newResponse1, newResponse2] =
|
|
1154
|
+
async function getResponseBody(response, tee = true) {
|
|
1155
|
+
const [newResponse1, newResponse2] = tee ? teeResponse(response) : [
|
|
1156
|
+
response,
|
|
1157
|
+
response
|
|
1158
|
+
];
|
|
1127
1159
|
const responseBuffer = Buffer.from(await newResponse2.arrayBuffer());
|
|
1128
1160
|
return [
|
|
1129
1161
|
responseBuffer,
|
|
@@ -1131,7 +1163,7 @@ async function getResponseBody(response) {
|
|
|
1131
1163
|
];
|
|
1132
1164
|
}
|
|
1133
1165
|
__name(getResponseBody, "getResponseBody");
|
|
1134
|
-
|
|
1166
|
+
function teeResponse(response) {
|
|
1135
1167
|
if (!response.body) {
|
|
1136
1168
|
return [
|
|
1137
1169
|
response,
|
|
@@ -1156,6 +1188,143 @@ async function teeResponse(response) {
|
|
|
1156
1188
|
}
|
|
1157
1189
|
__name(teeResponse, "teeResponse");
|
|
1158
1190
|
|
|
1191
|
+
// src/loggers/console.ts
|
|
1192
|
+
import { format as format2 } from "util";
|
|
1193
|
+
var MAX_BUFFER_SIZE = 1e3;
|
|
1194
|
+
var isPatched = false;
|
|
1195
|
+
var globalLogsContext;
|
|
1196
|
+
function patchConsole(logsContext) {
|
|
1197
|
+
globalLogsContext = logsContext;
|
|
1198
|
+
if (isPatched) {
|
|
1199
|
+
return;
|
|
1200
|
+
}
|
|
1201
|
+
const logMethods = [
|
|
1202
|
+
"log",
|
|
1203
|
+
"warn",
|
|
1204
|
+
"error",
|
|
1205
|
+
"info",
|
|
1206
|
+
"debug"
|
|
1207
|
+
];
|
|
1208
|
+
logMethods.forEach((method) => {
|
|
1209
|
+
const originalMethod = console[method];
|
|
1210
|
+
console[method] = function(...args) {
|
|
1211
|
+
captureLog(method, args);
|
|
1212
|
+
return originalMethod.apply(console, args);
|
|
1213
|
+
};
|
|
1214
|
+
});
|
|
1215
|
+
isPatched = true;
|
|
1216
|
+
}
|
|
1217
|
+
__name(patchConsole, "patchConsole");
|
|
1218
|
+
function captureLog(level, args) {
|
|
1219
|
+
const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
|
|
1220
|
+
if (logs && logs.length < MAX_BUFFER_SIZE) {
|
|
1221
|
+
logs.push({
|
|
1222
|
+
timestamp: Date.now() / 1e3,
|
|
1223
|
+
logger: "console",
|
|
1224
|
+
level,
|
|
1225
|
+
message: format2(...args)
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
__name(captureLog, "captureLog");
|
|
1230
|
+
|
|
1231
|
+
// src/loggers/utils.ts
|
|
1232
|
+
import { format as format3 } from "util";
|
|
1233
|
+
function formatMessage(message, ...args) {
|
|
1234
|
+
return [
|
|
1235
|
+
message,
|
|
1236
|
+
...args
|
|
1237
|
+
].map(formatArg).filter((arg) => arg !== "").join("\n");
|
|
1238
|
+
}
|
|
1239
|
+
__name(formatMessage, "formatMessage");
|
|
1240
|
+
function removeKeys(obj, keys) {
|
|
1241
|
+
return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
1242
|
+
}
|
|
1243
|
+
__name(removeKeys, "removeKeys");
|
|
1244
|
+
function formatArg(arg) {
|
|
1245
|
+
if (typeof arg === "string") {
|
|
1246
|
+
return arg.trim();
|
|
1247
|
+
}
|
|
1248
|
+
if (arg instanceof Error) {
|
|
1249
|
+
return format3(arg).trim();
|
|
1250
|
+
}
|
|
1251
|
+
if (arg === void 0 || arg === null || isEmptyObject(arg)) {
|
|
1252
|
+
return "";
|
|
1253
|
+
}
|
|
1254
|
+
try {
|
|
1255
|
+
return JSON.stringify(arg);
|
|
1256
|
+
} catch {
|
|
1257
|
+
return format3(arg).trim();
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
__name(formatArg, "formatArg");
|
|
1261
|
+
function isEmptyObject(obj) {
|
|
1262
|
+
return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
|
|
1263
|
+
}
|
|
1264
|
+
__name(isEmptyObject, "isEmptyObject");
|
|
1265
|
+
|
|
1266
|
+
// src/loggers/pino.ts
|
|
1267
|
+
var originalStreamSym = Symbol.for("apitally.originalStream");
|
|
1268
|
+
|
|
1269
|
+
// src/loggers/winston.ts
|
|
1270
|
+
var MAX_BUFFER_SIZE2 = 1e3;
|
|
1271
|
+
var isPatched2 = false;
|
|
1272
|
+
var globalLogsContext2;
|
|
1273
|
+
async function patchWinston(logsContext) {
|
|
1274
|
+
var _a2, _b;
|
|
1275
|
+
globalLogsContext2 = logsContext;
|
|
1276
|
+
if (isPatched2) {
|
|
1277
|
+
return;
|
|
1278
|
+
}
|
|
1279
|
+
try {
|
|
1280
|
+
const loggerModule = await import("winston/lib/winston/logger.js");
|
|
1281
|
+
if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
|
|
1282
|
+
const originalWrite = loggerModule.default.prototype.write;
|
|
1283
|
+
loggerModule.default.prototype.write = function(info) {
|
|
1284
|
+
captureLog2(info);
|
|
1285
|
+
return originalWrite.call(this, info);
|
|
1286
|
+
};
|
|
1287
|
+
}
|
|
1288
|
+
} catch {
|
|
1289
|
+
}
|
|
1290
|
+
isPatched2 = true;
|
|
1291
|
+
}
|
|
1292
|
+
__name(patchWinston, "patchWinston");
|
|
1293
|
+
function captureLog2(info) {
|
|
1294
|
+
const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
|
|
1295
|
+
if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
|
|
1296
|
+
return;
|
|
1297
|
+
}
|
|
1298
|
+
try {
|
|
1299
|
+
const rest = removeKeys(info, [
|
|
1300
|
+
"timestamp",
|
|
1301
|
+
"level",
|
|
1302
|
+
"message",
|
|
1303
|
+
"splat"
|
|
1304
|
+
]);
|
|
1305
|
+
const formattedMessage = formatMessage(info.message, rest);
|
|
1306
|
+
if (formattedMessage) {
|
|
1307
|
+
logs.push({
|
|
1308
|
+
timestamp: parseTimestamp(info.timestamp),
|
|
1309
|
+
level: info.level || "info",
|
|
1310
|
+
message: formattedMessage.trim()
|
|
1311
|
+
});
|
|
1312
|
+
}
|
|
1313
|
+
} catch (e) {
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
__name(captureLog2, "captureLog");
|
|
1317
|
+
function parseTimestamp(timestamp) {
|
|
1318
|
+
if (timestamp) {
|
|
1319
|
+
const ts = new Date(timestamp).getTime();
|
|
1320
|
+
if (!isNaN(ts)) {
|
|
1321
|
+
return ts / 1e3;
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
return Date.now() / 1e3;
|
|
1325
|
+
}
|
|
1326
|
+
__name(parseTimestamp, "parseTimestamp");
|
|
1327
|
+
|
|
1159
1328
|
// src/common/packageVersions.ts
|
|
1160
1329
|
import { createRequire } from "module";
|
|
1161
1330
|
function getPackageVersion(name) {
|
|
@@ -1223,11 +1392,14 @@ function getAppInfo(h3, appVersion) {
|
|
|
1223
1392
|
__name(getAppInfo, "getAppInfo");
|
|
1224
1393
|
|
|
1225
1394
|
// src/h3/plugin.ts
|
|
1395
|
+
var REQUEST_TIMESTAMP_SYMBOL = Symbol("apitally.requestTimestamp");
|
|
1396
|
+
var REQUEST_BODY_SYMBOL = Symbol("apitally.requestBody");
|
|
1226
1397
|
var jsonHeaders = new Headers({
|
|
1227
1398
|
"content-type": "application/json;charset=UTF-8"
|
|
1228
1399
|
});
|
|
1229
1400
|
var apitallyPlugin = definePlugin((app, config) => {
|
|
1230
1401
|
const client = new ApitallyClient(config);
|
|
1402
|
+
const logsContext = new AsyncLocalStorage();
|
|
1231
1403
|
const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
|
|
1232
1404
|
const appInfo = getAppInfo(app, config.appVersion);
|
|
1233
1405
|
if (appInfo.paths.length > 0 || attempt >= 10) {
|
|
@@ -1237,12 +1409,16 @@ var apitallyPlugin = definePlugin((app, config) => {
|
|
|
1237
1409
|
}
|
|
1238
1410
|
}, "setStartupData");
|
|
1239
1411
|
setTimeout(() => setStartupData(), 500);
|
|
1412
|
+
if (client.requestLogger.config.captureLogs) {
|
|
1413
|
+
patchConsole(logsContext);
|
|
1414
|
+
patchWinston(logsContext);
|
|
1415
|
+
}
|
|
1240
1416
|
const handleResponse = /* @__PURE__ */ __name(async (event, response, error) => {
|
|
1241
1417
|
var _a2, _b;
|
|
1242
1418
|
if (event.req.method.toUpperCase() === "OPTIONS") {
|
|
1243
1419
|
return response;
|
|
1244
1420
|
}
|
|
1245
|
-
const startTime = event.context
|
|
1421
|
+
const startTime = event.context[REQUEST_TIMESTAMP_SYMBOL];
|
|
1246
1422
|
const responseTime = startTime ? performance.now() - startTime : 0;
|
|
1247
1423
|
const path = (_a2 = event.context.matchedRoute) == null ? void 0 : _a2.route;
|
|
1248
1424
|
const statusCode = (response == null ? void 0 : response.status) || (error == null ? void 0 : error.status) || 500;
|
|
@@ -1297,33 +1473,35 @@ var apitallyPlugin = definePlugin((app, config) => {
|
|
|
1297
1473
|
} else if (error && client.requestLogger.config.logResponseBody) {
|
|
1298
1474
|
responseBody = Buffer.from(JSON.stringify(error.toJSON()));
|
|
1299
1475
|
}
|
|
1476
|
+
const logs = logsContext.getStore();
|
|
1300
1477
|
client.requestLogger.logRequest({
|
|
1301
1478
|
timestamp: (Date.now() - responseTime) / 1e3,
|
|
1302
1479
|
method: event.req.method,
|
|
1303
1480
|
path,
|
|
1304
1481
|
url: event.req.url,
|
|
1305
1482
|
headers: convertHeaders(Object.fromEntries(event.req.headers.entries())),
|
|
1306
|
-
size:
|
|
1483
|
+
size: requestSize,
|
|
1307
1484
|
consumer: consumer == null ? void 0 : consumer.identifier,
|
|
1308
|
-
body: event.context
|
|
1485
|
+
body: event.context[REQUEST_BODY_SYMBOL]
|
|
1309
1486
|
}, {
|
|
1310
1487
|
statusCode,
|
|
1311
1488
|
responseTime: responseTime / 1e3,
|
|
1312
1489
|
headers: convertHeaders(Object.fromEntries(responseHeaders.entries())),
|
|
1313
1490
|
size: responseSize,
|
|
1314
1491
|
body: responseBody
|
|
1315
|
-
});
|
|
1492
|
+
}, (error == null ? void 0 : error.cause) instanceof Error ? error.cause : void 0, logs);
|
|
1316
1493
|
}
|
|
1317
1494
|
return newResponse;
|
|
1318
1495
|
}, "handleResponse");
|
|
1319
1496
|
app.use(onRequest(async (event) => {
|
|
1320
|
-
|
|
1497
|
+
logsContext.enterWith([]);
|
|
1498
|
+
event.context[REQUEST_TIMESTAMP_SYMBOL] = performance.now();
|
|
1321
1499
|
const requestContentType = event.req.headers.get("content-type");
|
|
1322
1500
|
const requestSize = parseContentLength(event.req.headers.get("content-length")) ?? 0;
|
|
1323
1501
|
if (client.requestLogger.enabled && client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType) && requestSize <= client.requestLogger.maxBodySize) {
|
|
1324
1502
|
const clonedRequest = event.req.clone();
|
|
1325
1503
|
const requestBody = Buffer.from(await clonedRequest.arrayBuffer());
|
|
1326
|
-
event.context
|
|
1504
|
+
event.context[REQUEST_BODY_SYMBOL] = requestBody;
|
|
1327
1505
|
}
|
|
1328
1506
|
})).use(onResponse((response, event) => {
|
|
1329
1507
|
if (client.isEnabled()) {
|