2024-11-27 15:57:11 +02:00
|
|
|
import type { WebPushSubscriptionDocument } from '@hereconnect/types'
|
2024-11-25 01:08:46 +02:00
|
|
|
import { publicSettingsDbRemote, webPushSubscriptionsDbRemote } from '@/api/dbs'
|
2024-11-24 11:51:45 +02:00
|
|
|
import { getUserUuid } from '@/utils/getUserUuid'
|
|
|
|
|
import { getBrowserUuid } from '@/utils/getBrowserUuid'
|
|
|
|
|
|
|
|
|
|
export const saveWebPushSubscription = async (subscription: PushSubscription) => {
|
|
|
|
|
const type = 'web_push_subscription'
|
|
|
|
|
const user_uuid = getUserUuid()
|
|
|
|
|
const browser_uuid = getBrowserUuid()
|
|
|
|
|
const _id = `${type}:${user_uuid}:${browser_uuid}`
|
|
|
|
|
const created_at = new Date().toISOString()
|
|
|
|
|
const webPushSubscriptionDoc: WebPushSubscriptionDocument = {
|
|
|
|
|
_id,
|
|
|
|
|
type,
|
|
|
|
|
user_uuid,
|
|
|
|
|
browser_uuid,
|
|
|
|
|
subscription: subscription.toJSON(),
|
|
|
|
|
created_at,
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
const { rev } = await webPushSubscriptionsDbRemote.upsert(
|
|
|
|
|
_id,
|
|
|
|
|
(doc): WebPushSubscriptionDocument | false => {
|
|
|
|
|
webPushSubscriptionDoc._rev = doc._rev
|
|
|
|
|
const isNotChanged =
|
|
|
|
|
JSON.stringify(webPushSubscriptionDoc.subscription) === JSON.stringify(doc.subscription)
|
|
|
|
|
if (isNotChanged) {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
webPushSubscriptionDoc.created_at = doc.created_at ?? created_at
|
|
|
|
|
webPushSubscriptionDoc.updated_at = doc.created_at ? new Date().toISOString() : created_at
|
|
|
|
|
return webPushSubscriptionDoc
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
webPushSubscriptionDoc._rev = rev
|
|
|
|
|
console.log('Подписка успешно сохранена', webPushSubscriptionDoc)
|
|
|
|
|
return webPushSubscriptionDoc
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Ошибка сохранения подписки:', error)
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-11-25 01:08:46 +02:00
|
|
|
|
|
|
|
|
export const getVapidPublicKey = async () => {
|
|
|
|
|
const { value } = await publicSettingsDbRemote.get(
|
|
|
|
|
'public_settings:message_delivery_method_web_push_vapid_public_key',
|
|
|
|
|
)
|
|
|
|
|
return value
|
|
|
|
|
}
|