Skip to content

Commit 4dbce23

Browse files
committed
fix(core): Ensure partially set SDK metadata options are preserved
1 parent 8b2aff0 commit 4dbce23

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

packages/browser/src/client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ export class BrowserClient extends Client<BrowserClientOptions> {
9191
const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();
9292
applySdkMetadata(opts, 'browser', ['browser'], sdkSource);
9393

94+
console.log('xx opts._metadata', opts._metadata);
95+
9496
// Only allow IP inferral by Relay if sendDefaultPii is true
9597
if (opts._metadata?.sdk) {
9698
opts._metadata.sdk.settings = {

packages/browser/test/client.test.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ describe('applyDefaultOptions', () => {
148148

149149
describe('SDK metadata', () => {
150150
describe('sdk.settings', () => {
151-
it('sets infer_ipto "never" by default', () => {
151+
it('sets infer_ip to "never" by default', () => {
152152
const options = getDefaultBrowserClientOptions({});
153153
const client = new BrowserClient(options);
154154

@@ -233,5 +233,30 @@ describe('SDK metadata', () => {
233233

234234
expect(client.getOptions()._metadata?.sdk?.name).toBe('sentry.javascript.angular');
235235
});
236+
237+
it('preserves passed-in partial SDK metadata', () => {
238+
const options = getDefaultBrowserClientOptions({
239+
_metadata: {
240+
sdk: {
241+
settings: {
242+
infer_ip: 'auto',
243+
},
244+
},
245+
},
246+
// Usually, this would cause infer_ip to be set to 'never'
247+
// but we're passing it in explicitly, so it should be preserved
248+
sendDefaultPii: false,
249+
});
250+
const client = new BrowserClient(options);
251+
252+
expect(client.getOptions()._metadata?.sdk).toEqual({
253+
name: 'sentry.javascript.browser',
254+
version: expect.any(String),
255+
packages: [{ name: 'npm:@sentry/browser', version: expect.any(String) }],
256+
settings: {
257+
infer_ip: 'auto',
258+
},
259+
});
260+
});
236261
});
237262
});

packages/core/src/utils/sdkMetadata.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,18 @@ export function applySdkMetadata(options: CoreOptions, name: string, names = [na
2828
};
2929
}
3030

31+
if (!metadata.sdk) {
32+
metadata.sdk = {};
33+
}
34+
35+
if (!metadata.sdk.name) {
36+
metadata.sdk.name = `sentry.javascript.${name}`;
37+
metadata.sdk.packages = names.map(name => ({
38+
name: `${source}:@sentry/${name}`,
39+
version: SDK_VERSION,
40+
}));
41+
metadata.sdk.version = SDK_VERSION;
42+
}
43+
3144
options._metadata = metadata;
3245
}

0 commit comments

Comments
 (0)