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/plugin.cjs
CHANGED
|
@@ -437,6 +437,16 @@ var MASK_HEADER_PATTERNS = [
|
|
|
437
437
|
/token/i,
|
|
438
438
|
/cookie/i
|
|
439
439
|
];
|
|
440
|
+
var MASK_BODY_FIELD_PATTERNS = [
|
|
441
|
+
/password/i,
|
|
442
|
+
/pwd/i,
|
|
443
|
+
/token/i,
|
|
444
|
+
/secret/i,
|
|
445
|
+
/auth/i,
|
|
446
|
+
/card[-_ ]?number/i,
|
|
447
|
+
/ccv/i,
|
|
448
|
+
/ssn/i
|
|
449
|
+
];
|
|
440
450
|
var DEFAULT_CONFIG = {
|
|
441
451
|
enabled: false,
|
|
442
452
|
logQueryParams: true,
|
|
@@ -447,6 +457,7 @@ var DEFAULT_CONFIG = {
|
|
|
447
457
|
logException: true,
|
|
448
458
|
maskQueryParams: [],
|
|
449
459
|
maskHeaders: [],
|
|
460
|
+
maskBodyFields: [],
|
|
450
461
|
excludePaths: []
|
|
451
462
|
};
|
|
452
463
|
var _RequestLogger = class _RequestLogger {
|
|
@@ -497,11 +508,23 @@ var _RequestLogger = class _RequestLogger {
|
|
|
497
508
|
];
|
|
498
509
|
return matchPatterns(name, patterns);
|
|
499
510
|
}
|
|
511
|
+
shouldMaskBodyField(name) {
|
|
512
|
+
const patterns = [
|
|
513
|
+
...this.config.maskBodyFields,
|
|
514
|
+
...MASK_BODY_FIELD_PATTERNS
|
|
515
|
+
];
|
|
516
|
+
return matchPatterns(name, patterns);
|
|
517
|
+
}
|
|
500
518
|
hasSupportedContentType(headers) {
|
|
501
519
|
var _a2;
|
|
502
520
|
const contentType = (_a2 = headers.find(([k]) => k.toLowerCase() === "content-type")) == null ? void 0 : _a2[1];
|
|
503
521
|
return this.isSupportedContentType(contentType);
|
|
504
522
|
}
|
|
523
|
+
hasJsonContentType(headers) {
|
|
524
|
+
var _a2;
|
|
525
|
+
const contentType = (_a2 = headers.find(([k]) => k.toLowerCase() === "content-type")) == null ? void 0 : _a2[1];
|
|
526
|
+
return contentType ? /\bjson\b/i.test(contentType) : null;
|
|
527
|
+
}
|
|
505
528
|
isSupportedContentType(contentType) {
|
|
506
529
|
return typeof contentType === "string" && ALLOWED_CONTENT_TYPES.some((t) => contentType.startsWith(t));
|
|
507
530
|
}
|
|
@@ -520,6 +543,72 @@ var _RequestLogger = class _RequestLogger {
|
|
|
520
543
|
this.shouldMaskHeader(k) ? MASKED : v
|
|
521
544
|
]);
|
|
522
545
|
}
|
|
546
|
+
maskBody(data) {
|
|
547
|
+
if (typeof data === "object" && data !== null && !Array.isArray(data)) {
|
|
548
|
+
const result = {};
|
|
549
|
+
for (const [key, value] of Object.entries(data)) {
|
|
550
|
+
if (typeof value === "string" && this.shouldMaskBodyField(key)) {
|
|
551
|
+
result[key] = MASKED;
|
|
552
|
+
} else {
|
|
553
|
+
result[key] = this.maskBody(value);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
return result;
|
|
557
|
+
}
|
|
558
|
+
if (Array.isArray(data)) {
|
|
559
|
+
return data.map((item) => this.maskBody(item));
|
|
560
|
+
}
|
|
561
|
+
return data;
|
|
562
|
+
}
|
|
563
|
+
applyMasking(item) {
|
|
564
|
+
if (this.config.maskRequestBodyCallback && item.request.body && item.request.body !== BODY_TOO_LARGE) {
|
|
565
|
+
try {
|
|
566
|
+
const maskedBody = this.config.maskRequestBodyCallback(item.request);
|
|
567
|
+
item.request.body = maskedBody ?? BODY_MASKED;
|
|
568
|
+
} catch {
|
|
569
|
+
item.request.body = void 0;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
if (this.config.maskResponseBodyCallback && item.response.body && item.response.body !== BODY_TOO_LARGE) {
|
|
573
|
+
try {
|
|
574
|
+
const maskedBody = this.config.maskResponseBodyCallback(item.request, item.response);
|
|
575
|
+
item.response.body = maskedBody ?? BODY_MASKED;
|
|
576
|
+
} catch {
|
|
577
|
+
item.response.body = void 0;
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
if (item.request.body && item.request.body.length > MAX_BODY_SIZE) {
|
|
581
|
+
item.request.body = BODY_TOO_LARGE;
|
|
582
|
+
}
|
|
583
|
+
if (item.response.body && item.response.body.length > MAX_BODY_SIZE) {
|
|
584
|
+
item.response.body = BODY_TOO_LARGE;
|
|
585
|
+
}
|
|
586
|
+
for (const key of [
|
|
587
|
+
"request",
|
|
588
|
+
"response"
|
|
589
|
+
]) {
|
|
590
|
+
const bodyData = item[key].body;
|
|
591
|
+
if (!bodyData || bodyData === BODY_TOO_LARGE || bodyData === BODY_MASKED) {
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
const headers = item[key].headers;
|
|
595
|
+
const hasJsonContent = this.hasJsonContentType(headers);
|
|
596
|
+
if (hasJsonContent === null || hasJsonContent) {
|
|
597
|
+
try {
|
|
598
|
+
const parsedBody = JSON.parse(bodyData.toString());
|
|
599
|
+
const maskedBody = this.maskBody(parsedBody);
|
|
600
|
+
item[key].body = import_buffer2.Buffer.from(JSON.stringify(maskedBody));
|
|
601
|
+
} catch {
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
item.request.headers = this.config.logRequestHeaders ? this.maskHeaders(item.request.headers) : [];
|
|
606
|
+
item.response.headers = this.config.logResponseHeaders ? this.maskHeaders(item.response.headers) : [];
|
|
607
|
+
const url = new URL(item.request.url);
|
|
608
|
+
url.search = this.config.logQueryParams ? this.maskQueryParams(url.search) : "";
|
|
609
|
+
item.request.url = url.toString();
|
|
610
|
+
return item;
|
|
611
|
+
}
|
|
523
612
|
logRequest(request, response, error) {
|
|
524
613
|
var _a2, _b, _c;
|
|
525
614
|
if (!this.enabled || this.suspendUntil !== null) return;
|
|
@@ -529,64 +618,30 @@ var _RequestLogger = class _RequestLogger {
|
|
|
529
618
|
if (this.shouldExcludePath(path) || this.shouldExcludeUserAgent(userAgent) || (((_c = (_b = this.config).excludeCallback) == null ? void 0 : _c.call(_b, request, response)) ?? false)) {
|
|
530
619
|
return;
|
|
531
620
|
}
|
|
532
|
-
url.search = this.config.logQueryParams ? this.maskQueryParams(url.search) : "";
|
|
533
|
-
request.url = url.toString();
|
|
534
621
|
if (!this.config.logRequestBody || !this.hasSupportedContentType(request.headers)) {
|
|
535
622
|
request.body = void 0;
|
|
536
|
-
} else if (request.body) {
|
|
537
|
-
if (request.body.length > MAX_BODY_SIZE) {
|
|
538
|
-
request.body = BODY_TOO_LARGE;
|
|
539
|
-
} else if (this.config.maskRequestBodyCallback) {
|
|
540
|
-
try {
|
|
541
|
-
request.body = this.config.maskRequestBodyCallback(request) ?? BODY_MASKED;
|
|
542
|
-
if (request.body.length > MAX_BODY_SIZE) {
|
|
543
|
-
request.body = BODY_TOO_LARGE;
|
|
544
|
-
}
|
|
545
|
-
} catch {
|
|
546
|
-
request.body = void 0;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
623
|
}
|
|
550
624
|
if (!this.config.logResponseBody || !this.hasSupportedContentType(response.headers)) {
|
|
551
625
|
response.body = void 0;
|
|
552
|
-
} else if (response.body) {
|
|
553
|
-
if (response.body.length > MAX_BODY_SIZE) {
|
|
554
|
-
response.body = BODY_TOO_LARGE;
|
|
555
|
-
} else if (this.config.maskResponseBodyCallback) {
|
|
556
|
-
try {
|
|
557
|
-
response.body = this.config.maskResponseBodyCallback(request, response) ?? BODY_MASKED;
|
|
558
|
-
if (response.body.length > MAX_BODY_SIZE) {
|
|
559
|
-
response.body = BODY_TOO_LARGE;
|
|
560
|
-
}
|
|
561
|
-
} catch {
|
|
562
|
-
response.body = void 0;
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
626
|
}
|
|
566
|
-
request.
|
|
567
|
-
|
|
627
|
+
if (request.size !== void 0 && request.size < 0) {
|
|
628
|
+
request.size = void 0;
|
|
629
|
+
}
|
|
630
|
+
if (response.size !== void 0 && response.size < 0) {
|
|
631
|
+
response.size = void 0;
|
|
632
|
+
}
|
|
568
633
|
const item = {
|
|
569
634
|
uuid: (0, import_crypto3.randomUUID)(),
|
|
570
|
-
request
|
|
571
|
-
response
|
|
635
|
+
request,
|
|
636
|
+
response,
|
|
572
637
|
exception: error && this.config.logException ? {
|
|
573
638
|
type: error.name,
|
|
574
639
|
message: truncateExceptionMessage(error.message),
|
|
575
640
|
stacktrace: truncateExceptionStackTrace(error.stack || ""),
|
|
576
641
|
sentryEventId: getSentryEventId()
|
|
577
|
-
} :
|
|
642
|
+
} : void 0
|
|
578
643
|
};
|
|
579
|
-
|
|
580
|
-
item.request.body,
|
|
581
|
-
item.response.body
|
|
582
|
-
].forEach((body) => {
|
|
583
|
-
if (body) {
|
|
584
|
-
body.toJSON = function() {
|
|
585
|
-
return this.toString("base64");
|
|
586
|
-
};
|
|
587
|
-
}
|
|
588
|
-
});
|
|
589
|
-
this.pendingWrites.push(JSON.stringify(item));
|
|
644
|
+
this.pendingWrites.push(item);
|
|
590
645
|
if (this.pendingWrites.length > MAX_PENDING_WRITES) {
|
|
591
646
|
this.pendingWrites.shift();
|
|
592
647
|
}
|
|
@@ -600,9 +655,26 @@ var _RequestLogger = class _RequestLogger {
|
|
|
600
655
|
this.currentFile = new TempGzipFile();
|
|
601
656
|
}
|
|
602
657
|
while (this.pendingWrites.length > 0) {
|
|
603
|
-
|
|
658
|
+
let item = this.pendingWrites.shift();
|
|
604
659
|
if (item) {
|
|
605
|
-
|
|
660
|
+
item = this.applyMasking(item);
|
|
661
|
+
const finalItem = {
|
|
662
|
+
uuid: item.uuid,
|
|
663
|
+
request: skipEmptyValues(item.request),
|
|
664
|
+
response: skipEmptyValues(item.response),
|
|
665
|
+
exception: item.exception
|
|
666
|
+
};
|
|
667
|
+
[
|
|
668
|
+
finalItem.request.body,
|
|
669
|
+
finalItem.response.body
|
|
670
|
+
].forEach((body) => {
|
|
671
|
+
if (body) {
|
|
672
|
+
body.toJSON = function() {
|
|
673
|
+
return this.toString("base64");
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
await this.currentFile.writeLine(import_buffer2.Buffer.from(JSON.stringify(finalItem)));
|
|
606
678
|
}
|
|
607
679
|
}
|
|
608
680
|
});
|