import { Workbox } from "workbox-window"; import { usePWA } from "~/composables/global/usePwa"; export default defineNuxtPlugin(() => { const updateAvailable = ref(false); let wb: Workbox | null = null; const { isInstalledAsPWA } = usePWA(); if ("serviceWorker" in navigator && isInstalledAsPWA.value) { wb = new Workbox("/sw.js"); wb.addEventListener("waiting", () => { checkForUpdate(); }); wb.register() .then((registration: any) => { if (registration.waiting) { checkForUpdate(); } }) .catch((error) => { console.error("Service worker registration failed:", error); }); } const checkForUpdate = () => { updateAvailable.value = true; }; const handleUpdate = () => { if (wb) { wb.messageSW({ type: "SKIP_WAITING" }).then(() => { window.location.reload(); }); } }; return { provide: { updateAvailable, handleUpdate, }, }; });