"use client"; export async function subscribeCommissionPush(scope: "customer" | "admin", publicKey: string) { if (await Notification.requestPermission() !== "granted") return false; await syncCommissionPush(scope, publicKey); return true; } export async function syncCommissionPush(scope: "customer" | "admin", publicKey: string) { const registration = await navigator.serviceWorker.register("/commission-push-sw.js", { scope: "/" }); const subscription = await registration.pushManager.getSubscription() ?? await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: publicKey }); const response = await fetch("/api/commission/push-subscription", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ...subscription.toJSON(), scope }) }); if (!response.ok) throw new Error("Could not save push subscription"); sessionStorage.setItem(`commission-push-synced-${scope}`, "1"); } export async function unsubscribeCommissionPush() { sessionStorage.removeItem("commission-push-synced-customer"); sessionStorage.removeItem("commission-push-synced-admin"); if (!("serviceWorker" in navigator)) return; const registration = await navigator.serviceWorker.getRegistration("/"); const subscription = await registration?.pushManager.getSubscription(); if (!subscription) return; await fetch("/api/commission/push-subscription", { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ endpoint: subscription.endpoint }) }).catch(() => undefined); await subscription.unsubscribe(); }