Skip to content

Commit

Permalink
fix(sveltekit): Ensure trace meta tags are always injected
Browse files Browse the repository at this point in the history
  • Loading branch information
Lms24 committed Aug 5, 2024
1 parent 1fcd07b commit 4a86700
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 27 deletions.
27 changes: 8 additions & 19 deletions packages/sveltekit/src/server/handle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
withIsolationScope,
} from '@sentry/core';
import { startSpan } from '@sentry/core';
import { captureException, continueTrace } from '@sentry/node';
import { captureException, continueTrace, getTraceMetaTags } from '@sentry/node';
import type { Span } from '@sentry/types';
import {
dynamicSamplingContextToSentryBaggageHeader,
Expand Down Expand Up @@ -113,25 +113,14 @@ export function addSentryCodeToPage(options: SentryHandleOptions): NonNullable<R
const nonce = fetchProxyScriptNonce ? `nonce="${fetchProxyScriptNonce}"` : '';

return ({ html }) => {
const activeSpan = getActiveSpan();
const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;
if (rootSpan) {
const traceparentData = spanToTraceHeader(rootSpan);
const dynamicSamplingContext = dynamicSamplingContextToSentryBaggageHeader(
getDynamicSamplingContextFromSpan(rootSpan),
);
const contentMeta = `<head>
<meta name="sentry-trace" content="${traceparentData}"/>
<meta name="baggage" content="${dynamicSamplingContext}"/>
`;
const contentScript = shouldInjectScript ? `<script ${nonce}>${FETCH_PROXY_SCRIPT}</script>` : '';

const content = `${contentMeta}\n${contentScript}`;

return html.replace('<head>', content);
}
const metaTags = getTraceMetaTags();
const headWithMetaTags = metaTags ? `<head>\n${metaTags}` : '<head>';

const headWithFetchScript = shouldInjectScript ? `\n<script ${nonce}>${FETCH_PROXY_SCRIPT}</script>` : '';

const modifiedHead = `${headWithMetaTags}${headWithFetchScript}`;

return html;
return html.replace('<head>', modifiedHead);
};
}

Expand Down
20 changes: 12 additions & 8 deletions packages/sveltekit/test/server/handle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -429,10 +429,14 @@ describe('addSentryCodeToPage', () => {
</body>
</html>`;

it('does not add meta tags if no active transaction', () => {
it("Adds add meta tags and fetch proxy script if there's no active transaction", () => {
const transformPageChunk = addSentryCodeToPage({});
const transformed = transformPageChunk({ html, done: true });
expect(transformed).toEqual(html);

expect(transformed).toContain('<meta name="sentry-trace"');
expect(transformed).toContain('<meta name="baggage"');
expect(transformed).not.toContain('sentry-transaction=');
expect(transformed).toContain(`<script >${FETCH_PROXY_SCRIPT}</script>`);
});

it('adds meta tags and the fetch proxy script if there is an active transaction', () => {
Expand All @@ -442,6 +446,7 @@ describe('addSentryCodeToPage', () => {

expect(transformed).toContain('<meta name="sentry-trace"');
expect(transformed).toContain('<meta name="baggage"');
expect(transformed).toContain('sentry-transaction=test');
expect(transformed).toContain(`<script >${FETCH_PROXY_SCRIPT}</script>`);
});
});
Expand All @@ -453,18 +458,17 @@ describe('addSentryCodeToPage', () => {

expect(transformed).toContain('<meta name="sentry-trace"');
expect(transformed).toContain('<meta name="baggage"');
expect(transformed).toContain('sentry-transaction=test');
expect(transformed).toContain(`<script nonce="123abc">${FETCH_PROXY_SCRIPT}</script>`);
});
});

it('does not add the fetch proxy script if the `injectFetchProxyScript` option is false', () => {
const transformPageChunk = addSentryCodeToPage({ injectFetchProxyScript: false });
SentryNode.startSpan({ name: 'test' }, () => {
const transformed = transformPageChunk({ html, done: true }) as string;
const transformed = transformPageChunk({ html, done: true }) as string;

expect(transformed).toContain('<meta name="sentry-trace"');
expect(transformed).toContain('<meta name="baggage"');
expect(transformed).not.toContain(`<script >${FETCH_PROXY_SCRIPT}</script>`);
});
expect(transformed).toContain('<meta name="sentry-trace"');
expect(transformed).toContain('<meta name="baggage"');
expect(transformed).not.toContain(`<script >${FETCH_PROXY_SCRIPT}</script>`);
});
});

0 comments on commit 4a86700

Please sign in to comment.