Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .size-limit.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ module.exports = [
name: 'CDN Bundle (incl. Tracing, Replay, Logs, Metrics)',
path: createCDNPath('bundle.tracing.replay.logs.metrics.min.js'),
gzip: true,
limit: '83 KB',
limit: '83.5 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay, Feedback)',
Expand Down Expand Up @@ -283,7 +283,7 @@ module.exports = [
path: createCDNPath('bundle.tracing.replay.logs.metrics.min.js'),
gzip: false,
brotli: false,
limit: '255 KB',
limit: '255.5 KB',
},
{
name: 'CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed',
Expand All @@ -297,7 +297,7 @@ module.exports = [
path: createCDNPath('bundle.tracing.replay.feedback.logs.metrics.min.js'),
gzip: false,
brotli: false,
limit: '268 KB',
limit: '268.5 KB',
},
// Next.js SDK (ESM)
{
Expand Down
16 changes: 13 additions & 3 deletions packages/core/src/tracing/spans/envelope.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ export function createStreamedSpanEnvelope(
dsc: Partial<DynamicSamplingContext>,
client: Client,
): StreamedSpanEnvelope {
const options = client.getOptions();
const dsn = client.getDsn();
const tunnel = client.getOptions().tunnel;
const sdk = getSdkMetadataForEnvelopeHeader(client.getOptions()._metadata);
const tunnel = options.tunnel;
const sdk = getSdkMetadataForEnvelopeHeader(options._metadata);

const headers: StreamedSpanEnvelope[0] = {
sent_at: new Date().toISOString(),
Expand All @@ -23,9 +24,18 @@ export function createStreamedSpanEnvelope(
...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),
};

const isBrowserSdk = options._metadata?.sdk?.name === 'sentry.javascript.browser';
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated
Comment thread
chargome marked this conversation as resolved.
Outdated
const inferSetting = options.sendDefaultPii ? 'auto' : 'never';

const spanContainer: SpanContainerItem = [
{ type: 'span', item_count: serializedSpans.length, content_type: 'application/vnd.sentry.items.span.v2+json' },
{ items: serializedSpans },
{
version: 2,
...(isBrowserSdk && {
ingest_settings: { infer_ip: inferSetting, infer_useragent: inferSetting },
}),
items: serializedSpans,
},
];

return createEnvelope<StreamedSpanEnvelope>(headers, [spanContainer]);
Expand Down
5 changes: 5 additions & 0 deletions packages/core/src/types-hoist/span.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ export type SerializedStreamedSpan = Omit<StreamedSpanJSON, 'attributes' | 'link
* Envelope span item container.
*/
export type SerializedStreamedSpanContainer = {
version?: number;
ingest_settings?: {
infer_ip?: 'auto' | 'never';
infer_useragent?: 'auto' | 'never';
};
items: Array<SerializedStreamedSpan>;
};

Expand Down
81 changes: 80 additions & 1 deletion packages/core/test/lib/tracing/spans/envelope.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ describe('createStreamedSpanEnvelope', () => {
type: 'span',
},
{
version: 2,
items: [mockSpan],
},
],
Expand All @@ -199,7 +200,7 @@ describe('createStreamedSpanEnvelope', () => {
expect(envelopeItems).toEqual([
[
{ type: 'span', item_count: 3, content_type: 'application/vnd.sentry.items.span.v2+json' },
{ items: [mockSpan1, mockSpan2, mockSpan3] },
{ version: 2, items: [mockSpan1, mockSpan2, mockSpan3] },
],
]);
});
Expand All @@ -222,11 +223,89 @@ describe('createStreamedSpanEnvelope', () => {
type: 'span',
},
{
version: 2,
items: [],
},
],
],
]);
});

it("includes ingest_settings with 'auto' values when SDK is browser and sendDefaultPii is true", () => {
const mockSpan = createMockSerializedSpan();
const mockClient = new TestClient(
getDefaultTestClientOptions({
sendDefaultPii: true,
_metadata: {
sdk: { name: 'sentry.javascript.browser', version: '8.0.0' },
},
}),
);
const dsc: Partial<DynamicSamplingContext> = {};

const envelopeItems = createStreamedSpanEnvelope([mockSpan], dsc, mockClient)[1];

expect(envelopeItems).toEqual([
[
{ type: 'span', item_count: 1, content_type: 'application/vnd.sentry.items.span.v2+json' },
{
version: 2,
ingest_settings: { infer_ip: 'auto', infer_useragent: 'auto' },
items: [mockSpan],
},
],
]);
});

it("includes ingest_settings with 'never' values when SDK is browser and sendDefaultPii is false", () => {
const mockSpan = createMockSerializedSpan();
const mockClient = new TestClient(
getDefaultTestClientOptions({
sendDefaultPii: false,
_metadata: {
sdk: { name: 'sentry.javascript.browser', version: '8.0.0' },
},
}),
);
const dsc: Partial<DynamicSamplingContext> = {};

const envelopeItems = createStreamedSpanEnvelope([mockSpan], dsc, mockClient)[1];

expect(envelopeItems).toEqual([
[
{ type: 'span', item_count: 1, content_type: 'application/vnd.sentry.items.span.v2+json' },
{
version: 2,
ingest_settings: { infer_ip: 'never', infer_useragent: 'never' },
items: [mockSpan],
},
],
]);
});

it('omits ingest_settings when SDK is not browser', () => {
const mockSpan = createMockSerializedSpan();
const mockClient = new TestClient(
getDefaultTestClientOptions({
sendDefaultPii: true,
_metadata: {
sdk: { name: 'sentry.javascript.node', version: '10.38.0' },
},
}),
);
const dsc: Partial<DynamicSamplingContext> = {};

const envelopeItems = createStreamedSpanEnvelope([mockSpan], dsc, mockClient)[1];

expect(envelopeItems).toEqual([
[
{ type: 'span', item_count: 1, content_type: 'application/vnd.sentry.items.span.v2+json' },
{
version: 2,
items: [mockSpan],
},
],
]);
});
Comment thread
cursor[bot] marked this conversation as resolved.
});
});
Loading