import { z } from "zod"; const ERROR_CODES = [ "UNAUTHENTICATED", "AUTH_CONFIG_MISSING", "PAYMENT_REQUIRED", "INSUFFICIENT_CREDITS", "FORBIDDEN", "NOT_FOUND", "AUDIT_CAPACITY_REACHED", "AUDIT_PAGE_LIMIT_EXCEEDED", "AUDIT_ALREADY_RUNNING", "VALIDATION_ERROR", "CRAWL_TARGET_BLOCKED", "BACKLINKS_BILLING_ISSUE", "AI_SEARCH_BILLING_ISSUE", "DATAFORSEO_AUTH_FAILED", "RATE_LIMITED", "UPSTREAM_UNAVAILABLE", "CONFLICT", "INTERNAL_ERROR", ] as const; export const errorCodeSchema = z.enum(ERROR_CODES); export type ErrorCode = z.infer; const NON_REPORTABLE_ERROR_CODES = new Set([ "UNAUTHENTICATED", // External throttling (Google Analytics quota, Autumn, DataForSEO): expected // and transient, and nothing in the app can act on it. "RATE_LIMITED", "NOT_FOUND", "PAYMENT_REQUIRED", "INSUFFICIENT_CREDITS", "VALIDATION_ERROR", "AUDIT_CAPACITY_REACHED", "AUDIT_PAGE_LIMIT_EXCEEDED", "AUDIT_ALREADY_RUNNING", ]); export function isErrorCode(value: string): value is ErrorCode { return errorCodeSchema.safeParse(value).success; } export function shouldCaptureAppErrorCode( code: ErrorCode | null | undefined, ): boolean { return code == null || !NON_REPORTABLE_ERROR_CODES.has(code); }