Changelog 3.4.10 → 3.5.0:
Summary
Помимо нескольких пользовательских функций (контроль доступа к регистрации, premium-правила пробного периода, доступ к меню бота, уведомления о сбросе квоты трафика) релиз содержит очень крупный внутренний рефакторинг — типизация контрактов, миграция фронтенда на Svelte 5 runes, декомпозиция god-файлов и пакетирование платёжных провайдеров.
Changelog
- Добавлен контроль доступа к регистрации (
REGISTRATION_INVITE_ONLY_ENABLED): при включении новые публичные регистрации допускаются только по валидной пригласительной ссылке; существующие пользователи продолжают входить через Telegram, Web App, email-код, magic-link и пароль. - Добавлены правила premium-доступа в пробном периоде: отдельный лимит premium-трафика (
TRIAL_PREMIUM_TRAFFIC_LIMIT_GB) и список premium Internal Squads для trial (TRIAL_PREMIUM_SQUAD_UUIDS), с применением квоты к premium-сквадам. - Добавлена возможность выключения меню Telegram-бота (оставляет минимальное количество кнопок и побуждает использовать веб апп).
- Добавлены уведомления о сбросе квоты трафика для regular- и premium-тарифов — для пользователей, которые потратили (или почти потратили) трафик в предыдущем периоде.
- Исправления платежей: сохранение статуса успешного платежа, детали неуспешных попыток, отображение единиц entitlement в логах, подавление устаревших уведомлений о сбое оплаты, предотвращение циклов импорта при старте провайдеров.
- Исправления Admin/Mini App: рендер строк datatable после первой загрузки, корректные surface-токены светлой темы, центрирование спиннера логотипа, уточнены подписи настроек, защита от no-op обновлений стора.
- Улучшена диагностика install-wizard.
Рефакторинг и инфраструктура
- Типизированные HTTP-контракты и OpenAPI: pydantic request/response-модели для admin- и webapp-роутов (вместо «свободных» схем), генерация
docs/openapi.jsonиfrontend/.../openapi.generated.ts, типизированные path-builders API-клиента, реестр route-contracts и проверки контрактов в CI. - Контракты доменных событий: одна pydantic-модель на событие (
extra="forbid"), публикация черезemit_model, регенерируемый каталог событий. - Миграция фронтенда на Svelte 5 runes: все компоненты и сторы переведены на runes, удалён legacy-синтаксис (
export let,$:, слоты и динамические компоненты → snippets), runes-only режим закреплён сборкой и линтом, убран datatable runes-bridge. - Декомпозиция
App.svelte: shell-state стор на runes и вынос десятков runtime/action/helper/view-модулей (boot, resume, auth, activation, telegram, navigation, billing-deeplink и др.), оболочка приложения переведена на TypeScript. - Типизация бэкенда (mypy ratchet): handlers, services, payment providers, db, middlewares, config, keyboards и web-плагины; mypy зелёный по всему enforced-скоупу, скоуп расширен в CI.
- Пакетирование платёжных провайдеров: каждый провайдер — отдельный пакет (yookassa, stripe, wata, paykilla, heleket, platega, lava, severpay, freekassa, pally, cryptopay, cloudpayments, stars), общий link-flow engine + provider descriptor, общая обработка webhook'ов, import-only фасады и conformance-контракты.
- Декомпозиция god-файлов: разбиты admin-секции, email-шаблоны, tariff-traffic worker, panel API service, subscription lifecycle, admin sync workflow, user start flow, subscription core и billing/auth/asset-роуты.
- Границы архитектуры: проверки import-границ фасадов и runtime-хабов, отвязка фасадов от runtime-импортов, типизированные settings-views в
config, гейты согласованности web-ответов, заморозка публичных поверхностей фасадов тестами. - Тесты и QA: реорганизация набора по ответственности, Vitest-coverage, Playwright mock-smoke e2e-гейт, единый dev/QA compose-стенд, контракты webhook/link-flow провайдеров.
- Инфраструктура и тулинг: нормализация LF-окончаний через
.gitattributes, агрегирующие команды качества, выравнивание root-check-скрипта с гейтами CI, contract-checks в CI. - Документация: интерактивный API reference на docs-site, how-to рецепты (провайдер/событие/эндпоинт), гайды контрибьютора и агента, обзор архитектуры, security scaffolding.
Зависимости и безопасность
- Security-фикс (high):
@playwright/testподнят с^1.50.1до^1.55.1(lockfile резолвится в 1.61.1) — закрывает GHSA-7mvr-c777-76hp (Playwright скачивал и устанавливал браузеры без проверки подлинности SSL-сертификата). Открытых Dependabot-алертов: 0. - Backend:
sqlalchemy[asyncio]2.0.49 → 2.0.51 (patch), YooKassa SDK 3.10.1 → 3.11.0 (minor); ранее в диапазоне —pydantic-settings2.14.1 → 2.14.2. - Frontend dev-тулинг до актуальных версий: eslint 10.6.0, svelte 5.56.4, vite 8.1.0, svelte-check 4.7.1, typescript-eslint 8.62.0, prettier 3.9.0, eslint-plugin-svelte 3.20.0, svelte-eslint-parser 1.8.0, @tanstack/svelte-query 6.1.35, @internationalized/date 3.12.2, tailwindcss / @tailwindcss/cli / @tailwindcss/vite 4.3.1; применено форматирование prettier 3.9.0.
- Гигиена lockfile: перегенерирован консистентный
frontend/package-lock.json, чтобыnpm ciпроходил во всех фронтенд-джобах CI.
Notes
- Новые переменные окружения:
REGISTRATION_INVITE_ONLY_ENABLED,TRIAL_PREMIUM_TRAFFIC_LIMIT_GB,TRIAL_PREMIUM_SQUAD_UUIDS; dev/QA-стенд добавляетDEV_POSTGRES_PORTиQA_*переменные. Новых миграций БД нет.
What's Changed
- chore(deps): bump the pip group across 2 directories with 1 update by @dependabot[bot] in #40
- Feature/api refactor by @3252a8 in #41
- Feature/architecture hardening by @3252a8 in #42
- Feature/architecture refactoring by @3252a8 in #43
- Feature/provider orchestration unification by @3252a8 in #44
- Feature/svelte runes by @3252a8 in #45
- Registration gate, trial premium rules, typed API contracts + large refactor by @3252a8 in #46
Full Changelog: v3.4.10...v3.5.0