import webpush from "web-push"; import PouchDB from "./PouchDB.js"; if (!process.env.API_URL) { throw new Error(`env API_URL is not set`); } const settings = await new PouchDB(`${process.env.API_URL}/server_settings`, { skip_setup: true, }).get("server_settings:message_delivery_method_web_push:vapid"); webpush.setVapidDetails( settings.vapid.subject, settings.vapid.keys.publicKey, settings.vapid.keys.privateKey, ); const notification = { type: "notification", notification: { title: "test", options: { icon: "/images/qr-code-logo-200x200.jpg", body: "Test push message from DevTools.", tag: "2105ef6f-3ca6-4f99-b258-0ca23f014309", // requireInteraction: true, // silent: false, // vibrate: [200, 100, 200, 100, 200, 100, 200], data: { url: "/chat/6ilhxu/13trvu", payload: { tag: "2105ef6f-3ca6-4f99-b258-0ca23f014309" }, }, }, }, }; const { rows } = await new PouchDB( `${process.env.API_URL}/web_push_subscriptions`, { skip_setup: true }, ).allDocs( process.env.WEB_PUSH_SUBSCRIPTION_ID ? { key: process.env.WEB_PUSH_SUBSCRIPTION_ID, include_docs: true, } : { startkey: "web_push_subscription:", endkey: "web_push_subscription:\uFFFF", include_docs: true, }, ); await Promise.allSettled( rows.map(async ({ doc }) => { await webpush.sendNotification( doc.subscription, JSON.stringify(notification), ); console.log("sent ", doc._id); }), ); // issues: // 1. NO SOUND // 2. SAFARI NO OPEN PAGE