diff --git a/apps/gateway/src/common/tracer.ts b/apps/gateway/src/common/tracer.ts index 0dce03c3fd..a609d5ff01 100644 --- a/apps/gateway/src/common/tracer.ts +++ b/apps/gateway/src/common/tracer.ts @@ -5,6 +5,11 @@ tracer.init({ apmTracingEnabled: process.env.NODE_ENV === 'production', service: 'latitude-llm-gateway', env: process.env.NODE_ENV, + blocklist: [] +}) + +tracer.use('http', { + blocklist: [/AI_NoOutputGeneratedError/] }) export default tracer diff --git a/apps/workers/docker/Dockerfile b/apps/workers/docker/Dockerfile index 8d66980be3..da273c1b02 100644 --- a/apps/workers/docker/Dockerfile +++ b/apps/workers/docker/Dockerfile @@ -49,18 +49,9 @@ RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install \ COPY --from=pruner /app/out/full/ . RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - --mount=type=secret,id=SENTRY_AUTH_TOKEN \ BUILDING_CONTAINER=true \ - SENTRY_AUTH_TOKEN="$(cat /run/secrets/SENTRY_AUTH_TOKEN 2>/dev/null || echo '')" \ pnpm turbo build --filter="${PROJECT}..." -# Run sentry:sourcemaps if SENTRY_AUTH_TOKEN secret is present and not empty -RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN \ - if [ -s /run/secrets/SENTRY_AUTH_TOKEN ]; then \ - cd ${PROJECT_PATH} && \ - SENTRY_AUTH_TOKEN="$(cat /run/secrets/SENTRY_AUTH_TOKEN)" pnpm sentry:sourcemaps; \ - fi - # Since `pnpm prune` doesn't handle recursive dependencies effectively, # we follow pnpm's recommended approach: remove node_modules entirely # and perform a fresh production install with --frozen-lockfile diff --git a/apps/workers/package.json b/apps/workers/package.json index 79ec58dfbc..b31ed9425a 100644 --- a/apps/workers/package.json +++ b/apps/workers/package.json @@ -10,8 +10,7 @@ "dev:debug": "tsx watch --inspect-brk src/server", "lint": "eslint src/", "start": "node -r module-alias/register ./dist --env=production", - "tc": "tsc --noEmit", - "sentry:sourcemaps": "sentry-cli sourcemaps inject --org latitude-l5 --project latitude-workers ./dist && sentry-cli sourcemaps upload --org latitude-l5 --project latitude-workers ./dist" + "tc": "tsc --noEmit" }, "dependencies": { "@bull-board/api": "6.10.1", @@ -19,8 +18,6 @@ "@latitude-data/core": "workspace:^", "@latitude-data/env": "workspace:^", "@latitude-data/telemetry": "workspace:*", - "@sentry/cli": "2.37.0", - "@sentry/node": "9.9.0", "@t3-oss/env-core": "*", "bullmq": "5.44.4", "dd-trace": "catalog:", diff --git a/apps/workers/src/server.ts b/apps/workers/src/server.ts index 82e0bff4ed..bbec7e4c3d 100644 --- a/apps/workers/src/server.ts +++ b/apps/workers/src/server.ts @@ -5,10 +5,6 @@ import { createBullBoard } from '@bull-board/api' import { BullMQAdapter } from '@bull-board/api/bullMQAdapter.js' import { ExpressAdapter } from '@bull-board/express' -import { - captureException, - captureMessage, -} from '@latitude-data/core/utils/workers/sentry' import { startWorkers } from './workers' import { setupSchedules } from './workers/schedule' import { env } from '@latitude-data/env' @@ -94,10 +90,3 @@ const gracefulShutdown = async (signal: string) => { process.on('SIGINT', () => gracefulShutdown('SIGINT')) process.on('SIGTERM', () => gracefulShutdown('SIGTERM')) -process.on('uncaughtException', function (err) { - captureException(err) -}) - -process.on('unhandledRejection', (reason: string) => { - captureMessage(reason) -}) diff --git a/apps/workers/src/workers/utils/createWorker.ts b/apps/workers/src/workers/utils/createWorker.ts index cd5e74c6a6..98f88ad3c2 100644 --- a/apps/workers/src/workers/utils/createWorker.ts +++ b/apps/workers/src/workers/utils/createWorker.ts @@ -1,6 +1,5 @@ import { Queues } from '@latitude-data/core/queues/types' import { REDIS_KEY_PREFIX } from '@latitude-data/core/redis' -import { captureException } from '@latitude-data/core/utils/workers/sentry' import { Worker, WorkerOptions } from 'bullmq' import { WORKER_OPTIONS } from './connectionConfig' import { createJobHandler } from './createJobHandler' @@ -22,10 +21,6 @@ export function createWorker>( prefix: REDIS_KEY_PREFIX, }) - worker.on('error', (error: Error) => { - captureException(error) - }) - // Register worker with job tracker for scale-in protection jobTracker.registerWorker(worker) diff --git a/docs/guides/self-hosted/production-setup.mdx b/docs/guides/self-hosted/production-setup.mdx index 4406a97534..481e278119 100644 --- a/docs/guides/self-hosted/production-setup.mdx +++ b/docs/guides/self-hosted/production-setup.mdx @@ -107,7 +107,6 @@ If using [Third-Party Integrations via MCP](/guides/integration/mcp-integrations - **Logging**: Configure Docker log drivers or orchestrator logging to aggregate logs from all services (web, gateway, worker, etc.). - **Monitoring**: Use tools like Prometheus/Grafana, Datadog, or cloud provider monitoring services to track resource usage (CPU, memory), error rates, request latency, and queue lengths. - **Health Checks**: Configure health check endpoints in your load balancer or orchestrator to monitor service availability. -- **Optional Integrations**: Configure Sentry (`SENTRY_DSN`) or PostHog in your `.env` for enhanced error tracking and analytics. ## Next Steps diff --git a/docs/guides/self-hosted/production.mdx b/docs/guides/self-hosted/production.mdx index 6997551635..e3d29aaf65 100644 --- a/docs/guides/self-hosted/production.mdx +++ b/docs/guides/self-hosted/production.mdx @@ -69,7 +69,7 @@ Make sure this network is created before running the containers with `docker com - `DISABLE_EMAIL_AUTHENTICATION`: Disable email authentication (optional, default: `false`) If `MAIL_TRANSPORT` is set to `smtp`, you must provide the following environment variables: - + - `SMTP_HOST`: The SMTP server host (e.g., `smtp.gmail.com`) - `SMTP_PORT`: The SMTP port number (e.g., `465` for SMTPS or `587` for STARTTLS) - `SMTP_SECURE`: Set to `true` for SMTPS (`465`) or `false` for STARTTLS (`587`) @@ -157,7 +157,6 @@ Make sure this network is created before running the containers with `docker com AWS SDK automatically handles credentials from attached IAM roles. - **Optional Features**: - - Sentry integration for error tracking - PostHog for analytics ## Starting the Services diff --git a/packages/core/src/events/handlers/undeployDocumentTriggerJob.ts b/packages/core/src/events/handlers/undeployDocumentTriggerJob.ts index 4653095d72..dce3c6e3ed 100644 --- a/packages/core/src/events/handlers/undeployDocumentTriggerJob.ts +++ b/packages/core/src/events/handlers/undeployDocumentTriggerJob.ts @@ -1,7 +1,6 @@ import { getPipedreamClient } from '../../services/integrations/pipedream/apps' import { EventHandler } from '../events' import { DocumentTriggerUndeployRequestedEvent } from '../events' -import { captureException } from '../../utils/workers/sentry' export const undeployDocumentTriggerJob: EventHandler< DocumentTriggerUndeployRequestedEvent @@ -9,12 +8,5 @@ export const undeployDocumentTriggerJob: EventHandler< const { triggerId, externalUserId } = event.data const pipedream = getPipedreamClient().unwrap() - try { - await pipedream.deployedTriggers.delete(triggerId, { - externalUserId, - }) - } catch (error) { - captureException(error as Error) - throw error - } + await pipedream.deployedTriggers.delete(triggerId, { externalUserId }) } diff --git a/packages/core/src/jobs/job-definitions/documentSuggestions/generateDocumentSuggestionJob.ts b/packages/core/src/jobs/job-definitions/documentSuggestions/generateDocumentSuggestionJob.ts index a55a242ff7..e33ce4be4c 100644 --- a/packages/core/src/jobs/job-definitions/documentSuggestions/generateDocumentSuggestionJob.ts +++ b/packages/core/src/jobs/job-definitions/documentSuggestions/generateDocumentSuggestionJob.ts @@ -8,7 +8,6 @@ import { EvaluationsV2Repository, } from '../../../repositories' import { generateDocumentSuggestion } from '../../../services/documentSuggestions' -import { captureException } from '../../../utils/workers/sentry' export type GenerateDocumentSuggestionJobData = { workspaceId: number @@ -67,7 +66,7 @@ export const generateDocumentSuggestionJob = async ( }) if (result.error) { if (result.error instanceof UnprocessableEntityError) { - captureException(result.error) + // Ignore } else throw result.error } } diff --git a/packages/core/src/jobs/job-definitions/evaluations/runEvaluationV2Job.ts b/packages/core/src/jobs/job-definitions/evaluations/runEvaluationV2Job.ts index 30bf0108ab..b91e60b73f 100644 --- a/packages/core/src/jobs/job-definitions/evaluations/runEvaluationV2Job.ts +++ b/packages/core/src/jobs/job-definitions/evaluations/runEvaluationV2Job.ts @@ -15,7 +15,6 @@ import { runEvaluationV2, } from '../../../services/evaluationsV2/run' import serializeProviderLog from '../../../services/providerLogs/serialize' -import { captureException } from '../../../utils/workers/sentry' import { updateExperimentStatus } from '../experiments/shared' export type RunEvaluationV2JobData = { @@ -133,8 +132,6 @@ export const runEvaluationV2Job = async (job: Job) => { } catch (error) { if (isErrorRetryable(error as Error)) throw error - captureException(error as Error) - if (experiment) { await updateExperimentStatus( { workspaceId, experiment }, diff --git a/packages/core/src/jobs/job-definitions/experiments/runDocumentForExperimentJob.ts b/packages/core/src/jobs/job-definitions/experiments/runDocumentForExperimentJob.ts index 0c1cd349cb..faff8f6e4a 100644 --- a/packages/core/src/jobs/job-definitions/experiments/runDocumentForExperimentJob.ts +++ b/packages/core/src/jobs/job-definitions/experiments/runDocumentForExperimentJob.ts @@ -6,7 +6,6 @@ import { NotFoundError } from '../../../lib/errors' import { ExperimentsRepository } from '../../../repositories' import { isErrorRetryable } from '../../../services/evaluationsV2/run' import { BACKGROUND } from '../../../telemetry' -import { captureException } from '../../../utils/workers/sentry' import { queues } from '../../queues' import { runDocumentAtCommitWithAutoToolResponses } from '../documents/runDocumentAtCommitWithAutoToolResponses' import { @@ -89,8 +88,6 @@ export const runDocumentForExperimentJob = async ( } catch (error) { if (isErrorRetryable(error as Error)) throw error - captureException(error as Error) - await updateExperimentStatus( { workspaceId, diff --git a/packages/core/src/jobs/job-definitions/tracing/ingestSpansJob.ts b/packages/core/src/jobs/job-definitions/tracing/ingestSpansJob.ts index f0592b490d..368e9f7b3f 100644 --- a/packages/core/src/jobs/job-definitions/tracing/ingestSpansJob.ts +++ b/packages/core/src/jobs/job-definitions/tracing/ingestSpansJob.ts @@ -4,9 +4,7 @@ import { SpanIngestionData, } from '../../../constants' import { diskFactory } from '../../../lib/disk' -import { UnprocessableEntityError } from '../../../lib/errors' import { ingestSpans } from '../../../services/tracing/spans/ingest' -import { captureException } from '../../../utils/workers/sentry' export type IngestSpansJobData = { ingestionId: string @@ -28,23 +26,10 @@ export const ingestSpansJob = async (job: Job) => { const payload = await disk.get(key) data = JSON.parse(payload) as SpanIngestionData } catch (error) { - captureException(error as Error) return } const { spans } = data - const result = await ingestSpans({ spans, apiKeyId, workspaceId }) - if (result.error) { - // @ts-expect-error ingestSpans currently ignores all errors but leaving this for the future - if (result.error instanceof UnprocessableEntityError) { - captureException(result.error) - } else throw result.error - } - - try { - await disk.delete(key) - } catch (error) { - captureException(error as Error) - return - } + await ingestSpans({ spans, apiKeyId, workspaceId }) + await disk.delete(key) } diff --git a/packages/core/src/services/copilot/latte/addMessage.ts b/packages/core/src/services/copilot/latte/addMessage.ts index 876441f74d..daa0ea579f 100644 --- a/packages/core/src/services/copilot/latte/addMessage.ts +++ b/packages/core/src/services/copilot/latte/addMessage.ts @@ -16,7 +16,6 @@ import { import { ErrorResult, Result } from '../../../lib/Result' import { PromisedResult } from '../../../lib/Transaction' import { BACKGROUND, TelemetryContext } from '../../../telemetry' -import { captureException } from '../../../utils/workers/sentry' import { WebsocketClient } from '../../../websockets/workers' import { runDocumentAtCommit } from '../../commits' import { addMessages } from '../../documentLogs/addMessages/index' @@ -164,7 +163,8 @@ async function generateLatteResponse(args: GenerateLatteResponseArgs) { }) // Note: failing silently if (consuming.error) { - captureException(consuming.error) + // FIXME: Add captureExeption + console.log(consuming.error) } if (error && !isAbortError(error)) { diff --git a/packages/core/src/services/copilot/latte/credits/consume.ts b/packages/core/src/services/copilot/latte/credits/consume.ts index 5aad7d4325..90839cd238 100644 --- a/packages/core/src/services/copilot/latte/credits/consume.ts +++ b/packages/core/src/services/copilot/latte/credits/consume.ts @@ -8,7 +8,6 @@ import { cache as getCache } from '../../../../cache' import { Result } from '../../../../lib/Result' import Transaction from '../../../../lib/Transaction' import { latteRequests } from '../../../../schema/models/latteRequests' -import { captureException } from '../../../../utils/workers/sentry' import { WebsocketClient } from '../../../../websockets/workers' import { computeLatteCredits } from './compute' import { usageLatteCredits } from './usage' @@ -66,7 +65,8 @@ export async function consumeLatteCredits( const key = LATTE_USAGE_CACHE_KEY(workspace.id) await cache.del(key) } catch (error) { - captureException(error as Error) // Note: failing silently + // FIXME: Add captureExeption + console.log(error as Error) // Note: failing silently } const counting = await usageLatteCredits({ workspace, fresh: true }) diff --git a/packages/core/src/services/copilot/latte/credits/usage.ts b/packages/core/src/services/copilot/latte/credits/usage.ts index 11f0b9c57e..98355fb428 100644 --- a/packages/core/src/services/copilot/latte/credits/usage.ts +++ b/packages/core/src/services/copilot/latte/credits/usage.ts @@ -9,7 +9,6 @@ import { import { Result } from '../../../../lib/Result' import { LatteRequestsRepository } from '../../../../repositories' import { Workspace } from '../../../../schema/types' -import { captureException } from '../../../../utils/workers/sentry' import { computeQuota } from '../../../grants/quota' import { findWorkspaceSubscription } from '../../../subscriptions/data-access/find' @@ -69,7 +68,8 @@ export async function usageLatteCredits( const item = JSON.stringify(usage) await cache.set(key, item, 'EX', LATTE_USAGE_CACHE_TTL) } catch (error) { - captureException(error as Error) // Note: failing silently + // FIXME: Add captureExeption + console.log(error as Error) // Note: failing silently } return Result.ok(usage) diff --git a/packages/core/src/services/copilot/latte/tools/triggers/configValidator.ts b/packages/core/src/services/copilot/latte/tools/triggers/configValidator.ts index dcb05869e4..6258d55cca 100644 --- a/packages/core/src/services/copilot/latte/tools/triggers/configValidator.ts +++ b/packages/core/src/services/copilot/latte/tools/triggers/configValidator.ts @@ -15,7 +15,6 @@ import { import { reloadComponentProps } from '../../../../integrations/pipedream/components/reloadComponentProps' import { LatitudeError } from '@latitude-data/constants/errors' import { PipedreamIntegrationConfiguration } from '../../../../integrations/helpers/schema' -import { captureMessage } from '../../../../../utils/workers/sentry' export async function validateLattesChoices({ pipedream, @@ -242,7 +241,8 @@ export function isValidPropType(propType: string, value: any): boolean { default: // For unknown types, don't be permissive and capture a warning message - captureMessage(`Unknown Pipedream prop type: ${propType}`, 'warning') + // FIXME: Replace captureException + console.log(`Unknown Pipedream prop type: ${propType}`, 'warning') return false } } diff --git a/packages/core/src/services/grants/issue.ts b/packages/core/src/services/grants/issue.ts index 1958a96efc..ec2afef2ee 100644 --- a/packages/core/src/services/grants/issue.ts +++ b/packages/core/src/services/grants/issue.ts @@ -11,7 +11,6 @@ import { Result } from '../../lib/Result' import Transaction from '../../lib/Transaction' import { grants } from '../../schema/models/grants' import { Workspace } from '../../schema/types' -import { captureException } from '../../utils/workers/sentry' import { findWorkspaceSubscription } from '../subscriptions/data-access/find' import { validateGrant } from './validate' @@ -76,13 +75,9 @@ export async function issueGrant( } as Grant if (type === QuotaType.Credits) { - try { - const cache = await getCache() - const key = LATTE_USAGE_CACHE_KEY(workspace.id) - await cache.del(key) - } catch (error) { - captureException(error as Error) // Note: failing silently - } + const cache = await getCache() + const key = LATTE_USAGE_CACHE_KEY(workspace.id) + await cache.del(key) } // TODO - runs dont update automatically when granted an issue diff --git a/packages/core/src/services/tracing/spans/ingest.ts b/packages/core/src/services/tracing/spans/ingest.ts index 42f0134cb2..ad9c162017 100644 --- a/packages/core/src/services/tracing/spans/ingest.ts +++ b/packages/core/src/services/tracing/spans/ingest.ts @@ -13,7 +13,6 @@ import { } from '../../../constants' import { Result } from '../../../lib/Result' import { ApiKey, Workspace } from '../../../schema/types' -import { captureException } from '../../../utils/workers/sentry' import { convertSpanAttributes, convertSpanStatus, @@ -50,14 +49,12 @@ export async function ingestSpans( for (const span of spans) { const converting = convertSpanAttributes(span.attributes || []) if (converting.error) { - captureException(converting.error) continue } const attributes = converting.value const extracting = extractSpanType(attributes) if (extracting.error) { - captureException(extracting.error) continue } const type = extracting.value @@ -68,7 +65,6 @@ export async function ingestSpans( db, ) if (extractingApiKeyAndWorkspace.error) { - captureException(extractingApiKeyAndWorkspace.error) continue } const { apiKey, workspace } = extractingApiKeyAndWorkspace.value @@ -79,7 +75,6 @@ export async function ingestSpans( const enriching = enrichAttributes({ resource, scope, span }) if (enriching.error) { - captureException(enriching.error) continue } span.attributes = enriching.value.filter( @@ -119,7 +114,6 @@ export async function ingestSpans( const processing = await processSpansBulk({ spans, apiKey, workspace }) if (processing.error) { - captureException(processing.error) continue } } diff --git a/packages/core/src/utils/workers/sentry.ts b/packages/core/src/utils/workers/sentry.ts deleted file mode 100644 index 23af2612b8..0000000000 --- a/packages/core/src/utils/workers/sentry.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { env } from '@latitude-data/env' -import * as Sentry from '@sentry/node' - -let sentry: Sentry.NodeClient | undefined - -export const initSentry = () => { - if (sentry) return sentry - - if (env.SENTRY_WORKERS_DSN) { - sentry = Sentry.init({ - dsn: env.SENTRY_WORKERS_DSN, - enabled: !!env.SENTRY_WORKERS_DSN, - environment: env.NODE_ENV, - skipOpenTelemetrySetup: true, - tracesSampleRate: 0, - defaultIntegrations: false, - integrations: [], - }) - - return sentry - } -} - -export const captureException = (error: Error) => { - const s = initSentry() - - if (s) { - s?.captureException(error) - } else { - console.error(error) - } -} - -export const captureMessage = ( - message: string, - severity?: Sentry.SeverityLevel, -) => { - const s = initSentry() - - if (s) { - s?.captureMessage(message, severity) - } else { - console.log(message) - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c11a023de4..bf2b99cc02 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -569,12 +569,6 @@ importers: '@latitude-data/telemetry': specifier: workspace:* version: link:../../packages/telemetry/typescript - '@sentry/cli': - specifier: 2.37.0 - version: 2.37.0 - '@sentry/node': - specifier: 9.9.0 - version: 9.9.0 '@t3-oss/env-core': specifier: '*' version: 0.13.8(typescript@5.9.3)(zod@4.1.8) @@ -5106,52 +5100,6 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@sentry/cli-darwin@2.37.0': - resolution: {integrity: sha512-CsusyMvO0eCPSN7H+sKHXS1pf637PWbS4rZak/7giz/z31/6qiXmeMlcL3f9lLZKtFPJmXVFO9uprn1wbBVF8A==} - engines: {node: '>=10'} - os: [darwin] - - '@sentry/cli-linux-arm64@2.37.0': - resolution: {integrity: sha512-2vzUWHLZ3Ct5gpcIlfd/2Qsha+y9M8LXvbZE26VxzYrIkRoLAWcnClBv8m4XsHLMURYvz3J9QSZHMZHSO7kAzw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux, freebsd] - - '@sentry/cli-linux-arm@2.37.0': - resolution: {integrity: sha512-Dz0qH4Yt+gGUgoVsqVt72oDj4VQynRF1QB1/Sr8g76Vbi+WxWZmUh0iFwivYVwWxdQGu/OQrE0tx946HToCRyA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux, freebsd] - - '@sentry/cli-linux-i686@2.37.0': - resolution: {integrity: sha512-MHRLGs4t/CQE1pG+mZBQixyWL6xDZfNalCjO8GMcTTbZFm44S3XRHfYJZNVCgdtnUP7b6OHGcu1v3SWE10LcwQ==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [linux, freebsd] - - '@sentry/cli-linux-x64@2.37.0': - resolution: {integrity: sha512-k76ClefKZaDNJZU/H3mGeR8uAzAGPzDRG/A7grzKfBeyhP3JW09L7Nz9IQcSjCK+xr399qLhM2HFCaPWQ6dlMw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux, freebsd] - - '@sentry/cli-win32-i686@2.37.0': - resolution: {integrity: sha512-FFyi5RNYQQkEg4GkP2f3BJcgQn0F4fjFDMiWkjCkftNPXQG+HFUEtrGsWr6mnHPdFouwbYg3tEPUWNxAoypvTw==} - engines: {node: '>=10'} - cpu: [x86, ia32] - os: [win32] - - '@sentry/cli-win32-x64@2.37.0': - resolution: {integrity: sha512-nSMj4OcfQmyL+Tu/jWCJwhKCXFsCZW1MUk6wjjQlRt9SDLfgeapaMlK1ZvT1eZv5ZH6bj3qJfefwj4U8160uOA==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@sentry/cli@2.37.0': - resolution: {integrity: sha512-fM3V4gZRJR/s8lafc3O07hhOYRnvkySdPkvL/0e0XW0r+xRwqIAgQ5ECbsZO16A5weUiXVSf03ztDL1FcmbJCQ==} - engines: {node: '>= 10'} - hasBin: true - '@sentry/core@9.46.0': resolution: {integrity: sha512-it7JMFqxVproAgEtbLgCVBYtQ9fIb+Bu0JD+cEplTN/Ukpe6GaolyYib5geZqslVxhp2sQgT+58aGvfd/k0N8Q==} engines: {node: '>=18'} @@ -17435,46 +17383,6 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@sentry/cli-darwin@2.37.0': - optional: true - - '@sentry/cli-linux-arm64@2.37.0': - optional: true - - '@sentry/cli-linux-arm@2.37.0': - optional: true - - '@sentry/cli-linux-i686@2.37.0': - optional: true - - '@sentry/cli-linux-x64@2.37.0': - optional: true - - '@sentry/cli-win32-i686@2.37.0': - optional: true - - '@sentry/cli-win32-x64@2.37.0': - optional: true - - '@sentry/cli@2.37.0': - dependencies: - https-proxy-agent: 5.0.1 - node-fetch: 2.7.0 - progress: 2.0.3 - proxy-from-env: 1.1.0 - which: 2.0.2 - optionalDependencies: - '@sentry/cli-darwin': 2.37.0 - '@sentry/cli-linux-arm': 2.37.0 - '@sentry/cli-linux-arm64': 2.37.0 - '@sentry/cli-linux-i686': 2.37.0 - '@sentry/cli-linux-x64': 2.37.0 - '@sentry/cli-win32-i686': 2.37.0 - '@sentry/cli-win32-x64': 2.37.0 - transitivePeerDependencies: - - encoding - - supports-color - '@sentry/core@9.46.0': optional: true