@opentelemetry/core
Version:
OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.
40 lines (39 loc) • 1.65 kB
JavaScript
import { isTracingSuppressed } from "../../trace/suppress-tracing.mjs";
import { BAGGAGE_HEADER, BAGGAGE_MAX_PER_NAME_VALUE_PAIRS } from "../constants.mjs";
import { getKeyPairs, parseBaggageHeaderString, serializeKeyPairs } from "../utils.mjs";
import { propagation } from "@opentelemetry/api";
//#region src/baggage/propagation/W3CBaggagePropagator.ts
/**
* Propagates {@link Baggage} through Context format propagation.
*
* Based on the Baggage specification:
* https://w3c.github.io/baggage/
*/
var W3CBaggagePropagator = class {
inject(context, carrier, setter) {
const baggage = propagation.getBaggage(context);
if (!baggage || isTracingSuppressed(context)) return;
const keyPairs = getKeyPairs(baggage).filter((pair) => {
return pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS;
}).slice(0, 180);
const headerValue = serializeKeyPairs(keyPairs);
if (headerValue.length > 0) setter.set(carrier, BAGGAGE_HEADER, headerValue);
}
extract(context, carrier, getter) {
const headerValue = getter.get(carrier, BAGGAGE_HEADER);
if (!headerValue) return context;
const baggage = {};
let count = 0;
let totalSize = 0;
if (Array.isArray(headerValue)) for (let i = 0; i < headerValue.length; i++) [count, totalSize] = parseBaggageHeaderString(headerValue[i], baggage, count, totalSize);
else [count] = parseBaggageHeaderString(headerValue, baggage, count, totalSize);
if (count === 0) return context;
return propagation.setBaggage(context, propagation.createBaggage(baggage));
}
fields() {
return [BAGGAGE_HEADER];
}
};
//#endregion
export { W3CBaggagePropagator };
//# sourceMappingURL=W3CBaggagePropagator.mjs.map