/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { useNavigate, useRouter } from '@tanstack/react-router' import { useTranslation } from 'react-i18next' import { Button } from '@/components/ui/button' import { cn } from '@/lib/utils' const FEEDBACK_URL = 'https://github.com/QuantumNous/new-api/issues' type GeneralErrorProps = React.HTMLAttributes & { minimal?: boolean error?: unknown } function getHttpStatus(error: unknown): number | undefined { if (typeof error !== 'object' || error === null) return undefined const response = (error as Record).response if (typeof response !== 'object' || response === null) return undefined const status = (response as Record).status return typeof status === 'number' ? status : undefined } export function GeneralError({ className, minimal = false, error, }: GeneralErrorProps) { const { t } = useTranslation() const navigate = useNavigate() const { history } = useRouter() const status = getHttpStatus(error) const isRateLimited = status === 429 const title = isRateLimited ? t('Too many requests') : `${t('Oops! Something went wrong')} ${`:')`}` const description = isRateLimited ? t('Please wait a moment before trying again.') : t('Please try again later.') return (
{!minimal && (

{status ?? 500}

)} {title}

{t('We apologize for the inconvenience.')}
{description}

{!minimal && (

{t('If this keeps happening, please report it on GitHub Issues.')}

)} {!minimal && (
)}
) }