UNPKG

@ogcio/o11y-sdk-node

Version:

Opentelemetry standard instrumentation SDK for NodeJS based project

40 lines (39 loc) 1.33 kB
import { propagation, } from "@opentelemetry/api"; import { CF_GEO_HEADERS, createGeoAttributesFromHeaders, geoBaggageKeys, } from "../../../sdk-core/lib/index.js"; export class GeoBaggagePropagator { _headerMap; _fields; _precision; constructor(options = {}) { this._headerMap = options.headerMap ?? CF_GEO_HEADERS; this._fields = Object.values(this._headerMap); this._precision = options.precision; } extract(ctx, carrier, getter) { const existingBaggage = propagation.getBaggage(ctx); for (const key of geoBaggageKeys) { if (existingBaggage?.getEntry(key)) return ctx; } const attrs = createGeoAttributesFromHeaders(carrier, { getter, precision: this._precision, headerMap: this._headerMap, }); if (Object.keys(attrs).length === 0) return ctx; let baggage = existingBaggage ?? propagation.createBaggage(); for (const [key, value] of Object.entries(attrs)) { baggage = baggage.setEntry(key, { value }); } return propagation.setBaggage(ctx, baggage); } inject(ctx, carrier, setter) { void ctx; void carrier; void setter; } fields() { return this._fields; } }