UNPKG

@uphold/opentelemetry-mutable-baggage

Version:

Package that allows an OpenTelemetry baggage to be mutable.

46 lines 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.W3CMutableBaggagePropagator = void 0; const constants_1 = require("./constants"); const api_1 = require("@opentelemetry/api"); const mutable_baggage_impl_1 = require("./mutable-baggage-impl"); const utils_1 = require("./utils"); const core_1 = require("@opentelemetry/core"); class W3CMutableBaggagePropagator { inject(context, carrier, setter) { const baggage = api_1.propagation.getBaggage(context); if (!baggage || (0, core_1.isTracingSuppressed)(context)) { return; } const keyPairs = (0, utils_1.getKeyPairs)(baggage) .filter((pair) => pair.length <= constants_1.BAGGAGE_MAX_PER_NAME_VALUE_PAIRS) .slice(0, constants_1.BAGGAGE_MAX_NAME_VALUE_PAIRS); const headerValue = (0, utils_1.serializeKeyPairs)(keyPairs); if (headerValue.length > 0) { setter.set(carrier, constants_1.BAGGAGE_HEADER, headerValue); } } extract(context, carrier, getter) { const headerValue = getter.get(carrier, constants_1.BAGGAGE_HEADER); const baggageString = Array.isArray(headerValue) ? headerValue.join(constants_1.BAGGAGE_ITEMS_SEPARATOR) : headerValue; const entries = {}; const pairs = (baggageString ?? '').split(constants_1.BAGGAGE_ITEMS_SEPARATOR); pairs.forEach(entry => { const keyPair = (0, utils_1.parsePairKeyValue)(entry); if (keyPair) { const baggageEntry = { value: keyPair.value }; if (keyPair.metadata) { baggageEntry.metadata = keyPair.metadata; } entries[keyPair.key] = baggageEntry; } }); const baggage = new mutable_baggage_impl_1.MutableBaggageImpl(new Map(Object.entries(entries))); return api_1.propagation.setBaggage(context, baggage); } fields() { return [constants_1.BAGGAGE_HEADER]; } } exports.W3CMutableBaggagePropagator = W3CMutableBaggagePropagator; //# sourceMappingURL=w3c-mutable-baggage-propagator.js.map