diff --git a/CHANGELOG.md b/CHANGELOG.md index 1eea89155e7d..437c62ce0575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ - "You miss 100 percent of the chances you don't take. — Wayne Gretzky" — Michael Scott -Work in this release was contributed by @faizansaiyed123, @seongwon030, and @kyrylolvov. Thank you for your contributions! +Work in this release was contributed by @faizansaiyed123, @itisrmk, @seongwon030, and @kyrylolvov. Thank you for your contributions! ## 11.9.0 diff --git a/dev-packages/browser-integration-tests/package.json b/dev-packages/browser-integration-tests/package.json index 2aa015cab0a8..bd00cdd2638e 100644 --- a/dev-packages/browser-integration-tests/package.json +++ b/dev-packages/browser-integration-tests/package.json @@ -63,7 +63,7 @@ "@sentry/browser": "11.9.0", "@sentry/replay": "11.9.0", "@sentry/opentelemetry": "11.9.0", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@supabase/supabase-js": "2.109.0", "axios": "1.20.0", "babel-loader": "^10.1.1", diff --git a/dev-packages/cloudflare-integration-tests/package.json b/dev-packages/cloudflare-integration-tests/package.json index 89b6a98e97cb..110e90f3d240 100644 --- a/dev-packages/cloudflare-integration-tests/package.json +++ b/dev-packages/cloudflare-integration-tests/package.json @@ -36,7 +36,7 @@ "@cloudflare/workers-types-v5": "npm:@cloudflare/workers-types@5.20260710.1", "@opentelemetry/api": "^1.9.1", "@sentry-internal/test-utils": "11.9.0", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "eslint-plugin-regexp": "^3.1.0", "prisma": "6.15.0", "vite": "^8.3.1", diff --git a/dev-packages/deno-integration-tests/package.json b/dev-packages/deno-integration-tests/package.json index 27eafb9e1f95..693e80db1d5c 100644 --- a/dev-packages/deno-integration-tests/package.json +++ b/dev-packages/deno-integration-tests/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@sentry-internal/node-integration-tests": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "vitest": "^4.1.11" }, "volta": { diff --git a/dev-packages/e2e-tests/test-applications/angular-19/package.json b/dev-packages/e2e-tests/test-applications/angular-19/package.json index b9c60d6042cc..f17e7f9b42c4 100644 --- a/dev-packages/e2e-tests/test-applications/angular-19/package.json +++ b/dev-packages/e2e-tests/test-applications/angular-19/package.json @@ -36,7 +36,7 @@ "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "@playwright/test": "1.64.1", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", "@sentry/core": "file:../../packed/sentry-core-packed.tgz", "@types/jasmine": "~5.1.0", diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-pi-durable/package.json b/dev-packages/e2e-tests/test-applications/cloudflare-pi-durable/package.json index b182a4f209d8..11e6f89ec741 100644 --- a/dev-packages/e2e-tests/test-applications/cloudflare-pi-durable/package.json +++ b/dev-packages/e2e-tests/test-applications/cloudflare-pi-durable/package.json @@ -22,7 +22,7 @@ "@cloudflare/workers-types": "^4.20260426.0", "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "typescript": "^5.5.2", "vite": "7.3.5", "wrangler": "^4.136.2" diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/package.json b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/package.json index 8650666b7870..13f859972700 100644 --- a/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/package.json +++ b/dev-packages/e2e-tests/test-applications/cloudflare-workers-send-to-sentry/package.json @@ -19,7 +19,7 @@ "@cloudflare/workers-types": "^5.20260727.1", "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@types/node": "^26.1.2", "sentry": "~0.44.1", "typescript": "~6.0.3", diff --git a/dev-packages/e2e-tests/test-applications/nextjs-16-tunnel/package.json b/dev-packages/e2e-tests/test-applications/nextjs-16-tunnel/package.json index 53c5adcc5761..148f8af3c086 100644 --- a/dev-packages/e2e-tests/test-applications/nextjs-16-tunnel/package.json +++ b/dev-packages/e2e-tests/test-applications/nextjs-16-tunnel/package.json @@ -41,7 +41,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", diff --git a/dev-packages/e2e-tests/test-applications/nitro-3/package.json b/dev-packages/e2e-tests/test-applications/nitro-3/package.json index 82836a613593..d27379abecd6 100644 --- a/dev-packages/e2e-tests/test-applications/nitro-3/package.json +++ b/dev-packages/e2e-tests/test-applications/nitro-3/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry/core": "latest || *", "nitro": "^3.0.260522-beta", "rolldown": "latest", diff --git a/dev-packages/e2e-tests/test-applications/node-eve/package.json b/dev-packages/e2e-tests/test-applications/node-eve/package.json index e41b30dc7fb4..ddb28a2f89a9 100644 --- a/dev-packages/e2e-tests/test-applications/node-eve/package.json +++ b/dev-packages/e2e-tests/test-applications/node-eve/package.json @@ -32,7 +32,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry/core": "file:../../packed/sentry-core-packed.tgz", "@types/node": "24.x", "typescript": "~5.9.0" diff --git a/dev-packages/e2e-tests/test-applications/node-hapi/package.json b/dev-packages/e2e-tests/test-applications/node-hapi/package.json index 57fa79727712..65ed01564dbd 100644 --- a/dev-packages/e2e-tests/test-applications/node-hapi/package.json +++ b/dev-packages/e2e-tests/test-applications/node-hapi/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@playwright/test": "1.64.1", + "@sentry/conventions": "0.29.0", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz" }, "volta": { diff --git a/dev-packages/e2e-tests/test-applications/node-hapi/tests/spans.test.ts b/dev-packages/e2e-tests/test-applications/node-hapi/tests/spans.test.ts index 6f69c36ae622..55c563a68ad9 100644 --- a/dev-packages/e2e-tests/test-applications/node-hapi/tests/spans.test.ts +++ b/dev-packages/e2e-tests/test-applications/node-hapi/tests/spans.test.ts @@ -1,4 +1,5 @@ import { expect, test } from '@playwright/test'; +import { HAPI_EXT_TYPE, HAPI_TYPE, SERVER_EXT_TYPE } from '@sentry/conventions/attributes'; import { waitForStreamedSpan, getSpanOp, collectStreamedSpansUntilSegment } from '@sentry-internal/test-utils'; test('Sends successful span', async ({ baseURL }) => { @@ -97,10 +98,12 @@ test('Sends successful span', async ({ baseURL }) => { end_timestamp: expect.any(Number), trace_id: expect.stringMatching(/[a-f0-9]{32}/), attributes: expect.objectContaining({ - 'hapi.type': { value: 'server.ext', type: 'string' }, + [HAPI_TYPE]: { value: 'server.ext', type: 'string' }, + [HAPI_EXT_TYPE]: { value: 'onPreResponse', type: 'string' }, 'sentry.op': { value: 'middleware', type: 'string' }, 'sentry.origin': { value: 'auto.http.hapi', type: 'string' }, - 'server.ext.type': { value: 'onPreResponse', type: 'string' }, + // oxlint-disable-next-line typescript/no-deprecated + [SERVER_EXT_TYPE]: { value: 'onPreResponse', type: 'string' }, }), }), ]); diff --git a/dev-packages/e2e-tests/test-applications/node-mastra/package.json b/dev-packages/e2e-tests/test-applications/node-mastra/package.json index 67ffbde6c0d5..2e40f1fff9ca 100644 --- a/dev-packages/e2e-tests/test-applications/node-mastra/package.json +++ b/dev-packages/e2e-tests/test-applications/node-mastra/package.json @@ -28,7 +28,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@types/node": "24.x", "mastra": "~1.28.0", "typescript": "~5.9.0" diff --git a/dev-packages/e2e-tests/test-applications/node-openai-decisions-send-to-sentry/package.json b/dev-packages/e2e-tests/test-applications/node-openai-decisions-send-to-sentry/package.json index 8f6ee984c8a1..00870e099c73 100644 --- a/dev-packages/e2e-tests/test-applications/node-openai-decisions-send-to-sentry/package.json +++ b/dev-packages/e2e-tests/test-applications/node-openai-decisions-send-to-sentry/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@types/express": "^4.17.21", "@types/node": "^24.0.0", "sentry": "~0.44.1", diff --git a/dev-packages/e2e-tests/test-applications/node-pi-durable/package.json b/dev-packages/e2e-tests/test-applications/node-pi-durable/package.json index 7d6f0d26e879..1b68765330c8 100644 --- a/dev-packages/e2e-tests/test-applications/node-pi-durable/package.json +++ b/dev-packages/e2e-tests/test-applications/node-pi-durable/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@playwright/test": "1.64.1", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry/core": "file:../../packed/sentry-core-packed.tgz", "@types/node": "24.x" }, diff --git a/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json b/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json index 798eef35e989..6edeb2673788 100644 --- a/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json +++ b/dev-packages/e2e-tests/test-applications/nuxt-4-static/package.json @@ -26,7 +26,7 @@ }, "devDependencies": { "@playwright/test": "1.64.1", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz" }, "volta": { diff --git a/dev-packages/e2e-tests/test-applications/solidstart-static/package.json b/dev-packages/e2e-tests/test-applications/solidstart-static/package.json index b3ff8de5660a..4bcb9b4a8214 100644 --- a/dev-packages/e2e-tests/test-applications/solidstart-static/package.json +++ b/dev-packages/e2e-tests/test-applications/solidstart-static/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@playwright/test": "1.64.1", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry-internal/test-utils": "file:../../packed/sentry-internal-test-utils-packed.tgz", "@solidjs/meta": "^0.29.4", "@solidjs/router": "^1.0.0", diff --git a/dev-packages/node-integration-tests/package.json b/dev-packages/node-integration-tests/package.json index 9726621238a7..a3dfca6c43a2 100644 --- a/dev-packages/node-integration-tests/package.json +++ b/dev-packages/node-integration-tests/package.json @@ -118,7 +118,7 @@ "@neondatabase/serverless": "1.2.0", "@opentelemetry/instrumentation-http": "0.220.0", "@sentry-internal/rollup-utils": "11.9.0", - "@sentry/conventions": "0.27.0", + "@sentry/conventions": "0.29.0", "@sentry-internal/test-utils": "11.9.0", "@sentry/node-native": "11.9.0", "@types/amqplib": "^0.10.5", diff --git a/dev-packages/node-integration-tests/suites/tracing/hapi/instrument-static.mjs b/dev-packages/node-integration-tests/suites/tracing/hapi/instrument-static.mjs new file mode 100644 index 000000000000..d799a8900e59 --- /dev/null +++ b/dev-packages/node-integration-tests/suites/tracing/hapi/instrument-static.mjs @@ -0,0 +1,10 @@ +import * as Sentry from '@sentry/node'; +import { loggingTransport } from '@sentry-internal/node-integration-tests'; + +Sentry.init({ + dsn: 'https://public@dsn.ingest.sentry.io/1337', + release: '1.0', + tracesSampleRate: 1.0, + transport: loggingTransport, + traceLifecycle: 'static', +}); diff --git a/dev-packages/node-integration-tests/suites/tracing/hapi/scenario.mjs b/dev-packages/node-integration-tests/suites/tracing/hapi/scenario.mjs index d081af0a4295..33a3df241a66 100644 --- a/dev-packages/node-integration-tests/suites/tracing/hapi/scenario.mjs +++ b/dev-packages/node-integration-tests/suites/tracing/hapi/scenario.mjs @@ -18,6 +18,18 @@ const run = async () => { }, }); + server.route({ + method: ['GET', 'POST'], + path: '/multi', + handler: () => 'Hello World!', + }); + + server.route({ + method: '*', + path: '/wildcard', + handler: () => 'Hello World!', + }); + server.route({ method: 'GET', path: '/error', @@ -34,6 +46,14 @@ const run = async () => { }, }); + server.route({ + method: '*', + path: '/wildcard-error', + handler: () => { + return new Error('Sentry Test Error'); + }, + }); + server.route({ method: 'GET', path: '/boom-error', diff --git a/dev-packages/node-integration-tests/suites/tracing/hapi/test.ts b/dev-packages/node-integration-tests/suites/tracing/hapi/test.ts index 24a9d1b2adba..c608ea2cbfac 100644 --- a/dev-packages/node-integration-tests/suites/tracing/hapi/test.ts +++ b/dev-packages/node-integration-tests/suites/tracing/hapi/test.ts @@ -1,3 +1,11 @@ +import { + HAPI_EXT_TYPE, + HAPI_TYPE, + HTTP_REQUEST_METHOD, + SENTRY_OP, + SERVER_EXT_TYPE, +} from '@sentry/conventions/attributes'; +import { ROUTER } from '@sentry/conventions/op'; import { afterAll, describe, expect } from 'vitest'; import { cleanupChildProcesses, createEsmAndCjsTests } from '../../../utils/runner'; @@ -19,7 +27,36 @@ describe('hapi auto-instrumentation', () => { }, }; + const MULTI_METHOD_REQUESTS = [ + { method: 'get', path: '/multi' }, + { method: 'post', path: '/multi' }, + { method: 'put', path: '/wildcard' }, + ] as const; + createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => { + test('should record the request method for multi-method and wildcard routes.', async () => { + const runner = createRunner().unordered(); + for (const { method, path } of MULTI_METHOD_REQUESTS) { + const httpMethod = method.toUpperCase(); + runner.expect({ + span: container => { + expect(container.items.find(item => item.is_segment)?.name).toBe(`${httpMethod} ${path}`); + + const routerSpans = container.items.filter(item => item.attributes[SENTRY_OP]?.value === ROUTER); + expect(routerSpans).toHaveLength(1); + expect(routerSpans[0]?.name).toBe(path); + expect(routerSpans[0]?.attributes[HTTP_REQUEST_METHOD]).toEqual({ type: 'string', value: httpMethod }); + }, + }); + } + + const started = runner.start(); + for (const { method, path } of MULTI_METHOD_REQUESTS) { + await started.makeRequest(method, path); + } + await started.completed(); + }); + test('should auto-instrument `@hapi/hapi` package.', async () => { const runner = createRunner() .expect({ @@ -72,8 +109,10 @@ describe('hapi auto-instrumentation', () => { expect.objectContaining({ name: 'ext - onPreResponse', attributes: expect.objectContaining({ - 'hapi.type': { type: 'string', value: 'server.ext' }, - 'server.ext.type': { type: 'string', value: 'onPreResponse' }, + [HAPI_TYPE]: { type: 'string', value: 'server.ext' }, + [HAPI_EXT_TYPE]: { type: 'string', value: 'onPreResponse' }, + // oxlint-disable-next-line typescript/no-deprecated + [SERVER_EXT_TYPE]: { type: 'string', value: 'onPreResponse' }, 'sentry.op': { type: 'string', value: 'middleware' }, 'sentry.origin': { type: 'string', value: origin }, }), @@ -114,6 +153,20 @@ describe('hapi auto-instrumentation', () => { await runner.completed(); }); + test('should assign the request method to the transactionName of errors in wildcard routes.', async () => { + const runner = createRunner() + .expect({ + event: { + ...EXPECTED_ERROR_EVENT, + transaction: 'PUT /wildcard-error', + }, + }) + .ignore('span') + .start(); + runner.makeRequest('put', '/wildcard-error', { expectError: true }); + await runner.completed(); + }); + test('should handle returned Boom errors in routes.', async () => { const runner = createRunner() .unordered() @@ -143,6 +196,33 @@ describe('hapi auto-instrumentation', () => { }); }); + // Only static spans put the method into the router span name, which crashed for multi-method routes. + createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument-static.mjs', (createRunner, test) => { + test('should name router spans after the request method for multi-method and wildcard routes.', async () => { + const runner = createRunner().unordered(); + for (const { method, path } of MULTI_METHOD_REQUESTS) { + const httpMethod = method.toUpperCase(); + const spanName = `${httpMethod} ${path}`; + runner.expect({ + transaction: transaction => { + expect(transaction.transaction).toBe(spanName); + + const routerSpans = transaction.spans?.filter(span => span.op === ROUTER) ?? []; + expect(routerSpans).toHaveLength(1); + expect(routerSpans[0]?.description).toBe(spanName); + expect(routerSpans[0]?.data[HTTP_REQUEST_METHOD]).toBe(httpMethod); + }, + }); + } + + const started = runner.start(); + for (const { method, path } of MULTI_METHOD_REQUESTS) { + await started.makeRequest(method, path); + } + await started.completed(); + }); + }); + // Regression test: a `setupHapiErrorHandler` call before `server.start()` installs the default // predicate. The integration's own auto-registration (with a custom `shouldHandleError`) fires later, // at `server.start()`, and must still win. The custom predicate drops "Dropped error" (which the diff --git a/packages/angular/package.json b/packages/angular/package.json index 562a1caf08e7..5409c07d9c72 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -23,7 +23,7 @@ "dependencies": { "@sentry/browser": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/astro/package.json b/packages/astro/package.json index d09e52560f5c..780ef8ff260f 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -53,7 +53,7 @@ "dependencies": { "@sentry/browser": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/node": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", "@sentry/server-utils": "11.9.0", diff --git a/packages/aws-serverless/package.json b/packages/aws-serverless/package.json index 23830a5b878f..033fb1258c31 100644 --- a/packages/aws-serverless/package.json +++ b/packages/aws-serverless/package.json @@ -56,7 +56,7 @@ "access": "public" }, "dependencies": { - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", diff --git a/packages/browser-utils/package.json b/packages/browser-utils/package.json index 0a07b81ac0ac..1273fd0e5305 100644 --- a/packages/browser-utils/package.json +++ b/packages/browser-utils/package.json @@ -34,7 +34,7 @@ }, "dependencies": { "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "web-vitals": "^6.2.3" }, "devDependencies": { diff --git a/packages/browser/package.json b/packages/browser/package.json index 1bc8bcdb2c13..fc788e404af0 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@sentry/browser-utils": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/feedback": "11.9.0", "@sentry/replay": "11.9.0", "@sentry/replay-canvas": "11.9.0", diff --git a/packages/bun/package.json b/packages/bun/package.json index 75aba73712a7..28f3d98b62b5 100644 --- a/packages/bun/package.json +++ b/packages/bun/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/node": "11.9.0", "@sentry/server-utils": "11.9.0" }, diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json index 49eb185bd6da..8abefbbfe8c6 100644 --- a/packages/cloudflare/package.json +++ b/packages/cloudflare/package.json @@ -53,7 +53,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.1", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/opentelemetry": "11.9.0", "@sentry/server-utils": "11.9.0", diff --git a/packages/core/package.json b/packages/core/package.json index 65061a77bae5..6c1b92ca7c37 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -95,6 +95,6 @@ "zod": "^3.24.1" }, "dependencies": { - "@sentry/conventions": "^0.27.0" + "@sentry/conventions": "^0.29.0" } } diff --git a/packages/deno/package.json b/packages/deno/package.json index 270ca28cd70d..51dc5fa7f706 100644 --- a/packages/deno/package.json +++ b/packages/deno/package.json @@ -28,7 +28,7 @@ ], "dependencies": { "@opentelemetry/api": "^1.9.1", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", "@sentry/server-utils": "11.9.0" diff --git a/packages/effect/package.json b/packages/effect/package.json index e39b720820ca..732ea58a2197 100644 --- a/packages/effect/package.json +++ b/packages/effect/package.json @@ -45,7 +45,7 @@ }, "dependencies": { "@sentry/browser": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0" }, diff --git a/packages/elysia/package.json b/packages/elysia/package.json index ac6dda7debbf..b4bef8c55b5f 100644 --- a/packages/elysia/package.json +++ b/packages/elysia/package.json @@ -34,7 +34,7 @@ "dependencies": { "@sentry/bun": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0" + "@sentry/conventions": "^0.29.0" }, "peerDependencies": { "elysia": "^1.4.0" diff --git a/packages/ember/package.json b/packages/ember/package.json index 5ddf731ab1f0..3f1ee98bd614 100644 --- a/packages/ember/package.json +++ b/packages/ember/package.json @@ -45,7 +45,7 @@ "@embroider/addon-shim": "^1.10.2", "@embroider/macros": "^1.20.2", "@sentry/browser": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "decorator-transforms": "^2.3.2" }, diff --git a/packages/google-cloud-serverless/package.json b/packages/google-cloud-serverless/package.json index ac82b82cba84..a6ee05e9a43a 100644 --- a/packages/google-cloud-serverless/package.json +++ b/packages/google-cloud-serverless/package.json @@ -36,7 +36,7 @@ "access": "public" }, "dependencies": { - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", diff --git a/packages/hono/package.json b/packages/hono/package.json index 80db3ccd0369..7ff0d20e315c 100644 --- a/packages/hono/package.json +++ b/packages/hono/package.json @@ -74,7 +74,7 @@ "dependencies": { "@opentelemetry/api": "^1.9.1", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/server-utils": "11.9.0" }, "peerDependencies": { diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index c9d875b26b9b..f8d4dbe9888f 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -44,7 +44,7 @@ "access": "public" }, "dependencies": { - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/server-utils": "11.9.0" diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 36fdd0df09b2..1eb5fc66c040 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -87,7 +87,7 @@ "@sentry/browser-utils": "11.9.0", "@sentry/bundler-plugins": "11.9.0", "@sentry/cloudflare": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/opentelemetry": "11.9.0", diff --git a/packages/nitro/package.json b/packages/nitro/package.json index bb79d0837284..335c3f864067 100644 --- a/packages/nitro/package.json +++ b/packages/nitro/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@sentry/bundler-plugins": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", diff --git a/packages/node/package.json b/packages/node/package.json index 46677e88e13e..d0e8ca29a58c 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -78,7 +78,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.1", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/opentelemetry": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 05555cd282f2..770d513ba8c5 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -56,7 +56,7 @@ "@nuxt/kit": "^4.6.0", "@sentry/browser": "11.9.0", "@sentry/cloudflare": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/bundler-plugins": "11.9.0", diff --git a/packages/opentelemetry/package.json b/packages/opentelemetry/package.json index a67caf18421d..e86737f32a10 100644 --- a/packages/opentelemetry/package.json +++ b/packages/opentelemetry/package.json @@ -27,7 +27,7 @@ "access": "public" }, "dependencies": { - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0" }, "peerDependencies": { diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 93ae07d2dd99..640dff1199e6 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -57,7 +57,7 @@ "dependencies": { "@opentelemetry/api": "^1.9.1", "@sentry/browser": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/react": "11.9.0", diff --git a/packages/react/package.json b/packages/react/package.json index ce565c42d22c..37455d4c5218 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -59,7 +59,7 @@ "dependencies": { "@sentry/browser": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0" + "@sentry/conventions": "^0.29.0" }, "peerDependencies": { "react": "17.x || 18.x || 19.x", diff --git a/packages/remix/package.json b/packages/remix/package.json index 7e51bbee4d0c..e2a4d8e8270a 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -78,7 +78,7 @@ "@remix-run/router": "^1.23.4", "@sentry/browser": "11.9.0", "@sentry/bundler-plugins": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/react": "11.9.0", diff --git a/packages/replay-internal/package.json b/packages/replay-internal/package.json index 3a23f5f892d7..c5e224036ea3 100644 --- a/packages/replay-internal/package.json +++ b/packages/replay-internal/package.json @@ -74,7 +74,7 @@ "@babel/core": "^7.29.6", "@sentry-internal/replay-worker": "11.9.0", "@sentry-internal/rollup-utils": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/rrweb": "2.44.1", "@sentry/rrweb-snapshot": "2.44.1", "fflate": "0.8.3", diff --git a/packages/server-utils/package.json b/packages/server-utils/package.json index 8d4d024e4acb..c4fcc740ec4f 100644 --- a/packages/server-utils/package.json +++ b/packages/server-utils/package.json @@ -97,7 +97,7 @@ }, "dependencies": { "@opentelemetry/api": "^1.9.1", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0" }, "devDependencies": { diff --git a/packages/server-utils/src/integrations/hapi/hapi-error-handler.ts b/packages/server-utils/src/integrations/hapi/hapi-error-handler.ts index d79b35b4502a..b6dbf152fc46 100644 --- a/packages/server-utils/src/integrations/hapi/hapi-error-handler.ts +++ b/packages/server-utils/src/integrations/hapi/hapi-error-handler.ts @@ -73,7 +73,7 @@ export function attachHapiErrorHandler(server: HapiServer, shouldHandleError?: H if (getIsolationScope() !== getDefaultIsolationScope()) { const route = request.route; if (route?.path) { - getIsolationScope().setTransactionName(`${route.method.toUpperCase()} ${route.path}`); + getIsolationScope().setTransactionName(`${request.method.toUpperCase()} ${route.path}`); } } else { DEBUG_BUILD && diff --git a/packages/server-utils/src/integrations/hapi/hapi-types.ts b/packages/server-utils/src/integrations/hapi/hapi-types.ts index 0afb23cc1448..d1ee5f3739b8 100644 --- a/packages/server-utils/src/integrations/hapi/hapi-types.ts +++ b/packages/server-utils/src/integrations/hapi/hapi-types.ts @@ -29,7 +29,7 @@ export interface ServerRouteOptions { export interface ServerRoute { path: string; - method: string; + method: string | string[]; handler?: LifecycleMethod | unknown; options?: ((server: unknown) => ServerRouteOptions) | ServerRouteOptions; [key: string]: unknown; @@ -96,6 +96,7 @@ export interface HapiResponse { /** The subset of a hapi request the error listener reads. */ export interface HapiRequest { + method: string; route: { path?: string; method: string }; response?: HapiResponse; [key: string]: unknown; @@ -122,9 +123,3 @@ export interface HapiServer { events: HapiServerEvents; [key: string]: unknown; } - -export enum AttributeNames { - HAPI_TYPE = 'hapi.type', - PLUGIN_NAME = 'hapi.plugin.name', - EXT_TYPE = 'server.ext.type', -} diff --git a/packages/server-utils/src/integrations/hapi/hapi-utils.ts b/packages/server-utils/src/integrations/hapi/hapi-utils.ts index 5c7afa11a268..e5d8f7cd8279 100644 --- a/packages/server-utils/src/integrations/hapi/hapi-utils.ts +++ b/packages/server-utils/src/integrations/hapi/hapi-utils.ts @@ -18,7 +18,16 @@ import { ROUTER_SPAN_NAME_FALLBACK, startSpan, } from '@sentry/core'; -import { SENTRY_OP, SENTRY_ORIGIN } from '@sentry/conventions/attributes'; +import { + HAPI_EXT_TYPE, + HAPI_PLUGIN_NAME, + HAPI_TYPE, + HTTP_REQUEST_METHOD, + HTTP_ROUTE, + SENTRY_OP, + SENTRY_ORIGIN, + SERVER_EXT_TYPE, +} from '@sentry/conventions/attributes'; import { HANDLER, MIDDLEWARE, ROUTER } from '@sentry/conventions/op'; import type { HapiRequest, @@ -29,11 +38,9 @@ import type { ServerExtEventsObject, ServerExtEventsRequestObject, ServerRequestExtType, - ServerRoute, ServerRouteOptions, } from './hapi-types'; -import { HTTP_REQUEST_METHOD, HTTP_ROUTE } from '@sentry/conventions/attributes'; -import { AttributeNames, handlerPatched, HapiLayerType, HapiLifecycleMethodNames } from './hapi-types'; +import { handlerPatched, HapiLayerType, HapiLifecycleMethodNames } from './hapi-types'; import { setHttpServerSpanRouteAttribute } from '../../utils/setHttpServerSpanRouteAttribute'; /** @@ -108,17 +115,25 @@ const isPatchableExtMethod = ( }; /** Build the span name and attributes for a Hapi route. */ -export const getRouteMetadata = (route: ServerRoute, pluginName?: string): SpanMetadata => { +export const getRouteMetadata = ({ + path, + method, + pluginName, +}: { + path: string; + method?: string; + pluginName?: string; +}): SpanMetadata => { const attributes: SpanAttributes = { - [HTTP_ROUTE]: route.path, - [HTTP_REQUEST_METHOD]: route.method, + [HTTP_ROUTE]: path, + [HTTP_REQUEST_METHOD]: method, }; if (pluginName) { - attributes[AttributeNames.HAPI_TYPE] = HapiLayerType.PLUGIN; - attributes[AttributeNames.PLUGIN_NAME] = pluginName; + attributes[HAPI_TYPE] = HapiLayerType.PLUGIN; + attributes[HAPI_PLUGIN_NAME] = pluginName; } else { - attributes[AttributeNames.HAPI_TYPE] = HapiLayerType.ROUTER; + attributes[HAPI_TYPE] = HapiLayerType.ROUTER; } const client = getClient(); @@ -126,10 +141,11 @@ export const getRouteMetadata = (route: ServerRoute, pluginName?: string): SpanM // handler spans are named after their route alone, without the method prefix. const isStreamedSpan = !!client && hasSpanStreamingEnabled(client); const fallbackName = pluginName ? REQUEST_HANDLER_SPAN_NAME_FALLBACK : ROUTER_SPAN_NAME_FALLBACK; + const staticName = method ? `${method} ${path}` : path; return { attributes, - name: isStreamedSpan ? route.path || fallbackName : `${route.method.toUpperCase()} ${route.path}`, + name: isStreamedSpan ? path || fallbackName : staticName, }; }; @@ -144,23 +160,20 @@ export const getExtMetadata = ( // `method` is the default name for the extension in the ServerExtEventsObject format. baseName = `ext - ${extPoint} - ${methodName}`; } + const attributes: SpanAttributes = { + [HAPI_EXT_TYPE]: extPoint, + // TODO(v12): Remove `server.ext.type`, which `hapi.ext.type` replaces. + // oxlint-disable-next-line typescript/no-deprecated + [SERVER_EXT_TYPE]: extPoint, + [HAPI_TYPE]: HapiLayerType.EXT, + }; if (pluginName) { return { - attributes: { - [AttributeNames.EXT_TYPE]: extPoint, - [AttributeNames.HAPI_TYPE]: HapiLayerType.EXT, - [AttributeNames.PLUGIN_NAME]: pluginName, - }, + attributes: { ...attributes, [HAPI_PLUGIN_NAME]: pluginName }, name: `${pluginName}: ${baseName}`, }; } - return { - attributes: { - [AttributeNames.EXT_TYPE]: extPoint, - [AttributeNames.HAPI_TYPE]: HapiLayerType.EXT, - }, - name: baseName, - }; + return { attributes, name: baseName }; }; const HAPI_TYPE_TO_SPAN_OP: Record = { @@ -170,7 +183,7 @@ const HAPI_TYPE_TO_SPAN_OP: Record = { }; function startMetadataSpan(metadata: SpanMetadata, original: () => unknown): unknown { - const hapiType = metadata.attributes[AttributeNames.HAPI_TYPE]; + const hapiType = metadata.attributes[HAPI_TYPE]; const op = hapiType ? HAPI_TYPE_TO_SPAN_OP[hapiType] : undefined; return startSpan( { @@ -185,6 +198,12 @@ function startMetadataSpan(metadata: SpanMetadata, original: () => unknown): unk ); } +// The route config can register several methods (or `'*'`), so read the method +// Hapi resolved for this request instead. +function getRequestMethod(request: unknown): string | undefined { + return isObjectLike(request) && typeof request.method === 'string' ? request.method.toUpperCase() : undefined; +} + /** * Patches each individual route handler method in order to create the span. It * does not create spans when there is no parent span. @@ -199,7 +218,7 @@ function wrapRouteHandler(route: PatchableServerRoute, pluginName?: string): Pat return oldHandler.call(this, ...params); } setHttpServerSpanRouteAttribute(route.path); - const metadata = getRouteMetadata(route, pluginName); + const metadata = getRouteMetadata({ path: route.path, method: getRequestMethod(params[0]), pluginName }); return startMetadataSpan(metadata, () => oldHandler.call(this, ...params)); }; }; diff --git a/packages/server-utils/test/integrations/hapi-utils.test.ts b/packages/server-utils/test/integrations/hapi-utils.test.ts index a0a7a43971fa..f8a606864a9f 100644 --- a/packages/server-utils/test/integrations/hapi-utils.test.ts +++ b/packages/server-utils/test/integrations/hapi-utils.test.ts @@ -1,10 +1,22 @@ -import { setCurrentClient } from '@sentry/core'; +import { + HAPI_EXT_TYPE, + HAPI_PLUGIN_NAME, + HAPI_TYPE, + HTTP_REQUEST_METHOD, + HTTP_ROUTE, + SENTRY_OP, + SENTRY_ORIGIN, + SERVER_EXT_TYPE, +} from '@sentry/conventions/attributes'; +import { ROUTER } from '@sentry/conventions/op'; +import type { Span } from '@sentry/core'; +import { setCurrentClient, spanToJSON, startSpan } from '@sentry/core'; import { afterEach, describe, expect, it } from 'vitest'; -import { getExtMetadata, getRouteMetadata } from '../../src/integrations/hapi/hapi-utils'; +import { getExtMetadata, getRouteMetadata, wrapRouteArguments } from '../../src/integrations/hapi/hapi-utils'; import { getDefaultTestClientOptions, TestClient } from '../mocks/client'; describe('getRouteMetadata', () => { - const route = { path: '/users/{id}', method: 'get' } as any; + const route = { path: '/users/{id}', method: 'GET' }; afterEach(() => { setCurrentClient(undefined as unknown as TestClient); @@ -14,21 +26,31 @@ describe('getRouteMetadata', () => { expect(getRouteMetadata(route)).toEqual({ name: 'GET /users/{id}', attributes: { - 'http.route': '/users/{id}', - 'http.request.method': 'get', - 'hapi.type': 'router', + [HTTP_ROUTE]: '/users/{id}', + [HTTP_REQUEST_METHOD]: 'GET', + [HAPI_TYPE]: 'router', }, }); }); it('describes a plugin-registered route as a plugin layer', () => { - expect(getRouteMetadata(route, 'my-plugin')).toEqual({ + expect(getRouteMetadata({ ...route, pluginName: 'my-plugin' })).toEqual({ name: 'GET /users/{id}', attributes: { - 'http.route': '/users/{id}', - 'http.request.method': 'get', - 'hapi.type': 'plugin', - 'hapi.plugin.name': 'my-plugin', + [HTTP_ROUTE]: '/users/{id}', + [HTTP_REQUEST_METHOD]: 'GET', + [HAPI_TYPE]: 'plugin', + [HAPI_PLUGIN_NAME]: 'my-plugin', + }, + }); + }); + + it('names the span after the path alone when the request method is unknown', () => { + expect(getRouteMetadata({ path: '/users/{id}' })).toEqual({ + name: '/users/{id}', + attributes: { + [HTTP_ROUTE]: '/users/{id}', + [HAPI_TYPE]: 'router', }, }); }); @@ -44,17 +66,51 @@ describe('getRouteMetadata', () => { const client = new TestClient(getDefaultTestClientOptions({ traceLifecycle: 'stream' })); setCurrentClient(client); - expect(getRouteMetadata(route, 'my-plugin').name).toBe('/users/{id}'); + expect(getRouteMetadata({ ...route, pluginName: 'my-plugin' }).name).toBe('/users/{id}'); }); it('falls back to a static span name when the route has no path', () => { const client = new TestClient(getDefaultTestClientOptions({ traceLifecycle: 'stream' })); setCurrentClient(client); - const pathlessRoute = { path: '', method: 'get' } as any; + expect(getRouteMetadata({ path: '', method: 'GET' }).name).toBe('Router'); + expect(getRouteMetadata({ path: '', method: 'GET', pluginName: 'my-plugin' }).name).toBe('Request handler'); + }); +}); - expect(getRouteMetadata(pathlessRoute).name).toBe('Router'); - expect(getRouteMetadata(pathlessRoute, 'my-plugin').name).toBe('Request handler'); +describe('wrapRouteArguments', () => { + afterEach(() => { + setCurrentClient(undefined as unknown as TestClient); + }); + + it.each([ + { request: { method: 'post' }, name: 'POST /multi', method: 'POST' }, + { request: {}, name: '/multi', method: undefined }, + ])('names the router span $name for a multi-method route', ({ request, name, method }) => { + const client = new TestClient(getDefaultTestClientOptions({ tracesSampleRate: 1 })); + setCurrentClient(client); + client.init(); + const endedSpans: Span[] = []; + client.on('spanEnd', span => endedSpans.push(span)); + const route = { + method: ['GET', 'POST'], + path: '/multi', + handler: (_request: unknown, _h: unknown): unknown => 'ok', + }; + wrapRouteArguments([route]); + + const response = startSpan({ name: 'incoming' }, () => route.handler(request, {})); + + expect(response).toBe('ok'); + const routerSpan = endedSpans.map(span => spanToJSON(span)).find(span => span.attributes[SENTRY_OP] === ROUTER); + expect(routerSpan?.name).toBe(name); + expect(routerSpan?.attributes).toEqual({ + [HTTP_ROUTE]: '/multi', + [HTTP_REQUEST_METHOD]: method, + [HAPI_TYPE]: 'router', + [SENTRY_OP]: ROUTER, + [SENTRY_ORIGIN]: 'auto.http.hapi', + }); }); }); @@ -62,7 +118,12 @@ describe('getExtMetadata', () => { it('names an extension by its point', () => { expect(getExtMetadata('onPreHandler')).toEqual({ name: 'ext - onPreHandler', - attributes: { 'server.ext.type': 'onPreHandler', 'hapi.type': 'server.ext' }, + attributes: { + [HAPI_EXT_TYPE]: 'onPreHandler', + // oxlint-disable-next-line typescript/no-deprecated + [SERVER_EXT_TYPE]: 'onPreHandler', + [HAPI_TYPE]: 'server.ext', + }, }); }); @@ -75,9 +136,11 @@ describe('getExtMetadata', () => { expect(getExtMetadata('onPreHandler', 'my-plugin')).toEqual({ name: 'my-plugin: ext - onPreHandler', attributes: { - 'server.ext.type': 'onPreHandler', - 'hapi.type': 'server.ext', - 'hapi.plugin.name': 'my-plugin', + [HAPI_EXT_TYPE]: 'onPreHandler', + // oxlint-disable-next-line typescript/no-deprecated + [SERVER_EXT_TYPE]: 'onPreHandler', + [HAPI_TYPE]: 'server.ext', + [HAPI_PLUGIN_NAME]: 'my-plugin', }, }); }); diff --git a/packages/solid/package.json b/packages/solid/package.json index 10a3f301ab29..825ce076aa3c 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -56,7 +56,7 @@ "dependencies": { "@sentry/browser": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0" + "@sentry/conventions": "^0.29.0" }, "peerDependencies": { "@solidjs/router": ">=0.13.4 <2.0.0-0", diff --git a/packages/solidstart/package.json b/packages/solidstart/package.json index a472053487d6..595be92402a3 100644 --- a/packages/solidstart/package.json +++ b/packages/solidstart/package.json @@ -87,7 +87,7 @@ "@sentry/server-utils": "11.9.0", "@sentry/solid": "11.9.0", "@sentry/bundler-plugins": "11.9.0", - "@sentry/conventions": "0.27.0" + "@sentry/conventions": "0.29.0" }, "devDependencies": { "@sentry-internal/rollup-utils": "11.9.0", diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 5582a5c254df..f2c7c4b0451f 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@sentry/browser": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "magic-string": "~0.30.0" }, diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json index 110f75715a1d..6396e9bcf2a7 100644 --- a/packages/sveltekit/package.json +++ b/packages/sveltekit/package.json @@ -73,7 +73,7 @@ "@opentelemetry/api": "^1.9.1", "@sentry/cloudflare": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/node": "11.9.0", "@sentry/server-runtime-injection": "11.9.0", "@sentry/server-utils": "11.9.0", diff --git a/packages/tanstackstart-react/package.json b/packages/tanstackstart-react/package.json index 6edd650c665c..13d211f6fff8 100644 --- a/packages/tanstackstart-react/package.json +++ b/packages/tanstackstart-react/package.json @@ -53,7 +53,7 @@ "dependencies": { "@opentelemetry/api": "^1.9.1", "@sentry/browser-utils": "11.9.0", - "@sentry/conventions": "^0.27.0", + "@sentry/conventions": "^0.29.0", "@sentry/core": "11.9.0", "@sentry/node": "11.9.0", "@sentry/react": "11.9.0", diff --git a/packages/vue/package.json b/packages/vue/package.json index f4536ada9786..84ba6bedd7d8 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -46,7 +46,7 @@ "dependencies": { "@sentry/browser": "11.9.0", "@sentry/core": "11.9.0", - "@sentry/conventions": "^0.27.0" + "@sentry/conventions": "^0.29.0" }, "peerDependencies": { "@tanstack/vue-router": "^1.64.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 842e0d81fae7..16f41a164478 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -298,8 +298,8 @@ importers: specifier: 11.9.0 version: link:../../packages/browser '@sentry/conventions': - specifier: 0.27.0 - version: 0.27.0 + specifier: 0.29.0 + version: 0.29.0 '@sentry/opentelemetry': specifier: 11.9.0 version: link:../../packages/opentelemetry @@ -510,8 +510,8 @@ importers: specifier: 11.9.0 version: link:../test-utils '@sentry/conventions': - specifier: 0.27.0 - version: 0.27.0 + specifier: 0.29.0 + version: 0.29.0 eslint-plugin-regexp: specifier: ^3.1.0 version: 3.1.0 @@ -547,8 +547,8 @@ importers: specifier: 11.9.0 version: link:../node-integration-tests '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 vitest: specifier: ^4.1.11 version: 4.1.11(@opentelemetry/api@1.10.0)(@types/node@20.19.43)(@vitest/coverage-v8@4.1.11)(esbuild@0.28.1)(jiti@2.7.0)(jsdom@21.1.2(supports-color@10.0.0))(less@4.2.0(supports-color@10.0.0))(sass@1.72.0)(stylus@0.59.0(supports-color@10.0.0))(terser@5.43.1)(tsx@4.23.0)(yaml@2.9.0) @@ -852,8 +852,8 @@ importers: specifier: 11.9.0 version: link:../test-utils '@sentry/conventions': - specifier: 0.27.0 - version: 0.27.0 + specifier: 0.29.0 + version: 0.29.0 '@sentry/node-native': specifier: 11.9.0 version: link:../../packages/node-native @@ -974,8 +974,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1035,8 +1035,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1063,8 +1063,8 @@ importers: packages/aws-serverless: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1097,8 +1097,8 @@ importers: specifier: 11.9.0 version: link:../browser-utils '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1125,8 +1125,8 @@ importers: packages/browser-utils: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1141,8 +1141,8 @@ importers: packages/bun: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1224,8 +1224,8 @@ importers: specifier: ^1.9.1 version: 1.10.0 '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1261,8 +1261,8 @@ importers: packages/core: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 devDependencies: '@sentry-internal/rollup-utils': specifier: 11.9.0 @@ -1277,8 +1277,8 @@ importers: specifier: ^1.9.1 version: 1.10.0 '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1299,8 +1299,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1324,8 +1324,8 @@ importers: specifier: 11.9.0 version: link:../bun '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1352,8 +1352,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1501,8 +1501,8 @@ importers: packages/google-cloud-serverless: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1541,8 +1541,8 @@ importers: specifier: ^1.9.1 version: 1.10.0 '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1591,8 +1591,8 @@ importers: packages/nestjs: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1637,8 +1637,8 @@ importers: specifier: 11.9.0 version: link:../cloudflare '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1689,8 +1689,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1729,8 +1729,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1785,8 +1785,8 @@ importers: specifier: 11.9.0 version: link:../cloudflare '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1846,8 +1846,8 @@ importers: packages/opentelemetry: dependencies: '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1884,8 +1884,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -1960,8 +1960,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2024,8 +2024,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2120,8 +2120,8 @@ importers: specifier: 11.9.0 version: link:../../dev-packages/rollup-utils '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/rrweb': specifier: 2.44.1 version: 2.44.1 @@ -2191,8 +2191,8 @@ importers: specifier: ^1.9.1 version: 1.10.0 '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2225,8 +2225,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2268,8 +2268,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: 0.27.0 - version: 0.27.0 + specifier: 0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2335,8 +2335,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2372,8 +2372,8 @@ importers: specifier: 11.9.0 version: link:../cloudflare '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2436,8 +2436,8 @@ importers: specifier: 11.9.0 version: link:../bundler-plugins '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -2504,8 +2504,8 @@ importers: specifier: 11.9.0 version: link:../browser '@sentry/conventions': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.29.0 + version: 0.29.0 '@sentry/core': specifier: 11.9.0 version: link:../core @@ -8166,8 +8166,8 @@ packages: resolution: {integrity: sha512-MLxTpTU3E8QACQ/5c0sENMR2gRiMXpGaKeD5IHY+3wyU2fUSJVB0QPU/l1WhoyZbX8N9ospBgf5UEG7taVF9rg==} engines: {node: ^14.15.0 || >=16.10.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@sentry/conventions@0.27.0': - resolution: {integrity: sha512-Mrqd/o7n/z7qWSYfQQA7x4fFTA0IqOG6JNsbBpnC97khPwZk7n6DPtOO7YgaYplSl8R8QLRbBz9Xv2lVhToSAg==} + '@sentry/conventions@0.29.0': + resolution: {integrity: sha512-kYq9/HJ/l6MYP/srIc20dy1W4mWyJfCF0OWFF+RhBGZwyr/wCmtabRFKyw7kqM+DTwZXQOjSTSZUcJhDowcInQ==} engines: {node: '>=14'} '@sentry/node-cpu-profiler@2.4.4': @@ -26151,7 +26151,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@sentry/conventions@0.27.0': {} + '@sentry/conventions@0.29.0': {} '@sentry/node-cpu-profiler@2.4.4': dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 19563e5cb4a2..3359607240fb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -116,3 +116,4 @@ allowBuilds: workerd: true minimumReleaseAgeExclude: - '@opentelemetry/api@1.10.0' + - '@sentry/conventions@0.29.0'