UNPKG

@sentry/core

Version:
80 lines (69 loc) 2.86 kB
import { getClient } from '../../currentScopes.js'; import { DEBUG_BUILD } from '../../debug-build.js'; import { debug } from '../../utils/debug-logger.js'; import { isError } from '../../utils/is.js'; import { getTraceData } from '../../utils/traceData.js'; import { shouldPropagateTraceForUrl } from '../../utils/tracePropagationTargets.js'; import { LOG_PREFIX } from './constants.js'; import { getRequestUrlFromClientRequest } from './get-request-url.js'; import { mergeBaggageHeaders } from '../../utils/baggage.js'; /** * Inject Sentry trace-propagation headers into an outgoing request if the * target URL matches the configured `tracePropagationTargets`. * * Note: this must be called *before* calling `request.end()` (or firing the * `http.client.request.start` diagnostics channel), because at that point, * the headers have already been sent, and cannot be modified. */ function injectTracePropagationHeaders( request, propagationDecisionMap, ) { const url = getRequestUrlFromClientRequest(request); const clientOptions = getClient()?.getOptions(); const { tracePropagationTargets, propagateTraceparent } = clientOptions ?? {}; if (!shouldPropagateTraceForUrl(url, tracePropagationTargets, propagationDecisionMap)) { return; } const hasExistingSentryTraceHeader = !!request.getHeader('sentry-trace'); if (hasExistingSentryTraceHeader) { // add nothing if there's already a sentry-trace header, // or else baggage can be sent twice. return; } const traceData = getTraceData({ propagateTraceparent }); if (!traceData) return; const { 'sentry-trace': sentryTrace, baggage, traceparent } = traceData; if (sentryTrace) { try { request.setHeader('sentry-trace', sentryTrace); DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added sentry-trace header'); } catch (e) { DEBUG_BUILD && debug.error(LOG_PREFIX, 'Failed to set sentry-trace header:', isError(e) ? e.message : 'Unknown error'); } } if (traceparent && !request.getHeader('traceparent')) { try { request.setHeader('traceparent', traceparent); DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added traceparent header'); } catch (e) { DEBUG_BUILD && debug.error(LOG_PREFIX, 'Failed to set traceparent header:', isError(e) ? e.message : 'Unknown error'); } } if (baggage) { const merged = mergeBaggageHeaders(request.getHeader('baggage'), baggage); if (merged) { try { request.setHeader('baggage', merged); DEBUG_BUILD && debug.log(LOG_PREFIX, 'Added baggage header'); } catch (e) { DEBUG_BUILD && debug.error(LOG_PREFIX, 'Failed to set baggage header:', isError(e) ? e.message : 'Unknown error'); } } } } export { injectTracePropagationHeaders }; //# sourceMappingURL=inject-trace-propagation-headers.js.map