import { sendCommand } from "./client"; import { pickCase } from "./normalize"; export function hydrateWorkspace(password: string): Promise { return sendCommand({ action: "db.hydrate_workspace", payload: { password }, }); } type RuntimeConfigRaw = { vaultDirectory?: string; VaultDirectory?: string; }; type RuntimeConfig = { vaultDirectory: string; }; type PersistOptions = { keepalive?: boolean; }; async function getRuntimeConfig( options: PersistOptions = {}, ): Promise { const data = await sendCommand( { action: "config.get", }, options, ); return { vaultDirectory: pickCase(data, "vaultDirectory", "VaultDirectory", ""), }; } export async function unlockVaultWorkspace(password: string): Promise { const config = await getRuntimeConfig(); const loaded = await sendCommand({ action: "vault.load_all", payload: { password, vaultDirectory: config.vaultDirectory, }, }); if (!loaded) { throw new Error("Incorrect vault password."); } await sendCommand({ action: "db.hydrate_workspace", payload: { password, }, }); } export async function persistAndClearVault( password: string, options: PersistOptions = {}, ): Promise { const config = await getRuntimeConfig(options); await sendCommand( { action: "vault.rebuild_all", payload: { password, vaultDirectory: config.vaultDirectory, }, }, options, ); await sendCommand( { action: "vault.clear_data_directory", payload: {}, }, options, ); }