diff options
| author | Fuwn <[email protected]> | 2025-01-28 20:13:31 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-01-28 20:13:31 -0800 |
| commit | 81c4da5135eacf9d7a13262eeaf5b49c4bb2257b (patch) | |
| tree | 9f128ed84d3367878cb93e1120f915f3d76d5263 /src/lib/Utility | |
| parent | refactor(service-worker): clean up code (diff) | |
| download | due.moe-81c4da5135eacf9d7a13262eeaf5b49c4bb2257b.tar.xz due.moe-81c4da5135eacf9d7a13262eeaf5b49c4bb2257b.zip | |
fix(notifications): better permission request flow
Diffstat (limited to 'src/lib/Utility')
| -rw-r--r-- | src/lib/Utility/notifications.ts | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/lib/Utility/notifications.ts b/src/lib/Utility/notifications.ts index 95cb51c1..e80563ec 100644 --- a/src/lib/Utility/notifications.ts +++ b/src/lib/Utility/notifications.ts @@ -4,21 +4,27 @@ import root from './root'; export const requestNotifications = async () => { if ('Notification' in window && navigator.serviceWorker) { - if ((await Notification.requestPermission()) === 'granted') { - const pushSubscription = await ( - await navigator.serviceWorker.ready - ).pushManager.subscribe({ - userVisibleOnly: true, - applicationServerKey: env.PUBLIC_VAPID_PUBLIC_KEY - }); + const registration = await navigator.serviceWorker.getRegistration(); - await fetch(root(`/api/notifications/subscribe?p=${getFingerprint()}`), { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(pushSubscription) - }); + if (registration) { + try { + const pushSubscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: env.PUBLIC_VAPID_PUBLIC_KEY + }); + + await fetch(root(`/api/notifications/subscribe?p=${getFingerprint()}`), { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(pushSubscription) + }); + } catch { + await fetch(`/api/notifications/unsubscribe?p=${getFingerprint()}`, { + method: 'POST' + }); + } } } }; |