@sentry-internal/tracing
Advanced tools
Comparing version 7.57.0 to 7.58.0
@@ -165,2 +165,4 @@ Object.defineProperty(exports, '__esModule', { value: true }); | ||
const hub = this._getCurrentHub(); | ||
const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options; | ||
@@ -170,16 +172,15 @@ | ||
const sentryTraceMetaTagValue = isPageloadTransaction ? getMetaContent('sentry-trace') : null; | ||
const baggageMetaTagValue = isPageloadTransaction ? getMetaContent('baggage') : null; | ||
const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : ''; | ||
const baggage = isPageloadTransaction ? getMetaContent('baggage') : ''; | ||
const { traceparentData, dynamicSamplingContext, propagationContext } = utils.tracingContextFromHeaders( | ||
sentryTrace, | ||
baggage, | ||
); | ||
const traceParentData = sentryTraceMetaTagValue ? core.extractTraceparentData(sentryTraceMetaTagValue) : undefined; | ||
const dynamicSamplingContext = baggageMetaTagValue | ||
? utils.baggageHeaderToDynamicSamplingContext(baggageMetaTagValue) | ||
: undefined; | ||
const expandedContext = { | ||
...context, | ||
...traceParentData, | ||
...traceparentData, | ||
metadata: { | ||
...context.metadata, | ||
dynamicSamplingContext: traceParentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, | ||
dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, | ||
}, | ||
@@ -211,3 +212,2 @@ trimEnd: true, | ||
const hub = this._getCurrentHub(); | ||
const { location } = types.WINDOW; | ||
@@ -224,2 +224,20 @@ | ||
); | ||
const scope = hub.getScope(); | ||
// If it's a pageload and there is a meta tag set | ||
// use the traceparentData as the propagation context | ||
if (isPageloadTransaction && traceparentData) { | ||
scope.setPropagationContext(propagationContext); | ||
} else { | ||
// Navigation transactions should set a new propagation context based on the | ||
// created idle transaction. | ||
scope.setPropagationContext({ | ||
traceId: idleTransaction.traceId, | ||
spanId: idleTransaction.spanId, | ||
parentSpanId: idleTransaction.parentSpanId, | ||
sampled: !!idleTransaction.sampled, | ||
}); | ||
} | ||
idleTransaction.registerBeforeFinishCallback(transaction => { | ||
@@ -302,3 +320,3 @@ this._collectWebVitals(); | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access | ||
return metaTag ? metaTag.getAttribute('content') : null; | ||
return metaTag ? metaTag.getAttribute('content') : undefined; | ||
} | ||
@@ -305,0 +323,0 @@ |
@@ -126,7 +126,9 @@ var { | ||
) { | ||
if (!core.hasTracingEnabled() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) { | ||
return; | ||
if (!core.hasTracingEnabled() || !handlerData.fetchData) { | ||
return undefined; | ||
} | ||
if (handlerData.endTimestamp) { | ||
const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url); | ||
if (handlerData.endTimestamp && shouldCreateSpanResult) { | ||
const spanId = handlerData.fetchData.__span; | ||
@@ -158,23 +160,31 @@ if (!spanId) return; | ||
} | ||
return; | ||
return undefined; | ||
} | ||
const currentSpan = core.getCurrentHub().getScope().getSpan(); | ||
const activeTransaction = currentSpan && currentSpan.transaction; | ||
const hub = core.getCurrentHub(); | ||
const scope = hub.getScope(); | ||
const client = hub.getClient(); | ||
const parentSpan = scope.getSpan(); | ||
if (currentSpan && activeTransaction) { | ||
const { method, url } = handlerData.fetchData; | ||
const span = currentSpan.startChild({ | ||
data: { | ||
url, | ||
type: 'fetch', | ||
'http.method': method, | ||
}, | ||
description: `${method} ${url}`, | ||
op: 'http.client', | ||
}); | ||
const { method, url } = handlerData.fetchData; | ||
const span = | ||
shouldCreateSpanResult && parentSpan | ||
? parentSpan.startChild({ | ||
data: { | ||
url, | ||
type: 'fetch', | ||
'http.method': method, | ||
}, | ||
description: `${method} ${url}`, | ||
op: 'http.client', | ||
}) | ||
: undefined; | ||
if (span) { | ||
handlerData.fetchData.__span = span.spanId; | ||
spans[span.spanId] = span; | ||
} | ||
if (shouldAttachHeaders(handlerData.fetchData.url) && client) { | ||
const request = handlerData.args[0]; | ||
@@ -188,12 +198,7 @@ | ||
if (shouldAttachHeaders(handlerData.fetchData.url)) { | ||
options.headers = addTracingHeadersToFetchRequest( | ||
request, | ||
activeTransaction.getDynamicSamplingContext(), | ||
span, | ||
options, | ||
); | ||
} | ||
return span; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access | ||
options.headers = addTracingHeadersToFetchRequest(request, client, scope, options); | ||
} | ||
return span; | ||
} | ||
@@ -206,4 +211,4 @@ | ||
request, // unknown is actually type Request but we can't export DOM types from this package, | ||
dynamicSamplingContext, | ||
span, | ||
client, | ||
scope, | ||
options | ||
@@ -213,4 +218,16 @@ | ||
) { | ||
const span = scope.getSpan(); | ||
const transaction = span && span.transaction; | ||
const { traceId, sampled, dsc } = scope.getPropagationContext(); | ||
const sentryTraceHeader = span ? span.toTraceparent() : utils.generateSentryTraceHeader(traceId, undefined, sampled); | ||
const dynamicSamplingContext = transaction | ||
? transaction.getDynamicSamplingContext() | ||
: dsc | ||
? dsc | ||
: core.getDynamicSamplingContextFromClient(traceId, client, scope); | ||
const sentryBaggageHeader = utils.dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
const sentryTraceHeader = span.toTraceparent(); | ||
@@ -271,2 +288,3 @@ const headers = | ||
*/ | ||
// eslint-disable-next-line complexity | ||
function xhrCallback( | ||
@@ -281,12 +299,10 @@ handlerData, | ||
if ( | ||
!core.hasTracingEnabled() || | ||
(xhr && xhr.__sentry_own_request__) || | ||
!(xhr && sentryXhrData && shouldCreateSpan(sentryXhrData.url)) | ||
) { | ||
return; | ||
if (!core.hasTracingEnabled() || (xhr && xhr.__sentry_own_request__) || !xhr || !sentryXhrData) { | ||
return undefined; | ||
} | ||
const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url); | ||
// check first if the request has finished and is tracked by an existing span which should now end | ||
if (handlerData.endTimestamp) { | ||
if (handlerData.endTimestamp && shouldCreateSpanResult) { | ||
const spanId = xhr.__sentry_xhr_span_id__; | ||
@@ -303,42 +319,65 @@ if (!spanId) return; | ||
} | ||
return; | ||
return undefined; | ||
} | ||
const currentSpan = core.getCurrentHub().getScope().getSpan(); | ||
const activeTransaction = currentSpan && currentSpan.transaction; | ||
const hub = core.getCurrentHub(); | ||
const scope = hub.getScope(); | ||
const parentSpan = scope.getSpan(); | ||
if (currentSpan && activeTransaction) { | ||
const span = currentSpan.startChild({ | ||
data: { | ||
...sentryXhrData.data, | ||
type: 'xhr', | ||
'http.method': sentryXhrData.method, | ||
url: sentryXhrData.url, | ||
}, | ||
description: `${sentryXhrData.method} ${sentryXhrData.url}`, | ||
op: 'http.client', | ||
}); | ||
const span = | ||
shouldCreateSpanResult && parentSpan | ||
? parentSpan.startChild({ | ||
data: { | ||
...sentryXhrData.data, | ||
type: 'xhr', | ||
'http.method': sentryXhrData.method, | ||
url: sentryXhrData.url, | ||
}, | ||
description: `${sentryXhrData.method} ${sentryXhrData.url}`, | ||
op: 'http.client', | ||
}) | ||
: undefined; | ||
if (span) { | ||
xhr.__sentry_xhr_span_id__ = span.spanId; | ||
spans[xhr.__sentry_xhr_span_id__] = span; | ||
} | ||
if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) { | ||
try { | ||
xhr.setRequestHeader('sentry-trace', span.toTraceparent()); | ||
if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) { | ||
if (span) { | ||
const transaction = span && span.transaction; | ||
const dynamicSamplingContext = transaction && transaction.getDynamicSamplingContext(); | ||
const sentryBaggageHeader = utils.dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
setHeaderOnXhr(xhr, span.toTraceparent(), sentryBaggageHeader); | ||
} else { | ||
const client = hub.getClient(); | ||
const { traceId, sampled, dsc } = scope.getPropagationContext(); | ||
const sentryTraceHeader = utils.generateSentryTraceHeader(traceId, undefined, sampled); | ||
const dynamicSamplingContext = | ||
dsc || (client ? core.getDynamicSamplingContextFromClient(traceId, client, scope) : undefined); | ||
const sentryBaggageHeader = utils.dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader); | ||
} | ||
} | ||
const dynamicSamplingContext = activeTransaction.getDynamicSamplingContext(); | ||
const sentryBaggageHeader = utils.dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
return span; | ||
} | ||
if (sentryBaggageHeader) { | ||
// From MDN: "If this method is called several times with the same header, the values are merged into one single request header." | ||
// We can therefore simply set a baggage header without checking what was there before | ||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader | ||
xhr.setRequestHeader(utils.BAGGAGE_HEADER_NAME, sentryBaggageHeader); | ||
} | ||
} catch (_) { | ||
// Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED. | ||
} | ||
function setHeaderOnXhr( | ||
xhr, | ||
sentryTraceHeader, | ||
sentryBaggageHeader, | ||
) { | ||
try { | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
xhr.setRequestHeader('sentry-trace', sentryTraceHeader); | ||
if (sentryBaggageHeader) { | ||
// From MDN: "If this method is called several times with the same header, the values are merged into one single request header." | ||
// We can therefore simply set a baggage header without checking what was there before | ||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
xhr.setRequestHeader(utils.BAGGAGE_HEADER_NAME, sentryBaggageHeader); | ||
} | ||
return span; | ||
} catch (_) { | ||
// Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED. | ||
} | ||
@@ -350,4 +389,6 @@ } | ||
exports.defaultRequestInstrumentationOptions = defaultRequestInstrumentationOptions; | ||
exports.fetchCallback = fetchCallback; | ||
exports.instrumentOutgoingRequests = instrumentOutgoingRequests; | ||
exports.shouldAttachHeaders = shouldAttachHeaders; | ||
exports.xhrCallback = xhrCallback; | ||
//# sourceMappingURL=request.js.map |
@@ -1,3 +0,3 @@ | ||
import { TRACING_DEFAULTS, addTracingExtensions, extractTraceparentData, startIdleTransaction, getActiveTransaction } from '@sentry/core'; | ||
import { logger, baggageHeaderToDynamicSamplingContext, getDomElement } from '@sentry/utils'; | ||
import { TRACING_DEFAULTS, addTracingExtensions, startIdleTransaction, getActiveTransaction } from '@sentry/core'; | ||
import { logger, tracingContextFromHeaders, getDomElement } from '@sentry/utils'; | ||
import { registerBackgroundTabDetection } from './backgroundtab.js'; | ||
@@ -163,2 +163,4 @@ import { startTrackingWebVitals, startTrackingLongTasks, startTrackingInteractions, addPerformanceEntries } from './metrics/index.js'; | ||
const hub = this._getCurrentHub(); | ||
const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options; | ||
@@ -168,16 +170,15 @@ | ||
const sentryTraceMetaTagValue = isPageloadTransaction ? getMetaContent('sentry-trace') : null; | ||
const baggageMetaTagValue = isPageloadTransaction ? getMetaContent('baggage') : null; | ||
const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : ''; | ||
const baggage = isPageloadTransaction ? getMetaContent('baggage') : ''; | ||
const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders( | ||
sentryTrace, | ||
baggage, | ||
); | ||
const traceParentData = sentryTraceMetaTagValue ? extractTraceparentData(sentryTraceMetaTagValue) : undefined; | ||
const dynamicSamplingContext = baggageMetaTagValue | ||
? baggageHeaderToDynamicSamplingContext(baggageMetaTagValue) | ||
: undefined; | ||
const expandedContext = { | ||
...context, | ||
...traceParentData, | ||
...traceparentData, | ||
metadata: { | ||
...context.metadata, | ||
dynamicSamplingContext: traceParentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, | ||
dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext, | ||
}, | ||
@@ -209,3 +210,2 @@ trimEnd: true, | ||
const hub = this._getCurrentHub(); | ||
const { location } = WINDOW; | ||
@@ -222,2 +222,20 @@ | ||
); | ||
const scope = hub.getScope(); | ||
// If it's a pageload and there is a meta tag set | ||
// use the traceparentData as the propagation context | ||
if (isPageloadTransaction && traceparentData) { | ||
scope.setPropagationContext(propagationContext); | ||
} else { | ||
// Navigation transactions should set a new propagation context based on the | ||
// created idle transaction. | ||
scope.setPropagationContext({ | ||
traceId: idleTransaction.traceId, | ||
spanId: idleTransaction.spanId, | ||
parentSpanId: idleTransaction.parentSpanId, | ||
sampled: !!idleTransaction.sampled, | ||
}); | ||
} | ||
idleTransaction.registerBeforeFinishCallback(transaction => { | ||
@@ -300,3 +318,3 @@ this._collectWebVitals(); | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access | ||
return metaTag ? metaTag.getAttribute('content') : null; | ||
return metaTag ? metaTag.getAttribute('content') : undefined; | ||
} | ||
@@ -303,0 +321,0 @@ |
import { _optionalChain } from '@sentry/utils/esm/buildPolyfills'; | ||
import { hasTracingEnabled, getCurrentHub } from '@sentry/core'; | ||
import { addInstrumentationHandler, browserPerformanceTimeOrigin, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME, SENTRY_XHR_DATA_KEY, stringMatchesSomePattern } from '@sentry/utils'; | ||
import { hasTracingEnabled, getCurrentHub, getDynamicSamplingContextFromClient } from '@sentry/core'; | ||
import { addInstrumentationHandler, browserPerformanceTimeOrigin, generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME, SENTRY_XHR_DATA_KEY, stringMatchesSomePattern } from '@sentry/utils'; | ||
@@ -121,7 +121,9 @@ /* eslint-disable max-lines */ | ||
) { | ||
if (!hasTracingEnabled() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) { | ||
return; | ||
if (!hasTracingEnabled() || !handlerData.fetchData) { | ||
return undefined; | ||
} | ||
if (handlerData.endTimestamp) { | ||
const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url); | ||
if (handlerData.endTimestamp && shouldCreateSpanResult) { | ||
const spanId = handlerData.fetchData.__span; | ||
@@ -153,23 +155,31 @@ if (!spanId) return; | ||
} | ||
return; | ||
return undefined; | ||
} | ||
const currentSpan = getCurrentHub().getScope().getSpan(); | ||
const activeTransaction = currentSpan && currentSpan.transaction; | ||
const hub = getCurrentHub(); | ||
const scope = hub.getScope(); | ||
const client = hub.getClient(); | ||
const parentSpan = scope.getSpan(); | ||
if (currentSpan && activeTransaction) { | ||
const { method, url } = handlerData.fetchData; | ||
const span = currentSpan.startChild({ | ||
data: { | ||
url, | ||
type: 'fetch', | ||
'http.method': method, | ||
}, | ||
description: `${method} ${url}`, | ||
op: 'http.client', | ||
}); | ||
const { method, url } = handlerData.fetchData; | ||
const span = | ||
shouldCreateSpanResult && parentSpan | ||
? parentSpan.startChild({ | ||
data: { | ||
url, | ||
type: 'fetch', | ||
'http.method': method, | ||
}, | ||
description: `${method} ${url}`, | ||
op: 'http.client', | ||
}) | ||
: undefined; | ||
if (span) { | ||
handlerData.fetchData.__span = span.spanId; | ||
spans[span.spanId] = span; | ||
} | ||
if (shouldAttachHeaders(handlerData.fetchData.url) && client) { | ||
const request = handlerData.args[0]; | ||
@@ -183,12 +193,7 @@ | ||
if (shouldAttachHeaders(handlerData.fetchData.url)) { | ||
options.headers = addTracingHeadersToFetchRequest( | ||
request, | ||
activeTransaction.getDynamicSamplingContext(), | ||
span, | ||
options, | ||
); | ||
} | ||
return span; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access | ||
options.headers = addTracingHeadersToFetchRequest(request, client, scope, options); | ||
} | ||
return span; | ||
} | ||
@@ -201,4 +206,4 @@ | ||
request, // unknown is actually type Request but we can't export DOM types from this package, | ||
dynamicSamplingContext, | ||
span, | ||
client, | ||
scope, | ||
options | ||
@@ -208,4 +213,16 @@ | ||
) { | ||
const span = scope.getSpan(); | ||
const transaction = span && span.transaction; | ||
const { traceId, sampled, dsc } = scope.getPropagationContext(); | ||
const sentryTraceHeader = span ? span.toTraceparent() : generateSentryTraceHeader(traceId, undefined, sampled); | ||
const dynamicSamplingContext = transaction | ||
? transaction.getDynamicSamplingContext() | ||
: dsc | ||
? dsc | ||
: getDynamicSamplingContextFromClient(traceId, client, scope); | ||
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
const sentryTraceHeader = span.toTraceparent(); | ||
@@ -266,2 +283,3 @@ const headers = | ||
*/ | ||
// eslint-disable-next-line complexity | ||
function xhrCallback( | ||
@@ -276,12 +294,10 @@ handlerData, | ||
if ( | ||
!hasTracingEnabled() || | ||
(xhr && xhr.__sentry_own_request__) || | ||
!(xhr && sentryXhrData && shouldCreateSpan(sentryXhrData.url)) | ||
) { | ||
return; | ||
if (!hasTracingEnabled() || (xhr && xhr.__sentry_own_request__) || !xhr || !sentryXhrData) { | ||
return undefined; | ||
} | ||
const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url); | ||
// check first if the request has finished and is tracked by an existing span which should now end | ||
if (handlerData.endTimestamp) { | ||
if (handlerData.endTimestamp && shouldCreateSpanResult) { | ||
const spanId = xhr.__sentry_xhr_span_id__; | ||
@@ -298,46 +314,69 @@ if (!spanId) return; | ||
} | ||
return; | ||
return undefined; | ||
} | ||
const currentSpan = getCurrentHub().getScope().getSpan(); | ||
const activeTransaction = currentSpan && currentSpan.transaction; | ||
const hub = getCurrentHub(); | ||
const scope = hub.getScope(); | ||
const parentSpan = scope.getSpan(); | ||
if (currentSpan && activeTransaction) { | ||
const span = currentSpan.startChild({ | ||
data: { | ||
...sentryXhrData.data, | ||
type: 'xhr', | ||
'http.method': sentryXhrData.method, | ||
url: sentryXhrData.url, | ||
}, | ||
description: `${sentryXhrData.method} ${sentryXhrData.url}`, | ||
op: 'http.client', | ||
}); | ||
const span = | ||
shouldCreateSpanResult && parentSpan | ||
? parentSpan.startChild({ | ||
data: { | ||
...sentryXhrData.data, | ||
type: 'xhr', | ||
'http.method': sentryXhrData.method, | ||
url: sentryXhrData.url, | ||
}, | ||
description: `${sentryXhrData.method} ${sentryXhrData.url}`, | ||
op: 'http.client', | ||
}) | ||
: undefined; | ||
if (span) { | ||
xhr.__sentry_xhr_span_id__ = span.spanId; | ||
spans[xhr.__sentry_xhr_span_id__] = span; | ||
} | ||
if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) { | ||
try { | ||
xhr.setRequestHeader('sentry-trace', span.toTraceparent()); | ||
if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) { | ||
if (span) { | ||
const transaction = span && span.transaction; | ||
const dynamicSamplingContext = transaction && transaction.getDynamicSamplingContext(); | ||
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
setHeaderOnXhr(xhr, span.toTraceparent(), sentryBaggageHeader); | ||
} else { | ||
const client = hub.getClient(); | ||
const { traceId, sampled, dsc } = scope.getPropagationContext(); | ||
const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled); | ||
const dynamicSamplingContext = | ||
dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined); | ||
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader); | ||
} | ||
} | ||
const dynamicSamplingContext = activeTransaction.getDynamicSamplingContext(); | ||
const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext); | ||
return span; | ||
} | ||
if (sentryBaggageHeader) { | ||
// From MDN: "If this method is called several times with the same header, the values are merged into one single request header." | ||
// We can therefore simply set a baggage header without checking what was there before | ||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader | ||
xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader); | ||
} | ||
} catch (_) { | ||
// Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED. | ||
} | ||
function setHeaderOnXhr( | ||
xhr, | ||
sentryTraceHeader, | ||
sentryBaggageHeader, | ||
) { | ||
try { | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
xhr.setRequestHeader('sentry-trace', sentryTraceHeader); | ||
if (sentryBaggageHeader) { | ||
// From MDN: "If this method is called several times with the same header, the values are merged into one single request header." | ||
// We can therefore simply set a baggage header without checking what was there before | ||
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader | ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion | ||
xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader); | ||
} | ||
return span; | ||
} catch (_) { | ||
// Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED. | ||
} | ||
} | ||
export { DEFAULT_TRACE_PROPAGATION_TARGETS, addTracingHeadersToFetchRequest, defaultRequestInstrumentationOptions, instrumentOutgoingRequests, shouldAttachHeaders }; | ||
export { DEFAULT_TRACE_PROPAGATION_TARGETS, addTracingHeadersToFetchRequest, defaultRequestInstrumentationOptions, fetchCallback, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback }; | ||
//# sourceMappingURL=request.js.map |
{ | ||
"name": "@sentry-internal/tracing", | ||
"version": "7.57.0", | ||
"version": "7.58.0", | ||
"description": "Sentry Internal Tracing Package", | ||
@@ -26,5 +26,5 @@ "repository": "git://github.com/getsentry/sentry-javascript.git", | ||
"dependencies": { | ||
"@sentry/core": "7.57.0", | ||
"@sentry/types": "7.57.0", | ||
"@sentry/utils": "7.57.0", | ||
"@sentry/core": "7.58.0", | ||
"@sentry/types": "7.58.0", | ||
"@sentry/utils": "7.58.0", | ||
"tslib": "^2.4.1 || ^1.9.3" | ||
@@ -31,0 +31,0 @@ }, |
@@ -134,3 +134,3 @@ import type { Hub } from '@sentry/core'; | ||
/** Returns the value of a meta tag */ | ||
export declare function getMetaContent(metaName: string): string | null; | ||
export declare function getMetaContent(metaName: string): string | undefined; | ||
//# sourceMappingURL=browsertracing.d.ts.map |
@@ -1,2 +0,2 @@ | ||
import type { DynamicSamplingContext, Span } from '@sentry/types'; | ||
import type { Client, Scope, Span } from '@sentry/types'; | ||
import { SENTRY_XHR_DATA_KEY } from '@sentry/utils'; | ||
@@ -90,11 +90,23 @@ export declare const DEFAULT_TRACE_PROPAGATION_TARGETS: (string | RegExp)[]; | ||
/** | ||
* Create and track fetch request spans | ||
* | ||
* @returns Span if a span was created, otherwise void. | ||
*/ | ||
export declare function fetchCallback(handlerData: FetchData, shouldCreateSpan: (url: string) => boolean, shouldAttachHeaders: (url: string) => boolean, spans: Record<string, Span>): Span | undefined; | ||
/** | ||
* Adds sentry-trace and baggage headers to the various forms of fetch headers | ||
*/ | ||
export declare function addTracingHeadersToFetchRequest(request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package, | ||
dynamicSamplingContext: Partial<DynamicSamplingContext>, span: Span, options: { | ||
client: Client, scope: Scope, options: { | ||
headers?: { | ||
[key: string]: string[] | string | undefined; | ||
} | PolymorphicRequestHeaders; | ||
}): PolymorphicRequestHeaders; | ||
}): PolymorphicRequestHeaders | undefined; | ||
/** | ||
* Create and track xhr request spans | ||
* | ||
* @returns Span if a span was created, otherwise void. | ||
*/ | ||
export declare function xhrCallback(handlerData: XHRData, shouldCreateSpan: (url: string) => boolean, shouldAttachHeaders: (url: string) => boolean, spans: Record<string, Span>): Span | undefined; | ||
export {}; | ||
//# sourceMappingURL=request.d.ts.map |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
940247
6458
+ Added@sentry/core@7.58.0(transitive)
+ Added@sentry/types@7.58.0(transitive)
+ Added@sentry/utils@7.58.0(transitive)
- Removed@sentry/core@7.57.0(transitive)
- Removed@sentry/types@7.57.0(transitive)
- Removed@sentry/utils@7.57.0(transitive)
Updated@sentry/core@7.58.0
Updated@sentry/types@7.58.0
Updated@sentry/utils@7.58.0