apcore-js 0.18.0 → 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 +112 -9
- package/dist/acl-handlers.d.ts +14 -0
- package/dist/acl-handlers.d.ts.map +1 -1
- package/dist/acl-handlers.js +37 -4
- package/dist/acl-handlers.js.map +1 -1
- package/dist/acl.d.ts +22 -1
- package/dist/acl.d.ts.map +1 -1
- package/dist/acl.js +90 -34
- package/dist/acl.js.map +1 -1
- package/dist/async-task.d.ts +70 -16
- package/dist/async-task.d.ts.map +1 -1
- package/dist/async-task.js +212 -72
- package/dist/async-task.js.map +1 -1
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +113 -11
- package/dist/bindings.js.map +1 -1
- package/dist/builtin-steps.d.ts +33 -8
- package/dist/builtin-steps.d.ts.map +1 -1
- package/dist/builtin-steps.js +119 -47
- package/dist/builtin-steps.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +163 -33
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +34 -7
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +108 -40
- package/dist/context.js.map +1 -1
- package/dist/decorator.d.ts +3 -0
- package/dist/decorator.d.ts.map +1 -1
- package/dist/decorator.js +3 -0
- package/dist/decorator.js.map +1 -1
- package/dist/errors.d.ts +88 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +231 -56
- package/dist/errors.js.map +1 -1
- package/dist/events/circuit-breaker.d.ts +45 -0
- package/dist/events/circuit-breaker.d.ts.map +1 -0
- package/dist/events/circuit-breaker.js +115 -0
- package/dist/events/circuit-breaker.js.map +1 -0
- package/dist/events/emitter.d.ts +24 -1
- package/dist/events/emitter.d.ts.map +1 -1
- package/dist/events/emitter.js +86 -12
- package/dist/events/emitter.js.map +1 -1
- package/dist/events/index.d.ts +4 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +3 -2
- package/dist/events/index.js.map +1 -1
- package/dist/events/subscribers.d.ts +33 -1
- package/dist/events/subscribers.d.ts.map +1 -1
- package/dist/events/subscribers.js +124 -1
- package/dist/events/subscribers.js.map +1 -1
- package/dist/executor.d.ts +14 -3
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +155 -48
- package/dist/executor.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/index.d.ts +47 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -18
- package/dist/index.js.map +1 -1
- package/dist/middleware/base.d.ts +25 -3
- package/dist/middleware/base.d.ts.map +1 -1
- package/dist/middleware/base.js +24 -0
- package/dist/middleware/base.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +54 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +168 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- package/dist/middleware/context-namespace.d.ts +30 -0
- package/dist/middleware/context-namespace.d.ts.map +1 -0
- package/dist/middleware/context-namespace.js +38 -0
- package/dist/middleware/context-namespace.js.map +1 -0
- package/dist/middleware/index.d.ts +8 -2
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +5 -2
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/logging.d.ts +6 -0
- package/dist/middleware/logging.d.ts.map +1 -1
- package/dist/middleware/logging.js +13 -3
- package/dist/middleware/logging.js.map +1 -1
- package/dist/middleware/manager.d.ts +11 -4
- package/dist/middleware/manager.d.ts.map +1 -1
- package/dist/middleware/manager.js +26 -9
- package/dist/middleware/manager.js.map +1 -1
- package/dist/middleware/platform-notify.d.ts +8 -4
- package/dist/middleware/platform-notify.d.ts.map +1 -1
- package/dist/middleware/platform-notify.js +15 -7
- package/dist/middleware/platform-notify.js.map +1 -1
- package/dist/middleware/retry.d.ts +16 -7
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +21 -15
- package/dist/middleware/retry.js.map +1 -1
- package/dist/middleware/tracing.d.ts +50 -0
- package/dist/middleware/tracing.d.ts.map +1 -0
- package/dist/middleware/tracing.js +89 -0
- package/dist/middleware/tracing.js.map +1 -0
- package/dist/observability/batch-span-processor.d.ts +48 -0
- package/dist/observability/batch-span-processor.d.ts.map +1 -0
- package/dist/observability/batch-span-processor.js +89 -0
- package/dist/observability/batch-span-processor.js.map +1 -0
- package/dist/observability/context-logger.d.ts +54 -1
- package/dist/observability/context-logger.d.ts.map +1 -1
- package/dist/observability/context-logger.js +287 -10
- package/dist/observability/context-logger.js.map +1 -1
- package/dist/observability/error-history.d.ts +36 -7
- package/dist/observability/error-history.d.ts.map +1 -1
- package/dist/observability/error-history.js +169 -50
- package/dist/observability/error-history.js.map +1 -1
- package/dist/observability/index.d.ts +16 -5
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +8 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/metrics-utils.d.ts.map +1 -1
- package/dist/observability/metrics-utils.js +3 -5
- package/dist/observability/metrics-utils.js.map +1 -1
- package/dist/observability/metrics.d.ts +15 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +37 -3
- package/dist/observability/metrics.js.map +1 -1
- package/dist/observability/prometheus-exporter.d.ts +37 -0
- package/dist/observability/prometheus-exporter.d.ts.map +1 -0
- package/dist/observability/prometheus-exporter.js +135 -0
- package/dist/observability/prometheus-exporter.js.map +1 -0
- package/dist/observability/storage.d.ts +43 -0
- package/dist/observability/storage.d.ts.map +1 -0
- package/dist/observability/storage.js +58 -0
- package/dist/observability/storage.js.map +1 -0
- package/dist/observability/store.d.ts +29 -0
- package/dist/observability/store.d.ts.map +1 -0
- package/dist/observability/store.js +36 -0
- package/dist/observability/store.js.map +1 -0
- package/dist/observability/tracing.d.ts +2 -0
- package/dist/observability/tracing.d.ts.map +1 -1
- package/dist/observability/tracing.js +12 -2
- package/dist/observability/tracing.js.map +1 -1
- package/dist/observability/usage-exporter.d.ts +58 -0
- package/dist/observability/usage-exporter.d.ts.map +1 -0
- package/dist/observability/usage-exporter.js +86 -0
- package/dist/observability/usage-exporter.js.map +1 -0
- package/dist/observability/usage.d.ts +18 -1
- package/dist/observability/usage.d.ts.map +1 -1
- package/dist/observability/usage.js +35 -4
- package/dist/observability/usage.js.map +1 -1
- package/dist/pipeline-config.d.ts +24 -7
- package/dist/pipeline-config.d.ts.map +1 -1
- package/dist/pipeline-config.js +113 -19
- package/dist/pipeline-config.js.map +1 -1
- package/dist/pipeline.d.ts +123 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +249 -50
- package/dist/pipeline.js.map +1 -1
- package/dist/registry/conflicts.d.ts +2 -2
- package/dist/registry/conflicts.d.ts.map +1 -1
- package/dist/registry/conflicts.js +10 -11
- package/dist/registry/conflicts.js.map +1 -1
- package/dist/registry/dependencies.d.ts +1 -1
- package/dist/registry/dependencies.d.ts.map +1 -1
- package/dist/registry/dependencies.js +69 -20
- package/dist/registry/dependencies.js.map +1 -1
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -0
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/multi-class.d.ts +57 -0
- package/dist/registry/multi-class.d.ts.map +1 -0
- package/dist/registry/multi-class.js +120 -0
- package/dist/registry/multi-class.js.map +1 -0
- package/dist/registry/registry.d.ts +99 -4
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +291 -33
- package/dist/registry/registry.js.map +1 -1
- package/dist/registry/scanner.d.ts.map +1 -1
- package/dist/registry/scanner.js +6 -0
- package/dist/registry/scanner.js.map +1 -1
- package/dist/registry/version.d.ts +1 -0
- package/dist/registry/version.d.ts.map +1 -1
- package/dist/registry/version.js +33 -4
- package/dist/registry/version.js.map +1 -1
- package/dist/schema/constants.d.ts +9 -0
- package/dist/schema/constants.d.ts.map +1 -0
- package/dist/schema/constants.js +9 -0
- package/dist/schema/constants.js.map +1 -0
- package/dist/schema/extractor.d.ts +69 -0
- package/dist/schema/extractor.d.ts.map +1 -0
- package/dist/schema/extractor.js +142 -0
- package/dist/schema/extractor.js.map +1 -0
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +2 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/loader.d.ts +27 -3
- package/dist/schema/loader.d.ts.map +1 -1
- package/dist/schema/loader.js +137 -32
- package/dist/schema/loader.js.map +1 -1
- package/dist/schema/ref-resolver.d.ts.map +1 -1
- package/dist/schema/ref-resolver.js +10 -1
- package/dist/schema/ref-resolver.js.map +1 -1
- package/dist/schema/types.d.ts +4 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js.map +1 -1
- package/dist/schema/validator.d.ts +9 -0
- package/dist/schema/validator.d.ts.map +1 -1
- package/dist/schema/validator.js +153 -4
- package/dist/schema/validator.js.map +1 -1
- package/dist/sys-modules/audit.d.ts +50 -0
- package/dist/sys-modules/audit.d.ts.map +1 -0
- package/dist/sys-modules/audit.js +89 -0
- package/dist/sys-modules/audit.js.map +1 -0
- package/dist/sys-modules/control.d.ts +32 -4
- package/dist/sys-modules/control.d.ts.map +1 -1
- package/dist/sys-modules/control.js +197 -23
- package/dist/sys-modules/control.js.map +1 -1
- package/dist/sys-modules/index.d.ts +7 -2
- package/dist/sys-modules/index.d.ts.map +1 -1
- package/dist/sys-modules/index.js +3 -1
- package/dist/sys-modules/index.js.map +1 -1
- package/dist/sys-modules/overrides.d.ts +58 -0
- package/dist/sys-modules/overrides.d.ts.map +1 -0
- package/dist/sys-modules/overrides.js +106 -0
- package/dist/sys-modules/overrides.js.map +1 -0
- package/dist/sys-modules/registration.d.ts +18 -1
- package/dist/sys-modules/registration.d.ts.map +1 -1
- package/dist/sys-modules/registration.js +115 -11
- package/dist/sys-modules/registration.js.map +1 -1
- package/dist/sys-modules/toggle.d.ts +7 -2
- package/dist/sys-modules/toggle.d.ts.map +1 -1
- package/dist/sys-modules/toggle.js +61 -5
- package/dist/sys-modules/toggle.js.map +1 -1
- package/dist/trace-context.d.ts +47 -9
- package/dist/trace-context.d.ts.map +1 -1
- package/dist/trace-context.js +139 -16
- package/dist/trace-context.js.map +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Span processors: SimpleSpanProcessor (synchronous) and BatchSpanProcessor (async, non-blocking).
|
|
3
|
+
*/
|
|
4
|
+
import type { Span, SpanExporter } from './tracing.js';
|
|
5
|
+
export interface SpanProcessor {
|
|
6
|
+
onSpan(span: Span): void;
|
|
7
|
+
shutdown(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
/** Synchronous processor — exports each span immediately. For development and testing. */
|
|
10
|
+
export declare class SimpleSpanProcessor implements SpanProcessor {
|
|
11
|
+
private readonly _exporter;
|
|
12
|
+
constructor(options: {
|
|
13
|
+
exporter: SpanExporter;
|
|
14
|
+
});
|
|
15
|
+
onSpan(span: Span): void;
|
|
16
|
+
shutdown(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export interface BatchSpanProcessorOptions {
|
|
19
|
+
exporter: SpanExporter;
|
|
20
|
+
maxQueueSize?: number;
|
|
21
|
+
scheduleDelayMs?: number;
|
|
22
|
+
maxExportBatchSize?: number;
|
|
23
|
+
exportTimeoutMs?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Non-blocking batch processor — buffers spans and exports in background.
|
|
27
|
+
*
|
|
28
|
+
* When the queue is full, new spans are dropped and spansDropped is incremented.
|
|
29
|
+
* On shutdown, remaining spans are flushed within exportTimeoutMs.
|
|
30
|
+
*/
|
|
31
|
+
export declare class BatchSpanProcessor implements SpanProcessor {
|
|
32
|
+
private readonly _exporter;
|
|
33
|
+
private readonly _maxQueueSize;
|
|
34
|
+
private readonly _scheduleDelayMs;
|
|
35
|
+
private readonly _maxExportBatchSize;
|
|
36
|
+
private readonly _exportTimeoutMs;
|
|
37
|
+
private _queue;
|
|
38
|
+
private _spansDropped;
|
|
39
|
+
private _timer;
|
|
40
|
+
constructor(options: BatchSpanProcessorOptions);
|
|
41
|
+
get queueSize(): number;
|
|
42
|
+
get spansDropped(): number;
|
|
43
|
+
onSpan(span: Span): void;
|
|
44
|
+
shutdown(): Promise<void>;
|
|
45
|
+
private _startTimer;
|
|
46
|
+
private _flush;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=batch-span-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-span-processor.d.ts","sourceRoot":"","sources":["../../src/observability/batch-span-processor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,0FAA0F;AAC1F,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,OAAO,EAAE;QAAE,QAAQ,EAAE,YAAY,CAAA;KAAE;IAI/C,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIlB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAA+C;gBAEjD,OAAO,EAAE,yBAAyB;IAS9C,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQlB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB/B,OAAO,CAAC,WAAW;YAUL,MAAM;CAQrB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Span processors: SimpleSpanProcessor (synchronous) and BatchSpanProcessor (async, non-blocking).
|
|
3
|
+
*/
|
|
4
|
+
/** Synchronous processor — exports each span immediately. For development and testing. */
|
|
5
|
+
export class SimpleSpanProcessor {
|
|
6
|
+
_exporter;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this._exporter = options.exporter;
|
|
9
|
+
}
|
|
10
|
+
onSpan(span) {
|
|
11
|
+
this._exporter.export(span);
|
|
12
|
+
}
|
|
13
|
+
async shutdown() { }
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Non-blocking batch processor — buffers spans and exports in background.
|
|
17
|
+
*
|
|
18
|
+
* When the queue is full, new spans are dropped and spansDropped is incremented.
|
|
19
|
+
* On shutdown, remaining spans are flushed within exportTimeoutMs.
|
|
20
|
+
*/
|
|
21
|
+
export class BatchSpanProcessor {
|
|
22
|
+
_exporter;
|
|
23
|
+
_maxQueueSize;
|
|
24
|
+
_scheduleDelayMs;
|
|
25
|
+
_maxExportBatchSize;
|
|
26
|
+
_exportTimeoutMs;
|
|
27
|
+
_queue = [];
|
|
28
|
+
_spansDropped = 0;
|
|
29
|
+
_timer = null;
|
|
30
|
+
constructor(options) {
|
|
31
|
+
this._exporter = options.exporter;
|
|
32
|
+
this._maxQueueSize = options.maxQueueSize ?? 2048;
|
|
33
|
+
this._scheduleDelayMs = options.scheduleDelayMs ?? 5000;
|
|
34
|
+
this._maxExportBatchSize = options.maxExportBatchSize ?? 512;
|
|
35
|
+
this._exportTimeoutMs = options.exportTimeoutMs ?? 30000;
|
|
36
|
+
this._startTimer();
|
|
37
|
+
}
|
|
38
|
+
get queueSize() {
|
|
39
|
+
return this._queue.length;
|
|
40
|
+
}
|
|
41
|
+
get spansDropped() {
|
|
42
|
+
return this._spansDropped;
|
|
43
|
+
}
|
|
44
|
+
onSpan(span) {
|
|
45
|
+
if (this._queue.length >= this._maxQueueSize) {
|
|
46
|
+
this._spansDropped++;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this._queue.push(span);
|
|
50
|
+
}
|
|
51
|
+
async shutdown() {
|
|
52
|
+
if (this._timer !== null) {
|
|
53
|
+
clearInterval(this._timer);
|
|
54
|
+
this._timer = null;
|
|
55
|
+
}
|
|
56
|
+
let timeoutId = null;
|
|
57
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
58
|
+
timeoutId = setTimeout(() => reject(new Error('Export timeout')), this._exportTimeoutMs);
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
await Promise.race([this._flush(), timeoutPromise]);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
this._queue = [];
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
if (timeoutId !== null)
|
|
68
|
+
clearTimeout(timeoutId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
_startTimer() {
|
|
72
|
+
this._timer = setInterval(() => {
|
|
73
|
+
void this._flush();
|
|
74
|
+
}, this._scheduleDelayMs);
|
|
75
|
+
// Prevent the timer from keeping the Node.js event loop alive in tests
|
|
76
|
+
if (typeof this._timer.unref === 'function') {
|
|
77
|
+
this._timer.unref();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async _flush() {
|
|
81
|
+
while (this._queue.length > 0) {
|
|
82
|
+
const batch = this._queue.splice(0, this._maxExportBatchSize);
|
|
83
|
+
for (const span of batch) {
|
|
84
|
+
this._exporter.export(span);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=batch-span-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-span-processor.js","sourceRoot":"","sources":["../../src/observability/batch-span-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Structured logging: ContextLogger and ObsLoggingMiddleware.
|
|
2
|
+
* Structured logging: ContextLogger, RedactionConfig, and ObsLoggingMiddleware.
|
|
3
3
|
*/
|
|
4
|
+
import type { Config } from '../config.js';
|
|
4
5
|
import type { Context } from '../context.js';
|
|
5
6
|
import { Middleware } from '../middleware/base.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default sensitive field patterns (Issue #45 §3 — canonical superset
|
|
9
|
+
* promoted from #43 §5). Used when no `redaction.sensitive_keys`
|
|
10
|
+
* (canonical) / `redaction.field_patterns` (legacy) is configured.
|
|
11
|
+
* Wildcards follow apcore's `matchPattern` semantics (segment-aware globs).
|
|
12
|
+
*
|
|
13
|
+
* Aligned with apcore-python's authoritative list (Python is the canonical
|
|
14
|
+
* superset because broader default redaction is safer than narrower).
|
|
15
|
+
* `apiKey` is kept alongside `api_key` / `apikey` for camelCase parity
|
|
16
|
+
* because TypeScript's `matchPattern` is case-sensitive.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEFAULT_REDACTION_FIELD_PATTERNS: readonly string[];
|
|
19
|
+
/**
|
|
20
|
+
* Runtime-configurable redaction rules for ObsLoggingMiddleware.
|
|
21
|
+
* Applied in addition to schema-level x-sensitive annotations.
|
|
22
|
+
*/
|
|
23
|
+
export declare class RedactionConfig {
|
|
24
|
+
readonly fieldPatterns: readonly string[];
|
|
25
|
+
readonly valuePatterns: readonly (RegExp | string)[];
|
|
26
|
+
readonly replacement: string;
|
|
27
|
+
constructor(options?: {
|
|
28
|
+
fieldPatterns?: string[];
|
|
29
|
+
valuePatterns?: (RegExp | string)[];
|
|
30
|
+
replacement?: string;
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Build a RedactionConfig from an apcore {@link Config}.
|
|
34
|
+
*
|
|
35
|
+
* Reads canonical keys first (sync finding CRITICAL #4 — aligns with
|
|
36
|
+
* apcore-python / apcore-rust):
|
|
37
|
+
* - `obs.redaction.sensitive_keys` (string[])
|
|
38
|
+
* - `obs.redaction.regex_patterns` (string[]; compiled case-insensitively)
|
|
39
|
+
* - `obs.redaction.replacement` (string)
|
|
40
|
+
*
|
|
41
|
+
* For backwards compatibility, falls back to legacy keys (Issue #43 §5)
|
|
42
|
+
* when the canonical key is unset, and emits a one-shot deprecation
|
|
43
|
+
* warning the first time a legacy key is read:
|
|
44
|
+
* - `observability.redaction.field_patterns` (legacy of sensitive_keys)
|
|
45
|
+
* - `observability.redaction.value_patterns` (legacy of regex_patterns)
|
|
46
|
+
* - `observability.redaction.replacement` (legacy of replacement)
|
|
47
|
+
*
|
|
48
|
+
* Falls back to {@link DEFAULT_REDACTION_FIELD_PATTERNS} when no sensitive
|
|
49
|
+
* keys are configured so `_secret_*` and standard sensitive keys (apiKey,
|
|
50
|
+
* api_key, token, authorization, password) remain redacted out of the box.
|
|
51
|
+
*/
|
|
52
|
+
static fromConfig(config: Config): RedactionConfig;
|
|
53
|
+
/** Apply redaction rules to a flat object of field name → value. */
|
|
54
|
+
apply(obj: Record<string, unknown>): Record<string, unknown>;
|
|
55
|
+
private _shouldRedact;
|
|
56
|
+
}
|
|
6
57
|
interface WritableOutput {
|
|
7
58
|
write(s: string): void;
|
|
8
59
|
}
|
|
@@ -41,10 +92,12 @@ export declare class ObsLoggingMiddleware extends Middleware {
|
|
|
41
92
|
private _logger;
|
|
42
93
|
private _logInputs;
|
|
43
94
|
private _logOutputs;
|
|
95
|
+
private _redactionConfig;
|
|
44
96
|
constructor(options?: {
|
|
45
97
|
logger?: ContextLogger;
|
|
46
98
|
logInputs?: boolean;
|
|
47
99
|
logOutputs?: boolean;
|
|
100
|
+
redactionConfig?: RedactionConfig | null;
|
|
48
101
|
});
|
|
49
102
|
before(moduleId: string, inputs: Record<string, unknown>, context: Context): null;
|
|
50
103
|
after(moduleId: string, _inputs: Record<string, unknown>, output: Record<string, unknown>, context: Context): null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-logger.d.ts","sourceRoot":"","sources":["../../src/observability/context-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"context-logger.d.ts","sourceRoot":"","sources":["../../src/observability/context-logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAiB7D,CAAC;AA+EF;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAG3B,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,aAAa,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QACpC,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB;IAOR;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IA6DlD,oEAAoE;IACpE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAY5D,OAAO,CAAC,aAAa;CAiCtB;AA6BD,UAAU,cAAc;IACtB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;gBAE5B,OAAO,CAAC,EAAE;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB;IAUD,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB,GACA,aAAa;IAShB,OAAO,CAAC,KAAK;IA6Cb,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG9D;AAED,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,gBAAgB,CAAyB;gBAErC,OAAO,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;KAC1C;IAQQ,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAoBjF,KAAK,CACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,OAAO,GACf,IAAI;IAyBE,OAAO,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GACf,IAAI;CAcR"}
|
|
@@ -1,7 +1,253 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Structured logging: ContextLogger and ObsLoggingMiddleware.
|
|
2
|
+
* Structured logging: ContextLogger, RedactionConfig, and ObsLoggingMiddleware.
|
|
3
3
|
*/
|
|
4
4
|
import { Middleware } from '../middleware/base.js';
|
|
5
|
+
// matchPattern intentionally not imported — sensitive_keys uses
|
|
6
|
+
// fnmatch-style globs against lowercased keys, not apcore's segment-aware
|
|
7
|
+
// pattern matcher (which is case-sensitive and segment-anchored).
|
|
8
|
+
/**
|
|
9
|
+
* Default sensitive field patterns (Issue #45 §3 — canonical superset
|
|
10
|
+
* promoted from #43 §5). Used when no `redaction.sensitive_keys`
|
|
11
|
+
* (canonical) / `redaction.field_patterns` (legacy) is configured.
|
|
12
|
+
* Wildcards follow apcore's `matchPattern` semantics (segment-aware globs).
|
|
13
|
+
*
|
|
14
|
+
* Aligned with apcore-python's authoritative list (Python is the canonical
|
|
15
|
+
* superset because broader default redaction is safer than narrower).
|
|
16
|
+
* `apiKey` is kept alongside `api_key` / `apikey` for camelCase parity
|
|
17
|
+
* because TypeScript's `matchPattern` is case-sensitive.
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_REDACTION_FIELD_PATTERNS = [
|
|
20
|
+
'_secret_*',
|
|
21
|
+
'password',
|
|
22
|
+
'passwd',
|
|
23
|
+
'secret',
|
|
24
|
+
'token',
|
|
25
|
+
'api_key',
|
|
26
|
+
'apikey',
|
|
27
|
+
'apiKey',
|
|
28
|
+
'access_key',
|
|
29
|
+
'private_key',
|
|
30
|
+
'authorization',
|
|
31
|
+
'auth',
|
|
32
|
+
'credential',
|
|
33
|
+
'cookie',
|
|
34
|
+
'session',
|
|
35
|
+
'bearer',
|
|
36
|
+
];
|
|
37
|
+
/**
|
|
38
|
+
* One-shot deprecation warning bookkeeping for legacy
|
|
39
|
+
* `observability.redaction.*` keys (sync finding CRITICAL #4). Mirrors the
|
|
40
|
+
* cross-language pattern — warn once per process when legacy keys are read,
|
|
41
|
+
* pointing migrators at the canonical `obs.redaction.*` namespace.
|
|
42
|
+
*/
|
|
43
|
+
const _REDACTION_LEGACY_DEPRECATION_EMITTED = { value: false };
|
|
44
|
+
function _emitRedactionLegacyDeprecation(legacyKeys) {
|
|
45
|
+
if (_REDACTION_LEGACY_DEPRECATION_EMITTED.value)
|
|
46
|
+
return;
|
|
47
|
+
_REDACTION_LEGACY_DEPRECATION_EMITTED.value = true;
|
|
48
|
+
console.warn(`[apcore] Config keys ${legacyKeys.join(', ')} are deprecated; ` +
|
|
49
|
+
'use obs.redaction.sensitive_keys / obs.redaction.regex_patterns / obs.redaction.replacement instead. ' +
|
|
50
|
+
'Legacy keys will be removed in a future release.');
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// RedactionConfig
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
const PROTECTED_LOG_FIELDS = new Set([
|
|
56
|
+
'trace_id',
|
|
57
|
+
'caller_id',
|
|
58
|
+
'target_id',
|
|
59
|
+
'module_id',
|
|
60
|
+
'span_id',
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* Normalize a field name for substring matching: lowercase + collapse
|
|
64
|
+
* hyphens / spaces to underscores. Mirrors apcore-python's
|
|
65
|
+
* `_normalize_key_for_match` so `X-API-Key` matches `api_key`.
|
|
66
|
+
*/
|
|
67
|
+
function _normalizeKeyForMatch(s) {
|
|
68
|
+
return s.toLowerCase().replace(/[- ]/g, '_');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compact normalization: lowercase with hyphen / underscore / space
|
|
72
|
+
* stripped entirely. Mirrors apcore-python's `_compact_for_match` so
|
|
73
|
+
* camelCase keys like `AccessKey` substring-match the `access_key` pattern
|
|
74
|
+
* (D-54 canonical default expectation).
|
|
75
|
+
*/
|
|
76
|
+
function _compactKeyForMatch(s) {
|
|
77
|
+
return s.toLowerCase().replace(/[-_ ]/g, '');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Compile a sensitive_keys glob into a case-insensitive RegExp matching the
|
|
81
|
+
* full lowercase key. Mirrors fnmatch semantics: `*` -> `.*`, `?` -> `.`,
|
|
82
|
+
* `[abc]` is treated as a character class as-is.
|
|
83
|
+
*/
|
|
84
|
+
function _globToRegExp(pattern) {
|
|
85
|
+
let out = '';
|
|
86
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
87
|
+
const ch = pattern[i];
|
|
88
|
+
if (ch === '*')
|
|
89
|
+
out += '.*';
|
|
90
|
+
else if (ch === '?')
|
|
91
|
+
out += '.';
|
|
92
|
+
else if (ch === '[') {
|
|
93
|
+
const close = pattern.indexOf(']', i + 1);
|
|
94
|
+
if (close === -1) {
|
|
95
|
+
out += '\\[';
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
out += pattern.slice(i, close + 1);
|
|
99
|
+
i = close;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else if ('\\^$.|+(){}'.includes(ch)) {
|
|
103
|
+
out += '\\' + ch;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
out += ch;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return new RegExp(`^${out}$`, 'i');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Runtime-configurable redaction rules for ObsLoggingMiddleware.
|
|
113
|
+
* Applied in addition to schema-level x-sensitive annotations.
|
|
114
|
+
*/
|
|
115
|
+
export class RedactionConfig {
|
|
116
|
+
fieldPatterns;
|
|
117
|
+
valuePatterns;
|
|
118
|
+
replacement;
|
|
119
|
+
constructor(options = {}) {
|
|
120
|
+
this.fieldPatterns = options.fieldPatterns ?? [];
|
|
121
|
+
this.valuePatterns = options.valuePatterns ?? [];
|
|
122
|
+
this.replacement = options.replacement ?? '***REDACTED***';
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Build a RedactionConfig from an apcore {@link Config}.
|
|
126
|
+
*
|
|
127
|
+
* Reads canonical keys first (sync finding CRITICAL #4 — aligns with
|
|
128
|
+
* apcore-python / apcore-rust):
|
|
129
|
+
* - `obs.redaction.sensitive_keys` (string[])
|
|
130
|
+
* - `obs.redaction.regex_patterns` (string[]; compiled case-insensitively)
|
|
131
|
+
* - `obs.redaction.replacement` (string)
|
|
132
|
+
*
|
|
133
|
+
* For backwards compatibility, falls back to legacy keys (Issue #43 §5)
|
|
134
|
+
* when the canonical key is unset, and emits a one-shot deprecation
|
|
135
|
+
* warning the first time a legacy key is read:
|
|
136
|
+
* - `observability.redaction.field_patterns` (legacy of sensitive_keys)
|
|
137
|
+
* - `observability.redaction.value_patterns` (legacy of regex_patterns)
|
|
138
|
+
* - `observability.redaction.replacement` (legacy of replacement)
|
|
139
|
+
*
|
|
140
|
+
* Falls back to {@link DEFAULT_REDACTION_FIELD_PATTERNS} when no sensitive
|
|
141
|
+
* keys are configured so `_secret_*` and standard sensitive keys (apiKey,
|
|
142
|
+
* api_key, token, authorization, password) remain redacted out of the box.
|
|
143
|
+
*/
|
|
144
|
+
static fromConfig(config) {
|
|
145
|
+
const legacyKeysUsed = [];
|
|
146
|
+
// --- sensitive_keys (formerly field_patterns) ---
|
|
147
|
+
let rawFields = config.get('obs.redaction.sensitive_keys');
|
|
148
|
+
if (rawFields === undefined || rawFields === null) {
|
|
149
|
+
const legacyFields = config.get('observability.redaction.field_patterns');
|
|
150
|
+
if (legacyFields !== undefined && legacyFields !== null) {
|
|
151
|
+
rawFields = legacyFields;
|
|
152
|
+
legacyKeysUsed.push('observability.redaction.field_patterns');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// --- regex_patterns (formerly value_patterns) ---
|
|
156
|
+
let rawValues = config.get('obs.redaction.regex_patterns');
|
|
157
|
+
if (rawValues === undefined || rawValues === null) {
|
|
158
|
+
const legacyValues = config.get('observability.redaction.value_patterns');
|
|
159
|
+
if (legacyValues !== undefined && legacyValues !== null) {
|
|
160
|
+
rawValues = legacyValues;
|
|
161
|
+
legacyKeysUsed.push('observability.redaction.value_patterns');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// --- replacement ---
|
|
165
|
+
let replacement = config.get('obs.redaction.replacement');
|
|
166
|
+
if (replacement === undefined || replacement === null) {
|
|
167
|
+
const legacyReplacement = config.get('observability.redaction.replacement');
|
|
168
|
+
if (legacyReplacement !== undefined && legacyReplacement !== null) {
|
|
169
|
+
replacement = legacyReplacement;
|
|
170
|
+
legacyKeysUsed.push('observability.redaction.replacement');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (legacyKeysUsed.length > 0) {
|
|
174
|
+
_emitRedactionLegacyDeprecation(legacyKeysUsed);
|
|
175
|
+
}
|
|
176
|
+
const fieldPatterns = Array.isArray(rawFields) && rawFields.length > 0
|
|
177
|
+
? rawFields.filter((p) => typeof p === 'string')
|
|
178
|
+
: [...DEFAULT_REDACTION_FIELD_PATTERNS];
|
|
179
|
+
const valueStrings = Array.isArray(rawValues)
|
|
180
|
+
? rawValues.filter((p) => typeof p === 'string')
|
|
181
|
+
: [];
|
|
182
|
+
const valuePatterns = valueStrings.map((p) => {
|
|
183
|
+
try {
|
|
184
|
+
return new RegExp(p, 'i');
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Drop invalid patterns rather than throwing at logger init.
|
|
188
|
+
return /(?!)/; // never matches
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
return new RedactionConfig({
|
|
192
|
+
fieldPatterns,
|
|
193
|
+
valuePatterns,
|
|
194
|
+
replacement: typeof replacement === 'string' ? replacement : undefined,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/** Apply redaction rules to a flat object of field name → value. */
|
|
198
|
+
apply(obj) {
|
|
199
|
+
const result = {};
|
|
200
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
201
|
+
if (this._shouldRedact(k, v)) {
|
|
202
|
+
result[k] = this.replacement;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
result[k] = v;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
_shouldRedact(fieldName, value) {
|
|
211
|
+
if (PROTECTED_LOG_FIELDS.has(fieldName))
|
|
212
|
+
return false;
|
|
213
|
+
const lowerKey = fieldName.toLowerCase();
|
|
214
|
+
const normKey = _normalizeKeyForMatch(fieldName);
|
|
215
|
+
const compactKey = _compactKeyForMatch(fieldName);
|
|
216
|
+
for (const pattern of this.fieldPatterns) {
|
|
217
|
+
if (!pattern)
|
|
218
|
+
continue;
|
|
219
|
+
const lowerPat = pattern.toLowerCase();
|
|
220
|
+
const isGlob = /[*?[]/.test(lowerPat);
|
|
221
|
+
if (isGlob) {
|
|
222
|
+
if (_globToRegExp(lowerPat).test(lowerKey))
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
// Plain case-insensitive substring match with hyphen/space ↔ underscore
|
|
227
|
+
// equivalence (apcore-python behavioral parity).
|
|
228
|
+
const normPat = _normalizeKeyForMatch(pattern);
|
|
229
|
+
if (normKey.includes(normPat))
|
|
230
|
+
return true;
|
|
231
|
+
// Also try the compact (separator-stripped) form so that camelCase
|
|
232
|
+
// keys like "AccessKey" match the "access_key" canonical pattern.
|
|
233
|
+
const compactPat = _compactKeyForMatch(pattern);
|
|
234
|
+
if (compactKey.includes(compactPat))
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (typeof value === 'string') {
|
|
239
|
+
for (const pattern of this.valuePatterns) {
|
|
240
|
+
const re = pattern instanceof RegExp ? pattern : new RegExp(pattern);
|
|
241
|
+
if (re.test(value))
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// ContextLogger
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
5
251
|
const LEVELS = {
|
|
6
252
|
trace: 0,
|
|
7
253
|
debug: 10,
|
|
@@ -11,6 +257,18 @@ const LEVELS = {
|
|
|
11
257
|
fatal: 50,
|
|
12
258
|
};
|
|
13
259
|
const REDACTED = '***REDACTED***';
|
|
260
|
+
function deepRedact(value) {
|
|
261
|
+
if (Array.isArray(value))
|
|
262
|
+
return value.map(deepRedact);
|
|
263
|
+
if (value !== null && typeof value === 'object') {
|
|
264
|
+
const result = {};
|
|
265
|
+
for (const [k, v] of Object.entries(value)) {
|
|
266
|
+
result[k] = k.startsWith('_secret_') ? REDACTED : deepRedact(v);
|
|
267
|
+
}
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
270
|
+
return value;
|
|
271
|
+
}
|
|
14
272
|
export class ContextLogger {
|
|
15
273
|
_name;
|
|
16
274
|
_format;
|
|
@@ -33,7 +291,8 @@ export class ContextLogger {
|
|
|
33
291
|
static fromContext(context, name, options) {
|
|
34
292
|
const logger = new ContextLogger({ name, ...options });
|
|
35
293
|
logger._traceId = context.traceId;
|
|
36
|
-
logger._moduleId =
|
|
294
|
+
logger._moduleId =
|
|
295
|
+
context.callChain.length > 0 ? context.callChain[context.callChain.length - 1] : null;
|
|
37
296
|
logger._callerId = context.callerId;
|
|
38
297
|
return logger;
|
|
39
298
|
}
|
|
@@ -43,10 +302,7 @@ export class ContextLogger {
|
|
|
43
302
|
return;
|
|
44
303
|
let redactedExtra = extra ?? null;
|
|
45
304
|
if (extra != null && this._redactSensitive) {
|
|
46
|
-
redactedExtra =
|
|
47
|
-
for (const [k, v] of Object.entries(extra)) {
|
|
48
|
-
redactedExtra[k] = k.startsWith('_secret_') ? REDACTED : v;
|
|
49
|
-
}
|
|
305
|
+
redactedExtra = deepRedact(extra);
|
|
50
306
|
}
|
|
51
307
|
const now = new Date();
|
|
52
308
|
const entry = {
|
|
@@ -63,13 +319,20 @@ export class ContextLogger {
|
|
|
63
319
|
this._output.write(JSON.stringify(entry) + '\n');
|
|
64
320
|
}
|
|
65
321
|
else {
|
|
66
|
-
const ts = now
|
|
322
|
+
const ts = now
|
|
323
|
+
.toISOString()
|
|
324
|
+
.replace('T', ' ')
|
|
325
|
+
.replace(/\.\d+Z$/, '');
|
|
67
326
|
const lvl = levelName.toUpperCase();
|
|
68
327
|
const trace = this._traceId ?? 'none';
|
|
69
328
|
const mod = this._moduleId ?? 'none';
|
|
70
329
|
let extrasStr = '';
|
|
71
330
|
if (redactedExtra) {
|
|
72
|
-
extrasStr =
|
|
331
|
+
extrasStr =
|
|
332
|
+
' ' +
|
|
333
|
+
Object.entries(redactedExtra)
|
|
334
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
335
|
+
.join(' ');
|
|
73
336
|
}
|
|
74
337
|
this._output.write(`${ts} [${lvl}] [trace=${trace}] [module=${mod}] ${message}${extrasStr}\n`);
|
|
75
338
|
}
|
|
@@ -97,11 +360,13 @@ export class ObsLoggingMiddleware extends Middleware {
|
|
|
97
360
|
_logger;
|
|
98
361
|
_logInputs;
|
|
99
362
|
_logOutputs;
|
|
363
|
+
_redactionConfig;
|
|
100
364
|
constructor(options) {
|
|
101
365
|
super();
|
|
102
366
|
this._logger = options?.logger ?? new ContextLogger({ name: 'apcore.obs_logging' });
|
|
103
367
|
this._logInputs = options?.logInputs ?? true;
|
|
104
368
|
this._logOutputs = options?.logOutputs ?? true;
|
|
369
|
+
this._redactionConfig = options?.redactionConfig ?? null;
|
|
105
370
|
}
|
|
106
371
|
before(moduleId, inputs, context) {
|
|
107
372
|
const starts = context.data['_apcore.mw.logging.obs_starts'] ?? [];
|
|
@@ -112,7 +377,11 @@ export class ObsLoggingMiddleware extends Middleware {
|
|
|
112
377
|
caller_id: context.callerId,
|
|
113
378
|
};
|
|
114
379
|
if (this._logInputs) {
|
|
115
|
-
|
|
380
|
+
let loggableInputs = (context.redactedInputs ?? inputs);
|
|
381
|
+
if (this._redactionConfig !== null) {
|
|
382
|
+
loggableInputs = this._redactionConfig.apply(loggableInputs);
|
|
383
|
+
}
|
|
384
|
+
extra['inputs'] = loggableInputs;
|
|
116
385
|
}
|
|
117
386
|
this._logger.info('Module call started', extra);
|
|
118
387
|
return null;
|
|
@@ -128,7 +397,15 @@ export class ObsLoggingMiddleware extends Middleware {
|
|
|
128
397
|
duration_ms: durationMs,
|
|
129
398
|
};
|
|
130
399
|
if (this._logOutputs) {
|
|
131
|
-
|
|
400
|
+
// Prefer the executor's schema-aware redacted output so x-sensitive
|
|
401
|
+
// fields (API keys, tokens) do not leak into logs. The executor has
|
|
402
|
+
// already applied the schema; falling back to `output` preserves
|
|
403
|
+
// behavior for callers invoking the middleware outside the pipeline.
|
|
404
|
+
let loggableOutput = (context.redactedOutput ?? output);
|
|
405
|
+
if (this._redactionConfig !== null) {
|
|
406
|
+
loggableOutput = this._redactionConfig.apply(loggableOutput);
|
|
407
|
+
}
|
|
408
|
+
extra['output'] = loggableOutput;
|
|
132
409
|
}
|
|
133
410
|
this._logger.info('Module call completed', extra);
|
|
134
411
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-logger.js","sourceRoot":"","sources":["../../src/observability/context-logger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-logger.js","sourceRoot":"","sources":["../../src/observability/context-logger.ts"],"names":[],"mappings":"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"}
|