@zudojs/observability 0.0.1
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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/exporter/exporter.console.d.ts +34 -0
- package/dist/exporter/exporter.console.d.ts.map +1 -0
- package/dist/exporter/exporter.console.js +94 -0
- package/dist/exporter/exporter.console.js.map +1 -0
- package/dist/exporter/index.d.ts +7 -0
- package/dist/exporter/index.d.ts.map +1 -0
- package/dist/exporter/index.js +7 -0
- package/dist/exporter/index.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/logLevel/index.d.ts +7 -0
- package/dist/logLevel/index.d.ts.map +1 -0
- package/dist/logLevel/index.js +7 -0
- package/dist/logLevel/index.js.map +1 -0
- package/dist/logLevel/logLevel.type.d.ts +16 -0
- package/dist/logLevel/logLevel.type.d.ts.map +1 -0
- package/dist/logLevel/logLevel.type.js +42 -0
- package/dist/logLevel/logLevel.type.js.map +1 -0
- package/dist/logRecord/index.d.ts +7 -0
- package/dist/logRecord/index.d.ts.map +1 -0
- package/dist/logRecord/index.js +7 -0
- package/dist/logRecord/index.js.map +1 -0
- package/dist/logRecord/logRecord.core.d.ts +18 -0
- package/dist/logRecord/logRecord.core.d.ts.map +1 -0
- package/dist/logRecord/logRecord.core.js +49 -0
- package/dist/logRecord/logRecord.core.js.map +1 -0
- package/dist/logger/index.d.ts +7 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +7 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.core.d.ts +32 -0
- package/dist/logger/logger.core.d.ts.map +1 -0
- package/dist/logger/logger.core.js +81 -0
- package/dist/logger/logger.core.js.map +1 -0
- package/dist/metrics/counter/counter.core.d.ts +22 -0
- package/dist/metrics/counter/counter.core.d.ts.map +1 -0
- package/dist/metrics/counter/counter.core.js +34 -0
- package/dist/metrics/counter/counter.core.js.map +1 -0
- package/dist/metrics/counter/index.d.ts +7 -0
- package/dist/metrics/counter/index.d.ts.map +1 -0
- package/dist/metrics/counter/index.js +7 -0
- package/dist/metrics/counter/index.js.map +1 -0
- package/dist/metrics/gauge/gauge.core.d.ts +23 -0
- package/dist/metrics/gauge/gauge.core.d.ts.map +1 -0
- package/dist/metrics/gauge/gauge.core.js +37 -0
- package/dist/metrics/gauge/gauge.core.js.map +1 -0
- package/dist/metrics/gauge/index.d.ts +7 -0
- package/dist/metrics/gauge/index.d.ts.map +1 -0
- package/dist/metrics/gauge/index.js +7 -0
- package/dist/metrics/gauge/index.js.map +1 -0
- package/dist/metrics/histogram/histogram.core.d.ts +30 -0
- package/dist/metrics/histogram/histogram.core.d.ts.map +1 -0
- package/dist/metrics/histogram/histogram.core.js +48 -0
- package/dist/metrics/histogram/histogram.core.js.map +1 -0
- package/dist/metrics/histogram/index.d.ts +7 -0
- package/dist/metrics/histogram/index.d.ts.map +1 -0
- package/dist/metrics/histogram/index.js +7 -0
- package/dist/metrics/histogram/index.js.map +1 -0
- package/dist/metrics/index.d.ts +10 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +10 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/metrics.registry.d.ts +23 -0
- package/dist/metrics/metrics.registry.d.ts.map +1 -0
- package/dist/metrics/metrics.registry.js +93 -0
- package/dist/metrics/metrics.registry.js.map +1 -0
- package/dist/noop/index.d.ts +7 -0
- package/dist/noop/index.d.ts.map +1 -0
- package/dist/noop/index.js +7 -0
- package/dist/noop/index.js.map +1 -0
- package/dist/noop/noopObservability.core.d.ts +31 -0
- package/dist/noop/noopObservability.core.d.ts.map +1 -0
- package/dist/noop/noopObservability.core.js +103 -0
- package/dist/noop/noopObservability.core.js.map +1 -0
- package/dist/observability/index.d.ts +7 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +7 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/observability.core.d.ts +28 -0
- package/dist/observability/observability.core.d.ts.map +1 -0
- package/dist/observability/observability.core.js +90 -0
- package/dist/observability/observability.core.js.map +1 -0
- package/dist/processor/index.d.ts +7 -0
- package/dist/processor/index.d.ts.map +1 -0
- package/dist/processor/index.js +7 -0
- package/dist/processor/index.js.map +1 -0
- package/dist/processor/processor.batch.d.ts +35 -0
- package/dist/processor/processor.batch.d.ts.map +1 -0
- package/dist/processor/processor.batch.js +77 -0
- package/dist/processor/processor.batch.js.map +1 -0
- package/dist/propagation/index.d.ts +7 -0
- package/dist/propagation/index.d.ts.map +1 -0
- package/dist/propagation/index.js +7 -0
- package/dist/propagation/index.js.map +1 -0
- package/dist/propagation/propagation.core.d.ts +24 -0
- package/dist/propagation/propagation.core.d.ts.map +1 -0
- package/dist/propagation/propagation.core.js +73 -0
- package/dist/propagation/propagation.core.js.map +1 -0
- package/dist/redaction/index.d.ts +7 -0
- package/dist/redaction/index.d.ts.map +1 -0
- package/dist/redaction/index.js +7 -0
- package/dist/redaction/index.js.map +1 -0
- package/dist/redaction/redaction.core.d.ts +19 -0
- package/dist/redaction/redaction.core.d.ts.map +1 -0
- package/dist/redaction/redaction.core.js +67 -0
- package/dist/redaction/redaction.core.js.map +1 -0
- package/dist/sampling/index.d.ts +7 -0
- package/dist/sampling/index.d.ts.map +1 -0
- package/dist/sampling/index.js +7 -0
- package/dist/sampling/index.js.map +1 -0
- package/dist/sampling/sampler.type.d.ts +35 -0
- package/dist/sampling/sampler.type.d.ts.map +1 -0
- package/dist/sampling/sampler.type.js +68 -0
- package/dist/sampling/sampler.type.js.map +1 -0
- package/dist/tracing/index.d.ts +8 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +8 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/span/index.d.ts +8 -0
- package/dist/tracing/span/index.d.ts.map +1 -0
- package/dist/tracing/span/index.js +8 -0
- package/dist/tracing/span/index.js.map +1 -0
- package/dist/tracing/span/span.core.d.ts +42 -0
- package/dist/tracing/span/span.core.d.ts.map +1 -0
- package/dist/tracing/span/span.core.js +105 -0
- package/dist/tracing/span/span.core.js.map +1 -0
- package/dist/tracing/span/spanContext.type.d.ts +16 -0
- package/dist/tracing/span/spanContext.type.d.ts.map +1 -0
- package/dist/tracing/span/spanContext.type.js +32 -0
- package/dist/tracing/span/spanContext.type.js.map +1 -0
- package/dist/tracing/tracer/index.d.ts +7 -0
- package/dist/tracing/tracer/index.d.ts.map +1 -0
- package/dist/tracing/tracer/index.js +7 -0
- package/dist/tracing/tracer/index.js.map +1 -0
- package/dist/tracing/tracer/tracer.core.d.ts +31 -0
- package/dist/tracing/tracer/tracer.core.d.ts.map +1 -0
- package/dist/tracing/tracer/tracer.core.js +62 -0
- package/dist/tracing/tracer/tracer.core.js.map +1 -0
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Noop Implementations
|
|
3
|
+
*
|
|
4
|
+
* No-op implementations that discard all telemetry.
|
|
5
|
+
* Allows instrumentation code to remain simple without null checks.
|
|
6
|
+
*/
|
|
7
|
+
import { LogLevel } from "../types.js";
|
|
8
|
+
/* ─── Noop Logger ─────────────────────────────────────────────────────── */
|
|
9
|
+
const noopLogger = {
|
|
10
|
+
name: "noop",
|
|
11
|
+
level: LogLevel.OFF,
|
|
12
|
+
trace: () => { },
|
|
13
|
+
debug: () => { },
|
|
14
|
+
info: () => { },
|
|
15
|
+
warn: () => { },
|
|
16
|
+
error: () => { },
|
|
17
|
+
fatal: () => { },
|
|
18
|
+
child: () => noopLogger,
|
|
19
|
+
isLevelEnabled: () => false,
|
|
20
|
+
flush: async () => { },
|
|
21
|
+
};
|
|
22
|
+
/* ─── Noop Counter ────────────────────────────────────────────────────── */
|
|
23
|
+
const noopCounter = {
|
|
24
|
+
name: "noop",
|
|
25
|
+
increment: () => { },
|
|
26
|
+
getValue: () => 0,
|
|
27
|
+
reset: () => { },
|
|
28
|
+
};
|
|
29
|
+
/* ─── Noop Gauge ──────────────────────────────────────────────────────── */
|
|
30
|
+
const noopGauge = {
|
|
31
|
+
name: "noop",
|
|
32
|
+
setValue: () => { },
|
|
33
|
+
increment: () => { },
|
|
34
|
+
decrement: () => { },
|
|
35
|
+
getValue: () => 0,
|
|
36
|
+
reset: () => { },
|
|
37
|
+
};
|
|
38
|
+
/* ─── Noop Histogram ──────────────────────────────────────────────────── */
|
|
39
|
+
const noopHistogram = {
|
|
40
|
+
name: "noop",
|
|
41
|
+
record: () => { },
|
|
42
|
+
getValue: () => ({ count: 0, sum: 0, min: 0, max: 0 }),
|
|
43
|
+
reset: () => { },
|
|
44
|
+
};
|
|
45
|
+
/* ─── Noop Metrics Registry ───────────────────────────────────────────── */
|
|
46
|
+
const noopMetricsRegistry = {
|
|
47
|
+
counter: () => noopCounter,
|
|
48
|
+
gauge: () => noopGauge,
|
|
49
|
+
histogram: () => noopHistogram,
|
|
50
|
+
getCounter: () => undefined,
|
|
51
|
+
getGauge: () => undefined,
|
|
52
|
+
getHistogram: () => undefined,
|
|
53
|
+
getAll: () => [],
|
|
54
|
+
reset: () => { },
|
|
55
|
+
};
|
|
56
|
+
/* ─── Noop Span ───────────────────────────────────────────────────────── */
|
|
57
|
+
const noopSpan = {
|
|
58
|
+
name: "noop",
|
|
59
|
+
context: { traceId: "", spanId: "" },
|
|
60
|
+
startTime: new Date(),
|
|
61
|
+
setAttribute: () => { },
|
|
62
|
+
addEvent: () => { },
|
|
63
|
+
setStatus: () => { },
|
|
64
|
+
recordError: () => { },
|
|
65
|
+
end: () => { },
|
|
66
|
+
getDuration: () => 0,
|
|
67
|
+
isRecording: () => false,
|
|
68
|
+
};
|
|
69
|
+
/* ─── Noop Tracer ─────────────────────────────────────────────────────── */
|
|
70
|
+
const noopTracer = {
|
|
71
|
+
startSpan: () => noopSpan,
|
|
72
|
+
};
|
|
73
|
+
/* ─── Noop Propagation Manager ────────────────────────────────────────── */
|
|
74
|
+
const noopContext = {
|
|
75
|
+
traceId: "",
|
|
76
|
+
spanId: "",
|
|
77
|
+
};
|
|
78
|
+
const noopPropagationManager = {
|
|
79
|
+
current: () => noopContext,
|
|
80
|
+
run: async (_ctx, fn) => fn(),
|
|
81
|
+
derive: () => noopContext,
|
|
82
|
+
};
|
|
83
|
+
/* ─── Noop Observability ──────────────────────────────────────────────── */
|
|
84
|
+
/**
|
|
85
|
+
* No-op observability that discards all telemetry.
|
|
86
|
+
* Use when observability is disabled to avoid null checks in instrumented code.
|
|
87
|
+
*/
|
|
88
|
+
export class NoopObservability {
|
|
89
|
+
logger = noopLogger;
|
|
90
|
+
metrics = noopMetricsRegistry;
|
|
91
|
+
tracer = noopTracer;
|
|
92
|
+
propagation = noopPropagationManager;
|
|
93
|
+
resource() {
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
async shutdown() { }
|
|
97
|
+
}
|
|
98
|
+
/** Creates a noop observability instance. */
|
|
99
|
+
export function createNoopObservability() {
|
|
100
|
+
return new NoopObservability();
|
|
101
|
+
}
|
|
102
|
+
export { noopLogger, noopCounter, noopGauge, noopHistogram, noopMetricsRegistry, noopSpan, noopTracer, noopPropagationManager, };
|
|
103
|
+
//# sourceMappingURL=noopObservability.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noopObservability.core.js","sourceRoot":"","sources":["../../src/noop/noopObservability.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Observability Core
|
|
3
|
+
*
|
|
4
|
+
* Central facade that coordinates logging, metrics, tracing, and context
|
|
5
|
+
* propagation. Other Zudojs packages depend on this abstraction rather
|
|
6
|
+
* than on specific telemetry implementations.
|
|
7
|
+
*/
|
|
8
|
+
import type { Logger, MetricsRegistry, Observability, ObservabilityConfig, PropagationManager, Tracer } from "../types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Default observability implementation.
|
|
11
|
+
*
|
|
12
|
+
* Provides a unified API for logging, metrics, tracing, and context propagation.
|
|
13
|
+
* Use this as the single entry point for all telemetry in a Zudojs application.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DefaultObservability implements Observability {
|
|
16
|
+
readonly logger: Logger;
|
|
17
|
+
readonly metrics: MetricsRegistry;
|
|
18
|
+
readonly tracer: Tracer;
|
|
19
|
+
readonly propagation: PropagationManager;
|
|
20
|
+
private readonly resourceAttributes;
|
|
21
|
+
private readonly shutdownHooks;
|
|
22
|
+
constructor(config: ObservabilityConfig);
|
|
23
|
+
resource(attributes: Record<string, unknown>): Observability;
|
|
24
|
+
shutdown(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/** Creates an observability instance. */
|
|
27
|
+
export declare function createObservability(config: ObservabilityConfig): DefaultObservability;
|
|
28
|
+
//# sourceMappingURL=observability.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.core.d.ts","sourceRoot":"","sources":["../../src/observability/observability.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACP,MAAM,aAAa,CAAC;AAarB;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,YAAY,MAAM,EAAE,mBAAmB,EA8CtC;IAED,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAO3D;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9B;CACF;AAED,yCAAyC;AACzC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAC1B,oBAAoB,CAEtB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Observability Core
|
|
3
|
+
*
|
|
4
|
+
* Central facade that coordinates logging, metrics, tracing, and context
|
|
5
|
+
* propagation. Other Zudojs packages depend on this abstraction rather
|
|
6
|
+
* than on specific telemetry implementations.
|
|
7
|
+
*/
|
|
8
|
+
import { LogLevel } from "../types.js";
|
|
9
|
+
import { StructuredLogger } from "../logger/index.js";
|
|
10
|
+
import { DefaultMetricsRegistry } from "../metrics/index.js";
|
|
11
|
+
import { DefaultTracer } from "../tracing/index.js";
|
|
12
|
+
import { AsyncPropagationManager } from "../propagation/index.js";
|
|
13
|
+
import { ConsoleLogExporter, ConsoleSpanExporter, ConsoleMetricExporter, } from "../exporter/index.js";
|
|
14
|
+
import { BatchSpanProcessor } from "../processor/index.js";
|
|
15
|
+
/**
|
|
16
|
+
* Default observability implementation.
|
|
17
|
+
*
|
|
18
|
+
* Provides a unified API for logging, metrics, tracing, and context propagation.
|
|
19
|
+
* Use this as the single entry point for all telemetry in a Zudojs application.
|
|
20
|
+
*/
|
|
21
|
+
export class DefaultObservability {
|
|
22
|
+
logger;
|
|
23
|
+
metrics;
|
|
24
|
+
tracer;
|
|
25
|
+
propagation;
|
|
26
|
+
resourceAttributes;
|
|
27
|
+
shutdownHooks = [];
|
|
28
|
+
constructor(config) {
|
|
29
|
+
this.resourceAttributes = {
|
|
30
|
+
"service.name": config.serviceName,
|
|
31
|
+
...(config.serviceVersion
|
|
32
|
+
? { "service.version": config.serviceVersion }
|
|
33
|
+
: {}),
|
|
34
|
+
...(config.environment
|
|
35
|
+
? { "deployment.environment": config.environment }
|
|
36
|
+
: {}),
|
|
37
|
+
...(config.resource ?? {}),
|
|
38
|
+
};
|
|
39
|
+
// Logger — uses console by default, or the provided exporter
|
|
40
|
+
const logExporter = config.logExporter ?? new ConsoleLogExporter();
|
|
41
|
+
this.logger = new StructuredLogger({
|
|
42
|
+
name: config.serviceName,
|
|
43
|
+
level: config.logLevel ?? LogLevel.INFO,
|
|
44
|
+
transport: {
|
|
45
|
+
name: "observability",
|
|
46
|
+
write: (record) => {
|
|
47
|
+
void logExporter.export([record]);
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// Metrics
|
|
52
|
+
this.metrics = new DefaultMetricsRegistry();
|
|
53
|
+
// Tracing
|
|
54
|
+
const spanExporter = config.spanExporter ?? new ConsoleSpanExporter();
|
|
55
|
+
const processor = new BatchSpanProcessor({ exporter: spanExporter });
|
|
56
|
+
this.tracer = new DefaultTracer({
|
|
57
|
+
processors: config.processors ?? [processor],
|
|
58
|
+
exporter: spanExporter,
|
|
59
|
+
resource: this.resourceAttributes,
|
|
60
|
+
});
|
|
61
|
+
// Propagation
|
|
62
|
+
this.propagation = new AsyncPropagationManager();
|
|
63
|
+
// Register shutdown hooks
|
|
64
|
+
this.shutdownHooks.push(async () => {
|
|
65
|
+
await processor.shutdown();
|
|
66
|
+
await spanExporter.shutdown();
|
|
67
|
+
await logExporter.shutdown();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
resource(attributes) {
|
|
71
|
+
const child = new DefaultObservability({
|
|
72
|
+
serviceName: this.resourceAttributes["service.name"] ?? "unknown",
|
|
73
|
+
resource: { ...this.resourceAttributes, ...attributes },
|
|
74
|
+
});
|
|
75
|
+
return child;
|
|
76
|
+
}
|
|
77
|
+
async shutdown() {
|
|
78
|
+
for (const hook of this.shutdownHooks) {
|
|
79
|
+
await hook();
|
|
80
|
+
}
|
|
81
|
+
if (this.tracer instanceof DefaultTracer) {
|
|
82
|
+
await this.tracer.shutdown();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Creates an observability instance. */
|
|
87
|
+
export function createObservability(config) {
|
|
88
|
+
return new DefaultObservability(config);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=observability.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.core.js","sourceRoot":"","sources":["../../src/observability/observability.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/processor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/processor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Processor
|
|
3
|
+
*
|
|
4
|
+
* Batch span processor that accumulates spans and exports them periodically.
|
|
5
|
+
* Memory-bounded with configurable batch size and flush interval.
|
|
6
|
+
*/
|
|
7
|
+
import type { ReadableSpan, Span, SpanExporter, SpanProcessor } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Collects completed spans and exports them in batches.
|
|
10
|
+
* Flushes on batch size or interval, whichever comes first.
|
|
11
|
+
*/
|
|
12
|
+
export declare class BatchSpanProcessor implements SpanProcessor {
|
|
13
|
+
private readonly exporter;
|
|
14
|
+
private readonly batchSize;
|
|
15
|
+
private readonly flushIntervalMs;
|
|
16
|
+
private buffer;
|
|
17
|
+
private timer?;
|
|
18
|
+
private shuttingDown;
|
|
19
|
+
constructor(options?: {
|
|
20
|
+
readonly exporter?: SpanExporter;
|
|
21
|
+
readonly batchSize?: number;
|
|
22
|
+
readonly flushIntervalMs?: number;
|
|
23
|
+
});
|
|
24
|
+
onStart(_span: Span): void;
|
|
25
|
+
onEnd(span: ReadableSpan): void;
|
|
26
|
+
flush(): Promise<void>;
|
|
27
|
+
shutdown(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
/** Creates a batch span processor. */
|
|
30
|
+
export declare function createBatchSpanProcessor(options?: {
|
|
31
|
+
readonly exporter?: SpanExporter;
|
|
32
|
+
readonly batchSize?: number;
|
|
33
|
+
readonly flushIntervalMs?: number;
|
|
34
|
+
}): BatchSpanProcessor;
|
|
35
|
+
//# sourceMappingURL=processor.batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.batch.d.ts","sourceRoot":"","sources":["../../src/processor/processor.batch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAE7B,YAAY,OAAO,CAAC,EAAE;QACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,EAQA;IAED,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAEzB;IAED,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAwB9B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3B;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9B;CACF;AAED,sCAAsC;AACtC,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,kBAAkB,CAErB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Processor
|
|
3
|
+
*
|
|
4
|
+
* Batch span processor that accumulates spans and exports them periodically.
|
|
5
|
+
* Memory-bounded with configurable batch size and flush interval.
|
|
6
|
+
*/
|
|
7
|
+
const DEFAULT_BATCH_SIZE = 512;
|
|
8
|
+
const DEFAULT_FLUSH_INTERVAL_MS = 5_000;
|
|
9
|
+
/**
|
|
10
|
+
* Collects completed spans and exports them in batches.
|
|
11
|
+
* Flushes on batch size or interval, whichever comes first.
|
|
12
|
+
*/
|
|
13
|
+
export class BatchSpanProcessor {
|
|
14
|
+
exporter;
|
|
15
|
+
batchSize;
|
|
16
|
+
flushIntervalMs;
|
|
17
|
+
buffer = [];
|
|
18
|
+
timer;
|
|
19
|
+
shuttingDown = false;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.exporter = options?.exporter ?? {
|
|
22
|
+
export: async () => { },
|
|
23
|
+
shutdown: async () => { },
|
|
24
|
+
};
|
|
25
|
+
this.batchSize = options?.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
26
|
+
this.flushIntervalMs =
|
|
27
|
+
options?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;
|
|
28
|
+
}
|
|
29
|
+
onStart(_span) {
|
|
30
|
+
// No-op: we only care about completed spans
|
|
31
|
+
}
|
|
32
|
+
onEnd(span) {
|
|
33
|
+
if (this.shuttingDown)
|
|
34
|
+
return;
|
|
35
|
+
this.buffer.push(span);
|
|
36
|
+
if (this.buffer.length >= this.batchSize) {
|
|
37
|
+
void this.flush();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!this.timer) {
|
|
41
|
+
this.timer = setInterval(() => {
|
|
42
|
+
void this.flush();
|
|
43
|
+
}, this.flushIntervalMs);
|
|
44
|
+
// Allow the process to exit even if the timer is active
|
|
45
|
+
if (this.timer &&
|
|
46
|
+
typeof this.timer === "object" &&
|
|
47
|
+
"unref" in this.timer) {
|
|
48
|
+
this.timer.unref();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async flush() {
|
|
53
|
+
if (this.buffer.length === 0)
|
|
54
|
+
return;
|
|
55
|
+
const batch = [...this.buffer];
|
|
56
|
+
this.buffer = [];
|
|
57
|
+
try {
|
|
58
|
+
await this.exporter.export(batch);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Telemetry failure should not bring down the application
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async shutdown() {
|
|
65
|
+
this.shuttingDown = true;
|
|
66
|
+
if (this.timer) {
|
|
67
|
+
clearInterval(this.timer);
|
|
68
|
+
this.timer = undefined;
|
|
69
|
+
}
|
|
70
|
+
await this.flush();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Creates a batch span processor. */
|
|
74
|
+
export function createBatchSpanProcessor(options) {
|
|
75
|
+
return new BatchSpanProcessor(options);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=processor.batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processor.batch.js","sourceRoot":"","sources":["../../src/processor/processor.batch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAExC;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACZ,QAAQ,CAAe;IACvB,SAAS,CAAS;IAClB,eAAe,CAAS;IACjC,MAAM,GAAmB,EAAE,CAAC;IAC5B,KAAK,CAAkC;IACvC,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,OAIX;QACC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI;YACnC,MAAM,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YACtB,QAAQ,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACzB,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAC;QAC1D,IAAI,CAAC,eAAe;YAClB,OAAO,EAAE,eAAe,IAAI,yBAAyB,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,KAAW;QACjB,4CAA4C;IAC9C,CAAC;IAED,KAAK,CAAC,IAAkB;QACtB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC5B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAEzB,wDAAwD;YACxD,IACE,IAAI,CAAC,KAAK;gBACV,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAC9B,OAAO,IAAI,IAAI,CAAC,KAAK,EACrB,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAED,sCAAsC;AACtC,MAAM,UAAU,wBAAwB,CAAC,OAIxC;IACC,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Propagation
|
|
3
|
+
*
|
|
4
|
+
* Context propagation with AsyncLocalStorage for request-scoped IDs.
|
|
5
|
+
*/
|
|
6
|
+
export { createPropagationContext, derivePropagationContext, getCurrentContext, AsyncPropagationManager, createPropagationManager, } from "./propagation.core.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/propagation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Propagation
|
|
3
|
+
*
|
|
4
|
+
* Context propagation with AsyncLocalStorage for request-scoped IDs.
|
|
5
|
+
*/
|
|
6
|
+
export { createPropagationContext, derivePropagationContext, getCurrentContext, AsyncPropagationManager, createPropagationManager, } from "./propagation.core.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/propagation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Propagation
|
|
3
|
+
*
|
|
4
|
+
* Context propagation using AsyncLocalStorage for request-scoped
|
|
5
|
+
* trace, span, request, and correlation IDs.
|
|
6
|
+
*/
|
|
7
|
+
import type { PropagationContext, PropagationContextOptions, PropagationManager } from "../types.js";
|
|
8
|
+
/** Creates a new propagation context. */
|
|
9
|
+
export declare function createPropagationContext(options?: PropagationContextOptions): PropagationContext;
|
|
10
|
+
/** Derives a child context from a parent. */
|
|
11
|
+
export declare function derivePropagationContext(parent: PropagationContext, overrides?: Partial<PropagationContextOptions>): PropagationContext;
|
|
12
|
+
/** Gets the current propagation context. */
|
|
13
|
+
export declare function getCurrentContext(): PropagationContext;
|
|
14
|
+
/**
|
|
15
|
+
* PropagationManager implementation using AsyncLocalStorage.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AsyncPropagationManager implements PropagationManager {
|
|
18
|
+
current(): PropagationContext;
|
|
19
|
+
run<T>(context: PropagationContext, fn: () => T | Promise<T>): Promise<T>;
|
|
20
|
+
derive(overrides?: Partial<PropagationContextOptions>): PropagationContext;
|
|
21
|
+
}
|
|
22
|
+
/** Creates a propagation manager. */
|
|
23
|
+
export declare function createPropagationManager(): AsyncPropagationManager;
|
|
24
|
+
//# sourceMappingURL=propagation.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.core.d.ts","sourceRoot":"","sources":["../../src/propagation/propagation.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAerB,yCAAyC;AACzC,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,yBAAyB,GAClC,kBAAkB,CAgBpB;AAED,6CAA6C;AAC7C,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC7C,kBAAkB,CAWpB;AAED,4CAA4C;AAC5C,wBAAgB,iBAAiB,IAAI,kBAAkB,CAEtD;AAED;;GAEG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,IAAI,kBAAkB,CAE5B;IAEK,GAAG,CAAC,CAAC,EACT,OAAO,EAAE,kBAAkB,EAC3B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAEZ;IAED,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAGzE;CACF;AAED,qCAAqC;AACrC,wBAAgB,wBAAwB,IAAI,uBAAuB,CAElE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Propagation
|
|
3
|
+
*
|
|
4
|
+
* Context propagation using AsyncLocalStorage for request-scoped
|
|
5
|
+
* trace, span, request, and correlation IDs.
|
|
6
|
+
*/
|
|
7
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
const storage = new AsyncLocalStorage();
|
|
10
|
+
/** Generates a random hex ID. */
|
|
11
|
+
function generateId(byteLength = 16) {
|
|
12
|
+
const bytes = new Uint8Array(byteLength);
|
|
13
|
+
for (let i = 0; i < byteLength; i++) {
|
|
14
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
15
|
+
}
|
|
16
|
+
return Array.from(bytes)
|
|
17
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
18
|
+
.join("");
|
|
19
|
+
}
|
|
20
|
+
/** Creates a new propagation context. */
|
|
21
|
+
export function createPropagationContext(options) {
|
|
22
|
+
const traceId = options?.traceId ?? generateId(16);
|
|
23
|
+
const spanId = options?.spanId ?? generateId(8);
|
|
24
|
+
return {
|
|
25
|
+
traceId,
|
|
26
|
+
spanId,
|
|
27
|
+
parentSpanId: options?.parentSpanId,
|
|
28
|
+
requestId: options?.requestId,
|
|
29
|
+
correlationId: options?.correlationId,
|
|
30
|
+
userId: options?.userId,
|
|
31
|
+
service: options?.service,
|
|
32
|
+
baggage: options?.baggage
|
|
33
|
+
? Object.freeze({ ...options.baggage })
|
|
34
|
+
: undefined,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Derives a child context from a parent. */
|
|
38
|
+
export function derivePropagationContext(parent, overrides) {
|
|
39
|
+
return createPropagationContext({
|
|
40
|
+
traceId: overrides?.traceId ?? parent.traceId,
|
|
41
|
+
spanId: overrides?.spanId ?? generateId(8),
|
|
42
|
+
parentSpanId: parent.spanId,
|
|
43
|
+
requestId: overrides?.requestId ?? parent.requestId,
|
|
44
|
+
correlationId: overrides?.correlationId ?? parent.correlationId,
|
|
45
|
+
userId: overrides?.userId ?? parent.userId,
|
|
46
|
+
service: overrides?.service ?? parent.service,
|
|
47
|
+
baggage: overrides?.baggage ?? parent.baggage,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** Gets the current propagation context. */
|
|
51
|
+
export function getCurrentContext() {
|
|
52
|
+
return storage.getStore() ?? createPropagationContext();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* PropagationManager implementation using AsyncLocalStorage.
|
|
56
|
+
*/
|
|
57
|
+
export class AsyncPropagationManager {
|
|
58
|
+
current() {
|
|
59
|
+
return getCurrentContext();
|
|
60
|
+
}
|
|
61
|
+
async run(context, fn) {
|
|
62
|
+
return storage.run(context, fn);
|
|
63
|
+
}
|
|
64
|
+
derive(overrides) {
|
|
65
|
+
const current = this.current();
|
|
66
|
+
return derivePropagationContext(current, overrides);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Creates a propagation manager. */
|
|
70
|
+
export function createPropagationManager() {
|
|
71
|
+
return new AsyncPropagationManager();
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=propagation.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.core.js","sourceRoot":"","sources":["../../src/propagation/propagation.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAsB,CAAC;AAE5D,iCAAiC;AACjC,SAAS,UAAU,CAAC,UAAU,GAAG,EAAE;IACjC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,wBAAwB,CACtC,OAAmC;IAEnC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO;QACP,MAAM;QACN,YAAY,EAAE,OAAO,EAAE,YAAY;QACnC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO;YACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YACvC,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,wBAAwB,CACtC,MAA0B,EAC1B,SAA8C;IAE9C,OAAO,wBAAwB,CAAC;QAC9B,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO;QAC7C,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC;QAC1C,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,SAAS,EAAE,SAAS,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS;QACnD,aAAa,EAAE,SAAS,EAAE,aAAa,IAAI,MAAM,CAAC,aAAa;QAC/D,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM;QAC1C,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO;QAC7C,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,wBAAwB,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC,OAAO;QACL,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CACP,OAA2B,EAC3B,EAAwB;QAExB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAA8C;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,wBAAwB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAED,qCAAqC;AACrC,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,uBAAuB,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/redaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/redaction/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/observability — Redaction
|
|
3
|
+
*
|
|
4
|
+
* Redacts sensitive fields from log contexts and trace attributes.
|
|
5
|
+
* Never automatically dumps passwords, tokens, cookies, or auth headers.
|
|
6
|
+
*/
|
|
7
|
+
import type { RedactionConfig } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Creates a redactor that replaces sensitive values in objects.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createRedactor(config?: RedactionConfig): (key: string, value: unknown) => unknown;
|
|
12
|
+
/**
|
|
13
|
+
* Redacts sensitive fields from a plain object.
|
|
14
|
+
* Returns a new object with sensitive values replaced.
|
|
15
|
+
*/
|
|
16
|
+
export declare function redactObject<T extends Record<string, unknown>>(obj: T, config?: RedactionConfig): T;
|
|
17
|
+
/** Checks if a field name is sensitive. */
|
|
18
|
+
export declare function isSensitiveField(fieldName: string, config?: RedactionConfig): boolean;
|
|
19
|
+
//# sourceMappingURL=redaction.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.core.d.ts","sourceRoot":"","sources":["../../src/redaction/redaction.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAuBnD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,eAAe,GACvB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAmB1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,GAAG,EAAE,CAAC,EACN,MAAM,CAAC,EAAE,eAAe,GACvB,CAAC,CAaH;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAKT"}
|