🔒 Аудит: безопасность, 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

@@ -3,6 +3,7 @@
import { NextRequest, NextResponse } from 'next/server';
import mysql from 'mysql2/promise';
import { logger } from '@/lib/logger';
// Database connection config from ENV
const dbConfig = {
@@ -31,7 +32,7 @@ export async function GET(request: NextRequest) {
// Return mock data if DB not configured (dev mode)
if (!isDbConfigured) {
console.log('⚠️ Referral stats skipped: DB not configured');
logger.info('⚠️ Referral stats skipped: DB not configured');
return NextResponse.json({
success: true,
hasReferrals: false,
@@ -98,7 +99,7 @@ export async function GET(request: NextRequest) {
await connection.end();
}
} catch (error) {
console.error('Referral stats error:', error);
logger.error('Referral stats error:', error);
return NextResponse.json(
{
success: false,

View File

@@ -3,6 +3,7 @@
import { NextRequest, NextResponse } from 'next/server';
import mysql from 'mysql2/promise';
import { logger } from '@/lib/logger';
// Database connection config from ENV
const dbConfig = {
@@ -31,7 +32,7 @@ export async function POST(request: NextRequest) {
// Return mock success if DB not configured (dev mode)
if (!isDbConfigured) {
console.log('⚠️ Referral tracking skipped: DB not configured');
logger.info('⚠️ Referral tracking skipped: DB not configured');
return NextResponse.json({
success: true,
message: 'Referral tracking disabled (dev mode)',
@@ -138,7 +139,7 @@ export async function POST(request: NextRequest) {
await connection.end();
}
} catch (error) {
console.error('Referral track error:', error);
logger.error('Referral track error:', error);
return NextResponse.json(
{
success: false,