65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import { precacheAndRoute } from "workbox-precaching";
|
|
|
|
// Precaching configuration for PWA assets
|
|
precacheAndRoute(self.__WB_MANIFEST);
|
|
|
|
// Version
|
|
|
|
const VERSION = "1.0.911";
|
|
|
|
// Service Worker Installation
|
|
self.addEventListener("install", (event) => {
|
|
self.skipWaiting();
|
|
});
|
|
|
|
// Service Worker Activation
|
|
self.addEventListener("activate", (event) => {
|
|
event.waitUntil(
|
|
(async () => {
|
|
const clients = await self.clients.matchAll({ type: "window" });
|
|
|
|
// Notify all open clients about the version
|
|
clients.forEach((client) =>
|
|
client.postMessage({ type: "VERSION_CHECK", version: VERSION })
|
|
);
|
|
|
|
self.clients.claim();
|
|
console.log("Service Worker Activated (Version: " + VERSION + ")");
|
|
})()
|
|
);
|
|
});
|
|
|
|
// Push Notification Handler for Django Web Push
|
|
self.addEventListener("push", (event) => {
|
|
try {
|
|
const payload = event.data?.json() || {
|
|
title: "New Notification",
|
|
body: "You have a new message",
|
|
icon: "/logo-192x192.png",
|
|
data: { url: "/" },
|
|
};
|
|
|
|
event.waitUntil(
|
|
self.registration.showNotification(payload.title, {
|
|
body: payload.body,
|
|
icon: payload.icon || "/logo-192x192.png",
|
|
data: payload.data,
|
|
})
|
|
);
|
|
} catch (error) {
|
|
console.error("Push handling failed:", error);
|
|
}
|
|
});
|
|
|
|
// Notification Click Handler
|
|
self.addEventListener("notificationclick", (event) => {
|
|
event.notification.close();
|
|
event.waitUntil(clients.openWindow(event.notification.data?.url || "/"));
|
|
});
|
|
|
|
self.addEventListener("message", (event) => {
|
|
if (event.data === "SKIP_WAITING") {
|
|
self.skipWaiting();
|
|
}
|
|
});
|