Files
hereconnect/services/message-delivery-method-web-push/src/dbs.ts
T

85 lines
2.0 KiB
TypeScript
Raw Normal View History

2024-11-27 15:57:11 +02:00
import PouchDB from "./PouchDB";
import type {
MessageDocument,
QRCodeDocument,
ServerSettingsDocument,
2024-12-02 08:50:25 +02:00
UserChatSettingsDocument,
2024-11-29 00:05:43 +02:00
WebPushSubscriptionDocument,
2024-11-27 15:57:11 +02:00
} from "@hereconnect/types";
2024-12-02 08:50:25 +02:00
import { PushSubscription } from "web-push";
2024-11-27 15:57:11 +02:00
2024-12-03 11:11:44 +02:00
export interface ServiceSeqTrackerDocument {
2024-11-27 15:57:11 +02:00
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<ServerSettingsDocument>(
`${process.env.API_URL}/server_settings`,
{
skip_setup: true,
},
);
export const qrDb = new PouchDB<QRCodeDocument>(`${process.env.API_URL}/qr`, {
skip_setup: true,
});
2024-12-02 08:50:25 +02:00
export const webPushSubscriptionsDb = new PouchDB<
WebPushSubscriptionDocument<PushSubscription>
>(`${process.env.API_URL}/web_push_subscriptions`, {
skip_setup: true,
});
2024-11-29 00:05:43 +02:00
2024-12-03 11:11:44 +02:00
export const { messagesDb, serviceSeqTrackerDb } = (() => {
2024-11-27 15:57:11 +02:00
const messagesDB = new PouchDB(messagesDbUrl, {
skip_setup: true,
});
return {
messagesDb: messagesDB as PouchDB.Database<MessageDocument>,
2024-12-03 11:11:44 +02:00
serviceSeqTrackerDb:
messagesDB as PouchDB.Database<ServiceSeqTrackerDocument>,
2024-11-27 15:57:11 +02:00
} as const;
})();
2024-12-02 08:50:25 +02:00
export const userChatSettingsDb = new PouchDB<UserChatSettingsDocument>(
`${process.env.API_URL}/user_chat_settings`,
{
skip_setup: true,
},
);
2024-12-03 11:11:44 +02:00
export const checkDatabases = async () => {
const entries = await Promise.all(
Object.entries({
serverSettingsDb,
qrDb,
webPushSubscriptionsDb,
messagesDb,
userChatSettingsDb,
} as const).map(
async ([name, db]): Promise<
[string, Awaited<ReturnType<typeof db.info>>]
> => {
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);
};