autotel
Version:
Write Once, Observe Anywhere
1 lines • 2.96 kB
Source Map (JSON)
{"version":3,"sources":["../src/correlated-events.ts"],"names":[],"mappings":";;;AAUA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,OAAO,KAAA,CAAM,UAAA,CAAW,kBAAA,EAAoB,GAAG,CAAA;AACjD;AAMA,IAAM,gBAAA,uBAAuB,OAAA,EAAwB;AAErD,SAAS,aAAa,MAAA,EAAwB;AAC5C,EAAA,MAAM,CAAA,GAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,MAAM,KAAK,CAAA,IAAK,CAAA;AAChD,EAAA,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC9B,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,mBAAA,CACd,GAAA,EACA,IAAA,EACA,KAAA,GAAwC,EAAC,EACnC;AACN,EAAA,MAAM,SAAA,GAAY,iBAAiB,IAAI,CAAA;AACvC,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA,KAAa,UAAA,EAAY;AACtC,IAAA,GAAA,CAAI,QAAA,CAAS,IAAA,CAAK,GAAA,EAAK,SAAA,EAAW,KAAK,CAAA;AACvC,IAAA;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAChD,EAAA,MAAM,SAAA,GAA4C;AAAA,IAChD,CAAC,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,GAAG,SAAA;AAAA,IACpB,CAAC,GAAG,MAAM,CAAA,GAAA,CAAK,oBAAG,IAAI,IAAA,IAAO,WAAA;AAAY,GAC3C;AACA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,IAAA,SAAA,CAAU,GAAG,MAAM,CAAA,CAAA,EAAI,iBAAiB,CAAC,CAAC,EAAE,CAAA,GAAI,CAAA;AAAA,EAClD;AACA,EAAA,GAAA,CAAI,cAAc,SAAS,CAAA;AAC7B","file":"chunk-4P6ZOARG.cjs","sourcesContent":["import type { AttributeValue } from './trace-context';\n\nexport interface CorrelatedEventTarget {\n setAttribute(key: string, value: AttributeValue): unknown;\n setAttributes(attrs: Record<string, AttributeValue>): unknown;\n addEvent?(name: string, attrs?: Record<string, AttributeValue>): unknown;\n}\n\n// OTel attribute keys are dot-namespaced flat strings; we keep `.`/`-`/`_` and\n// drop everything else so user-supplied event names can't break attribute keys.\nfunction sanitizeEventKey(input: string): string {\n return input.replaceAll(/[^a-zA-Z0-9_.-]/g, '_');\n}\n\n// Per-target sequence so the fallback path can encode multiple events with the\n// same name without one overwriting the previous (attributes are\n// last-write-wins; events are not). Today the addEvent path is always taken;\n// this keeps the fallback correct if/when the runtime stops binding addEvent.\nconst sequenceByTarget = new WeakMap<object, number>();\n\nfunction nextSequence(target: object): number {\n const n = (sequenceByTarget.get(target) ?? 0) + 1;\n sequenceByTarget.set(target, n);\n return n;\n}\n\nexport function emitCorrelatedEvent(\n ctx: CorrelatedEventTarget,\n name: string,\n attrs: Record<string, AttributeValue> = {},\n): void {\n const eventName = sanitizeEventKey(name);\n if (typeof ctx.addEvent === 'function') {\n ctx.addEvent.call(ctx, eventName, attrs);\n return;\n }\n const seq = nextSequence(ctx);\n const prefix = `autotel.event.${seq}.${eventName}`;\n const flattened: Record<string, AttributeValue> = {\n [`${prefix}.name`]: eventName,\n [`${prefix}.ts`]: new Date().toISOString(),\n };\n for (const [k, v] of Object.entries(attrs)) {\n flattened[`${prefix}.${sanitizeEventKey(k)}`] = v;\n }\n ctx.setAttributes(flattened);\n}\n"]}