import PouchDB from "./PouchDB"; import { MessageDocument, QRCodeDocument, MessageDeliveryMethodWebPushVapid, UserChatSettingsDocument, WebPushSubscriptionDocument, PublicSettingsDocument, } from "@hereconnect/types"; import { PushSubscription } from "web-push"; export interface ServiceSeqTrackerDocument { lastSeq: string | number; } if (!process.env.API_URL) { throw new Error("Environment variable API_URL is not set"); } export const messagesDbUrl = `${process.env.API_URL}/messages`; export const serverSettingsDb = new PouchDB( `${process.env.API_URL}/server_settings`, { skip_setup: true, }, ); export const publicSettingsDb = new PouchDB( `${process.env.API_URL}/public_settings`, { skip_setup: true, }, ); export const qrDb = new PouchDB(`${process.env.API_URL}/qr`, { skip_setup: true, }); export const webPushSubscriptionsDb = new PouchDB< WebPushSubscriptionDocument >(`${process.env.API_URL}/web_push_subscriptions`, { skip_setup: true, }); export const { messagesDb, serviceSeqTrackerDb } = (() => { const messagesDB = new PouchDB(messagesDbUrl, { skip_setup: true, }); return { messagesDb: messagesDB as PouchDB.Database, serviceSeqTrackerDb: messagesDB as PouchDB.Database, } as const; })(); export const userChatSettingsDb = new PouchDB( `${process.env.API_URL}/user_chat_settings`, { skip_setup: true, }, ); const checkDatabases = async () => { const entries = await Promise.all( Object.entries({ serverSettingsDb, publicSettingsDb, qrDb, webPushSubscriptionsDb, messagesDb, userChatSettingsDb, } as const).map( async ([name, db]): Promise< [string, Awaited>] > => { const info = await db.info(); return [name, info]; }, ), ); for (const [name, info] of entries) { if ("error" in info && "reason" in info) { throw new Error(`[${name}] ${info.error}: ${info.reason}`); } if ("error" in info) { throw new Error(`[${name}] ${info.error}`); } } return Object.fromEntries(entries); }; export const checkDatabasesPromise = checkDatabases();