diff --git a/public/js/push.js b/public/js/push.js new file mode 100644 index 0000000..9092871 --- /dev/null +++ b/public/js/push.js @@ -0,0 +1,43 @@ +async function registerPush() { + try { + console.log("Registering for push notifications"); + + if (!('serviceWorker' in navigator)) { + console.error("ServiceWorker not supported"); + return; + } + + const permission = await Notification.requestPermission(); + console.log("Permission:", permission); + + if (permission !== 'granted') { + console.warn("Notification permission denied"); + return; + } + + const registration = await navigator.serviceWorker.register('/sw.js'); + console.log("SW registered:", registration); + + const subscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: vapidKey + }); + + console.log("Subscription created:", subscription); + + const res = await fetch('/push/subscribe', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': csrfToken + }, + body: JSON.stringify(subscription) + }); + + console.log("Server response:", await res.text()); + + alert("Push enabled ✅"); + } catch (e) { + console.error("Push registration failed ❌", e); + } +} diff --git a/public/service-worker.js b/public/service-worker.js new file mode 100644 index 0000000..6ffd9e3 --- /dev/null +++ b/public/service-worker.js @@ -0,0 +1,10 @@ +self.addEventListener('push', function (event) { + const data = event.data.json(); + event.waitUntil( + self.registration.showNotification(data.title, { + body: data.body, + icon: data.icon, + data: data.data + }) + ); +});