|
fix: деплой-фиксы + автоотмена зависших логинов (sweeper)
Четыре бага, найденных при деплое 2026-10-05, и одна фича (запрос владельца: pending-логин без аккаунта через 15 мин от начала входа отменяется автоматически). Фиксы: - Dockerfile: COPY frontend/package-lock.json — без него npm ci падал; - tg/manager.py: импорт TelegramClient (NameError в аннотациях); - mcp/server.py: TransportSecuritySettings(enable_dns_rebinding_protection= False) — FastMCP при дефолтном host=127.0.0.1 резал 421 «Invalid Host header» всем запросам через домен (сервис за nginx со своим гардом); - tg/login_flow.py: property session у TelegramClientWithSession — _finalize падал на client.session.save() сразу после успешного sign_in (Telegram авторизацию засчитывал, сессия терялась). Плюс диагностический лог типа доставки кода ([login] send_code_request ok: sent=…). Фича: автоотмена зависших логинов. - config.py: TGCLIENT_LOGIN_STALE_MINUTES (default 15); - tg/login_flow.py: purge_stale_logins() — pending-логины старше N минут от created_at отменяются как ручная DELETE (_cleanup: строка в БД + disconnect RAM-клиента — иначе зомби-коннект к Telegram); - main.py: login_sweeper_loop (30 с) в lifespan с graceful cancel; - auth.py: purge_expired больше не удаляет login_sessions — sweeper единственный владелец их очистки (GC по expires_at disconnect не делал). Верифицировано на деплое: тестовая строка (created_at=now-20min) вычищена sweeper'ом за 40 с; health ok. |
|---|
|
|
| backend/Dockerfile |
|---|
| backend/app/auth.py |
|---|
| backend/app/config.py |
|---|
| backend/app/main.py |
|---|
| backend/app/mcp/server.py |
|---|
| backend/app/tg/login_flow.py |
|---|
| backend/app/tg/manager.py |
|---|