apitally 0.15.2 → 0.16.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 +2 -7
- package/dist/adonisjs/configure.cjs +33 -2
- package/dist/adonisjs/configure.cjs.map +1 -1
- package/dist/adonisjs/configure.js +33 -2
- package/dist/adonisjs/configure.js.map +1 -1
- package/dist/adonisjs/index.cjs +33 -2
- package/dist/adonisjs/index.cjs.map +1 -1
- package/dist/adonisjs/index.js +33 -2
- package/dist/adonisjs/index.js.map +1 -1
- package/dist/adonisjs/middleware.cjs.map +1 -1
- package/dist/adonisjs/middleware.js.map +1 -1
- package/dist/adonisjs/provider.cjs +118 -46
- package/dist/adonisjs/provider.cjs.map +1 -1
- package/dist/adonisjs/provider.js +118 -46
- package/dist/adonisjs/provider.js.map +1 -1
- package/dist/common/client.cjs +118 -46
- package/dist/common/client.cjs.map +1 -1
- package/dist/common/client.js +118 -46
- package/dist/common/client.js.map +1 -1
- package/dist/common/requestLogger.cjs +118 -46
- package/dist/common/requestLogger.cjs.map +1 -1
- package/dist/common/requestLogger.d.cts +5 -0
- package/dist/common/requestLogger.d.ts +5 -0
- package/dist/common/requestLogger.js +118 -46
- package/dist/common/requestLogger.js.map +1 -1
- package/dist/express/index.cjs +118 -46
- package/dist/express/index.cjs.map +1 -1
- package/dist/express/index.js +118 -46
- package/dist/express/index.js.map +1 -1
- package/dist/express/middleware.cjs +118 -46
- package/dist/express/middleware.cjs.map +1 -1
- package/dist/express/middleware.js +118 -46
- package/dist/express/middleware.js.map +1 -1
- package/dist/fastify/index.cjs +118 -46
- package/dist/fastify/index.cjs.map +1 -1
- package/dist/fastify/index.js +118 -46
- package/dist/fastify/index.js.map +1 -1
- package/dist/fastify/plugin.cjs +118 -46
- package/dist/fastify/plugin.cjs.map +1 -1
- package/dist/fastify/plugin.js +118 -46
- package/dist/fastify/plugin.js.map +1 -1
- package/dist/h3/index.cjs +118 -46
- package/dist/h3/index.cjs.map +1 -1
- package/dist/h3/index.js +118 -46
- package/dist/h3/index.js.map +1 -1
- package/dist/h3/plugin.cjs +118 -46
- package/dist/h3/plugin.cjs.map +1 -1
- package/dist/h3/plugin.js +118 -46
- package/dist/h3/plugin.js.map +1 -1
- package/dist/hono/index.cjs +118 -46
- package/dist/hono/index.cjs.map +1 -1
- package/dist/hono/index.js +118 -46
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/middleware.cjs +118 -46
- package/dist/hono/middleware.cjs.map +1 -1
- package/dist/hono/middleware.js +118 -46
- package/dist/hono/middleware.js.map +1 -1
- package/dist/koa/index.cjs +118 -46
- package/dist/koa/index.cjs.map +1 -1
- package/dist/koa/index.js +118 -46
- package/dist/koa/index.js.map +1 -1
- package/dist/koa/middleware.cjs +118 -46
- package/dist/koa/middleware.cjs.map +1 -1
- package/dist/koa/middleware.js +118 -46
- package/dist/koa/middleware.js.map +1 -1
- package/dist/nestjs/index.cjs +118 -46
- package/dist/nestjs/index.cjs.map +1 -1
- package/dist/nestjs/index.js +118 -46
- package/dist/nestjs/index.js.map +1 -1
- package/package.json +1 -1
package/dist/h3/index.js
CHANGED
|
@@ -410,6 +410,16 @@ var MASK_HEADER_PATTERNS = [
|
|
|
410
410
|
/token/i,
|
|
411
411
|
/cookie/i
|
|
412
412
|
];
|
|
413
|
+
var MASK_BODY_FIELD_PATTERNS = [
|
|
414
|
+
/password/i,
|
|
415
|
+
/pwd/i,
|
|
416
|
+
/token/i,
|
|
417
|
+
/secret/i,
|
|
418
|
+
/auth/i,
|
|
419
|
+
/card[-_ ]?number/i,
|
|
420
|
+
/ccv/i,
|
|
421
|
+
/ssn/i
|
|
422
|
+
];
|
|
413
423
|
var DEFAULT_CONFIG = {
|
|
414
424
|
enabled: false,
|
|
415
425
|
logQueryParams: true,
|
|
@@ -420,6 +430,7 @@ var DEFAULT_CONFIG = {
|
|
|
420
430
|
logException: true,
|
|
421
431
|
maskQueryParams: [],
|
|
422
432
|
maskHeaders: [],
|
|
433
|
+
maskBodyFields: [],
|
|
423
434
|
excludePaths: []
|
|
424
435
|
};
|
|
425
436
|
var _RequestLogger = class _RequestLogger {
|
|
@@ -470,11 +481,23 @@ var _RequestLogger = class _RequestLogger {
|
|
|
470
481
|
];
|
|
471
482
|
return matchPatterns(name, patterns);
|
|
472
483
|
}
|
|
484
|
+
shouldMaskBodyField(name) {
|
|
485
|
+
const patterns = [
|
|
486
|
+
...this.config.maskBodyFields,
|
|
487
|
+
...MASK_BODY_FIELD_PATTERNS
|
|
488
|
+
];
|
|
489
|
+
return matchPatterns(name, patterns);
|
|
490
|
+
}
|
|
473
491
|
hasSupportedContentType(headers) {
|
|
474
492
|
var _a2;
|
|
475
493
|
const contentType = (_a2 = headers.find(([k]) => k.toLowerCase() === "content-type")) == null ? void 0 : _a2[1];
|
|
476
494
|
return this.isSupportedContentType(contentType);
|
|
477
495
|
}
|
|
496
|
+
hasJsonContentType(headers) {
|
|
497
|
+
var _a2;
|
|
498
|
+
const contentType = (_a2 = headers.find(([k]) => k.toLowerCase() === "content-type")) == null ? void 0 : _a2[1];
|
|
499
|
+
return contentType ? /\bjson\b/i.test(contentType) : null;
|
|
500
|
+
}
|
|
478
501
|
isSupportedContentType(contentType) {
|
|
479
502
|
return typeof contentType === "string" && ALLOWED_CONTENT_TYPES.some((t) => contentType.startsWith(t));
|
|
480
503
|
}
|
|
@@ -493,6 +516,72 @@ var _RequestLogger = class _RequestLogger {
|
|
|
493
516
|
this.shouldMaskHeader(k) ? MASKED : v
|
|
494
517
|
]);
|
|
495
518
|
}
|
|
519
|
+
maskBody(data) {
|
|
520
|
+
if (typeof data === "object" && data !== null && !Array.isArray(data)) {
|
|
521
|
+
const result = {};
|
|
522
|
+
for (const [key, value] of Object.entries(data)) {
|
|
523
|
+
if (typeof value === "string" && this.shouldMaskBodyField(key)) {
|
|
524
|
+
result[key] = MASKED;
|
|
525
|
+
} else {
|
|
526
|
+
result[key] = this.maskBody(value);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
return result;
|
|
530
|
+
}
|
|
531
|
+
if (Array.isArray(data)) {
|
|
532
|
+
return data.map((item) => this.maskBody(item));
|
|
533
|
+
}
|
|
534
|
+
return data;
|
|
535
|
+
}
|
|
536
|
+
applyMasking(item) {
|
|
537
|
+
if (this.config.maskRequestBodyCallback && item.request.body && item.request.body !== BODY_TOO_LARGE) {
|
|
538
|
+
try {
|
|
539
|
+
const maskedBody = this.config.maskRequestBodyCallback(item.request);
|
|
540
|
+
item.request.body = maskedBody ?? BODY_MASKED;
|
|
541
|
+
} catch {
|
|
542
|
+
item.request.body = void 0;
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (this.config.maskResponseBodyCallback && item.response.body && item.response.body !== BODY_TOO_LARGE) {
|
|
546
|
+
try {
|
|
547
|
+
const maskedBody = this.config.maskResponseBodyCallback(item.request, item.response);
|
|
548
|
+
item.response.body = maskedBody ?? BODY_MASKED;
|
|
549
|
+
} catch {
|
|
550
|
+
item.response.body = void 0;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
if (item.request.body && item.request.body.length > MAX_BODY_SIZE) {
|
|
554
|
+
item.request.body = BODY_TOO_LARGE;
|
|
555
|
+
}
|
|
556
|
+
if (item.response.body && item.response.body.length > MAX_BODY_SIZE) {
|
|
557
|
+
item.response.body = BODY_TOO_LARGE;
|
|
558
|
+
}
|
|
559
|
+
for (const key of [
|
|
560
|
+
"request",
|
|
561
|
+
"response"
|
|
562
|
+
]) {
|
|
563
|
+
const bodyData = item[key].body;
|
|
564
|
+
if (!bodyData || bodyData === BODY_TOO_LARGE || bodyData === BODY_MASKED) {
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
const headers = item[key].headers;
|
|
568
|
+
const hasJsonContent = this.hasJsonContentType(headers);
|
|
569
|
+
if (hasJsonContent === null || hasJsonContent) {
|
|
570
|
+
try {
|
|
571
|
+
const parsedBody = JSON.parse(bodyData.toString());
|
|
572
|
+
const maskedBody = this.maskBody(parsedBody);
|
|
573
|
+
item[key].body = Buffer3.from(JSON.stringify(maskedBody));
|
|
574
|
+
} catch {
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
item.request.headers = this.config.logRequestHeaders ? this.maskHeaders(item.request.headers) : [];
|
|
579
|
+
item.response.headers = this.config.logResponseHeaders ? this.maskHeaders(item.response.headers) : [];
|
|
580
|
+
const url = new URL(item.request.url);
|
|
581
|
+
url.search = this.config.logQueryParams ? this.maskQueryParams(url.search) : "";
|
|
582
|
+
item.request.url = url.toString();
|
|
583
|
+
return item;
|
|
584
|
+
}
|
|
496
585
|
logRequest(request, response, error) {
|
|
497
586
|
var _a2, _b, _c;
|
|
498
587
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
@@ -502,64 +591,30 @@ var _RequestLogger = class _RequestLogger {
|
|
|
502
591
|
if (this.shouldExcludePath(path) || this.shouldExcludeUserAgent(userAgent) || (((_c = (_b = this.config).excludeCallback) == null ? void 0 : _c.call(_b, request, response)) ?? false)) {
|
|
503
592
|
return;
|
|
504
593
|
}
|
|
505
|
-
url.search = this.config.logQueryParams ? this.maskQueryParams(url.search) : "";
|
|
506
|
-
request.url = url.toString();
|
|
507
594
|
if (!this.config.logRequestBody || !this.hasSupportedContentType(request.headers)) {
|
|
508
595
|
request.body = void 0;
|
|
509
|
-
} else if (request.body) {
|
|
510
|
-
if (request.body.length > MAX_BODY_SIZE) {
|
|
511
|
-
request.body = BODY_TOO_LARGE;
|
|
512
|
-
} else if (this.config.maskRequestBodyCallback) {
|
|
513
|
-
try {
|
|
514
|
-
request.body = this.config.maskRequestBodyCallback(request) ?? BODY_MASKED;
|
|
515
|
-
if (request.body.length > MAX_BODY_SIZE) {
|
|
516
|
-
request.body = BODY_TOO_LARGE;
|
|
517
|
-
}
|
|
518
|
-
} catch {
|
|
519
|
-
request.body = void 0;
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
596
|
}
|
|
523
597
|
if (!this.config.logResponseBody || !this.hasSupportedContentType(response.headers)) {
|
|
524
598
|
response.body = void 0;
|
|
525
|
-
} else if (response.body) {
|
|
526
|
-
if (response.body.length > MAX_BODY_SIZE) {
|
|
527
|
-
response.body = BODY_TOO_LARGE;
|
|
528
|
-
} else if (this.config.maskResponseBodyCallback) {
|
|
529
|
-
try {
|
|
530
|
-
response.body = this.config.maskResponseBodyCallback(request, response) ?? BODY_MASKED;
|
|
531
|
-
if (response.body.length > MAX_BODY_SIZE) {
|
|
532
|
-
response.body = BODY_TOO_LARGE;
|
|
533
|
-
}
|
|
534
|
-
} catch {
|
|
535
|
-
response.body = void 0;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
599
|
}
|
|
539
|
-
request.
|
|
540
|
-
|
|
600
|
+
if (request.size !== void 0 && request.size < 0) {
|
|
601
|
+
request.size = void 0;
|
|
602
|
+
}
|
|
603
|
+
if (response.size !== void 0 && response.size < 0) {
|
|
604
|
+
response.size = void 0;
|
|
605
|
+
}
|
|
541
606
|
const item = {
|
|
542
607
|
uuid: randomUUID2(),
|
|
543
|
-
request
|
|
544
|
-
response
|
|
608
|
+
request,
|
|
609
|
+
response,
|
|
545
610
|
exception: error && this.config.logException ? {
|
|
546
611
|
type: error.name,
|
|
547
612
|
message: truncateExceptionMessage(error.message),
|
|
548
613
|
stacktrace: truncateExceptionStackTrace(error.stack || ""),
|
|
549
614
|
sentryEventId: getSentryEventId()
|
|
550
|
-
} :
|
|
615
|
+
} : void 0
|
|
551
616
|
};
|
|
552
|
-
|
|
553
|
-
item.request.body,
|
|
554
|
-
item.response.body
|
|
555
|
-
].forEach((body) => {
|
|
556
|
-
if (body) {
|
|
557
|
-
body.toJSON = function() {
|
|
558
|
-
return this.toString("base64");
|
|
559
|
-
};
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
this.pendingWrites.push(JSON.stringify(item));
|
|
617
|
+
this.pendingWrites.push(item);
|
|
563
618
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
564
619
|
this.pendingWrites.shift();
|
|
565
620
|
}
|
|
@@ -573,9 +628,26 @@ var _RequestLogger = class _RequestLogger {
|
|
|
573
628
|
this.currentFile = new TempGzipFile();
|
|
574
629
|
}
|
|
575
630
|
while (this.pendingWrites.length > 0) {
|
|
576
|
-
|
|
631
|
+
let item = this.pendingWrites.shift();
|
|
577
632
|
if (item) {
|
|
578
|
-
|
|
633
|
+
item = this.applyMasking(item);
|
|
634
|
+
const finalItem = {
|
|
635
|
+
uuid: item.uuid,
|
|
636
|
+
request: skipEmptyValues(item.request),
|
|
637
|
+
response: skipEmptyValues(item.response),
|
|
638
|
+
exception: item.exception
|
|
639
|
+
};
|
|
640
|
+
[
|
|
641
|
+
finalItem.request.body,
|
|
642
|
+
finalItem.response.body
|
|
643
|
+
].forEach((body) => {
|
|
644
|
+
if (body) {
|
|
645
|
+
body.toJSON = function() {
|
|
646
|
+
return this.toString("base64");
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
await this.currentFile.writeLine(Buffer3.from(JSON.stringify(finalItem)));
|
|
579
651
|
}
|
|
580
652
|
}
|
|
581
653
|
});
|