@waiaas/daemon 2.12.0 → 2.13.0-rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-connector-qNNhseI-.js","assets/index-CUtJITxv.js","assets/index-CgzzMD1b.css","assets/wc-qr-modal-BND1_Hv5.js"])))=>i.map(i=>d[i]);
2
+ import{u as e,c as n,A as O,k as W,_ as x}from"./index-CUtJITxv.js";import{wizardData as t,nextStep as g,prevStep as C,skipOwnerStep as M,completeWizard as T,wizardStep as E}from"./wizard-store-CZoifFis.js";const u=n(""),S=n(""),v=n(null),f=n(!1),s={form:{display:"flex",flexDirection:"column",gap:"var(--space-4)"},input:{width:"100%",padding:"var(--space-2) var(--space-3)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",outline:"none",boxSizing:"border-box"},label:{fontSize:"var(--font-size-sm)",fontWeight:"var(--font-weight-medium)",marginBottom:"var(--space-1)",display:"block"},fieldGroup:{display:"flex",flexDirection:"column"},button:{width:"100%",padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"},buttonDisabled:{opacity:.6,cursor:"not-allowed"},error:{color:"var(--color-danger)",fontSize:"var(--font-size-sm)",textAlign:"center"},description:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",marginBottom:"var(--space-2)"}};async function L(r){if(r.preventDefault(),v.value=null,u.value.length<8){v.value="Password must be at least 8 characters";return}if(u.value!==S.value){v.value="Passwords do not match";return}f.value=!0;try{const a=await fetch(O.ADMIN_MASTER_PASSWORD,{method:"PUT",headers:{"Content-Type":"application/json","X-Master-Password":u.value},body:JSON.stringify({password:u.value})});if(!a.ok){const i=await a.json().catch(()=>({}));v.value=i.message||"Failed to set password";return}t.value={...t.value,password:u.value},g()}catch{v.value="Cannot connect to daemon"}finally{f.value=!1}}function R(){return e("form",{style:s.form,onSubmit:L,children:[e("p",{style:s.description,children:"Choose a master password to secure your WAIaaS daemon. This password is required every time you access the admin interface."}),e("div",{style:s.fieldGroup,children:[e("label",{style:s.label,children:"Master Password"}),e("input",{type:"password",placeholder:"Enter password (min 8 chars)",value:u.value,onInput:r=>{u.value=r.target.value},style:s.input,autoFocus:!0})]}),e("div",{style:s.fieldGroup,children:[e("label",{style:s.label,children:"Confirm Password"}),e("input",{type:"password",placeholder:"Re-enter password",value:S.value,onInput:r=>{S.value=r.target.value},style:s.input})]}),e("button",{type:"submit",disabled:f.value,style:{...s.button,...f.value?s.buttonDisabled:{}},children:f.value?"Setting password...":"Set Password & Continue"}),v.value&&e("p",{style:s.error,children:v.value})]})}const N=[{id:"ethereum",name:"Ethereum",icon:"Ξ",description:"EVM mainnet"},{id:"solana",name:"Solana",icon:"◎",description:"High throughput"},{id:"base",name:"Base",icon:"△",description:"Coinbase L2"},{id:"polygon",name:"Polygon",icon:"⬡",description:"EVM sidechain"},{id:"arbitrum",name:"Arbitrum",icon:"◇",description:"Optimistic rollup"}],z=n(t.value.chain),c={description:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",marginBottom:"var(--space-4)"},grid:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"var(--space-3)",marginBottom:"var(--space-4)"},chainCard:{padding:"var(--space-3)",border:"2px solid var(--color-border)",borderRadius:"var(--radius-md)",cursor:"pointer",textAlign:"center",transition:"border-color 0.15s"},chainCardSelected:{borderColor:"var(--color-primary)",background:"var(--color-bg-secondary)"},chainIcon:{fontSize:"var(--font-size-2xl)",display:"block",marginBottom:"var(--space-1)"},chainName:{fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)"},chainDesc:{fontSize:"var(--font-size-xs)",color:"var(--color-text-secondary)"},buttonRow:{display:"flex",gap:"var(--space-3)"},buttonBack:{flex:1,padding:"var(--space-2) var(--space-4)",background:"transparent",color:"var(--color-text)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",cursor:"pointer"},buttonNext:{flex:2,padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"}};function V(){t.value={...t.value,chain:z.value},g()}function $(){return e("div",{children:[e("p",{style:c.description,children:"Select the blockchain network for your first wallet. You can add more wallets on different chains later."}),e("div",{style:c.grid,children:N.map(r=>e("div",{style:{...c.chainCard,...z.value===r.id?c.chainCardSelected:{}},onClick:()=>{z.value=r.id},children:[e("span",{style:c.chainIcon,children:r.icon}),e("div",{style:c.chainName,children:r.name}),e("div",{style:c.chainDesc,children:r.description})]},r.id))}),e("div",{style:c.buttonRow,children:[e("button",{style:c.buttonBack,onClick:C,children:"Back"}),e("button",{style:c.buttonNext,onClick:V,children:"Continue"})]})]})}const k=n(t.value.walletName),m=n(null),b=n(!1),d={form:{display:"flex",flexDirection:"column",gap:"var(--space-4)"},description:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",marginBottom:"var(--space-2)"},label:{fontSize:"var(--font-size-sm)",fontWeight:"var(--font-weight-medium)",marginBottom:"var(--space-1)",display:"block"},input:{width:"100%",padding:"var(--space-2) var(--space-3)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",outline:"none",boxSizing:"border-box"},chainBadge:{display:"inline-block",padding:"var(--space-1) var(--space-2)",background:"var(--color-bg-secondary)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-sm)",fontSize:"var(--font-size-sm)",marginBottom:"var(--space-3)"},buttonRow:{display:"flex",gap:"var(--space-3)"},buttonBack:{flex:1,padding:"var(--space-2) var(--space-4)",background:"transparent",color:"var(--color-text)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",cursor:"pointer"},buttonCreate:{flex:2,padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"},buttonDisabled:{opacity:.6,cursor:"not-allowed"},error:{color:"var(--color-danger)",fontSize:"var(--font-size-sm)",textAlign:"center"}};async function j(r){r.preventDefault(),m.value=null;const a=k.value.trim();if(!a){m.value="Wallet name is required";return}b.value=!0;try{const i=await fetch("/v1/wallets",{method:"POST",headers:{"Content-Type":"application/json","X-Master-Password":t.value.password},body:JSON.stringify({name:a,chain:t.value.chain})});if(!i.ok){const I=await i.json().catch(()=>({}));m.value=I.message||"Failed to create wallet";return}const _=await i.json();t.value={...t.value,walletName:a,walletId:_.id},g()}catch{m.value="Cannot connect to daemon"}finally{b.value=!1}}function F(){return e("form",{style:d.form,onSubmit:j,children:[e("p",{style:d.description,children:"Create your first wallet. A new key pair will be generated on the selected chain."}),e("div",{style:d.chainBadge,children:["Chain: ",t.value.chain]}),e("div",{children:[e("label",{style:d.label,children:"Wallet Name"}),e("input",{type:"text",placeholder:"My Wallet",value:k.value,onInput:r=>{k.value=r.target.value},style:d.input,autoFocus:!0})]}),e("div",{style:d.buttonRow,children:[e("button",{type:"button",style:d.buttonBack,onClick:C,children:"Back"}),e("button",{type:"submit",disabled:b.value,style:{...d.buttonCreate,...b.value?d.buttonDisabled:{}},children:b.value?"Creating...":"Create Wallet"})]}),m.value&&e("p",{style:d.error,children:m.value})]})}const w=n(!1),A=n(!1),P=n(null),D=n(null),h=n(!1),y=n(null),l={container:{display:"flex",flexDirection:"column",gap:"var(--space-4)"},description:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",lineHeight:"1.5"},connectButton:{width:"100%",padding:"var(--space-3) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"},buttonDisabled:{opacity:.6,cursor:"not-allowed"},skipLink:{textAlign:"center",color:"var(--color-text-secondary)",fontSize:"var(--font-size-sm)",cursor:"pointer",textDecoration:"underline",background:"none",border:"none",padding:"var(--space-2)"},successBox:{padding:"var(--space-3)",background:"var(--color-bg-secondary)",border:"1px solid var(--color-success)",borderRadius:"var(--radius-md)",textAlign:"center"},successAddress:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",wordBreak:"break-all",marginTop:"var(--space-1)"},nextButton:{width:"100%",padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"},buttonRow:{display:"flex",gap:"var(--space-3)"},buttonBack:{flex:1,padding:"var(--space-2) var(--space-4)",background:"transparent",color:"var(--color-text)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",cursor:"pointer"},noWallet:{fontSize:"var(--font-size-sm)",color:"var(--color-warning)",textAlign:"center"},error:{color:"var(--color-danger)",fontSize:"var(--font-size-sm)",textAlign:"center"}};async function G(){if(t.value.walletId){y.value=null,h.value=!0;try{const[r,a]=await Promise.all([x(()=>import("./wc-connector-qNNhseI-.js"),__vite__mapDeps([0,1,2])),x(()=>import("./wc-qr-modal-BND1_Hv5.js"),__vite__mapDeps([3,1,2,0]))]);D.value=a.WcQrModal,w.value=!0,r.connectViaWalletConnect(t.value.walletId,t.value.password).catch(()=>{})}catch{y.value="Failed to load WalletConnect module"}finally{h.value=!1}}}function H(r){w.value=!1,r.success&&r.ownerAddress&&(A.value=!0,P.value=r.ownerAddress)}async function q(){w.value=!1;try{const{cancelPairing:r}=await x(async()=>{const{cancelPairing:a}=await import("./wc-connector-qNNhseI-.js");return{cancelPairing:a}},__vite__mapDeps([0,1,2]));r()}catch{}}function J(){const r=t.value.walletId!==null,a=D.value;return e("div",{style:l.container,children:[e("p",{style:l.description,children:"Connect an external wallet (MetaMask, Phantom, etc.) as the Owner of this wallet. The Owner can approve high-value transactions and manage security settings."}),!r&&e("p",{style:l.noWallet,children:"Wallet not created. Skip or go back to create a wallet first."}),A.value?e(W,{children:[e("div",{style:l.successBox,children:[e("div",{children:"Owner Connected"}),e("div",{style:l.successAddress,children:P.value})]}),e("button",{style:l.nextButton,onClick:g,children:"Continue"})]}):e(W,{children:[e("button",{style:{...l.connectButton,...!r||h.value?l.buttonDisabled:{}},disabled:!r||h.value,onClick:G,children:h.value?"Loading...":"Connect via WalletConnect"}),y.value&&e("p",{style:l.error,children:y.value}),e("div",{style:l.buttonRow,children:[e("button",{style:l.buttonBack,onClick:C,children:"Back"}),e("button",{style:l.skipLink,onClick:M,children:"Skip for now"})]})]}),a&&e(a,{open:w.value,onClose:q,onConnected:H})]})}const o={container:{display:"flex",flexDirection:"column",alignItems:"center",gap:"var(--space-4)",textAlign:"center"},checkmark:{fontSize:"3rem",lineHeight:1},title:{fontSize:"var(--font-size-xl)",fontWeight:"var(--font-weight-bold)"},summary:{width:"100%",padding:"var(--space-3)",background:"var(--color-bg-secondary)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",textAlign:"left"},summaryRow:{display:"flex",justifyContent:"space-between",padding:"var(--space-1) 0",fontSize:"var(--font-size-sm)"},summaryLabel:{color:"var(--color-text-secondary)"},summaryValue:{fontWeight:"var(--font-weight-medium)"},button:{width:"100%",padding:"var(--space-3) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",cursor:"pointer"},description:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)"}};function X(){const r=t.value;return e("div",{style:o.container,children:[e("div",{style:o.checkmark,children:"✓"}),e("div",{style:o.title,children:"Setup Complete!"}),e("p",{style:o.description,children:"Your WAIaaS desktop app is ready to use."}),e("div",{style:o.summary,children:[e("div",{style:o.summaryRow,children:[e("span",{style:o.summaryLabel,children:"Chain"}),e("span",{style:o.summaryValue,children:r.chain})]}),e("div",{style:o.summaryRow,children:[e("span",{style:o.summaryLabel,children:"Wallet"}),e("span",{style:o.summaryValue,children:r.walletName})]}),e("div",{style:o.summaryRow,children:[e("span",{style:o.summaryLabel,children:"Owner"}),e("span",{style:o.summaryValue,children:r.skipOwner?"Skipped (can set later)":"Connected"})]})]}),e("button",{style:o.button,onClick:T,children:"Go to Dashboard"})]})}const Y=["Set Password","Select Chain","Create Wallet","Connect Owner","Complete"],B=5,p={wrapper:{display:"flex",alignItems:"center",justifyContent:"center",minHeight:"100vh",background:"var(--color-bg-secondary)"},card:{background:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-lg)",padding:"var(--space-8)",width:"100%",maxWidth:"480px",boxShadow:"var(--shadow-md)"},header:{textAlign:"center",marginBottom:"var(--space-6)"},title:{fontSize:"var(--font-size-2xl)",fontWeight:"var(--font-weight-bold)",marginBottom:"var(--space-1)"},stepLabel:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",marginBottom:"var(--space-4)"},progressBar:{display:"flex",justifyContent:"center",gap:"var(--space-2)"}};function Q({step:r}){switch(r){case 1:return e(R,{});case 2:return e($,{});case 3:return e(F,{});case 4:return e(J,{});case 5:return e(X,{});default:return e(R,{})}}function U(r,a){const i={width:"10px",height:"10px",borderRadius:"50%",background:"var(--color-border)",transition:"background 0.2s"};return r===a?i.background="var(--color-primary)":r<a&&(i.background="var(--color-primary)",i.opacity="0.5"),i}function ee(){const r=E.value;return e("div",{style:p.wrapper,children:e("div",{style:p.card,children:[e("div",{style:p.header,children:[e("h1",{style:p.title,children:"WAIaaS Setup"}),e("p",{style:p.stepLabel,children:["Step ",r," of ",B,": ",Y[r-1]]}),e("div",{style:p.progressBar,children:Array.from({length:B},(a,i)=>e("div",{style:U(i+1,r)},i+1))})]}),e(Q,{step:r})]})})}export{ee as SetupWizard};
@@ -0,0 +1 @@
1
+ import{A as i,c as p}from"./index-CUtJITxv.js";const A=3e3,f=100,e=p({status:"idle",qrCodeDataUrl:null,uri:null,expiresAt:null,error:null,ownerAddress:null});let s=null,a=0;function v(){e.value={status:"idle",qrCodeDataUrl:null,uri:null,expiresAt:null,error:null,ownerAddress:null},a=0}function c(){s&&(clearInterval(s),s=null),v()}async function P(o,d){c();const u={"Content-Type":"application/json","X-Master-Password":d};e.value={...e.value,status:"pairing"};let n;try{const t=await fetch(i.WALLET_WC_PAIR(o),{method:"POST",headers:u});if(!t.ok){const r=(await t.json().catch(()=>({}))).message||"Failed to start pairing";return e.value={...e.value,status:"error",error:r},{success:!1,error:r}}n=await t.json()}catch{return e.value={...e.value,status:"error",error:"Cannot connect to daemon"},{success:!1,error:"Cannot connect to daemon"}}return e.value={status:"waiting",qrCodeDataUrl:n.qrCode,uri:n.uri,expiresAt:n.expiresAt,error:null,ownerAddress:null},new Promise(t=>{a=0,s=setInterval(async()=>{if(a++,a>f){c(),e.value={...e.value,status:"expired",error:"Pairing timed out"},t({success:!1,error:"Pairing timed out"});return}try{const l=await fetch(i.WALLET_WC_PAIR_STATUS(o),{headers:u});if(!l.ok)return;const r=await l.json();r.status==="connected"&&r.session?(s&&clearInterval(s),s=null,e.value={...e.value,status:"connected",ownerAddress:r.session.ownerAddress},t({success:!0,ownerAddress:r.session.ownerAddress,chain:r.session.chainId})):(r.status==="expired"||r.status==="none")&&(s&&clearInterval(s),s=null,e.value={...e.value,status:"expired",error:"Pairing expired"},t({success:!1,error:"Pairing expired"}))}catch{}},A)})}export{c as cancelPairing,P as connectViaWalletConnect,e as pairingState};
@@ -0,0 +1 @@
1
+ import{y as l,u as r,k as d,M as u}from"./index-CUtJITxv.js";import{pairingState as p,cancelPairing as g}from"./wc-connector-qNNhseI-.js";const t={center:{textAlign:"center"},qrImage:{width:"280px",height:"280px",margin:"0 auto",display:"block"},hint:{marginTop:"var(--space-3)",color:"var(--color-text-secondary)",fontSize:"0.85rem"},waiting:{marginTop:"var(--space-2)",color:"var(--color-text-secondary)",fontSize:"0.75rem"},spinner:{display:"flex",justifyContent:"center",alignItems:"center",minHeight:"200px",color:"var(--color-text-secondary)"},success:{display:"flex",flexDirection:"column",alignItems:"center",gap:"var(--space-3)",minHeight:"200px",justifyContent:"center"},successIcon:{fontSize:"3rem",color:"var(--color-success)"},address:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",wordBreak:"break-all"},errorBox:{display:"flex",flexDirection:"column",alignItems:"center",gap:"var(--space-3)",minHeight:"200px",justifyContent:"center"},errorText:{color:"var(--color-danger)",fontSize:"var(--font-size-sm)"},retryButton:{padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"#0c0c0c",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-sm)",cursor:"pointer"}};function f({open:s,onClose:a,onConnected:n}){const e=p.value;l(()=>{if(e.status==="connected"&&e.ownerAddress){const c=setTimeout(()=>{n({success:!0,ownerAddress:e.ownerAddress})},2e3);return()=>clearTimeout(c)}},[e.status,e.ownerAddress,n]);function o(){g(),a()}function i(){switch(e.status){case"connected":return"Connected!";case"expired":case"error":return"Pairing Failed";default:return"Scan QR Code"}}return r(u,{open:s,title:i(),onCancel:o,children:r("div",{style:t.center,children:[e.status==="pairing"&&r("div",{style:t.spinner,children:"Starting pairing..."}),e.status==="waiting"&&e.qrCodeDataUrl&&r(d,{children:[r("img",{src:e.qrCodeDataUrl,alt:"WalletConnect QR Code",style:t.qrImage}),r("p",{style:t.hint,children:"Scan with Phantom, MetaMask, or any WalletConnect-compatible wallet"}),r("p",{style:t.waiting,children:"Waiting for connection..."})]}),e.status==="connected"&&r("div",{style:t.success,children:[r("span",{style:t.successIcon,children:"✓"}),r("div",{children:"Owner wallet connected"}),e.ownerAddress&&r("div",{style:t.address,children:e.ownerAddress})]}),(e.status==="expired"||e.status==="error")&&r("div",{style:t.errorBox,children:[r("p",{style:t.errorText,children:e.error||"Pairing failed"}),r("button",{style:t.retryButton,onClick:o,children:"Try Again"})]})]})})}export{f as WcQrModal};
@@ -0,0 +1 @@
1
+ import{c as a,i as r,l as u}from"./index-CUtJITxv.js";const l="waiaas_setup_complete",e=a(1),n=a(!1),t=a({password:"",chain:"ethereum",walletName:"My Wallet",walletId:null,skipOwner:!1});function o(){if(!r())return!1;try{return localStorage.getItem(l)!=="true"}catch{return!1}}function s(){e.value<5&&(e.value=e.value+1)}function c(){e.value>1&&(e.value=e.value-1)}function p(){try{localStorage.setItem(l,"true")}catch{}n.value=!0,u(t.value.password)}function f(){t.value={...t.value,skipOwner:!0},s()}export{p as completeWizard,o as isFirstRun,s as nextStep,c as prevStep,f as skipOwnerStep,n as wizardComplete,t as wizardData,e as wizardStep};
@@ -6,7 +6,7 @@
6
6
  <meta name="theme-color" content="#0c0c0c" />
7
7
  <meta name="color-scheme" content="dark" />
8
8
  <title>WAIaaS Admin</title>
9
- <script type="module" crossorigin src="/admin/assets/index-xLsEi6ed.js"></script>
9
+ <script type="module" crossorigin src="/admin/assets/index-CUtJITxv.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="/admin/assets/index-CgzzMD1b.css">
11
11
  </head>
12
12
  <body>