1
1
import 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' ;
11
4
import { 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' ;
19
6
import { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan' ;
20
7
import { hasTracingEnabled } from './utils/hasTracingEnabled' ;
21
- import { getActiveSpan , spanToTraceHeader } from './utils/spanUtils' ;
8
+ import { getActiveSpan } from './utils/spanUtils' ;
22
9
23
10
type PolymorphicRequestHeaders =
24
11
| Record < string , string | undefined >
@@ -132,44 +119,31 @@ export function addTracingHeadersToFetchRequest(
132
119
} ,
133
120
span ?: Span ,
134
121
) : 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 } ) ;
147
123
148
124
const headers =
149
125
fetchOptionsObj . headers ||
150
126
( typeof Request !== 'undefined' && isInstanceOf ( request , Request ) ? ( request as Request ) . headers : undefined ) ;
151
127
152
128
if ( ! headers ) {
153
- return { 'sentry-trace' : sentryTraceHeader , baggage : sentryBaggageHeader } ;
129
+ return { 'sentry-trace' : sentryTrace , baggage } ;
154
130
} else if ( typeof Headers !== 'undefined' && isInstanceOf ( headers , Headers ) ) {
155
131
const newHeaders = new Headers ( headers as Headers ) ;
156
132
157
- newHeaders . set ( 'sentry-trace' , sentryTraceHeader ) ;
133
+ newHeaders . set ( 'sentry-trace' , sentryTrace ) ;
158
134
159
- if ( sentryBaggageHeader ) {
135
+ if ( baggage ) {
160
136
const prevBaggageHeader = newHeaders . get ( BAGGAGE_HEADER_NAME ) ;
161
137
if ( prevBaggageHeader ) {
162
138
const prevHeaderStrippedFromSentryBaggage = stripBaggageHeaderOfSentryBaggageValues ( prevBaggageHeader ) ;
163
139
newHeaders . set (
164
140
BAGGAGE_HEADER_NAME ,
165
141
// If there are non-sentry entries (i.e. if the stripped string is non-empty/truthy) combine the stripped header and sentry baggage header
166
142
// otherwise just set the sentry baggage header
167
- prevHeaderStrippedFromSentryBaggage
168
- ? `${ prevHeaderStrippedFromSentryBaggage } ,${ sentryBaggageHeader } `
169
- : sentryBaggageHeader ,
143
+ prevHeaderStrippedFromSentryBaggage ? `${ prevHeaderStrippedFromSentryBaggage } ,${ baggage } ` : baggage ,
170
144
) ;
171
145
} else {
172
- newHeaders . set ( BAGGAGE_HEADER_NAME , sentryBaggageHeader ) ;
146
+ newHeaders . set ( BAGGAGE_HEADER_NAME , baggage ) ;
173
147
}
174
148
}
175
149
@@ -191,13 +165,13 @@ export function addTracingHeadersToFetchRequest(
191
165
}
192
166
} ) ,
193
167
// Attach the new sentry-trace header
194
- [ 'sentry-trace' , sentryTraceHeader ] ,
168
+ [ 'sentry-trace' , sentryTrace ] ,
195
169
] ;
196
170
197
- if ( sentryBaggageHeader ) {
171
+ if ( baggage ) {
198
172
// If there are multiple entries with the same key, the browser will merge the values into a single request header.
199
173
// 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 ] ) ;
201
175
}
202
176
203
177
return newHeaders as PolymorphicRequestHeaders ;
@@ -215,13 +189,13 @@ export function addTracingHeadersToFetchRequest(
215
189
newBaggageHeaders . push ( stripBaggageHeaderOfSentryBaggageValues ( existingBaggageHeader ) ) ;
216
190
}
217
191
218
- if ( sentryBaggageHeader ) {
219
- newBaggageHeaders . push ( sentryBaggageHeader ) ;
192
+ if ( baggage ) {
193
+ newBaggageHeaders . push ( baggage ) ;
220
194
}
221
195
222
196
return {
223
197
...( headers as Exclude < typeof headers , Headers > ) ,
224
- 'sentry-trace' : sentryTraceHeader ,
198
+ 'sentry-trace' : sentryTrace ,
225
199
baggage : newBaggageHeaders . length > 0 ? newBaggageHeaders . join ( ',' ) : undefined ,
226
200
} ;
227
201
}
0 commit comments