Spaces:
Running
Running
File size: 3,113 Bytes
47e77e5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | window.ttsFirebase = (() => {
let initialized = false;
function getConfig() {
return window.ttsFirebaseConfig || {};
}
function ensureInitialized() {
if (initialized) {
return;
}
if (typeof firebase === "undefined") {
throw new Error("Firebase SDK is not loaded.");
}
const config = getConfig();
if (!config.apiKey || !config.projectId || !config.messagingSenderId || !config.appId) {
throw new Error("Firebase web config is incomplete.");
}
firebase.initializeApp({
apiKey: config.apiKey,
authDomain: config.authDomain,
projectId: config.projectId,
messagingSenderId: config.messagingSenderId,
appId: config.appId
});
initialized = true;
}
async function getRegistrationToken() {
if (!("Notification" in window) || !("serviceWorker" in navigator)) {
return null;
}
const config = getConfig();
if (!config.vapidKey) {
throw new Error("Firebase VAPID key is missing.");
}
ensureInitialized();
const permission = await Notification.requestPermission();
if (permission !== "granted") {
return null;
}
const registration = await navigator.serviceWorker.register("/firebase-messaging-sw.js");
const messaging = firebase.messaging();
const token = await messaging.getToken({
vapidKey: config.vapidKey,
serviceWorkerRegistration: registration
});
return token || null;
}
async function areNotificationsEnabled() {
if (!("Notification" in window) || !("serviceWorker" in navigator)) {
return false;
}
if (Notification.permission !== "granted") {
return false;
}
try {
const registration = await navigator.serviceWorker.getRegistration("/firebase-messaging-sw.js");
if (!registration) {
return false;
}
const messaging = firebase.messaging();
const config = getConfig();
const token = await messaging.getToken({
vapidKey: config.vapidKey,
serviceWorkerRegistration: registration
});
return !!token;
} catch (e) {
return false;
}
}
async function disableNotifications() {
if (!("Notification" in window) || !("serviceWorker" in navigator)) {
return;
}
try {
const registration = await navigator.serviceWorker.getRegistration("/firebase-messaging-sw.js");
if (registration) {
const messaging = firebase.messaging();
await messaging.deleteToken();
}
} catch (e) {
console.error("Error during disableNotifications:", e);
}
}
return {
getRegistrationToken,
areNotificationsEnabled,
disableNotifications
};
})();
|