- Заполнены заглушки: user-friendly-messages, health, aria, keyboard - backend: core/auth.py, /api/v1/stats; cached-api → backend-client при USE_MOCK_DATA=false - .env.example, middleware auth (skip при USE_MOCK_DATA), убраны неиспользуемые deps - Страницы: airworthiness, maintenance, defects, modifications; AircraftAddModal, Sidebar - Главная страница: REFLY — Контроль лётной годности (вместо Numerology App) - Линт/скрипты: eslintrc, security, cleanup, logs, api inbox/knowledge Co-authored-by: Cursor <cursoragent@cursor.com>
25 lines
1.3 KiB
TypeScript
25 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): string {
|
||
const r = getUserFriendlyError(error);
|
||
return r?.title || 'Произошла ошибка';
|
||
}
|