UNPKG

@opentelemetry/core

Version:

OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.

1 lines • 3.41 kB
{"version":3,"file":"W3CBaggagePropagator.cjs","names":["propagation","isTracingSuppressed","getKeyPairs","BAGGAGE_MAX_PER_NAME_VALUE_PAIRS","serializeKeyPairs","BAGGAGE_HEADER","parseBaggageHeaderString"],"sources":["../../../src/baggage/propagation/W3CBaggagePropagator.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n BaggageEntry,\n Context,\n TextMapGetter,\n TextMapPropagator,\n TextMapSetter,\n} from '@opentelemetry/api';\nimport { propagation } from '@opentelemetry/api';\n\nimport { isTracingSuppressed } from '../../trace/suppress-tracing';\nimport {\n BAGGAGE_HEADER,\n BAGGAGE_MAX_NAME_VALUE_PAIRS,\n BAGGAGE_MAX_PER_NAME_VALUE_PAIRS,\n} from '../constants';\nimport {\n getKeyPairs,\n parseBaggageHeaderString,\n serializeKeyPairs,\n} from '../utils';\n\n/**\n * Propagates {@link Baggage} through Context format propagation.\n *\n * Based on the Baggage specification:\n * https://w3c.github.io/baggage/\n */\nexport class W3CBaggagePropagator implements TextMapPropagator {\n inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n const baggage = propagation.getBaggage(context);\n if (!baggage || isTracingSuppressed(context)) return;\n const keyPairs = getKeyPairs(baggage)\n .filter((pair: string) => {\n return pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS;\n })\n .slice(0, BAGGAGE_MAX_NAME_VALUE_PAIRS);\n const headerValue = serializeKeyPairs(keyPairs);\n if (headerValue.length > 0) {\n setter.set(carrier, BAGGAGE_HEADER, headerValue);\n }\n }\n\n extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n const headerValue = getter.get(carrier, BAGGAGE_HEADER);\n if (!headerValue) {\n return context;\n }\n\n const baggage: Record<string, BaggageEntry> = {};\n let count = 0;\n\n let totalSize = 0;\n if (Array.isArray(headerValue)) {\n for (let i = 0; i < headerValue.length; i++) {\n [count, totalSize] = parseBaggageHeaderString(\n headerValue[i],\n baggage,\n count,\n totalSize\n );\n }\n } else {\n [count] = parseBaggageHeaderString(\n headerValue,\n baggage,\n count,\n totalSize\n );\n }\n\n if (count === 0) {\n return context;\n }\n\n return propagation.setBaggage(context, propagation.createBaggage(baggage));\n }\n\n fields(): string[] {\n return [BAGGAGE_HEADER];\n }\n}\n"],"mappings":";;;;;;;;;;;AAgCA,IAAa,uBAAb,MAA+D;CAC7D,OAAO,SAAkB,SAAkB,QAA6B;EACtE,MAAM,UAAUA,mBAAAA,YAAY,WAAW,OAAO;EAC9C,IAAI,CAAC,WAAWC,yBAAAA,oBAAoB,OAAO,GAAG;EAC9C,MAAM,WAAWC,cAAAA,YAAY,OAAO,CAAC,CAClC,QAAQ,SAAiB;GACxB,OAAO,KAAK,UAAUC,kBAAAA;EACxB,CAAC,CAAC,CACD,MAAM,GAAA,GAA+B;EACxC,MAAM,cAAcC,cAAAA,kBAAkB,QAAQ;EAC9C,IAAI,YAAY,SAAS,GACvB,OAAO,IAAI,SAASC,kBAAAA,gBAAgB,WAAW;CAEnD;CAEA,QAAQ,SAAkB,SAAkB,QAAgC;EAC1E,MAAM,cAAc,OAAO,IAAI,SAASA,kBAAAA,cAAc;EACtD,IAAI,CAAC,aACH,OAAO;EAGT,MAAM,UAAwC,CAAC;EAC/C,IAAI,QAAQ;EAEZ,IAAI,YAAY;EAChB,IAAI,MAAM,QAAQ,WAAW,GAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KACtC,CAAC,OAAO,aAAaC,cAAAA,yBACnB,YAAY,IACZ,SACA,OACA,SACF;OAGF,CAAC,SAASA,cAAAA,yBACR,aACA,SACA,OACA,SACF;EAGF,IAAI,UAAU,GACZ,OAAO;EAGT,OAAON,mBAAAA,YAAY,WAAW,SAASA,mBAAAA,YAAY,cAAc,OAAO,CAAC;CAC3E;CAEA,SAAmB;EACjB,OAAO,CAACK,kBAAAA,cAAc;CACxB;AACF"}