11import type { Client , HandlerDataFetch , Scope , Span , SpanOrigin } from '@sentry/types' ;
2- import {
3- BAGGAGE_HEADER_NAME ,
4- SENTRY_BAGGAGE_KEY_PREFIX ,
5- dynamicSamplingContextToSentryBaggageHeader ,
6- generateSentryTraceHeader ,
7- isInstanceOf ,
8- parseUrl ,
9- } from '@sentry/utils' ;
10- import { getClient , getCurrentScope , getIsolationScope } from './currentScopes' ;
2+ import { BAGGAGE_HEADER_NAME , SENTRY_BAGGAGE_KEY_PREFIX , isInstanceOf , parseUrl } from '@sentry/utils' ;
3+ import { getClient , getCurrentScope } from './currentScopes' ;
114import { SEMANTIC_ATTRIBUTE_SENTRY_OP , SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from './semanticAttributes' ;
12- import {
13- SPAN_STATUS_ERROR ,
14- getDynamicSamplingContextFromClient ,
15- getDynamicSamplingContextFromSpan ,
16- setHttpStatus ,
17- startInactiveSpan ,
18- } from './tracing' ;
5+ import { SPAN_STATUS_ERROR , getSentryHeaders , setHttpStatus , startInactiveSpan } from './tracing' ;
196import { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan' ;
207import { hasTracingEnabled } from './utils/hasTracingEnabled' ;
21- import { getActiveSpan , spanToTraceHeader } from './utils/spanUtils' ;
8+ import { getActiveSpan } from './utils/spanUtils' ;
229
2310type PolymorphicRequestHeaders =
2411 | Record < string , string | undefined >
@@ -132,44 +119,31 @@ export function addTracingHeadersToFetchRequest(
132119 } ,
133120 span ?: Span ,
134121) : PolymorphicRequestHeaders | undefined {
135- const isolationScope = getIsolationScope ( ) ;
136-
137- const { traceId, spanId, sampled, dsc } = {
138- ...isolationScope . getPropagationContext ( ) ,
139- ...scope . getPropagationContext ( ) ,
140- } ;
141-
142- const sentryTraceHeader = span ? spanToTraceHeader ( span ) : generateSentryTraceHeader ( traceId , spanId , sampled ) ;
143-
144- const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader (
145- dsc || ( span ? getDynamicSamplingContextFromSpan ( span ) : getDynamicSamplingContextFromClient ( traceId , client ) ) ,
146- ) ;
122+ const { sentryTrace, baggage } = getSentryHeaders ( { span, client, scope } ) ;
147123
148124 const headers =
149125 fetchOptionsObj . headers ||
150126 ( typeof Request !== 'undefined' && isInstanceOf ( request , Request ) ? ( request as Request ) . headers : undefined ) ;
151127
152128 if ( ! headers ) {
153- return { 'sentry-trace' : sentryTraceHeader , baggage : sentryBaggageHeader } ;
129+ return { 'sentry-trace' : sentryTrace , baggage } ;
154130 } else if ( typeof Headers !== 'undefined' && isInstanceOf ( headers , Headers ) ) {
155131 const newHeaders = new Headers ( headers as Headers ) ;
156132
157- newHeaders . set ( 'sentry-trace' , sentryTraceHeader ) ;
133+ newHeaders . set ( 'sentry-trace' , sentryTrace ) ;
158134
159- if ( sentryBaggageHeader ) {
135+ if ( baggage ) {
160136 const prevBaggageHeader = newHeaders . get ( BAGGAGE_HEADER_NAME ) ;
161137 if ( prevBaggageHeader ) {
162138 const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues ( prevBaggageHeader ) ;
163139 newHeaders . set (
164140 BAGGAGE_HEADER_NAME ,
165141 // If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header
166142 // otherwise just set the sentry baggage header
167- prevHeaderStrippedFromSentryBaggage
168- ? `${ prevHeaderStrippedFromSentryBaggage } ,${ sentryBaggageHeader } `
169- : sentryBaggageHeader ,
143+ prevHeaderStrippedFromSentryBaggage ? `${ prevHeaderStrippedFromSentryBaggage } ,${ baggage } ` : baggage ,
170144 ) ;
171145 } else {
172- newHeaders . set ( BAGGAGE_HEADER_NAME , sentryBaggageHeader ) ;
146+ newHeaders . set ( BAGGAGE_HEADER_NAME , baggage ) ;
173147 }
174148 }
175149
@@ -191,13 +165,13 @@ export function addTracingHeadersToFetchRequest(
191165 }
192166 } ) ,
193167 // Attach the new sentry-trace header
194- [ 'sentry-trace' , sentryTraceHeader ] ,
168+ [ 'sentry-trace' , sentryTrace ] ,
195169 ] ;
196170
197- if ( sentryBaggageHeader ) {
171+ if ( baggage ) {
198172 // If there are multiple entries with the same key, the browser will merge the values into a single request header.
199173 // Its therefore safe to simply push a "baggage" entry, even though there might already be another baggage header.
200- newHeaders . push ( [ BAGGAGE_HEADER_NAME , sentryBaggageHeader ] ) ;
174+ newHeaders . push ( [ BAGGAGE_HEADER_NAME , baggage ] ) ;
201175 }
202176
203177 return newHeaders as PolymorphicRequestHeaders ;
@@ -215,13 +189,13 @@ export function addTracingHeadersToFetchRequest(
215189 newBaggageHeaders . push ( stripBaggageHeaderOfSentryBaggageValues ( existingBaggageHeader ) ) ;
216190 }
217191
218- if ( sentryBaggageHeader ) {
219- newBaggageHeaders . push ( sentryBaggageHeader ) ;
192+ if ( baggage ) {
193+ newBaggageHeaders . push ( baggage ) ;
220194 }
221195
222196 return {
223197 ...( headers as Exclude < typeof headers , Headers > ) ,
224- 'sentry-trace' : sentryTraceHeader ,
198+ 'sentry-trace' : sentryTrace ,
225199 baggage : newBaggageHeaders . length > 0 ? newBaggageHeaders . join ( ',' ) : undefined ,
226200 } ;
227201 }
0 commit comments