Files
hereconnect/apps/frontend/src/api/webPush.ts
T

58 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-11-27 15:57:11 +02:00
import type { WebPushSubscriptionDocument } from '@hereconnect/types'
import { publicSettingsDbRemote, webPushSubscriptionsDbRemote } from '@/api/dbs'
import { getUserUuid } from '@/utils/getUserUuid'
import { getBrowserUuid } from '@/utils/getBrowserUuid'
2024-12-02 08:50:25 +02:00
export const getWebPushSubscriptionDocument = async () => {
const type = 'web_push_subscription'
const user_uuid = getUserUuid()
const browser_uuid = getBrowserUuid()
const _id = `${type}:${user_uuid}:${browser_uuid}`
return webPushSubscriptionsDbRemote.get(_id)
}
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()
2024-12-02 08:50:25 +02:00
const webPushSubscriptionDoc: WebPushSubscriptionDocument<PushSubscriptionJSON> = {
_id,
type,
user_uuid,
browser_uuid,
subscription: subscription.toJSON(),
created_at,
}
try {
const { rev } = await webPushSubscriptionsDbRemote.upsert(
_id,
2024-12-02 08:50:25 +02:00
(doc): WebPushSubscriptionDocument<PushSubscriptionJSON> | 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-12-02 08:50:25 +02:00
throw error
}
}
export const getVapidPublicKey = async () => {
const { value } = await publicSettingsDbRemote.get(
'public_settings:message_delivery_method_web_push_vapid_public_key',
)
return value
}