clone

push a directory of html from the terminal and get a four-character url back. a deno cli on cloudflare

codex/agent-interface
nzip / cli / commands / vault.ts
vault.ts 2.2K
1import { ApiClient } from "../lib/api.ts";2import type { Config } from "../lib/config.ts";3import { assertVaultAllowed, saveConfig } from "../lib/config.ts";4import { bold, dim, emit, fail, green, table } from "../lib/fmt.ts";56export async function cmdVault(7 config: Config,8 sub: string | undefined,9 name: string | undefined,10 slot: number | undefined,11): Promise<void> {12 const api = new ApiClient(config);1314 if (sub === "ls" || sub === undefined) {15 const vaults = await api.listVaults();16 emit(() => {17 if (vaults.length === 0) {18 console.log(dim("no vaults registered — run `nzip vault add <name>`"));19 return;20 }21 console.log(table(22 ["SLOT", "VAULT", "SITES"],23 vaults.map((v) => [24 `0x${v.slot.toString(16)}`,25 v.name === config.defaultVault ? bold(`${v.name} *`) : v.name,26 String(v.siteCount),27 ]),28 ));29 }, { ok: true, defaultVault: config.defaultVault ?? null, vaults });30 return;31 }3233 if (sub === "add") {34 if (!name) fail("usage: nzip vault add <name> [--slot N]");35 try {36 assertVaultAllowed(name, config);37 } catch (e) {38 return fail((e as Error).message);39 }40 const v = await api.createVault(name, slot);41 const madeDefault = !config.defaultVault;42 if (madeDefault) await saveConfig({ ...config, defaultVault: v.name });43 emit(() => {44 console.log(45 `${green("✓")} vault ${bold(v.name)} registered at slot 0x${v.slot.toString(16)}`,46 );47 if (madeDefault) console.log(dim(` set as default vault`));48 }, { ok: true, ...v, default: madeDefault || config.defaultVault === v.name });49 return;50 }5152 if (sub === "default") {53 if (!name) fail("usage: nzip vault default <name>");54 try {55 assertVaultAllowed(name, config);56 } catch (e) {57 return fail((e as Error).message);58 }59 const vaults = await api.listVaults();60 if (!vaults.some((v) => v.name === name)) fail(`unknown vault: ${name}`);61 await saveConfig({ ...config, defaultVault: name });62 emit(63 () => console.log(`${green("✓")} default vault set to ${bold(name)}`),64 { ok: true, defaultVault: name },65 );66 return;67 }6869 fail(`unknown vault subcommand: ${sub} (use ls | add | default)`);70}