import { type Account } from "@lume/types"; import { User } from "@lume/ui"; import { displayNsec } from "@lume/utils"; import { createFileRoute } from "@tanstack/react-router"; import { invoke } from "@tauri-apps/api/core"; import { writeText } from "@tauri-apps/plugin-clipboard-manager"; import { useState } from "react"; import { toast } from "sonner"; export const Route = createFileRoute("/settings/backup")({ component: Screen, loader: async ({ context }) => { const ark = context.ark; const npubs = await ark.get_all_accounts(); let accounts: Account[] = []; for (const account of npubs) { const nsec: string = await invoke("get_stored_nsec", { npub: account.npub, }); accounts.push({ ...account, nsec }); } return accounts; }, }); function Screen() { const accounts = Route.useLoaderData(); return (
{accounts.map((account, index) => (
Account {index}
))}
); } function Account({ account }: { account: Account }) { const [key, setKey] = useState(account.nsec); const [copied, setCopied] = useState(false); const [passphase, setPassphase] = useState(""); const encrypt = async () => { const encrypted: string = await invoke("get_encrypted_key", { npub: account.npub, password: passphase, }); setKey(encrypted); }; const copyKey = async () => { try { await writeText(key); setCopied(true); } catch (e) { toast.error(e); } }; return (
setPassphase(e.target.value)} className="h-9 w-full rounded-lg border-neutral-300 bg-transparent px-3 placeholder:text-neutral-500 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-neutral-700 dark:placeholder:text-neutral-400 dark:focus:ring-blue-800" />
); }