diff --git a/.craft.yml b/.craft.yml index 66fc8fca329c..2ee55c49d35d 100644 --- a/.craft.yml +++ b/.craft.yml @@ -97,6 +97,9 @@ targets: - name: npm id: '@sentry/bun' includeNames: /^sentry-bun-\d.*\.tgz$/ + - name: npm + id: '@sentry/nestjs' + includeNames: /^sentry-nestjs-\d.*\.tgz$/ ## 6. Fullstack/Meta Frameworks (depending on Node and Browser or Framework SDKs) - name: npm diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c8505ab3a022..445c57284056 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1067,7 +1067,7 @@ jobs: 'generic-ts3.8', 'node-fastify', 'node-hapi', - 'node-nestjs', + 'nestjs', 'node-exports-test-app', 'node-koa', 'node-connect', diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/.gitignore b/dev-packages/e2e-tests/test-applications/nestjs/.gitignore similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/.gitignore rename to dev-packages/e2e-tests/test-applications/nestjs/.gitignore diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/.npmrc b/dev-packages/e2e-tests/test-applications/nestjs/.npmrc similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/.npmrc rename to dev-packages/e2e-tests/test-applications/nestjs/.npmrc diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/nest-cli.json b/dev-packages/e2e-tests/test-applications/nestjs/nest-cli.json similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/nest-cli.json rename to dev-packages/e2e-tests/test-applications/nestjs/nest-cli.json diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/package.json b/dev-packages/e2e-tests/test-applications/nestjs/package.json similarity index 95% rename from dev-packages/e2e-tests/test-applications/node-nestjs/package.json rename to dev-packages/e2e-tests/test-applications/nestjs/package.json index c21b312d1c13..6ad2576fc3cc 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/package.json +++ b/dev-packages/e2e-tests/test-applications/nestjs/package.json @@ -1,5 +1,5 @@ { - "name": "node-nestjs", + "name": "nestjs", "version": "0.0.1", "private": true, "scripts": { @@ -18,7 +18,7 @@ "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", - "@sentry/node": "latest || *", + "@sentry/nestjs": "latest || *", "@sentry/types": "latest || *", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1" diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/playwright.config.mjs b/dev-packages/e2e-tests/test-applications/nestjs/playwright.config.mjs similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/playwright.config.mjs rename to dev-packages/e2e-tests/test-applications/nestjs/playwright.config.mjs diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/app.controller.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/app.controller.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/app.controller.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/app.controller.ts diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/app.module.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/app.module.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/app.module.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/app.module.ts diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/app.service.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/app.service.ts similarity index 97% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/app.service.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/app.service.ts index 79b01f26f51c..01a96549546b 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/src/app.service.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/src/app.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@nestjs/common'; -import * as Sentry from '@sentry/node'; +import * as Sentry from '@sentry/nestjs'; import { makeHttpRequest } from './utils'; @Injectable() diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/instrument.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/instrument.ts similarity index 86% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/instrument.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/instrument.ts index 09376810454f..b5ca047e497c 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/src/instrument.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/src/instrument.ts @@ -1,4 +1,4 @@ -import * as Sentry from '@sentry/node'; +import * as Sentry from '@sentry/nestjs'; Sentry.init({ environment: 'qa', // dynamic sampling bias to keep transactions diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/main.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/main.ts similarity index 93% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/main.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/main.ts index 39bfec94b507..c2682662154d 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/src/main.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/src/main.ts @@ -3,7 +3,7 @@ import './instrument'; // Import other modules import { BaseExceptionFilter, HttpAdapterHost, NestFactory } from '@nestjs/core'; -import * as Sentry from '@sentry/node'; +import * as Sentry from '@sentry/nestjs'; import { AppModule1, AppModule2 } from './app.module'; const app1Port = 3030; diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/src/utils.ts b/dev-packages/e2e-tests/test-applications/nestjs/src/utils.ts similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/src/utils.ts rename to dev-packages/e2e-tests/test-applications/nestjs/src/utils.ts diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/start-event-proxy.mjs b/dev-packages/e2e-tests/test-applications/nestjs/start-event-proxy.mjs similarity index 76% rename from dev-packages/e2e-tests/test-applications/node-nestjs/start-event-proxy.mjs rename to dev-packages/e2e-tests/test-applications/nestjs/start-event-proxy.mjs index 3714932358a5..e9917b9273da 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/start-event-proxy.mjs +++ b/dev-packages/e2e-tests/test-applications/nestjs/start-event-proxy.mjs @@ -2,5 +2,5 @@ import { startEventProxyServer } from '@sentry-internal/test-utils'; startEventProxyServer({ port: 3031, - proxyServerName: 'node-nestjs', + proxyServerName: 'nestjs', }); diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/nestjs/tests/errors.test.ts similarity index 93% rename from dev-packages/e2e-tests/test-applications/node-nestjs/tests/errors.test.ts rename to dev-packages/e2e-tests/test-applications/nestjs/tests/errors.test.ts index 40ed8e49718a..aa46f77815d4 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/errors.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/tests/errors.test.ts @@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test'; import { waitForError } from '@sentry-internal/test-utils'; test('Sends exception to Sentry', async ({ baseURL }) => { - const errorEventPromise = waitForError('node-nestjs', event => { + const errorEventPromise = waitForError('nestjs', event => { return !event.type && event.exception?.values?.[0]?.value === 'This is an exception with id 123'; }); diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/propagation.test.ts b/dev-packages/e2e-tests/test-applications/nestjs/tests/propagation.test.ts similarity index 94% rename from dev-packages/e2e-tests/test-applications/node-nestjs/tests/propagation.test.ts rename to dev-packages/e2e-tests/test-applications/nestjs/tests/propagation.test.ts index d100b725283f..2922435c542b 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/propagation.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/tests/propagation.test.ts @@ -6,14 +6,14 @@ import { SpanJSON } from '@sentry/types'; test('Propagates trace for outgoing http requests', async ({ baseURL }) => { const id = crypto.randomUUID(); - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-inbound-headers/${id}` ); }); - const outboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const outboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-http/${id}` @@ -121,14 +121,14 @@ test('Propagates trace for outgoing http requests', async ({ baseURL }) => { test('Propagates trace for outgoing fetch requests', async ({ baseURL }) => { const id = crypto.randomUUID(); - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-inbound-headers/${id}` ); }); - const outboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const outboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-fetch/${id}` @@ -234,7 +234,7 @@ test('Propagates trace for outgoing fetch requests', async ({ baseURL }) => { }); test('Propagates trace for outgoing external http requests', async ({ baseURL }) => { - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-http-external-allowed` @@ -271,7 +271,7 @@ test('Propagates trace for outgoing external http requests', async ({ baseURL }) }); test('Does not propagate outgoing http requests not covered by tracePropagationTargets', async ({ baseURL }) => { - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-http-external-disallowed` @@ -295,7 +295,7 @@ test('Does not propagate outgoing http requests not covered by tracePropagationT }); test('Propagates trace for outgoing external fetch requests', async ({ baseURL }) => { - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-fetch-external-allowed` @@ -332,7 +332,7 @@ test('Propagates trace for outgoing external fetch requests', async ({ baseURL } }); test('Does not propagate outgoing fetch requests not covered by tracePropagationTargets', async ({ baseURL }) => { - const inboundTransactionPromise = waitForTransaction('node-nestjs', transactionEvent => { + const inboundTransactionPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent.contexts?.trace?.data?.['http.target'] === `/test-outgoing-fetch-external-disallowed` diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/transactions.test.ts b/dev-packages/e2e-tests/test-applications/nestjs/tests/transactions.test.ts similarity index 97% rename from dev-packages/e2e-tests/test-applications/node-nestjs/tests/transactions.test.ts rename to dev-packages/e2e-tests/test-applications/nestjs/tests/transactions.test.ts index 593c5e383f2b..22cb0f8e6a8c 100644 --- a/dev-packages/e2e-tests/test-applications/node-nestjs/tests/transactions.test.ts +++ b/dev-packages/e2e-tests/test-applications/nestjs/tests/transactions.test.ts @@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test'; import { waitForTransaction } from '@sentry-internal/test-utils'; test('Sends an API route transaction', async ({ baseURL }) => { - const pageloadTransactionEventPromise = waitForTransaction('node-nestjs', transactionEvent => { + const pageloadTransactionEventPromise = waitForTransaction('nestjs', transactionEvent => { return ( transactionEvent?.contexts?.trace?.op === 'http.server' && transactionEvent?.transaction === 'GET /test-transaction' diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/tsconfig.build.json b/dev-packages/e2e-tests/test-applications/nestjs/tsconfig.build.json similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/tsconfig.build.json rename to dev-packages/e2e-tests/test-applications/nestjs/tsconfig.build.json diff --git a/dev-packages/e2e-tests/test-applications/node-nestjs/tsconfig.json b/dev-packages/e2e-tests/test-applications/nestjs/tsconfig.json similarity index 100% rename from dev-packages/e2e-tests/test-applications/node-nestjs/tsconfig.json rename to dev-packages/e2e-tests/test-applications/nestjs/tsconfig.json diff --git a/dev-packages/e2e-tests/verdaccio-config/config.yaml b/dev-packages/e2e-tests/verdaccio-config/config.yaml index 26dfeb85e506..5f77ba7cccea 100644 --- a/dev-packages/e2e-tests/verdaccio-config/config.yaml +++ b/dev-packages/e2e-tests/verdaccio-config/config.yaml @@ -80,6 +80,12 @@ packages: unpublish: $all # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/nestjs': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/nextjs': access: $all publish: $all diff --git a/package.json b/package.json index 43891c4ef0cf..eab00cafbd18 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "packages/gatsby", "packages/google-cloud-serverless", "packages/integration-shims", + "packages/nestjs", "packages/nextjs", "packages/node", "packages/nuxt", diff --git a/packages/nestjs/.eslintrc.js b/packages/nestjs/.eslintrc.js new file mode 100644 index 000000000000..fdb9952bae52 --- /dev/null +++ b/packages/nestjs/.eslintrc.js @@ -0,0 +1,6 @@ +module.exports = { + env: { + node: true, + }, + extends: ['../../.eslintrc.js'], +}; diff --git a/packages/nestjs/LICENSE b/packages/nestjs/LICENSE new file mode 100644 index 000000000000..63e7eb28e19c --- /dev/null +++ b/packages/nestjs/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Functional Software, Inc. dba Sentry + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/nestjs/README.md b/packages/nestjs/README.md new file mode 100644 index 000000000000..58ab6bc95372 --- /dev/null +++ b/packages/nestjs/README.md @@ -0,0 +1,43 @@ +
+
+
+
+