feat: persist push subscriptions in sqlite
All checks were successful
CI / Lint, typecheck and build (push) Successful in 9m54s

This commit is contained in:
zv
2026-06-13 22:03:37 +02:00
parent 5a8e39dbe2
commit 1ae1be68ec
11 changed files with 668 additions and 68 deletions

View File

@@ -31,6 +31,14 @@ Endpointy harmonogramu wymagają też sekretu crona w produkcji:
NOTIFICATIONS_CRON_SECRET=
```
Subskrypcje Web Push i historia wysyłek są zapisywane w SQLite:
```bash
WTR_DATABASE_PATH=./data/wtr.sqlite
```
Jeśli zmienna nie jest ustawiona, aplikacja używa `./data/wtr.sqlite` względem katalogu projektu.
## Preferencje Subskrypcji
Subskrypcja Web Push zapisuje:
@@ -114,6 +122,6 @@ x-cron-secret: <NOTIFICATIONS_CRON_SECRET>
## Ograniczenia
Obecny `lib/push-store.ts` przechowuje subskrypcje i historię wysyłek w pamięci procesu. Po restarcie procesu te dane znikają. Produkcja wymaga trwałego magazynu, np. bazy danych albo KV.
`lib/push-store.ts` przechowuje subskrypcje i historię wysyłek w lokalnym SQLite przez `better-sqlite3`. Dane przetrwają restart procesu, jeśli plik wskazany przez `WTR_DATABASE_PATH` znajduje się w trwałym katalogu. Na self-hostingu warto backupować plik bazy razem z plikami `-wal` i `-shm`, jeśli istnieją.
Powiadomienie testowe jest wysyłane na konkretny endpoint subskrypcji przekazany z `/settings`, a nie broadcastowane do wszystkich urządzeń.