PageSourceSearch

https://ghostkeyapp.vercel.app/assets/RecoveryKitPage-dBoFr91D.js

js ghostkeyapp.vercel.app collected 2026-10-03 07:00:41 UTC 2,737 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/independenceProof-blKwmP4y.js","assets/index-QFmirVAv.js","assets/index-BdxIhleX.css","assets/english-CMvXUfYY.js"])))=>i.map(i=>d[i]);
2import{O as r,r as y,f,w as d,A as l,J as e,B as m,_ as k}from"./index-QFmirVAv.js";function v({onNavigate:u}){const[n,x]=r.useState(null),[i,c]=r.useState(null),[s,o]=r.useState({kind:"idle"});r.useEffect(()=>{const a=y();if(!a){c("none");return}f.getVault(a,d(a)).then(x).catch(t=>c(t instanceof l?t.message:String(t)))},[]);async function h(){if(!n)return;const a=d(n.id);if(!a){o({kind:"error",message:"Sign in again before downloading your recovery file."});return}o({kind:"busy"});try{const{downloadIndependenceProof:t}=await k(async()=>{const{downloadIndependenceProof:p}=await import("./independenceProof-blKwmP4y.js");return{downloadIndependenceProof:p}},__vite__mapDeps([0,1,2,3]));await t(n,a),o({kind:"done"})}catch(t){o({kind:"error",message:t instanceof l&&t.status===400?"This vault was made before recovery files existed, so one can't be created for it.":t instanceof Error?t.message:String(t)})}}return e.jsx("main",{className:"bg-app fade-in",children:e.jsxs("div",{className:"mx-auto max-w-md px-5 py-12 md:py-16",children:[e.jsxs("header",{children:[e.jsx("p",{className:"eyebrow",children:"Recovery kit"}),e.jsx("h1",{className:"mt-4 font-serif text-3xl",children:"Your spare key"}),e.jsx("p",{className:"mt-3 text-sm text-muted",children:"A backup of your key, for emergencies. Best kept somewhere offline you control, like a USB stick or a printout, in more than one place. Email works too, but it's the least private choice. If you ever can't get into GhostKey, open the file and type your password to reach your money."})]}),i==="none"?e.jsxs("div",{className:"mt-8",children:[e.jsx("p",{className:"text-sm text-muted",children:"Sign in to your vault first, then come back here."}),e.jsx("div",{className:"mt-4",children:e.jsx(m,{onClick:()=>u("checkin"),children:"Sign in"})})]}):i?e.jsx("p",{className:"mt-8 text-sm text-alarm",children:i}):n?e.jsxs("div",{className:"mt-8",children:[e.jsx(m,{onClick:()=>void h(),disabled:s.kind==="busy",children:s.kind==="busy"?"Preparing":s.kind==="done"?"Saved. Download again":"Download recovery file"}),s.kind==="done"?e.jsx("p",{className:"mt-3 text-xs text-dim",children:"Saved. Keep it somewhere you'll still have access to in years to come. Without your password the file gives nothing away, but it does show your balance, so keep it private."}):null,s.kind==="error"?e.jsx("p",{className:"mt-3 text-xs text-amber-200",children:s.message}):null]}):e.jsx("p",{className:"mt-8 text-sm text-muted",children:"Loading your vault…"})]})})}export{v as RecoveryKitPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.