diff options
| author | Claudomator Agent <agent@claudomator> | 2026-03-17 08:04:52 +0000 |
|---|---|---|
| committer | Claudomator Agent <agent@claudomator> | 2026-03-17 08:04:52 +0000 |
| commit | 0db05b0fa6de318f164a1d73ddc55db9c59f1fc3 (patch) | |
| tree | d2253dd84477e4e170d0d518ebcfd702943dc6e0 /web/app.js | |
| parent | 94e45575a34e8672f8b405c54cabd8e524281fef (diff) | |
fix: unsubscribe stale push subscription before re-subscribing
When the VAPID key changes (e.g. after the key-swap fix), the browser's
cached PushSubscription was created with the old key. Calling
PushManager.subscribe() with a different applicationServerKey then throws
"The provided applicationServerKey is not valid".
Fix by calling getSubscription()/unsubscribe() before subscribe() so any
stale subscription is cleared. Adds web test covering both the stale and
fresh subscription paths.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'web/app.js')
| -rw-r--r-- | web/app.js | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -2638,6 +2638,14 @@ async function enableNotifications(btn) { await registerServiceWorker(); const registration = await navigator.serviceWorker.ready; + // Unsubscribe any stale subscription (e.g. from a VAPID key rotation). + // PushManager.subscribe() throws "applicationServerKey is not valid" if the + // existing subscription was created with a different key. + const existingSub = await registration.pushManager.getSubscription(); + if (existingSub) { + await existingSub.unsubscribe(); + } + // Subscribe via PushManager. const subscription = await registration.pushManager.subscribe({ userVisibleOnly: true, |
