@nodii/telemetry 0.0.2 → 0.3.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 +223 -1
- package/dist/active-span.d.ts +12 -0
- package/dist/active-span.d.ts.map +1 -0
- package/dist/active-span.js +20 -0
- package/dist/active-span.js.map +1 -0
- package/dist/agent-invocable.d.ts +24 -0
- package/dist/agent-invocable.d.ts.map +1 -0
- package/dist/agent-invocable.js +64 -0
- package/dist/agent-invocable.js.map +1 -0
- package/dist/audit-types.d.ts +15 -0
- package/dist/audit-types.d.ts.map +1 -0
- package/dist/audit-types.js +39 -0
- package/dist/audit-types.js.map +1 -0
- package/dist/audit.d.ts +226 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +255 -0
- package/dist/audit.js.map +1 -0
- package/dist/configure.d.ts +34 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +23 -0
- package/dist/configure.js.map +1 -0
- package/dist/context.d.ts +40 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +70 -0
- package/dist/context.js.map +1 -0
- package/dist/drizzle/audit-schema.d.ts +884 -0
- package/dist/drizzle/audit-schema.d.ts.map +1 -0
- package/dist/drizzle/audit-schema.js +268 -0
- package/dist/drizzle/audit-schema.js.map +1 -0
- package/dist/drizzle/index.d.ts +3 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +5 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/index.d.ts +21 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -5
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +39 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +114 -0
- package/dist/init.js.map +1 -0
- package/dist/intent.d.ts +21 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +123 -0
- package/dist/intent.js.map +1 -0
- package/dist/logger.d.ts +19 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +99 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +53 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +152 -0
- package/dist/metrics.js.map +1 -0
- package/dist/otlp-adapter.d.ts +44 -0
- package/dist/otlp-adapter.d.ts.map +1 -0
- package/dist/otlp-adapter.js +351 -0
- package/dist/otlp-adapter.js.map +1 -0
- package/dist/outbox-emit.d.ts +34 -0
- package/dist/outbox-emit.d.ts.map +1 -0
- package/dist/outbox-emit.js +58 -0
- package/dist/outbox-emit.js.map +1 -0
- package/dist/redaction.d.ts +51 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +173 -0
- package/dist/redaction.js.map +1 -0
- package/dist/sdk-counters.d.ts +14 -0
- package/dist/sdk-counters.d.ts.map +1 -0
- package/dist/sdk-counters.js +42 -0
- package/dist/sdk-counters.js.map +1 -0
- package/dist/tracer.d.ts +63 -0
- package/dist/tracer.d.ts.map +1 -0
- package/dist/tracer.js +214 -0
- package/dist/tracer.js.map +1 -0
- package/dist/types.d.ts +230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +66 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +5 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +34 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +44 -7
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
// Real OTLP wiring per D153 + D154. This module replaces the no-op
|
|
2
|
+
// emitters/sinks/backends installed by tracer.ts, logger.ts, and
|
|
3
|
+
// metrics.ts at module-init time with real OTel SDK exporters writing
|
|
4
|
+
// to an OTLP gRPC collector (signoz/signoz-otel-collector) at
|
|
5
|
+
// `OTLPEndpoint` (default `http://localhost:4317`).
|
|
6
|
+
//
|
|
7
|
+
// Wired here:
|
|
8
|
+
// - NodeTracerProvider + BatchSpanProcessor + OTLPTraceExporter
|
|
9
|
+
// - LoggerProvider + BatchLogRecordProcessor + OTLPLogExporter
|
|
10
|
+
// - MeterProvider + PeriodicExportingMetricReader + OTLPMetricExporter
|
|
11
|
+
//
|
|
12
|
+
// We do NOT call NodeSDK.start() — instead we wire providers directly
|
|
13
|
+
// so we can keep the existing SpanEmitter / LogSink / MetricsBackend
|
|
14
|
+
// injection points the rest of the library depends on. This way we
|
|
15
|
+
// don't break the existing v0.1.0 API surface or its tests.
|
|
16
|
+
import { credentials } from "@grpc/grpc-js";
|
|
17
|
+
import { SpanKind as OtelSpanKind, SpanStatusCode, TraceFlags, context as otelContext, trace as otelTrace, } from "@opentelemetry/api";
|
|
18
|
+
import { SeverityNumber, logs as otelLogs, } from "@opentelemetry/api-logs";
|
|
19
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-grpc";
|
|
20
|
+
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-grpc";
|
|
21
|
+
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
|
|
22
|
+
import { Resource } from "@opentelemetry/resources";
|
|
23
|
+
import { BatchLogRecordProcessor, LoggerProvider, } from "@opentelemetry/sdk-logs";
|
|
24
|
+
import { AggregationTemporality, MeterProvider, PeriodicExportingMetricReader, } from "@opentelemetry/sdk-metrics";
|
|
25
|
+
import { BatchSpanProcessor, NodeTracerProvider, } from "@opentelemetry/sdk-trace-node";
|
|
26
|
+
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME, ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from "@opentelemetry/semantic-conventions";
|
|
27
|
+
import { _setLogSink } from "./logger";
|
|
28
|
+
import { _setMetricsBackend, } from "./metrics";
|
|
29
|
+
import { incSdkCounter } from "./sdk-counters";
|
|
30
|
+
import { _setSpanEmitter } from "./tracer";
|
|
31
|
+
let activeHandle = null;
|
|
32
|
+
/**
|
|
33
|
+
* Installs the real OTLP exporters by replacing the no-op emitter,
|
|
34
|
+
* sink, and backend with adapters that flush to OTel SDK providers
|
|
35
|
+
* wired to OTLP gRPC.
|
|
36
|
+
*
|
|
37
|
+
* Idempotent — second call returns the same handle.
|
|
38
|
+
*/
|
|
39
|
+
export function installOtlpAdapter(cfg) {
|
|
40
|
+
if (activeHandle)
|
|
41
|
+
return activeHandle;
|
|
42
|
+
// Normalize the endpoint so all 3 languages accept the same shape.
|
|
43
|
+
// TS's OTLP exporter requires the `http://` or `https://` scheme on
|
|
44
|
+
// `url`. Python/Go accept bare host:port. We accept either and
|
|
45
|
+
// canonicalize for TS by adding `http://` if missing.
|
|
46
|
+
const otlpUrl = normalizeOtlpUrlForTs(cfg.otlpEndpoint);
|
|
47
|
+
const resource = new Resource({
|
|
48
|
+
[ATTR_SERVICE_NAME]: cfg.serviceName,
|
|
49
|
+
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: cfg.env,
|
|
50
|
+
...(cfg.serviceVersion
|
|
51
|
+
? { [ATTR_SERVICE_VERSION]: cfg.serviceVersion }
|
|
52
|
+
: {}),
|
|
53
|
+
...(cfg.deploymentRegion ? { "cloud.region": cfg.deploymentRegion } : {}),
|
|
54
|
+
...cfg.resourceAttributes,
|
|
55
|
+
});
|
|
56
|
+
// ── Trace pipeline. D153 sending_queue=5000; drop on full.
|
|
57
|
+
const traceExporter = new OTLPTraceExporter({
|
|
58
|
+
url: otlpUrl,
|
|
59
|
+
credentials: credentials.createInsecure(),
|
|
60
|
+
});
|
|
61
|
+
const batchSpanProcessor = new BatchSpanProcessor(traceExporter, {
|
|
62
|
+
maxQueueSize: cfg.errorHandling.otlpSendingQueueSize,
|
|
63
|
+
maxExportBatchSize: 512,
|
|
64
|
+
scheduledDelayMillis: 1000,
|
|
65
|
+
exportTimeoutMillis: 10000,
|
|
66
|
+
});
|
|
67
|
+
const tracerProvider = new NodeTracerProvider({
|
|
68
|
+
resource,
|
|
69
|
+
spanProcessors: [batchSpanProcessor],
|
|
70
|
+
});
|
|
71
|
+
tracerProvider.register();
|
|
72
|
+
// ── Log pipeline. D153 backpressure shares the same lock.
|
|
73
|
+
const logExporter = new OTLPLogExporter({
|
|
74
|
+
url: otlpUrl,
|
|
75
|
+
credentials: credentials.createInsecure(),
|
|
76
|
+
});
|
|
77
|
+
const logRecordProcessor = new BatchLogRecordProcessor(logExporter, {
|
|
78
|
+
maxQueueSize: cfg.errorHandling.otlpSendingQueueSize,
|
|
79
|
+
maxExportBatchSize: 512,
|
|
80
|
+
scheduledDelayMillis: 1000,
|
|
81
|
+
exportTimeoutMillis: 10000,
|
|
82
|
+
});
|
|
83
|
+
const loggerProvider = new LoggerProvider({ resource });
|
|
84
|
+
loggerProvider.addLogRecordProcessor(logRecordProcessor);
|
|
85
|
+
otelLogs.setGlobalLoggerProvider(loggerProvider);
|
|
86
|
+
// ── Metrics pipeline. D21: delta temporality for counters + histograms.
|
|
87
|
+
const metricExporter = new OTLPMetricExporter({
|
|
88
|
+
url: otlpUrl,
|
|
89
|
+
credentials: credentials.createInsecure(),
|
|
90
|
+
temporalityPreference: AggregationTemporality.DELTA,
|
|
91
|
+
});
|
|
92
|
+
const metricReader = new PeriodicExportingMetricReader({
|
|
93
|
+
exporter: metricExporter,
|
|
94
|
+
exportIntervalMillis: 10000,
|
|
95
|
+
exportTimeoutMillis: 5000,
|
|
96
|
+
});
|
|
97
|
+
const meterProvider = new MeterProvider({
|
|
98
|
+
resource,
|
|
99
|
+
readers: [metricReader],
|
|
100
|
+
});
|
|
101
|
+
// ── Wire SpanEmitter to OTel tracer.
|
|
102
|
+
const otelTracer = tracerProvider.getTracer(cfg.serviceName);
|
|
103
|
+
const spanEmitter = {
|
|
104
|
+
emit(record) {
|
|
105
|
+
// We already produced our own span record with hex IDs. The
|
|
106
|
+
// cleanest path is to start an OTel span with the same name,
|
|
107
|
+
// attributes, and status using the existing trace context, then
|
|
108
|
+
// end it. Timestamps are taken from the record so the trace
|
|
109
|
+
// shape matches.
|
|
110
|
+
try {
|
|
111
|
+
const span = otelTracer.startSpan(record.name, {
|
|
112
|
+
startTime: hrtimeFromNs(record.start_ns),
|
|
113
|
+
attributes: toAttributes(record.attributes),
|
|
114
|
+
kind: kindToOTel(record.kind),
|
|
115
|
+
});
|
|
116
|
+
for (const ev of record.events) {
|
|
117
|
+
span.addEvent(ev.name, ev.attributes ? toAttributes(ev.attributes) : undefined, hrtimeFromNs(ev.ts_ns));
|
|
118
|
+
}
|
|
119
|
+
if (record.status === "ERROR") {
|
|
120
|
+
span.setStatus({
|
|
121
|
+
code: SpanStatusCode.ERROR,
|
|
122
|
+
message: record.status_message,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
else if (record.status === "OK") {
|
|
126
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
127
|
+
}
|
|
128
|
+
span.end(hrtimeFromNs(record.end_ns));
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
incSdkCounter("telemetry.sdk.export_failures_total", {
|
|
132
|
+
signal: "traces",
|
|
133
|
+
reason: classifyExportError(err),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
_setSpanEmitter(spanEmitter);
|
|
139
|
+
// ── Wire LogSink to OTel logger.
|
|
140
|
+
const otelLogger = loggerProvider.getLogger(cfg.serviceName);
|
|
141
|
+
const logSink = (envelope, fields) => {
|
|
142
|
+
try {
|
|
143
|
+
const traceCtx = currentTraceCtx();
|
|
144
|
+
const merged = {
|
|
145
|
+
severityNumber: severityFromLevel(envelope.level),
|
|
146
|
+
severityText: envelope.level,
|
|
147
|
+
body: envelope.msg,
|
|
148
|
+
attributes: toAttributes(buildLogAttributes(envelope, fields)),
|
|
149
|
+
timestamp: Date.now(),
|
|
150
|
+
...(traceCtx
|
|
151
|
+
? {
|
|
152
|
+
traceId: traceCtx.traceId,
|
|
153
|
+
spanId: traceCtx.spanId,
|
|
154
|
+
traceFlags: traceCtx.traceFlags,
|
|
155
|
+
}
|
|
156
|
+
: {}),
|
|
157
|
+
};
|
|
158
|
+
otelLogger.emit(merged);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
incSdkCounter("telemetry.sdk.export_failures_total", {
|
|
162
|
+
signal: "logs",
|
|
163
|
+
reason: classifyExportError(err),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
_setLogSink(logSink);
|
|
168
|
+
// ── Wire MetricsBackend to OTel meter.
|
|
169
|
+
const meter = meterProvider.getMeter(cfg.serviceName);
|
|
170
|
+
const counterCache = new Map();
|
|
171
|
+
const histogramCache = new Map();
|
|
172
|
+
const otelBackend = {
|
|
173
|
+
recordCounter(name, by, labels) {
|
|
174
|
+
try {
|
|
175
|
+
let c = counterCache.get(name);
|
|
176
|
+
if (!c) {
|
|
177
|
+
c = meter.createCounter(name);
|
|
178
|
+
counterCache.set(name, c);
|
|
179
|
+
}
|
|
180
|
+
c.add(by, toAttributes(labels));
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
incSdkCounter("telemetry.sdk.export_failures_total", {
|
|
184
|
+
signal: "metrics",
|
|
185
|
+
reason: classifyExportError(err),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
recordHistogram(name, value, labels) {
|
|
190
|
+
try {
|
|
191
|
+
let h = histogramCache.get(name);
|
|
192
|
+
if (!h) {
|
|
193
|
+
h = meter.createHistogram(name);
|
|
194
|
+
histogramCache.set(name, h);
|
|
195
|
+
}
|
|
196
|
+
h.record(value, toAttributes(labels));
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
incSdkCounter("telemetry.sdk.export_failures_total", {
|
|
200
|
+
signal: "metrics",
|
|
201
|
+
reason: classifyExportError(err),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
_setMetricsBackend(otelBackend);
|
|
207
|
+
activeHandle = {
|
|
208
|
+
tracerProvider,
|
|
209
|
+
loggerProvider,
|
|
210
|
+
meterProvider,
|
|
211
|
+
async forceFlush() {
|
|
212
|
+
await Promise.allSettled([
|
|
213
|
+
tracerProvider.forceFlush(),
|
|
214
|
+
loggerProvider.forceFlush(),
|
|
215
|
+
meterProvider.forceFlush(),
|
|
216
|
+
]);
|
|
217
|
+
},
|
|
218
|
+
async shutdown() {
|
|
219
|
+
await this.forceFlush();
|
|
220
|
+
await Promise.allSettled([
|
|
221
|
+
tracerProvider.shutdown(),
|
|
222
|
+
loggerProvider.shutdown(),
|
|
223
|
+
meterProvider.shutdown(),
|
|
224
|
+
]);
|
|
225
|
+
activeHandle = null;
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
return activeHandle;
|
|
229
|
+
}
|
|
230
|
+
/** Force-flushes the active OTLP pipelines. No-op when not installed. */
|
|
231
|
+
export async function forceFlush() {
|
|
232
|
+
if (!activeHandle)
|
|
233
|
+
return;
|
|
234
|
+
await activeHandle.forceFlush();
|
|
235
|
+
}
|
|
236
|
+
/** Shuts down the OTLP pipelines. No-op when not installed. */
|
|
237
|
+
export async function shutdownOtlpAdapter() {
|
|
238
|
+
if (!activeHandle)
|
|
239
|
+
return;
|
|
240
|
+
await activeHandle.shutdown();
|
|
241
|
+
}
|
|
242
|
+
/** For tests + introspection. */
|
|
243
|
+
export function getOtlpAdapterHandle() {
|
|
244
|
+
return activeHandle;
|
|
245
|
+
}
|
|
246
|
+
/** Test-only reset; does NOT shutdown providers. */
|
|
247
|
+
export function _resetOtlpAdapterForTests() {
|
|
248
|
+
activeHandle = null;
|
|
249
|
+
}
|
|
250
|
+
// ── helpers ────────────────────────────────────────────────────────
|
|
251
|
+
function hrtimeFromNs(ns) {
|
|
252
|
+
const n = typeof ns === "bigint" ? ns : BigInt(Math.floor(ns));
|
|
253
|
+
const seconds = Number(n / 1000000000n);
|
|
254
|
+
const nanos = Number(n % 1000000000n);
|
|
255
|
+
return [seconds, nanos];
|
|
256
|
+
}
|
|
257
|
+
function toAttributes(attrs) {
|
|
258
|
+
const out = {};
|
|
259
|
+
for (const [k, v] of Object.entries(attrs)) {
|
|
260
|
+
if (v === null || v === undefined)
|
|
261
|
+
continue;
|
|
262
|
+
if (typeof v === "string" ||
|
|
263
|
+
typeof v === "number" ||
|
|
264
|
+
typeof v === "boolean") {
|
|
265
|
+
out[k] = v;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
out[k] = JSON.stringify(v);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return out;
|
|
272
|
+
}
|
|
273
|
+
function kindToOTel(kind) {
|
|
274
|
+
switch (kind) {
|
|
275
|
+
case "SERVER":
|
|
276
|
+
return OtelSpanKind.SERVER;
|
|
277
|
+
case "CLIENT":
|
|
278
|
+
return OtelSpanKind.CLIENT;
|
|
279
|
+
case "PRODUCER":
|
|
280
|
+
return OtelSpanKind.PRODUCER;
|
|
281
|
+
case "CONSUMER":
|
|
282
|
+
return OtelSpanKind.CONSUMER;
|
|
283
|
+
default:
|
|
284
|
+
return OtelSpanKind.INTERNAL;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function severityFromLevel(level) {
|
|
288
|
+
switch (level) {
|
|
289
|
+
case "debug":
|
|
290
|
+
return SeverityNumber.DEBUG;
|
|
291
|
+
case "info":
|
|
292
|
+
return SeverityNumber.INFO;
|
|
293
|
+
case "warn":
|
|
294
|
+
return SeverityNumber.WARN;
|
|
295
|
+
case "error":
|
|
296
|
+
return SeverityNumber.ERROR;
|
|
297
|
+
default:
|
|
298
|
+
return SeverityNumber.UNSPECIFIED;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
function buildLogAttributes(envelope, fields) {
|
|
302
|
+
const attrs = {
|
|
303
|
+
"service.name": envelope.service,
|
|
304
|
+
"deployment.environment.name": envelope.env,
|
|
305
|
+
tenant_id: envelope.tenant_id,
|
|
306
|
+
request_id: envelope.request_id,
|
|
307
|
+
...(envelope.user_id ? { user_id: envelope.user_id } : {}),
|
|
308
|
+
...(envelope.actor_type ? { actor_type: envelope.actor_type } : {}),
|
|
309
|
+
...(envelope.on_behalf_of ? { on_behalf_of: envelope.on_behalf_of } : {}),
|
|
310
|
+
...(envelope.intent_id ? { intent_id: envelope.intent_id } : {}),
|
|
311
|
+
...(envelope.trace_id ? { "telemetry.trace_id": envelope.trace_id } : {}),
|
|
312
|
+
...(envelope.span_id ? { "telemetry.span_id": envelope.span_id } : {}),
|
|
313
|
+
...fields,
|
|
314
|
+
};
|
|
315
|
+
return attrs;
|
|
316
|
+
}
|
|
317
|
+
function currentTraceCtx() {
|
|
318
|
+
const span = otelTrace.getSpan(otelContext.active());
|
|
319
|
+
if (!span)
|
|
320
|
+
return null;
|
|
321
|
+
const sc = span.spanContext();
|
|
322
|
+
if (!sc.traceId)
|
|
323
|
+
return null;
|
|
324
|
+
return {
|
|
325
|
+
traceId: sc.traceId,
|
|
326
|
+
spanId: sc.spanId,
|
|
327
|
+
traceFlags: sc.traceFlags ?? TraceFlags.NONE,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function classifyExportError(err) {
|
|
331
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
332
|
+
if (/queue/i.test(msg))
|
|
333
|
+
return "queue_full";
|
|
334
|
+
if (/timeout/i.test(msg))
|
|
335
|
+
return "timeout";
|
|
336
|
+
if (/5\d\d/.test(msg))
|
|
337
|
+
return "server_5xx";
|
|
338
|
+
return "network_error";
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Cross-language endpoint normalization. Python and Go accept
|
|
342
|
+
* `localhost:4317`; TS's OTLP gRPC exporter requires a URL with
|
|
343
|
+
* scheme. We accept both and prepend `http://` for TS if absent.
|
|
344
|
+
*/
|
|
345
|
+
function normalizeOtlpUrlForTs(endpoint) {
|
|
346
|
+
const trimmed = endpoint.trim();
|
|
347
|
+
if (/^[a-zA-Z]+:\/\//.test(trimmed))
|
|
348
|
+
return trimmed;
|
|
349
|
+
return `http://${trimmed}`;
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=otlp-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-adapter.js","sourceRoot":"","sources":["../src/otlp-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface OutboxEvent {
|
|
2
|
+
/** Locked topic format `<service>.<entity>.<verb>.v<N>`. */
|
|
3
|
+
topic: string;
|
|
4
|
+
/** Stable event id. UUIDv7 preferred. */
|
|
5
|
+
event_id: string;
|
|
6
|
+
payload: Record<string, unknown>;
|
|
7
|
+
/** Schema version embedded in the topic; surfaced here for outbox writers that want it as a column. */
|
|
8
|
+
schema_version: number;
|
|
9
|
+
}
|
|
10
|
+
export interface OutboxColumns {
|
|
11
|
+
tenant_id: string | null;
|
|
12
|
+
request_id: string | null;
|
|
13
|
+
intent_id: string | null;
|
|
14
|
+
trace_parent: string | null;
|
|
15
|
+
trace_state: string | null;
|
|
16
|
+
context_envelope: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export type OutboxWriter = (event: OutboxEvent, columns: OutboxColumns) => Promise<void> | void;
|
|
19
|
+
/**
|
|
20
|
+
* SDK-internal: the `@nodii/telemetry/outbox` adapter or service init
|
|
21
|
+
* code sets the writer. Public callers MUST NOT call this directly.
|
|
22
|
+
*/
|
|
23
|
+
export declare function _setOutboxWriter(w: OutboxWriter): void;
|
|
24
|
+
export declare function _resetOutboxWriterForTests(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Stage an outbox row. Per D43: hybrid columns + context_envelope
|
|
27
|
+
* jsonb. The columns are derived from the active NodiiContext + OTel
|
|
28
|
+
* span; the envelope is a JSON blob of the remaining context fields.
|
|
29
|
+
*
|
|
30
|
+
* Returns the resolved columns so callers (typically the intent
|
|
31
|
+
* lifecycle) can verify what was staged.
|
|
32
|
+
*/
|
|
33
|
+
export declare function emitOutbox(event: OutboxEvent): Promise<OutboxColumns>;
|
|
34
|
+
//# sourceMappingURL=outbox-emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox-emit.d.ts","sourceRoot":"","sources":["../src/outbox-emit.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,uGAAuG;IACvG,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,aAAa,KACnB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAQ1B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAEtD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAoB3E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Outbox emit helper.
|
|
2
|
+
//
|
|
3
|
+
// Per D43 + the communication-doctrine § 9.1: outbox rows carry the
|
|
4
|
+
// propagation columns directly (`tenant_id, request_id, intent_id,
|
|
5
|
+
// trace_parent, trace_state`) plus a `context_envelope jsonb` blob.
|
|
6
|
+
//
|
|
7
|
+
// `@nodii/telemetry` exposes a thin emit helper that consumers call to
|
|
8
|
+
// stage an outbox row in their service's transaction. The library
|
|
9
|
+
// itself does NOT own the outbox table — that's a per-service schema.
|
|
10
|
+
// Consumers register a writer via `_setOutboxWriter` (typically through
|
|
11
|
+
// the `@nodii/telemetry/outbox` subpath adapter); the default is a
|
|
12
|
+
// no-op that allows `intent.begin/complete/abandon` to call through
|
|
13
|
+
// without crashing when the consumer hasn't wired the outbox yet.
|
|
14
|
+
import { getContext } from "./context";
|
|
15
|
+
import { getActiveSpan } from "./active-span";
|
|
16
|
+
const noopWriter = () => {
|
|
17
|
+
/* no-op default; consumers wire a real writer */
|
|
18
|
+
};
|
|
19
|
+
let writer = noopWriter;
|
|
20
|
+
/**
|
|
21
|
+
* SDK-internal: the `@nodii/telemetry/outbox` adapter or service init
|
|
22
|
+
* code sets the writer. Public callers MUST NOT call this directly.
|
|
23
|
+
*/
|
|
24
|
+
export function _setOutboxWriter(w) {
|
|
25
|
+
writer = w;
|
|
26
|
+
}
|
|
27
|
+
export function _resetOutboxWriterForTests() {
|
|
28
|
+
writer = noopWriter;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Stage an outbox row. Per D43: hybrid columns + context_envelope
|
|
32
|
+
* jsonb. The columns are derived from the active NodiiContext + OTel
|
|
33
|
+
* span; the envelope is a JSON blob of the remaining context fields.
|
|
34
|
+
*
|
|
35
|
+
* Returns the resolved columns so callers (typically the intent
|
|
36
|
+
* lifecycle) can verify what was staged.
|
|
37
|
+
*/
|
|
38
|
+
export async function emitOutbox(event) {
|
|
39
|
+
const ctx = getContext();
|
|
40
|
+
const span = getActiveSpan();
|
|
41
|
+
const traceParent = span && ctx ? `00-${span.trace_id}-${span.span_id}-01` : null;
|
|
42
|
+
const columns = {
|
|
43
|
+
tenant_id: ctx?.tenant_id ?? null,
|
|
44
|
+
request_id: ctx?.request_id ?? null,
|
|
45
|
+
intent_id: ctx?.intent_id ?? null,
|
|
46
|
+
trace_parent: traceParent,
|
|
47
|
+
trace_state: null,
|
|
48
|
+
context_envelope: {
|
|
49
|
+
user_id: ctx?.user_id ?? null,
|
|
50
|
+
actor_type: ctx?.actor_type ?? null,
|
|
51
|
+
on_behalf_of: ctx?.on_behalf_of ?? null,
|
|
52
|
+
role: ctx?.role ?? null,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
await writer(event, columns);
|
|
56
|
+
return columns;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=outbox-emit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox-emit.js","sourceRoot":"","sources":["../src/outbox-emit.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,kEAAkE;AAClE,sEAAsE;AACtE,wEAAwE;AACxE,mEAAmE;AACnE,oEAAoE;AACpE,kEAAkE;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AA0B9C,MAAM,UAAU,GAAiB,GAAG,EAAE;IACpC,iDAAiD;AACnD,CAAC,CAAC;AAEF,IAAI,MAAM,GAAiB,UAAU,CAAC;AAEtC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAe;IAC9C,MAAM,GAAG,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,GAAG,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAkB;IACjD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GACf,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,MAAM,OAAO,GAAkB;QAC7B,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI;QACjC,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,IAAI;QACnC,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI;QACjC,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE;YAChB,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,IAAI;YAC7B,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,IAAI;YACnC,YAAY,EAAE,GAAG,EAAE,YAAY,IAAI,IAAI;YACvC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI;SACxB;KACF,CAAC;IACF,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D2 PII field-name allowlist. Keys whose name matches one of these
|
|
3
|
+
* (case-insensitive) get their value stripped to `[REDACTED]` before
|
|
4
|
+
* the log/span attribute is emitted.
|
|
5
|
+
*
|
|
6
|
+
* Source: the legacy telemetry doctrine D2 PII list, transcribed for
|
|
7
|
+
* v0.1.0. Adding new keys is an ADR-gated change.
|
|
8
|
+
*/
|
|
9
|
+
export declare const PII_FIELD_NAMES: readonly string[];
|
|
10
|
+
/**
|
|
11
|
+
* Returns true iff the key name matches the D2 PII field-name list.
|
|
12
|
+
* Comparison is case-insensitive on the bare key (no normalization
|
|
13
|
+
* beyond `toLowerCase()`).
|
|
14
|
+
*/
|
|
15
|
+
export declare function isPiiFieldName(key: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Redacts an arbitrary record by replacing values whose keys match the
|
|
18
|
+
* D2 PII list with `[REDACTED]`. Nested records are walked recursively.
|
|
19
|
+
* Arrays are walked element-by-element. Primitives at the top level are
|
|
20
|
+
* returned untouched (this function is for records only).
|
|
21
|
+
*
|
|
22
|
+
* Throws nothing under normal input; if a value is a non-serializable
|
|
23
|
+
* object (e.g. circular reference encountered via JSON.stringify
|
|
24
|
+
* elsewhere) the caller wraps this in `attemptRedaction()` to catch.
|
|
25
|
+
*/
|
|
26
|
+
export declare function redactFields(input: Record<string, unknown>): Record<string, unknown>;
|
|
27
|
+
/**
|
|
28
|
+
* Apply the D15 regex pass to a string. Returns the redacted string.
|
|
29
|
+
* Each pattern that fires replaces its match with [REDACTED]; multiple
|
|
30
|
+
* matches per string are all replaced.
|
|
31
|
+
*/
|
|
32
|
+
export declare function redactString(s: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Fail-closed wrapper. Returns:
|
|
35
|
+
* - `{ ok: true, redacted }` when redaction succeeded.
|
|
36
|
+
* - `{ ok: false, reason }` when redaction threw — caller drops the
|
|
37
|
+
* record and bumps `telemetry.sdk.redaction_failure_total{reason}`.
|
|
38
|
+
*
|
|
39
|
+
* Per D15 the line is DROPPED, not emitted unredacted. This is the
|
|
40
|
+
* canonical pass; the collector pass (D59) is defense-in-depth.
|
|
41
|
+
*/
|
|
42
|
+
export type RedactionResult<T> = {
|
|
43
|
+
ok: true;
|
|
44
|
+
redacted: T;
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
reason: string;
|
|
48
|
+
};
|
|
49
|
+
export declare function attemptRedactFields(input: Record<string, unknown>): RedactionResult<Record<string, unknown>>;
|
|
50
|
+
export declare function attemptRedactString(s: string): RedactionResult<string>;
|
|
51
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAaA;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAyCnC,CAAC;AAwCX;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS1C;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAStE"}
|