{"version":3,"file":"traceData.js","sources":["../../../src/utils/traceData.ts"],"sourcesContent":["import type { SerializedTraceData } from '@sentry/types';\nimport {\n TRACEPARENT_REGEXP,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n logger,\n} from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { isEnabled } from '../exports';\nimport { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan } from '../tracing';\nimport { getActiveSpan, getRootSpan, spanToTraceHeader } from './spanUtils';\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate\n * a trace via our tracing Http headers or Html `` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nexport function getTraceData(): SerializedTraceData {\n if (!isEnabled()) {\n return {};\n }\n\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getTraceData) {\n return acs.getTraceData();\n }\n\n const client = getClient();\n const scope = getCurrentScope();\n const span = getActiveSpan();\n\n const { dsc, sampled, traceId } = scope.getPropagationContext();\n const rootSpan = span && getRootSpan(span);\n\n const sentryTrace = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, undefined, sampled);\n\n const dynamicSamplingContext = rootSpan\n ? getDynamicSamplingContextFromSpan(rootSpan)\n : dsc\n ? dsc\n : client\n ? getDynamicSamplingContextFromClient(traceId, client)\n : undefined;\n\n const baggage = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n const isValidSentryTraceHeader = TRACEPARENT_REGEXP.test(sentryTrace);\n if (!isValidSentryTraceHeader) {\n logger.warn('Invalid sentry-trace data. Cannot generate trace data');\n return {};\n }\n\n const validBaggage = isValidBaggageString(baggage);\n if (!validBaggage) {\n logger.warn('Invalid baggage data. Not returning \"baggage\" value');\n }\n\n return {\n 'sentry-trace': sentryTrace,\n ...(validBaggage && { baggage }),\n };\n}\n\n/**\n * Tests string against baggage spec as defined in:\n *\n * - W3C Baggage grammar: https://www.w3.org/TR/baggage/#definition\n * - RFC7230 token definition: https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.6\n *\n * exported for testing\n */\nexport function isValidBaggageString(baggage?: string): boolean {\n if (!baggage || !baggage.length) {\n return false;\n }\n const keyRegex = \"[-!#$%&'*+.^_`|~A-Za-z0-9]+\";\n const valueRegex = '[!#-+-./0-9:<=>?@A-Z\\\\[\\\\]a-z{-}]+';\n const spaces = '\\\\s*';\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp for readability, no user input\n const baggageRegex = new RegExp(\n `^${keyRegex}${spaces}=${spaces}${valueRegex}(${spaces},${spaces}${keyRegex}${spaces}=${spaces}${valueRegex})*$`,\n );\n return baggageRegex.test(baggage);\n}\n"],"names":["isEnabled","carrier","getMainCarrier","getAsyncContextStrategy","getClient","getCurrentScope","getActiveSpan","getRootSpan","spanToTraceHeader","generateSentryTraceHeader","dynamicSamplingContext","getDynamicSamplingContextFromSpan","getDynamicSamplingContextFromClient","dynamicSamplingContextToSentryBaggageHeader","TRACEPARENT_REGEXP","logger"],"mappings":";;;;;;;;;;;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,GAAwB;AACpD,EAAE,IAAI,CAACA,mBAAS,EAAE,EAAE;AACpB,IAAI,OAAO,EAAE;AACb;;AAEA,EAAE,MAAMC,SAAA,GAAUC,sBAAc,EAAE;AAClC,EAAE,MAAM,GAAI,GAAEC,6BAAuB,CAACF,SAAO,CAAC;AAC9C,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE;AACxB,IAAI,OAAO,GAAG,CAAC,YAAY,EAAE;AAC7B;;AAEA,EAAE,MAAM,MAAA,GAASG,uBAAS,EAAE;AAC5B,EAAE,MAAM,KAAA,GAAQC,6BAAe,EAAE;AACjC,EAAE,MAAM,IAAA,GAAOC,uBAAa,EAAE;;AAE9B,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAQ,EAAA,GAAI,KAAK,CAAC,qBAAqB,EAAE;AACjE,EAAE,MAAM,WAAW,IAAA,IAAQC,qBAAW,CAAC,IAAI,CAAC;;AAE5C,EAAE,MAAM,WAAY,GAAE,IAAK,GAAEC,2BAAiB,CAAC,IAAI,CAAE,GAAEC,+BAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;;AAE7G,EAAE,MAAMC,2BAAyB;AACjC,MAAMC,wDAAiC,CAAC,QAAQ;AAChD,MAAM;AACN,QAAQ;AACR,QAAQ;AACR,UAAUC,0DAAmC,CAAC,OAAO,EAAE,MAAM;AAC7D,UAAU,SAAS;;AAEnB,EAAE,MAAM,OAAQ,GAAEC,iDAA2C,CAACH,wBAAsB,CAAC;;AAErF,EAAE,MAAM,2BAA2BI,wBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvE,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACjC,IAAIC,YAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC;AACxE,IAAI,OAAO,EAAE;AACb;;AAEA,EAAE,MAAM,YAAa,GAAE,oBAAoB,CAAC,OAAO,CAAC;AACpD,EAAE,IAAI,CAAC,YAAY,EAAE;AACrB,IAAIA,YAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC;AACtE;;AAEA,EAAE,OAAO;AACT,IAAI,cAAc,EAAE,WAAW;AAC/B,IAAI,IAAI,YAAA,IAAgB,EAAE,OAAA,EAAS,CAAC;AACpC,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAoB;AAChE,EAAE,IAAI,CAAC,OAAA,IAAW,CAAC,OAAO,CAAC,MAAM,EAAE;AACnC,IAAI,OAAO,KAAK;AAChB;AACA,EAAE,MAAM,QAAS,GAAE,6BAA6B;AAChD,EAAE,MAAM,UAAW,GAAE,oCAAoC;AACzD,EAAE,MAAM,MAAO,GAAE,MAAM;AACvB;AACA,EAAE,MAAM,YAAA,GAAe,IAAI,MAAM;AACjC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAA,MAAA,CAAA,CAAA,EAAA,MAAA,CAAA,EAAA,UAAA,CAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAAA,MAAA,CAAA,EAAA,QAAA,CAAA,EAAA,MAAA,CAAA,CAAA,EAAA,MAAA,CAAA,EAAA,UAAA,CAAA,GAAA,CAAA;AACA,GAAA;AACA,EAAA,OAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AACA;;;;;"}