Blueprint
Push & subscriptions
Web Push (VAPID), subscription APIs, and related models.
Overview
Push uses Web Push with a public VAPID key exposed to the client.
| Route | Purpose |
|---|---|
GET /api/vapid-public-key | Returns the public VAPID key for pushManager.subscribe |
POST /api/notifications/subscribe | Saves PushSubscription; optional Binance Alpha and website reminder flags; accepts logged-in uuid or anonymousId (src/app/api/notifications/subscribe/route.ts) |
POST /api/notifications/unsubscribe | Remove subscription |
GET /api/notifications/check | Subscription / notification checks |
POST /api/notifications/migrate | Migration path for stored subscriptions |
Service layer: src/services/push-notification.ts; models such as createOrUpdateBinanceAlphaSubscription in src/models/notification.ts.
Data flow
- Client fetches
/api/vapid-public-key. - Browser creates subscription → POST
/api/notifications/subscribewith JSON body. - Server persists endpoint + keys; cron or event jobs may send notifications (see cron docs for notify-events, notify-website-reminders, etc.).
Key files
src/app/api/vapid-public-key/route.tssrc/app/api/notifications/**src/services/push-notification.tssrc/models/notification.ts(and blacklist:addToBlacklistused from sync flows)
Dependencies
Environment
NEXT_PUBLIC_VAPID_PUBLIC_KEY— returned by/api/vapid-public-key.VAPID_PRIVATE_KEY,VAPID_SUBJECT— server-side Web Push (src/services/push-notification.ts).
Database (src/db/schema.ts)
push_subscriptions,binance_alpha_subscriptions,website_reminder_subscriptions