diff --git a/public/js/push.js b/public/js/push.js index 4fbab59..dc8de91 100644 --- a/public/js/push.js +++ b/public/js/push.js @@ -1,3 +1,53 @@ +// 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 +// // }); +// const subscription = await registration.pushManager.subscribe({ +// userVisibleOnly: true, +// applicationServerKey: urlBase64ToUint8Array(vapidKey), +// }); + +// console.log('VAPID key:', 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); +// } +// } + async function registerPush() { try { console.log("Registering for push notifications"); @@ -8,30 +58,29 @@ async function registerPush() { } 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 - // }); - const subscription = await registration.pushManager.subscribe({ - userVisibleOnly: true, - applicationServerKey: urlBase64ToUint8Array(vapidKey), - }); + // ✅ GET first + let subscription = await registration.pushManager.getSubscription(); - console.log('VAPID key:', vapidKey); + // ✅ CREATE only if not exists + if (!subscription) { + subscription = await registration.pushManager.subscribe({ + userVisibleOnly: true, + applicationServerKey: urlBase64ToUint8Array(vapidKey), + }); + console.log("New subscription created"); + } else { + console.log("Existing subscription reused"); + } - console.log("Subscription created:", subscription); - - const res = await fetch('/push/subscribe', { + // 🔥 ALWAYS send to backend + await fetch('/push/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -40,14 +89,13 @@ async function registerPush() { body: JSON.stringify(subscription) }); - console.log("Server response:", await res.text()); - alert("Push enabled ✅"); } catch (e) { console.error("Push registration failed ❌", e); } } + function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding)