function checkServiceWorkerSupport() { if (!("serviceWorker" in navigator) || !("PushManager" in window)) throw new Error("Your browser does not have Service Worker support") } async function unregisterPush() { checkServiceWorkerSupport(); const registrations = await navigator.serviceWorker.getRegistrations(); for (const reg of registrations) { const sub = await reg.pushManager.getSubscription(); if (sub) await sub.unsubscribe(); await reg.unregister(); } } async function registerPush(publicKey) { checkServiceWorkerSupport(); const registration = await navigator.serviceWorker.register("/assets/custom/serviceWorker.js"); console.log("Service Worker registered"); let subscription = await registration.pushManager.getSubscription(); if (!subscription) { const applicationServerKey = urlBase64ToUint8Array(publicKey); subscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey }); console.log("Push subscription obtained"); } const response = await fetch(`${window.GLOBAL_ENV.API_ENDPOINT}/v9/users/@me/devices`, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": getToken() }, body: JSON.stringify({ provider: "webpush", webpush_subscription: subscription }) }); if (response.ok) { console.log("Device registered successfully"); } else { const text = await response.text(); throw new Error("Failed to register: ", text) } } async function isPushRegistered() { checkServiceWorkerSupport(); const registrations = await navigator.serviceWorker.getRegistrations(); if (!registrations || registrations.length === 0) { return false; } for (const reg of registrations) { const sub = await reg.pushManager.getSubscription(); if (sub) return true; } return false; }