57 lines
2.3 KiB
TypeScript
57 lines
2.3 KiB
TypeScript
import { BackendError } from '@/services/backend';
|
|||
|
|
|
||
|
|
const NETWORK_PATTERN = /failed to fetch|networkerror|network request failed|load failed|fetch failed/i;
|
||
|
|
|
||
|
|
export function isBackendNetworkError(error: unknown): boolean {
|
||
|
|
if (error instanceof BackendError) {
|
||
|
|
return error.status === 0 || error.code === 'NETWORK_ERROR';
|
||
|
|
}
|
||
|
|
if (error instanceof Error) {
|
||
|
|
return NETWORK_PATTERN.test(error.message);
|
||
|
|
}
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getBackendErrorMessage(
|
||
|
|
error: unknown,
|
||
|
|
fallback = 'خطا در ارتباط با سرور. لطفاً دوباره تلاش کنید.'
|
||
|
|
): string {
|
||
|
|
if (error instanceof BackendError) {
|
||
|
|
if (error.status === 0 || error.code === 'NETWORK_ERROR') {
|
||
|
|
return 'سرور در دسترس نیست. لطفاً چند لحظه بعد دوباره تلاش کنید.';
|
||
|
|
}
|
||
|
|
if (error.status === 401 || error.code === 'UNAUTHORIZED') {
|
||
|
|
return 'نشست شما منقضی شده است. لطفاً دوباره وارد شوید.';
|
||
|
|
}
|
||
|
|
if (error.status === 503 || error.code === 'SERVICE_UNAVAILABLE') {
|
||
|
|
if (error.message && /هوش مصنوعی|OPENAI/.test(error.message)) {
|
||
|
|
return error.message;
|
||
|
|
}
|
||
|
|
return 'سرویس هوش مصنوعی موقتاً در دسترس نیست. لطفاً چند لحظه بعد دوباره تلاش کنید.';
|
||
|
|
}
|
||
|
|
if (error.code === 'INVALID_CREDENTIALS') {
|
||
|
|
return 'ایمیل یا رمز عبور اشتباه است. لطفاً دوباره تلاش کنید یا ثبتنام کنید.';
|
||
|
|
}
|
||
|
|
if (error.code === 'RATE_LIMIT_EXCEEDED') {
|
||
|
|
return 'تعداد تلاشها بیش از حد مجاز است. لطفاً کمی صبر کنید.';
|
||
|
|
}
|
||
|
|
if (error.code === 'CONFLICT') {
|
||
|
|
return error.message || 'این عملیات قبلاً انجام شده است.';
|
||
|
|
}
|
||
|
|
if (error.code === 'VALIDATION_ERROR') {
|
||
|
|
return error.message || 'اطلاعات واردشده نامعتبر است.';
|
||
|
|
}
|
||
|
|
return error.message || fallback;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (error instanceof Error && NETWORK_PATTERN.test(error.message)) {
|
||
|
|
return 'سرور در دسترس نیست. لطفاً چند لحظه بعد دوباره تلاش کنید.';
|
||
|
|
}
|
||
|
|
|
||
|
|
if (error instanceof Error && error.message) {
|
||
|
|
return error.message;
|
||
|
|
}
|
||
|
|
|
||
|
|
return fallback;
|
||
|
|
}
|