From 0a6bcecbd4e86a16ab21810e6d73d9b9f9b06987 Mon Sep 17 00:00:00 2001 From: JPeer264 Date: Fri, 31 Jul 2026 09:55:33 +0200 Subject: [PATCH] feat(cloudflare)!: Make the nodejs_compat entrypoint the default --- .../suites/prisma/index.ts | 2 +- .../suites/prisma/test.ts | 2 +- .../tracing/vercelai/als_v6/wrangler.jsonc | 6 -- .../tracing/vercelai/compat_v6/index.ts | 39 ----------- .../suites/tracing/vercelai/compat_v6/test.ts | 65 ------------------- .../tracing/vercelai/{als_v6 => v6}/index.ts | 0 .../tracing/vercelai/{als_v6 => v6}/test.ts | 0 .../vercelai/{compat_v6 => v6}/wrangler.jsonc | 0 .../cloudflare-vercelai-v7-als/package.json | 36 ---------- .../cloudflare-vercelai-v7-als/src/index.ts | 43 ------------ .../start-event-proxy.mjs | 6 -- .../tests/index.test.ts | 33 ---------- .../cloudflare-vercelai-v7-als/wrangler.toml | 5 -- .../playwright.config.ts | 21 ------ .../src/env.d.ts | 3 - .../tsconfig.json | 20 ------ .../package.json | 0 .../playwright.config.ts | 0 .../src/env.d.ts | 0 .../src/index.ts | 2 +- .../start-event-proxy.mjs | 0 .../tests/index.test.ts | 0 .../tsconfig.json | 0 .../wrangler.toml | 0 packages/cloudflare/package.json | 5 -- packages/cloudflare/rollup.npm.config.mjs | 2 +- packages/cloudflare/src/index.ts | 1 + .../src/integrations/tracing/vercelai.ts | 25 ++----- .../cloudflare/src/nodejs_compat/index.ts | 3 - .../integrations/tracing/vercelai.ts | 49 -------------- 30 files changed, 11 insertions(+), 357 deletions(-) delete mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/wrangler.jsonc delete mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/index.ts delete mode 100644 dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/test.ts rename dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/{als_v6 => v6}/index.ts (100%) rename dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/{als_v6 => v6}/test.ts (100%) rename dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/{compat_v6 => v6}/wrangler.jsonc (100%) delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/package.json delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/index.ts delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/start-event-proxy.mjs delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tests/index.test.ts delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/wrangler.toml delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/playwright.config.ts delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/env.d.ts delete mode 100644 dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tsconfig.json rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-compat => cloudflare-vercelai-v7}/package.json (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-als => cloudflare-vercelai-v7}/playwright.config.ts (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-als => cloudflare-vercelai-v7}/src/env.d.ts (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-compat => cloudflare-vercelai-v7}/src/index.ts (95%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-compat => cloudflare-vercelai-v7}/start-event-proxy.mjs (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-compat => cloudflare-vercelai-v7}/tests/index.test.ts (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-als => cloudflare-vercelai-v7}/tsconfig.json (100%) rename dev-packages/e2e-tests/test-applications/{cloudflare-vercelai-v7-compat => cloudflare-vercelai-v7}/wrangler.toml (100%) delete mode 100644 packages/cloudflare/src/nodejs_compat/index.ts delete mode 100644 packages/cloudflare/src/nodejs_compat/integrations/tracing/vercelai.ts diff --git a/dev-packages/cloudflare-integration-tests/suites/prisma/index.ts b/dev-packages/cloudflare-integration-tests/suites/prisma/index.ts index 631e2cea18b2..64663e9e1838 100644 --- a/dev-packages/cloudflare-integration-tests/suites/prisma/index.ts +++ b/dev-packages/cloudflare-integration-tests/suites/prisma/index.ts @@ -1,6 +1,6 @@ import type { D1Database } from '@cloudflare/workers-types'; import { PrismaD1 } from '@prisma/adapter-d1'; -import * as Sentry from '@sentry/cloudflare/nodejs_compat'; +import * as Sentry from '@sentry/cloudflare'; import { PrismaClient } from './generated'; interface Env { diff --git a/dev-packages/cloudflare-integration-tests/suites/prisma/test.ts b/dev-packages/cloudflare-integration-tests/suites/prisma/test.ts index 2a4c259b4058..ad1e986843b1 100644 --- a/dev-packages/cloudflare-integration-tests/suites/prisma/test.ts +++ b/dev-packages/cloudflare-integration-tests/suites/prisma/test.ts @@ -18,7 +18,7 @@ function envelopeItem(envelope: Envelope): Record { return envelope[1][0]![1] as Record; } -it('captures a transaction with Prisma spans for a D1 query via the @sentry/cloudflare/nodejs_compat prismaIntegration', async ({ +it('captures a transaction with Prisma spans for a D1 query via the @sentry/cloudflare prismaIntegration', async ({ signal, }) => { const runner = createRunner(__dirname) diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/wrangler.jsonc b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/wrangler.jsonc deleted file mode 100644 index 5a451fde4ab6..000000000000 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/wrangler.jsonc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "vercelai-v6-worker", - "compatibility_date": "2026-04-26", - "main": "index.ts", - "compatibility_flags": ["nodejs_als"], -} diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/index.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/index.ts deleted file mode 100644 index 09ccb1f9ce66..000000000000 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import * as Sentry from '@sentry/cloudflare/nodejs_compat'; -import { generateText } from 'ai'; -import { MockLanguageModelV3 } from 'ai/test'; - -interface Env { - SENTRY_DSN: string; -} - -export default Sentry.withSentry( - (env: Env) => ({ - dsn: env.SENTRY_DSN, - traceLifecycle: 'static', - tracesSampleRate: 1, - integrations: [Sentry.vercelAIIntegration()], - }), - { - async fetch(_request, _env, _ctx) { - await generateText({ - experimental_telemetry: { isEnabled: true }, - model: new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: { unified: 'stop', raw: 'stop' }, - usage: { - inputTokens: { total: 10, noCache: 10, cached: 0 }, - outputTokens: { total: 20, noCache: 20, cached: 0 }, - totalTokens: { total: 30, noCache: 30, cached: 0 }, - }, - content: [{ type: 'text', text: 'Hello from mock AI!' }], - warnings: [], - }), - // The mock result shape differs from this `ai` version's LanguageModelV3 result type; cast to the mock's expected config. - } as unknown as ConstructorParameters[0]), - prompt: 'Where is the first span?', - }); - - return new Response('ok'); - }, - }, -); diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/test.ts deleted file mode 100644 index 1f961f202119..000000000000 --- a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/test.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { expect, it } from 'vitest'; -import { - GEN_AI_OPERATION_NAME, - GEN_AI_USAGE_INPUT_TOKENS, - GEN_AI_USAGE_OUTPUT_TOKENS, - GEN_AI_USAGE_TOTAL_TOKENS, -} from '@sentry/conventions/attributes'; -import { createRunner } from '../../../../runner'; - -it('captures a transaction with Vercel AI v6 spans via @sentry/cloudflare/nodejs_compat vercelAIIntegration', async ({ - signal, -}) => { - const runner = createRunner(__dirname) - .ignore('event') - .expect(envelope => { - const transactionEvent = envelope[1]?.[0]?.[1] as any; - expect(transactionEvent.transaction).toBe('GET /'); - - const container = envelope[1]?.[1]?.[1] as any; - expect(container).toBeDefined(); - - expect(container.items).toHaveLength(2); - expect(container.items).toEqual( - expect.arrayContaining([ - { - trace_id: expect.any(String), - span_id: expect.any(String), - parent_span_id: expect.any(String), - name: 'invoke_agent', - start_timestamp: expect.any(Number), - end_timestamp: expect.any(Number), - status: 'ok', - is_segment: false, - attributes: expect.objectContaining({ - 'sentry.op': { type: 'string', value: 'gen_ai.invoke_agent' }, - 'sentry.origin': { type: 'string', value: 'auto.vercelai.otel' }, - [GEN_AI_OPERATION_NAME]: { type: 'string', value: 'invoke_agent' }, - [GEN_AI_USAGE_INPUT_TOKENS]: { type: 'integer', value: 10 }, - [GEN_AI_USAGE_OUTPUT_TOKENS]: { type: 'integer', value: 20 }, - [GEN_AI_USAGE_TOTAL_TOKENS]: { type: 'integer', value: 30 }, - }), - }, - { - trace_id: expect.any(String), - span_id: expect.any(String), - parent_span_id: expect.any(String), - name: 'generate_content mock-model-id', - start_timestamp: expect.any(Number), - end_timestamp: expect.any(Number), - status: 'ok', - is_segment: false, - attributes: expect.objectContaining({ - 'sentry.op': { type: 'string', value: 'gen_ai.generate_content' }, - 'sentry.origin': { type: 'string', value: 'auto.vercelai.otel' }, - [GEN_AI_OPERATION_NAME]: { type: 'string', value: 'generate_content' }, - }), - }, - ]), - ); - }) - .start(signal); - - await runner.makeRequest('get', '/'); - await runner.completed(); -}); diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/index.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/index.ts similarity index 100% rename from dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/index.ts rename to dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/index.ts diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/test.ts b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/test.ts similarity index 100% rename from dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/als_v6/test.ts rename to dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/test.ts diff --git a/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/wrangler.jsonc b/dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/wrangler.jsonc similarity index 100% rename from dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/compat_v6/wrangler.jsonc rename to dev-packages/cloudflare-integration-tests/suites/tracing/vercelai/v6/wrangler.jsonc diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/package.json b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/package.json deleted file mode 100644 index f2757ef2b0f4..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "cloudflare-vercelai-v7-als", - "version": "0.0.0", - "private": true, - "scripts": { - "deploy": "wrangler deploy", - "dev": "wrangler dev --var \"E2E_TEST_DSN:$E2E_TEST_DSN\" --log-level=$(test $CI && echo 'none' || echo 'log')", - "build": "wrangler deploy --dry-run", - "typecheck": "tsc --noEmit", - "test:build": "pnpm install && pnpm build", - "test:assert": "pnpm test:prod", - "test:prod": "TEST_ENV=production playwright test", - "test:dev": "TEST_ENV=development playwright test" - }, - "dependencies": { - "@sentry/cloudflare": "file:../../packed/sentry-cloudflare-packed.tgz", - "ai": "^7.0.0" - }, - "devDependencies": { - "@playwright/test": "~1.56.0", - "@cloudflare/workers-types": "^4.20240725.0", - "@sentry-internal/test-utils": "link:../../../test-utils", - "typescript": "^5.5.2", - "wrangler": "^4.61.0", - "ws": "^8.18.3" - }, - "volta": { - "node": "24.15.0", - "extends": "../../package.json" - }, - "pnpm": { - "overrides": { - "strip-literal": "~2.0.0" - } - } -} diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/index.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/index.ts deleted file mode 100644 index aa4d046da5b3..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import * as Sentry from '@sentry/cloudflare'; -import { generateText } from 'ai'; -import { MockLanguageModelV3 } from 'ai/test'; - -export default Sentry.withSentry( - (env: Env) => ({ - traceLifecycle: 'static', - dsn: env.E2E_TEST_DSN, - environment: 'qa', - tunnel: 'http://localhost:3031/', - tracesSampleRate: 1.0, - dataCollection: { genAI: { inputs: false, outputs: false } }, - integrations: [Sentry.vercelAIIntegration()], - }), - { - async fetch(request, _env, _ctx) { - const url = new URL(request.url); - - if (url.pathname === '/generate') { - await generateText({ - experimental_telemetry: { isEnabled: true }, - model: new MockLanguageModelV3({ - doGenerate: async () => ({ - finishReason: { unified: 'stop', raw: 'stop' }, - usage: { - inputTokens: { total: 10, noCache: 10, cached: 0 }, - outputTokens: { total: 20, noCache: 20, cached: 0 }, - totalTokens: { total: 30, noCache: 30, cached: 0 }, - }, - content: [{ type: 'text', text: 'Hello from mock AI!' }], - warnings: [], - }), - }), - prompt: 'Where is the first span?', - }); - - return new Response('ok'); - } - - return new Response('Not found', { status: 404 }); - }, - } satisfies ExportedHandler, -); diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/start-event-proxy.mjs b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/start-event-proxy.mjs deleted file mode 100644 index 69fc4ec92ccf..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/start-event-proxy.mjs +++ /dev/null @@ -1,6 +0,0 @@ -import { startEventProxyServer } from '@sentry-internal/test-utils'; - -startEventProxyServer({ - port: 3031, - proxyServerName: 'cloudflare-vercelai-v7-als', -}); diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tests/index.test.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tests/index.test.ts deleted file mode 100644 index 078452236a44..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tests/index.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { expect, test } from '@playwright/test'; -import { getSpanOp, waitForRequest } from '@sentry-internal/test-utils'; - -test('does not capture Vercel AI v7 spans without nodejs_compat', async ({ baseURL }) => { - // The transaction envelope also carries any extracted gen_ai spans as a span v2 container item, - // so we wait for the whole envelope and assert neither place contains AI spans. - const envelopePromise = waitForRequest('cloudflare-vercelai-v7-als', ({ envelope }) => { - const transactionItem = envelope[1].find(([header]) => header.type === 'transaction'); - return (transactionItem?.[1] as any)?.transaction === 'GET /generate'; - }); - - const response = await fetch(`${baseURL}/generate`); - expect(response.status).toBe(200); - - const { envelope } = await envelopePromise; - - const transaction = envelope[1].find(([header]) => header.type === 'transaction')?.[1] as any; - expect(transaction.transaction).toBe('GET /generate'); - expect(transaction.contexts?.trace?.op).toBe('http.server'); - - // v7 uses diagnostics_channel which is not available with nodejs_als, so no AI spans should be - // present — neither embedded in the transaction nor streamed as a span v2 container item. - const embeddedAiSpans = (transaction.spans || []).filter( - (span: any) => span.op?.startsWith('gen_ai.') || span.description?.includes('generateText'), - ); - expect(embeddedAiSpans).toHaveLength(0); - - const streamedGenAiSpans = envelope[1] - .filter(([header]) => header.type === 'span') - .flatMap(([, payload]) => (payload as any).items ?? []) - .filter((span: any) => getSpanOp(span)?.startsWith('gen_ai.')); - expect(streamedGenAiSpans).toHaveLength(0); -}); diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/wrangler.toml b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/wrangler.toml deleted file mode 100644 index b475fa2af079..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/wrangler.toml +++ /dev/null @@ -1,5 +0,0 @@ -#:schema node_modules/wrangler/config-schema.json -name = "cloudflare-vercelai-v7-als" -main = "src/index.ts" -compatibility_date = "2026-04-26" -compatibility_flags = ["nodejs_compat"] diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/playwright.config.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/playwright.config.ts deleted file mode 100644 index 59a70bd39838..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/playwright.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { getPlaywrightConfig } from '@sentry-internal/test-utils'; -const testEnv = process.env.TEST_ENV; - -if (!testEnv) { - throw new Error('No test env defined'); -} - -const APP_PORT = 38787; - -const config = getPlaywrightConfig( - { - startCommand: `pnpm dev --port ${APP_PORT}`, - port: APP_PORT, - }, - { - workers: '100%', - retries: 0, - }, -); - -export default config; diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/env.d.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/env.d.ts deleted file mode 100644 index 7c5617be39aa..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/env.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface Env { - E2E_TEST_DSN: ''; -} diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tsconfig.json b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tsconfig.json deleted file mode 100644 index 28ac6a1d29b1..000000000000 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "es2021", - "lib": ["es2021"], - "module": "es2022", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "allowJs": true, - "checkJs": false, - "noEmit": true, - "isolatedModules": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "types": ["@cloudflare/workers-types/experimental"] - }, - "exclude": ["test"], - "include": ["src/**/*.ts"] -} diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/package.json b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/package.json similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/package.json rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/package.json diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/playwright.config.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/playwright.config.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/playwright.config.ts rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/playwright.config.ts diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/env.d.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/src/env.d.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/src/env.d.ts rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/src/env.d.ts diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/index.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/src/index.ts similarity index 95% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/index.ts rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/src/index.ts index daae29d1dd53..deaf2d06f33c 100644 --- a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/src/index.ts +++ b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/src/index.ts @@ -1,4 +1,4 @@ -import * as Sentry from '@sentry/cloudflare/nodejs_compat'; +import * as Sentry from '@sentry/cloudflare'; import { generateText } from 'ai'; import { MockLanguageModelV3 } from 'ai/test'; diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/start-event-proxy.mjs b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/start-event-proxy.mjs similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/start-event-proxy.mjs rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/start-event-proxy.mjs diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tests/index.test.ts b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/tests/index.test.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/tests/index.test.ts rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/tests/index.test.ts diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tsconfig.json b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/tsconfig.json similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-als/tsconfig.json rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/tsconfig.json diff --git a/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/wrangler.toml b/dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/wrangler.toml similarity index 100% rename from dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7-compat/wrangler.toml rename to dev-packages/e2e-tests/test-applications/cloudflare-vercelai-v7/wrangler.toml diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json index 0b0f8c60f224..78676502c59a 100644 --- a/packages/cloudflare/package.json +++ b/packages/cloudflare/package.json @@ -37,11 +37,6 @@ "import": "./build/esm/prod/request.js", "require": "./build/cjs/prod/request.js" }, - "./nodejs_compat": { - "types": "./build/types/nodejs_compat/index.d.ts", - "import": "./build/esm/prod/nodejs_compat/index.js", - "require": "./build/cjs/prod/nodejs_compat/index.js" - }, "./vite": { "types": "./build/types/vite/index.d.ts", "import": "./build/esm/prod/vite/index.js", diff --git a/packages/cloudflare/rollup.npm.config.mjs b/packages/cloudflare/rollup.npm.config.mjs index 839ccaa4c8db..7f59f686e7c6 100644 --- a/packages/cloudflare/rollup.npm.config.mjs +++ b/packages/cloudflare/rollup.npm.config.mjs @@ -2,7 +2,7 @@ import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollu export default makeNPMConfigVariants( makeBaseNPMConfig({ - entrypoints: ['src/index.ts', 'src/nodejs_compat/index.ts', 'src/vite/index.ts'], + entrypoints: ['src/index.ts', 'src/vite/index.ts'], }), { splitDevProd: true }, ); diff --git a/packages/cloudflare/src/index.ts b/packages/cloudflare/src/index.ts index de232a39751e..5b0f23506428 100644 --- a/packages/cloudflare/src/index.ts +++ b/packages/cloudflare/src/index.ts @@ -128,6 +128,7 @@ export { httpServerIntegration } from './integrations/httpServer'; export { fetchIntegration } from './integrations/fetch'; export { spotlightIntegration } from './integrations/spotlight'; export { vercelAIIntegration } from './integrations/tracing/vercelai'; +export { prismaIntegration } from '@sentry/server-utils'; // eslint-disable-next-line typescript/no-deprecated export { instrumentD1WithSentry } from './instrumentations/worker/instrumentD1'; diff --git a/packages/cloudflare/src/integrations/tracing/vercelai.ts b/packages/cloudflare/src/integrations/tracing/vercelai.ts index 9d28d41d5bb0..242d476c342f 100644 --- a/packages/cloudflare/src/integrations/tracing/vercelai.ts +++ b/packages/cloudflare/src/integrations/tracing/vercelai.ts @@ -9,31 +9,18 @@ */ import type { IntegrationFn } from '@sentry/core'; -import { addVercelAiProcessors, defineIntegration } from '@sentry/core'; - -const INTEGRATION_NAME = 'VercelAI'; - -interface VercelAiOptions { - /** - * Enable or disable truncation of recorded input messages. - * Defaults to `true`. - */ - enableTruncation?: boolean; - - // `recordInputs`/`recordOutputs` are intentionally omitted: this entrypoint only post-processes - // spans the AI SDK already emitted, so it cannot decide whether inputs/outputs are recorded. - // Control this per call via `experimental_telemetry.recordInputs`/`recordOutputs`, or use the - // `@sentry/cloudflare/nodejs_compat` entrypoint for integration-level control on ai >= 7. -} +import { addVercelAiProcessors, defineIntegration, extendIntegration } from '@sentry/core'; +import { vercelAiIntegration, type VercelAiOptions } from '@sentry/server-utils'; const _vercelAIIntegration = ((options: VercelAiOptions = {}) => { - return { - name: INTEGRATION_NAME, + const inner = vercelAiIntegration(options); + + return extendIntegration(inner, { options, setup(client) { addVercelAiProcessors(client); }, - }; + }); }) satisfies IntegrationFn; /** diff --git a/packages/cloudflare/src/nodejs_compat/index.ts b/packages/cloudflare/src/nodejs_compat/index.ts deleted file mode 100644 index 3c259e10e7e9..000000000000 --- a/packages/cloudflare/src/nodejs_compat/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from '../index'; -export { prismaIntegration } from '@sentry/server-utils'; -export { vercelAIIntegration } from './integrations/tracing/vercelai'; diff --git a/packages/cloudflare/src/nodejs_compat/integrations/tracing/vercelai.ts b/packages/cloudflare/src/nodejs_compat/integrations/tracing/vercelai.ts deleted file mode 100644 index e808b3c04443..000000000000 --- a/packages/cloudflare/src/nodejs_compat/integrations/tracing/vercelai.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * This is a copy of the Vercel AI integration from the Cloudflare SDK (src/integrations/tracing/vercelai.ts). - * - * The only difference is that it includes tracing channel support - * because the default Vercel AI integration needs `nodejs_als`, while this one uses `nodejs_compat`. - */ - -import type { IntegrationFn } from '@sentry/core'; -import { defineIntegration } from '@sentry/core'; -import { vercelAiIntegration as serverUtilsVercelAiIntegration, type VercelAiOptions } from '@sentry/server-utils'; -import { vercelAIIntegration as cloudflareVercelAIIntegration } from '../../../integrations/tracing/vercelai'; - -const _vercelAIIntegration = ((options: VercelAiOptions = {}) => { - const inner = serverUtilsVercelAiIntegration(options); - const instrumentation = cloudflareVercelAIIntegration(options); - - return { - ...inner, - ...instrumentation, - }; -}) satisfies IntegrationFn; - -/** - * Adds Sentry tracing instrumentation for the [ai](https://www.npmjs.com/package/ai) library. - * This integration is not enabled by default, you need to manually add it. - * - * For more information, see the [`ai` documentation](https://sdk.vercel.ai/docs/ai-sdk-core/telemetry). - * - * You need to enable collecting spans for a specific call by setting - * `experimental_telemetry.isEnabled` to `true` in the first argument of the function call. - * - * ```javascript - * const result = await generateText({ - * model: openai('gpt-4-turbo'), - * experimental_telemetry: { isEnabled: true }, - * }); - * ``` - * - * If you want to collect inputs and outputs for a specific call, you must specifically opt-in to each - * function call by setting `experimental_telemetry.recordInputs` and `experimental_telemetry.recordOutputs` - * to `true`. - * - * ```javascript - * const result = await generateText({ - * model: openai('gpt-4-turbo'), - * experimental_telemetry: { isEnabled: true, recordInputs: true, recordOutputs: true }, - * }); - */ -export const vercelAIIntegration = defineIntegration(_vercelAIIntegration);