🔒 Аудит: безопасность, TypeScript, UI, BottomNav

Безопасность:
- proxy: белый список путей (только /sub/*), POST заблокирован
- console.log заменён на logger (утечки URL/данных)
- OnboardingFlow: убраны --tg-theme-* (не существуют в проекте)

TypeScript (0 ошибок):
- tsconfig target es5→es2017 (regex /u flag fix)
- layout.tsx: viewport перенесён в metadata (Next.js 13.5)
- telegram-webhook: fix text possibly undefined
- hooks/useTelegramWebApp: fix Object possibly undefined
- types/telegram: убрана дублирующая Window декларация

UI:
- BottomNav: новый компонент (Назад/Главная/Помощь)
- safe-area-bottom CSS класс добавлен в globals.css
- dashboard: spacer h-20, toast поднят над BottomNav
- OnboardingFlow: цены 149/249/350₽ (были 200/350/500₽)

Очистка:
- page_NEW.tsx удалён локально (не был в git)
This commit is contained in:
Umbrix Dev
2026-02-08 18:59:02 +03:00
parent 3dffb35eaa
commit 33b20b979f
21 changed files with 1446 additions and 266 deletions

View File

@@ -69,9 +69,9 @@ export class MarzbanApiClient {
return data;
}
console.warn('API endpoint returned error:', response.status, response.statusText);
if (typeof window === 'undefined') console.warn('API endpoint returned error:', response.status, response.statusText);
} catch (apiError) {
console.warn('API failed, falling back to HTML scraping:', apiError);
if (typeof window === 'undefined') console.warn('API failed, falling back to HTML scraping:', apiError);
}
// ❌ Fallback to HTML scraping (старый метод)
@@ -91,7 +91,7 @@ export class MarzbanApiClient {
this.cache.set(`info_${token}`, { data, timestamp: Date.now() });
return data;
} catch (fallbackError) {
console.error('Both API and HTML scraping failed:', fallbackError);
if (typeof window === 'undefined') console.error('Both API and HTML scraping failed:', fallbackError);
throw new Error('Не удалось загрузить данные подписки');
}
}