import { adapterEnv } from "@/config/env"; import { scrubSentryEvent, sentrySafeError } from "./scrub"; export { scrubSentryEvent, sentrySafeError }; export function buildSentryPayload(error: unknown, tags: Record) { const safe = sentrySafeError(error); return scrubSentryEvent({ message: safe.message, extra: tags, exception: { values: [{ value: error instanceof Error ? error.message : "UNEXPECTED" }] }, }); } export function captureAdapterException(error: unknown, tags: Record): void { if (!process.env.SENTRY_DSN && !process.env.NEXT_PUBLIC_SENTRY_DSN) return; void import("@sentry/nextjs").then((Sentry) => { Sentry.withScope((scope) => { scope.setTag("module", "spreadsheet-adapter"); scope.setTag("environment_tier", adapterEnv()); for (const [key, value] of Object.entries(tags)) scope.setTag(key, value.slice(0, 120)); Sentry.captureException(sentrySafeError(error)); }); }); } export function sentryInitOptions(dsn: string | undefined) { if (!dsn) return null; return { dsn, // Ambiente lógico do Adaptador: homologação e produção nunca se misturam // no mesmo grupo de eventos, mesmo com NODE_ENV=production nos dois. environment: process.env.SENTRY_ENVIRONMENT || adapterEnv(), release: process.env.SENTRY_RELEASE || process.env.NEXT_PUBLIC_SENTRY_RELEASE, sendDefaultPii: false, }; }