vona-module-a-logger 5.1.16 → 5.1.18
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/bean/aopMethod.log.d.ts.map +1 -1
- package/dist/bean/bean.logger.d.ts.map +1 -1
- package/dist/bean/middlewareSystem.httpLog.d.ts +1 -1
- package/dist/bean/middlewareSystem.httpLog.d.ts.map +1 -1
- package/dist/index.js +46 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/redactHttpLog.d.ts +3 -0
- package/dist/lib/redactHttpLog.d.ts.map +1 -0
- package/dist/lib/redactHttpLog.test.d.ts +2 -0
- package/dist/lib/redactHttpLog.test.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/bean/aopMethod.log.ts +4 -1
- package/src/bean/bean.logger.ts +9 -0
- package/src/bean/middlewareSystem.httpLog.ts +27 -14
- package/src/lib/redactHttpLog.test.ts +207 -0
- package/src/lib/redactHttpLog.ts +30 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aopMethod.log.d.ts","sourceRoot":"","sources":["../../src/bean/aopMethod.log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACjG,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"aopMethod.log.d.ts","sourceRoot":"","sources":["../../src/bean/aopMethod.log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACjG,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,iBAAiB,EAA0C,MAAM,MAAM,CAAC;AAGjF,MAAM,WAAW,oBAAqB,SAAQ,0BAA0B;IACtE,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,kBAAkB,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,mBAAmB,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,qBAGa,YACX,SAAQ,iBACR,YAAW,aAAa,EAAE,aAAa,EAAE,iBAAiB;IAE1D,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG;IAkBpF,GAAG,CACD,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,GACX,OAAO;IAkBV,OAAO,CACL,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,EAAE,EACT,IAAI,EAAE,IAAI,GAAG,QAAQ,EACrB,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG;IAmCrB,WAAW,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,GAAG;IAMxD,SAAS,CACP,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,OAAO,EAAE,GAAG,EACZ,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,MAAM;IAajB,UAAU,CACR,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,MAAM;IAajB,SAAS,CACP,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,OAAO,EAAE,GAAG,EACZ,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM;CAYlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bean.logger.d.ts","sourceRoot":"","sources":["../../src/bean/bean.logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACZ,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"bean.logger.d.ts","sourceRoot":"","sources":["../../src/bean/bean.logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACZ,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,QAAQ,EAST,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,qBACa,UAAW,SAAQ,QAAQ;IAC/B,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,mBAAmB,GAAG,WAAW,GAAG,KAAK;IAI3E,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,mBAAmB;IAKnF,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,mBAAmB,GAAG,MAAM,EAAE,GAAG,SAAS;IAI5E,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,mBAAmB;IAKtF,IAAW,OAAO,IAAI,OAAO,CAAC,MAAM,CAGnC;IAEM,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM;IAK3D,QAAQ,CACb,SAAS,EAAE,MAAM,kBAAkB,EACnC,UAAU,CAAC,EAAE,MAAM,mBAAmB,GACrC,OAAO,CAAC,MAAM;IAKV,cAAc,CAAC,IAAI,EAAE,iBAAiB;IAUtC,iBAAiB,CACtB,UAAU,EAAE,wBAAwB,EACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAC9B,SAAS;IAeL,oBAAoB,CAAC,UAAU,EAAE,wBAAwB,GAAG,SAAS;CAa7E"}
|
|
@@ -4,6 +4,6 @@ import { BeanBase } from 'vona';
|
|
|
4
4
|
export interface IMiddlewareSystemOptionsHttpLog extends IDecoratorMiddlewareSystemOptions {
|
|
5
5
|
}
|
|
6
6
|
export declare class MiddlewareSystemHttpLog extends BeanBase implements IMiddlewareSystemExecute {
|
|
7
|
-
execute(_options: IMiddlewareSystemOptionsHttpLog, next: Next): Promise<
|
|
7
|
+
execute(_options: IMiddlewareSystemOptionsHttpLog, next: Next): Promise<any>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=middlewareSystem.httpLog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middlewareSystem.httpLog.d.ts","sourceRoot":"","sources":["../../src/bean/middlewareSystem.httpLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EACV,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"middlewareSystem.httpLog.d.ts","sourceRoot":"","sources":["../../src/bean/middlewareSystem.httpLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EACV,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,QAAQ,EAAsB,MAAM,MAAM,CAAC;AAMpD,MAAM,WAAW,+BAAgC,SAAQ,iCAAiC;CAAG;AAE7F,qBACa,uBAAwB,SAAQ,QAAS,YAAW,wBAAwB;IACjF,OAAO,CAAC,QAAQ,EAAE,+BAA+B,EAAE,IAAI,EAAE,IAAI;CAwCpE"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BeanInfo, BeanBase, BeanAopMethodBase, SymbolBeanFullName, formatLoggerErrors, formatLoggerCtx, formatLoggerFilter, formatLoggerDummy, formatLoggerConsole, BeanSimple, combineConfigDefault, deepExtend, BeanScopeBase } from 'vona';
|
|
1
|
+
import { BeanInfo, BeanBase, getRequestBoundary, BeanAopMethodBase, SymbolBeanFullName, getSuppressedDiagnosticLogger, formatLoggerBoundary, formatLoggerErrors, formatLoggerCtx, formatLoggerFilter, formatLoggerDummy, formatLoggerConsole, BeanSimple, combineConfigDefault, deepExtend, BeanScopeBase } from 'vona';
|
|
2
2
|
import { __decorate } from 'tslib';
|
|
3
3
|
import StdSerializers from 'pino-std-serializers';
|
|
4
4
|
import { MiddlewareSystem, AopMethod } from 'vona-module-a-aspect';
|
|
@@ -7,6 +7,30 @@ import { Bean, Scope } from 'vona-module-a-bean';
|
|
|
7
7
|
import * as Winston from 'winston';
|
|
8
8
|
import { Broadcast, BeanBroadcastBase } from 'vona-module-a-broadcast';
|
|
9
9
|
|
|
10
|
+
const safeHeaders = new Set(['accept', 'content-type', 'content-length']);
|
|
11
|
+
function redactHttpLogHeaders(headers) {
|
|
12
|
+
// Allowlist diagnostic metadata so custom credential headers are covered too.
|
|
13
|
+
return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, safeHeaders.has(key.toLowerCase()) ? value : '[REDACTED]']));
|
|
14
|
+
}
|
|
15
|
+
function redactHttpLogUrl(value) {
|
|
16
|
+
if (typeof value !== 'string') return undefined;
|
|
17
|
+
const boundary = value.search(/[?#]/);
|
|
18
|
+
let path = boundary < 0 ? value : value.slice(0, boundary);
|
|
19
|
+
if (/^[a-z][a-z\d+.-]*:\/\//i.test(path) || path.startsWith('//')) {
|
|
20
|
+
try {
|
|
21
|
+
const url = new URL(path, 'http://redacted.invalid');
|
|
22
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') return '[REDACTED]';
|
|
23
|
+
path = `${path.startsWith('//') ? '//' : `${url.protocol}//`}${url.host}${url.pathname}`;
|
|
24
|
+
} catch {
|
|
25
|
+
return '[REDACTED]';
|
|
26
|
+
}
|
|
27
|
+
} else if (!path.startsWith('/') && path !== '*') {
|
|
28
|
+
return '[REDACTED]';
|
|
29
|
+
}
|
|
30
|
+
// Query names can be configured by authentication clients; omit the whole query/fragment.
|
|
31
|
+
return `${path}${boundary < 0 ? '' : '?[REDACTED]'}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
10
34
|
function redactIsolatedReadyHeader(headers, path, runId, header) {
|
|
11
35
|
if (!['/health/ready', '/health/test-stop'].includes(path) || !runId) return headers;
|
|
12
36
|
const redacted = {
|
|
@@ -21,18 +45,26 @@ function redactIsolatedReadyHeader(headers, path, runId, header) {
|
|
|
21
45
|
|
|
22
46
|
let MiddlewareSystemHttpLog = class MiddlewareSystemHttpLog extends BeanBase {
|
|
23
47
|
async execute(_options, next) {
|
|
48
|
+
if (getRequestBoundary()) return next();
|
|
24
49
|
const ctx = this.ctx;
|
|
25
50
|
// start
|
|
26
|
-
const
|
|
27
|
-
|
|
51
|
+
const serialized = StdSerializers.req(ctx.req);
|
|
52
|
+
// Do not retain serializer query/params/raw extensions or request bodies in logs.
|
|
53
|
+
const req = {
|
|
54
|
+
method: serialized.method,
|
|
55
|
+
url: redactHttpLogUrl(serialized.url),
|
|
56
|
+
headers: redactHttpLogHeaders(redactIsolatedReadyHeader(serialized.headers, ctx.path, this.app.meta.env.VONA_TEST_RUN_ID, ['x-vona-test-challenge', 'x-vona-test-stop-nonce', 'x-vona-test-stop-authorization'])),
|
|
57
|
+
remoteAddress: serialized.remoteAddress,
|
|
58
|
+
remotePort: serialized.remotePort
|
|
59
|
+
};
|
|
28
60
|
this.$loggerChild('req').http(() => JSON.stringify(req));
|
|
29
61
|
const profiler = this.$loggerChild('res').startTimer();
|
|
30
62
|
// next
|
|
31
63
|
await next();
|
|
32
64
|
// end
|
|
33
|
-
const headers = redactIsolatedReadyHeader(ctx.res.getHeaders(), ctx.path, this.app.meta.env.VONA_TEST_RUN_ID, ['x-vona-test-proof', 'x-vona-test-stop-proof']);
|
|
65
|
+
const headers = redactHttpLogHeaders(redactIsolatedReadyHeader(ctx.res.getHeaders(), ctx.path, this.app.meta.env.VONA_TEST_RUN_ID, ['x-vona-test-proof', 'x-vona-test-stop-proof']));
|
|
34
66
|
const res = {
|
|
35
|
-
url: ctx.req.url,
|
|
67
|
+
url: redactHttpLogUrl(ctx.req.url),
|
|
36
68
|
statusCode: ctx.res.statusCode,
|
|
37
69
|
headers
|
|
38
70
|
};
|
|
@@ -48,6 +80,7 @@ MiddlewareSystemHttpLog = __decorate([MiddlewareSystem(), BeanInfo({
|
|
|
48
80
|
|
|
49
81
|
let AopMethodLog = class AopMethodLog extends BeanAopMethodBase {
|
|
50
82
|
get(options, next, receiver, prop) {
|
|
83
|
+
if (getRequestBoundary()) return next();
|
|
51
84
|
const context = this._getContext(options, receiver);
|
|
52
85
|
const message = `${receiver[SymbolBeanFullName]}#${prop}(get)`;
|
|
53
86
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
|
@@ -64,6 +97,7 @@ let AopMethodLog = class AopMethodLog extends BeanAopMethodBase {
|
|
|
64
97
|
}
|
|
65
98
|
}
|
|
66
99
|
set(options, value, next, receiver, prop) {
|
|
100
|
+
if (getRequestBoundary()) return next();
|
|
67
101
|
const context = this._getContext(options, receiver);
|
|
68
102
|
const message = `${receiver[SymbolBeanFullName]}#${prop}(set)`;
|
|
69
103
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
|
@@ -80,6 +114,7 @@ let AopMethodLog = class AopMethodLog extends BeanAopMethodBase {
|
|
|
80
114
|
}
|
|
81
115
|
}
|
|
82
116
|
execute(options, _args, next, receiver, prop) {
|
|
117
|
+
if (getRequestBoundary()) return next();
|
|
83
118
|
const context = this._getContext(options, receiver);
|
|
84
119
|
const message = `${receiver[SymbolBeanFullName]}#${prop}`;
|
|
85
120
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
|
@@ -176,23 +211,26 @@ let BeanLogger = class BeanLogger extends BeanBase {
|
|
|
176
211
|
});
|
|
177
212
|
}
|
|
178
213
|
get default() {
|
|
214
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
179
215
|
return this.app.meta.logger.get();
|
|
180
216
|
}
|
|
181
217
|
get(clientName) {
|
|
218
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
182
219
|
return this.app.meta.logger.get(clientName);
|
|
183
220
|
}
|
|
184
221
|
getChild(childName, clientName) {
|
|
222
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
185
223
|
return this.app.meta.logger.get(clientName).child({
|
|
186
224
|
name: childName
|
|
187
225
|
});
|
|
188
226
|
}
|
|
189
227
|
makeFormatBase(opts) {
|
|
190
|
-
return Winston.format.combine(formatLoggerErrors(opts), formatLoggerCtx(), Winston.format.splat(), Winston.format.timestamp());
|
|
228
|
+
return Winston.format.combine(formatLoggerBoundary(), formatLoggerErrors(opts), formatLoggerCtx(), Winston.format.splat(), Winston.format.timestamp());
|
|
191
229
|
}
|
|
192
230
|
makeTransportFile(clientInfo, fileName, levelStrict, childStrict) {
|
|
193
231
|
return this.app.meta.logger.createTransportFile(fileName, clientInfo, {
|
|
194
232
|
level: levelStrict ?? 'silly',
|
|
195
|
-
format: Winston.format.combine(formatLoggerFilter({
|
|
233
|
+
format: Winston.format.combine(formatLoggerBoundary(), formatLoggerFilter({
|
|
196
234
|
child: childStrict ?? clientInfo.child,
|
|
197
235
|
level: levelStrict ?? clientInfo.level,
|
|
198
236
|
strict: !!levelStrict
|
|
@@ -202,7 +240,7 @@ let BeanLogger = class BeanLogger extends BeanBase {
|
|
|
202
240
|
makeTransportConsole(clientInfo) {
|
|
203
241
|
return new Winston.transports.Console({
|
|
204
242
|
level: 'silly',
|
|
205
|
-
format: Winston.format.combine(formatLoggerDummy(), formatLoggerFilter({
|
|
243
|
+
format: Winston.format.combine(formatLoggerBoundary(), formatLoggerDummy(), formatLoggerFilter({
|
|
206
244
|
child: clientInfo.child,
|
|
207
245
|
level: clientInfo.level,
|
|
208
246
|
silly: true
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/lib/redactIsolatedReadyHeader.ts","../src/bean/middlewareSystem.httpLog.ts","../src/bean/aopMethod.log.ts","../src/bean/bean.logger.ts","../src/bean/broadcast.setFilterChild.ts","../src/bean/broadcast.setFilterLevel.ts","../src/main.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["redactIsolatedReadyHeader","headers","path","runId","header","includes","redacted","names","Array","isArray","map","name","toLowerCase","Object","keys","MiddlewareSystemHttpLog","BeanBase","execute","_options","next","ctx","req","StdSerializers","app","meta","env","VONA_TEST_RUN_ID","$loggerChild","http","JSON","stringify","profiler","startTimer","res","getHeaders","url","statusCode","done","level","message","__decorate","MiddlewareSystem","__z_BeanInfo","module","AopMethodLog","BeanAopMethodBase","get","options","receiver","prop","context","_getContext","SymbolBeanFullName","logger","child","childName","clientName","_logResult","err","_logError","set","value","_logValue","_args","args","log","undefined","then","result","catch","evaluateExpressions","self","info","textValue","textResult","textError","AopMethod","BeanLogger","getFilterLevel","setFilterLevel","scope","broadcast","emit","getFilterChild","setFilterChild","default","getChild","makeFormatBase","opts","Winston","format","combine","formatLoggerErrors","formatLoggerCtx","splat","timestamp","makeTransportFile","clientInfo","fileName","levelStrict","childStrict","createTransportFile","formatLoggerFilter","strict","json","makeTransportConsole","transports","Console","formatLoggerDummy","silly","colorize","formatLoggerConsole","forceConsole","Bean","BroadcastSetFilterChild","BeanBroadcastBase","data","isEmitter","Broadcast","BroadcastSetFilterLevel","instance","Main","BeanSimple","moduleLoading","_configDefault","combineConfigDefault","configDefault","config","deepExtend","moduleLoaded","configLoaded","_config","_app","ScopeModuleALogger","BeanScopeBase","Scope"],"mappings":";;;;;;;;;AAAM,SAAUA,yBAAyBA,CACvCC,OAAgB,EAChBC,IAAY,EACZC,KAAyB,EACzBC,MAAyB,EAAA;AAEzB,EAAA,IAAI,CAAC,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAACC,QAAQ,CAACH,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE,OAAOF,OAAO;AACpF,EAAA,MAAMK,QAAQ,GAAG;IAAE,GAAGL;GAAS;EAC/B,MAAMM,KAAK,GAAG,CAACC,KAAK,CAACC,OAAO,CAACL,MAAM,CAAC,GAAGA,MAAM,GAAG,CAACA,MAAM,CAAC,EAAEM,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACC,WAAW,EAAE,CAAC;EACzF,KAAK,MAAMD,IAAI,IAAIE,MAAM,CAACC,IAAI,CAACR,QAAQ,CAAC,EAAE;AACxC,IAAA,IAAIC,KAAK,CAACF,QAAQ,CAACM,IAAI,CAACC,WAAW,EAAE,CAAC,EAAE,OAAON,QAAQ,CAACK,IAAI,CAAC;AAC/D,EAAA;AACA,EAAA,OAAOL,QAAQ;AACjB;;ACEO,IAAMS,uBAAuB,GAA7B,MAAMA,uBAAwB,SAAQC,QAAQ,CAAA;AACnD,EAAA,MAAMC,OAAOA,CAACC,QAAyC,EAAEC,IAAU,EAAA;AACjE,IAAA,MAAMC,GAAG,GAAG,IAAI,CAACA,GAAG;AACpB;IACA,MAAMC,GAAG,GAAGC,cAAc,CAACD,GAAG,CAACD,GAAG,CAACC,GAAG,CAAC;AACvCA,IAAAA,GAAG,CAACpB,OAAO,GAAGD,yBAAyB,CACrCqB,GAAG,CAACpB,OAAO,EACXmB,GAAG,CAAClB,IAAI,EACR,IAAI,CAACqB,GAAG,CAACC,IAAI,CAACC,GAAG,CAACC,gBAAgB,EAClC,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,gCAAgC,CAAC,CACtF;AACD,IAAA,IAAI,CAACC,YAAY,CAAC,KAAK,CAAC,CAACC,IAAI,CAAC,MAAMC,IAAI,CAACC,SAAS,CAACT,GAAG,CAAC,CAAC;IACxD,MAAMU,QAAQ,GAAG,IAAI,CAACJ,YAAY,CAAC,KAAK,CAAC,CAACK,UAAU,EAAE;AACtD;IACA,MAAMb,IAAI,EAAE;AACZ;AACA,IAAA,MAAMlB,OAAO,GAAGD,yBAAyB,CACvCoB,GAAG,CAACa,GAAG,CAACC,UAAU,EAAE,EACpBd,GAAG,CAAClB,IAAI,EACR,IAAI,CAACqB,GAAG,CAACC,IAAI,CAACC,GAAG,CAACC,gBAAgB,EAClC,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAChD;AACD,IAAA,MAAMO,GAAG,GAAG;AACVE,MAAAA,GAAG,EAAEf,GAAG,CAACC,GAAG,CAACc,GAAG;AAChBC,MAAAA,UAAU,EAAEhB,GAAG,CAACa,GAAG,CAACG,UAAU;AAC9BnC,MAAAA;KACD;IACD8B,QAAQ,CAACM,IAAI,CAAC;AAAEC,MAAAA,KAAK,EAAE,MAAM;AAAEC,MAAAA,OAAO,EAAEV,IAAI,CAACC,SAAS,CAACG,GAAG;AAAC,KAAE,CAAC;AAChE,EAAA;;AA5BWlB,uBAAuB,GAAAyB,UAAA,CAAA,CADnCC,gBAAgB,EAAmC,EAAAC,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACvC,EAAA5B,uBAAuB,CA6BnC;;ACnBM,IAAM6B,YAAY,GAAlB,MAAMA,YACX,SAAQC,iBAAiB,CAAA;EAGzBC,GAAGA,CAACC,OAA6B,EAAE5B,IAAc,EAAE6B,QAAa,EAAEC,IAAY,EAAA;IAC5E,MAAMC,OAAO,GAAG,IAAI,CAACC,WAAW,CAACJ,OAAO,EAAEC,QAAQ,CAAC;IACnD,MAAMT,OAAO,GAAG,CAAA,EAAGS,QAAQ,CAACI,kBAAkB,CAAC,CAAA,CAAA,EAAIH,IAAI,CAAA,KAAA,CAAO;AAC9D,IAAA,MAAMI,MAAM,GAAG,IAAI,CAAC9B,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACC,KAAK,CAACP,OAAO,CAACQ,SAAS,EAAER,OAAO,CAACS,UAAU,CAAC;AAChF;AACA,IAAA,MAAMzB,QAAQ,GAAGsB,MAAM,CAACrB,UAAU,EAAE;AACpC;IACA,IAAI;AACF,MAAA,MAAMC,GAAG,GAAGd,IAAI,EAAE;AAClB,MAAA,IAAI,CAACsC,UAAU,CAAC1B,QAAQ,EAAEmB,OAAO,EAAEjB,GAAG,EAAEc,OAAO,EAAER,OAAO,CAAC;AACzD,MAAA,OAAON,GAAG;IACZ,CAAC,CAAC,OAAOyB,GAAQ,EAAE;AACjB,MAAA,IAAI,CAACC,SAAS,CAAC5B,QAAQ,EAAEmB,OAAO,EAAEQ,GAAG,EAAEX,OAAO,EAAER,OAAO,CAAC;AACxD,MAAA,MAAMmB,GAAG;AACX,IAAA;AACF,EAAA;EAEAE,GAAGA,CACDb,OAA6B,EAC7Bc,KAAU,EACV1C,IAAc,EACd6B,QAAa,EACbC,IAAY,EAAA;IAEZ,MAAMC,OAAO,GAAG,IAAI,CAACC,WAAW,CAACJ,OAAO,EAAEC,QAAQ,CAAC;IACnD,MAAMT,OAAO,GAAG,CAAA,EAAGS,QAAQ,CAACI,kBAAkB,CAAC,CAAA,CAAA,EAAIH,IAAI,CAAA,KAAA,CAAO;AAC9D,IAAA,MAAMI,MAAM,GAAG,IAAI,CAAC9B,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACC,KAAK,CAACP,OAAO,CAACQ,SAAS,EAAER,OAAO,CAACS,UAAU,CAAC;AAChF;AACA,IAAA,MAAMzB,QAAQ,GAAGsB,MAAM,CAACrB,UAAU,EAAE;AACpC;IACA,IAAI;AACF,MAAA,MAAMC,GAAG,GAAGd,IAAI,EAAE;AAClB,MAAA,IAAI,CAAC2C,SAAS,CAAC/B,QAAQ,EAAEmB,OAAO,EAAEW,KAAK,EAAEd,OAAO,EAAER,OAAO,CAAC;AAC1D,MAAA,OAAON,GAAG;IACZ,CAAC,CAAC,OAAOyB,GAAQ,EAAE;AACjB,MAAA,IAAI,CAACC,SAAS,CAAC5B,QAAQ,EAAEmB,OAAO,EAAEQ,GAAG,EAAEX,OAAO,EAAER,OAAO,CAAC;AACxD,MAAA,MAAMmB,GAAG;AACX,IAAA;AACF,EAAA;EAEAzC,OAAOA,CACL8B,OAA6B,EAC7BgB,KAAS,EACT5C,IAAqB,EACrB6B,QAAa,EACbC,IAAY,EAAA;IAEZ,MAAMC,OAAO,GAAG,IAAI,CAACC,WAAW,CAACJ,OAAO,EAAEC,QAAQ,CAAC;IACnD,MAAMT,OAAO,GAAG,CAAA,EAAGS,QAAQ,CAACI,kBAAkB,CAAC,CAAA,CAAA,EAAIH,IAAI,CAAA,CAAE;AACzD,IAAA,MAAMI,MAAM,GAAG,IAAI,CAAC9B,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACC,KAAK,CAACP,OAAO,CAACQ,SAAS,EAAER,OAAO,CAACS,UAAU,CAAC;AAChF;IACAT,OAAO,CAACiB,IAAI,KAAK,KAAK,IACpBX,MAAM,CAACY,GAAG,CACRlB,OAAO,CAACT,KAAK,EACb,MAAM,CAAA,EAAGC,OAAO,CAAA,OAAA,EAAUV,IAAI,CAACC,SAAS,CAACiC,KAAK,CAAC,CAAA,CAAE,EACjDb,OAAO,GAAG;AAAEA,MAAAA;KAAS,GAAGgB,SAAS,CAClC;AACH,IAAA,MAAMnC,QAAQ,GAAGsB,MAAM,CAACrB,UAAU,EAAE;AACpC;IACA,IAAI;AACF,MAAA,MAAMC,GAAG,GAAGd,IAAI,EAAE;MAClB,IAAIc,GAAG,EAAEkC,IAAI,EAAE;AACb,QAAA,OAAOlC,GAAG,CACPkC,IAAI,CAAElC,GAAQ,IAAI;AACjBc,UAAAA,OAAO,CAACqB,MAAM,KAAK,KAAK,IAAI,IAAI,CAACX,UAAU,CAAC1B,QAAQ,EAAEmB,OAAO,EAAEjB,GAAG,EAAEc,OAAO,EAAER,OAAO,CAAC;AACrF,UAAA,OAAON,GAAG;AACZ,QAAA,CAAC,CAAC,CACDoC,KAAK,CAAEX,GAAU,IAAI;AACpB,UAAA,IAAI,CAACC,SAAS,CAAC5B,QAAQ,EAAEmB,OAAO,EAAEQ,GAAG,EAAEX,OAAO,EAAER,OAAO,CAAC;AACxD,UAAA,MAAMmB,GAAG;AACX,QAAA,CAAC,CAAC;AACN,MAAA;AACAX,MAAAA,OAAO,CAACqB,MAAM,KAAK,KAAK,IAAI,IAAI,CAACX,UAAU,CAAC1B,QAAQ,EAAEmB,OAAO,EAAEjB,GAAG,EAAEc,OAAO,EAAER,OAAO,CAAC;AACrF,MAAA,OAAON,GAAG;IACZ,CAAC,CAAC,OAAOyB,GAAQ,EAAE;AACjB,MAAA,IAAI,CAACC,SAAS,CAAC5B,QAAQ,EAAEmB,OAAO,EAAEQ,GAAG,EAAEX,OAAO,EAAER,OAAO,CAAC;AACxD,MAAA,MAAMmB,GAAG;AACX,IAAA;AACF,EAAA;AAEAP,EAAAA,WAAWA,CAACJ,OAA6B,EAAEC,QAAa,EAAA;AACtD,IAAA,OAAOsB,mBAAmB,CAACvB,OAAO,CAACG,OAAO,EAAE;AAC1CqB,MAAAA,IAAI,EAAE;QAAE,GAAGvB;AAAQ;AACpB,KAAA,CAAC;AACJ,EAAA;EAEAc,SAASA,CACP/B,QAA0B,EAC1BmB,OAAY,EACZW,KAAU,EACVd,OAA6B,EAC7BR,OAAe,EAAA;AAEf,IAAA,MAAMiC,IAAI,GAAQ;MAChBlC,KAAK,EAAES,OAAO,CAACT,KAAK;MACpBC,OAAO,EAAEA,MAAK;QACZ,MAAMkC,SAAS,GAAG,CAAA,QAAA,EAAW5C,IAAI,CAACC,SAAS,CAAC+B,KAAK,CAAC,CAAA,CAAE;AACpD,QAAA,OAAO,CAAA,EAAGtB,OAAO,CAAA,EAAGkC,SAAS,CAAA,CAAE;AACjC,MAAA;KACD;AACD,IAAA,IAAIvB,OAAO,EAAEsB,IAAI,CAACtB,OAAO,GAAGA,OAAO;AACnCnB,IAAAA,QAAQ,CAACM,IAAI,CAACmC,IAAI,CAAC;AACrB,EAAA;EAEAf,UAAUA,CACR1B,QAA0B,EAC1BmB,OAAY,EACZjB,GAAQ,EACRc,OAA6B,EAC7BR,OAAe,EAAA;AAEf,IAAA,MAAMiC,IAAI,GAAQ;MAChBlC,KAAK,EAAES,OAAO,CAACT,KAAK;MACpBC,OAAO,EAAEA,MAAK;AACZ,QAAA,MAAMmC,UAAU,GAAGzC,GAAG,KAAKiC,SAAS,GAAG,CAAA,SAAA,EAAYrC,IAAI,CAACC,SAAS,CAACG,GAAG,CAAC,CAAA,CAAE,GAAG,EAAE;AAC7E,QAAA,OAAO,CAAA,EAAGM,OAAO,CAAA,EAAGmC,UAAU,CAAA,CAAE;AAClC,MAAA;KACD;AACD,IAAA,IAAIxB,OAAO,EAAEsB,IAAI,CAACtB,OAAO,GAAGA,OAAO;AACnCnB,IAAAA,QAAQ,CAACM,IAAI,CAACmC,IAAI,CAAC;AACrB,EAAA;EAEAb,SAASA,CACP5B,QAA0B,EAC1BmB,OAAY,EACZQ,GAAU,EACVxC,QAA8B,EAC9BqB,OAAe,EAAA;AAEf,IAAA,MAAMiC,IAAI,GAAQ;AAChBlC,MAAAA,KAAK,EAAE,OAAO;MACdC,OAAO,EAAEA,MAAK;AACZ,QAAA,MAAMoC,SAAS,GAAG,CAAA,QAAA,EAAWjB,GAAG,CAACnB,OAAO,CAAA,CAAE;AAC1C,QAAA,OAAO,CAAA,EAAGA,OAAO,CAAA,EAAGoC,SAAS,CAAA,CAAE;AACjC,MAAA;KACD;AACD,IAAA,IAAIzB,OAAO,EAAEsB,IAAI,CAACtB,OAAO,GAAGA,OAAO;AACnCnB,IAAAA,QAAQ,CAACM,IAAI,CAACmC,IAAI,CAAC;AACrB,EAAA;;AA9IW5B,YAAY,GAAAJ,UAAA,CAAA,CAHxBoC,SAAS,CAAuB;AAC/BtC,EAAAA,KAAK,EAAE;CACR,CAAC,EAAAI,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACW,EAAAC,YAAY,CA+IxB;;ACnJM,IAAMiC,UAAU,GAAhB,MAAMA,UAAW,SAAQ7D,QAAQ,CAAA;EAC/B8D,cAAcA,CAACtB,UAAsC,EAAA;IAC1D,OAAO,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACyB,cAAc,CAACtB,UAAU,CAAC;AACxD,EAAA;AAEOuB,EAAAA,cAAcA,CAACzC,KAA4B,EAAEkB,UAAsC,EAAA;AACxF,IAAA,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAAC0B,cAAc,CAACzC,KAAK,EAAEkB,UAAU,CAAC;IACtD,IAAI,CAACwB,KAAK,CAACC,SAAS,CAACF,cAAc,CAACG,IAAI,CAAC;MAAE5C,KAAK;AAAEkB,MAAAA;AAAU,KAAE,CAAC;AACjE,EAAA;EAEO2B,cAAcA,CAAC3B,UAAsC,EAAA;IAC1D,OAAO,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAAC8B,cAAc,CAAC3B,UAAU,CAAC;AACxD,EAAA;AAEO4B,EAAAA,cAAcA,CAAC9B,KAAwB,EAAEE,UAAsC,EAAA;AACpF,IAAA,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAAC+B,cAAc,CAAC9B,KAAK,EAAEE,UAAU,CAAC;IACtD,IAAI,CAACwB,KAAK,CAACC,SAAS,CAACG,cAAc,CAACF,IAAI,CAAC;MAAE5B,KAAK;AAAEE,MAAAA;AAAU,KAAE,CAAC;AACjE,EAAA;EAEA,IAAW6B,OAAOA,GAAA;IAChB,OAAO,IAAI,CAAC9D,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACP,GAAG,EAAE;AACnC,EAAA;EAEOA,GAAGA,CAACU,UAAsC,EAAA;IAC/C,OAAO,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACP,GAAG,CAACU,UAAU,CAAC;AAC7C,EAAA;AAEO8B,EAAAA,QAAQA,CACb/B,SAAmC,EACnCC,UAAsC,EAAA;AAEtC,IAAA,OAAO,IAAI,CAACjC,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACP,GAAG,CAACU,UAAU,CAAC,CAACF,KAAK,CAAC;AAAE3C,MAAAA,IAAI,EAAE4C;AAAS,KAAE,CAAC;AACxE,EAAA;EAEOgC,cAAcA,CAACC,IAAuB,EAAA;AAC3C,IAAA,OAAOC,OAAO,CAACC,MAAM,CAACC,OAAO,CAC3BC,kBAAkB,CAACJ,IAAI,CAAC,EACxBK,eAAe,EAAE,EACjBJ,OAAO,CAACC,MAAM,CAACI,KAAK,EAAE,EACtBL,OAAO,CAACC,MAAM,CAACK,SAAS,EAAE,CAC3B;AACH,EAAA;EAEOC,iBAAiBA,CACtBC,UAAoC,EACpCC,QAAgB,EAChBC,WAAyB,EACzBC,WAA+B,EAAA;AAE/B,IAAA,OAAO,IAAI,CAAC7E,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAACgD,mBAAmB,CAACH,QAAQ,EAAED,UAAU,EAAE;MACpE3D,KAAK,EAAE6D,WAAW,IAAI,OAAO;MAC7BT,MAAM,EAAED,OAAO,CAACC,MAAM,CAACC,OAAO,CAC5BW,kBAAkB,CAAC;AACjBhD,QAAAA,KAAK,EAAE8C,WAAW,IAAIH,UAAU,CAAC3C,KAAK;AACtChB,QAAAA,KAAK,EAAE6D,WAAW,IAAIF,UAAU,CAAC3D,KAAK;QACtCiE,MAAM,EAAE,CAAC,CAACJ;OACX,CAAC,EACFV,OAAO,CAACC,MAAM,CAACc,IAAI,EAAE;AAExB,KAAA,CAAC;AACJ,EAAA;EAEOC,oBAAoBA,CAACR,UAAoC,EAAA;AAC9D,IAAA,OAAO,IAAIR,OAAO,CAACiB,UAAU,CAACC,OAAO,CAAC;AACpCrE,MAAAA,KAAK,EAAE,OAAO;AACdoD,MAAAA,MAAM,EAAED,OAAO,CAACC,MAAM,CAACC,OAAO,CAC5BiB,iBAAiB,EAAE,EACnBN,kBAAkB,CAAC;QAAEhD,KAAK,EAAE2C,UAAU,CAAC3C,KAAK;QAAEhB,KAAK,EAAE2D,UAAU,CAAC3D,KAAK;AAAEuE,QAAAA,KAAK,EAAE;AAAI,OAAE,CAAC,EACrFpB,OAAO,CAACC,MAAM,CAACoB,QAAQ,EAAE,EACzBC,mBAAmB,CAACd,UAAU,CAAC,CAChC;AACDe,MAAAA,YAAY,EAAE;AACf,KAAA,CAAC;AACJ,EAAA;;AAzEWnC,UAAU,GAAArC,UAAA,CAAA,CADtByE,IAAI,EAAE,EAAAvE,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACM,EAAAkC,UAAU,CA0EtB;;ACpFM,IAAMqC,uBAAuB,GAA7B,MAAMA,uBACX,SAAQC,iBAAqD,CAAA;AAG7D,EAAA,MAAMlG,OAAOA,CAACmG,IAAwC,EAAEC,SAAmB,EAAA;IACzE,IAAI,CAACA,SAAS,EAAE;AACd,MAAA,IAAI,CAAC9F,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAAC+B,cAAc,CAACgC,IAAI,CAAC9D,KAAK,EAAE8D,IAAI,CAAC5D,UAAU,CAAC;AAClE,IAAA;AACF,EAAA;;AARW0D,uBAAuB,GAAA1E,UAAA,CAAA,CADnC8E,SAAS,EAAE,EAAA5E,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACC,EAAAuE,uBAAuB,CASnC;;ACTM,IAAMK,uBAAuB,GAA7B,MAAMA,uBACX,SAAQJ,iBAAqD,CAAA;AAG7D,EAAA,MAAMlG,OAAOA,CAACmG,IAAwC,EAAEC,SAAmB,EAAA;IACzE,IAAI,CAACA,SAAS,EAAE;AACd,MAAA,IAAI,CAAC9F,GAAG,CAACC,IAAI,CAAC6B,MAAM,CAAC0B,cAAc,CAACqC,IAAI,CAAC9E,KAAK,EAAE8E,IAAI,CAAC5D,UAAU,CAAC;AAClE,IAAA;AACF,EAAA;;AARW+D,uBAAuB,GAAA/E,UAAA,CAAA,CADnC8E,SAAS,CAAC;AAAEE,EAAAA,QAAQ,EAAE;CAAO,CAAC,EAAA9E,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CAClB,EAAA4E,uBAAuB,CASnC;;AChBK,MAAOE,IAAK,SAAQC,UAAU,CAAA;EAClC,MAAMC,aAAaA,GAAA;AACjB;IACA,MAAMC,cAAc,GAAG,MAAMC,oBAAoB,CAAe,IAAI,CAACtG,GAAG,EAAEuG,aAAa,CAAC;IACxF,IAAI,CAACvG,GAAG,CAACwG,MAAM,CAAC1E,MAAM,GAAG2E,UAAU,CAAC,EAAE,EAAEJ,cAAc,EAAE,IAAI,CAACrG,GAAG,CAACwG,MAAM,CAAC1E,MAAM,CAAC;AACjF,EAAA;EAEA,MAAM4E,YAAYA,GAAA,CAAI;AACtB,EAAA,MAAMC,YAAYA,CAACC,OAAY,GAAG;AACnC;AAEM,eAAeL,aAAaA,CAACM,IAAqB,EAAA;AACvD,EAAA,OAAO,EAAE;AACX;;ACoHO,IAAMC,kBAAkB,GAAxB,MAAMA,kBAAmB,SAAQC,aAAa,CAAA;AAAxCD,kBAAkB,GAAA7F,UAAA,CAAA,CAD9B+F,KAAK,EAAE,EAAA7F,QAAA,CAAA;EAAAC,MAAA,EAAA;AAAA,CAAA,CAAA,CACK,EAAA0F,kBAAkB,CAAyB;AAuBxD;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/lib/redactHttpLog.ts","../src/lib/redactIsolatedReadyHeader.ts","../src/bean/middlewareSystem.httpLog.ts","../src/bean/aopMethod.log.ts","../src/bean/bean.logger.ts","../src/bean/broadcast.setFilterChild.ts","../src/bean/broadcast.setFilterLevel.ts","../src/main.ts","../src/.metadata/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["safeHeaders","Set","redactHttpLogHeaders","headers","Object","fromEntries","entries","map","key","value","has","toLowerCase","redactHttpLogUrl","undefined","boundary","search","path","slice","test","startsWith","url","URL","protocol","host","pathname","redactIsolatedReadyHeader","runId","header","includes","redacted","names","Array","isArray","name","keys","MiddlewareSystemHttpLog","BeanBase","execute","_options","next","getRequestBoundary","ctx","serialized","StdSerializers","req","method","app","meta","env","VONA_TEST_RUN_ID","remoteAddress","remotePort","$loggerChild","http","JSON","stringify","profiler","startTimer","res","getHeaders","statusCode","done","level","message","__decorate","MiddlewareSystem","__z_BeanInfo","module","AopMethodLog","BeanAopMethodBase","get","options","receiver","prop","context","_getContext","SymbolBeanFullName","logger","child","childName","clientName","_logResult","err","_logError","set","_logValue","_args","args","log","then","result","catch","evaluateExpressions","self","info","textValue","textResult","textError","AopMethod","BeanLogger","getFilterLevel","setFilterLevel","scope","broadcast","emit","getFilterChild","setFilterChild","default","getSuppressedDiagnosticLogger","getChild","makeFormatBase","opts","Winston","format","combine","formatLoggerBoundary","formatLoggerErrors","formatLoggerCtx","splat","timestamp","makeTransportFile","clientInfo","fileName","levelStrict","childStrict","createTransportFile","formatLoggerFilter","strict","json","makeTransportConsole","transports","Console","formatLoggerDummy","silly","colorize","formatLoggerConsole","forceConsole","Bean","BroadcastSetFilterChild","BeanBroadcastBase","data","isEmitter","Broadcast","BroadcastSetFilterLevel","instance","Main","BeanSimple","moduleLoading","_configDefault","combineConfigDefault","configDefault","config","deepExtend","moduleLoaded","configLoaded","_config","_app","ScopeModuleALogger","BeanScopeBase","Scope"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactHttpLog.d.ts","sourceRoot":"","sources":["../../src/lib/redactHttpLog.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ9F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAiBnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactHttpLog.test.d.ts","sourceRoot":"","sources":["../../src/lib/redactHttpLog.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
import type winston from 'winston';
|
|
9
9
|
|
|
10
10
|
import { evaluateExpressions } from '@cabloy/utils';
|
|
11
|
-
import { BeanAopMethodBase, SymbolBeanFullName } from 'vona';
|
|
11
|
+
import { BeanAopMethodBase, getRequestBoundary, SymbolBeanFullName } from 'vona';
|
|
12
12
|
import { AopMethod } from 'vona-module-a-aspect';
|
|
13
13
|
|
|
14
14
|
export interface IAopMethodOptionsLog extends IDecoratorAopMethodOptions {
|
|
@@ -28,6 +28,7 @@ export class AopMethodLog
|
|
|
28
28
|
implements IAopMethodGet, IAopMethodSet, IAopMethodExecute
|
|
29
29
|
{
|
|
30
30
|
get(options: IAopMethodOptionsLog, next: NextSync, receiver: any, prop: string): any {
|
|
31
|
+
if (getRequestBoundary()) return next();
|
|
31
32
|
const context = this._getContext(options, receiver);
|
|
32
33
|
const message = `${receiver[SymbolBeanFullName]}#${prop}(get)`;
|
|
33
34
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
|
@@ -51,6 +52,7 @@ export class AopMethodLog
|
|
|
51
52
|
receiver: any,
|
|
52
53
|
prop: string,
|
|
53
54
|
): boolean {
|
|
55
|
+
if (getRequestBoundary()) return next();
|
|
54
56
|
const context = this._getContext(options, receiver);
|
|
55
57
|
const message = `${receiver[SymbolBeanFullName]}#${prop}(set)`;
|
|
56
58
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
|
@@ -74,6 +76,7 @@ export class AopMethodLog
|
|
|
74
76
|
receiver: any,
|
|
75
77
|
prop: string,
|
|
76
78
|
): Promise<any> | any {
|
|
79
|
+
if (getRequestBoundary()) return next();
|
|
77
80
|
const context = this._getContext(options, receiver);
|
|
78
81
|
const message = `${receiver[SymbolBeanFullName]}#${prop}`;
|
|
79
82
|
const logger = this.app.meta.logger.child(options.childName, options.clientName);
|
package/src/bean/bean.logger.ts
CHANGED
|
@@ -9,11 +9,14 @@ import type * as Transport from 'winston-transport';
|
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
BeanBase,
|
|
12
|
+
formatLoggerBoundary,
|
|
12
13
|
formatLoggerConsole,
|
|
13
14
|
formatLoggerCtx,
|
|
14
15
|
formatLoggerDummy,
|
|
15
16
|
formatLoggerErrors,
|
|
16
17
|
formatLoggerFilter,
|
|
18
|
+
getRequestBoundary,
|
|
19
|
+
getSuppressedDiagnosticLogger,
|
|
17
20
|
} from 'vona';
|
|
18
21
|
import { Bean } from 'vona-module-a-bean';
|
|
19
22
|
import * as Winston from 'winston';
|
|
@@ -39,10 +42,12 @@ export class BeanLogger extends BeanBase {
|
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
public get default(): Winston.Logger {
|
|
45
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
42
46
|
return this.app.meta.logger.get();
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
public get(clientName?: keyof ILoggerClientRecord): Winston.Logger {
|
|
50
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
46
51
|
return this.app.meta.logger.get(clientName);
|
|
47
52
|
}
|
|
48
53
|
|
|
@@ -50,11 +55,13 @@ export class BeanLogger extends BeanBase {
|
|
|
50
55
|
childName: keyof ILoggerChildRecord,
|
|
51
56
|
clientName?: keyof ILoggerClientRecord,
|
|
52
57
|
): Winston.Logger {
|
|
58
|
+
if (getRequestBoundary()) return getSuppressedDiagnosticLogger();
|
|
53
59
|
return this.app.meta.logger.get(clientName).child({ name: childName });
|
|
54
60
|
}
|
|
55
61
|
|
|
56
62
|
public makeFormatBase(opts: ILoggerFormatOpts) {
|
|
57
63
|
return Winston.format.combine(
|
|
64
|
+
formatLoggerBoundary(),
|
|
58
65
|
formatLoggerErrors(opts),
|
|
59
66
|
formatLoggerCtx(),
|
|
60
67
|
Winston.format.splat(),
|
|
@@ -71,6 +78,7 @@ export class BeanLogger extends BeanBase {
|
|
|
71
78
|
return this.app.meta.logger.createTransportFile(fileName, clientInfo, {
|
|
72
79
|
level: levelStrict ?? 'silly',
|
|
73
80
|
format: Winston.format.combine(
|
|
81
|
+
formatLoggerBoundary(),
|
|
74
82
|
formatLoggerFilter({
|
|
75
83
|
child: childStrict ?? clientInfo.child,
|
|
76
84
|
level: levelStrict ?? clientInfo.level,
|
|
@@ -85,6 +93,7 @@ export class BeanLogger extends BeanBase {
|
|
|
85
93
|
return new Winston.transports.Console({
|
|
86
94
|
level: 'silly',
|
|
87
95
|
format: Winston.format.combine(
|
|
96
|
+
formatLoggerBoundary(),
|
|
88
97
|
formatLoggerDummy(),
|
|
89
98
|
formatLoggerFilter({ child: clientInfo.child, level: clientInfo.level, silly: true }),
|
|
90
99
|
Winston.format.colorize(),
|
|
@@ -5,9 +5,10 @@ import type {
|
|
|
5
5
|
} from 'vona-module-a-aspect';
|
|
6
6
|
|
|
7
7
|
import StdSerializers from 'pino-std-serializers';
|
|
8
|
-
import { BeanBase } from 'vona';
|
|
8
|
+
import { BeanBase, getRequestBoundary } from 'vona';
|
|
9
9
|
import { MiddlewareSystem } from 'vona-module-a-aspect';
|
|
10
10
|
|
|
11
|
+
import { redactHttpLogHeaders, redactHttpLogUrl } from '../lib/redactHttpLog.ts';
|
|
11
12
|
import { redactIsolatedReadyHeader } from '../lib/redactIsolatedReadyHeader.ts';
|
|
12
13
|
|
|
13
14
|
export interface IMiddlewareSystemOptionsHttpLog extends IDecoratorMiddlewareSystemOptions {}
|
|
@@ -15,28 +16,40 @@ export interface IMiddlewareSystemOptionsHttpLog extends IDecoratorMiddlewareSys
|
|
|
15
16
|
@MiddlewareSystem<IMiddlewareSystemOptionsHttpLog>()
|
|
16
17
|
export class MiddlewareSystemHttpLog extends BeanBase implements IMiddlewareSystemExecute {
|
|
17
18
|
async execute(_options: IMiddlewareSystemOptionsHttpLog, next: Next) {
|
|
19
|
+
if (getRequestBoundary()) return next();
|
|
18
20
|
const ctx = this.ctx;
|
|
19
21
|
// start
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
const serialized = StdSerializers.req(ctx.req);
|
|
23
|
+
// Do not retain serializer query/params/raw extensions or request bodies in logs.
|
|
24
|
+
const req = {
|
|
25
|
+
method: serialized.method,
|
|
26
|
+
url: redactHttpLogUrl(serialized.url),
|
|
27
|
+
headers: redactHttpLogHeaders(
|
|
28
|
+
redactIsolatedReadyHeader(
|
|
29
|
+
serialized.headers,
|
|
30
|
+
ctx.path,
|
|
31
|
+
this.app.meta.env.VONA_TEST_RUN_ID,
|
|
32
|
+
['x-vona-test-challenge', 'x-vona-test-stop-nonce', 'x-vona-test-stop-authorization'],
|
|
33
|
+
),
|
|
34
|
+
),
|
|
35
|
+
remoteAddress: serialized.remoteAddress,
|
|
36
|
+
remotePort: serialized.remotePort,
|
|
37
|
+
};
|
|
27
38
|
this.$loggerChild('req').http(() => JSON.stringify(req));
|
|
28
39
|
const profiler = this.$loggerChild('res').startTimer();
|
|
29
40
|
// next
|
|
30
41
|
await next();
|
|
31
42
|
// end
|
|
32
|
-
const headers =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
const headers = redactHttpLogHeaders(
|
|
44
|
+
redactIsolatedReadyHeader(
|
|
45
|
+
ctx.res.getHeaders(),
|
|
46
|
+
ctx.path,
|
|
47
|
+
this.app.meta.env.VONA_TEST_RUN_ID,
|
|
48
|
+
['x-vona-test-proof', 'x-vona-test-stop-proof'],
|
|
49
|
+
),
|
|
37
50
|
);
|
|
38
51
|
const res = {
|
|
39
|
-
url: ctx.req.url,
|
|
52
|
+
url: redactHttpLogUrl(ctx.req.url),
|
|
40
53
|
statusCode: ctx.res.statusCode,
|
|
41
54
|
headers,
|
|
42
55
|
};
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { registerHooks } from 'node:module';
|
|
4
|
+
import { test } from 'node:test';
|
|
5
|
+
import ts from 'typescript';
|
|
6
|
+
|
|
7
|
+
import { redactHttpLogHeaders, redactHttpLogUrl } from './redactHttpLog.ts';
|
|
8
|
+
|
|
9
|
+
const previousApp = Object.getOwnPropertyDescriptor(globalThis, '__app__');
|
|
10
|
+
const vonaUrl = new URL('../../../../../../../', import.meta.url);
|
|
11
|
+
const middlewareUrl = new URL(
|
|
12
|
+
'../bean/middlewareSystem.httpLog.ts?fixture=httpLogging',
|
|
13
|
+
import.meta.url,
|
|
14
|
+
).href;
|
|
15
|
+
const formatterUrl = new URL('packages-vona/vona-core/src/lib/core/logger/utils.ts', vonaUrl).href;
|
|
16
|
+
const checkUrl = new URL('packages-utils/utils/src/check.ts', vonaUrl).href;
|
|
17
|
+
const fixture = (source: string) => `data:text/javascript,${encodeURIComponent(source)}`;
|
|
18
|
+
const hooks = registerHooks({
|
|
19
|
+
resolve(specifier, context, nextResolve) {
|
|
20
|
+
if (context.parentURL === middlewareUrl) {
|
|
21
|
+
if (specifier === 'vona') {
|
|
22
|
+
return {
|
|
23
|
+
url: fixture('export class BeanBase {} export function getRequestBoundary() {}'),
|
|
24
|
+
shortCircuit: true,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (specifier === 'vona-module-a-aspect') {
|
|
28
|
+
return {
|
|
29
|
+
url: fixture('export function MiddlewareSystem() { return () => {}; }'),
|
|
30
|
+
shortCircuit: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (context.parentURL === formatterUrl) {
|
|
35
|
+
if (specifier === '@cabloy/utils') return { url: checkUrl, shortCircuit: true };
|
|
36
|
+
if (specifier === '../../framework/useApp.ts') {
|
|
37
|
+
return {
|
|
38
|
+
url: fixture(
|
|
39
|
+
'export function useApp() { throw new Error("unexpected application access"); }',
|
|
40
|
+
),
|
|
41
|
+
shortCircuit: true,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return nextResolve(specifier, context);
|
|
46
|
+
},
|
|
47
|
+
load(url, context, nextLoad) {
|
|
48
|
+
if (url === middlewareUrl) {
|
|
49
|
+
return {
|
|
50
|
+
format: 'module',
|
|
51
|
+
source: ts.transpileModule(readFileSync(new URL(url), 'utf8'), {
|
|
52
|
+
compilerOptions: {
|
|
53
|
+
experimentalDecorators: true,
|
|
54
|
+
target: ts.ScriptTarget.ESNext,
|
|
55
|
+
module: ts.ModuleKind.ESNext,
|
|
56
|
+
},
|
|
57
|
+
}).outputText,
|
|
58
|
+
shortCircuit: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return nextLoad(url, context);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
const { MiddlewareSystemHttpLog, formatLoggerFilter } = await (async () => {
|
|
65
|
+
try {
|
|
66
|
+
return { ...(await import(middlewareUrl)), ...(await import(formatterUrl)) };
|
|
67
|
+
} finally {
|
|
68
|
+
hooks.deregister();
|
|
69
|
+
}
|
|
70
|
+
})();
|
|
71
|
+
|
|
72
|
+
const secret = 'synthetic-http-secret-sentinel';
|
|
73
|
+
|
|
74
|
+
test('header copies hide standard, mixed-case and custom credentials', () => {
|
|
75
|
+
const headers = Object.freeze({
|
|
76
|
+
'Authorization': secret,
|
|
77
|
+
'Proxy-Authorization': secret,
|
|
78
|
+
'Cookie': secret,
|
|
79
|
+
'Set-Cookie': Object.freeze([secret, secret]),
|
|
80
|
+
'X-Custom-Credential': secret,
|
|
81
|
+
'Location': `/callback?code=${secret}`,
|
|
82
|
+
'Referer': `/callback?state=${secret}`,
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
'content-length': '42',
|
|
85
|
+
'accept': 'application/json',
|
|
86
|
+
});
|
|
87
|
+
const logged = redactHttpLogHeaders(headers);
|
|
88
|
+
assert.equal(JSON.stringify(logged).includes(secret), false);
|
|
89
|
+
assert.equal(logged['Content-Type'], 'application/json');
|
|
90
|
+
assert.equal(logged['content-length'], '42');
|
|
91
|
+
assert.equal(logged.accept, 'application/json');
|
|
92
|
+
assert.equal(headers.Authorization, secret);
|
|
93
|
+
assert.deepEqual(headers['Set-Cookie'], [secret, secret]);
|
|
94
|
+
assert.notEqual(logged, headers);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test('URL projections omit all query/fragment data and absolute-URL userinfo', () => {
|
|
98
|
+
for (const key of [
|
|
99
|
+
'access_token',
|
|
100
|
+
'refresh_token',
|
|
101
|
+
'code',
|
|
102
|
+
'state',
|
|
103
|
+
'x-vona-passport-code',
|
|
104
|
+
'custom',
|
|
105
|
+
]) {
|
|
106
|
+
const url = `/callback?${key}=${secret}&${key}=${secret}#${secret}`;
|
|
107
|
+
assert.equal(redactHttpLogUrl(url), '/callback?[REDACTED]');
|
|
108
|
+
}
|
|
109
|
+
assert.equal(redactHttpLogUrl(`/callback#${secret}`), '/callback?[REDACTED]');
|
|
110
|
+
assert.equal(
|
|
111
|
+
redactHttpLogUrl(`https://${secret}:${secret}@example.invalid/callback?x=${secret}`),
|
|
112
|
+
'https://example.invalid/callback?[REDACTED]',
|
|
113
|
+
);
|
|
114
|
+
assert.equal(
|
|
115
|
+
redactHttpLogUrl(`//${secret}@example.invalid/callback`),
|
|
116
|
+
'//example.invalid/callback',
|
|
117
|
+
);
|
|
118
|
+
assert.equal(redactHttpLogUrl('https://['), '[REDACTED]');
|
|
119
|
+
assert.equal(redactHttpLogUrl(`data:${secret}`), '[REDACTED]');
|
|
120
|
+
assert.equal(redactHttpLogUrl({ path: secret }), undefined);
|
|
121
|
+
assert.equal(redactHttpLogUrl('/ordinary/path'), '/ordinary/path');
|
|
122
|
+
assert.equal(redactHttpLogUrl('*'), '*');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
for (const failure of [false, true]) {
|
|
126
|
+
test(`actual middleware strict-http projection, downstream ${failure ? 'error' : 'success'}`, async () => {
|
|
127
|
+
const output: string[] = [];
|
|
128
|
+
const filter = formatLoggerFilter({ level: 'http', child: undefined, strict: true });
|
|
129
|
+
const capture = (message: any, extra = {}) => {
|
|
130
|
+
const info = filter.transform({ level: 'http', message, ...extra }, filter.options);
|
|
131
|
+
assert.ok(info);
|
|
132
|
+
output.push(JSON.stringify(info));
|
|
133
|
+
};
|
|
134
|
+
const headers = Object.freeze({
|
|
135
|
+
authorization: secret,
|
|
136
|
+
cookie: secret,
|
|
137
|
+
accept: 'application/json',
|
|
138
|
+
});
|
|
139
|
+
const responseHeaders = Object.freeze({
|
|
140
|
+
'set-cookie': [secret],
|
|
141
|
+
'content-type': 'application/json',
|
|
142
|
+
});
|
|
143
|
+
const req = Object.freeze({
|
|
144
|
+
method: 'POST',
|
|
145
|
+
url: `/callback?custom=${secret}`,
|
|
146
|
+
originalUrl: `/callback?x-vona-passport-code=${secret}`,
|
|
147
|
+
query: { custom: secret },
|
|
148
|
+
params: { token: secret },
|
|
149
|
+
body: { token: secret },
|
|
150
|
+
headers,
|
|
151
|
+
socket: { remoteAddress: '127.0.0.1', remotePort: 12345 },
|
|
152
|
+
});
|
|
153
|
+
const ctx = {
|
|
154
|
+
req,
|
|
155
|
+
path: '/callback',
|
|
156
|
+
res: { statusCode: 204, getHeaders: () => responseHeaders },
|
|
157
|
+
};
|
|
158
|
+
const fake = {
|
|
159
|
+
ctx,
|
|
160
|
+
app: { meta: { env: {} } },
|
|
161
|
+
$loggerChild: (name: string) => {
|
|
162
|
+
assert.ok(name === 'req' || name === 'res');
|
|
163
|
+
return {
|
|
164
|
+
http: (message: any) => capture(message),
|
|
165
|
+
startTimer: () => ({
|
|
166
|
+
done: (info: any) => {
|
|
167
|
+
assert.equal(info.level, 'http');
|
|
168
|
+
capture(info.message, { durationMs: 7 });
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
let calls = 0;
|
|
175
|
+
const error = new Error(secret);
|
|
176
|
+
const execution = MiddlewareSystemHttpLog.prototype.execute.call(fake as any, {}, async () => {
|
|
177
|
+
calls++;
|
|
178
|
+
assert.equal(ctx.req, req);
|
|
179
|
+
assert.equal(ctx.req.headers.authorization, secret);
|
|
180
|
+
assert.equal(ctx.req.body.token, secret);
|
|
181
|
+
if (failure) throw error;
|
|
182
|
+
});
|
|
183
|
+
if (failure) {
|
|
184
|
+
await assert.rejects(execution, value => value === error);
|
|
185
|
+
} else {
|
|
186
|
+
await execution;
|
|
187
|
+
}
|
|
188
|
+
assert.equal(calls, 1);
|
|
189
|
+
assert.equal(output.length, failure ? 1 : 2);
|
|
190
|
+
assert.equal(output.join('\n').includes(secret), false);
|
|
191
|
+
const request = JSON.parse(JSON.parse(output[0]!).message);
|
|
192
|
+
assert.equal(request.method, 'POST');
|
|
193
|
+
assert.equal(request.url, '/callback?[REDACTED]');
|
|
194
|
+
assert.equal(request.query, undefined);
|
|
195
|
+
assert.equal(request.params, undefined);
|
|
196
|
+
assert.equal(request.body, undefined);
|
|
197
|
+
assert.equal(request.raw, undefined);
|
|
198
|
+
if (!failure) {
|
|
199
|
+
const response = JSON.parse(output[1]!);
|
|
200
|
+
assert.equal(response.durationMs, 7);
|
|
201
|
+
assert.equal(JSON.parse(response.message).statusCode, 204);
|
|
202
|
+
}
|
|
203
|
+
assert.equal(req.url, `/callback?custom=${secret}`);
|
|
204
|
+
assert.deepEqual(responseHeaders['set-cookie'], [secret]);
|
|
205
|
+
assert.deepEqual(Object.getOwnPropertyDescriptor(globalThis, '__app__'), previousApp);
|
|
206
|
+
});
|
|
207
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const safeHeaders = new Set(['accept', 'content-type', 'content-length']);
|
|
2
|
+
|
|
3
|
+
export function redactHttpLogHeaders(headers: Record<string, unknown>): Record<string, unknown> {
|
|
4
|
+
// Allowlist diagnostic metadata so custom credential headers are covered too.
|
|
5
|
+
return Object.fromEntries(
|
|
6
|
+
Object.entries(headers).map(([key, value]) => [
|
|
7
|
+
key,
|
|
8
|
+
safeHeaders.has(key.toLowerCase()) ? value : '[REDACTED]',
|
|
9
|
+
]),
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function redactHttpLogUrl(value: unknown): string | undefined {
|
|
14
|
+
if (typeof value !== 'string') return undefined;
|
|
15
|
+
const boundary = value.search(/[?#]/);
|
|
16
|
+
let path = boundary < 0 ? value : value.slice(0, boundary);
|
|
17
|
+
if (/^[a-z][a-z\d+.-]*:\/\//i.test(path) || path.startsWith('//')) {
|
|
18
|
+
try {
|
|
19
|
+
const url = new URL(path, 'http://redacted.invalid');
|
|
20
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') return '[REDACTED]';
|
|
21
|
+
path = `${path.startsWith('//') ? '//' : `${url.protocol}//`}${url.host}${url.pathname}`;
|
|
22
|
+
} catch {
|
|
23
|
+
return '[REDACTED]';
|
|
24
|
+
}
|
|
25
|
+
} else if (!path.startsWith('/') && path !== '*') {
|
|
26
|
+
return '[REDACTED]';
|
|
27
|
+
}
|
|
28
|
+
// Query names can be configured by authentication clients; omit the whole query/fragment.
|
|
29
|
+
return `${path}${boundary < 0 ? '' : '?[REDACTED]'}`;
|
|
30
|
+
}
|