From 0807af72299430e8b6c1ec75c9bee90fa2f9aea5 Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 25 Jan 2024 11:14:37 +0100 Subject: [PATCH 1/8] fix(nextjs): Fix Http integration type declaration --- packages/nextjs/src/server/httpIntegration.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/nextjs/src/server/httpIntegration.ts b/packages/nextjs/src/server/httpIntegration.ts index d4e405586e96..4252cffcaa86 100644 --- a/packages/nextjs/src/server/httpIntegration.ts +++ b/packages/nextjs/src/server/httpIntegration.ts @@ -1,11 +1,10 @@ import { Integrations } from '@sentry/node'; -const { Http: OriginalHttp } = Integrations; /** * A custom HTTP integration where we always enable tracing. */ -export class Http extends OriginalHttp { - public constructor(options?: ConstructorParameters[0]) { +export class Http extends Integrations.Http { + public constructor(options?: ConstructorParameters[0]) { super({ ...options, tracing: true, From 62ed10bc745d996f142b4e83af65b87ad7f76c2f Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 10:30:49 +0000 Subject: [PATCH 2/8] fix(node): Fix type definitions --- packages/node/src/index.ts | 6 ++++++ packages/node/src/integrations/anr/common.ts | 4 ++-- packages/node/src/integrations/anr/index.ts | 8 ++++---- packages/node/src/integrations/local-variables/common.ts | 2 +- .../integrations/local-variables/local-variables-async.ts | 4 ++-- .../integrations/local-variables/local-variables-sync.ts | 6 +++--- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 4f563316338b..f0d586c0badb 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -127,6 +127,12 @@ const INTEGRATIONS = { ...TracingIntegrations, }; +export type { LocalVariablesIntegrationOptions } from './integrations/local-variables/common' +export type { DebugSession } from './integrations/local-variables/local-variables-sync' +export type { AnrIntegrationOptions } from './integrations/anr/common' + +export { Undici} from './integrations/undici' + export { INTEGRATIONS as Integrations, Handlers }; export { hapiErrorPlugin } from './integrations/hapi'; diff --git a/packages/node/src/integrations/anr/common.ts b/packages/node/src/integrations/anr/common.ts index b548fa6bf5c1..5617871ccb24 100644 --- a/packages/node/src/integrations/anr/common.ts +++ b/packages/node/src/integrations/anr/common.ts @@ -1,6 +1,6 @@ import type { Contexts, DsnComponents, Primitive, SdkMetadata } from '@sentry/types'; -export interface Options { +export interface AnrIntegrationOptions { /** * Interval to send heartbeat messages to the ANR worker. * @@ -33,7 +33,7 @@ export interface Options { appRootPath: string | undefined; } -export interface WorkerStartData extends Options { +export interface WorkerStartData extends AnrIntegrationOptions { debug: boolean; sdkMetadata: SdkMetadata; dsn: DsnComponents; diff --git a/packages/node/src/integrations/anr/index.ts b/packages/node/src/integrations/anr/index.ts index e444427f2e47..81b45bf5bf03 100644 --- a/packages/node/src/integrations/anr/index.ts +++ b/packages/node/src/integrations/anr/index.ts @@ -6,7 +6,7 @@ import { dynamicRequire, logger } from '@sentry/utils'; import type { Worker, WorkerOptions } from 'worker_threads'; import type { NodeClient } from '../../client'; import { NODE_VERSION } from '../../nodeVersion'; -import type { Options, WorkerStartData } from './common'; +import type { AnrIntegrationOptions, WorkerStartData } from './common'; import { base64WorkerScript } from './worker-script'; const DEFAULT_INTERVAL = 50; @@ -52,7 +52,7 @@ interface InspectorApi { const INTEGRATION_NAME = 'Anr'; -const anrIntegration = ((options: Partial = {}) => { +const anrIntegration = ((options: Partial = {}) => { return { name: INTEGRATION_NAME, // TODO v8: Remove this @@ -77,13 +77,13 @@ const anrIntegration = ((options: Partial = {}) => { export const Anr = convertIntegrationFnToClass(INTEGRATION_NAME, anrIntegration) as IntegrationClass< Integration & { setup: (client: NodeClient) => void } > & { - new (options?: Partial): Integration & { setup(client: Client): void }; + new (options?: Partial): Integration & { setup(client: Client): void }; }; /** * Starts the ANR worker thread */ -async function _startWorker(client: NodeClient, _options: Partial): Promise { +async function _startWorker(client: NodeClient, _options: Partial): Promise { const contexts = await getContexts(client); const dsn = client.getDsn(); diff --git a/packages/node/src/integrations/local-variables/common.ts b/packages/node/src/integrations/local-variables/common.ts index 5e5a8170d52b..3ffee8c0a824 100644 --- a/packages/node/src/integrations/local-variables/common.ts +++ b/packages/node/src/integrations/local-variables/common.ts @@ -95,7 +95,7 @@ export interface FrameVariables { vars?: Variables; } -export interface Options { +export interface LocalVariablesIntegrationOptions { /** * Capture local variables for both caught and uncaught exceptions * diff --git a/packages/node/src/integrations/local-variables/local-variables-async.ts b/packages/node/src/integrations/local-variables/local-variables-async.ts index 7e393dced9e0..e10e850267ef 100644 --- a/packages/node/src/integrations/local-variables/local-variables-async.ts +++ b/packages/node/src/integrations/local-variables/local-variables-async.ts @@ -6,7 +6,7 @@ import type { Debugger, InspectorNotification, Runtime } from 'inspector'; import type { NodeClient } from '../../client'; import type { NodeClientOptions } from '../../types'; -import type { FrameVariables, Options, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; +import type { FrameVariables, LocalVariablesIntegrationOptions, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; import { createRateLimiter, functionNamesMatch, hashFrames, hashFromStack } from './common'; async function unrollArray(session: Session, objectId: string, name: string, vars: Variables): Promise { @@ -70,7 +70,7 @@ const INTEGRATION_NAME = 'LocalVariablesAsync'; /** * Adds local variables to exception frames */ -const localVariablesAsyncIntegration = ((options: Options = {}) => { +const localVariablesAsyncIntegration = ((options: LocalVariablesIntegrationOptions = {}) => { const cachedFrames: LRUMap = new LRUMap(20); let rateLimiter: RateLimitIncrement | undefined; let shouldProcessEvent = false; diff --git a/packages/node/src/integrations/local-variables/local-variables-sync.ts b/packages/node/src/integrations/local-variables/local-variables-sync.ts index 93f3b61b10f2..d04963c60415 100644 --- a/packages/node/src/integrations/local-variables/local-variables-sync.ts +++ b/packages/node/src/integrations/local-variables/local-variables-sync.ts @@ -6,7 +6,7 @@ import type { Debugger, InspectorNotification, Runtime, Session } from 'inspecto import type { NodeClient } from '../../client'; import { NODE_VERSION } from '../../nodeVersion'; -import type { FrameVariables, Options, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; +import type { FrameVariables, LocalVariablesIntegrationOptions, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; import { createRateLimiter, functionNamesMatch, hashFrames, hashFromStack } from './common'; type OnPauseEvent = InspectorNotification; @@ -214,7 +214,7 @@ const INTEGRATION_NAME = 'LocalVariables'; * Adds local variables to exception frames */ const localVariablesSyncIntegration = (( - options: Options = {}, + options: LocalVariablesIntegrationOptions = {}, session: DebugSession | undefined = tryNewAsyncSession(), ) => { const cachedFrames: LRUMap = new LRUMap(20); @@ -394,5 +394,5 @@ export const LocalVariablesSync = convertIntegrationFnToClass( INTEGRATION_NAME, localVariablesSyncIntegration, ) as IntegrationClass Event; setup: (client: NodeClient) => void }> & { - new (options?: Options, session?: DebugSession): Integration; + new (options?: LocalVariablesIntegrationOptions, session?: DebugSession): Integration; }; From aed43694acdd895c262f880660e7c5adcbf75c1a Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 10:31:41 +0000 Subject: [PATCH 3/8] Ci check --- .github/workflows/build.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d66831462844..6183685ddfd1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -727,6 +727,27 @@ jobs: cd packages/utils yarn test:package + job_check_for_faulty_dts: + name: Check for faulty .d.ts files + needs: [job_get_metadata, job_build] + runs-on: ubuntu-20.04 + timeout-minutes: 5 + steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' + - name: Restore caches + uses: ./.github/actions/restore-cache + env: + DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} + - name: Run browser build tests + run: \! grep -r --include "*.d.ts" --exclude-dir ".nxcache" 'import("@sentry/.*/build' . + job_node_integration_tests: name: Node (${{ matrix.node }})${{ (matrix.typescript && format(' (TS {0})', matrix.typescript)) || '' }} Integration From f025eead144c810fa1f7f2a549e1cac849e5819e Mon Sep 17 00:00:00 2001 From: Lukas Stracke Date: Thu, 25 Jan 2024 11:34:37 +0100 Subject: [PATCH 4/8] same thing for OnUncaughtException integration this didn't cause an error --- packages/nextjs/src/server/onUncaughtExceptionIntegration.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/nextjs/src/server/onUncaughtExceptionIntegration.ts b/packages/nextjs/src/server/onUncaughtExceptionIntegration.ts index 4659eb682fdb..6e9e0c034676 100644 --- a/packages/nextjs/src/server/onUncaughtExceptionIntegration.ts +++ b/packages/nextjs/src/server/onUncaughtExceptionIntegration.ts @@ -1,11 +1,10 @@ import { Integrations } from '@sentry/node'; -const { OnUncaughtException: OriginalOnUncaughtException } = Integrations; /** * A custom OnUncaughtException integration that does not exit by default. */ -export class OnUncaughtException extends OriginalOnUncaughtException { - public constructor(options?: ConstructorParameters[0]) { +export class OnUncaughtException extends Integrations.OnUncaughtException { + public constructor(options?: ConstructorParameters[0]) { super({ exitEvenIfOtherHandlersAreRegistered: false, ...options, From 5729ca633aa44c81381d9b87ef506ad9d101bf72 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 10:41:36 +0000 Subject: [PATCH 5/8] fix action --- .github/workflows/build.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6183685ddfd1..27a58188e49a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -745,8 +745,13 @@ jobs: uses: ./.github/actions/restore-cache env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - - name: Run browser build tests - run: \! grep -r --include "*.d.ts" --exclude-dir ".nxcache" 'import("@sentry/.*/build' . + - name: Check for dts files that reference stuff in the temporary build folder + run: | + if grep -r --include "*.d.ts" --exclude-dir ".nxcache" 'import("@sentry/.*/build' .; then + echo "Found illegal TypeScript import statement." + exit 1 + fi + job_node_integration_tests: name: From 3228379b9ec662a87621f5b4b555011c9e110c16 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 10:41:39 +0000 Subject: [PATCH 6/8] fix lint --- packages/node/src/index.ts | 8 ++++---- .../integrations/local-variables/local-variables-async.ts | 8 +++++++- .../integrations/local-variables/local-variables-sync.ts | 8 +++++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index f0d586c0badb..cd5cdd0c2423 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -127,11 +127,11 @@ const INTEGRATIONS = { ...TracingIntegrations, }; -export type { LocalVariablesIntegrationOptions } from './integrations/local-variables/common' -export type { DebugSession } from './integrations/local-variables/local-variables-sync' -export type { AnrIntegrationOptions } from './integrations/anr/common' +export type { LocalVariablesIntegrationOptions } from './integrations/local-variables/common'; +export type { DebugSession } from './integrations/local-variables/local-variables-sync'; +export type { AnrIntegrationOptions } from './integrations/anr/common'; -export { Undici} from './integrations/undici' +export { Undici } from './integrations/undici'; export { INTEGRATIONS as Integrations, Handlers }; diff --git a/packages/node/src/integrations/local-variables/local-variables-async.ts b/packages/node/src/integrations/local-variables/local-variables-async.ts index e10e850267ef..76df88760bc9 100644 --- a/packages/node/src/integrations/local-variables/local-variables-async.ts +++ b/packages/node/src/integrations/local-variables/local-variables-async.ts @@ -6,7 +6,13 @@ import type { Debugger, InspectorNotification, Runtime } from 'inspector'; import type { NodeClient } from '../../client'; import type { NodeClientOptions } from '../../types'; -import type { FrameVariables, LocalVariablesIntegrationOptions, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; +import type { + FrameVariables, + LocalVariablesIntegrationOptions, + PausedExceptionEvent, + RateLimitIncrement, + Variables, +} from './common'; import { createRateLimiter, functionNamesMatch, hashFrames, hashFromStack } from './common'; async function unrollArray(session: Session, objectId: string, name: string, vars: Variables): Promise { diff --git a/packages/node/src/integrations/local-variables/local-variables-sync.ts b/packages/node/src/integrations/local-variables/local-variables-sync.ts index d04963c60415..f8d803a76c71 100644 --- a/packages/node/src/integrations/local-variables/local-variables-sync.ts +++ b/packages/node/src/integrations/local-variables/local-variables-sync.ts @@ -6,7 +6,13 @@ import type { Debugger, InspectorNotification, Runtime, Session } from 'inspecto import type { NodeClient } from '../../client'; import { NODE_VERSION } from '../../nodeVersion'; -import type { FrameVariables, LocalVariablesIntegrationOptions, PausedExceptionEvent, RateLimitIncrement, Variables } from './common'; +import type { + FrameVariables, + LocalVariablesIntegrationOptions, + PausedExceptionEvent, + RateLimitIncrement, + Variables, +} from './common'; import { createRateLimiter, functionNamesMatch, hashFrames, hashFromStack } from './common'; type OnPauseEvent = InspectorNotification; From 0feee0022281e458e6ed7eccaa6711f4f0b5f728 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 11:00:45 +0000 Subject: [PATCH 7/8] better regex --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 27a58188e49a..f24414286c8a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -747,7 +747,7 @@ jobs: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Check for dts files that reference stuff in the temporary build folder run: | - if grep -r --include "*.d.ts" --exclude-dir ".nxcache" 'import("@sentry/.*/build' .; then + if grep -r --include "*.d.ts" --exclude-dir ".nxcache" 'import("@sentry(-internal)?/[^/]*/build' .; then echo "Found illegal TypeScript import statement." exit 1 fi From 032661d457eebf2376f146966cba68187d4bb0ad Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Thu, 25 Jan 2024 11:00:50 +0000 Subject: [PATCH 8/8] comment --- packages/node/src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index cd5cdd0c2423..09fc72a5d382 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -127,11 +127,13 @@ const INTEGRATIONS = { ...TracingIntegrations, }; +// TODO(v8): Remove all of these exports. They were part of a hotfix #10339 where we produced wrong .d.ts files because we were packing packages inside the /build folder. export type { LocalVariablesIntegrationOptions } from './integrations/local-variables/common'; export type { DebugSession } from './integrations/local-variables/local-variables-sync'; export type { AnrIntegrationOptions } from './integrations/anr/common'; - export { Undici } from './integrations/undici'; +export { Http } from './integrations/http'; +// --- export { INTEGRATIONS as Integrations, Handlers };