diff --git a/dev-packages/e2e-tests/test-applications/elysia-bun/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/elysia-bun/tests/errors.test.ts index 5e587e28fd41..0b3ac95d7cb4 100644 --- a/dev-packages/e2e-tests/test-applications/elysia-bun/tests/errors.test.ts +++ b/dev-packages/e2e-tests/test-applications/elysia-bun/tests/errors.test.ts @@ -19,6 +19,7 @@ test('Captures an error thrown in a route handler', async ({ baseURL, request }) }); expect(errorEvent.transaction).toEqual('GET /test-exception/:id'); + expect(errorEvent.sdk?.name).toBe('sentry.javascript.elysia'); expect(errorEvent.contexts?.trace).toEqual( expect.objectContaining({ diff --git a/dev-packages/e2e-tests/test-applications/elysia-node/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/elysia-node/tests/errors.test.ts index 258d7abc5adf..64fc4a132d80 100644 --- a/dev-packages/e2e-tests/test-applications/elysia-node/tests/errors.test.ts +++ b/dev-packages/e2e-tests/test-applications/elysia-node/tests/errors.test.ts @@ -19,6 +19,7 @@ test('Captures an error thrown in a route handler', async ({ baseURL, request }) }); expect(errorEvent.transaction).toEqual('GET /test-exception/:id'); + expect(errorEvent.sdk?.name).toBe('sentry.javascript.elysia'); expect(errorEvent.contexts?.trace).toEqual( expect.objectContaining({ diff --git a/packages/elysia/src/sdk.ts b/packages/elysia/src/sdk.ts index be7225026a63..2877338fe03f 100644 --- a/packages/elysia/src/sdk.ts +++ b/packages/elysia/src/sdk.ts @@ -49,7 +49,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 || (options.runtime.name === 'bun' ? makeFetchTransport : makeNodeTransport); diff --git a/packages/elysia/test/sdk.test.ts b/packages/elysia/test/sdk.test.ts index 2670802b21f3..afd3cf00e88b 100644 --- a/packages/elysia/test/sdk.test.ts +++ b/packages/elysia/test/sdk.test.ts @@ -1,21 +1,11 @@ import type { Integration } from '@sentry/core'; import { afterEach, describe, expect, it, vi } from 'vitest'; -const mockApplySdkMetadata = vi.fn(); const mockInitNode = vi.fn(); const mockGetBunDefaultIntegrations = vi.fn(() => [] as Integration[]); const mockMakeFetchTransport = vi.fn(); const mockMakeNodeTransport = vi.fn(); -vi.mock('@sentry/core', async importActual => { - // eslint-disable-next-line @typescript-eslint/consistent-type-imports - const actual = await importActual(); - return { - ...actual, - applySdkMetadata: mockApplySdkMetadata, - }; -}); - vi.mock('@sentry/bun', () => ({ init: mockInitNode, getDefaultIntegrations: mockGetBunDefaultIntegrations, @@ -34,13 +24,21 @@ describe('init', () => { vi.unstubAllGlobals(); }); - it('sets SDK metadata to elysia', () => { + it('passes Elysia SDK metadata to initNode', () => { init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' }); - expect(mockApplySdkMetadata).toHaveBeenCalledWith( - expect.objectContaining({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' }), - 'elysia', - ['elysia', 'node'], + expect(mockInitNode).toHaveBeenCalledWith( + expect.objectContaining({ + _metadata: { + sdk: expect.objectContaining({ + name: 'sentry.javascript.elysia', + packages: [ + expect.objectContaining({ name: 'npm:@sentry/elysia' }), + expect.objectContaining({ name: 'npm:@sentry/node' }), + ], + }), + }, + }), ); }); @@ -114,10 +112,12 @@ describe('init', () => { it('detects runtime correctly', () => { init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0' }); - const calledOptions = mockInitNode.mock.calls[0]![0]; // In vitest (Node), Bun is not defined, so runtime should be node - expect(calledOptions.runtime.name).toBe('node'); - expect(calledOptions.runtime.version).toBe(process.version); + expect(mockInitNode).toHaveBeenCalledWith( + expect.objectContaining({ + runtime: { name: 'node', version: process.version }, + }), + ); }); it('detects bun runtime when Bun is defined', () => { @@ -125,9 +125,20 @@ describe('init', () => { init({ dsn: 'https://***@o0.ingest.sentry.io/0' }); - const calledOptions = mockInitNode.mock.calls[0]![0]; - expect(calledOptions.runtime).toEqual({ name: 'bun', version: '1.2.3' }); - expect(mockApplySdkMetadata).toHaveBeenCalledWith(expect.anything(), 'elysia', ['elysia', 'bun']); + expect(mockInitNode).toHaveBeenCalledWith( + expect.objectContaining({ + runtime: { name: 'bun', version: '1.2.3' }, + _metadata: { + sdk: expect.objectContaining({ + name: 'sentry.javascript.elysia', + packages: [ + expect.objectContaining({ name: 'npm:@sentry/elysia' }), + expect.objectContaining({ name: 'npm:@sentry/bun' }), + ], + }), + }, + }), + ); }); });