Files
hereconnect/services/message-delivery-method-web-push/src/dbs.ts
T
ti d71b405277
Deploy app frontend / app frontend (push) Successful in 2m43s
Deploy db-migrations / db-migrations (push) Successful in 1m8s
Deploy service message-delivery-method-web-push / service message-delivery-method-web-push (push) Successful in 1m30s
Deploy service tg-bot / service tg-bot (push) Failing after 1m54s
send messages to telegram from RQCP (ReadQrcodeChatPage) with link to MQCP (ManageQrcodeChatPage)
2024-12-14 23:58:29 +02:00

97 lines
2.3 KiB
TypeScript

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<MessageDeliveryMethodWebPushVapid>(
`${process.env.API_URL}/server_settings`,
{
skip_setup: true,
},
);
export const publicSettingsDb = new PouchDB<PublicSettingsDocument>(
`${process.env.API_URL}/public_settings`,
{
skip_setup: true,
},
);
export const qrDb = new PouchDB<QRCodeDocument>(`${process.env.API_URL}/qr`, {
skip_setup: true,
});
export const webPushSubscriptionsDb = new PouchDB<
WebPushSubscriptionDocument<PushSubscription>
>(`${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<MessageDocument>,
serviceSeqTrackerDb:
messagesDB as PouchDB.Database<ServiceSeqTrackerDocument>,
} as const;
})();
export const userChatSettingsDb = new PouchDB<UserChatSettingsDocument>(
`${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<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);
};
export const checkDatabasesPromise = checkDatabases();