window.doSubscribe = async function(applicationServerKey) { const registration = await navigator.serviceWorker.register("./sw.js"); const sub = await registration.pushManager.subscribe({ applicationServerKey, }); return sub.toJSON(); }; window.doGetSubscription = async function() { const registration = await navigator.serviceWorker.register("./sw.js"); const sub = await registration.pushManager.getSubscription(); if (sub) { return sub.toJSON(); } return null; }; window.doUnsubscribe = async function() { const registration = await navigator.serviceWorker.register("./sw.js"); const sub = await registration.pushManager.getSubscription(); sub.unsubscribe(); return {}; }; window.doWaitForPushEvent = function() { return new Promise(resolve => { navigator.serviceWorker.addEventListener("message", function(e) { if (e.data.type === "push") { resolve(e.data.payload); } }); }); }; window.doWaitForSubscriptionChange = function() { return new Promise(resolve => { navigator.serviceWorker.addEventListener("message", function(e) { if (e.data.type === "pushsubscriptionchange") { resolve(e.data.type); } }); }); };