autotel-edge 3.16.2 → 3.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-A2AH5BBJ.js +208 -0
- package/dist/chunk-A2AH5BBJ.js.map +1 -0
- package/dist/{chunk-QXL3GNVV.js → chunk-D7K4WLCX.js} +3 -3
- package/dist/{chunk-QXL3GNVV.js.map → chunk-D7K4WLCX.js.map} +1 -1
- package/dist/events.js +1 -1
- package/dist/execution-logger-Cv6joA6T.d.ts +70 -0
- package/dist/index.d.ts +4 -49
- package/dist/index.js +18 -36
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +3 -0
- package/dist/logger.js +1 -2
- package/dist/logger.js.map +1 -1
- package/package.json +13 -13
- package/src/execution-logger.test.ts +171 -0
- package/src/execution-logger.ts +265 -0
- package/src/functional.ts +16 -12
- package/src/index.ts +7 -0
- package/src/logger.ts +7 -0
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export { OTLPExporter, createInitialiser, getActiveConfig, parseConfig, setConfig } from './chunk-
|
|
1
|
+
export { OTLPExporter, createInitialiser, getActiveConfig, parseConfig, setConfig } from './chunk-D7K4WLCX.js';
|
|
2
|
+
import { setSpanName, createTraceContext } from './chunk-A2AH5BBJ.js';
|
|
3
|
+
export { getExecutionLogger } from './chunk-A2AH5BBJ.js';
|
|
2
4
|
export { parseError } from './chunk-M7Z4P5MC.js';
|
|
3
5
|
import { sanitizeAttributes, isAttributeValue, isTimeInput, hrTimeDuration } from '@opentelemetry/core';
|
|
4
6
|
import { SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_TYPE, SEMATTRS_EXCEPTION_STACKTRACE } from '@opentelemetry/semantic-conventions';
|
|
@@ -444,49 +446,30 @@ var WorkerTracerProvider = class {
|
|
|
444
446
|
}
|
|
445
447
|
};
|
|
446
448
|
globalThis.Buffer = Buffer;
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
var
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
"code.function": spanNameMap.get(span2),
|
|
457
|
-
setAttribute: span2.setAttribute.bind(span2),
|
|
458
|
-
setAttributes: span2.setAttributes.bind(span2),
|
|
459
|
-
setStatus: span2.setStatus.bind(span2),
|
|
460
|
-
recordException: span2.recordException.bind(span2),
|
|
461
|
-
addEvent: span2.addEvent.bind(span2),
|
|
462
|
-
addLink: span2.addLink.bind(span2),
|
|
463
|
-
addLinks: span2.addLinks.bind(span2),
|
|
464
|
-
updateName: span2.updateName.bind(span2),
|
|
465
|
-
isRecording: span2.isRecording.bind(span2)
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
function setSpanName(span2, name) {
|
|
469
|
-
spanNameMap.set(span2, name);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
// src/functional.ts
|
|
473
|
-
var TRACE_FACTORY_SYMBOL = /* @__PURE__ */ Symbol.for("autotel.edge.functional.factory");
|
|
474
|
-
var FACTORY_NAME_HINTS = /* @__PURE__ */ new Set(["ctx", "_ctx", "context", "tracecontext", "tracectx"]);
|
|
449
|
+
var TRACE_FACTORY_MARK = "__autotelEdgeTraceFactory";
|
|
450
|
+
var INSTRUMENTED_MARK = "__autotelEdgeInstrumented";
|
|
451
|
+
var FACTORY_NAME_HINTS = {
|
|
452
|
+
ctx: true,
|
|
453
|
+
_ctx: true,
|
|
454
|
+
context: true,
|
|
455
|
+
tracecontext: true,
|
|
456
|
+
tracectx: true
|
|
457
|
+
};
|
|
475
458
|
var SINGLE_LINE_COMMENT_REGEX = /\/\/.*$/gm;
|
|
476
459
|
var MULTI_LINE_COMMENT_REGEX = /\/\*[\s\S]*?\*\//gm;
|
|
477
460
|
var PARAM_TOKEN_SANITIZE_REGEX = new RegExp(String.raw`[{}\[\]\s]`, "g");
|
|
478
461
|
function markAsTraceFactory(fn) {
|
|
479
462
|
try {
|
|
480
|
-
Object.defineProperty(fn,
|
|
463
|
+
Object.defineProperty(fn, TRACE_FACTORY_MARK, {
|
|
481
464
|
value: true,
|
|
482
465
|
configurable: true
|
|
483
466
|
});
|
|
484
467
|
} catch {
|
|
485
|
-
fn[
|
|
468
|
+
fn[TRACE_FACTORY_MARK] = true;
|
|
486
469
|
}
|
|
487
470
|
}
|
|
488
471
|
function hasFactoryMark(fn) {
|
|
489
|
-
return Boolean(fn[
|
|
472
|
+
return Boolean(fn[TRACE_FACTORY_MARK]);
|
|
490
473
|
}
|
|
491
474
|
function sanitizeParameterToken(token) {
|
|
492
475
|
const [firstToken] = token.split("=");
|
|
@@ -526,7 +509,7 @@ function looksLikeTraceFactory(fn) {
|
|
|
526
509
|
return false;
|
|
527
510
|
}
|
|
528
511
|
const normalized = firstParam.toLowerCase();
|
|
529
|
-
if (
|
|
512
|
+
if (Object.hasOwn(FACTORY_NAME_HINTS, normalized) || normalized.startsWith("ctx") || normalized.startsWith("_ctx") || normalized.startsWith("trace")) {
|
|
530
513
|
return true;
|
|
531
514
|
}
|
|
532
515
|
return false;
|
|
@@ -626,7 +609,6 @@ function getSpanName(options, fn, variableName) {
|
|
|
626
609
|
function isAsyncFunction(fn) {
|
|
627
610
|
return typeof fn === "function" && fn.constructor?.name === "AsyncFunction";
|
|
628
611
|
}
|
|
629
|
-
var INSTRUMENTED_SYMBOL = /* @__PURE__ */ Symbol.for("autotel.edge.functional.instrumented");
|
|
630
612
|
function wrapWithTracingAsync(fnFactory, options, variableName) {
|
|
631
613
|
const tempFn = fnFactory(createDummyCtx());
|
|
632
614
|
const spanName = getSpanName(options, tempFn, variableName);
|
|
@@ -669,7 +651,7 @@ function wrapWithTracingAsync(fnFactory, options, variableName) {
|
|
|
669
651
|
value: tempFn.name || "trace",
|
|
670
652
|
configurable: true
|
|
671
653
|
});
|
|
672
|
-
wrappedFunction[
|
|
654
|
+
wrappedFunction[INSTRUMENTED_MARK] = true;
|
|
673
655
|
return wrappedFunction;
|
|
674
656
|
}
|
|
675
657
|
function wrapWithTracingSync(fnFactory, options, variableName) {
|
|
@@ -714,7 +696,7 @@ function wrapWithTracingSync(fnFactory, options, variableName) {
|
|
|
714
696
|
value: tempFn.name || "trace",
|
|
715
697
|
configurable: true
|
|
716
698
|
});
|
|
717
|
-
wrappedFunction[
|
|
699
|
+
wrappedFunction[INSTRUMENTED_MARK] = true;
|
|
718
700
|
return wrappedFunction;
|
|
719
701
|
}
|
|
720
702
|
function wrapFactoryWithTracing(fnOrFactory, options, variableName) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/span.ts","../src/core/tracer.ts","../src/core/context.ts","../src/core/provider.ts","../src/core/buffer.ts","../src/core/trace-context.ts","../src/functional.ts"],"names":["context","api_context","sanitizeAttributes","span","trace","wrappedFunction","otelTrace","result"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Lightweight Span implementation for edge environments\n */\n\nimport type {\n Attributes,\n AttributeValue,\n Exception,\n HrTime,\n Link,\n Span,\n SpanContext,\n SpanKind,\n SpanStatus,\n SpanStatusCode,\n TimeInput,\n} from '@opentelemetry/api';\nimport {\n hrTimeDuration,\n type InstrumentationScope,\n isAttributeValue,\n isTimeInput,\n sanitizeAttributes,\n} from '@opentelemetry/core';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base';\nimport { SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE } from '@opentelemetry/semantic-conventions';\n\ntype OnSpanEnd = (span: Span) => void;\n\ninterface SpanInit {\n attributes: unknown;\n name: string;\n onEnd: OnSpanEnd;\n resource: Resource;\n spanContext: SpanContext;\n parentSpanContext?: SpanContext;\n links?: Link[];\n parentSpanId?: string;\n spanKind?: SpanKind;\n startTime?: TimeInput;\n}\n\nfunction transformExceptionAttributes(exception: Exception): Attributes {\n const attributes: Attributes = {};\n if (typeof exception === 'string') {\n attributes[SEMATTRS_EXCEPTION_MESSAGE] = exception;\n } else {\n if (exception.code) {\n attributes[SEMATTRS_EXCEPTION_TYPE] = exception.code.toString();\n } else if (exception.name) {\n attributes[SEMATTRS_EXCEPTION_TYPE] = exception.name;\n }\n if (exception.message) {\n attributes[SEMATTRS_EXCEPTION_MESSAGE] = exception.message;\n }\n if (exception.stack) {\n attributes[SEMATTRS_EXCEPTION_STACKTRACE] = exception.stack;\n }\n }\n return attributes;\n}\n\nfunction millisToHr(millis: number): HrTime {\n return [Math.trunc(millis / 1000), (millis % 1000) * 1e6];\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n const now = Date.now();\n if (!input) {\n return millisToHr(now);\n } else if (input instanceof Date) {\n return millisToHr(input.getTime());\n } else if (typeof input === 'number') {\n return millisToHr(input);\n } else if (Array.isArray(input)) {\n return input;\n }\n\n const v: never = input;\n throw new Error(`unreachable value: ${JSON.stringify(v)}`);\n}\n\n// Previously exported from OTel, now private\nfunction isAttributeKey(key: unknown): key is string {\n return typeof key === 'string' && key.length > 0;\n}\n\n/**\n * Lightweight Span implementation for edge runtimes\n */\nexport class SpanImpl implements Span, ReadableSpan {\n name: string;\n private readonly _spanContext: SpanContext;\n private readonly onEnd: OnSpanEnd;\n readonly parentSpanId?: string;\n readonly parentSpanContext?: SpanContext | undefined;\n readonly kind: SpanKind;\n readonly attributes: Attributes;\n status: SpanStatus = {\n code: 0 as SpanStatusCode, // SpanStatusCode.UNSET\n };\n endTime: HrTime = [0, 0];\n private _duration: HrTime = [0, 0];\n readonly startTime: HrTime;\n readonly events: TimedEvent[] = [];\n readonly links: Link[];\n readonly resource: Resource;\n instrumentationScope: InstrumentationScope = {\n name: 'autotel-edge',\n };\n private _ended: boolean = false;\n private _droppedAttributesCount: number = 0;\n private _droppedEventsCount: number = 0;\n private _droppedLinksCount: number = 0;\n\n constructor(init: SpanInit) {\n this.name = init.name;\n this._spanContext = init.spanContext;\n this.parentSpanId = init.parentSpanId;\n this.parentSpanContext = init.parentSpanContext;\n this.kind = init.spanKind || (0 as SpanKind); // SpanKind.INTERNAL\n this.attributes = sanitizeAttributes(init.attributes);\n this.startTime = getHrTime(init.startTime);\n this.links = init.links || [];\n this.resource = init.resource;\n this.onEnd = init.onEnd;\n }\n\n addLink(link: Link): this {\n this.links.push(link);\n return this;\n }\n\n addLinks(links: Link[]): this {\n this.links.push(...links);\n return this;\n }\n\n spanContext(): SpanContext {\n return this._spanContext;\n }\n\n setAttribute(key: string, value?: AttributeValue): this {\n if (isAttributeKey(key) && isAttributeValue(value)) {\n this.attributes[key] = value;\n }\n return this;\n }\n\n setAttributes(attributes: Attributes): this {\n for (const [key, value] of Object.entries(attributes)) {\n this.setAttribute(key, value);\n }\n return this;\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Attributes | TimeInput,\n startTime?: TimeInput,\n ): this {\n if (isTimeInput(attributesOrStartTime)) {\n startTime = attributesOrStartTime;\n attributesOrStartTime = undefined;\n }\n\n const attributes = sanitizeAttributes(attributesOrStartTime);\n const time = getHrTime(startTime);\n this.events.push({ name, attributes, time });\n return this;\n }\n\n setStatus(status: SpanStatus): this {\n this.status = status;\n return this;\n }\n\n updateName(name: string): this {\n this.name = name;\n return this;\n }\n\n end(endTime?: TimeInput): void {\n if (this._ended) {\n return;\n }\n this._ended = true;\n this.endTime = getHrTime(endTime);\n this._duration = hrTimeDuration(this.startTime, this.endTime);\n this.onEnd(this);\n }\n\n isRecording(): boolean {\n return !this._ended;\n }\n\n recordException(exception: Exception, time?: TimeInput): void {\n const attributes = transformExceptionAttributes(exception);\n this.addEvent('exception', attributes, time);\n }\n\n get duration(): HrTime {\n return this._duration;\n }\n\n get ended(): boolean {\n return this._ended;\n }\n\n get droppedAttributesCount(): number {\n return this._droppedAttributesCount;\n }\n\n get droppedEventsCount(): number {\n return this._droppedEventsCount;\n }\n\n get droppedLinksCount(): number {\n return this._droppedLinksCount;\n }\n}\n","/**\n * Lightweight WorkerTracer for edge environments\n */\n\nimport type {\n Attributes,\n Tracer,\n Span,\n SpanKind,\n SpanOptions,\n Context,\n} from '@opentelemetry/api';\nimport {\n context as api_context,\n trace,\n type SpanContext,\n} from '@opentelemetry/api';\nimport { sanitizeAttributes } from '@opentelemetry/core';\nimport type { Resource } from '@opentelemetry/resources';\nimport {\n type SpanProcessor,\n RandomIdGenerator,\n type ReadableSpan,\n SamplingDecision,\n} from '@opentelemetry/sdk-trace-base';\n\nimport { SpanImpl } from './span';\nimport type { TraceFlushableSpanProcessor } from '../types';\n\nconst NewTraceFlags = {\n RANDOM_TRACE_ID_SET: 2,\n RANDOM_TRACE_ID_UNSET: 0,\n} as const;\n\ntype NewTraceFlagValues =\n | typeof NewTraceFlags.RANDOM_TRACE_ID_SET\n | typeof NewTraceFlags.RANDOM_TRACE_ID_UNSET;\n\nconst idGenerator: RandomIdGenerator = new RandomIdGenerator();\n\nlet withNextSpanAttributes: Attributes;\n\nfunction getFlagAt(flagSequence: number, position: number): number {\n return ((flagSequence >> (position - 1)) & 1) * position;\n}\n\n/**\n * WorkerTracer - Lightweight tracer for edge environments\n */\nexport class WorkerTracer implements Tracer {\n private readonly spanProcessors: TraceFlushableSpanProcessor[];\n private readonly resource: Resource;\n private headSampler: any; // Will be set via setHeadSampler\n\n constructor(spanProcessors: SpanProcessor[], resource: Resource) {\n this.spanProcessors = spanProcessors as TraceFlushableSpanProcessor[];\n this.resource = resource;\n }\n\n /**\n * Set the head sampler (called from config)\n */\n setHeadSampler(sampler: any): void {\n this.headSampler = sampler;\n }\n\n /**\n * Force flush spans for a specific trace\n */\n async forceFlush(traceId?: string) {\n const promises = this.spanProcessors.map(async (spanProcessor) => {\n await spanProcessor.forceFlush(traceId);\n });\n await Promise.allSettled(promises);\n }\n\n /**\n * Add extra resource attributes\n */\n addToResource(extra: Resource) {\n this.resource.merge(extra);\n }\n\n /**\n * Start a new span\n */\n startSpan(\n name: string,\n options: SpanOptions = {},\n context = api_context.active(),\n ): Span {\n if (options.root) {\n context = trace.deleteSpan(context);\n }\n\n if (!this.headSampler) {\n throw new Error(\n 'Head sampler not configured. This is a bug in the instrumentation logic',\n );\n }\n\n const parentSpanContext = trace.getSpan(context)?.spanContext();\n const { traceId, randomTraceFlag } = getTraceInfo(parentSpanContext);\n\n const spanKind = options.kind || (0 as SpanKind); // SpanKind.INTERNAL\n const sanitisedAttrs = sanitizeAttributes(options.attributes);\n\n // Use per-span sampler if provided, otherwise use head sampler\n const optionsWithSampler = options as any;\n const sampler = optionsWithSampler.sampler || this.headSampler;\n\n const samplingDecision = sampler.shouldSample(\n context,\n traceId,\n name,\n spanKind,\n sanitisedAttrs,\n [],\n );\n const { decision, traceState, attributes: attrs } = samplingDecision;\n\n const attributes = Object.assign(\n {},\n options.attributes,\n attrs,\n withNextSpanAttributes,\n );\n withNextSpanAttributes = {};\n\n const spanId = idGenerator.generateSpanId();\n const parentSpanId = parentSpanContext?.spanId;\n\n const sampleFlag =\n decision === SamplingDecision.RECORD_AND_SAMPLED ? 1 : 0; // TraceFlags.SAMPLED : TraceFlags.NONE\n const traceFlags = sampleFlag + randomTraceFlag;\n const spanContext: SpanContext = { traceId, spanId, traceFlags, traceState };\n\n const span = new SpanImpl({\n attributes: sanitizeAttributes(attributes),\n name,\n onEnd: (span) => {\n for (const sp of this.spanProcessors) {\n sp.onEnd(span as unknown as ReadableSpan);\n }\n },\n resource: this.resource,\n spanContext,\n parentSpanContext,\n parentSpanId,\n spanKind,\n startTime: options.startTime,\n });\n\n for (const sp of this.spanProcessors) {\n //@ts-ignore - OTel type quirk\n sp.onStart(span, context);\n }\n\n return span;\n }\n\n /**\n * Start an active span (with automatic context management)\n */\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n ...args: unknown[]\n ): ReturnType<F> {\n const options = args.length > 1 ? (args[0] as SpanOptions) : undefined;\n const parentContext =\n args.length > 2 ? (args[1] as Context) : api_context.active();\n const fn = args.at(-1) as F;\n\n const span = this.startSpan(name, options, parentContext);\n const contextWithSpanSet = trace.setSpan(parentContext, span);\n\n return api_context.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\n/**\n * Set attributes for the next span created\n */\nexport function withNextSpan(attrs: Attributes) {\n withNextSpanAttributes = Object.assign({}, withNextSpanAttributes, attrs);\n}\n\nfunction getTraceInfo(parentSpanContext?: SpanContext): {\n traceId: string;\n randomTraceFlag: NewTraceFlagValues;\n} {\n if (parentSpanContext && trace.isSpanContextValid(parentSpanContext)) {\n const { traceId, traceFlags } = parentSpanContext;\n return { traceId, randomTraceFlag: getFlagAt(traceFlags, 2) as NewTraceFlagValues };\n } else {\n return {\n traceId: idGenerator.generateTraceId(),\n randomTraceFlag: NewTraceFlags.RANDOM_TRACE_ID_SET,\n };\n }\n}\n","/**\n * AsyncLocalStorage-based context manager for edge environments\n *\n * Copyright The OpenTelemetry Authors\n * Licensed under the Apache License, Version 2.0\n */\n\nimport type { ContextManager, Context } from '@opentelemetry/api';\nimport { ROOT_CONTEXT } from '@opentelemetry/api';\n\n//@ts-ignore - node:async_hooks available in CF Workers with nodejs_compat\nimport { AsyncLocalStorage } from 'node:async_hooks';\n//@ts-ignore\nimport { EventEmitter } from 'node:events';\n\ntype Func<T> = (...args: unknown[]) => T;\n\n/**\n * Store a map for each event of all original listeners and their \"patched\"\n * version. So when a listener is removed by the user, the corresponding\n * patched function will be also removed.\n */\ninterface PatchMap {\n [name: string]: WeakMap<Func<void>, Func<void>>;\n}\n\nconst ADD_LISTENER_METHODS = [\n 'addListener' as const,\n 'on' as const,\n 'once' as const,\n 'prependListener' as const,\n 'prependOnceListener' as const,\n];\n\nabstract class AbstractAsyncHooksContextManager implements ContextManager {\n abstract active(): Context;\n\n abstract with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F>;\n\n abstract enable(): this;\n\n abstract disable(): this;\n\n /**\n * Binds a context to the target function or event emitter\n */\n bind<T>(context: Context, target: T): T {\n if (target instanceof EventEmitter) {\n return this._bindEventEmitter(context, target);\n }\n\n if (typeof target === 'function') {\n return this._bindFunction(context, target);\n }\n return target;\n }\n\n private _bindFunction<T extends Function>(context: Context, target: T): T {\n const manager = this;\n const contextWrapper = function (this: never, ...args: unknown[]) {\n return manager.with(context, () => target.apply(this, args));\n };\n Object.defineProperty(contextWrapper, 'length', {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target.length,\n });\n return contextWrapper as any;\n }\n\n /**\n * By default, EventEmitter calls callbacks with their context, which we do\n * not want. Instead we bind a specific context to all callbacks.\n */\n private _bindEventEmitter<T extends EventEmitter>(\n context: Context,\n ee: T,\n ): T {\n const map = this._getPatchMap(ee);\n if (map !== undefined) return ee;\n this._createPatchMap(ee);\n\n // Patch methods that add a listener to propagate context\n for (const methodName of ADD_LISTENER_METHODS) {\n if (ee[methodName] === undefined) continue;\n ee[methodName] = this._patchAddListener(ee, ee[methodName], context);\n }\n\n // Patch methods that remove a listener\n if (typeof ee.removeListener === 'function') {\n ee.removeListener = this._patchRemoveListener(ee, ee.removeListener);\n }\n if (typeof ee.off === 'function') {\n ee.off = this._patchRemoveListener(ee, ee.off);\n }\n\n // Patch method that removes all listeners\n if (typeof ee.removeAllListeners === 'function') {\n ee.removeAllListeners = this._patchRemoveAllListeners(\n ee,\n ee.removeAllListeners,\n );\n }\n return ee;\n }\n\n private _patchRemoveListener(ee: EventEmitter, original: Function) {\n const contextManager = this;\n return function (this: never, event: string, listener: Func<void>) {\n const events = contextManager._getPatchMap(ee)?.[event];\n if (events === undefined) {\n return original.call(this, event, listener);\n }\n const patchedListener = events.get(listener);\n return original.call(this, event, patchedListener || listener);\n };\n }\n\n private _patchRemoveAllListeners(ee: EventEmitter, original: Function) {\n const contextManager = this;\n return function (this: never, event: string) {\n const map = contextManager._getPatchMap(ee);\n if (map !== undefined) {\n if (arguments.length === 0) {\n contextManager._createPatchMap(ee);\n } else if (map[event] !== undefined) {\n delete map[event];\n }\n }\n return Reflect.apply(original, this, arguments);\n };\n }\n\n private _patchAddListener(\n ee: EventEmitter,\n original: Function,\n context: Context,\n ) {\n const contextManager = this;\n return function (this: never, event: string, listener: Func<void>) {\n /**\n * This check prevents double-wrapping the listener.\n * The implementation for ee.once wraps the listener and calls ee.on.\n * Without this check, we would wrap that wrapped listener.\n */\n if (contextManager._wrapped) {\n return original.call(this, event, listener);\n }\n let map = contextManager._getPatchMap(ee);\n if (map === undefined) {\n map = contextManager._createPatchMap(ee);\n }\n let listeners = map[event];\n if (listeners === undefined) {\n listeners = new WeakMap();\n map[event] = listeners;\n }\n const patchedListener = contextManager.bind(context, listener);\n // Store a weak reference of the user listener to ours\n listeners.set(listener, patchedListener);\n\n contextManager._wrapped = true;\n try {\n return original.call(this, event, patchedListener);\n } finally {\n contextManager._wrapped = false;\n }\n };\n }\n\n private _createPatchMap(ee: EventEmitter): PatchMap {\n const map = Object.create(null);\n (ee as any)[this._kOtListeners] = map;\n return map;\n }\n\n private _getPatchMap(ee: EventEmitter): PatchMap | undefined {\n return (ee as never)[this._kOtListeners];\n }\n\n private readonly _kOtListeners = Symbol('OtListeners');\n private _wrapped = false;\n}\n\n/**\n * AsyncLocalStorage-based context manager for edge runtimes\n */\nexport class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager {\n private _asyncLocalStorage: AsyncLocalStorage<Context>;\n\n constructor() {\n super();\n this._asyncLocalStorage = new AsyncLocalStorage();\n }\n\n active(): Context {\n return this._asyncLocalStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n const cb = thisArg == null ? fn : fn.bind(thisArg);\n return this._asyncLocalStorage.run(context, cb as never, ...args);\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n this._asyncLocalStorage.disable();\n return this;\n }\n}\n","/**\n * Tracer provider for edge environments\n */\n\nimport { trace } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { SpanProcessor, TracerConfig } from '@opentelemetry/sdk-trace-base';\nimport { WorkerTracer } from './tracer';\nimport { AsyncLocalStorageContextManager } from './context';\n\n/**\n * WorkerTracerProvider - Registers tracer globally\n */\nexport class WorkerTracerProvider {\n private tracer: WorkerTracer;\n private contextManager: AsyncLocalStorageContextManager;\n\n constructor(spanProcessors: SpanProcessor[], resource: Resource) {\n this.tracer = new WorkerTracer(spanProcessors, resource);\n this.contextManager = new AsyncLocalStorageContextManager();\n }\n\n /**\n * Get the tracer instance\n */\n getTracer(_name: string, _version?: string, _config?: TracerConfig): WorkerTracer {\n return this.tracer;\n }\n\n /**\n * Register this provider as the global tracer\n */\n register(): void {\n // Enable context manager\n this.contextManager.enable();\n\n // Set tracer provider\n const provider = {\n getTracer: (_name: string, _version?: string) => this.tracer,\n };\n\n // @ts-ignore - OTel types\n trace.setGlobalTracerProvider(provider);\n }\n}\n","/**\n * Buffer polyfill for edge environments\n *\n * Cloudflare Workers and other edge runtimes need the Buffer global\n * for OpenTelemetry OTLP serialization.\n */\n\n//@ts-ignore - node:buffer available in CF Workers with nodejs_compat\nimport { Buffer } from 'node:buffer';\n\n//@ts-ignore\nglobalThis.Buffer = Buffer;\n\n\n\nexport {Buffer} from 'node:buffer';","/**\n * Trace context types and utilities\n */\n\nimport type {\n AttributeValue,\n Link,\n Span,\n SpanStatusCode,\n TimeInput,\n} from '@opentelemetry/api';\n\n/**\n * WeakMap to store span names for active spans.\n * Enables retrieving span names for correlation helpers.\n */\nconst spanNameMap = new WeakMap<Span, string>();\n\n/**\n * Base trace context containing trace identifiers\n */\nexport interface TraceContextBase {\n traceId: string;\n spanId: string;\n correlationId: string;\n 'code.function'?: string;\n}\n\n/**\n * Span methods available on trace context\n */\nexport interface SpanMethods {\n /** Set a single attribute on the span */\n setAttribute(key: string, value: AttributeValue): void;\n /** Set multiple attributes on the span */\n setAttributes(attrs: Record<string, AttributeValue>): void;\n /** Set the status of the span */\n setStatus(status: { code: SpanStatusCode; message?: string }): void;\n /** Record an exception on the span */\n recordException(exception: Error, time?: TimeInput): void;\n /** Add an event to the span (for logging milestones/checkpoints) */\n addEvent(\n name: string,\n attributesOrStartTime?: Record<string, AttributeValue> | TimeInput,\n startTime?: TimeInput,\n ): void;\n /** Add a link to another span */\n addLink(link: Link): void;\n /** Add multiple links to other spans */\n addLinks(links: Link[]): void;\n /** Update the span name dynamically */\n updateName(name: string): void;\n /** Check if the span is recording */\n isRecording(): boolean;\n}\n\n/**\n * Complete trace context that merges base context and span methods\n *\n * This is the ctx parameter passed to factory functions in trace().\n * It provides access to trace IDs and span manipulation methods.\n */\nexport type TraceContext = TraceContextBase & SpanMethods;\n\n/**\n * Create a TraceContext from an OpenTelemetry Span\n *\n * This utility extracts trace context information from a span\n * and provides span manipulation methods in a consistent format.\n */\nexport function createTraceContext(span: Span): TraceContext {\n const spanContext = span.spanContext();\n return {\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n correlationId: spanContext.traceId.slice(0, 16),\n 'code.function': spanNameMap.get(span),\n setAttribute: span.setAttribute.bind(span),\n setAttributes: span.setAttributes.bind(span),\n setStatus: span.setStatus.bind(span),\n recordException: span.recordException.bind(span),\n addEvent: span.addEvent.bind(span),\n addLink: span.addLink.bind(span),\n addLinks: span.addLinks.bind(span),\n updateName: span.updateName.bind(span),\n isRecording: span.isRecording.bind(span),\n };\n}\n\n/**\n * Store the span name for later retrieval via trace context helpers.\n */\nexport function setSpanName(span: Span, name: string): void {\n spanNameMap.set(span, name);\n}\n","/**\n * Functional API for autotel-edge\n *\n * Provides zero-boilerplate tracing helpers that mirror the Node.js runtime\n * implementation while staying optimized for edge environments.\n */\n\nimport {\n trace as otelTrace,\n SpanStatusCode,\n type Span,\n type AttributeValue,\n} from '@opentelemetry/api';\nimport type { Sampler } from '@opentelemetry/sdk-trace-base';\nimport type { TraceContext } from './core/trace-context';\nimport { createTraceContext, setSpanName } from './core/trace-context';\n\n// Re-export for convenience\nexport type { TraceContext } from './core/trace-context';\n\ntype AnyFn = (...args: any[]) => any;\n\nconst TRACE_FACTORY_SYMBOL = Symbol.for('autotel.edge.functional.factory');\nconst FACTORY_NAME_HINTS = new Set(['ctx', '_ctx', 'context', 'tracecontext', 'tracectx']);\n\nconst SINGLE_LINE_COMMENT_REGEX = /\\/\\/.*$/gm;\nconst MULTI_LINE_COMMENT_REGEX = /\\/\\*[\\s\\S]*?\\*\\//gm;\nconst PARAM_TOKEN_SANITIZE_REGEX = new RegExp(String.raw`[{}\\[\\]\\s]`, 'g');\n\ninterface TraceFactoryMarked {\n [TRACE_FACTORY_SYMBOL]?: true;\n}\n\nfunction markAsTraceFactory(fn: AnyFn): void {\n try {\n Object.defineProperty(fn, TRACE_FACTORY_SYMBOL, {\n value: true,\n configurable: true,\n });\n } catch {\n (fn as TraceFactoryMarked)[TRACE_FACTORY_SYMBOL] = true;\n }\n}\n\nfunction hasFactoryMark(fn: AnyFn): boolean {\n return Boolean((fn as TraceFactoryMarked)[TRACE_FACTORY_SYMBOL]);\n}\n\nfunction sanitizeParameterToken(token: string): string {\n const [firstToken] = token.split('=');\n return (firstToken ?? '').replaceAll(PARAM_TOKEN_SANITIZE_REGEX, '').trim();\n}\n\nfunction getFirstParameterToken(fn: AnyFn): string | null {\n let source = Function.prototype.toString.call(fn);\n source = source\n .replaceAll(MULTI_LINE_COMMENT_REGEX, '')\n .replaceAll(SINGLE_LINE_COMMENT_REGEX, '')\n .trim();\n\n const arrowMatch = source.match(/^(?:async\\s*)?(?:\\(([^)]*)\\)|([^=()]+))\\s*=>/);\n if (arrowMatch) {\n const params = (arrowMatch[1] ?? arrowMatch[2] ?? '').split(',');\n const first = params[0]?.trim();\n if (first) {\n return sanitizeParameterToken(first);\n }\n return null;\n }\n\n const functionMatch = source.match(/^[^(]*\\(([^)]*)\\)/);\n if (functionMatch) {\n const params = functionMatch[1]?.split(',');\n const first = params?.[0]?.trim();\n if (first) {\n return sanitizeParameterToken(first);\n }\n }\n\n return null;\n}\n\nfunction looksLikeTraceFactory(fn: AnyFn): boolean {\n if (hasFactoryMark(fn)) {\n return true;\n }\n\n if (fn.length === 0) {\n return false;\n }\n\n const firstParam = getFirstParameterToken(fn);\n if (!firstParam) {\n return false;\n }\n\n const normalized = firstParam.toLowerCase();\n if (\n FACTORY_NAME_HINTS.has(normalized) ||\n normalized.startsWith('ctx') ||\n normalized.startsWith('_ctx') ||\n normalized.startsWith('trace')\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a function that takes ctx returns another function (factory pattern)\n * vs returning a value directly (immediate execution pattern)\n */\nfunction isFactoryReturningFunction(\n fnWithCtx: (ctx: TraceContext) => unknown,\n): boolean {\n try {\n const result = fnWithCtx(createDummyCtx());\n return typeof result === 'function';\n } catch {\n // If the function throws when called with dummy ctx, assume it's immediate execution\n // since factory functions typically just return a function and don't execute logic\n return false;\n }\n}\n\nfunction isTraceFactoryFunction<TArgs extends any[], TReturn>(\n fn:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n): fn is (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn> {\n if (typeof fn !== 'function') {\n return false;\n }\n\n if (hasFactoryMark(fn as AnyFn)) {\n return true;\n }\n\n if (looksLikeTraceFactory(fn as AnyFn)) {\n markAsTraceFactory(fn as AnyFn);\n return true;\n }\n\n return false;\n}\n\nfunction ensureTraceFactory<TArgs extends any[], TReturn>(\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n): (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn> {\n if (isTraceFactoryFunction(fnOrFactory)) {\n return fnOrFactory;\n }\n\n const plainFn = fnOrFactory as (...args: TArgs) => TReturn | Promise<TReturn>;\n const factory = (ctx: TraceContext) => {\n void ctx;\n return plainFn;\n };\n markAsTraceFactory(factory);\n return factory;\n}\n\ntype ExtractFunctionSignature<T> = T extends (ctx: TraceContext) => infer F\n ? F extends (...args: infer Args) => infer Return\n ? (...args: Args) => Return\n : never\n : never;\n\ntype WrappedFunction<TArgs extends any[], TReturn> = (...args: TArgs) => TReturn | Promise<TReturn>;\n\n/**\n * trace function options\n */\nexport interface traceOptions<TArgs extends any[] = any[], TReturn = any> {\n name?: string;\n serviceName?: string;\n sampler?: Sampler;\n attributesFromArgs?: (args: TArgs) => Record<string, unknown>;\n attributesFromResult?: (result: TReturn) => Record<string, unknown>;\n attributes?: Record<string, unknown>;\n}\n\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\nfunction createDummyCtx(): TraceContext {\n return {\n traceId: '',\n spanId: '',\n correlationId: '',\n setAttribute: () => {},\n setAttributes: () => {},\n setStatus: () => {},\n recordException: () => {},\n addEvent: () => {},\n addLink: () => {},\n addLinks: () => {},\n updateName: () => {},\n isRecording: () => false,\n } as TraceContext;\n}\n\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\ntype InstrumentableFunction<TArgs extends any[] = any[], TReturn = any> = ((\n ...args: TArgs\n) => TReturn | Promise<TReturn>) & {\n displayName?: string;\n name?: string;\n};\n\nfunction inferFunctionName<TArgs extends any[] = any[], TReturn = any>(\n fn: InstrumentableFunction<TArgs, TReturn>,\n): string | undefined {\n const displayName = (fn as { displayName?: string }).displayName;\n if (displayName) {\n return displayName;\n }\n\n if (fn.name && fn.name !== 'anonymous') {\n return fn.name;\n }\n\n const source = Function.prototype.toString.call(fn);\n const match = source.match(/function\\s+([^(\\s]+)/);\n if (match && match[1] && match[1] !== 'anonymous') {\n return match[1];\n }\n\n return undefined;\n}\n\nfunction getSpanName<TArgs extends any[], TReturn>(\n options: traceOptions<TArgs, TReturn>,\n fn: InstrumentableFunction<TArgs, TReturn>,\n variableName?: string,\n): string {\n if (options.name) {\n return options.name;\n }\n\n let fnName = variableName ?? inferFunctionName(fn);\n fnName = fnName || 'anonymous';\n\n if (options.serviceName) {\n return `${options.serviceName}.${fnName}`;\n }\n\n if (fnName && fnName !== 'anonymous') {\n return fnName;\n }\n\n return 'unknown';\n}\n\nfunction isAsyncFunction(fn: unknown): boolean {\n return typeof fn === 'function' && fn.constructor?.name === 'AsyncFunction';\n}\n\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel.edge.functional.instrumented');\n\nfunction wrapWithTracingAsync<TArgs extends any[], TReturn>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): (...args: TArgs) => Promise<TReturn> {\n const tempFn = fnFactory(createDummyCtx());\n const spanName = getSpanName(options, tempFn, variableName);\n\n const wrappedFunction = async function wrappedFunction(this: unknown, ...args: TArgs): Promise<TReturn> {\n const tracer = otelTrace.getTracer('autotel-edge');\n const spanOptions: Record<string, unknown> = options.sampler ? { sampler: options.sampler } : {};\n\n return tracer.startActiveSpan(spanName, spanOptions, async (span) => {\n setSpanName(span, spanName);\n\n try {\n const actualFn = fnFactory(createTraceContext(span));\n\n if (options.attributes) {\n span.setAttributes(options.attributes as Record<string, AttributeValue>);\n }\n\n if (options.attributesFromArgs) {\n const argsAttrs = options.attributesFromArgs(args);\n span.setAttributes(argsAttrs as Record<string, AttributeValue>);\n }\n\n const result = await actualFn(...args);\n\n if (options.attributesFromResult) {\n const resultAttrs = options.attributesFromResult(result);\n span.setAttributes(resultAttrs as Record<string, AttributeValue>);\n }\n\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n });\n };\n\n Object.defineProperty(wrappedFunction, 'name', {\n value: tempFn.name || 'trace',\n configurable: true,\n });\n\n (wrappedFunction as any)[INSTRUMENTED_SYMBOL] = true;\n\n return wrappedFunction;\n}\n\nfunction wrapWithTracingSync<TArgs extends any[], TReturn>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): (...args: TArgs) => TReturn {\n const tempFn = fnFactory(createDummyCtx());\n const spanName = getSpanName(options, tempFn, variableName);\n\n const wrappedFunction = function wrappedFunction(this: unknown, ...args: TArgs): TReturn {\n const tracer = otelTrace.getTracer('autotel-edge');\n const spanOptions: Record<string, unknown> = options.sampler ? { sampler: options.sampler } : {};\n\n return tracer.startActiveSpan(spanName, spanOptions, (span) => {\n setSpanName(span, spanName);\n\n try {\n const actualFn = fnFactory(createTraceContext(span));\n\n if (options.attributes) {\n span.setAttributes(options.attributes as Record<string, AttributeValue>);\n }\n\n if (options.attributesFromArgs) {\n const argsAttrs = options.attributesFromArgs(args);\n span.setAttributes(argsAttrs as Record<string, AttributeValue>);\n }\n\n const result = actualFn(...args);\n\n if (options.attributesFromResult) {\n const resultAttrs = options.attributesFromResult(result as TReturn);\n span.setAttributes(resultAttrs as Record<string, AttributeValue>);\n }\n\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n });\n };\n\n Object.defineProperty(wrappedFunction, 'name', {\n value: tempFn.name || 'trace',\n configurable: true,\n });\n\n (wrappedFunction as any)[INSTRUMENTED_SYMBOL] = true;\n\n return wrappedFunction;\n}\n\nfunction wrapFactoryWithTracing<TArgs extends any[], TReturn>(\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): WrappedFunction<TArgs, TReturn> {\n const factory = ensureTraceFactory(fnOrFactory);\n const sampleFn = factory(createDummyCtx());\n const useAsyncWrapper = isAsyncFunction(sampleFn);\n\n if (useAsyncWrapper) {\n return wrapWithTracingAsync(\n factory as (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n options,\n variableName,\n ) as WrappedFunction<TArgs, TReturn>;\n }\n\n return wrapWithTracingSync(\n factory as (ctx: TraceContext) => (...args: TArgs) => TReturn,\n options,\n variableName,\n ) as WrappedFunction<TArgs, TReturn>;\n}\n\n/**\n * Execute a function immediately within a trace span\n * Used for the immediate execution pattern: trace((ctx) => result)\n */\nfunction executeImmediately<TReturn = any>(\n fn: (ctx: TraceContext) => TReturn | Promise<TReturn>,\n options: traceOptions<any[], any>,\n): TReturn | Promise<TReturn> {\n const tracer = otelTrace.getTracer('@autotel/edge');\n const spanName = options.name || 'anonymous';\n\n return tracer.startActiveSpan(spanName, (span) => {\n try {\n setSpanName(span, spanName);\n const ctxValue = createTraceContext(span);\n\n const onSuccess = (result: TReturn) => {\n span.setStatus({ code: SpanStatusCode.OK });\n if (options.attributes) {\n for (const [key, value] of Object.entries(options.attributes)) {\n span.setAttribute(key, value as AttributeValue);\n }\n }\n span.end();\n return result;\n };\n\n const onError = (error: unknown): never => {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n const truncatedMessage = truncateErrorMessage(errorMessage);\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncatedMessage,\n });\n\n span.setAttribute('error', true);\n span.setAttribute('exception.type',\n error instanceof Error ? error.constructor.name : 'Error');\n span.setAttribute('exception.message', truncatedMessage);\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n span.end();\n throw error;\n };\n\n const result = fn(ctxValue);\n\n // Check if result is a Promise\n if (result instanceof Promise) {\n return result.then(onSuccess, onError);\n }\n\n return onSuccess(result);\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n const truncatedMessage = truncateErrorMessage(errorMessage);\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncatedMessage,\n });\n\n span.setAttribute('error', true);\n span.setAttribute('exception.message', truncatedMessage);\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n span.end();\n throw error;\n }\n });\n}\n\n// Sync overloads - Factory pattern with explicit return type helps TypeScript infer\n// Overload 1a: Plain sync function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fn: () => TReturn,\n): () => TReturn;\n// Overload 1b: Plain sync function (auto-inferred name)\nexport function trace<TArgs extends any[], TReturn = any>(\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 1c: Factory sync function with no args returning explicit type (auto-inferred name)\nexport function trace<TReturn = any>(\n fnFactory: (ctx: TraceContext) => () => TReturn,\n): () => TReturn;\n// Overload 1d: Immediate execution - sync function with context (NEW PATTERN)\nexport function trace<TReturn = any>(\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n// Overload 1e: Factory sync function - use conditional type to extract signature (MUST come before generic)\n// This overload is more specific and helps TypeScript infer types from factory functions\nexport function trace<TFactory extends (ctx: TraceContext) => (...args: any[]) => any>(\n fnFactory: TFactory,\n): ExtractFunctionSignature<TFactory>;\n// Overload 1f: Generic factory sync function (fallback)\nexport function trace<TArgs extends any[], TReturn = any>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 2a: Name + plain sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 2b: Name + immediate execution sync with context\nexport function trace<TReturn = any>(\n name: string,\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n\n// Overload 2c: Name + factory sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 3a: Options + plain sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 3b: Options + immediate execution sync with context\nexport function trace<TReturn = any>(\n options: traceOptions<[], TReturn>,\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n\n// Overload 3c: Options + factory sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Async overloads\n// Overload 4a: Plain async function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fn: () => Promise<TReturn>,\n): () => Promise<TReturn>;\n// Overload 4b: Plain async function (auto-inferred name)\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 4c: Immediate execution - async function with context (NEW PATTERN)\nexport function trace<TReturn = any>(\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n// Overload 4d: Factory async function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fnFactory: (ctx: TraceContext) => () => Promise<TReturn>,\n): () => Promise<TReturn>;\n// Overload 4e: Factory async function (auto-inferred name)\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 5a: Name + plain async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 5b: Name + immediate execution async with context\nexport function trace<TReturn = any>(\n name: string,\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n\n// Overload 5c: Name + factory async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 6a: Options + plain async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 6b: Options + immediate execution async with context\nexport function trace<TReturn = any>(\n options: traceOptions<[], TReturn>,\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n\n// Overload 6c: Options + factory async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Implementation\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fnOrNameOrOptions:\n | ((...args: TArgs) => TReturn)\n | ((...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn)\n | ((ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => TReturn)\n | ((ctx: TraceContext) => Promise<TReturn>)\n | string\n | traceOptions<TArgs, TReturn>,\n maybeFn?:\n | ((...args: TArgs) => TReturn)\n | ((...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn)\n | ((ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => TReturn)\n | ((ctx: TraceContext) => Promise<TReturn>),\n): WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn> {\n // Handle: trace(fn) - single argument\n if (typeof fnOrNameOrOptions === 'function') {\n // Check if it's immediate execution pattern: (ctx) => result\n if (\n looksLikeTraceFactory(fnOrNameOrOptions as AnyFn) &&\n !isFactoryReturningFunction(fnOrNameOrOptions as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern\n return executeImmediately(\n fnOrNameOrOptions as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n {},\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n // Factory pattern or plain function\n return wrapFactoryWithTracing(\n fnOrNameOrOptions as (...args: TArgs) => TReturn,\n {} as traceOptions<TArgs, TReturn>,\n );\n }\n\n // Handle: trace(name, fn) or trace(options, fn) - two arguments\n if (typeof fnOrNameOrOptions === 'string') {\n if (!maybeFn) {\n throw new Error('trace(name, fn): fn is required');\n }\n // Check if it's immediate execution pattern\n if (\n looksLikeTraceFactory(maybeFn as AnyFn) &&\n !isFactoryReturningFunction(maybeFn as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern with name\n return executeImmediately(\n maybeFn as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n { name: fnOrNameOrOptions },\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n return wrapFactoryWithTracing(\n maybeFn as (...args: TArgs) => TReturn,\n { name: fnOrNameOrOptions } as traceOptions<TArgs, TReturn>,\n );\n }\n\n // Handle: trace(options, fn)\n if (!maybeFn) {\n throw new Error('trace(options, fn): fn is required');\n }\n\n // Check if it's immediate execution pattern\n if (\n looksLikeTraceFactory(maybeFn as AnyFn) &&\n !isFactoryReturningFunction(maybeFn as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern with options\n return executeImmediately(\n maybeFn as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n fnOrNameOrOptions as traceOptions<any[], any>,\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n\n return wrapFactoryWithTracing(\n maybeFn as (...args: TArgs) => TReturn,\n fnOrNameOrOptions as traceOptions<TArgs, TReturn>,\n );\n}\n\nexport function withTracing<TArgs extends any[] = any[], TReturn = any>(\n options: Omit<traceOptions<TArgs, TReturn>, 'name'>,\n) {\n return (\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>)\n ): WrappedFunction<TArgs, TReturn> => wrapFactoryWithTracing(fnOrFactory, options as traceOptions<TArgs, TReturn>);\n}\n\nfunction shouldSkip(key: string, fn: Function, skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[]): boolean {\n if (key.startsWith('_')) {\n return true;\n }\n\n if (!skip || skip.length === 0) {\n return false;\n }\n\n for (const pattern of skip) {\n if (typeof pattern === 'string' && key === pattern) {\n return true;\n }\n if (pattern instanceof RegExp && pattern.test(key)) {\n return true;\n }\n if (typeof pattern === 'function' && pattern(key, fn)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface InstrumentOptions extends traceOptions {\n functions: Record<string, any>;\n overrides?: Record<string, Partial<traceOptions>>;\n skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[];\n}\n\nexport function instrument<T extends Record<string, any>>(\n options: InstrumentOptions,\n): T {\n const { functions, ...tracingOptions } = options;\n const instrumented: Record<string, any> = {};\n\n for (const key of Object.keys(functions)) {\n const fn = functions[key];\n\n if (typeof fn !== 'function') {\n instrumented[key] = fn;\n continue;\n }\n\n if (shouldSkip(key, fn, tracingOptions.skip)) {\n instrumented[key] = fn;\n continue;\n }\n\n const fnOptions: traceOptions = {\n ...tracingOptions,\n ...tracingOptions.overrides?.[key],\n name: tracingOptions.overrides?.[key]?.name ?? tracingOptions.name,\n };\n\n const boundFn = fn.bind(functions);\n const fnFactory = (_ctx: TraceContext) => boundFn as AnyFn;\n\n instrumented[key] = wrapFactoryWithTracing(fnFactory, fnOptions, key);\n }\n\n return instrumented as T;\n}\n\nexport interface SpanOptions {\n name: string;\n attributes?: Record<string, string | number | boolean>;\n}\n\nexport function span<T = unknown>(options: SpanOptions, fn: (span: Span) => T): T;\nexport function span<T = unknown>(\n options: SpanOptions,\n fn: (span: Span) => Promise<T>,\n): Promise<T>;\nexport function span<T = unknown>(\n options: SpanOptions,\n fn: (span: Span) => T | Promise<T>,\n): T | Promise<T> {\n const tracer = otelTrace.getTracer('autotel-edge');\n\n const execute = (span: Span) => {\n setSpanName(span, options.name);\n\n try {\n if (options.attributes) {\n for (const [key, value] of Object.entries(options.attributes)) {\n span.setAttribute(key, value);\n }\n }\n\n const result = fn(span);\n\n if (result instanceof Promise) {\n return result\n .then((value) => {\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n })\n .catch((error) => {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n });\n }\n\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n };\n\n const result = tracer.startActiveSpan(options.name, execute);\n\n if (result instanceof Promise) {\n return result;\n }\n\n return result as T;\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/span.ts","../src/core/tracer.ts","../src/core/context.ts","../src/core/provider.ts","../src/core/buffer.ts","../src/functional.ts"],"names":["context","api_context","sanitizeAttributes","span","trace","wrappedFunction","otelTrace","result"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Lightweight Span implementation for edge environments\n */\n\nimport type {\n Attributes,\n AttributeValue,\n Exception,\n HrTime,\n Link,\n Span,\n SpanContext,\n SpanKind,\n SpanStatus,\n SpanStatusCode,\n TimeInput,\n} from '@opentelemetry/api';\nimport {\n hrTimeDuration,\n type InstrumentationScope,\n isAttributeValue,\n isTimeInput,\n sanitizeAttributes,\n} from '@opentelemetry/core';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ReadableSpan, TimedEvent } from '@opentelemetry/sdk-trace-base';\nimport { SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE } from '@opentelemetry/semantic-conventions';\n\ntype OnSpanEnd = (span: Span) => void;\n\ninterface SpanInit {\n attributes: unknown;\n name: string;\n onEnd: OnSpanEnd;\n resource: Resource;\n spanContext: SpanContext;\n parentSpanContext?: SpanContext;\n links?: Link[];\n parentSpanId?: string;\n spanKind?: SpanKind;\n startTime?: TimeInput;\n}\n\nfunction transformExceptionAttributes(exception: Exception): Attributes {\n const attributes: Attributes = {};\n if (typeof exception === 'string') {\n attributes[SEMATTRS_EXCEPTION_MESSAGE] = exception;\n } else {\n if (exception.code) {\n attributes[SEMATTRS_EXCEPTION_TYPE] = exception.code.toString();\n } else if (exception.name) {\n attributes[SEMATTRS_EXCEPTION_TYPE] = exception.name;\n }\n if (exception.message) {\n attributes[SEMATTRS_EXCEPTION_MESSAGE] = exception.message;\n }\n if (exception.stack) {\n attributes[SEMATTRS_EXCEPTION_STACKTRACE] = exception.stack;\n }\n }\n return attributes;\n}\n\nfunction millisToHr(millis: number): HrTime {\n return [Math.trunc(millis / 1000), (millis % 1000) * 1e6];\n}\n\nfunction getHrTime(input?: TimeInput): HrTime {\n const now = Date.now();\n if (!input) {\n return millisToHr(now);\n } else if (input instanceof Date) {\n return millisToHr(input.getTime());\n } else if (typeof input === 'number') {\n return millisToHr(input);\n } else if (Array.isArray(input)) {\n return input;\n }\n\n const v: never = input;\n throw new Error(`unreachable value: ${JSON.stringify(v)}`);\n}\n\n// Previously exported from OTel, now private\nfunction isAttributeKey(key: unknown): key is string {\n return typeof key === 'string' && key.length > 0;\n}\n\n/**\n * Lightweight Span implementation for edge runtimes\n */\nexport class SpanImpl implements Span, ReadableSpan {\n name: string;\n private readonly _spanContext: SpanContext;\n private readonly onEnd: OnSpanEnd;\n readonly parentSpanId?: string;\n readonly parentSpanContext?: SpanContext | undefined;\n readonly kind: SpanKind;\n readonly attributes: Attributes;\n status: SpanStatus = {\n code: 0 as SpanStatusCode, // SpanStatusCode.UNSET\n };\n endTime: HrTime = [0, 0];\n private _duration: HrTime = [0, 0];\n readonly startTime: HrTime;\n readonly events: TimedEvent[] = [];\n readonly links: Link[];\n readonly resource: Resource;\n instrumentationScope: InstrumentationScope = {\n name: 'autotel-edge',\n };\n private _ended: boolean = false;\n private _droppedAttributesCount: number = 0;\n private _droppedEventsCount: number = 0;\n private _droppedLinksCount: number = 0;\n\n constructor(init: SpanInit) {\n this.name = init.name;\n this._spanContext = init.spanContext;\n this.parentSpanId = init.parentSpanId;\n this.parentSpanContext = init.parentSpanContext;\n this.kind = init.spanKind || (0 as SpanKind); // SpanKind.INTERNAL\n this.attributes = sanitizeAttributes(init.attributes);\n this.startTime = getHrTime(init.startTime);\n this.links = init.links || [];\n this.resource = init.resource;\n this.onEnd = init.onEnd;\n }\n\n addLink(link: Link): this {\n this.links.push(link);\n return this;\n }\n\n addLinks(links: Link[]): this {\n this.links.push(...links);\n return this;\n }\n\n spanContext(): SpanContext {\n return this._spanContext;\n }\n\n setAttribute(key: string, value?: AttributeValue): this {\n if (isAttributeKey(key) && isAttributeValue(value)) {\n this.attributes[key] = value;\n }\n return this;\n }\n\n setAttributes(attributes: Attributes): this {\n for (const [key, value] of Object.entries(attributes)) {\n this.setAttribute(key, value);\n }\n return this;\n }\n\n addEvent(\n name: string,\n attributesOrStartTime?: Attributes | TimeInput,\n startTime?: TimeInput,\n ): this {\n if (isTimeInput(attributesOrStartTime)) {\n startTime = attributesOrStartTime;\n attributesOrStartTime = undefined;\n }\n\n const attributes = sanitizeAttributes(attributesOrStartTime);\n const time = getHrTime(startTime);\n this.events.push({ name, attributes, time });\n return this;\n }\n\n setStatus(status: SpanStatus): this {\n this.status = status;\n return this;\n }\n\n updateName(name: string): this {\n this.name = name;\n return this;\n }\n\n end(endTime?: TimeInput): void {\n if (this._ended) {\n return;\n }\n this._ended = true;\n this.endTime = getHrTime(endTime);\n this._duration = hrTimeDuration(this.startTime, this.endTime);\n this.onEnd(this);\n }\n\n isRecording(): boolean {\n return !this._ended;\n }\n\n recordException(exception: Exception, time?: TimeInput): void {\n const attributes = transformExceptionAttributes(exception);\n this.addEvent('exception', attributes, time);\n }\n\n get duration(): HrTime {\n return this._duration;\n }\n\n get ended(): boolean {\n return this._ended;\n }\n\n get droppedAttributesCount(): number {\n return this._droppedAttributesCount;\n }\n\n get droppedEventsCount(): number {\n return this._droppedEventsCount;\n }\n\n get droppedLinksCount(): number {\n return this._droppedLinksCount;\n }\n}\n","/**\n * Lightweight WorkerTracer for edge environments\n */\n\nimport type {\n Attributes,\n Tracer,\n Span,\n SpanKind,\n SpanOptions,\n Context,\n} from '@opentelemetry/api';\nimport {\n context as api_context,\n trace,\n type SpanContext,\n} from '@opentelemetry/api';\nimport { sanitizeAttributes } from '@opentelemetry/core';\nimport type { Resource } from '@opentelemetry/resources';\nimport {\n type SpanProcessor,\n RandomIdGenerator,\n type ReadableSpan,\n SamplingDecision,\n} from '@opentelemetry/sdk-trace-base';\n\nimport { SpanImpl } from './span';\nimport type { TraceFlushableSpanProcessor } from '../types';\n\nconst NewTraceFlags = {\n RANDOM_TRACE_ID_SET: 2,\n RANDOM_TRACE_ID_UNSET: 0,\n} as const;\n\ntype NewTraceFlagValues =\n | typeof NewTraceFlags.RANDOM_TRACE_ID_SET\n | typeof NewTraceFlags.RANDOM_TRACE_ID_UNSET;\n\nconst idGenerator: RandomIdGenerator = new RandomIdGenerator();\n\nlet withNextSpanAttributes: Attributes;\n\nfunction getFlagAt(flagSequence: number, position: number): number {\n return ((flagSequence >> (position - 1)) & 1) * position;\n}\n\n/**\n * WorkerTracer - Lightweight tracer for edge environments\n */\nexport class WorkerTracer implements Tracer {\n private readonly spanProcessors: TraceFlushableSpanProcessor[];\n private readonly resource: Resource;\n private headSampler: any; // Will be set via setHeadSampler\n\n constructor(spanProcessors: SpanProcessor[], resource: Resource) {\n this.spanProcessors = spanProcessors as TraceFlushableSpanProcessor[];\n this.resource = resource;\n }\n\n /**\n * Set the head sampler (called from config)\n */\n setHeadSampler(sampler: any): void {\n this.headSampler = sampler;\n }\n\n /**\n * Force flush spans for a specific trace\n */\n async forceFlush(traceId?: string) {\n const promises = this.spanProcessors.map(async (spanProcessor) => {\n await spanProcessor.forceFlush(traceId);\n });\n await Promise.allSettled(promises);\n }\n\n /**\n * Add extra resource attributes\n */\n addToResource(extra: Resource) {\n this.resource.merge(extra);\n }\n\n /**\n * Start a new span\n */\n startSpan(\n name: string,\n options: SpanOptions = {},\n context = api_context.active(),\n ): Span {\n if (options.root) {\n context = trace.deleteSpan(context);\n }\n\n if (!this.headSampler) {\n throw new Error(\n 'Head sampler not configured. This is a bug in the instrumentation logic',\n );\n }\n\n const parentSpanContext = trace.getSpan(context)?.spanContext();\n const { traceId, randomTraceFlag } = getTraceInfo(parentSpanContext);\n\n const spanKind = options.kind || (0 as SpanKind); // SpanKind.INTERNAL\n const sanitisedAttrs = sanitizeAttributes(options.attributes);\n\n // Use per-span sampler if provided, otherwise use head sampler\n const optionsWithSampler = options as any;\n const sampler = optionsWithSampler.sampler || this.headSampler;\n\n const samplingDecision = sampler.shouldSample(\n context,\n traceId,\n name,\n spanKind,\n sanitisedAttrs,\n [],\n );\n const { decision, traceState, attributes: attrs } = samplingDecision;\n\n const attributes = Object.assign(\n {},\n options.attributes,\n attrs,\n withNextSpanAttributes,\n );\n withNextSpanAttributes = {};\n\n const spanId = idGenerator.generateSpanId();\n const parentSpanId = parentSpanContext?.spanId;\n\n const sampleFlag =\n decision === SamplingDecision.RECORD_AND_SAMPLED ? 1 : 0; // TraceFlags.SAMPLED : TraceFlags.NONE\n const traceFlags = sampleFlag + randomTraceFlag;\n const spanContext: SpanContext = { traceId, spanId, traceFlags, traceState };\n\n const span = new SpanImpl({\n attributes: sanitizeAttributes(attributes),\n name,\n onEnd: (span) => {\n for (const sp of this.spanProcessors) {\n sp.onEnd(span as unknown as ReadableSpan);\n }\n },\n resource: this.resource,\n spanContext,\n parentSpanContext,\n parentSpanId,\n spanKind,\n startTime: options.startTime,\n });\n\n for (const sp of this.spanProcessors) {\n //@ts-ignore - OTel type quirk\n sp.onStart(span, context);\n }\n\n return span;\n }\n\n /**\n * Start an active span (with automatic context management)\n */\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n ...args: unknown[]\n ): ReturnType<F> {\n const options = args.length > 1 ? (args[0] as SpanOptions) : undefined;\n const parentContext =\n args.length > 2 ? (args[1] as Context) : api_context.active();\n const fn = args.at(-1) as F;\n\n const span = this.startSpan(name, options, parentContext);\n const contextWithSpanSet = trace.setSpan(parentContext, span);\n\n return api_context.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\n/**\n * Set attributes for the next span created\n */\nexport function withNextSpan(attrs: Attributes) {\n withNextSpanAttributes = Object.assign({}, withNextSpanAttributes, attrs);\n}\n\nfunction getTraceInfo(parentSpanContext?: SpanContext): {\n traceId: string;\n randomTraceFlag: NewTraceFlagValues;\n} {\n if (parentSpanContext && trace.isSpanContextValid(parentSpanContext)) {\n const { traceId, traceFlags } = parentSpanContext;\n return { traceId, randomTraceFlag: getFlagAt(traceFlags, 2) as NewTraceFlagValues };\n } else {\n return {\n traceId: idGenerator.generateTraceId(),\n randomTraceFlag: NewTraceFlags.RANDOM_TRACE_ID_SET,\n };\n }\n}\n","/**\n * AsyncLocalStorage-based context manager for edge environments\n *\n * Copyright The OpenTelemetry Authors\n * Licensed under the Apache License, Version 2.0\n */\n\nimport type { ContextManager, Context } from '@opentelemetry/api';\nimport { ROOT_CONTEXT } from '@opentelemetry/api';\n\n//@ts-ignore - node:async_hooks available in CF Workers with nodejs_compat\nimport { AsyncLocalStorage } from 'node:async_hooks';\n//@ts-ignore\nimport { EventEmitter } from 'node:events';\n\ntype Func<T> = (...args: unknown[]) => T;\n\n/**\n * Store a map for each event of all original listeners and their \"patched\"\n * version. So when a listener is removed by the user, the corresponding\n * patched function will be also removed.\n */\ninterface PatchMap {\n [name: string]: WeakMap<Func<void>, Func<void>>;\n}\n\nconst ADD_LISTENER_METHODS = [\n 'addListener' as const,\n 'on' as const,\n 'once' as const,\n 'prependListener' as const,\n 'prependOnceListener' as const,\n];\n\nabstract class AbstractAsyncHooksContextManager implements ContextManager {\n abstract active(): Context;\n\n abstract with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F>;\n\n abstract enable(): this;\n\n abstract disable(): this;\n\n /**\n * Binds a context to the target function or event emitter\n */\n bind<T>(context: Context, target: T): T {\n if (target instanceof EventEmitter) {\n return this._bindEventEmitter(context, target);\n }\n\n if (typeof target === 'function') {\n return this._bindFunction(context, target);\n }\n return target;\n }\n\n private _bindFunction<T extends Function>(context: Context, target: T): T {\n const manager = this;\n const contextWrapper = function (this: never, ...args: unknown[]) {\n return manager.with(context, () => target.apply(this, args));\n };\n Object.defineProperty(contextWrapper, 'length', {\n enumerable: false,\n configurable: true,\n writable: false,\n value: target.length,\n });\n return contextWrapper as any;\n }\n\n /**\n * By default, EventEmitter calls callbacks with their context, which we do\n * not want. Instead we bind a specific context to all callbacks.\n */\n private _bindEventEmitter<T extends EventEmitter>(\n context: Context,\n ee: T,\n ): T {\n const map = this._getPatchMap(ee);\n if (map !== undefined) return ee;\n this._createPatchMap(ee);\n\n // Patch methods that add a listener to propagate context\n for (const methodName of ADD_LISTENER_METHODS) {\n if (ee[methodName] === undefined) continue;\n ee[methodName] = this._patchAddListener(ee, ee[methodName], context);\n }\n\n // Patch methods that remove a listener\n if (typeof ee.removeListener === 'function') {\n ee.removeListener = this._patchRemoveListener(ee, ee.removeListener);\n }\n if (typeof ee.off === 'function') {\n ee.off = this._patchRemoveListener(ee, ee.off);\n }\n\n // Patch method that removes all listeners\n if (typeof ee.removeAllListeners === 'function') {\n ee.removeAllListeners = this._patchRemoveAllListeners(\n ee,\n ee.removeAllListeners,\n );\n }\n return ee;\n }\n\n private _patchRemoveListener(ee: EventEmitter, original: Function) {\n const contextManager = this;\n return function (this: never, event: string, listener: Func<void>) {\n const events = contextManager._getPatchMap(ee)?.[event];\n if (events === undefined) {\n return original.call(this, event, listener);\n }\n const patchedListener = events.get(listener);\n return original.call(this, event, patchedListener || listener);\n };\n }\n\n private _patchRemoveAllListeners(ee: EventEmitter, original: Function) {\n const contextManager = this;\n return function (this: never, event: string) {\n const map = contextManager._getPatchMap(ee);\n if (map !== undefined) {\n if (arguments.length === 0) {\n contextManager._createPatchMap(ee);\n } else if (map[event] !== undefined) {\n delete map[event];\n }\n }\n return Reflect.apply(original, this, arguments);\n };\n }\n\n private _patchAddListener(\n ee: EventEmitter,\n original: Function,\n context: Context,\n ) {\n const contextManager = this;\n return function (this: never, event: string, listener: Func<void>) {\n /**\n * This check prevents double-wrapping the listener.\n * The implementation for ee.once wraps the listener and calls ee.on.\n * Without this check, we would wrap that wrapped listener.\n */\n if (contextManager._wrapped) {\n return original.call(this, event, listener);\n }\n let map = contextManager._getPatchMap(ee);\n if (map === undefined) {\n map = contextManager._createPatchMap(ee);\n }\n let listeners = map[event];\n if (listeners === undefined) {\n listeners = new WeakMap();\n map[event] = listeners;\n }\n const patchedListener = contextManager.bind(context, listener);\n // Store a weak reference of the user listener to ours\n listeners.set(listener, patchedListener);\n\n contextManager._wrapped = true;\n try {\n return original.call(this, event, patchedListener);\n } finally {\n contextManager._wrapped = false;\n }\n };\n }\n\n private _createPatchMap(ee: EventEmitter): PatchMap {\n const map = Object.create(null);\n (ee as any)[this._kOtListeners] = map;\n return map;\n }\n\n private _getPatchMap(ee: EventEmitter): PatchMap | undefined {\n return (ee as never)[this._kOtListeners];\n }\n\n private readonly _kOtListeners = Symbol('OtListeners');\n private _wrapped = false;\n}\n\n/**\n * AsyncLocalStorage-based context manager for edge runtimes\n */\nexport class AsyncLocalStorageContextManager extends AbstractAsyncHooksContextManager {\n private _asyncLocalStorage: AsyncLocalStorage<Context>;\n\n constructor() {\n super();\n this._asyncLocalStorage = new AsyncLocalStorage();\n }\n\n active(): Context {\n return this._asyncLocalStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n const cb = thisArg == null ? fn : fn.bind(thisArg);\n return this._asyncLocalStorage.run(context, cb as never, ...args);\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n this._asyncLocalStorage.disable();\n return this;\n }\n}\n","/**\n * Tracer provider for edge environments\n */\n\nimport { trace } from '@opentelemetry/api';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { SpanProcessor, TracerConfig } from '@opentelemetry/sdk-trace-base';\nimport { WorkerTracer } from './tracer';\nimport { AsyncLocalStorageContextManager } from './context';\n\n/**\n * WorkerTracerProvider - Registers tracer globally\n */\nexport class WorkerTracerProvider {\n private tracer: WorkerTracer;\n private contextManager: AsyncLocalStorageContextManager;\n\n constructor(spanProcessors: SpanProcessor[], resource: Resource) {\n this.tracer = new WorkerTracer(spanProcessors, resource);\n this.contextManager = new AsyncLocalStorageContextManager();\n }\n\n /**\n * Get the tracer instance\n */\n getTracer(_name: string, _version?: string, _config?: TracerConfig): WorkerTracer {\n return this.tracer;\n }\n\n /**\n * Register this provider as the global tracer\n */\n register(): void {\n // Enable context manager\n this.contextManager.enable();\n\n // Set tracer provider\n const provider = {\n getTracer: (_name: string, _version?: string) => this.tracer,\n };\n\n // @ts-ignore - OTel types\n trace.setGlobalTracerProvider(provider);\n }\n}\n","/**\n * Buffer polyfill for edge environments\n *\n * Cloudflare Workers and other edge runtimes need the Buffer global\n * for OpenTelemetry OTLP serialization.\n */\n\n//@ts-ignore - node:buffer available in CF Workers with nodejs_compat\nimport { Buffer } from 'node:buffer';\n\n//@ts-ignore\nglobalThis.Buffer = Buffer;\n\n\n\nexport {Buffer} from 'node:buffer';","/**\n * Functional API for autotel-edge\n *\n * Provides zero-boilerplate tracing helpers that mirror the Node.js runtime\n * implementation while staying optimized for edge environments.\n */\n\nimport {\n trace as otelTrace,\n SpanStatusCode,\n type Span,\n type AttributeValue,\n} from '@opentelemetry/api';\nimport type { Sampler } from '@opentelemetry/sdk-trace-base';\nimport type { TraceContext } from './core/trace-context';\nimport { createTraceContext, setSpanName } from './core/trace-context';\n\n// Re-export for convenience\nexport type { TraceContext } from './core/trace-context';\n\ntype AnyFn = (...args: any[]) => any;\n\nconst TRACE_FACTORY_MARK = '__autotelEdgeTraceFactory';\nconst INSTRUMENTED_MARK = '__autotelEdgeInstrumented';\nconst FACTORY_NAME_HINTS: Record<string, true> = {\n ctx: true,\n _ctx: true,\n context: true,\n tracecontext: true,\n tracectx: true,\n};\n\nconst SINGLE_LINE_COMMENT_REGEX = /\\/\\/.*$/gm;\nconst MULTI_LINE_COMMENT_REGEX = /\\/\\*[\\s\\S]*?\\*\\//gm;\nconst PARAM_TOKEN_SANITIZE_REGEX = new RegExp(String.raw`[{}\\[\\]\\s]`, 'g');\n\ninterface TraceFactoryMarked {\n [TRACE_FACTORY_MARK]?: true;\n}\n\nfunction markAsTraceFactory(fn: AnyFn): void {\n try {\n Object.defineProperty(fn, TRACE_FACTORY_MARK, {\n value: true,\n configurable: true,\n });\n } catch {\n (fn as TraceFactoryMarked)[TRACE_FACTORY_MARK] = true;\n }\n}\n\nfunction hasFactoryMark(fn: AnyFn): boolean {\n return Boolean((fn as TraceFactoryMarked)[TRACE_FACTORY_MARK]);\n}\n\nfunction sanitizeParameterToken(token: string): string {\n const [firstToken] = token.split('=');\n return (firstToken ?? '').replaceAll(PARAM_TOKEN_SANITIZE_REGEX, '').trim();\n}\n\nfunction getFirstParameterToken(fn: AnyFn): string | null {\n let source = Function.prototype.toString.call(fn);\n source = source\n .replaceAll(MULTI_LINE_COMMENT_REGEX, '')\n .replaceAll(SINGLE_LINE_COMMENT_REGEX, '')\n .trim();\n\n const arrowMatch = source.match(/^(?:async\\s*)?(?:\\(([^)]*)\\)|([^=()]+))\\s*=>/);\n if (arrowMatch) {\n const params = (arrowMatch[1] ?? arrowMatch[2] ?? '').split(',');\n const first = params[0]?.trim();\n if (first) {\n return sanitizeParameterToken(first);\n }\n return null;\n }\n\n const functionMatch = source.match(/^[^(]*\\(([^)]*)\\)/);\n if (functionMatch) {\n const params = functionMatch[1]?.split(',');\n const first = params?.[0]?.trim();\n if (first) {\n return sanitizeParameterToken(first);\n }\n }\n\n return null;\n}\n\nfunction looksLikeTraceFactory(fn: AnyFn): boolean {\n if (hasFactoryMark(fn)) {\n return true;\n }\n\n if (fn.length === 0) {\n return false;\n }\n\n const firstParam = getFirstParameterToken(fn);\n if (!firstParam) {\n return false;\n }\n\n const normalized = firstParam.toLowerCase();\n if (\n Object.hasOwn(FACTORY_NAME_HINTS, normalized) ||\n normalized.startsWith('ctx') ||\n normalized.startsWith('_ctx') ||\n normalized.startsWith('trace')\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Check if a function that takes ctx returns another function (factory pattern)\n * vs returning a value directly (immediate execution pattern)\n */\nfunction isFactoryReturningFunction(\n fnWithCtx: (ctx: TraceContext) => unknown,\n): boolean {\n try {\n const result = fnWithCtx(createDummyCtx());\n return typeof result === 'function';\n } catch {\n // If the function throws when called with dummy ctx, assume it's immediate execution\n // since factory functions typically just return a function and don't execute logic\n return false;\n }\n}\n\nfunction isTraceFactoryFunction<TArgs extends any[], TReturn>(\n fn:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n): fn is (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn> {\n if (typeof fn !== 'function') {\n return false;\n }\n\n if (hasFactoryMark(fn as AnyFn)) {\n return true;\n }\n\n if (looksLikeTraceFactory(fn as AnyFn)) {\n markAsTraceFactory(fn as AnyFn);\n return true;\n }\n\n return false;\n}\n\nfunction ensureTraceFactory<TArgs extends any[], TReturn>(\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n): (ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn> {\n if (isTraceFactoryFunction(fnOrFactory)) {\n return fnOrFactory;\n }\n\n const plainFn = fnOrFactory as (...args: TArgs) => TReturn | Promise<TReturn>;\n const factory = (ctx: TraceContext) => {\n void ctx;\n return plainFn;\n };\n markAsTraceFactory(factory);\n return factory;\n}\n\ntype ExtractFunctionSignature<T> = T extends (ctx: TraceContext) => infer F\n ? F extends (...args: infer Args) => infer Return\n ? (...args: Args) => Return\n : never\n : never;\n\ntype WrappedFunction<TArgs extends any[], TReturn> = (...args: TArgs) => TReturn | Promise<TReturn>;\n\n/**\n * trace function options\n */\nexport interface traceOptions<TArgs extends any[] = any[], TReturn = any> {\n name?: string;\n serviceName?: string;\n sampler?: Sampler;\n attributesFromArgs?: (args: TArgs) => Record<string, unknown>;\n attributesFromResult?: (result: TReturn) => Record<string, unknown>;\n attributes?: Record<string, unknown>;\n}\n\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\nfunction createDummyCtx(): TraceContext {\n return {\n traceId: '',\n spanId: '',\n correlationId: '',\n setAttribute: () => {},\n setAttributes: () => {},\n setStatus: () => {},\n recordException: () => {},\n addEvent: () => {},\n addLink: () => {},\n addLinks: () => {},\n updateName: () => {},\n isRecording: () => false,\n } as TraceContext;\n}\n\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\ntype InstrumentableFunction<TArgs extends any[] = any[], TReturn = any> = ((\n ...args: TArgs\n) => TReturn | Promise<TReturn>) & {\n displayName?: string;\n name?: string;\n};\n\nfunction inferFunctionName<TArgs extends any[] = any[], TReturn = any>(\n fn: InstrumentableFunction<TArgs, TReturn>,\n): string | undefined {\n const displayName = (fn as { displayName?: string }).displayName;\n if (displayName) {\n return displayName;\n }\n\n if (fn.name && fn.name !== 'anonymous') {\n return fn.name;\n }\n\n const source = Function.prototype.toString.call(fn);\n const match = source.match(/function\\s+([^(\\s]+)/);\n if (match && match[1] && match[1] !== 'anonymous') {\n return match[1];\n }\n\n return undefined;\n}\n\nfunction getSpanName<TArgs extends any[], TReturn>(\n options: traceOptions<TArgs, TReturn>,\n fn: InstrumentableFunction<TArgs, TReturn>,\n variableName?: string,\n): string {\n if (options.name) {\n return options.name;\n }\n\n let fnName = variableName ?? inferFunctionName(fn);\n fnName = fnName || 'anonymous';\n\n if (options.serviceName) {\n return `${options.serviceName}.${fnName}`;\n }\n\n if (fnName && fnName !== 'anonymous') {\n return fnName;\n }\n\n return 'unknown';\n}\n\nfunction isAsyncFunction(fn: unknown): boolean {\n return typeof fn === 'function' && fn.constructor?.name === 'AsyncFunction';\n}\n\nfunction wrapWithTracingAsync<TArgs extends any[], TReturn>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): (...args: TArgs) => Promise<TReturn> {\n const tempFn = fnFactory(createDummyCtx());\n const spanName = getSpanName(options, tempFn, variableName);\n\n const wrappedFunction = async function wrappedFunction(this: unknown, ...args: TArgs): Promise<TReturn> {\n const tracer = otelTrace.getTracer('autotel-edge');\n const spanOptions: Record<string, unknown> = options.sampler ? { sampler: options.sampler } : {};\n\n return tracer.startActiveSpan(spanName, spanOptions, async (span) => {\n setSpanName(span, spanName);\n\n try {\n const actualFn = fnFactory(createTraceContext(span));\n\n if (options.attributes) {\n span.setAttributes(options.attributes as Record<string, AttributeValue>);\n }\n\n if (options.attributesFromArgs) {\n const argsAttrs = options.attributesFromArgs(args);\n span.setAttributes(argsAttrs as Record<string, AttributeValue>);\n }\n\n const result = await actualFn(...args);\n\n if (options.attributesFromResult) {\n const resultAttrs = options.attributesFromResult(result);\n span.setAttributes(resultAttrs as Record<string, AttributeValue>);\n }\n\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n });\n };\n\n Object.defineProperty(wrappedFunction, 'name', {\n value: tempFn.name || 'trace',\n configurable: true,\n });\n\n (wrappedFunction as any)[INSTRUMENTED_MARK] = true;\n\n return wrappedFunction;\n}\n\nfunction wrapWithTracingSync<TArgs extends any[], TReturn>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): (...args: TArgs) => TReturn {\n const tempFn = fnFactory(createDummyCtx());\n const spanName = getSpanName(options, tempFn, variableName);\n\n const wrappedFunction = function wrappedFunction(this: unknown, ...args: TArgs): TReturn {\n const tracer = otelTrace.getTracer('autotel-edge');\n const spanOptions: Record<string, unknown> = options.sampler ? { sampler: options.sampler } : {};\n\n return tracer.startActiveSpan(spanName, spanOptions, (span) => {\n setSpanName(span, spanName);\n\n try {\n const actualFn = fnFactory(createTraceContext(span));\n\n if (options.attributes) {\n span.setAttributes(options.attributes as Record<string, AttributeValue>);\n }\n\n if (options.attributesFromArgs) {\n const argsAttrs = options.attributesFromArgs(args);\n span.setAttributes(argsAttrs as Record<string, AttributeValue>);\n }\n\n const result = actualFn(...args);\n\n if (options.attributesFromResult) {\n const resultAttrs = options.attributesFromResult(result as TReturn);\n span.setAttributes(resultAttrs as Record<string, AttributeValue>);\n }\n\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', spanName);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n });\n };\n\n Object.defineProperty(wrappedFunction, 'name', {\n value: tempFn.name || 'trace',\n configurable: true,\n });\n\n (wrappedFunction as any)[INSTRUMENTED_MARK] = true;\n\n return wrappedFunction;\n}\n\nfunction wrapFactoryWithTracing<TArgs extends any[], TReturn>(\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>),\n options: traceOptions<TArgs, TReturn>,\n variableName?: string,\n): WrappedFunction<TArgs, TReturn> {\n const factory = ensureTraceFactory(fnOrFactory);\n const sampleFn = factory(createDummyCtx());\n const useAsyncWrapper = isAsyncFunction(sampleFn);\n\n if (useAsyncWrapper) {\n return wrapWithTracingAsync(\n factory as (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n options,\n variableName,\n ) as WrappedFunction<TArgs, TReturn>;\n }\n\n return wrapWithTracingSync(\n factory as (ctx: TraceContext) => (...args: TArgs) => TReturn,\n options,\n variableName,\n ) as WrappedFunction<TArgs, TReturn>;\n}\n\n/**\n * Execute a function immediately within a trace span\n * Used for the immediate execution pattern: trace((ctx) => result)\n */\nfunction executeImmediately<TReturn = any>(\n fn: (ctx: TraceContext) => TReturn | Promise<TReturn>,\n options: traceOptions<any[], any>,\n): TReturn | Promise<TReturn> {\n const tracer = otelTrace.getTracer('@autotel/edge');\n const spanName = options.name || 'anonymous';\n\n return tracer.startActiveSpan(spanName, (span) => {\n try {\n setSpanName(span, spanName);\n const ctxValue = createTraceContext(span);\n\n const onSuccess = (result: TReturn) => {\n span.setStatus({ code: SpanStatusCode.OK });\n if (options.attributes) {\n for (const [key, value] of Object.entries(options.attributes)) {\n span.setAttribute(key, value as AttributeValue);\n }\n }\n span.end();\n return result;\n };\n\n const onError = (error: unknown): never => {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n const truncatedMessage = truncateErrorMessage(errorMessage);\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncatedMessage,\n });\n\n span.setAttribute('error', true);\n span.setAttribute('exception.type',\n error instanceof Error ? error.constructor.name : 'Error');\n span.setAttribute('exception.message', truncatedMessage);\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n span.end();\n throw error;\n };\n\n const result = fn(ctxValue);\n\n // Check if result is a Promise\n if (result instanceof Promise) {\n return result.then(onSuccess, onError);\n }\n\n return onSuccess(result);\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n const truncatedMessage = truncateErrorMessage(errorMessage);\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncatedMessage,\n });\n\n span.setAttribute('error', true);\n span.setAttribute('exception.message', truncatedMessage);\n\n span.recordException(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n span.end();\n throw error;\n }\n });\n}\n\n// Sync overloads - Factory pattern with explicit return type helps TypeScript infer\n// Overload 1a: Plain sync function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fn: () => TReturn,\n): () => TReturn;\n// Overload 1b: Plain sync function (auto-inferred name)\nexport function trace<TArgs extends any[], TReturn = any>(\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 1c: Factory sync function with no args returning explicit type (auto-inferred name)\nexport function trace<TReturn = any>(\n fnFactory: (ctx: TraceContext) => () => TReturn,\n): () => TReturn;\n// Overload 1d: Immediate execution - sync function with context (NEW PATTERN)\nexport function trace<TReturn = any>(\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n// Overload 1e: Factory sync function - use conditional type to extract signature (MUST come before generic)\n// This overload is more specific and helps TypeScript infer types from factory functions\nexport function trace<TFactory extends (ctx: TraceContext) => (...args: any[]) => any>(\n fnFactory: TFactory,\n): ExtractFunctionSignature<TFactory>;\n// Overload 1f: Generic factory sync function (fallback)\nexport function trace<TArgs extends any[], TReturn = any>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 2a: Name + plain sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 2b: Name + immediate execution sync with context\nexport function trace<TReturn = any>(\n name: string,\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n\n// Overload 2c: Name + factory sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 3a: Options + plain sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fn: (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Overload 3b: Options + immediate execution sync with context\nexport function trace<TReturn = any>(\n options: traceOptions<[], TReturn>,\n fn: (ctx: TraceContext) => TReturn,\n): TReturn;\n\n// Overload 3c: Options + factory sync function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => TReturn,\n): (...args: TArgs) => TReturn;\n\n// Async overloads\n// Overload 4a: Plain async function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fn: () => Promise<TReturn>,\n): () => Promise<TReturn>;\n// Overload 4b: Plain async function (auto-inferred name)\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 4c: Immediate execution - async function with context (NEW PATTERN)\nexport function trace<TReturn = any>(\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n// Overload 4d: Factory async function with no args (auto-inferred name)\nexport function trace<TReturn = any>(\n fnFactory: (ctx: TraceContext) => () => Promise<TReturn>,\n): () => Promise<TReturn>;\n// Overload 4e: Factory async function (auto-inferred name)\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 5a: Name + plain async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 5b: Name + immediate execution async with context\nexport function trace<TReturn = any>(\n name: string,\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n\n// Overload 5c: Name + factory async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n name: string,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 6a: Options + plain async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fn: (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Overload 6b: Options + immediate execution async with context\nexport function trace<TReturn = any>(\n options: traceOptions<[], TReturn>,\n fn: (ctx: TraceContext) => Promise<TReturn>,\n): Promise<TReturn>;\n\n// Overload 6c: Options + factory async function\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n options: traceOptions<TArgs, TReturn>,\n fnFactory: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n): (...args: TArgs) => Promise<TReturn>;\n\n// Implementation\nexport function trace<TArgs extends any[] = any[], TReturn = any>(\n fnOrNameOrOptions:\n | ((...args: TArgs) => TReturn)\n | ((...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn)\n | ((ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => TReturn)\n | ((ctx: TraceContext) => Promise<TReturn>)\n | string\n | traceOptions<TArgs, TReturn>,\n maybeFn?:\n | ((...args: TArgs) => TReturn)\n | ((...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn)\n | ((ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>)\n | ((ctx: TraceContext) => TReturn)\n | ((ctx: TraceContext) => Promise<TReturn>),\n): WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn> {\n // Handle: trace(fn) - single argument\n if (typeof fnOrNameOrOptions === 'function') {\n // Check if it's immediate execution pattern: (ctx) => result\n if (\n looksLikeTraceFactory(fnOrNameOrOptions as AnyFn) &&\n !isFactoryReturningFunction(fnOrNameOrOptions as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern\n return executeImmediately(\n fnOrNameOrOptions as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n {},\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n // Factory pattern or plain function\n return wrapFactoryWithTracing(\n fnOrNameOrOptions as (...args: TArgs) => TReturn,\n {} as traceOptions<TArgs, TReturn>,\n );\n }\n\n // Handle: trace(name, fn) or trace(options, fn) - two arguments\n if (typeof fnOrNameOrOptions === 'string') {\n if (!maybeFn) {\n throw new Error('trace(name, fn): fn is required');\n }\n // Check if it's immediate execution pattern\n if (\n looksLikeTraceFactory(maybeFn as AnyFn) &&\n !isFactoryReturningFunction(maybeFn as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern with name\n return executeImmediately(\n maybeFn as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n { name: fnOrNameOrOptions },\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n return wrapFactoryWithTracing(\n maybeFn as (...args: TArgs) => TReturn,\n { name: fnOrNameOrOptions } as traceOptions<TArgs, TReturn>,\n );\n }\n\n // Handle: trace(options, fn)\n if (!maybeFn) {\n throw new Error('trace(options, fn): fn is required');\n }\n\n // Check if it's immediate execution pattern\n if (\n looksLikeTraceFactory(maybeFn as AnyFn) &&\n !isFactoryReturningFunction(maybeFn as (ctx: TraceContext) => unknown)\n ) {\n // Immediate execution pattern with options\n return executeImmediately(\n maybeFn as (ctx: TraceContext) => TReturn | Promise<TReturn>,\n fnOrNameOrOptions as traceOptions<any[], any>,\n ) as WrappedFunction<TArgs, TReturn> | TReturn | Promise<TReturn>;\n }\n\n return wrapFactoryWithTracing(\n maybeFn as (...args: TArgs) => TReturn,\n fnOrNameOrOptions as traceOptions<TArgs, TReturn>,\n );\n}\n\nexport function withTracing<TArgs extends any[] = any[], TReturn = any>(\n options: Omit<traceOptions<TArgs, TReturn>, 'name'>,\n) {\n return (\n fnOrFactory:\n | ((...args: TArgs) => TReturn | Promise<TReturn>)\n | ((ctx: TraceContext) => (...args: TArgs) => TReturn | Promise<TReturn>)\n ): WrappedFunction<TArgs, TReturn> => wrapFactoryWithTracing(fnOrFactory, options as traceOptions<TArgs, TReturn>);\n}\n\nfunction shouldSkip(key: string, fn: Function, skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[]): boolean {\n if (key.startsWith('_')) {\n return true;\n }\n\n if (!skip || skip.length === 0) {\n return false;\n }\n\n for (const pattern of skip) {\n if (typeof pattern === 'string' && key === pattern) {\n return true;\n }\n if (pattern instanceof RegExp && pattern.test(key)) {\n return true;\n }\n if (typeof pattern === 'function' && pattern(key, fn)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface InstrumentOptions extends traceOptions {\n functions: Record<string, any>;\n overrides?: Record<string, Partial<traceOptions>>;\n skip?: (string | RegExp | ((key: string, fn: Function) => boolean))[];\n}\n\nexport function instrument<T extends Record<string, any>>(\n options: InstrumentOptions,\n): T {\n const { functions, ...tracingOptions } = options;\n const instrumented: Record<string, any> = {};\n\n for (const key of Object.keys(functions)) {\n const fn = functions[key];\n\n if (typeof fn !== 'function') {\n instrumented[key] = fn;\n continue;\n }\n\n if (shouldSkip(key, fn, tracingOptions.skip)) {\n instrumented[key] = fn;\n continue;\n }\n\n const fnOptions: traceOptions = {\n ...tracingOptions,\n ...tracingOptions.overrides?.[key],\n name: tracingOptions.overrides?.[key]?.name ?? tracingOptions.name,\n };\n\n const boundFn = fn.bind(functions);\n const fnFactory = (_ctx: TraceContext) => boundFn as AnyFn;\n\n instrumented[key] = wrapFactoryWithTracing(fnFactory, fnOptions, key);\n }\n\n return instrumented as T;\n}\n\nexport interface SpanOptions {\n name: string;\n attributes?: Record<string, string | number | boolean>;\n}\n\nexport function span<T = unknown>(options: SpanOptions, fn: (span: Span) => T): T;\nexport function span<T = unknown>(\n options: SpanOptions,\n fn: (span: Span) => Promise<T>,\n): Promise<T>;\nexport function span<T = unknown>(\n options: SpanOptions,\n fn: (span: Span) => T | Promise<T>,\n): T | Promise<T> {\n const tracer = otelTrace.getTracer('autotel-edge');\n\n const execute = (span: Span) => {\n setSpanName(span, options.name);\n\n try {\n if (options.attributes) {\n for (const [key, value] of Object.entries(options.attributes)) {\n span.setAttribute(key, value);\n }\n }\n\n const result = fn(span);\n\n if (result instanceof Promise) {\n return result\n .then((value) => {\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return value;\n })\n .catch((error) => {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n });\n }\n\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return result;\n } catch (error) {\n const message = truncateErrorMessage(\n error instanceof Error ? error.message : String(error ?? 'Unknown error'),\n );\n span.setAttribute('code.function', options.name);\n span.setStatus({ code: SpanStatusCode.ERROR, message });\n span.recordException(error instanceof Error ? error : new Error(String(error)));\n span.end();\n throw error;\n }\n };\n\n const result = tracer.startActiveSpan(options.name, execute);\n\n if (result instanceof Promise) {\n return result;\n }\n\n return result as T;\n}\n"]}
|
package/dist/logger.d.ts
CHANGED
package/dist/logger.js
CHANGED