|
Feature: web push slice 2, enable/disable UI + service worker delivery
The visible half of docs/webpush-design.md: an owner can now turn on
notifications per device, pick what to be notified about, and send a test.
- Routes: GET /push/vapid (the public key, public by design), POST
/push/subscribe|/unsubscribe|/alerts|/test (logged-in; a subscription row
is personal, only its creator may touch it). Mounted before the /:slug
catch-all, like /paid.
- Service worker: push handler (shows the encrypted JSON payload
{type,title,body,url}; same-type bursts collapse via tag) and
notificationclick (focus an open tab and navigate, else open a window).
Cache name bumped to v19.
- Beheer -> Notificaties (/admin/push): per-device toggle, alert-type
checkboxes (saved prefs shown for the current device), test button,
linked-devices list with remove, iOS install hint (push needs an installed
PWA there), plain <script> so injectCspNonce provides the real nonce.
- Not premium-gated: notifications are infrastructure, not an extra.
Verified live on a dev server: /push/vapid serves the generated key,
storage/.vapid is 0600, sw.js carries both handlers, and an unauthenticated
subscribe is refused.
Changed files:
src/server.js
- mount /push + /admin/push; sw.js push/notificationclick handlers, v19
src/views/pages/admin.ejs
- "Notificaties" button (always visible, not premium)
New file:
src/routes/push.js
- vapid/subscribe/unsubscribe/alerts/test
src/routes/admin-push.js
- the Beheer page (requireSiteManager)
src/views/pages/admin-push.ejs
- device toggle, prefs, test, device list, iOS hint
-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>
|