add services/message-delivery-method-web-push/test-send-notification.js
Main daploy / deploy (push) Successful in 48s
Main daploy / deploy (push) Successful in 48s
This commit is contained in:
@@ -1,4 +1,15 @@
|
||||
import PouchDB from 'pouchdb-browser'
|
||||
import PouchDBFindPlugin from 'pouchdb-find'
|
||||
import PouchDBUpsertPlugin from 'pouchdb-upsert'
|
||||
|
||||
export default PouchDB.plugin(PouchDBFindPlugin)
|
||||
export default PouchDB.plugin(PouchDBFindPlugin).plugin(PouchDBUpsertPlugin)
|
||||
|
||||
// Type guard to check if the error is of type `Error` and has a `name` property
|
||||
export function isNotFoundError(error: unknown): error is { name: string } {
|
||||
return (
|
||||
typeof error === 'object' &&
|
||||
error !== null &&
|
||||
'name' in error &&
|
||||
(error as { name: string }).name === 'not_found'
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import PouchDB from '@/api/PouchDB'
|
||||
|
||||
import type { QRCodeDocument, MessageDocument } from '@/types/DBDocumentTypes'
|
||||
import type {
|
||||
QRCodeDocument,
|
||||
MessageDocument,
|
||||
WebPushSubscriptionDocument,
|
||||
} from '@/types/DBDocumentTypes'
|
||||
|
||||
export const qrCodeDbRemote = new PouchDB<QRCodeDocument>('https://hereconnect.condev.ru/api/qr', {
|
||||
skip_setup: true,
|
||||
@@ -10,6 +14,10 @@ export const qrCodeDbLocal = new PouchDB<QRCodeDocument>('qr')
|
||||
|
||||
export const messagesDbLocal = new PouchDB<MessageDocument>('messages')
|
||||
|
||||
export const webPushSubscriptionsDbRemote = new PouchDB<WebPushSubscriptionDocument>(
|
||||
'https://hereconnect.condev.ru/api/web_push_subscriptions',
|
||||
)
|
||||
|
||||
export const messagesDbRemote = new PouchDB<MessageDocument>(
|
||||
'https://hereconnect.condev.ru/api/messages',
|
||||
{
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import type { QRCodeDocument } from '@/types/DBDocumentTypes'
|
||||
import { qrCodeDbLocal, qrCodeDbRemote } from '@/api/dbs'
|
||||
import { getUserUuid } from '@/utils/getUserUuid'
|
||||
import { getBrowserUuid } from '@/utils/getBrowserUuid'
|
||||
import { isNotFoundError } from '@/api/PouchDB'
|
||||
|
||||
const EPOHE = 1731661630981
|
||||
|
||||
@@ -21,6 +24,8 @@ export const createQrCodeDocument = async (
|
||||
type: 'qr_code',
|
||||
uri,
|
||||
url: `https://hereconnect.condev.ru/read/${uri}`,
|
||||
user_uuid: getUserUuid(),
|
||||
browser_uuid: getBrowserUuid(),
|
||||
created_at: new Date().toISOString(),
|
||||
...qrCodeDocPartial,
|
||||
}
|
||||
@@ -48,11 +53,13 @@ export const createQrCodeDocument = async (
|
||||
return qrCodeDoc
|
||||
}
|
||||
|
||||
export const getQrCodeDocument = (uri: string) => {
|
||||
return qrCodeDbLocal.get<QRCodeDocument>(`qr_code:${uri}`).catch((error) => {
|
||||
if (error.name === 'not_found') {
|
||||
return qrCodeDbRemote.get<QRCodeDocument>(`qr_code:${uri}`)
|
||||
export const getQrCodeDocument = async (uri: string) => {
|
||||
try {
|
||||
return await qrCodeDbLocal.get<QRCodeDocument>(`qr_code:${uri}`)
|
||||
} catch (error) {
|
||||
if (isNotFoundError(error)) {
|
||||
return await qrCodeDbRemote.get<QRCodeDocument>(`qr_code:${uri}`)
|
||||
}
|
||||
throw error
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { WebPushSubscriptionDocument } from '@/types/DBDocumentTypes'
|
||||
import { webPushSubscriptionsDbRemote } from '@/api/dbs'
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user