Files
buzz-sheet/components/commission/push-client.ts
T
gunshiz 5812d99715
CI / Verify (push) Successful in 2m30s
CI / Build immutable images and deploy (push) Successful in 3m9s
feat : comment feature
2026-10-08 01:40:08 +07:00

35 lines
1.9 KiB
TypeScript

"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");
for (const key of Object.keys(sessionStorage)) if (key.startsWith("comment-push-synced-")) sessionStorage.removeItem(key);
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 fetch("/api/comments/push-subscription", { method: "DELETE", headers: { "Content-Type": "application/json" },
body: JSON.stringify({ endpoint: subscription.endpoint }) }).catch(() => undefined);
await subscription.unsubscribe();
}