Skip to content

Commit 3d15dcf

Browse files
committed
feat: Loosen types and header check
1 parent 4e235e3 commit 3d15dcf

1 file changed

Lines changed: 14 additions & 11 deletions

File tree

packages/core/src/fetch.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import {
1919
} from './utils/url';
2020

2121
type PolymorphicRequestHeaders =
22-
| Record<string, string | undefined>
23-
| Array<[string, string]>
24-
| Iterable<Iterable<string>>
22+
| Record<string, unknown>
23+
| Array<[string, unknown]>
24+
| Iterable<Iterable<unknown>>
2525
// the below is not precisely the Header type used in Request, but it'll pass duck-typing
2626
| {
2727
append: (key: string, value: string) => void;
@@ -183,7 +183,6 @@ export function _callOnRequestSpanEnd(
183183
*
184184
* @internal Exported for cross-package instrumentation (for example Cloudflare Workers fetcher bindings)
185185
* and unit tests
186-
* @hidden
187186
*
188187
* Baggage handling:
189188
* 1. No previous baggage header → include Sentry baggage
@@ -243,16 +242,17 @@ export function _INTERNAL_getTracingHeadersForFetchRequest(
243242
} else if (isHeadersInitTupleArray(originalHeaders)) {
244243
const newHeaders = [...originalHeaders];
245244

246-
if (!originalHeaders.find(header => header[0] === 'sentry-trace')) {
245+
if (!newHeaders.find(header => header[0] === 'sentry-trace')) {
247246
newHeaders.push(['sentry-trace', sentryTrace]);
248247
}
249248

250-
if (propagateTraceparent && traceparent && !originalHeaders.find(header => header[0] === 'traceparent')) {
249+
if (propagateTraceparent && traceparent && !newHeaders.find(header => header[0] === 'traceparent')) {
251250
newHeaders.push(['traceparent', traceparent]);
252251
}
253252

254253
const prevBaggageHeaderWithSentryValues = originalHeaders.find(
255-
header => header[0] === 'baggage' && baggageHeaderHasSentryBaggageValues(header[1]),
254+
header =>
255+
header[0] === 'baggage' && typeof header[1] === 'string' && baggageHeaderHasSentryBaggageValues(header[1]),
256256
);
257257

258258
if (baggage && !prevBaggageHeaderWithSentryValues) {
@@ -319,7 +319,11 @@ function endSpan(span: Span, handlerData: HandlerDataFetch): void {
319319
span.end();
320320
}
321321

322-
function baggageHeaderHasSentryBaggageValues(baggageHeader: string): boolean {
322+
function baggageHeaderHasSentryBaggageValues(baggageHeader: unknown): boolean {
323+
if (typeof baggageHeader !== 'string') {
324+
return false;
325+
}
326+
323327
return baggageHeader.split(',').some(baggageEntry => baggageEntry.trim().startsWith(SENTRY_BAGGAGE_KEY_PREFIX));
324328
}
325329

@@ -328,14 +332,13 @@ function isHeaders(headers: unknown): headers is Headers {
328332
}
329333

330334
/** `HeadersInit` array form: each entry is a [name, value] pair of strings. */
331-
function isHeadersInitTupleArray(headers: unknown): headers is [string, string][] {
335+
function isHeadersInitTupleArray(headers: unknown): headers is [string, unknown][] {
332336
if (!Array.isArray(headers)) {
333337
return false;
334338
}
335339

336340
return headers.every(
337-
(item): item is [string, string] =>
338-
Array.isArray(item) && item.length === 2 && typeof item[0] === 'string' && typeof item[1] === 'string',
341+
(item): item is [string, unknown] => Array.isArray(item) && item.length === 2 && typeof item[0] === 'string',
339342
);
340343
}
341344

0 commit comments

Comments
 (0)