feat: раздел Настройки (.env-оверрайды UI) и PWA с web-push каналом
Настройки: реестр app/settings_registry.py + хранение оверрайдов в
app_settings (settings_store, без кэша). Дефолт из .env, перебивается из
админки без перезапуска. Секреты (VAPID private, тг-токен, SMTP-пароль)
— write-only: записываются через UI, никогда не возвращаются API.
Эндпоинты GET/PUT /api/v1/admin/settings.

Web-push: канал push (целенаправлен как user — адресат из payload.user_id),
таблица push_subscriptions, самопользовательская подписка браузера через
/me/push* (upsert по endpoint, чужой 404). Воркер send_push: pywebpush
(DER base64url ключи), 404/410 — подписка удаляется, ретраи как у s2s.
PWA: manifest + sw.js (pass-through, push/notificationclick), иконки из
gnexus-mark.svg, /settings с личным пуш-блоком и админ-конфигами.

Миграция 0006 (ck_channel ×3 +push, app_settings, push_subscriptions).
Верификация: 47 бэкенд-проверок + mecheck/retcheck + 17 puppeteer — ALL OK.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 9fee6f4 commit 8f3680c9a7313358582a630fce6dd9f310adfaad
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 5 hours ago
Showing 29 changed files
View
CLAUDE.md
View
alembic/versions/20261003_0006_push_settings.py 0 → 100644
View
app/api/admin_routes.py
View
app/api/admin_schemas.py
View
app/api/events_routes.py
View
app/api/me_routes.py
View
app/models/__init__.py
View
app/models/dicts.py
View
app/models/events.py
View
app/models/settings.py 0 → 100644
View
app/settings_registry.py 0 → 100644
View
app/settings_store.py 0 → 100644
View
app/worker/senders.py
View
app/worker/tasks.py
View
docs/05-ingestion-api.md
View
docs/06-settings-pwa.md 0 → 100644
View
frontend/index.html
View
frontend/public/assets/imgs/apple-touch-icon-180.png 0 → 100644
View
frontend/public/assets/imgs/synapse-icon-192.png 0 → 100644
View
frontend/public/assets/imgs/synapse-icon-512.png 0 → 100644
View
frontend/public/manifest.webmanifest 0 → 100644
View
frontend/public/sw.js 0 → 100644
View
frontend/src/App.vue
View
frontend/src/api.js
View
frontend/src/main.js
View
frontend/src/push.js 0 → 100644
View
frontend/src/router.js
View
frontend/src/views/SettingsView.vue 0 → 100644
View
requirements.txt