class CustomPushEvent extends Event { constructor(data) { super("push"); Object.assign(this, data); this.custom = true; } } if ("serviceWorker" in navigator) { importScripts("https://www.gstatic.com/firebasejs/10.13.2/firebase-app-compat.js"); importScripts("https://www.gstatic.com/firebasejs/10.13.2/firebase-messaging-compat.js"); importScripts("./swenv.js"); navigator.serviceWorker .register("./firebase-messaging-sw.js") .then(function (reg) { firebase.initializeApp({ apiKey: process.env.NEXT_PUBLIC_FIREBASE_APIKEY, authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTHDOMAIN, projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECTID, storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGEBUCKET, messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGINGSENDERID, appId: process.env.NEXT_PUBLIC_FIREBASE_APPID, measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENTID, }); self.addEventListener("push", (e) => { console.log(`🚀🚀🚀🚀🚀-> in firebase-messaging-sw.js on 41`, e); if (e.custom) return; let oldData = e.data; let newEvent = new CustomPushEvent({ data: { json() { let newData = oldData.json(); newData.data = { ...newData.data, ...newData.notification, }; delete newData.notification; return newData; }, }, waitUntil: e.waitUntil.bind(e), }); e.stopImmediatePropagation(); dispatchEvent(newEvent); }); const messaging = firebase.messaging(); messaging.onBackgroundMessage((payload) => { console.log(`🚀🚀🚀🚀🚀-> in firebase-messaging-sw.js on 24`, payload); // Customize notification here const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, icon: payload.data.image, data: payload.data, ...payload.data, }; return self.registration.showNotification(notificationTitle, notificationOptions); }); self.onnotificationclick = function (event) { //example self.clients.openWindow("/"); event.notification.close(); }; console.log("reg: ", reg.scope); }) .catch(function (err) { console.log("err: ", err); }); }