diff options
Diffstat (limited to 'lib/notifications.ts')
| -rw-r--r-- | lib/notifications.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/notifications.ts b/lib/notifications.ts new file mode 100644 index 00000000..af47a6d7 --- /dev/null +++ b/lib/notifications.ts @@ -0,0 +1,38 @@ +import config from "$config"; +import webpush from "web-push"; + +if (config.vapid) { + webpush.setVapidDetails( + config.vapid.url, + config.vapid.publicKey, + config.vapid.privateKey, + ); +} + +export const notify = async (user, payload) => { + try { + let { subscriptions } = user; + + if (subscriptions) { + let i = 0; + for (let subscription of subscriptions) { + i++; + try { + await webpush.sendNotification(subscription, payload); + } catch (e) { + if ( + e.body && + (e.body.includes("expired") || e.body.includes("No such")) + ) { + user.subscriptions.splice(i, 1); + await user.save(); + } else { + err("problem sending notification", e); + } + } + } + } + } catch (e) { + console.log("problem notifying", e); + } +}; |
