Skip to content

v3.5.0

Latest

Choose a tag to compare

@3252a8 3252a8 released this 27 Jun 19:53

Changelog 3.4.103.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-settings 2.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