diff --git a/web/src/app/Notifier.js b/web/src/app/Notifier.js index ddf68f5b..b157ef46 100644 --- a/web/src/app/Notifier.js +++ b/web/src/app/Notifier.js @@ -55,13 +55,26 @@ class Notifier { const pushManager = await this.pushManager(); - return ( - (await pushManager.getSubscription()) ?? - pushManager.subscribe({ + const existingSubscription = await pushManager.getSubscription(); + + if (existingSubscription) { + return existingSubscription; + } + + // create a new subscription only if web push is enabled + // it is possible that web push was previously enabled and then disabled again + // in which case there would be an existingSubscription. + // but if it was _not_ enabled previously, we reach here, and only create a new + // subscription if it is now enabled. + + if (await this.pushEnabled()) { + return pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlB64ToUint8Array(config.web_push_public_key), - }) - ); + }); + } + + return undefined; } async pushManager() { diff --git a/web/src/app/SubscriptionManager.js b/web/src/app/SubscriptionManager.js index 1521aedf..74488bc0 100644 --- a/web/src/app/SubscriptionManager.js +++ b/web/src/app/SubscriptionManager.js @@ -114,7 +114,14 @@ class SubscriptionManager { async refreshWebPushSubscriptions(presetTopics) { const topics = presetTopics ?? (await this.webPushTopics()); - await api.updateWebPushSubscriptions(topics, await notifier.getBrowserSubscription()); + const browserSubscription = await notifier.getBrowserSubscription(); + + if (!browserSubscription) { + console.log("[SubscriptionManager] No browser subscription currently exists, so web push was never enabled. Skipping."); + return; + } + + await api.updateWebPushSubscriptions(topics, browserSubscription); } async updateState(subscriptionId, state) {