This commit is contained in:
client perkafean
2024-09-27 09:07:57 +00:00
parent faee9dfd2d
commit 69b3fe4347
33 changed files with 824 additions and 204 deletions

View File

@@ -0,0 +1,26 @@
import API_BASE_URL from "../config.js";
export const NotificationService = {
async fetchVapidPublicKey() {
const response = await fetch(API_BASE_URL + "/vapid-public-key"); // Adjust URL if necessary
const data = await response.json();
return data.publicKey;
},
async requestNotificationPermission(setModal) {
if (!("Notification" in window)) {
throw new Error("This browser does not support desktop notification");
}
setModal("req_notification");
const permission = await Notification.requestPermission();
return permission === "granted";
},
urlB64ToUint8Array(base64String) {
const padding = "=".repeat((4 - (base64String.length % 4)) % 4);
const base64 = (base64String + padding)
.replace(/-/g, "+")
.replace(/_/g, "/");
const rawData = window.atob(base64);
return Uint8Array.from(rawData, (char) => char.charCodeAt(0));
},
};

View File

@@ -0,0 +1,27 @@
import API_BASE_URL from "../config.js";
import { NotificationService } from "./notificationService";
export const SubscriptionService = {
async subscribeUserToNotifications(userId) {
const registration = await navigator.serviceWorker.ready;
const publicKey = await NotificationService.fetchVapidPublicKey(); // Fetch the public key
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: NotificationService.urlB64ToUint8Array(publicKey),
});
await this.saveSubscription(userId, subscription);
console.log("User is subscribed:", subscription);
},
async saveSubscription(userId, subscription) {
await fetch(API_BASE_URL + "/subscribe", {
method: "POST",
body: JSON.stringify({ userId, subscription }),
headers: {
"Content-Type": "application/json",
},
});
},
};