import { fetch } from "pouchdb-fetch"; const dbsSecurity = { _users: { admins: { roles: ["_admin"] }, members: { roles: ["_admin"] }, }, _replicator: { admins: { roles: ["_admin"] }, members: { roles: ["_admin"] }, }, _global_changes: { admins: { roles: ["_admin"] }, members: { roles: ["_admin"] }, }, server_settings: { admins: { roles: ["_admin"] }, members: { roles: ["_admin"] }, }, web_push_subscriptions: { admins: { roles: ["_admin"] }, members: { roles: [] }, }, messages: { admins: { roles: ["_admin"] }, members: { roles: [] }, }, qr: { admins: { roles: ["_admin"] }, members: { roles: [] }, }, public_settings: { admins: { roles: ["_admin"] }, members: { roles: [] }, }, user_chat_settings: { admins: { roles: ["_admin"] }, members: { roles: [] }, }, }; if (!process.env.API_URL) { throw new Error("Environment variable API_URL is not set"); } const urlObject = new URL(process.env.API_URL); const headers = { "Content-Type": "application/json", Authorization: "Basic " + btoa(`${urlObject.username}:${urlObject.password}`), }; const getUrl = (dbUrlPath) => { return `${urlObject.protocol}//${urlObject.host}${urlObject.pathname}${dbUrlPath}${urlObject.search}${urlObject.hash}`; }; export const up = async () => { for (const [dbName, dbSecurity] of Object.entries(dbsSecurity)) { const responseCreateDb = await fetch(getUrl(dbName), { method: "PUT", headers, }).then((response) => response.json()); if (!responseCreateDb.ok) { throw new Error( `${dbName} security error ${JSON.stringify(responseCreateDb)}`, ); } const responseSetSecurity = await fetch(getUrl(`${dbName}/_security`), { method: "PUT", headers, body: JSON.stringify(dbSecurity), }).then((response) => response.json()); if (!responseSetSecurity.ok) { throw new Error( `${dbName} security error ${JSON.stringify(responseSetSecurity)}`, ); } } }; export const down = async () => { for (const dbName of Object.keys(dbsSecurity)) { const responseDeleteDb = await fetch(getUrl(dbName), { headers, method: "DELETE", }); console.assert( (await responseDeleteDb.json()).ok, `${dbName} create db error`, ); } };