diff --git a/package.json b/package.json index 1575617ab..c5b53e815 100644 --- a/package.json +++ b/package.json @@ -60,16 +60,16 @@ "e2e": "xvfb-maybe vitest run --root=./test/e2e --silent=false --disable-console-intercept" }, "dependencies": { - "@sentry/browser": "8.50.0", - "@sentry/core": "8.50.0", - "@sentry/node": "8.50.0", + "@sentry/browser": "8.51.0", + "@sentry/core": "8.51.0", + "@sentry/node": "8.51.0", "deepmerge": "4.3.1" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.2.3", "@rollup/plugin-typescript": "^11.1.6", - "@sentry-internal/eslint-config-sdk": "8.50.0", - "@sentry-internal/typescript": "8.50.0", + "@sentry-internal/eslint-config-sdk": "8.51.0", + "@sentry-internal/typescript": "8.51.0", "@types/busboy": "^1.5.4", "@types/form-data": "^2.5.0", "@types/koa": "^2.0.52", diff --git a/src/main/integrations/sentry-minidump/index.ts b/src/main/integrations/sentry-minidump/index.ts index a1056d501..85aa3340c 100644 --- a/src/main/integrations/sentry-minidump/index.ts +++ b/src/main/integrations/sentry-minidump/index.ts @@ -7,6 +7,7 @@ import { Scope, ScopeData, SentryError, + Session, } from '@sentry/core'; import { NodeClient } from '@sentry/node'; import { app, crashReporter } from 'electron'; @@ -16,7 +17,7 @@ import { getEventDefaults } from '../../context'; import { EXIT_REASONS, getSentryCachePath, usesCrashpad } from '../../electron-normalize'; import { getRendererProperties, trackRendererProperties } from '../../renderers'; import { ElectronMainOptions } from '../../sdk'; -import { checkPreviousSession, sessionCrashed } from '../../sessions'; +import { previousSessionWasAbnormal, restorePreviousSession, setPreviousSessionAsCurrent } from '../../sessions'; import { BufferedWriteStore } from '../../store'; import { getMinidumpLoader, MinidumpLoader } from './minidump-loader'; @@ -82,7 +83,7 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { async function sendNativeCrashes( client: NodeClient, - getEvent: (minidumpProcess: string | undefined) => Event, + getEvent: (minidumpProcess: string | undefined) => Event | Promise, ): Promise { // Whenever we are called, assume that the crashes we are going to load down // below have occurred recently. This means, we can use the same event data @@ -108,29 +109,11 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { await minidumpLoader?.(deleteAll, async (minidumpProcess, attachment) => { minidumpFound = true; - const event = getEvent(minidumpProcess); - - // If this is a native main process crash, we need to apply the scope and context from the previous run - if (event.tags?.['event.process'] === 'browser') { - const previousRun = await scopeLastRun; - if (previousRun) { - if (previousRun.scope) { - applyScopeDataToEvent(event, previousRun.scope); - } - - event.release = previousRun.event?.release || event.release; - event.environment = previousRun.event?.environment || event.environment; - event.contexts = previousRun.event?.contexts || event.contexts; - } - } - - if (!event) { - return; - } + const event = await getEvent(minidumpProcess); if (minidumpsRemaining > 0) { minidumpsRemaining -= 1; - captureEvent(event as Event, { attachments: [attachment] }); + captureEvent(event, { attachments: [attachment] }); } }); @@ -145,7 +128,7 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { ): Promise { const { getRendererName } = options; - const found = await sendNativeCrashes(client, (minidumpProcess) => { + await sendNativeCrashes(client, (minidumpProcess) => { // We only call 'getRendererName' if this was in fact a renderer crash const crashedProcess = (minidumpProcess === 'renderer' && getRendererName ? getRendererName(contents) : minidumpProcess) || @@ -170,20 +153,12 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { }, }; }); - - if (found) { - sessionCrashed(); - } } - async function sendChildProcessCrash( - client: NodeClient, - options: ElectronMainOptions, - details: Omit, - ): Promise { + async function sendChildProcessCrash(client: NodeClient, details: Omit): Promise { logger.log(`${details.type} process has ${details.reason}`); - const found = await sendNativeCrashes(client, (minidumpProcess) => ({ + await sendNativeCrashes(client, (minidumpProcess) => ({ contexts: { electron: { details }, }, @@ -197,10 +172,6 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { event_type: 'native', }, })); - - if (found) { - sessionCrashed(); - } } return { @@ -238,25 +209,47 @@ export const sentryMinidumpIntegration = defineIntegration((options: Options = { }); app.on('child-process-gone', async (_, details) => { if (EXIT_REASONS.includes(details.reason)) { - await sendChildProcessCrash(client, options, details); + await sendChildProcessCrash(client, details); } }); + let sessionToRestore: Session | undefined; + // Start to submit recent minidump crashes. This will load breadcrumbs and // context information that was cached on disk in the previous app run, prior to the crash. - sendNativeCrashes(client, (minidumpProcess) => ({ - level: 'fatal', - platform: 'native', - tags: { - 'event.environment': 'native', - 'event.process': minidumpProcess || (usesCrashpad() ? 'unknown' : 'browser'), - }, - })) - .then((minidumpsFound) => - // Check for previous uncompleted session. If a previous session exists - // and no minidumps were found, its likely an abnormal exit - checkPreviousSession(minidumpsFound), - ) + sendNativeCrashes(client, async (minidumpProcess) => { + const event: Event = { + level: 'fatal', + platform: 'native', + tags: { + 'event.environment': 'native', + 'event.process': minidumpProcess || (usesCrashpad() ? 'unknown' : 'browser'), + }, + }; + + // This crash was found at startup, we need to apply the scope and context from the previous run + const previousRun = await scopeLastRun; + if (previousRun) { + if (previousRun.scope) { + applyScopeDataToEvent(event, previousRun.scope); + } + + event.release = previousRun.event?.release; + event.environment = previousRun.event?.environment; + event.contexts = previousRun.event?.contexts; + } + + sessionToRestore = await setPreviousSessionAsCurrent(); + + return event; + }) + .then(async (minidumpsFound) => { + if (!minidumpsFound) { + await previousSessionWasAbnormal(); + } else if (sessionToRestore) { + restorePreviousSession(sessionToRestore); + } + }) .catch((error) => logger.error(error)); }, }; diff --git a/src/main/sessions.ts b/src/main/sessions.ts index 14f82c34c..13e4e0af9 100644 --- a/src/main/sessions.ts +++ b/src/main/sessions.ts @@ -28,12 +28,20 @@ let previousSession: Promise | undefined> | undefined; function getSessionStore(): Store { if (!sessionStore) { sessionStore = new Store(getSentryCachePath(), 'session', undefined); - previousSession = sessionStore.get(); + previousSession = sessionStore.get().then((sesh) => (sesh ? makeSession(sesh) : sesh)); } return sessionStore; } +/** Copies a session and removes the toJSON function so it can be serialised without conversion */ +function makeSessionSafeToSerialize(session: Session): Session { + const copy = { ...session }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + delete (copy as any).toJSON; + return copy; +} + let persistTimer: ReturnType | undefined; /** Starts a session */ @@ -45,7 +53,7 @@ export function startSession(sendOnCreate: boolean): void { } getSessionStore() - .set(session) + .set(makeSessionSafeToSerialize(session)) .catch(() => { // Does not throw }); @@ -55,7 +63,7 @@ export function startSession(sendOnCreate: boolean): void { const currentSession = getCurrentScope().getSession(); // Only bother saving if it hasn't already ended if (currentSession && currentSession.status === 'ok') { - await getSessionStore().set(currentSession); + await getSessionStore().set(makeSessionSafeToSerialize(currentSession)); } }, PERSIST_INTERVAL_MS); } @@ -110,6 +118,59 @@ export async function unreportedDuringLastSession(crashDate: Date | undefined): return crashTime > lastPersist && crashTime < prevSessionEnd; } +/** Sets the previous session as the current session and returns any existing session */ +export async function setPreviousSessionAsCurrent(): Promise { + const previous = await previousSession; + + const scope = getCurrentScope(); + const currentSession = scope.getSession(); + + if (previous) { + previousSession = undefined; + + if (previous.status === 'ok') { + scope.setSession(makeSession(previous)); + } + } + + return currentSession; +} + +/** Restores a session */ +export function restorePreviousSession(session: Session): void { + getCurrentScope().setSession(session); +} + +/** Report the previous session as abnormal */ +export async function previousSessionWasAbnormal(): Promise { + const client = getClient(); + + const previous = await previousSession; + + if (previous && client) { + // Ignore if the previous session is already ended + if (previous.status !== 'ok') { + previousSession = undefined; + return; + } + + logger.log(`Found previous abnormal session`); + + const sesh = makeSession(previous); + + updateSession(sesh, { + status: 'abnormal', + errors: (sesh.errors || 0) + 1, + release: (previous as unknown as SerializedSession).attrs?.release, + environment: (previous as unknown as SerializedSession).attrs?.environment, + }); + + await client.sendSession(sesh); + + previousSession = undefined; + } +} + /** Checks if the previous session needs sending as crashed or abnormal */ export async function checkPreviousSession(crashed: boolean): Promise { const client = getClient(); diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 1d3825abb..8f107b96b 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -121,6 +121,7 @@ export { featureFlagsIntegration, launchDarklyIntegration, openFeatureIntegration, + unleashIntegration, } from '@sentry/browser'; export type { BrowserOptions, ReportDialogOptions } from '@sentry/browser'; diff --git a/src/renderer/sdk.ts b/src/renderer/sdk.ts index bd2adc957..eab9fbb74 100644 --- a/src/renderer/sdk.ts +++ b/src/renderer/sdk.ts @@ -50,7 +50,7 @@ interface ElectronRendererOptions extends Omit( options: ElectronRendererOptions & O = {} as ElectronRendererOptions & O, // This parameter name ensures that TypeScript error messages contain a hint for fixing SDK version mismatches - originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v8_50_0: O) => void = browserInit, + originalInit: (if_you_get_a_typescript_error_ensure_sdks_use_version_v8_51_0: O) => void = browserInit, ): void { // Ensure the browser SDK is only init'ed once. if (window?.__SENTRY__RENDERER_INIT__) { diff --git a/test/e2e/test-apps/native-sentry/unknown/event.json b/test/e2e/test-apps/native-sentry/unknown/event.json index dff6fbb9b..14d939eb9 100644 --- a/test/e2e/test-apps/native-sentry/unknown/event.json +++ b/test/e2e/test-apps/native-sentry/unknown/event.json @@ -71,7 +71,7 @@ "event.environment": "native", "event.origin": "electron", "event.process": "unknown", - "app-run": "second" + "app-run": "first" } }, "attachments": [ diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-3.json b/test/e2e/test-apps/sessions/native-crash-main/session-3.json index f36ea69b7..8c7a038a5 100644 --- a/test/e2e/test-apps/sessions/native-crash-main/session-3.json +++ b/test/e2e/test-apps/sessions/native-crash-main/session-3.json @@ -7,7 +7,7 @@ "init": false, "started": 0, "timestamp": 0, - "status": "ok", + "status": "exited", "errors": 0, "duration": 0, "attrs": { diff --git a/test/e2e/test-apps/sessions/native-crash-main/session-4.json b/test/e2e/test-apps/sessions/native-crash-main/session-4.json deleted file mode 100644 index 8c7a038a5..000000000 --- a/test/e2e/test-apps/sessions/native-crash-main/session-4.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "appId": "277345", - "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", - "method": "envelope", - "data": { - "sid": "{{id}}", - "init": false, - "started": 0, - "timestamp": 0, - "status": "exited", - "errors": 0, - "duration": 0, - "attrs": { - "release": "session-native-crash-main@1.0.0" - } - } -} diff --git a/test/e2e/test-apps/sessions/native-crash-renderer-multiple/session-next.json b/test/e2e/test-apps/sessions/native-crash-renderer-multiple/session-next.json deleted file mode 100644 index 45593bf18..000000000 --- a/test/e2e/test-apps/sessions/native-crash-renderer-multiple/session-next.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "appId": "277345", - "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", - "method": "envelope", - "data": { - "sid": "{{id}}", - "init": false, - "started": 0, - "timestamp": 0, - "status": "ok", - "errors": 0, - "duration": 0, - "attrs": { - "release": "session-native-crash-renderer-multiple@1.0.0" - } - } -} diff --git a/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json b/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json deleted file mode 100644 index 71a106c71..000000000 --- a/test/e2e/test-apps/sessions/native-crash-renderer/session-next.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "appId": "277345", - "sentryKey": "37f8a2ee37c0409d8970bc7559c7c7e4", - "method": "envelope", - "data": { - "sid": "{{id}}", - "init": false, - "started": 0, - "timestamp": 0, - "status": "ok", - "errors": 0, - "duration": 0, - "attrs": { - "release": "session-native-crash-renderer@1.0.0" - } - } -} diff --git a/yarn.lock b/yarn.lock index 28049c48b..5aa8945fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -729,20 +729,20 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@sentry-internal/browser-utils@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-8.50.0.tgz#adb7a395584cc701b18d597e9cf19e53e8539cf8" - integrity sha512-hZm6ngWTEzZhaMHpLIKB4wWp0Od1MdCZdvR5FRdIThUMLa1P8rXeolovTRfOE81NE755EiwJHzj4O7rq3EjA+A== +"@sentry-internal/browser-utils@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-8.51.0.tgz#eaa245aefad8b3d893516ffe9535b1907f049094" + integrity sha512-r94yfRK17zNJER0hgQE4qOSy5pWzsnFcGTJQSqhSEKUcC4KK37qSfoPrPejFxtIqXhqlkd/dTWKvrMwXWcn0MQ== dependencies: - "@sentry/core" "8.50.0" + "@sentry/core" "8.51.0" -"@sentry-internal/eslint-config-sdk@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-8.50.0.tgz#0f06856433bfe2450848c6011d62281f74cdff1c" - integrity sha512-SO8buVgPOgDnxI1BZgT6QM7iAtcyKCsSt/RmI8aSbT9ZPJxooop/JSS8PFPkvDD84gE9dcUNzuHg/V21Y3uPhg== +"@sentry-internal/eslint-config-sdk@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-8.51.0.tgz#2eb2df1fa00d757e9389c127c2030ae19038b675" + integrity sha512-reiYKD9bCFI/8ZPhZwQ7l/WqTi5YeZe+qMIEKH7pRjk11rm1C4ac78bdHsv79byigRHYuS7kdgFYnnyLgyozyA== dependencies: - "@sentry-internal/eslint-plugin-sdk" "8.50.0" - "@sentry-internal/typescript" "8.50.0" + "@sentry-internal/eslint-plugin-sdk" "8.51.0" + "@sentry-internal/typescript" "8.51.0" "@typescript-eslint/eslint-plugin" "^5.48.0" "@typescript-eslint/parser" "^5.48.0" eslint-config-prettier "^6.11.0" @@ -752,59 +752,59 @@ eslint-plugin-jsdoc "^30.0.3" eslint-plugin-simple-import-sort "^5.0.3" -"@sentry-internal/eslint-plugin-sdk@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-8.50.0.tgz#472362ac225443f6144255e93994759200f9e05d" - integrity sha512-PLS+ThaVtns2tb1Nh/LryzNxEJBO3jJEcdIQ6Gy6XJzLa1kNDFPcI8JtSRhDzxL2svtJIAxhPCAiWoGgAzE/HA== +"@sentry-internal/eslint-plugin-sdk@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-8.51.0.tgz#84936de4ef34d5c88f9c60ee9986b18803e35deb" + integrity sha512-rBgMXritEU2nFKMMbGwfoXEdTZYfJGGl+qIguSsoNiay8mockmsy4VKCzmXshtQscIFoADxH26ZacJ3pHOwIOA== -"@sentry-internal/feedback@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-8.50.0.tgz#d26cef6d575c83ca3a65a5f2f539cf335020c90f" - integrity sha512-79WlvSJYCXL/D0PBC8AIT4JbyS44AE3h6lP05IESXMqzTZl3KeSqCx317rwJw1KaxzeFd/JQwkFq95jaKAcLhg== +"@sentry-internal/feedback@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-8.51.0.tgz#58e1de053b175e6fe5896e9b1282d754ea4e12d5" + integrity sha512-VgfxSZWLYUPKDnkt2zG+Oe5ccv8U3WPM6Mo4kfABIJT3Ai4VbZB7+vb2a4pm6lUCF9DeOPXHb5o9Tg17SHDAHw== dependencies: - "@sentry/core" "8.50.0" + "@sentry/core" "8.51.0" -"@sentry-internal/replay-canvas@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-8.50.0.tgz#f62a0af6c0e4c112660fa0d44f51f09805eed147" - integrity sha512-Hv1bBaPpe62xFPLpuaUxVBUHd/Ed9bnGndeqN4hueeEGDT9T6NyVokgm35O5xE9/op6Yodm/3NfUkEg8oE++Aw== +"@sentry-internal/replay-canvas@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-8.51.0.tgz#c896448d456290f8f4eb99df924d1bcc07908947" + integrity sha512-ERXIbwdULkdtIQnfkMLRVfpoGV2rClwySGRlTPepFKeLxlcXo9o09cPu+qbukiDnGK0cgEgRnrV961hMg21Bmw== dependencies: - "@sentry-internal/replay" "8.50.0" - "@sentry/core" "8.50.0" + "@sentry-internal/replay" "8.51.0" + "@sentry/core" "8.51.0" -"@sentry-internal/replay@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-8.50.0.tgz#c364f1816400518e3db5ab3feaa096526ae1c134" - integrity sha512-mhRPujzO6n+mb6ZR+wQNkSpjqIqDriR0hZEvdzHQdyXu9zVdCHUJ3sINkzpT1XwiypQVCEfxB6Oh9y/NmcQfGg== +"@sentry-internal/replay@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-8.51.0.tgz#c121518ef493afcf38c900d37e12af68787351d5" + integrity sha512-lkm7id3a2n3yMZeF5socCVQUeEeShNOGr7Wtsmb5RORacEnld0z+NfbMTilo1mDwiWBzI5OYBjm62eglm1HFsQ== dependencies: - "@sentry-internal/browser-utils" "8.50.0" - "@sentry/core" "8.50.0" + "@sentry-internal/browser-utils" "8.51.0" + "@sentry/core" "8.51.0" -"@sentry-internal/typescript@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-8.50.0.tgz#d2ac8d897bd9e2917cb538be2e21f08b6a15a767" - integrity sha512-0cc3lz/rcZOsd0/slQpb+tdTJkZ+tb2hLmIIa47ydo4IYoXEsxsIJ0j8ODatktMP4mNP48BA18qu6Sg7lthkLw== +"@sentry-internal/typescript@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-8.51.0.tgz#1569656bbd1bd4b2e495b99aef7715ae17907c5e" + integrity sha512-c9gEKbtreHmsj7yl3787/f5nSwmlRVv7BspJ3nfp5YFssKB48W4LVri783YW75Hp+4zPO81Duoh+nM0+6+12ww== -"@sentry/browser@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-8.50.0.tgz#53b59fe4de32cdbcfeb6cbbb76a0094705e3b531" - integrity sha512-aGJSpuKiHVKkLvd1VklJSZ2oCsl4wcKUVxKIa8dhJC8KjDY0vREQCywrlWuS5KYP0xFy4k28pg6PPR3HKkUlNw== +"@sentry/browser@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-8.51.0.tgz#1d208785a432f4a4aee616da459e118994c8661f" + integrity sha512-1kbbyVfBBAx5Xyynp+lC5lLnAHo0qJ2r4mtmdT6koPjesvoOocEK0QQnouQBmdUbm3L0L/bPI1SgXjbeJyhzHQ== dependencies: - "@sentry-internal/browser-utils" "8.50.0" - "@sentry-internal/feedback" "8.50.0" - "@sentry-internal/replay" "8.50.0" - "@sentry-internal/replay-canvas" "8.50.0" - "@sentry/core" "8.50.0" + "@sentry-internal/browser-utils" "8.51.0" + "@sentry-internal/feedback" "8.51.0" + "@sentry-internal/replay" "8.51.0" + "@sentry-internal/replay-canvas" "8.51.0" + "@sentry/core" "8.51.0" -"@sentry/core@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.50.0.tgz#cfc9983bb7ea3ad8c6f3332addd2816a791f5aeb" - integrity sha512-q71m8Ha9YGwqn4Gd7sWvcFTRgbHXxEfU4QeIFtwMBpwHfq2Q+9koiF8DOoOHqIEOsnlvZWRQgGggIOdHzajnVw== +"@sentry/core@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.51.0.tgz#d0c73dfe3489788911b7ce784d3ef8458344482c" + integrity sha512-Go0KxCYLw+OBIlLSv5YsYX+x9NW43fNVcyB6rhkSp2Q5Zme3tAE6KtZFvyu4SO7G/903wisW5Q6qV6UuK/ee4A== -"@sentry/node@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-8.50.0.tgz#738740c1711a0f2d6467a5f55612c17ef8f84620" - integrity sha512-I9eGIdcoWKVy4O8a1f2t0jGVTdN1z9McxbGW8aWwDE5Vd9gpuNjFh9qGapmBEPzysWBX8rjsemDdSa3TcijJMw== +"@sentry/node@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-8.51.0.tgz#c267b536ea6c3357e3c59de8d4b40dbfab3dff45" + integrity sha512-KfXk3QaeNXmJgUUCDAwZW7cdZ+1GvRXNdTPLpWbAKGaNulAeimck5fGGL8FRMSF0sMz6BT6Ku7u6DUaZTtbB7w== dependencies: "@opentelemetry/api" "^1.9.0" "@opentelemetry/context-async-hooks" "^1.29.0" @@ -838,16 +838,16 @@ "@opentelemetry/sdk-trace-base" "^1.29.0" "@opentelemetry/semantic-conventions" "^1.28.0" "@prisma/instrumentation" "5.22.0" - "@sentry/core" "8.50.0" - "@sentry/opentelemetry" "8.50.0" + "@sentry/core" "8.51.0" + "@sentry/opentelemetry" "8.51.0" import-in-the-middle "^1.11.2" -"@sentry/opentelemetry@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-8.50.0.tgz#10c78f9be65949ef5a3ad865cc296ee422bf6ee1" - integrity sha512-uAZjAMPAulFHL88ThK2k+XPx2QzvZ/I7e7sP1In28Tb/yLH0mi+51AUH+zcnLELIPC86m1aDYl8uwYcP6tV4dA== +"@sentry/opentelemetry@8.51.0": + version "8.51.0" + resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-8.51.0.tgz#376b1017da140372a904d712d80ed2ec4d361ee4" + integrity sha512-SvH/rl/P+S7EKXIZA6kq2HzFYfXKQx8Ytgx4WZJV+katsdaDay24QtycYE+PaqbotAkV6MOMECEb8a9XXttQcg== dependencies: - "@sentry/core" "8.50.0" + "@sentry/core" "8.51.0" "@sinclair/typebox@^0.27.8": version "0.27.8"