From 3449aa7618bae57342afc7aed8f60365e614a74b Mon Sep 17 00:00:00 2001 From: isaacs Date: Sat, 17 Oct 2026 12:46:39 -0700 Subject: [PATCH] fix(elysia): Report events as `sentry.javascript.elysia` `init()` copied `userOptions` into `options` and then called `applySdkMetadata()` on `userOptions`. When the user passed no `_metadata`, the copy did not get the new metadata. `@sentry/bun` then set its own `bun` metadata on the copy. All Elysia events reported as `sentry.javascript.bun`. Apply the metadata to `options`, the object passed to the Bun `init()`. The existing test mocked `applySdkMetadata()`, so it did not catch this. The new test uses the real function and checks the SDK name in the options passed to `init()`. Fixes #24045 Fixes JS-3580 Co-Authored-By: Claude Opus 5.5 (1M context) --- packages/elysia/src/sdk.ts | 2 +- packages/elysia/test/sdk.test.ts | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/elysia/src/sdk.ts b/packages/elysia/src/sdk.ts index f8d8dd9d8a35..b151b8282361 100644 --- a/packages/elysia/src/sdk.ts +++ b/packages/elysia/src/sdk.ts @@ -48,7 +48,7 @@ export function init(userOptions: ElysiaOptions = {}): NodeClient | undefined { serverName: userOptions.serverName || global.process.env.SENTRY_NAME || os.hostname(), }; - applySdkMetadata(userOptions, 'elysia', ['elysia', options.runtime.name]); + applySdkMetadata(options, 'elysia', ['elysia', options.runtime.name]); options.transport = options.transport || makeFetchTransport; diff --git a/packages/elysia/test/sdk.test.ts b/packages/elysia/test/sdk.test.ts index 142c3f4ff456..46f33f7ef33e 100644 --- a/packages/elysia/test/sdk.test.ts +++ b/packages/elysia/test/sdk.test.ts @@ -42,6 +42,20 @@ describe('init', () => { ); }); + it('passes elysia SDK metadata to initNode', async () => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const { applySdkMetadata } = await vi.importActual('@sentry/core'); + mockApplySdkMetadata.mockImplementationOnce(applySdkMetadata); + + init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' }); + + expect(mockInitNode).toHaveBeenCalledWith( + expect.objectContaining({ + _metadata: { sdk: expect.objectContaining({ name: 'sentry.javascript.elysia' }) }, + }), + ); + }); + it('calls initNode with the options', () => { init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' });