28 lines
1.3 KiB
TypeScript
28 lines
1.3 KiB
TypeScript
/** Понятные пользователю сообщения об ошибках */
|
||
export function getUserFriendlyError(error: unknown): { title: string; action?: string } | null {
|
||
if (!error) return null;
|
||
const msg = error instanceof Error ? error.message : String(error);
|
||
const title = msg || 'Произошла ошибка';
|
||
if (msg.includes('401') || msg.includes('Unauthorized')) {
|
||
return { title: 'Требуется авторизация', action: 'Войдите в систему' };
|
||
}
|
||
if (msg.includes('403') || msg.includes('Forbidden')) {
|
||
return { title: 'Нет доступа', action: 'Проверьте права доступа' };
|
||
}
|
||
if (msg.includes('404') || msg.includes('Not found')) {
|
||
return { title: 'Не найдено', action: 'Обновите страницу' };
|
||
}
|
||
if (msg.includes('network') || msg.includes('fetch') || msg.includes('ECONNREFUSED')) {
|
||
return { title: 'Ошибка сети', action: 'Проверьте подключение и повторите попытку' };
|
||
}
|
||
return { title, action: 'Повторите попытку позже' };
|
||
}
|
||
|
||
export function getContextualErrorMessage(
|
||
error: unknown,
|
||
_context?: string | { action?: string; resource?: string }
|
||
): string {
|
||
const r = getUserFriendlyError(error);
|
||
return r?.title || 'Произошла ошибка';
|
||
}
|