add services/message-delivery-method-web-push/test-send-notification.js
Main daploy / deploy (push) Successful in 48s

This commit is contained in:
2024-11-24 11:51:45 +02:00
parent 89ec27ed23
commit 46c26e28e3
17 changed files with 272 additions and 90 deletions
+12 -1
View File
@@ -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'
)
}
+9 -1
View File
@@ -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',
{
+12 -5
View File
@@ -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
})
}
}
+41
View File
@@ -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)
}
}