Skip to content

Commit d7f1b94

Browse files
committed
add obtaining baggage from html meta tags (BrowserTracing)
1 parent 1288020 commit d7f1b94

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

packages/tracing/src/browser/browsertracing.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Hub } from '@sentry/hub';
22
import { EventProcessor, Integration, Transaction, TransactionContext } from '@sentry/types';
3-
import { getGlobalObject, logger } from '@sentry/utils';
3+
import { getGlobalObject, logger, parseBaggageString } from '@sentry/utils';
44

55
import { IS_DEBUG_BUILD } from '../flags';
66
import { startIdleTransaction } from '../hubextensions';
@@ -204,7 +204,7 @@ export class BrowserTracing implements Integration {
204204
// eslint-disable-next-line @typescript-eslint/unbound-method
205205
const { beforeNavigate, idleTimeout, finalTimeout } = this.options;
206206

207-
const parentContextFromHeader = context.op === 'pageload' ? getHeaderContext() : undefined;
207+
const parentContextFromHeader = context.op === 'pageload' ? extractTraceDataFromMetaTags() : undefined;
208208

209209
const expandedContext = {
210210
...context,
@@ -256,6 +256,28 @@ export function getHeaderContext(): Partial<TransactionContext> | undefined {
256256
return undefined;
257257
}
258258

259+
/**
260+
* Gets transaction context data from `sentry-trace` and `baggage` <meta> tags.
261+
* @returns Transaction context data or undefined neither tag exists or has valid data
262+
*/
263+
export function extractTraceDataFromMetaTags(): Partial<TransactionContext> | undefined {
264+
const sentrytraceValue = getMetaContent('sentry-trace');
265+
const baggageValue = getMetaContent('baggage');
266+
267+
const sentrytraceData = sentrytraceValue ? extractTraceparentData(sentrytraceValue) : undefined;
268+
const baggage = baggageValue ? parseBaggageString(baggageValue) : undefined;
269+
270+
// TODO more extensive checks for baggage validity/emptyness?
271+
if (sentrytraceData || baggage) {
272+
return {
273+
...sentrytraceData,
274+
...(baggage && { metadata: { baggage } }),
275+
};
276+
}
277+
278+
return undefined;
279+
}
280+
259281
/** Returns the value of a meta tag */
260282
export function getMetaContent(metaName: string): string | null {
261283
const el = getGlobalObject<Window>().document.querySelector(`meta[name=${metaName}]`);

0 commit comments

Comments
 (0)