send push notification to guest
Main daploy / deploy (push) Failing after 6s

This commit is contained in:
2024-12-02 10:01:23 +02:00
parent 096c1547d4
commit b5a25a6ece
6 changed files with 124 additions and 78 deletions
@@ -59,6 +59,7 @@ import { getUserChatSettingsDocument } from '@/api/userChatSettings'
import type { UserChatSettingsDocument } from '@hereconnect/types'
import { isNotFoundError } from '@/api/PouchDB'
import { saveUserChatSettings } from '@/api/userChatSettings'
import { getQrCodeDocument } from '@/api/qrCode'
// Проверки iOS и запуска из главного экрана
const isIOS = computed(
@@ -95,18 +96,16 @@ async function requestNotificationPermission() {
}
const registration = await navigator.serviceWorker.ready
let subscription: PushSubscription | null = null
try {
subscription = await registration.pushManager.subscribe(await subscribeOptionsPromise)
} catch (error) {
subscription = await registration.pushManager.getSubscription()
if (!subscription) {
throw error
}
await subscription.unsubscribe()
subscription = await registration.pushManager.subscribe(await subscribeOptionsPromise)
}
const subscription = await registration.pushManager
.subscribe(await subscribeOptionsPromise)
.catch(async (error) => {
const oldSubscription = await registration.pushManager.getSubscription()
if (!oldSubscription) {
throw error
}
await oldSubscription.unsubscribe()
return registration.pushManager.subscribe(await subscribeOptionsPromise)
})
return saveWebPushSubscription(subscription)
}
@@ -161,7 +160,12 @@ const { isPending, isError, error, mutate } = useMutation({
}).catch((error) => {
if (!isNotFoundError(error)) throw error
})
if (chatSettingsDocument && chatSettingsDocument.is_push_notification_enabled) {
if (
(chatSettingsDocument && chatSettingsDocument.is_push_notification_enabled) ||
(!chatSettingsDocument &&
user_chat_role === 'owner' &&
(await getQrCodeDocument(qr_code_uri)).messageDeliveryMethod === 'webPush')
) {
const [subscription, subscriptionDocument] = await Promise.all([
getPushSubscription(),
getWebPushSubscriptionDocument().catch((error) => {
@@ -78,7 +78,10 @@ async function requestNotificationPermission() {
}
try {
const applicationServerKeyPromise = getVapidPublicKey()
const subscribeOptionsPromise = getVapidPublicKey().then((applicationServerKey) => ({
userVisibleOnly: true,
applicationServerKey,
}))
const permission = await Notification.requestPermission()
if (permission !== 'granted') {
@@ -87,10 +90,16 @@ async function requestNotificationPermission() {
const registration = await navigator.serviceWorker.ready
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: await applicationServerKeyPromise,
})
const subscription = await registration.pushManager
.subscribe(await subscribeOptionsPromise)
.catch(async (error) => {
const oldSubscription = await registration.pushManager.getSubscription()
if (!oldSubscription) {
throw error
}
await oldSubscription.unsubscribe()
return registration.pushManager.subscribe(await subscribeOptionsPromise)
})
const webPushSubscriptionDoc = await saveWebPushSubscription(subscription)
emit('change')