{"version":3,"file":"inject-trace-propagation-headers.js","sources":["../../../../src/integrations/http/inject-trace-propagation-headers.ts"],"sourcesContent":["import type { LRUMap } from '../../utils/lru';\nimport { getClient } from '../../currentScopes';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { debug } from '../../utils/debug-logger';\nimport { isError } from '../../utils/is';\nimport { getTraceData } from '../../utils/traceData';\nimport { shouldPropagateTraceForUrl } from '../../utils/tracePropagationTargets';\nimport { LOG_PREFIX } from './constants';\nimport { getRequestUrlFromClientRequest } from './get-request-url';\nimport type { HttpClientRequest } from './types';\nimport { mergeBaggageHeaders } from '../../utils/baggage';\n\n/**\n * Inject Sentry trace-propagation headers into an outgoing request if the\n * target URL matches the configured `tracePropagationTargets`.\n *\n * Note: this must be called *before* calling `request.end()` (or firing the\n * `http.client.request.start` diagnostics channel), because at that point,\n * the headers have already been sent, and cannot be modified.\n */\nexport function injectTracePropagationHeaders(\n  request: HttpClientRequest,\n  propagationDecisionMap: LRUMap<string, boolean>,\n): void {\n  const url = getRequestUrlFromClientRequest(request);\n  const clientOptions = getClient()?.getOptions();\n  const { tracePropagationTargets, propagateTraceparent } = clientOptions ?? {};\n\n  if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, propagationDecisionMap)) {\n    return;\n  }\n\n  const hasExistingSentryTraceHeader = !!request.getHeader('sentry-trace');\n\n  if (hasExistingSentryTraceHeader) {\n    // add nothing if there's already a sentry-trace header,\n    // or else baggage can be sent twice.\n    return;\n  }\n\n  const traceData = getTraceData({ propagateTraceparent });\n  if (!traceData) return;\n\n  const { 'sentry-trace': sentryTrace, baggage, traceparent } = traceData;\n\n  if (sentryTrace) {\n    try {\n      request.setHeader('sentry-trace', sentryTrace);\n      DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added sentry-trace header');\n    } catch (e) {\n      DEBUG_BUILD &&\n        debug.error(LOG_PREFIX, 'Failed to set sentry-trace header:', isError(e) ? e.message : 'Unknown error');\n    }\n  }\n\n  if (traceparent && !request.getHeader('traceparent')) {\n    try {\n      request.setHeader('traceparent', traceparent);\n      DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added traceparent header');\n    } catch (e) {\n      DEBUG_BUILD &&\n        debug.error(LOG_PREFIX, 'Failed to set traceparent header:', isError(e) ? e.message : 'Unknown error');\n    }\n  }\n\n  if (baggage) {\n    const merged = mergeBaggageHeaders(request.getHeader('baggage'), baggage);\n    if (merged) {\n      try {\n        request.setHeader('baggage', merged);\n        DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added baggage header');\n      } catch (e) {\n        DEBUG_BUILD &&\n          debug.error(LOG_PREFIX, 'Failed to set baggage header:', isError(e) ? e.message : 'Unknown error');\n      }\n    }\n  }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,6BAA6B;AAC7C,EAAE,OAAO;AACT,EAAE,sBAAsB;AACxB,EAAQ;AACR,EAAE,MAAM,GAAA,GAAM,8BAA8B,CAAC,OAAO,CAAC;AACrD,EAAE,MAAM,gBAAgB,SAAS,EAAE,EAAE,UAAU,EAAE;AACjD,EAAE,MAAM,EAAE,uBAAuB,EAAE,oBAAA,KAAyB,aAAA,IAAiB,EAAE;;AAE/E,EAAE,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,EAAE;AACzF,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,4BAAA,GAA+B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC;;AAE1E,EAAE,IAAI,4BAA4B,EAAE;AACpC;AACA;AACA,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,YAAY,YAAY,CAAC,EAAE,oBAAA,EAAsB,CAAC;AAC1D,EAAE,IAAI,CAAC,SAAS,EAAE;;AAElB,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,WAAA,EAAY,GAAI,SAAS;;AAEzE,EAAE,IAAI,WAAW,EAAE;AACnB,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC;AACpD,MAAM,WAAA,IAAe,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,2BAA2B,CAAC;AACvE,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAM,WAAA;AACN,QAAQ,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,oCAAoC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC/G,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,WAAA,IAAe,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;AACxD,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC;AACnD,MAAM,WAAA,IAAe,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,0BAA0B,CAAC;AACtE,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAM,WAAA;AACN,QAAQ,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,mCAAmC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC9G,IAAI;AACJ,EAAE;;AAEF,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,MAAM,MAAA,GAAS,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;AAC7E,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;AAC5C,QAAQ,WAAA,IAAe,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,sBAAsB,CAAC;AACpE,MAAM,CAAA,CAAE,OAAO,CAAC,EAAE;AAClB,QAAQ,WAAA;AACR,UAAU,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,+BAA+B,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAA,GAAU,eAAe,CAAC;AAC5G,MAAM;AACN,IAAI;AACJ,EAAE;AACF;;;;"}