import * as Sentry from '@sentry/nextjs' import { shouldDropExpectedProductSentryEvent } from './lib/observability/expectedProductError' const dsn = process.env.SENTRY_DSN?.trim() || process.env.NEXT_PUBLIC_SENTRY_DSN?.trim() /** Iran runtime cannot reach ingest.de; send via Finland relay. */ function sentryTunnel(): string | undefined { const fromEnv = process.env.SENTRY_TUNNEL?.trim() if (fromEnv) return fromEnv if (process.env.NODE_ENV === 'production') return 'https://sentry-relay.ghabilee.ir/monitoring' return undefined } function tracesSampleRate(): number { const raw = process.env.SENTRY_TRACES_SAMPLE_RATE ?? '0.1' const parsed = Number.parseFloat(raw) return Number.isFinite(parsed) ? parsed : 0.1 } export function initEdgeSentry() { // فقط در production — در local/dev نویز و مصرف سهمیه نمی‌خواهیم if (process.env.NODE_ENV !== 'production' || !dsn) return Sentry.init({ dsn, tunnel: sentryTunnel(), environment: process.env.SENTRY_ENVIRONMENT?.trim() || process.env.NODE_ENV || 'production', release: process.env.SENTRY_RELEASE?.trim() || process.env.NEXT_PUBLIC_APP_VERSION || undefined, tracesSampleRate: tracesSampleRate(), sendDefaultPii: false, beforeSend(event, hint) { if (shouldDropExpectedProductSentryEvent(event, hint.originalException)) return null return event }, }) }