aboutsummaryrefslogtreecommitdiffstats
path: root/lib/notifications.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
committerAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
commitfe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (patch)
treeaa8f34e1692bd2d638a2c996eeadb58671d07aea /lib/notifications.ts
parent00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (diff)
downloadcoinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.tar.gz
coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.zip
typescript
Diffstat (limited to 'lib/notifications.ts')
-rw-r--r--lib/notifications.ts38
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);
+ }
+};