raffel 1.1.66 → 1.1.67

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.
Files changed (79) hide show
  1. package/dist/adapters/grpc.d.ts.map +1 -1
  2. package/dist/adapters/grpc.js +1 -0
  3. package/dist/adapters/grpc.js.map +1 -1
  4. package/dist/adapters/http.d.ts +6 -0
  5. package/dist/adapters/http.d.ts.map +1 -1
  6. package/dist/adapters/http.js +17 -11
  7. package/dist/adapters/http.js.map +1 -1
  8. package/dist/core/router.d.ts.map +1 -1
  9. package/dist/core/router.js +13 -6
  10. package/dist/core/router.js.map +1 -1
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/middleware/compose.d.ts +5 -0
  16. package/dist/middleware/compose.d.ts.map +1 -1
  17. package/dist/middleware/compose.js +37 -0
  18. package/dist/middleware/compose.js.map +1 -1
  19. package/dist/protocols/mcp/auth.d.ts.map +1 -1
  20. package/dist/protocols/mcp/auth.js +6 -1
  21. package/dist/protocols/mcp/auth.js.map +1 -1
  22. package/dist/server/builder/execution-bootstrap.d.ts.map +1 -1
  23. package/dist/server/builder/execution-bootstrap.js +1 -0
  24. package/dist/server/builder/execution-bootstrap.js.map +1 -1
  25. package/dist/server/builder/execution-entrypoint.d.ts.map +1 -1
  26. package/dist/server/builder/execution-entrypoint.js +5 -0
  27. package/dist/server/builder/execution-entrypoint.js.map +1 -1
  28. package/dist/server/telemetry-bootstrap.d.ts +3 -0
  29. package/dist/server/telemetry-bootstrap.d.ts.map +1 -1
  30. package/dist/server/telemetry-bootstrap.js +16 -3
  31. package/dist/server/telemetry-bootstrap.js.map +1 -1
  32. package/dist/server/types/lifecycle-types.d.ts +5 -0
  33. package/dist/server/types/lifecycle-types.d.ts.map +1 -1
  34. package/dist/tracing/http.d.ts.map +1 -1
  35. package/dist/tracing/http.js +1 -0
  36. package/dist/tracing/http.js.map +1 -1
  37. package/dist/tracing/index.d.ts +3 -0
  38. package/dist/tracing/index.d.ts.map +1 -1
  39. package/dist/tracing/index.js +1 -0
  40. package/dist/tracing/index.js.map +1 -1
  41. package/dist/tracing/interceptor.d.ts +6 -1
  42. package/dist/tracing/interceptor.d.ts.map +1 -1
  43. package/dist/tracing/interceptor.js +131 -34
  44. package/dist/tracing/interceptor.js.map +1 -1
  45. package/dist/tracing/opentelemetry-span.d.ts +11 -0
  46. package/dist/tracing/opentelemetry-span.d.ts.map +1 -0
  47. package/dist/tracing/opentelemetry-span.js +101 -0
  48. package/dist/tracing/opentelemetry-span.js.map +1 -0
  49. package/dist/tracing/opentelemetry.d.ts +22 -0
  50. package/dist/tracing/opentelemetry.d.ts.map +1 -0
  51. package/dist/tracing/opentelemetry.js +111 -0
  52. package/dist/tracing/opentelemetry.js.map +1 -0
  53. package/dist/tracing/safe-attributes.d.ts +8 -0
  54. package/dist/tracing/safe-attributes.d.ts.map +1 -0
  55. package/dist/tracing/safe-attributes.js +53 -0
  56. package/dist/tracing/safe-attributes.js.map +1 -0
  57. package/dist/tracing/trace-context.d.ts +6 -0
  58. package/dist/tracing/trace-context.d.ts.map +1 -0
  59. package/dist/tracing/trace-context.js +26 -0
  60. package/dist/tracing/trace-context.js.map +1 -0
  61. package/dist/tracing/tracer.d.ts.map +1 -1
  62. package/dist/tracing/tracer.js +3 -26
  63. package/dist/tracing/tracer.js.map +1 -1
  64. package/dist/tracing/types.d.ts +7 -0
  65. package/dist/tracing/types.d.ts.map +1 -1
  66. package/dist/tracing/types.js.map +1 -1
  67. package/dist/types/context.d.ts +12 -1
  68. package/dist/types/context.d.ts.map +1 -1
  69. package/dist/types/context.js +10 -2
  70. package/dist/types/context.js.map +1 -1
  71. package/dist/types/index.d.ts +1 -1
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/types/index.js.map +1 -1
  74. package/dist/ui/core/router.d.ts.map +1 -1
  75. package/dist/ui/types/context.d.ts +12 -1
  76. package/dist/ui/types/context.d.ts.map +1 -1
  77. package/dist/ui/types/index.d.ts +1 -1
  78. package/dist/ui/types/index.d.ts.map +1 -1
  79. package/package.json +4 -1
@@ -20,21 +20,127 @@
20
20
  import { applyHttpRouteToSpan } from './http.js';
21
21
  import { hexTraceIdToDecimal, hexSpanIdToDecimal } from './decimal-id.js';
22
22
  import { parseBaggageHeader } from './baggage.js';
23
+ import { filterSensitiveSpanAttributes } from './safe-attributes.js';
24
+ import { isAsyncIterable } from '../utils/type-guards.js';
25
+ function recordSpanFailure(span, error) {
26
+ if (error instanceof Error) {
27
+ span.recordError(error);
28
+ }
29
+ else {
30
+ span.setStatus('error', String(error));
31
+ }
32
+ }
33
+ async function* traceAsyncIterable(tracer, span, baggage, iterable) {
34
+ const iterator = iterable[Symbol.asyncIterator]();
35
+ let iteratorDone = false;
36
+ let failed = false;
37
+ try {
38
+ while (true) {
39
+ const result = await tracer.runInSpanContext(span, baggage, () => iterator.next());
40
+ if (result.done) {
41
+ iteratorDone = true;
42
+ return;
43
+ }
44
+ yield result.value;
45
+ }
46
+ }
47
+ catch (error) {
48
+ failed = true;
49
+ recordSpanFailure(span, error);
50
+ throw error;
51
+ }
52
+ finally {
53
+ try {
54
+ if (!iteratorDone && iterator.return) {
55
+ await tracer.runInSpanContext(span, baggage, () => iterator.return());
56
+ }
57
+ }
58
+ catch (error) {
59
+ if (!failed) {
60
+ failed = true;
61
+ recordSpanFailure(span, error);
62
+ throw error;
63
+ }
64
+ }
65
+ finally {
66
+ if (!failed)
67
+ span.setStatus('ok');
68
+ span.finish();
69
+ }
70
+ }
71
+ }
72
+ function preserveAsyncIterableCapabilities(tracer, span, baggage, iterable) {
73
+ const tracedIterator = traceAsyncIterable(tracer, span, baggage, iterable)[Symbol.asyncIterator]();
74
+ return new Proxy(iterable, {
75
+ get(target, property) {
76
+ if (property === Symbol.asyncIterator) {
77
+ return () => tracedIterator;
78
+ }
79
+ if (property === 'next' && typeof Reflect.get(target, property) === 'function') {
80
+ return tracedIterator.next.bind(tracedIterator);
81
+ }
82
+ if (property === 'return' && typeof Reflect.get(target, property) === 'function') {
83
+ return tracedIterator.return?.bind(tracedIterator);
84
+ }
85
+ if (property === 'throw' && typeof Reflect.get(target, property) === 'function') {
86
+ return tracedIterator.throw?.bind(tracedIterator);
87
+ }
88
+ const value = Reflect.get(target, property, target);
89
+ return typeof value === 'function' ? value.bind(target) : value;
90
+ },
91
+ });
92
+ }
93
+ async function runWithSpan(tracer, span, baggage, operation) {
94
+ try {
95
+ const result = await tracer.runInSpanContext(span, baggage, operation);
96
+ if (isAsyncIterable(result)) {
97
+ return preserveAsyncIterableCapabilities(tracer, span, baggage, result);
98
+ }
99
+ span.setStatus('ok');
100
+ span.finish();
101
+ return result;
102
+ }
103
+ catch (error) {
104
+ recordSpanFailure(span, error);
105
+ span.finish();
106
+ throw error;
107
+ }
108
+ }
109
+ function createTraceOperation(tracer) {
110
+ return async (name, attributes, operation) => {
111
+ const parent = tracer.getActiveSpan();
112
+ const span = tracer.startSpan(name, {
113
+ kind: 'internal',
114
+ parent: parent?.context,
115
+ attributes: filterSensitiveSpanAttributes(attributes),
116
+ });
117
+ return runWithSpan(tracer, span, tracer.getBaggage(), operation);
118
+ };
119
+ }
120
+ function createTraceEvent(tracer) {
121
+ return (name, attributes = {}) => {
122
+ tracer.getActiveSpan()?.log(name, filterSensitiveSpanAttributes(attributes));
123
+ };
124
+ }
23
125
  /**
24
126
  * Create an interceptor that automatically traces requests
25
127
  */
26
- export function createTracingInterceptor(tracer) {
128
+ export function createTracingInterceptor(tracer, options = {}) {
27
129
  return async (envelope, ctx, next) => {
28
130
  const procedure = envelope.procedure ?? 'unknown';
29
131
  // Extract parent context from envelope metadata (if propagated)
30
132
  let parentContext;
31
133
  const metadata = envelope.metadata;
32
- if (metadata?.traceparent) {
33
- parentContext = tracer.extractContext({
134
+ const extractedParent = metadata?.traceparent
135
+ ? tracer.extractContext({
34
136
  traceparent: metadata.traceparent,
35
137
  tracestate: metadata.tracestate,
36
- });
37
- }
138
+ })
139
+ : undefined;
140
+ const activeParent = tracer.getActiveSpan()?.context;
141
+ parentContext = options.preferActiveParent
142
+ ? activeParent ?? extractedParent
143
+ : extractedParent ?? activeParent;
38
144
  // Incoming baggage (business context, not trace identity) travels the
39
145
  // same path as traceparent/tracestate — see extractMetadataFromHeaders.
40
146
  // Always a (possibly empty) object, never undefined, so a handler can
@@ -61,21 +167,22 @@ export function createTracingInterceptor(tracer) {
61
167
  const attributes = {
62
168
  'rpc.method': procedure,
63
169
  'rpc.system': 'raffel',
170
+ 'raffel.procedure': procedure,
64
171
  };
65
172
  if (isHttp && httpMethod) {
66
173
  attributes['http.request.method'] = httpMethod;
67
174
  if (httpRoute) {
68
175
  attributes['http.route'] = httpRoute;
69
176
  }
70
- if (httpPath) {
177
+ if (httpPath && !options.spanName) {
71
178
  attributes['url.path'] = httpPath;
72
179
  }
73
180
  }
74
181
  // Start span with parent context
75
- const span = tracer.startSpan(spanName, {
76
- kind: 'server',
182
+ const span = tracer.startSpan(options.spanName ?? spanName, {
183
+ kind: options.spanKind ?? 'server',
77
184
  parent: parentContext,
78
- attributes,
185
+ attributes: filterSensitiveSpanAttributes(attributes),
79
186
  });
80
187
  // Stash tracing context on `ctx` so downstream interceptors (logging,
81
188
  // metrics) and handlers can correlate. `ddTraceId` / `ddSpanId` are the
@@ -91,6 +198,8 @@ export function createTracingInterceptor(tracer) {
91
198
  ddTraceId: hexTraceIdToDecimal(span.context.traceId),
92
199
  ddSpanId: hexSpanIdToDecimal(span.context.spanId),
93
200
  baggage: incomingBaggage,
201
+ trace: createTraceOperation(tracer),
202
+ event: createTraceEvent(tracer),
94
203
  };
95
204
  if (ctx.logger?.child) {
96
205
  ctx.logger = ctx.logger.child({
@@ -101,39 +210,27 @@ export function createTracingInterceptor(tracer) {
101
210
  if (ctx.http) {
102
211
  const method = ctx.http.method.toUpperCase();
103
212
  const route = ctx.http.route ?? ctx.http.path;
104
- span.setAttributes({
213
+ const httpAttributes = {
105
214
  'http.request.method': method,
106
- 'url.path': ctx.http.path,
107
215
  'http.route': route,
108
- });
109
- applyHttpRouteToSpan(span, method, {
110
- route,
111
- procedure,
112
- });
216
+ };
217
+ if (!options.spanName) {
218
+ httpAttributes['url.path'] = ctx.http.path;
219
+ }
220
+ span.setAttributes(filterSensitiveSpanAttributes(httpAttributes));
221
+ if (!options.spanName) {
222
+ applyHttpRouteToSpan(span, method, {
223
+ route,
224
+ procedure,
225
+ });
226
+ }
113
227
  }
114
228
  // Run `next()` — and everything it awaits — with this span/baggage as
115
229
  // active, correctly restoring the caller's previous span/baggage
116
230
  // afterward regardless of how many awaits happen in between (see
117
231
  // `runInSpanContext`'s docs for why a manual enterWith+restore pair
118
232
  // doesn't do this reliably).
119
- return tracer.runInSpanContext(span, incomingBaggage, async () => {
120
- try {
121
- const result = await next();
122
- span.setStatus('ok');
123
- span.finish();
124
- return result;
125
- }
126
- catch (error) {
127
- if (error instanceof Error) {
128
- span.recordError(error);
129
- }
130
- else {
131
- span.setStatus('error', String(error));
132
- }
133
- span.finish();
134
- throw error;
135
- }
136
- });
233
+ return runWithSpan(tracer, span, incomingBaggage, next);
137
234
  };
138
235
  }
139
236
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/tracing/interceptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../../src/tracing/interceptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Span as OtelSpan } from '@opentelemetry/api';
2
+ import type { Span, SpanAttributes, SpanKind } from './types.js';
3
+ export interface OpenTelemetrySpanAdapterOptions {
4
+ name: string;
5
+ kind: SpanKind;
6
+ parentSpanId?: string;
7
+ attributes?: SpanAttributes;
8
+ }
9
+ /** Adapt a native OTel span while reusing Raffel's span state bookkeeping. */
10
+ export declare function createOpenTelemetrySpanAdapter(nativeSpan: OtelSpan, options: OpenTelemetrySpanAdapterOptions): Span;
11
+ //# sourceMappingURL=opentelemetry-span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-span.d.ts","sourceRoot":"","sources":["../../src/tracing/opentelemetry-span.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,IAAI,IAAI,QAAQ,EACtB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EAEd,QAAQ,EAET,MAAM,YAAY,CAAA;AAkBnB,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,cAAc,CAAA;CAC5B;AAED,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,QAAQ,EACpB,OAAO,EAAE,+BAA+B,GACvC,IAAI,CA6FN"}
@@ -0,0 +1,101 @@
1
+ import { SpanStatusCode as OtelSpanStatusCode, } from '@opentelemetry/api';
2
+ import { createSpan } from './span.js';
3
+ const OTEL_STATUS = {
4
+ unset: OtelSpanStatusCode.UNSET,
5
+ ok: OtelSpanStatusCode.OK,
6
+ error: OtelSpanStatusCode.ERROR,
7
+ };
8
+ function asOtelAttributes(attributes) {
9
+ const result = {};
10
+ for (const [key, value] of Object.entries(attributes)) {
11
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
12
+ result[key] = value;
13
+ }
14
+ }
15
+ return result;
16
+ }
17
+ /** Adapt a native OTel span while reusing Raffel's span state bookkeeping. */
18
+ export function createOpenTelemetrySpanAdapter(nativeSpan, options) {
19
+ const nativeContext = () => {
20
+ const context = nativeSpan.spanContext();
21
+ return {
22
+ traceId: context.traceId,
23
+ spanId: context.spanId,
24
+ traceFlags: context.traceFlags,
25
+ traceState: context.traceState?.serialize(),
26
+ isRemote: context.isRemote,
27
+ };
28
+ };
29
+ const context = nativeContext();
30
+ const state = createSpan({
31
+ traceId: context.traceId,
32
+ spanId: context.spanId,
33
+ parentSpanId: options.parentSpanId,
34
+ name: options.name,
35
+ kind: options.kind,
36
+ isRecording: nativeSpan.isRecording(),
37
+ attributes: options.attributes,
38
+ });
39
+ let finished = false;
40
+ const span = {
41
+ get context() {
42
+ return nativeContext();
43
+ },
44
+ get name() {
45
+ return state.name;
46
+ },
47
+ get isRecording() {
48
+ return !finished && nativeSpan.isRecording();
49
+ },
50
+ setAttribute(key, value) {
51
+ state.setAttribute(key, value);
52
+ nativeSpan.setAttribute(key, value);
53
+ return this;
54
+ },
55
+ setAttributes(attributes) {
56
+ state.setAttributes(attributes);
57
+ nativeSpan.setAttributes(attributes);
58
+ return this;
59
+ },
60
+ log(message, fields) {
61
+ state.log(message, fields);
62
+ nativeSpan.addEvent(message, asOtelAttributes(fields ?? {}));
63
+ return this;
64
+ },
65
+ setStatus(code, message) {
66
+ state.setStatus(code, message);
67
+ nativeSpan.setStatus({ code: OTEL_STATUS[code], message });
68
+ return this;
69
+ },
70
+ recordError(error) {
71
+ state.recordError(error);
72
+ nativeSpan.recordException(error);
73
+ nativeSpan.setStatus({ code: OtelSpanStatusCode.ERROR, message: error.message });
74
+ return this;
75
+ },
76
+ updateName(name) {
77
+ state.updateName(name);
78
+ nativeSpan.updateName(name);
79
+ return this;
80
+ },
81
+ finish() {
82
+ if (finished)
83
+ return;
84
+ finished = true;
85
+ state.finish();
86
+ nativeSpan.end();
87
+ },
88
+ toSpanData() {
89
+ const data = state.toSpanData();
90
+ const currentContext = nativeContext();
91
+ return {
92
+ ...data,
93
+ traceId: currentContext.traceId,
94
+ spanId: currentContext.spanId,
95
+ context: currentContext,
96
+ };
97
+ },
98
+ };
99
+ return span;
100
+ }
101
+ //# sourceMappingURL=opentelemetry-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry-span.js","sourceRoot":"","sources":["../../src/tracing/opentelemetry-span.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Adapter from Raffel's tracing surface to the process-wide OpenTelemetry API.
3
+ *
4
+ * The application/platform owns the global provider, context manager,
5
+ * processors, exporters, flushing, and shutdown. Raffel only creates child
6
+ * spans through the API so it composes with auto-instrumentation such as
7
+ * Datadog Single-Step Instrumentation.
8
+ */
9
+ import type { Tracer } from './types.js';
10
+ export interface GlobalOpenTelemetryTracerOptions {
11
+ /** OpenTelemetry instrumentation scope name (default: `raffel`). */
12
+ instrumentationName?: string;
13
+ /** Optional instrumentation scope version. */
14
+ instrumentationVersion?: string;
15
+ }
16
+ /**
17
+ * Use the OpenTelemetry tracer provider already registered by the host.
18
+ * This function never installs a provider or exporter and never shuts the
19
+ * host provider down.
20
+ */
21
+ export declare function createGlobalOpenTelemetryTracer(options?: GlobalOpenTelemetryTracerOptions): Tracer;
22
+ //# sourceMappingURL=opentelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.d.ts","sourceRoot":"","sources":["../../src/tracing/opentelemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,OAAO,KAAK,EAOV,MAAM,EACP,MAAM,YAAY,CAAA;AAYnB,MAAM,WAAW,gCAAgC;IAC/C,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,8CAA8C;IAC9C,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,GAAE,gCAAqC,GAC7C,MAAM,CA2HR"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Adapter from Raffel's tracing surface to the process-wide OpenTelemetry API.
3
+ *
4
+ * The application/platform owns the global provider, context manager,
5
+ * processors, exporters, flushing, and shutdown. Raffel only creates child
6
+ * spans through the API so it composes with auto-instrumentation such as
7
+ * Datadog Single-Step Instrumentation.
8
+ */
9
+ import { AsyncLocalStorage } from 'node:async_hooks';
10
+ import { context as otelContext, createTraceState, SpanKind as OtelSpanKind, trace as otelTrace, } from '@opentelemetry/api';
11
+ import { createOpenTelemetrySpanAdapter } from './opentelemetry-span.js';
12
+ import { formatW3CTraceContext, parseW3CTraceContext } from './trace-context.js';
13
+ const OTEL_SPAN_KIND = {
14
+ internal: OtelSpanKind.INTERNAL,
15
+ server: OtelSpanKind.SERVER,
16
+ client: OtelSpanKind.CLIENT,
17
+ producer: OtelSpanKind.PRODUCER,
18
+ consumer: OtelSpanKind.CONSUMER,
19
+ };
20
+ /**
21
+ * Use the OpenTelemetry tracer provider already registered by the host.
22
+ * This function never installs a provider or exporter and never shuts the
23
+ * host provider down.
24
+ */
25
+ export function createGlobalOpenTelemetryTracer(options = {}) {
26
+ const otelTracer = otelTrace.getTracer(options.instrumentationName ?? 'raffel', options.instrumentationVersion);
27
+ const nativeBySpan = new WeakMap();
28
+ const spanByNative = new WeakMap();
29
+ const activeSpanStorage = new AsyncLocalStorage();
30
+ const baggageStorage = new AsyncLocalStorage();
31
+ function wrapSpan(nativeSpan, name, kind, parentSpanId, initialAttributes = {}) {
32
+ const existing = spanByNative.get(nativeSpan);
33
+ if (existing)
34
+ return existing;
35
+ const span = createOpenTelemetrySpanAdapter(nativeSpan, {
36
+ name,
37
+ kind,
38
+ parentSpanId,
39
+ attributes: initialAttributes,
40
+ });
41
+ nativeBySpan.set(span, nativeSpan);
42
+ spanByNative.set(nativeSpan, span);
43
+ return span;
44
+ }
45
+ function parentOtelContext(parent) {
46
+ if (parent) {
47
+ return otelTrace.setSpanContext(otelContext.active(), {
48
+ traceId: parent.traceId,
49
+ spanId: parent.spanId,
50
+ traceFlags: parent.traceFlags,
51
+ traceState: parent.traceState ? createTraceState(parent.traceState) : undefined,
52
+ isRemote: parent.isRemote ?? false,
53
+ });
54
+ }
55
+ const manuallyActive = activeSpanStorage.getStore();
56
+ const nativeActive = manuallyActive && nativeBySpan.get(manuallyActive);
57
+ return nativeActive
58
+ ? otelTrace.setSpan(otelContext.active(), nativeActive)
59
+ : otelContext.active();
60
+ }
61
+ const tracer = {
62
+ startSpan(name, options = {}) {
63
+ const kind = options.kind ?? 'internal';
64
+ const nativeSpan = otelTracer.startSpan(name, {
65
+ kind: OTEL_SPAN_KIND[kind],
66
+ attributes: options.attributes,
67
+ }, parentOtelContext(options.parent));
68
+ return wrapSpan(nativeSpan, name, kind, options.parent?.spanId, options.attributes);
69
+ },
70
+ getActiveSpan() {
71
+ const nativeSpan = otelTrace.getSpan(otelContext.active());
72
+ if (nativeSpan) {
73
+ return wrapSpan(nativeSpan, 'external.active', 'internal');
74
+ }
75
+ return activeSpanStorage.getStore();
76
+ },
77
+ setActiveSpan(span) {
78
+ activeSpanStorage.enterWith(span);
79
+ },
80
+ getBaggage() {
81
+ return baggageStorage.getStore();
82
+ },
83
+ setBaggage(baggage) {
84
+ baggageStorage.enterWith(baggage);
85
+ },
86
+ runInSpanContext(span, baggage, fn) {
87
+ const nativeSpan = span && nativeBySpan.get(span);
88
+ const context = nativeSpan
89
+ ? otelTrace.setSpan(otelContext.active(), nativeSpan)
90
+ : otelContext.active();
91
+ return otelContext.with(context, () => activeSpanStorage.run(span, () => baggageStorage.run(baggage, fn)));
92
+ },
93
+ startSpanFromContext(name, parentContext, options = {}) {
94
+ return this.startSpan(name, { ...options, parent: parentContext });
95
+ },
96
+ extractContext(headers) {
97
+ return parseW3CTraceContext(headers);
98
+ },
99
+ injectContext(context) {
100
+ return formatW3CTraceContext(context);
101
+ },
102
+ async flush() {
103
+ // The host provider owns processors/exporters and their flush lifecycle.
104
+ },
105
+ async shutdown() {
106
+ // The host provider is process-global and must not be shut down by Raffel.
107
+ },
108
+ };
109
+ return tracer;
110
+ }
111
+ //# sourceMappingURL=opentelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.js","sourceRoot":"","sources":["../../src/tracing/opentelemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SpanAttributes } from './types.js';
2
+ /**
3
+ * Drop attribute categories that commonly carry credentials, personal
4
+ * identifiers, or high-cardinality cache keys. Tracing must never make the
5
+ * application fail, so unsafe attributes are omitted rather than rejected.
6
+ */
7
+ export declare function filterSensitiveSpanAttributes(attributes: SpanAttributes): SpanAttributes;
8
+ //# sourceMappingURL=safe-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-attributes.d.ts","sourceRoot":"","sources":["../../src/tracing/safe-attributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAsChD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,CAQxF"}
@@ -0,0 +1,53 @@
1
+ const SENSITIVE_ATTRIBUTE_KEY_PATTERN = /(?:^|[._-])(?:authorization|cookie|document|documento|cpf|cnpj|oid|password|secret|token|cache[._-]?key|api[._-]?key)(?:$|[._-])/i;
2
+ const SAFE_STRING_ATTRIBUTE_KEYS = new Set([
3
+ 'cache.system',
4
+ 'db.operation.name',
5
+ 'db.system',
6
+ 'deployment.environment',
7
+ 'deployment.environment.name',
8
+ 'http.request.method',
9
+ 'http.route',
10
+ 'messaging.system',
11
+ 'network.protocol.name',
12
+ 'network.protocol.version',
13
+ 'raffel.handler.kind',
14
+ 'raffel.interceptor',
15
+ 'raffel.procedure',
16
+ 'rpc.method',
17
+ 'rpc.system',
18
+ 'service.name',
19
+ 'url.path',
20
+ 'url.scheme',
21
+ ]);
22
+ const SENSITIVE_ATTRIBUTE_VALUE_PATTERNS = [
23
+ /\b\d{3}\.?\d{3}\.?\d{3}-?\d{2}\b/,
24
+ /(?:^|[^a-z0-9])(?:bearer|oid|token)[._:=/-]?[a-z0-9]/i,
25
+ /^[a-f0-9]{24}$/i,
26
+ /^[a-z0-9._-]+(?::[a-z0-9._-]+)+$/i,
27
+ /^eyJ[a-z0-9_-]+\.[a-z0-9_-]+\.[a-z0-9_-]+$/i,
28
+ ];
29
+ function hasSensitiveValue(value) {
30
+ if (typeof value === 'boolean')
31
+ return false;
32
+ const text = String(value);
33
+ if (text.length > 256 || /[\u0000-\u001f\u007f]/.test(text))
34
+ return true;
35
+ return SENSITIVE_ATTRIBUTE_VALUE_PATTERNS.some((pattern) => pattern.test(text));
36
+ }
37
+ /**
38
+ * Drop attribute categories that commonly carry credentials, personal
39
+ * identifiers, or high-cardinality cache keys. Tracing must never make the
40
+ * application fail, so unsafe attributes are omitted rather than rejected.
41
+ */
42
+ export function filterSensitiveSpanAttributes(attributes) {
43
+ const safe = {};
44
+ for (const [key, value] of Object.entries(attributes)) {
45
+ if (SENSITIVE_ATTRIBUTE_KEY_PATTERN.test(key) || hasSensitiveValue(value))
46
+ continue;
47
+ if (typeof value === 'string' && !SAFE_STRING_ATTRIBUTE_KEYS.has(key))
48
+ continue;
49
+ safe[key] = value;
50
+ }
51
+ return safe;
52
+ }
53
+ //# sourceMappingURL=safe-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-attributes.js","sourceRoot":"","sources":["../../src/tracing/safe-attributes.ts"],"names":[],"mappings":"AAEA,MAAM,+BAA+B,GAAG,mIAAmI,CAAA;AAC3K,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,cAAc;IACd,mBAAmB;IACnB,WAAW;IACX,wBAAwB;IACxB,6BAA6B;IAC7B,qBAAqB;IACrB,YAAY;IACZ,kBAAkB;IAClB,uBAAuB;IACvB,0BAA0B;IAC1B,qBAAqB;IACrB,oBAAoB;IACpB,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,YAAY;CACb,CAAC,CAAA;AACF,MAAM,kCAAkC,GAAG;IACzC,kCAAkC;IAClC,uDAAuD;IACvD,iBAAiB;IACjB,mCAAmC;IACnC,6CAA6C;CAC9C,CAAA;AAED,SAAS,iBAAiB,CAAC,KAAgC;IACzD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxE,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAA0B;IACtE,MAAM,IAAI,GAAmB,EAAE,CAAA;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC;YAAE,SAAQ;QACnF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC/E,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SpanContext, TraceHeaders } from './types.js';
2
+ /** Parse the W3C traceparent/tracestate headers used by Raffel tracers. */
3
+ export declare function parseW3CTraceContext(headers: TraceHeaders): SpanContext | undefined;
4
+ /** Format a Raffel span context as W3C traceparent/tracestate headers. */
5
+ export declare function formatW3CTraceContext(context: SpanContext): TraceHeaders;
6
+ //# sourceMappingURL=trace-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context.d.ts","sourceRoot":"","sources":["../../src/tracing/trace-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE3D,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,CAgBnF;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAMxE"}
@@ -0,0 +1,26 @@
1
+ /** Parse the W3C traceparent/tracestate headers used by Raffel tracers. */
2
+ export function parseW3CTraceContext(headers) {
3
+ const parts = headers.traceparent?.split('-');
4
+ if (!parts || parts.length !== 4)
5
+ return undefined;
6
+ const [version, traceId, spanId, flags] = parts;
7
+ if (version !== '00' || traceId.length !== 32 || spanId.length !== 16) {
8
+ return undefined;
9
+ }
10
+ return {
11
+ traceId,
12
+ spanId,
13
+ traceFlags: Number.parseInt(flags, 16),
14
+ traceState: headers.tracestate,
15
+ isRemote: true,
16
+ };
17
+ }
18
+ /** Format a Raffel span context as W3C traceparent/tracestate headers. */
19
+ export function formatW3CTraceContext(context) {
20
+ const flags = context.traceFlags.toString(16).padStart(2, '0');
21
+ return {
22
+ traceparent: `00-${context.traceId}-${context.spanId}-${flags}`,
23
+ tracestate: context.traceState,
24
+ };
25
+ }
26
+ //# sourceMappingURL=trace-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context.js","sourceRoot":"","sources":["../../src/tracing/trace-context.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAAC,OAAqB;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAElD,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAA;IAC/C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtE,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,IAAI;KACf,CAAA;AACH,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB,CAAC,OAAoB;IACxD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9D,OAAO;QACL,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,EAAE;QAC/D,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracing/tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EAQd,MAAM,YAAY,CAAA;AAInB;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,aAAkB,GAAG,MAAM,CAkN/D"}
1
+ {"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/tracing/tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EAQd,MAAM,YAAY,CAAA;AAKnB;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,aAAkB,GAAG,MAAM,CA2L/D"}