metatron-open-seo/src/client/lib/error-messages.ts

49 lines
2.2 KiB
TypeScript

import { isErrorCode, type ErrorCode } from "@/shared/error-codes";
const STANDARD_MESSAGES: Record<ErrorCode, string> = {
UNAUTHENTICATED: "Please sign in and try again.",
AUTH_CONFIG_MISSING:
"OpenSEO auth is not configured. Follow the README setup steps for Cloudflare Access.",
PAYMENT_REQUIRED:
"An active hosted subscription is required before you can use OpenSEO.",
INSUFFICIENT_CREDITS:
"You've run out of credits. Add more credits or upgrade your plan to continue.",
FORBIDDEN: "You do not have access to this resource.",
NOT_FOUND: "The requested resource was not found.",
AUDIT_CAPACITY_REACHED:
"You've reached audit capacity for your account. Delete old audits from your projects to start a new one.",
VALIDATION_ERROR: "Please check your input and try again.",
CRAWL_TARGET_BLOCKED: "This crawl target is blocked by security policy.",
BACKLINKS_NOT_ENABLED:
"Backlinks is not enabled for the connected DataForSEO account yet.",
BACKLINKS_BILLING_ISSUE:
"The connected DataForSEO account has a billing or balance issue.",
AI_SEARCH_NOT_ENABLED:
"AI Optimization is not enabled for the connected DataForSEO account yet.",
AI_SEARCH_BILLING_ISSUE:
"The connected DataForSEO account has a billing or balance issue.",
DATAFORSEO_AUTH_FAILED:
"DataForSEO rejected the API key. Check that DATAFORSEO_API_KEY is the base64 of your DataForSEO login:password.",
RATE_LIMITED: "Too many requests. Please wait and try again.",
UPSTREAM_UNAVAILABLE:
"The data provider is temporarily unavailable. Please retry in a moment.",
CONFLICT: "This request conflicts with existing data.",
INTERNAL_ERROR:
"An unexpected error occurred. Please check server logs and try again.",
};
export function getStandardErrorMessage(
error: unknown,
fallback: string = STANDARD_MESSAGES.INTERNAL_ERROR,
): string {
if (!(error instanceof Error)) return fallback;
if (isErrorCode(error.message)) return STANDARD_MESSAGES[error.message];
if (error.message) return error.message;
return fallback;
}
export function getErrorCode(error: unknown): ErrorCode | null {
if (!(error instanceof Error)) return null;
return isErrorCode(error.message) ? error.message : null;
}