diff --git a/frontend/composables/api/notifications/usePushNotifications.ts b/frontend/composables/api/notifications/usePushNotifications.ts deleted file mode 100644 index efe355a..0000000 --- a/frontend/composables/api/notifications/usePushNotifications.ts +++ /dev/null @@ -1,65 +0,0 @@ -// composables/usePushNotifications.ts -import { useLocalStorage, usePermission } from "@vueuse/core"; -import { onMounted, ref } from "vue"; -import useSubscribeNotification from "./useSubscribeNotification"; - -interface VapidKeys { - publicKey: string; -} - -export const usePushNotifications = () => { - const isSupported = ref(false); - const permission = usePermission("notifications"); - const subscription = useLocalStorage( - "push-subscription", - null - ); - const vapid = ref(null); - - const { mutateAsync: subscribeNotification } = useSubscribeNotification(); - const toast = useToast(); - - // Only run in client-side - onMounted(async () => { - if (typeof window !== "undefined" && "serviceWorker" in navigator) { - isSupported.value = true; - vapid.value = await $fetch("/api/vapid"); - } - }); - - const subscribe = async () => { - if (!isSupported.value || !vapid.value?.publicKey) { - throw new Error("Push notifications not supported"); - } - - const swRegistration = await navigator.serviceWorker.ready; - - const applicationServerKey = vapid.value.publicKey - .replace(/-/g, "+") - .replace(/_/g, "/"); - - const convertedKey = Uint8Array.from(atob(applicationServerKey), (c) => - c.charCodeAt(0) - ); - - const pushSubscription = await swRegistration.pushManager.subscribe({ - userVisibleOnly: true, - applicationServerKey: convertedKey, - }); - - const subscriptionJson = pushSubscription.toJSON(); - - subscribeNotification({ - body: subscriptionJson, - }); - - subscription.value = subscriptionJson; - }; - - return { - isSupported, - permission, - subscribe, - subscription, - }; -}; diff --git a/frontend/pages/profile/notifications.vue b/frontend/pages/profile/notifications.vue index d4e57db..025b6d0 100644 --- a/frontend/pages/profile/notifications.vue +++ b/frontend/pages/profile/notifications.vue @@ -8,7 +8,7 @@ definePageMeta({ // imports -import { usePushNotifications } from "~/composables/api/notifications/usePushNotifications"; +import { usePushNotifications } from "~/composables/global//usePushNotifications"; import useSubscribeNotification from "~/composables/api/notifications/useSubscribeNotification"; // state