Skip to content

Commit 6239887

Browse files
committed
move addTracingHeadersToFetchRequest back to tracing-internal
1 parent 84ecc2b commit 6239887

File tree

5 files changed

+85
-86
lines changed

5 files changed

+85
-86
lines changed

packages/sveltekit/src/client/load.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1+
import { addTracingHeadersToFetchRequest } from '@sentry-internal/tracing';
12
import type { BaseClient } from '@sentry/core';
23
import { getCurrentHub, trace } from '@sentry/core';
34
import type { Breadcrumbs, BrowserTracing } from '@sentry/svelte';
45
import { captureException } from '@sentry/svelte';
56
import type { ClientOptions, SanitizedRequestData } from '@sentry/types';
67
import {
78
addExceptionMechanism,
8-
addTracingHeadersToFetchRequest,
99
getSanitizedUrlString,
1010
objectify,
1111
parseFetchArgs,

packages/tracing-internal/src/browser/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,8 @@ export * from '../exports';
33
export type { RequestInstrumentationOptions } from './request';
44

55
export { BrowserTracing, BROWSER_TRACING_INTEGRATION_ID } from './browsertracing';
6-
export { instrumentOutgoingRequests, defaultRequestInstrumentationOptions } from './request';
6+
export {
7+
instrumentOutgoingRequests,
8+
defaultRequestInstrumentationOptions,
9+
addTracingHeadersToFetchRequest,
10+
} from './request';

packages/tracing-internal/src/browser/request.ts

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/* eslint-disable max-lines */
22
import { getCurrentHub, hasTracingEnabled } from '@sentry/core';
3-
import type { Span } from '@sentry/types';
3+
import type { DynamicSamplingContext, Span } from '@sentry/types';
44
import {
55
addInstrumentationHandler,
6-
addTracingHeadersToFetchRequest,
76
BAGGAGE_HEADER_NAME,
87
dynamicSamplingContextToSentryBaggageHeader,
8+
isInstanceOf,
99
stringMatchesSomePattern,
1010
} from '@sentry/utils';
1111

@@ -210,6 +210,81 @@ export function fetchCallback(
210210
}
211211
}
212212

213+
type PolymorphicRequestHeaders =
214+
| Record<string, string | undefined>
215+
| Array<[string, string]>
216+
// the below is not preicsely the Header type used in Request, but it'll pass duck-typing
217+
| {
218+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
219+
[key: string]: any;
220+
append: (key: string, value: string) => void;
221+
get: (key: string) => string;
222+
};
223+
224+
export function addTracingHeadersToFetchRequest(
225+
request: string | Request,
226+
dynamicSamplingContext: Partial<DynamicSamplingContext>,
227+
span: Span,
228+
options: {
229+
headers?:
230+
| {
231+
[key: string]: string[] | string | undefined;
232+
}
233+
| Request['headers'];
234+
},
235+
): PolymorphicRequestHeaders {
236+
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);
237+
const sentryTraceHeader = span.toTraceparent();
238+
239+
const headers =
240+
typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : options.headers;
241+
242+
if (!headers) {
243+
return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };
244+
} else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {
245+
const newHeaders = new Headers(headers as Headers);
246+
247+
newHeaders.append('sentry-trace', sentryTraceHeader);
248+
249+
if (sentryBaggageHeader) {
250+
// If the same header is appended miultiple times the browser will merge the values into a single request header.
251+
// Its therefore safe to simply push a "baggage" entry, even though there might already be another baggage header.
252+
newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);
253+
}
254+
255+
return newHeaders as PolymorphicRequestHeaders;
256+
} else if (Array.isArray(headers)) {
257+
const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];
258+
259+
if (sentryBaggageHeader) {
260+
// If there are multiple entries with the same key, the browser will merge the values into a single request header.
261+
// Its therefore safe to simply push a "baggage" entry, even though there might already be another baggage header.
262+
newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);
263+
}
264+
265+
return newHeaders;
266+
} else {
267+
const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;
268+
const newBaggageHeaders: string[] = [];
269+
270+
if (Array.isArray(existingBaggageHeader)) {
271+
newBaggageHeaders.push(...existingBaggageHeader);
272+
} else if (existingBaggageHeader) {
273+
newBaggageHeaders.push(existingBaggageHeader);
274+
}
275+
276+
if (sentryBaggageHeader) {
277+
newBaggageHeaders.push(sentryBaggageHeader);
278+
}
279+
280+
return {
281+
...(headers as Exclude<typeof headers, Headers>),
282+
'sentry-trace': sentryTraceHeader,
283+
baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,
284+
};
285+
}
286+
}
287+
213288
/**
214289
* Create and track xhr request spans
215290
*/

packages/tracing-internal/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export {
1717
BROWSER_TRACING_INTEGRATION_ID,
1818
instrumentOutgoingRequests,
1919
defaultRequestInstrumentationOptions,
20+
addTracingHeadersToFetchRequest,
2021
} from './browser';
2122

2223
export type { RequestInstrumentationOptions } from './browser';

packages/utils/src/tracing.ts

Lines changed: 1 addition & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import type { DynamicSamplingContext, Span, TraceparentData } from '@sentry/types';
2-
3-
import { BAGGAGE_HEADER_NAME, dynamicSamplingContextToSentryBaggageHeader } from './baggage';
4-
import { isInstanceOf } from './is';
1+
import type { TraceparentData } from '@sentry/types';
52

63
export const TRACEPARENT_REGEXP = new RegExp(
74
'^[ \\t]*' + // whitespace
@@ -39,81 +36,3 @@ export function extractTraceparentData(traceparent: string): TraceparentData | u
3936
parentSpanId: matches[2],
4037
};
4138
}
42-
43-
export type PolymorphicRequestHeaders =
44-
| Record<string, string | undefined>
45-
| Array<[string, string]>
46-
// the below is not preicsely the Header type used in Request, but it'll pass duck-typing
47-
| {
48-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
49-
[key: string]: any;
50-
append: (key: string, value: string) => void;
51-
get: (key: string) => string;
52-
};
53-
54-
/**
55-
* Add `sentry-trace` and `baggage` headers to a given fetch request
56-
*/
57-
export function addTracingHeadersToFetchRequest(
58-
request: string | Request,
59-
dynamicSamplingContext: Partial<DynamicSamplingContext>,
60-
span: Span,
61-
options: {
62-
headers?:
63-
| {
64-
[key: string]: string[] | string | undefined;
65-
}
66-
| Request['headers'];
67-
},
68-
): PolymorphicRequestHeaders {
69-
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);
70-
const sentryTraceHeader = span.toTraceparent();
71-
72-
const headers =
73-
typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : options.headers;
74-
75-
if (!headers) {
76-
return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };
77-
} else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {
78-
const newHeaders = new Headers(headers as Headers);
79-
80-
newHeaders.append('sentry-trace', sentryTraceHeader);
81-
82-
if (sentryBaggageHeader) {
83-
// If the same header is appended miultiple times the browser will merge the values into a single request header.
84-
// Its therefore safe to simply push a "baggage" entry, even though there might already be another baggage header.
85-
newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);
86-
}
87-
88-
return newHeaders as PolymorphicRequestHeaders;
89-
} else if (Array.isArray(headers)) {
90-
const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];
91-
92-
if (sentryBaggageHeader) {
93-
// If there are multiple entries with the same key, the browser will merge the values into a single request header.
94-
// Its therefore safe to simply push a "baggage" entry, even though there might already be another baggage header.
95-
newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);
96-
}
97-
98-
return newHeaders;
99-
} else {
100-
const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;
101-
const newBaggageHeaders: string[] = [];
102-
103-
if (Array.isArray(existingBaggageHeader)) {
104-
newBaggageHeaders.push(...existingBaggageHeader);
105-
} else if (existingBaggageHeader) {
106-
newBaggageHeaders.push(existingBaggageHeader);
107-
}
108-
109-
if (sentryBaggageHeader) {
110-
newBaggageHeaders.push(sentryBaggageHeader);
111-
}
112-
113-
return {
114-
...(headers as Exclude<typeof headers, Headers>),
115-
'sentry-trace': sentryTraceHeader,
116-
baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,
117-
};
118-
}
119-
}

0 commit comments

Comments
 (0)