UNPKG

autotel

Version:
53 lines (51 loc) 1.96 kB
import { enterOrRun } from './chunk-BBBWDIYQ.js'; import { context, propagation, trace } from '@opentelemetry/api'; import { AsyncLocalStorage } from 'async_hooks'; var correlationStorage = new AsyncLocalStorage(); var CORRELATION_ID_BAGGAGE_KEY = "autotel.correlation_id"; function generateCorrelationId() { const bytes = new Uint8Array(8); crypto.getRandomValues(bytes); return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join(""); } function getCorrelationId() { const storedId = correlationStorage.getStore()?.value; if (storedId) { return storedId; } const activeContext = context.active(); const baggage = propagation.getBaggage(activeContext); const baggageEntry = baggage?.getEntry(CORRELATION_ID_BAGGAGE_KEY); if (baggageEntry?.value) { return baggageEntry.value; } const span = trace.getActiveSpan(); if (span) { const spanContext = span.spanContext(); return spanContext.traceId.slice(0, 16); } return void 0; } function getOrCreateCorrelationId() { return getCorrelationId() ?? generateCorrelationId(); } function runWithCorrelationId(correlationId, fn) { return correlationStorage.run({ value: correlationId }, fn); } function setCorrelationId(correlationId) { enterOrRun(correlationStorage, correlationId); } function setCorrelationIdInBaggage(correlationId) { const activeContext = context.active(); let baggage = propagation.getBaggage(activeContext) ?? propagation.createBaggage(); baggage = baggage.setEntry(CORRELATION_ID_BAGGAGE_KEY, { value: correlationId }); return propagation.setBaggage(activeContext, baggage); } function getCorrelationStorage() { return correlationStorage; } export { CORRELATION_ID_BAGGAGE_KEY, generateCorrelationId, getCorrelationId, getCorrelationStorage, getOrCreateCorrelationId, runWithCorrelationId, setCorrelationId, setCorrelationIdInBaggage }; //# sourceMappingURL=chunk-S4OFEXLA.js.map //# sourceMappingURL=chunk-S4OFEXLA.js.map