@waiaas/daemon 2.14.0 → 2.14.1-rc.1
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.
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +5 -1
- package/dist/api/server.js.map +1 -1
- package/package.json +6 -6
- package/public/admin/assets/{UpdateBanner-Cn-hj-wW.js → UpdateBanner-CBIdTVfe.js} +1 -1
- package/public/admin/assets/{index-BM3-LfbF.js → index-DZpZogOt.js} +3 -3
- package/public/admin/assets/setup-wizard-DTA1AwRE.js +2 -0
- package/public/admin/assets/{wc-connector-CWh3cCdO.js → wc-connector-CQOBeT_d.js} +1 -1
- package/public/admin/assets/{wc-qr-modal-DGfrGjIU.js → wc-qr-modal-Dr2Btmir.js} +1 -1
- package/public/admin/assets/wizard-store-BXpejOEK.js +1 -0
- package/public/admin/index.html +1 -1
- package/public/admin/assets/setup-wizard-CvUtCl2u.js +0 -2
- package/public/admin/assets/wizard-store-69m7YAsO.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-connector-CQOBeT_d.js","assets/index-DZpZogOt.js","assets/index-CgzzMD1b.css","assets/wc-qr-modal-Dr2Btmir.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{u as e,c as s,k as x,_ as b}from"./index-DZpZogOt.js";import{prevStep as g,wizardData as o,nextStep as w,skipOwnerStep as A,completeWizard as _,wizardStep as D}from"./wizard-store-BXpejOEK.js";const O=[{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"}],f=s(o.value.chain),l={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 I(){o.value={...o.value,chain:f.value},w()}function k(){return e("div",{children:[e("p",{style:l.description,children:"Select the blockchain network for your first wallet. You can add more wallets on different chains later."}),e("div",{style:l.grid,children:O.map(r=>e("div",{style:{...l.chainCard,...f.value===r.id?l.chainCardSelected:{}},onClick:()=>{f.value=r.id},children:[e("span",{style:l.chainIcon,children:r.icon}),e("div",{style:l.chainName,children:r.name}),e("div",{style:l.chainDesc,children:r.description})]},r.id))}),e("div",{style:l.buttonRow,children:[e("button",{style:l.buttonBack,onClick:g,children:"Back"}),e("button",{style:l.buttonNext,onClick:I,children:"Continue"})]})]})}const y=s(o.value.walletName),u=s(null),v=s(!1),c={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 L(r){r.preventDefault(),u.value=null;const t=y.value.trim();if(!t){u.value="Wallet name is required";return}v.value=!0;try{const i=await fetch("/v1/wallets",{method:"POST",headers:{"Content-Type":"application/json","X-Master-Password":o.value.password},body:JSON.stringify({name:t,chain:o.value.chain})});if(!i.ok){const R=await i.json().catch(()=>({}));u.value=R.message||"Failed to create wallet";return}const B=await i.json();o.value={...o.value,walletName:t,walletId:B.id},w()}catch{u.value="Cannot connect to daemon"}finally{v.value=!1}}function M(){return e("form",{style:c.form,onSubmit:L,children:[e("p",{style:c.description,children:"Create your first wallet. A new key pair will be generated on the selected chain."}),e("div",{style:c.chainBadge,children:["Chain: ",o.value.chain]}),e("div",{children:[e("label",{style:c.label,children:"Wallet Name"}),e("input",{type:"text",placeholder:"My Wallet",value:y.value,onInput:r=>{y.value=r.target.value},style:c.input,autoFocus:!0})]}),e("div",{style:c.buttonRow,children:[e("button",{type:"button",style:c.buttonBack,onClick:g,children:"Back"}),e("button",{type:"submit",disabled:v.value,style:{...c.buttonCreate,...v.value?c.buttonDisabled:{}},children:v.value?"Creating...":"Create Wallet"})]}),u.value&&e("p",{style:c.error,children:u.value})]})}const h=s(!1),z=s(!1),C=s(null),W=s(null),p=s(!1),m=s(null),n={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 P(){if(o.value.walletId){m.value=null,p.value=!0;try{const[r,t]=await Promise.all([b(()=>import("./wc-connector-CQOBeT_d.js"),__vite__mapDeps([0,1,2])),b(()=>import("./wc-qr-modal-Dr2Btmir.js"),__vite__mapDeps([3,1,2,0]))]);W.value=t.WcQrModal,h.value=!0,r.connectViaWalletConnect(o.value.walletId,o.value.password).catch(()=>{})}catch{m.value="Failed to load WalletConnect module"}finally{p.value=!1}}}function E(r){h.value=!1,r.success&&r.ownerAddress&&(z.value=!0,C.value=r.ownerAddress)}async function T(){h.value=!1;try{const{cancelPairing:r}=await b(async()=>{const{cancelPairing:t}=await import("./wc-connector-CQOBeT_d.js");return{cancelPairing:t}},__vite__mapDeps([0,1,2]));r()}catch{}}function N(){const r=o.value.walletId!==null,t=W.value;return e("div",{style:n.container,children:[e("p",{style:n.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:n.noWallet,children:"Wallet not created. Skip or go back to create a wallet first."}),z.value?e(x,{children:[e("div",{style:n.successBox,children:[e("div",{children:"Owner Connected"}),e("div",{style:n.successAddress,children:C.value})]}),e("button",{style:n.nextButton,onClick:w,children:"Continue"})]}):e(x,{children:[e("button",{style:{...n.connectButton,...!r||p.value?n.buttonDisabled:{}},disabled:!r||p.value,onClick:P,children:p.value?"Loading...":"Connect via WalletConnect"}),m.value&&e("p",{style:n.error,children:m.value}),e("div",{style:n.buttonRow,children:[e("button",{style:n.buttonBack,onClick:g,children:"Back"}),e("button",{style:n.skipLink,onClick:A,children:"Skip for now"})]})]}),t&&e(t,{open:h.value,onClose:T,onConnected:E})]})}const a={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 V(){const r=o.value;return e("div",{style:a.container,children:[e("div",{style:a.checkmark,children:"✓"}),e("div",{style:a.title,children:"Setup Complete!"}),e("p",{style:a.description,children:"Your WAIaaS desktop app is ready to use."}),e("div",{style:a.summary,children:[e("div",{style:a.summaryRow,children:[e("span",{style:a.summaryLabel,children:"Chain"}),e("span",{style:a.summaryValue,children:r.chain})]}),e("div",{style:a.summaryRow,children:[e("span",{style:a.summaryLabel,children:"Wallet"}),e("span",{style:a.summaryValue,children:r.walletName})]}),e("div",{style:a.summaryRow,children:[e("span",{style:a.summaryLabel,children:"Owner"}),e("span",{style:a.summaryValue,children:r.skipOwner?"Skipped (can set later)":"Connected"})]})]}),e("button",{style:a.button,onClick:_,children:"Go to Dashboard"})]})}const j=["Select Chain","Create Wallet","Connect Owner","Complete"],S=4,d={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 $({step:r}){switch(r){case 1:return e(k,{});case 2:return e(M,{});case 3:return e(N,{});case 4:return e(V,{});default:return e(k,{})}}function H(r,t){const i={width:"10px",height:"10px",borderRadius:"50%",background:"var(--color-border)",transition:"background 0.2s"};return r===t?i.background="var(--color-primary)":r<t&&(i.background="var(--color-primary)",i.opacity="0.5"),i}function q(){const r=D.value;return e("div",{style:d.wrapper,children:e("div",{style:d.card,children:[e("div",{style:d.header,children:[e("h1",{style:d.title,children:"WAIaaS Setup"}),e("p",{style:d.stepLabel,children:["Step ",r," of ",S,": ",j[r-1]]}),e("div",{style:d.progressBar,children:Array.from({length:S},(t,i)=>e("div",{style:H(i+1,r)},i+1))})]}),e($,{step:r})]})})}export{q as SetupWizard};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as i,c as p}from"./index-
|
|
1
|
+
import{A as i,c as p}from"./index-DZpZogOt.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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{y as l,u as r,k as d,M as u}from"./index-
|
|
1
|
+
import{y as l,u as r,k as d,M as u}from"./index-DZpZogOt.js";import{pairingState as p,cancelPairing as g}from"./wc-connector-CQOBeT_d.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 t,i as l}from"./index-DZpZogOt.js";const r="waiaas_setup_complete",e=t(1),n=t(!1),a=t({password:"",chain:"ethereum",walletName:"My Wallet",walletId:null,skipOwner:!1});function i(){if(!l())return!1;try{return localStorage.getItem(r)!=="true"}catch{return!1}}function u(){e.value<4&&(e.value=e.value+1)}function s(){e.value>1&&(e.value=e.value-1)}function c(){try{localStorage.setItem(r,"true")}catch{}n.value=!0;try{location.hash="#/dashboard"}catch{}}function p(){a.value={...a.value,skipOwner:!0},u()}export{c as completeWizard,i as isFirstRun,u as nextStep,s as prevStep,p as skipOwnerStep,n as wizardComplete,a as wizardData,e as wizardStep};
|
package/public/admin/index.html
CHANGED
|
@@ -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-
|
|
9
|
+
<script type="module" crossorigin src="/admin/assets/index-DZpZogOt.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/admin/assets/index-CgzzMD1b.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-connector-CWh3cCdO.js","assets/index-BM3-LfbF.js","assets/index-CgzzMD1b.css","assets/wc-qr-modal-DGfrGjIU.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as e,c as n,A as O,k as W,_ as x}from"./index-BM3-LfbF.js";import{wizardData as t,nextStep as g,prevStep as C,skipOwnerStep as M,completeWizard as T,wizardStep as E}from"./wizard-store-69m7YAsO.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-CWh3cCdO.js"),__vite__mapDeps([0,1,2])),x(()=>import("./wc-qr-modal-DGfrGjIU.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-CWh3cCdO.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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,i as r,l as u}from"./index-BM3-LfbF.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};
|