@xyo-network/react-wallet 2.77.2 → 2.78.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/browser/index.cjs +813 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +801 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/neutral/index.cjs +813 -1
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +801 -1
- package/dist/neutral/index.js.map +1 -1
- package/dist/node/index.cjs +852 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +806 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +14 -14
package/dist/node/index.cjs
CHANGED
|
@@ -1,2 +1,853 @@
|
|
|
1
|
-
"use strict";var ue=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ut=Object.prototype.hasOwnProperty;var mt=(e,o)=>{for(var t in o)ue(e,t,{get:o[t],enumerable:!0})},pt=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of dt(o))!ut.call(e,n)&&n!==t&&ue(e,n,{get:()=>o[n],enumerable:!(r=ct(o,n))||r.enumerable});return e};var ft=e=>pt(ue({},"__esModule",{value:!0}),e);var At={};mt(At,{DefaultSeedPhrase:()=>xt,DialogActionButtons:()=>ge,InvalidPhraseTypography:()=>Y,MaxAccountsTableRow:()=>ht,NewPhraseTextField:()=>ve,OverwriteWarning:()=>Ae,PhraseDialogActions:()=>We,PhraseHeaderBox:()=>U,SavedPhraseTextField:()=>we,SeedPhraseContext:()=>$,SeedPhraseDialog:()=>ye,SeedPhraseDialogInner:()=>Xe,SeedPhraseIconButton:()=>L,SeedPhraseProvider:()=>he,SeedPhraseTableRow:()=>St,WalletAccountDetails:()=>vt,WalletAccountSelect:()=>Re,WalletAccountSelectBar:()=>wt,WalletContext:()=>E,WalletProvider:()=>Pt,colorParser:()=>Ce,useAccount:()=>Fe,useIndexedWalletFromContext:()=>Ye,useRootWallet:()=>Pe,useSeedPhrase:()=>S,useSelectedWalletAccount:()=>Se,useWallet:()=>H,useWalletContext:()=>g,useWalletProvided:()=>xe,useWallets:()=>gt,useWrapperAccount:()=>bt});module.exports=ft(At);var w=require("@mui/material"),me=require("@xylabs/react-button"),pe=require("react");var D=require("@mui/material"),G=require("react/jsx-runtime"),ke=({activeAccountIndex:e,desiredMaximumAccounts:o,setShowSnackBar:t,showSnackBar:r})=>(0,G.jsx)(D.Snackbar,{anchorOrigin:{horizontal:"center",vertical:"top"},autoHideDuration:5e3,onClose:()=>t==null?void 0:t(!1),open:r,children:(0,G.jsxs)(D.Alert,{severity:"error",onClose:()=>t==null?void 0:t(!1),children:[(0,G.jsx)(D.AlertTitle,{children:"Maximum Accounts Error"}),"Your currently selected account number (",e===void 0?"":e+1,") cannot be greater than the desired Maximum Accounts (",o,")."]})});var v=require("react/jsx-runtime"),ht=({activeAccountIndex:e,changeMaxAccounts:o,maxAccounts:t})=>{let[r,n]=(0,pe.useState)(),[a,i]=(0,pe.useState)(!1),l=h=>{if(t!==void 0&&e!==void 0)switch(h){case"decrease":{let s=t-1,x=s>0,u=e+1<=s;x&&u&&(o==null||o(s)),u||i(!0),n(s);return}case"increase":{o==null||o(t+1);return}default:console.error(h,"is not a recognized value")}else throw new Error("Max Accounts is unset and needs a default")};return(0,v.jsxs)(w.TableRow,{children:[(0,v.jsx)(w.TableCell,{children:"Maximum Accounts"}),(0,v.jsx)(w.TableCell,{align:"center",children:(0,v.jsx)(w.Typography,{variant:"caption",children:t})}),(0,v.jsxs)(w.TableCell,{align:"center",children:[(0,v.jsxs)(w.ButtonGroup,{children:[(0,v.jsx)(me.ButtonEx,{onClick:()=>l("decrease"),variant:"contained",size:"small",children:"-"}),(0,v.jsx)(me.ButtonEx,{onClick:()=>l("increase"),variant:"contained",size:"small",children:"+"})]}),(0,v.jsx)(ke,{desiredMaximumAccounts:r,activeAccountIndex:e,setShowSnackBar:i,showSnackBar:a})]})]})};var Ee=require("@mui/icons-material"),d=require("@mui/material"),Oe=require("react"),m=require("react/jsx-runtime"),L=e=>{let[o,t]=(0,Oe.useState)(!1),r=()=>t(!1);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(d.IconButton,{onClick:()=>t(!0),...e,children:(0,m.jsx)(Ee.HelpOutline,{fontSize:"small"})}),(0,m.jsxs)(d.Dialog,{open:o,children:[(0,m.jsx)(d.DialogTitle,{children:"Understanding your Seed Phrase"}),(0,m.jsxs)(d.DialogContent,{children:[(0,m.jsxs)(d.Typography,{children:["Your Seed Phrase should adhere to the"," ",(0,m.jsx)(d.Link,{target:"_blank",href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"bip39 specification"})," ","and is used to generate accounts which identify your data on the XYO Network."]}),(0,m.jsxs)(d.List,{children:[(0,m.jsx)(d.ListItem,{children:"Do not share this phrase with anyone."}),(0,m.jsx)(d.ListItem,{children:"Do not save it to a public computer."}),(0,m.jsx)(d.ListItem,{children:"Do not use a existing phrase from another wallet (i.e. Metamask)."}),(0,m.jsx)(d.ListItem,{children:"Do not use before copying it down somewhere safe."})]})]}),(0,m.jsx)(d.DialogActions,{children:(0,m.jsx)(d.Button,{onClick:r,variant:"outlined",children:"OK"})})]})]})};var k=require("@mui/material"),He=require("@scure/bip39"),ze=require("@scure/bip39/wordlists/english"),ee=require("react"),I=require("react/jsx-runtime"),xt=({changeSeedPhrase:e,children:o,hideDefaultSeedPhraseMessage:t,seedPhrase:r})=>{let[n,a]=(0,ee.useState)(!1);return(0,ee.useEffect)(()=>{if(!r){let i=(0,He.generateMnemonic)(ze.wordlist,256);e==null||e(i),a(!0)}},[e,r]),(0,I.jsxs)(I.Fragment,{children:[t?null:(0,I.jsx)(k.Snackbar,{open:n,autoHideDuration:5e3,onClose:()=>a(!1),anchorOrigin:{horizontal:"center",vertical:"top"},children:(0,I.jsxs)(k.Alert,{severity:"success",children:[(0,I.jsx)(k.AlertTitle,{children:"Default Seed Phrase Generated"}),"Go to application settings to save it."]})}),o]})};var _=require("@mui/material");var Me=require("@xyo-network/react-shared"),$=(0,Me.createContextEx)();var te=require("@scure/bip39"),fe=require("@scure/bip39/wordlists/english"),p=require("react");var Ne=require("react/jsx-runtime"),R=e=>e?(0,te.validateMnemonic)(e,fe.wordlist):null,he=({children:e,defaultPhrase:o,handleChangeSeedPhrase:t,saveCallback:r,seedPhrase:n,open:a})=>{let[i,l]=(0,p.useState)(),[h,s]=(0,p.useState)(!1);(0,p.useEffect)(()=>{l(o)},[o]),(0,p.useEffect)(()=>{(n||a)&&(l==null||l(n??""))},[n,a,l]);let x=(0,p.useCallback)(()=>{let N=(0,te.generateMnemonic)(fe.wordlist,256);l==null||l(N),s==null||s(!1)},[]),u=(0,p.useCallback)(()=>{s==null||s(!1)},[]),z=(0,p.useCallback)(()=>{l==null||l(""),s==null||s(!1)},[]),P=(0,p.useCallback)(()=>{!h&&n&&n!==i?s==null||s(!0):(t==null||t(i??""),r==null||r())},[t,h,i,r,n]);(0,p.useEffect)(()=>{a||u()},[u,a]);let M=(0,p.useMemo)(()=>R==null?void 0:R(n),[n]),c=(0,p.useMemo)(()=>R==null?void 0:R(i),[i]);return(0,Ne.jsx)($.Provider,{value:{handleCancelOverwrite:u,handleChangeSeedPhrase:t,handleClear:z,handleGenerate:x,handleSave:P,overwriteWarning:h,phrase:i,provided:!0,seedPhrase:n,setOverwriteWarning:s,setPhrase:l,validPhrase:c,validSeedPhrase:M,validate:R},children:e})};var Ge=require("@xyo-network/react-shared");var S=()=>(0,Ge.useContextEx)($,"SeedPhrase",!0);var Le=require("@xyo-network/react-shared"),E=(0,Le.createContextEx)();var $e=require("@xylabs/react-promise"),oe=require("react");var _e=require("react/jsx-runtime"),Pt=({children:e,defaultActiveAccountIndex:o=0,rootWallet:t=null,...r})=>{let[n,a]=(0,oe.useState)(o);(0,oe.useEffect)(()=>{o!==void 0&&a(o)},[o]);let[i=null]=(0,$e.usePromise)(async()=>await(t==null?void 0:t.derivePath(n.toString())),[n,t]);return(0,_e.jsx)(E.Provider,{value:{activeAccount:i,activeAccountIndex:n,provided:!0,rootWallet:t,setActiveAccountIndex:a},...r,children:e})};var Ve=require("@xylabs/react-promise"),re=require("@xyo-network/react-shared");var g=(e=!0)=>(0,re.useContextEx)(E,"Wallet",e),xe=()=>(0,re.useProvided)(E),Pe=(e=!0)=>{let{rootWallet:o}=g(e);return[o,void 0]},Ye=(e,o=!0)=>{let{rootWallet:t}=g(o),[r]=(0,Ve.usePromise)(async()=>await(t==null?void 0:t.derivePath(e.toString()))??t,[t,e]);return[r,void 0]},Se=(e=!0)=>{let{activeAccountIndex:o}=g(e),[t]=Ye(o??0,e);return o===void 0&&t===null?[null,void 0]:[t,void 0]};var V=require("react/jsx-runtime"),ge=({onClose:e,...o})=>{let{handleSave:t,setPhrase:r}=S();return(0,V.jsxs)(_.DialogActions,{...o,children:[(0,V.jsx)(_.Button,{variant:"outlined",onClick:a=>{r==null||r(""),e==null||e(a,"escapeKeyDown")},children:"Cancel"}),(0,V.jsx)(_.Button,{variant:"outlined",onClick:t,children:"Save"})]})};var ie=require("@mui/material");var Ce=e=>{switch(e){case!0:return"success";case!1:return"error";default:return}};var ne=require("@mui/material"),ae=require("react/jsx-runtime"),Y=e=>(0,ae.jsxs)(ne.Typography,{variant:"caption",color:"error",...e,children:["Invalid seed phrase. See -"," ",(0,ae.jsx)(ne.Link,{target:"_blank",href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"bip39 Proposal"})]});var se=require("@mui/icons-material"),Ke=require("@xylabs/react-flexbox"),be=require("react"),K=require("react/jsx-runtime"),U=({children:e,conditional:o,...t})=>{let r=(0,be.useMemo)(()=>{switch(o){case!0:return"success";case!1:return"error";default:return null}},[o]),n=(0,be.useMemo)(()=>{switch(r){case"success":return(0,K.jsx)(se.CheckCircleOutline,{fontSize:"small",color:"success"});case"error":return(0,K.jsx)(se.HighlightOff,{fontSize:"small",color:"error"});default:return null}},[r]);return(0,K.jsxs)(Ke.FlexRow,{justifyContent:"start",columnGap:1,...t,children:[n,e]})};var F=require("react/jsx-runtime"),ve=({children:e,disableColor:o,...t})=>{let{phrase:r,setPhrase:n,validPhrase:a}=S();return(0,F.jsx)(F.Fragment,{children:(0,F.jsxs)(ie.FormControl,{fullWidth:!0,size:"small",sx:{display:"flex",flexDirection:"column",rowGap:1},children:[e,(0,F.jsx)(ie.TextField,{focused:!0,color:o?void 0:Ce(a),error:a===!1,helperText:a===!1?(0,F.jsx)(Y,{}):null,fullWidth:!0,maxRows:Number.POSITIVE_INFINITY,multiline:!0,onChange:i=>n==null?void 0:n(i.target.value),value:r,...t})]})})};var q=require("@mui/material");var X=require("react/jsx-runtime"),We=()=>{let{handleClear:e,handleGenerate:o,overwriteWarning:t}=S();return(0,X.jsxs)(q.DialogActions,{sx:{justifyContent:"center"},children:[(0,X.jsx)(q.Button,{disabled:t,variant:"outlined",onClick:o,children:"Generate"}),(0,X.jsx)(q.Button,{variant:"outlined",onClick:e,children:"Clear"})]})};var T=require("@mui/material"),Ue=require("react");var W=require("react/jsx-runtime"),we=({fullWidth:e,showPhraseHeader:o,...t})=>{let{validSeedPhrase:r,seedPhrase:n}=S(),[a,i]=(0,Ue.useState)(!1);return(0,W.jsxs)(T.FormControl,{fullWidth:e,size:"small",sx:{display:"flex",flexDirection:"column",rowGap:1},children:[(0,W.jsx)(T.Chip,{label:a?"Hide Saved Seed Phrase":"Reveal Saved Seed Phrase",onClick:()=>i(!a),sx:{alignSelf:"center"}}),a?(0,W.jsxs)(W.Fragment,{children:[o?(0,W.jsx)(T.FormLabel,{children:(0,W.jsx)(U,{conditional:r,children:"Saved Seed Phrase"})}):null,(0,W.jsx)(T.TextField,{defaultValue:n,disabled:!0,error:r===!1,helperText:r===!1?(0,W.jsx)(Y,{}):null,fullWidth:!0,maxRows:Number.POSITIVE_INFINITY,multiline:!0,...t})]}):null]})};var J=require("@mui/material"),qe=require("@xylabs/react-flexbox");var O=require("react/jsx-runtime"),Ae=()=>{let{handleCancelOverwrite:e,handleSave:o}=S();return(0,O.jsx)(J.Alert,{variant:"outlined",severity:"warning",action:(0,O.jsxs)(qe.FlexRow,{sx:{columnGap:1},children:[(0,O.jsx)(J.Button,{variant:"outlined",color:"inherit",size:"small",onClick:o,children:"Overwrite"}),(0,O.jsx)(J.Button,{variant:"outlined",color:"inherit",size:"small",onClick:e,children:"Cancel"})]}),children:"Are you sure you want to overwrite existing seed phrase? This action cannot be undone."})};var B=require("@mui/material");var f=require("react/jsx-runtime"),ye=({changeSeedPhrase:e,seedPhrase:o,...t})=>(0,f.jsx)(he,{seedPhrase:o,handleChangeSeedPhrase:e,open:t.open,saveCallback:()=>{var r;return(r=t.onClose)==null?void 0:r.call(t,{},"escapeKeyDown")},children:(0,f.jsx)(Xe,{...t})}),Xe=e=>{let{overwriteWarning:o,seedPhrase:t,validPhrase:r}=S();return(0,f.jsxs)(B.Dialog,{"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",fullWidth:!0,maxWidth:"sm",...e,children:[(0,f.jsxs)(B.DialogTitle,{id:"alert-dialog-title",children:["Update Your Seed Phrase ",(0,f.jsx)(L,{})]}),(0,f.jsxs)(B.DialogContent,{sx:{display:"flex",flexDirection:"column",rowGap:2},children:[(0,f.jsx)(ve,{children:(0,f.jsx)(B.FormLabel,{children:(0,f.jsx)(U,{conditional:r,children:"New Seed Phrase"})})}),(0,f.jsx)(We,{}),t?(0,f.jsx)(we,{}):null,o?(0,f.jsx)(Ae,{}):null]}),(0,f.jsx)(ge,{onClose:e.onClose})]})};var le=require("@mui/icons-material"),A=require("@mui/material"),Je=require("react");var C=require("react/jsx-runtime"),St=({changeSeedPhrase:e,seedPhrase:o,...t})=>{let[r,n]=(0,Je.useState)(!1);return(0,C.jsxs)(A.TableRow,{...t,children:[(0,C.jsxs)(A.TableCell,{children:["Seed Phrase ",(0,C.jsx)(L,{})]}),(0,C.jsx)(A.TableCell,{align:"center",children:o?(0,C.jsx)(le.RadioButtonChecked,{color:"success"}):(0,C.jsx)(le.Cancel,{color:"error"})}),(0,C.jsxs)(A.TableCell,{children:[(0,C.jsx)(ye,{changeSeedPhrase:e,open:r,onClose:()=>n(!1),seedPhrase:o}),(0,C.jsx)(A.ButtonGroup,{fullWidth:!0,children:(0,C.jsx)(A.Button,{variant:"contained",size:"small",onClick:()=>{n(!0)},children:"Update"})})]})]})};var nt=require("@xylabs/eth-address"),at=require("@xylabs/react-crypto"),ce=require("@xylabs/react-flexbox"),Z=require("@xylabs/react-number-status"),st=require("@xyo-network/react-network");var Qe=require("@xylabs/react-promise"),Ie=require("react");var Fe=({wallet:e,account:o,index:t,required:r=!1}={})=>{let n=xe(),[a,i]=(0,Ie.useState)();e&&o&&!a&&i(new Error("useAccount can not have both a wallet and an account in the parameters")),t&&o&&!a&&i(new Error("useAccount can not have both a index and an account in the parameters"));let[l,h]=(0,Ie.useState)(),[s]=Pe(!e&&r),{activeAccountIndex:x}=g(!1),[u]=(0,Qe.usePromise)(async()=>{var z,P;try{if(!a){if(e)return await((z=e==null?void 0:e.derivePath)==null?void 0:z.call(e,`${t??0}'\0`));if(s)return await((P=s==null?void 0:s.derivePath)==null?void 0:P.call(s,`${t??x??0}'\0`))}}catch(M){let c=M;console.error(c.message),h(c)}},[t,e,s,x,a]);return a&&!l&&(console.error(a.message),h(a)),[l?void 0:o??u??n?null:void 0,l]};var Ze=require("@xylabs/react-promise"),Te=require("@xyo-network/account"),je=require("react");var H=({mnemonic:e,wallet:o,path:t,required:r=!1,seed:n}={})=>{let a=g(!1),[i,l]=(0,je.useState)(),[h]=Se(!o&&r),[s]=(0,Ze.usePromise)(async()=>{var x;try{let u=await(o||(e?Te.HDWallet.fromPhrase(e):n?Te.HDWallet.fromSeed(n):h));return t?(x=u==null?void 0:u.derivePath)==null?void 0:x.call(u,t):u??o}catch(u){l(u)}},[e,h,n,t,o]);return[s??(a?null:s),i]};var et=require("@xylabs/react-promise");var gt=({wallet:e,paths:o})=>{let t=g(!1),[r]=H({wallet:e}),[n,a]=(0,et.usePromise)(async()=>r?await Promise.all(o.map(i=>r.derivePath(i))):void 0,[r,o]);return[n??(t?null:n),a]};var tt=require("@xylabs/react-promise"),ot=require("@xyo-network/account"),rt=require("async-mutex"),Q,Ct=new rt.Mutex,bt=e=>(0,tt.usePromise)(async()=>await Ct.runExclusive(async()=>{if(e!==void 0)return e;if(Q)return Q;try{Q=await ot.HDWallet.random(),console.log(`Global Wrapper Wallet Creation Success: ${Q.address}`)}catch(o){console.error(`Global Wrapper Wallet Creation Failed: ${o.message}`)}return Q}),[e]);var y=require("react/jsx-runtime"),vt=({exploreUrl:e="https://explore.xyo.network",account:o,...t})=>{let[r]=Fe({account:o}),{network:n}=(0,st.useNetwork)(),a=`${e}/recent?account=${r==null?void 0:r.address}&network=${(n==null?void 0:n.name)??"main"}`;return(0,y.jsxs)(ce.FlexCol,{...t,children:[(0,y.jsx)(at.EthAccountButton,{address:nt.EthAddress.fromString(r==null?void 0:r.address)}),(0,y.jsxs)(ce.FlexRow,{gap:1,children:[(0,y.jsx)(Z.NumberStatus,{rounded:!0,title:"Tokens",value:0,to:`${a}&schema=network.xyo.account.tokens`,target:"_blank"}),(0,y.jsx)(Z.NumberStatus,{rounded:!0,title:"NFTs",value:0,to:`${a}&schema=network.xyo.account.nfts`,target:"_blank"}),(0,y.jsx)(Z.NumberStatus,{rounded:!0,title:"Signatures",value:0,to:`${a}&schema=network.xyo.account.signatures`,target:"_blank"}),(0,y.jsx)(Z.NumberStatus,{rounded:!0,title:"Signins",value:0,to:`${a}&schema=network.xyo.account.signins`,target:"_blank"})]})]})};var j=require("@mui/material"),it=require("@xylabs/react-select"),Be=require("@xyo-network/react-address-render");var b=require("react/jsx-runtime"),Wt=(e,o=0)=>[...Array.from({length:e}).keys()].map(t=>t+o),Re=({addressNames:e={},iconOnly:o,iconSize:t=24,icons:r,maxAccounts:n=1,showFavorite:a=!1,size:i,variant:l="outlined",...h})=>{let{activeAccountIndex:s=0,setActiveAccountIndex:x,rootWallet:u}=g();return(0,b.jsx)(b.Fragment,{children:u?(0,b.jsx)(it.SelectEx,{margin:"dense",disabled:!u||s===void 0,renderValue:P=>(0,b.jsx)(()=>{let[c]=H({path:P.toString(),wallet:u}),N=c?e[c.address]:void 0,de=!!c&&c.address in e;return(0,b.jsx)(j.MenuItem,{value:P,sx:{minHeight:0,paddingBottom:0,paddingTop:0},children:(0,b.jsx)(Be.AddressRenderRowBox,{disableSharedRef:!0,flexGrow:1,address:c==null?void 0:c.address,iconOnly:o,iconSize:t,icons:r,name:N,favorite:de,showFavorite:a})})},{}),value:s,onChange:P=>x==null?void 0:x(Number.parseInt(`${P.target.value}`)),size:i,variant:l,...h,children:Wt(n).map(P=>(0,b.jsx)(()=>{let[c]=H({path:P.toString(),wallet:u}),N=c?e[c.address]:void 0,de=!!c&&c.address in e;return(0,b.jsx)(j.MenuItem,{value:P,sx:{minHeight:0,paddingBottom:0,paddingTop:0},children:(0,b.jsx)(Be.AddressRenderRowBox,{disableSharedRef:!0,flexGrow:1,address:c==null?void 0:c.address,favorite:de,iconOnly:o,iconSize:t,icons:r,name:N,showFavorite:a})},c==null?void 0:c.address)},{},P))}):(0,b.jsx)(j.CircularProgress,{size:24})})};var lt=require("@xylabs/react-flexbox");var De=require("react/jsx-runtime"),wt=({addressNames:e={},iconOnly:o,iconSize:t,icons:r,maxAccounts:n=1,showFavorite:a=!1,size:i="small",...l})=>(0,De.jsx)(lt.FlexCol,{alignItems:"stretch",...l,children:(0,De.jsx)(Re,{addressNames:e,fullWidth:!0,showFavorite:a,iconSize:t,iconOnly:o,icons:r,maxAccounts:n,size:i??"small",variant:"outlined"})});0&&(module.exports={DefaultSeedPhrase,DialogActionButtons,InvalidPhraseTypography,MaxAccountsTableRow,NewPhraseTextField,OverwriteWarning,PhraseDialogActions,PhraseHeaderBox,SavedPhraseTextField,SeedPhraseContext,SeedPhraseDialog,SeedPhraseDialogInner,SeedPhraseIconButton,SeedPhraseProvider,SeedPhraseTableRow,WalletAccountDetails,WalletAccountSelect,WalletAccountSelectBar,WalletContext,WalletProvider,colorParser,useAccount,useIndexedWalletFromContext,useRootWallet,useSeedPhrase,useSelectedWalletAccount,useWallet,useWalletContext,useWalletProvided,useWallets,useWrapperAccount});
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
DefaultSeedPhrase: () => DefaultSeedPhrase,
|
|
24
|
+
DialogActionButtons: () => DialogActionButtons,
|
|
25
|
+
InvalidPhraseTypography: () => InvalidPhraseTypography,
|
|
26
|
+
MaxAccountsTableRow: () => MaxAccountsTableRow,
|
|
27
|
+
NewPhraseTextField: () => NewPhraseTextField,
|
|
28
|
+
OverwriteWarning: () => OverwriteWarning,
|
|
29
|
+
PhraseDialogActions: () => PhraseDialogActions,
|
|
30
|
+
PhraseHeaderBox: () => PhraseHeaderBox,
|
|
31
|
+
SavedPhraseTextField: () => SavedPhraseTextField,
|
|
32
|
+
SeedPhraseContext: () => SeedPhraseContext,
|
|
33
|
+
SeedPhraseDialog: () => SeedPhraseDialog,
|
|
34
|
+
SeedPhraseDialogInner: () => SeedPhraseDialogInner,
|
|
35
|
+
SeedPhraseIconButton: () => SeedPhraseIconButton,
|
|
36
|
+
SeedPhraseProvider: () => SeedPhraseProvider,
|
|
37
|
+
SeedPhraseTableRow: () => SeedPhraseTableRow,
|
|
38
|
+
WalletAccountDetails: () => WalletAccountDetails,
|
|
39
|
+
WalletAccountSelect: () => WalletAccountSelect,
|
|
40
|
+
WalletAccountSelectBar: () => WalletAccountSelectBar,
|
|
41
|
+
WalletContext: () => WalletContext,
|
|
42
|
+
WalletProvider: () => WalletProvider,
|
|
43
|
+
colorParser: () => colorParser,
|
|
44
|
+
useAccount: () => useAccount,
|
|
45
|
+
useIndexedWalletFromContext: () => useIndexedWalletFromContext,
|
|
46
|
+
useRootWallet: () => useRootWallet,
|
|
47
|
+
useSeedPhrase: () => useSeedPhrase,
|
|
48
|
+
useSelectedWalletAccount: () => useSelectedWalletAccount,
|
|
49
|
+
useWallet: () => useWallet,
|
|
50
|
+
useWalletContext: () => useWalletContext,
|
|
51
|
+
useWalletProvided: () => useWalletProvided,
|
|
52
|
+
useWallets: () => useWallets,
|
|
53
|
+
useWrapperAccount: () => useWrapperAccount
|
|
54
|
+
});
|
|
55
|
+
module.exports = __toCommonJS(src_exports);
|
|
56
|
+
|
|
57
|
+
// src/components/MaxAccounts/MaxAccountsTableRow.tsx
|
|
58
|
+
var import_material2 = require("@mui/material");
|
|
59
|
+
var import_react_button = require("@xylabs/react-button");
|
|
60
|
+
var import_react = require("react");
|
|
61
|
+
|
|
62
|
+
// src/components/MaxAccounts/OutOfBoundsSnackBar.tsx
|
|
63
|
+
var import_material = require("@mui/material");
|
|
64
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
65
|
+
var OutOfBoundsSnackBar = ({
|
|
66
|
+
activeAccountIndex,
|
|
67
|
+
desiredMaximumAccounts,
|
|
68
|
+
setShowSnackBar,
|
|
69
|
+
showSnackBar
|
|
70
|
+
}) => {
|
|
71
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
72
|
+
import_material.Snackbar,
|
|
73
|
+
{
|
|
74
|
+
anchorOrigin: { horizontal: "center", vertical: "top" },
|
|
75
|
+
autoHideDuration: 5e3,
|
|
76
|
+
onClose: () => setShowSnackBar == null ? void 0 : setShowSnackBar(false),
|
|
77
|
+
open: showSnackBar,
|
|
78
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_material.Alert, { severity: "error", onClose: () => setShowSnackBar == null ? void 0 : setShowSnackBar(false), children: [
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.AlertTitle, { children: "Maximum Accounts Error" }),
|
|
80
|
+
"Your currently selected account number (",
|
|
81
|
+
activeAccountIndex === void 0 ? "" : activeAccountIndex + 1,
|
|
82
|
+
") cannot be greater than the desired Maximum Accounts (",
|
|
83
|
+
desiredMaximumAccounts,
|
|
84
|
+
")."
|
|
85
|
+
] })
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
// src/components/MaxAccounts/MaxAccountsTableRow.tsx
|
|
91
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
92
|
+
var MaxAccountsTableRow = ({ activeAccountIndex, changeMaxAccounts, maxAccounts }) => {
|
|
93
|
+
const [desiredMaximumAccounts, setDesiredMaximumAccounts] = (0, import_react.useState)();
|
|
94
|
+
const [showSnackBar, setShowSnackBar] = (0, import_react.useState)(false);
|
|
95
|
+
const handleChangeMaxAccounts = (change) => {
|
|
96
|
+
if (maxAccounts !== void 0 && activeAccountIndex !== void 0) {
|
|
97
|
+
switch (change) {
|
|
98
|
+
case "decrease": {
|
|
99
|
+
const desiredMaximumAccounts2 = maxAccounts - 1;
|
|
100
|
+
const validMaximumAccounts = desiredMaximumAccounts2 > 0;
|
|
101
|
+
const maxAccountsWithinRange = activeAccountIndex + 1 <= desiredMaximumAccounts2;
|
|
102
|
+
if (validMaximumAccounts && maxAccountsWithinRange) {
|
|
103
|
+
changeMaxAccounts == null ? void 0 : changeMaxAccounts(desiredMaximumAccounts2);
|
|
104
|
+
}
|
|
105
|
+
if (!maxAccountsWithinRange) setShowSnackBar(true);
|
|
106
|
+
setDesiredMaximumAccounts(desiredMaximumAccounts2);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
case "increase": {
|
|
110
|
+
changeMaxAccounts == null ? void 0 : changeMaxAccounts(maxAccounts + 1);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
default: {
|
|
114
|
+
console.error(change, "is not a recognized value");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
throw new Error("Max Accounts is unset and needs a default");
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.TableRow, { children: [
|
|
122
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.TableCell, { children: "Maximum Accounts" }),
|
|
123
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.TableCell, { align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.Typography, { variant: "caption", children: maxAccounts }) }),
|
|
124
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.TableCell, { align: "center", children: [
|
|
125
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.ButtonGroup, { children: [
|
|
126
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_button.ButtonEx, { onClick: () => handleChangeMaxAccounts("decrease"), variant: "contained", size: "small", children: "-" }),
|
|
127
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_button.ButtonEx, { onClick: () => handleChangeMaxAccounts("increase"), variant: "contained", size: "small", children: "+" })
|
|
128
|
+
] }),
|
|
129
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
130
|
+
OutOfBoundsSnackBar,
|
|
131
|
+
{
|
|
132
|
+
desiredMaximumAccounts,
|
|
133
|
+
activeAccountIndex,
|
|
134
|
+
setShowSnackBar,
|
|
135
|
+
showSnackBar
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
] })
|
|
139
|
+
] });
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
// src/components/SeedPhrase/_shared/SeedPhraseIconButton.tsx
|
|
143
|
+
var import_icons_material = require("@mui/icons-material");
|
|
144
|
+
var import_material3 = require("@mui/material");
|
|
145
|
+
var import_react2 = require("react");
|
|
146
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
147
|
+
var SeedPhraseIconButton = (props) => {
|
|
148
|
+
const [open, setOpen] = (0, import_react2.useState)(false);
|
|
149
|
+
const onClose = () => setOpen(false);
|
|
150
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
151
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.IconButton, { onClick: () => setOpen(true), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons_material.HelpOutline, { fontSize: "small" }) }),
|
|
152
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Dialog, { open, children: [
|
|
153
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.DialogTitle, { children: "Understanding your Seed Phrase" }),
|
|
154
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.DialogContent, { children: [
|
|
155
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Typography, { children: [
|
|
156
|
+
"Your Seed Phrase should adhere to the",
|
|
157
|
+
" ",
|
|
158
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Link, { target: "_blank", href: "https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki", children: "bip39 specification" }),
|
|
159
|
+
" ",
|
|
160
|
+
"and is used to generate accounts which identify your data on the XYO Network."
|
|
161
|
+
] }),
|
|
162
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.List, { children: [
|
|
163
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not share this phrase with anyone." }),
|
|
164
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not save it to a public computer." }),
|
|
165
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not use a existing phrase from another wallet (i.e. Metamask)." }),
|
|
166
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not use before copying it down somewhere safe." })
|
|
167
|
+
] })
|
|
168
|
+
] }),
|
|
169
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.DialogActions, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Button, { onClick: onClose, variant: "outlined", children: "OK" }) })
|
|
170
|
+
] })
|
|
171
|
+
] });
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
// src/components/SeedPhrase/DefaultSeedPhrase.tsx
|
|
175
|
+
var import_material4 = require("@mui/material");
|
|
176
|
+
var import_bip39 = require("@scure/bip39");
|
|
177
|
+
var import_english = require("@scure/bip39/wordlists/english");
|
|
178
|
+
var import_react3 = require("react");
|
|
179
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
180
|
+
var DefaultSeedPhrase = ({ changeSeedPhrase, children, hideDefaultSeedPhraseMessage, seedPhrase }) => {
|
|
181
|
+
const [showSnackBar, setShowSnackBar] = (0, import_react3.useState)(false);
|
|
182
|
+
(0, import_react3.useEffect)(() => {
|
|
183
|
+
if (!seedPhrase) {
|
|
184
|
+
const mnemonic = (0, import_bip39.generateMnemonic)(import_english.wordlist, 256);
|
|
185
|
+
changeSeedPhrase == null ? void 0 : changeSeedPhrase(mnemonic);
|
|
186
|
+
setShowSnackBar(true);
|
|
187
|
+
}
|
|
188
|
+
}, [changeSeedPhrase, seedPhrase]);
|
|
189
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
190
|
+
hideDefaultSeedPhraseMessage ? null : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
191
|
+
import_material4.Snackbar,
|
|
192
|
+
{
|
|
193
|
+
open: showSnackBar,
|
|
194
|
+
autoHideDuration: 5e3,
|
|
195
|
+
onClose: () => setShowSnackBar(false),
|
|
196
|
+
anchorOrigin: { horizontal: "center", vertical: "top" },
|
|
197
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.Alert, { severity: "success", children: [
|
|
198
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.AlertTitle, { children: "Default Seed Phrase Generated" }),
|
|
199
|
+
"Go to application settings to save it."
|
|
200
|
+
] })
|
|
201
|
+
}
|
|
202
|
+
),
|
|
203
|
+
children
|
|
204
|
+
] });
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx
|
|
208
|
+
var import_material5 = require("@mui/material");
|
|
209
|
+
|
|
210
|
+
// src/contexts/SeedPhrase/Context.ts
|
|
211
|
+
var import_react_shared = require("@xyo-network/react-shared");
|
|
212
|
+
var SeedPhraseContext = (0, import_react_shared.createContextEx)();
|
|
213
|
+
|
|
214
|
+
// src/contexts/SeedPhrase/Provider.tsx
|
|
215
|
+
var import_bip392 = require("@scure/bip39");
|
|
216
|
+
var import_english2 = require("@scure/bip39/wordlists/english");
|
|
217
|
+
var import_react4 = require("react");
|
|
218
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
219
|
+
var validate = (passedPhrase) => {
|
|
220
|
+
if (!passedPhrase) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
return (0, import_bip392.validateMnemonic)(passedPhrase, import_english2.wordlist);
|
|
224
|
+
};
|
|
225
|
+
var SeedPhraseProvider = ({
|
|
226
|
+
children,
|
|
227
|
+
defaultPhrase,
|
|
228
|
+
handleChangeSeedPhrase,
|
|
229
|
+
saveCallback,
|
|
230
|
+
seedPhrase,
|
|
231
|
+
open
|
|
232
|
+
}) => {
|
|
233
|
+
const [phrase, setPhrase] = (0, import_react4.useState)();
|
|
234
|
+
const [overwriteWarning, setOverwriteWarning] = (0, import_react4.useState)(false);
|
|
235
|
+
(0, import_react4.useEffect)(() => {
|
|
236
|
+
setPhrase(defaultPhrase);
|
|
237
|
+
}, [defaultPhrase]);
|
|
238
|
+
(0, import_react4.useEffect)(() => {
|
|
239
|
+
if (seedPhrase || open) {
|
|
240
|
+
setPhrase == null ? void 0 : setPhrase(seedPhrase ?? "");
|
|
241
|
+
}
|
|
242
|
+
}, [seedPhrase, open, setPhrase]);
|
|
243
|
+
const handleGenerate = (0, import_react4.useCallback)(() => {
|
|
244
|
+
const mnemonic = (0, import_bip392.generateMnemonic)(import_english2.wordlist, 256);
|
|
245
|
+
setPhrase == null ? void 0 : setPhrase(mnemonic);
|
|
246
|
+
setOverwriteWarning == null ? void 0 : setOverwriteWarning(false);
|
|
247
|
+
}, []);
|
|
248
|
+
const handleCancelOverwrite = (0, import_react4.useCallback)(() => {
|
|
249
|
+
setOverwriteWarning == null ? void 0 : setOverwriteWarning(false);
|
|
250
|
+
}, []);
|
|
251
|
+
const handleClear = (0, import_react4.useCallback)(() => {
|
|
252
|
+
setPhrase == null ? void 0 : setPhrase("");
|
|
253
|
+
setOverwriteWarning == null ? void 0 : setOverwriteWarning(false);
|
|
254
|
+
}, []);
|
|
255
|
+
const handleSave = (0, import_react4.useCallback)(() => {
|
|
256
|
+
if (!overwriteWarning && seedPhrase && seedPhrase !== phrase) {
|
|
257
|
+
setOverwriteWarning == null ? void 0 : setOverwriteWarning(true);
|
|
258
|
+
} else {
|
|
259
|
+
handleChangeSeedPhrase == null ? void 0 : handleChangeSeedPhrase(phrase ?? "");
|
|
260
|
+
saveCallback == null ? void 0 : saveCallback();
|
|
261
|
+
}
|
|
262
|
+
}, [handleChangeSeedPhrase, overwriteWarning, phrase, saveCallback, seedPhrase]);
|
|
263
|
+
(0, import_react4.useEffect)(() => {
|
|
264
|
+
if (!open) {
|
|
265
|
+
handleCancelOverwrite();
|
|
266
|
+
}
|
|
267
|
+
}, [handleCancelOverwrite, open]);
|
|
268
|
+
const validSeedPhrase = (0, import_react4.useMemo)(() => validate == null ? void 0 : validate(seedPhrase), [seedPhrase]);
|
|
269
|
+
const validPhrase = (0, import_react4.useMemo)(() => validate == null ? void 0 : validate(phrase), [phrase]);
|
|
270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
271
|
+
SeedPhraseContext.Provider,
|
|
272
|
+
{
|
|
273
|
+
value: {
|
|
274
|
+
handleCancelOverwrite,
|
|
275
|
+
handleChangeSeedPhrase,
|
|
276
|
+
handleClear,
|
|
277
|
+
handleGenerate,
|
|
278
|
+
handleSave,
|
|
279
|
+
overwriteWarning,
|
|
280
|
+
phrase,
|
|
281
|
+
provided: true,
|
|
282
|
+
seedPhrase,
|
|
283
|
+
setOverwriteWarning,
|
|
284
|
+
setPhrase,
|
|
285
|
+
validPhrase,
|
|
286
|
+
validSeedPhrase,
|
|
287
|
+
validate
|
|
288
|
+
},
|
|
289
|
+
children
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
// src/contexts/SeedPhrase/use.tsx
|
|
295
|
+
var import_react_shared2 = require("@xyo-network/react-shared");
|
|
296
|
+
var useSeedPhrase = () => (0, import_react_shared2.useContextEx)(SeedPhraseContext, "SeedPhrase", true);
|
|
297
|
+
|
|
298
|
+
// src/contexts/Wallet/Context.ts
|
|
299
|
+
var import_react_shared3 = require("@xyo-network/react-shared");
|
|
300
|
+
var WalletContext = (0, import_react_shared3.createContextEx)();
|
|
301
|
+
|
|
302
|
+
// src/contexts/Wallet/Provider.tsx
|
|
303
|
+
var import_react_promise = require("@xylabs/react-promise");
|
|
304
|
+
var import_react5 = require("react");
|
|
305
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
306
|
+
var WalletProvider = ({
|
|
307
|
+
children,
|
|
308
|
+
defaultActiveAccountIndex = 0,
|
|
309
|
+
rootWallet = null,
|
|
310
|
+
...props
|
|
311
|
+
}) => {
|
|
312
|
+
const [activeAccountIndex, setActiveAccountIndex] = (0, import_react5.useState)(defaultActiveAccountIndex);
|
|
313
|
+
(0, import_react5.useEffect)(() => {
|
|
314
|
+
if (defaultActiveAccountIndex !== void 0) {
|
|
315
|
+
setActiveAccountIndex(defaultActiveAccountIndex);
|
|
316
|
+
}
|
|
317
|
+
}, [defaultActiveAccountIndex]);
|
|
318
|
+
const [activeAccount = null] = (0, import_react_promise.usePromise)(async () => await (rootWallet == null ? void 0 : rootWallet.derivePath(activeAccountIndex.toString())), [activeAccountIndex, rootWallet]);
|
|
319
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
320
|
+
WalletContext.Provider,
|
|
321
|
+
{
|
|
322
|
+
value: {
|
|
323
|
+
activeAccount,
|
|
324
|
+
activeAccountIndex,
|
|
325
|
+
provided: true,
|
|
326
|
+
rootWallet,
|
|
327
|
+
setActiveAccountIndex
|
|
328
|
+
},
|
|
329
|
+
...props,
|
|
330
|
+
children
|
|
331
|
+
}
|
|
332
|
+
);
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
// src/contexts/Wallet/use.ts
|
|
336
|
+
var import_react_promise2 = require("@xylabs/react-promise");
|
|
337
|
+
var import_react_shared4 = require("@xyo-network/react-shared");
|
|
338
|
+
var useWalletContext = (required = true) => {
|
|
339
|
+
return (0, import_react_shared4.useContextEx)(WalletContext, "Wallet", required);
|
|
340
|
+
};
|
|
341
|
+
var useWalletProvided = () => {
|
|
342
|
+
return (0, import_react_shared4.useProvided)(WalletContext);
|
|
343
|
+
};
|
|
344
|
+
var useRootWallet = (required = true) => {
|
|
345
|
+
const { rootWallet } = useWalletContext(required);
|
|
346
|
+
return [rootWallet, void 0];
|
|
347
|
+
};
|
|
348
|
+
var useIndexedWalletFromContext = (index, required = true) => {
|
|
349
|
+
const { rootWallet } = useWalletContext(required);
|
|
350
|
+
const [wallet] = (0, import_react_promise2.usePromise)(async () => await (rootWallet == null ? void 0 : rootWallet.derivePath(index.toString())) ?? rootWallet, [rootWallet, index]);
|
|
351
|
+
return [wallet, void 0];
|
|
352
|
+
};
|
|
353
|
+
var useSelectedWalletAccount = (required = true) => {
|
|
354
|
+
const { activeAccountIndex } = useWalletContext(required);
|
|
355
|
+
const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
|
|
356
|
+
return activeAccountIndex === void 0 && account === null ? [null, void 0] : [account, void 0];
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
// src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx
|
|
360
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
361
|
+
var DialogActionButtons = ({ onClose, ...props }) => {
|
|
362
|
+
const { handleSave, setPhrase } = useSeedPhrase();
|
|
363
|
+
const wrappedOnClose = (e) => {
|
|
364
|
+
setPhrase == null ? void 0 : setPhrase("");
|
|
365
|
+
onClose == null ? void 0 : onClose(e, "escapeKeyDown");
|
|
366
|
+
};
|
|
367
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_material5.DialogActions, { ...props, children: [
|
|
368
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material5.Button, { variant: "outlined", onClick: wrappedOnClose, children: "Cancel" }),
|
|
369
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material5.Button, { variant: "outlined", onClick: handleSave, children: "Save" })
|
|
370
|
+
] });
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
// src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx
|
|
374
|
+
var import_material7 = require("@mui/material");
|
|
375
|
+
|
|
376
|
+
// src/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.ts
|
|
377
|
+
var colorParser = (conditional) => {
|
|
378
|
+
switch (conditional) {
|
|
379
|
+
case true: {
|
|
380
|
+
return "success";
|
|
381
|
+
}
|
|
382
|
+
case false: {
|
|
383
|
+
return "error";
|
|
384
|
+
}
|
|
385
|
+
default: {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
// src/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.tsx
|
|
392
|
+
var import_material6 = require("@mui/material");
|
|
393
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
394
|
+
var InvalidPhraseTypography = (props) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_material6.Typography, { variant: "caption", color: "error", ...props, children: [
|
|
395
|
+
"Invalid seed phrase. See -",
|
|
396
|
+
" ",
|
|
397
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_material6.Link, { target: "_blank", href: "https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki", children: "bip39 Proposal" })
|
|
398
|
+
] });
|
|
399
|
+
|
|
400
|
+
// src/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.tsx
|
|
401
|
+
var import_icons_material2 = require("@mui/icons-material");
|
|
402
|
+
var import_react_flexbox = require("@xylabs/react-flexbox");
|
|
403
|
+
var import_react6 = require("react");
|
|
404
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
405
|
+
var PhraseHeaderBox = ({ children, conditional, ...props }) => {
|
|
406
|
+
const state = (0, import_react6.useMemo)(() => {
|
|
407
|
+
switch (conditional) {
|
|
408
|
+
case true: {
|
|
409
|
+
return "success";
|
|
410
|
+
}
|
|
411
|
+
case false: {
|
|
412
|
+
return "error";
|
|
413
|
+
}
|
|
414
|
+
default: {
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}, [conditional]);
|
|
419
|
+
const Icon = (0, import_react6.useMemo)(() => {
|
|
420
|
+
switch (state) {
|
|
421
|
+
case "success": {
|
|
422
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons_material2.CheckCircleOutline, { fontSize: "small", color: "success" });
|
|
423
|
+
}
|
|
424
|
+
case "error": {
|
|
425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons_material2.HighlightOff, { fontSize: "small", color: "error" });
|
|
426
|
+
}
|
|
427
|
+
default: {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}, [state]);
|
|
432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_flexbox.FlexRow, { justifyContent: "start", columnGap: 1, ...props, children: [
|
|
433
|
+
Icon,
|
|
434
|
+
children
|
|
435
|
+
] });
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
// src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx
|
|
439
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
440
|
+
var NewPhraseTextField = ({ children, disableColor, ...props }) => {
|
|
441
|
+
const { phrase, setPhrase, validPhrase } = useSeedPhrase();
|
|
442
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_material7.FormControl, { fullWidth: true, size: "small", sx: { display: "flex", flexDirection: "column", rowGap: 1 }, children: [
|
|
443
|
+
children,
|
|
444
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
445
|
+
import_material7.TextField,
|
|
446
|
+
{
|
|
447
|
+
focused: true,
|
|
448
|
+
color: disableColor ? void 0 : colorParser(validPhrase),
|
|
449
|
+
error: validPhrase === false,
|
|
450
|
+
helperText: validPhrase === false ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InvalidPhraseTypography, {}) : null,
|
|
451
|
+
fullWidth: true,
|
|
452
|
+
maxRows: Number.POSITIVE_INFINITY,
|
|
453
|
+
multiline: true,
|
|
454
|
+
onChange: (e) => setPhrase == null ? void 0 : setPhrase(e.target.value),
|
|
455
|
+
value: phrase,
|
|
456
|
+
...props
|
|
457
|
+
}
|
|
458
|
+
)
|
|
459
|
+
] }) });
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
// src/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.tsx
|
|
463
|
+
var import_material8 = require("@mui/material");
|
|
464
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
465
|
+
var PhraseDialogActions = () => {
|
|
466
|
+
const { handleClear, handleGenerate, overwriteWarning } = useSeedPhrase();
|
|
467
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.DialogActions, { sx: { justifyContent: "center" }, children: [
|
|
468
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Button, { disabled: overwriteWarning, variant: "outlined", onClick: handleGenerate, children: "Generate" }),
|
|
469
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Button, { variant: "outlined", onClick: handleClear, children: "Clear" })
|
|
470
|
+
] });
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
// src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx
|
|
474
|
+
var import_material9 = require("@mui/material");
|
|
475
|
+
var import_react7 = require("react");
|
|
476
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
477
|
+
var SavedPhraseTextField = ({ fullWidth, showPhraseHeader, ...props }) => {
|
|
478
|
+
const { validSeedPhrase, seedPhrase } = useSeedPhrase();
|
|
479
|
+
const [visible, setVisible] = (0, import_react7.useState)(false);
|
|
480
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_material9.FormControl, { fullWidth, size: "small", sx: { display: "flex", flexDirection: "column", rowGap: 1 }, children: [
|
|
481
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material9.Chip, { label: visible ? "Hide Saved Seed Phrase" : "Reveal Saved Seed Phrase", onClick: () => setVisible(!visible), sx: { alignSelf: "center" } }),
|
|
482
|
+
visible ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
483
|
+
showPhraseHeader ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material9.FormLabel, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PhraseHeaderBox, { conditional: validSeedPhrase, children: "Saved Seed Phrase" }) }) : null,
|
|
484
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
485
|
+
import_material9.TextField,
|
|
486
|
+
{
|
|
487
|
+
defaultValue: seedPhrase,
|
|
488
|
+
disabled: true,
|
|
489
|
+
error: validSeedPhrase === false,
|
|
490
|
+
helperText: validSeedPhrase === false ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(InvalidPhraseTypography, {}) : null,
|
|
491
|
+
fullWidth: true,
|
|
492
|
+
maxRows: Number.POSITIVE_INFINITY,
|
|
493
|
+
multiline: true,
|
|
494
|
+
...props
|
|
495
|
+
}
|
|
496
|
+
)
|
|
497
|
+
] }) : null
|
|
498
|
+
] });
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx
|
|
502
|
+
var import_material10 = require("@mui/material");
|
|
503
|
+
var import_react_flexbox2 = require("@xylabs/react-flexbox");
|
|
504
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
505
|
+
var OverwriteWarning = () => {
|
|
506
|
+
const { handleCancelOverwrite, handleSave } = useSeedPhrase();
|
|
507
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
508
|
+
import_material10.Alert,
|
|
509
|
+
{
|
|
510
|
+
variant: "outlined",
|
|
511
|
+
severity: "warning",
|
|
512
|
+
action: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_flexbox2.FlexRow, { sx: { columnGap: 1 }, children: [
|
|
513
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material10.Button, { variant: "outlined", color: "inherit", size: "small", onClick: handleSave, children: "Overwrite" }),
|
|
514
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material10.Button, { variant: "outlined", color: "inherit", size: "small", onClick: handleCancelOverwrite, children: "Cancel" })
|
|
515
|
+
] }),
|
|
516
|
+
children: "Are you sure you want to overwrite existing seed phrase? This action cannot be undone."
|
|
517
|
+
}
|
|
518
|
+
);
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
// src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx
|
|
522
|
+
var import_material11 = require("@mui/material");
|
|
523
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
524
|
+
var SeedPhraseDialog = ({ changeSeedPhrase, seedPhrase, ...props }) => {
|
|
525
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
526
|
+
SeedPhraseProvider,
|
|
527
|
+
{
|
|
528
|
+
seedPhrase,
|
|
529
|
+
handleChangeSeedPhrase: changeSeedPhrase,
|
|
530
|
+
open: props.open,
|
|
531
|
+
saveCallback: () => {
|
|
532
|
+
var _a;
|
|
533
|
+
return (_a = props.onClose) == null ? void 0 : _a.call(props, {}, "escapeKeyDown");
|
|
534
|
+
},
|
|
535
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SeedPhraseDialogInner, { ...props })
|
|
536
|
+
}
|
|
537
|
+
);
|
|
538
|
+
};
|
|
539
|
+
var SeedPhraseDialogInner = (props) => {
|
|
540
|
+
const { overwriteWarning, seedPhrase, validPhrase } = useSeedPhrase();
|
|
541
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.Dialog, { "aria-labelledby": "alert-dialog-title", "aria-describedby": "alert-dialog-description", fullWidth: true, maxWidth: "sm", ...props, children: [
|
|
542
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.DialogTitle, { id: "alert-dialog-title", children: [
|
|
543
|
+
"Update Your Seed Phrase ",
|
|
544
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SeedPhraseIconButton, {})
|
|
545
|
+
] }),
|
|
546
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.DialogContent, { sx: { display: "flex", flexDirection: "column", rowGap: 2 }, children: [
|
|
547
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(NewPhraseTextField, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_material11.FormLabel, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PhraseHeaderBox, { conditional: validPhrase, children: "New Seed Phrase" }) }) }),
|
|
548
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PhraseDialogActions, {}),
|
|
549
|
+
seedPhrase ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SavedPhraseTextField, {}) : null,
|
|
550
|
+
overwriteWarning ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(OverwriteWarning, {}) : null
|
|
551
|
+
] }),
|
|
552
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DialogActionButtons, { onClose: props.onClose })
|
|
553
|
+
] });
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
// src/components/SeedPhrase/settings/SeedPhraseTableRow.tsx
|
|
557
|
+
var import_icons_material3 = require("@mui/icons-material");
|
|
558
|
+
var import_material12 = require("@mui/material");
|
|
559
|
+
var import_react8 = require("react");
|
|
560
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
561
|
+
var SeedPhraseTableRow = ({ changeSeedPhrase, seedPhrase, ...props }) => {
|
|
562
|
+
const [open, setOpen] = (0, import_react8.useState)(false);
|
|
563
|
+
const handleOpen = () => {
|
|
564
|
+
setOpen(true);
|
|
565
|
+
};
|
|
566
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableRow, { ...props, children: [
|
|
567
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableCell, { children: [
|
|
568
|
+
"Seed Phrase ",
|
|
569
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SeedPhraseIconButton, {})
|
|
570
|
+
] }),
|
|
571
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.TableCell, { align: "center", children: seedPhrase ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material3.RadioButtonChecked, { color: "success" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material3.Cancel, { color: "error" }) }),
|
|
572
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableCell, { children: [
|
|
573
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SeedPhraseDialog, { changeSeedPhrase, open, onClose: () => setOpen(false), seedPhrase }),
|
|
574
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.ButtonGroup, { fullWidth: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.Button, { variant: "contained", size: "small", onClick: handleOpen, children: "Update" }) })
|
|
575
|
+
] })
|
|
576
|
+
] });
|
|
577
|
+
};
|
|
578
|
+
|
|
579
|
+
// src/components/WalletAccountDetails/WalletAccountDetails.tsx
|
|
580
|
+
var import_eth_address = require("@xylabs/eth-address");
|
|
581
|
+
var import_react_crypto = require("@xylabs/react-crypto");
|
|
582
|
+
var import_react_flexbox3 = require("@xylabs/react-flexbox");
|
|
583
|
+
var import_react_number_status = require("@xylabs/react-number-status");
|
|
584
|
+
var import_react_network = require("@xyo-network/react-network");
|
|
585
|
+
|
|
586
|
+
// src/hooks/useAccount.ts
|
|
587
|
+
var import_react_promise3 = require("@xylabs/react-promise");
|
|
588
|
+
var import_react9 = require("react");
|
|
589
|
+
var useAccount = ({ wallet, account, index, required = false } = {}) => {
|
|
590
|
+
const walletContextProvided = useWalletProvided();
|
|
591
|
+
const [validationError, setValidationError] = (0, import_react9.useState)();
|
|
592
|
+
if (wallet && account && !validationError) {
|
|
593
|
+
setValidationError(new Error("useAccount can not have both a wallet and an account in the parameters"));
|
|
594
|
+
}
|
|
595
|
+
if (index && account && !validationError) {
|
|
596
|
+
setValidationError(new Error("useAccount can not have both a index and an account in the parameters"));
|
|
597
|
+
}
|
|
598
|
+
const [error, setError] = (0, import_react9.useState)();
|
|
599
|
+
const [rootWallet] = useRootWallet(!wallet && required);
|
|
600
|
+
const { activeAccountIndex } = useWalletContext(false);
|
|
601
|
+
const [activeAccount] = (0, import_react_promise3.usePromise)(async () => {
|
|
602
|
+
var _a, _b;
|
|
603
|
+
try {
|
|
604
|
+
if (!validationError) {
|
|
605
|
+
if (wallet) {
|
|
606
|
+
return await ((_a = wallet == null ? void 0 : wallet.derivePath) == null ? void 0 : _a.call(wallet, `${index ?? 0}'\0`));
|
|
607
|
+
} else if (rootWallet) {
|
|
608
|
+
return await ((_b = rootWallet == null ? void 0 : rootWallet.derivePath) == null ? void 0 : _b.call(rootWallet, `${index ?? activeAccountIndex ?? 0}'\0`));
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
} catch (ex) {
|
|
612
|
+
const error2 = ex;
|
|
613
|
+
console.error(error2.message);
|
|
614
|
+
setError(error2);
|
|
615
|
+
}
|
|
616
|
+
}, [index, wallet, rootWallet, activeAccountIndex, validationError]);
|
|
617
|
+
if (validationError && !error) {
|
|
618
|
+
console.error(validationError.message);
|
|
619
|
+
setError(validationError);
|
|
620
|
+
}
|
|
621
|
+
return [
|
|
622
|
+
error ? void 0 : account ?? activeAccount ?? walletContextProvided ? null : void 0,
|
|
623
|
+
error
|
|
624
|
+
];
|
|
625
|
+
};
|
|
626
|
+
|
|
627
|
+
// src/hooks/useWallet.ts
|
|
628
|
+
var import_react_promise4 = require("@xylabs/react-promise");
|
|
629
|
+
var import_account = require("@xyo-network/account");
|
|
630
|
+
var import_react10 = require("react");
|
|
631
|
+
var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
|
|
632
|
+
const walletContextProvided = useWalletContext(false);
|
|
633
|
+
const [error, setError] = (0, import_react10.useState)();
|
|
634
|
+
const [contextAccount] = useSelectedWalletAccount(!wallet && required);
|
|
635
|
+
const [activeAccount] = (0, import_react_promise4.usePromise)(async () => {
|
|
636
|
+
var _a;
|
|
637
|
+
try {
|
|
638
|
+
const newAccount = await (() => {
|
|
639
|
+
if (wallet) {
|
|
640
|
+
return wallet;
|
|
641
|
+
} else if (mnemonic) {
|
|
642
|
+
return import_account.HDWallet.fromPhrase(mnemonic);
|
|
643
|
+
} else if (seed) {
|
|
644
|
+
return import_account.HDWallet.fromSeed(seed);
|
|
645
|
+
}
|
|
646
|
+
return contextAccount;
|
|
647
|
+
})();
|
|
648
|
+
return path ? (_a = newAccount == null ? void 0 : newAccount.derivePath) == null ? void 0 : _a.call(newAccount, path) : newAccount ?? wallet;
|
|
649
|
+
} catch (ex) {
|
|
650
|
+
setError(ex);
|
|
651
|
+
}
|
|
652
|
+
}, [mnemonic, contextAccount, seed, path, wallet]);
|
|
653
|
+
return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
|
|
654
|
+
};
|
|
655
|
+
|
|
656
|
+
// src/hooks/useWallets.ts
|
|
657
|
+
var import_react_promise5 = require("@xylabs/react-promise");
|
|
658
|
+
var useWallets = ({ wallet, paths }) => {
|
|
659
|
+
const walletContextProvided = useWalletContext(false);
|
|
660
|
+
const [foundWallet] = useWallet({ wallet });
|
|
661
|
+
const [wallets, error] = (0, import_react_promise5.usePromise)(
|
|
662
|
+
async () => foundWallet ? await Promise.all(paths.map((path) => foundWallet.derivePath(path))) : void 0,
|
|
663
|
+
[foundWallet, paths]
|
|
664
|
+
);
|
|
665
|
+
return [wallets ?? (walletContextProvided ? null : wallets), error];
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
// src/hooks/useWrapperAccount.ts
|
|
669
|
+
var import_react_promise6 = require("@xylabs/react-promise");
|
|
670
|
+
var import_account2 = require("@xyo-network/account");
|
|
671
|
+
var import_async_mutex = require("async-mutex");
|
|
672
|
+
var globalWrapperWallet;
|
|
673
|
+
var globalWrapperWalletMutex = new import_async_mutex.Mutex();
|
|
674
|
+
var useWrapperAccount = (account) => {
|
|
675
|
+
return (0, import_react_promise6.usePromise)(async () => {
|
|
676
|
+
return await globalWrapperWalletMutex.runExclusive(async () => {
|
|
677
|
+
if (account !== void 0) {
|
|
678
|
+
return account;
|
|
679
|
+
}
|
|
680
|
+
if (globalWrapperWallet) {
|
|
681
|
+
return globalWrapperWallet;
|
|
682
|
+
}
|
|
683
|
+
try {
|
|
684
|
+
globalWrapperWallet = await import_account2.HDWallet.random();
|
|
685
|
+
console.log(`Global Wrapper Wallet Creation Success: ${globalWrapperWallet.address}`);
|
|
686
|
+
} catch (ex) {
|
|
687
|
+
const error = ex;
|
|
688
|
+
console.error(`Global Wrapper Wallet Creation Failed: ${error.message}`);
|
|
689
|
+
}
|
|
690
|
+
return globalWrapperWallet;
|
|
691
|
+
});
|
|
692
|
+
}, [account]);
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
// src/components/WalletAccountDetails/WalletAccountDetails.tsx
|
|
696
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
697
|
+
var WalletAccountDetails = ({ exploreUrl = "https://explore.xyo.network", account, ...props }) => {
|
|
698
|
+
const [accountToUse] = useAccount({ account });
|
|
699
|
+
const { network } = (0, import_react_network.useNetwork)();
|
|
700
|
+
const exploreAddressUrl = `${exploreUrl}/recent?account=${accountToUse == null ? void 0 : accountToUse.address}&network=${(network == null ? void 0 : network.name) ?? "main"}`;
|
|
701
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_flexbox3.FlexCol, { ...props, children: [
|
|
702
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_crypto.EthAccountButton, { address: import_eth_address.EthAddress.fromString(accountToUse == null ? void 0 : accountToUse.address) }),
|
|
703
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_flexbox3.FlexRow, { gap: 1, children: [
|
|
704
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Tokens", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.tokens`, target: "_blank" }),
|
|
705
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "NFTs", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.nfts`, target: "_blank" }),
|
|
706
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Signatures", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.signatures`, target: "_blank" }),
|
|
707
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Signins", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.signins`, target: "_blank" })
|
|
708
|
+
] })
|
|
709
|
+
] });
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
// src/components/WalletAccountSelect/Select.tsx
|
|
713
|
+
var import_material13 = require("@mui/material");
|
|
714
|
+
var import_react_select = require("@xylabs/react-select");
|
|
715
|
+
var import_react_address_render = require("@xyo-network/react-address-render");
|
|
716
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
717
|
+
var arrayRange = (length, start = 0) => {
|
|
718
|
+
return [...Array.from({ length }).keys()].map((x) => x + start);
|
|
719
|
+
};
|
|
720
|
+
var WalletAccountSelect = ({
|
|
721
|
+
addressNames = {},
|
|
722
|
+
iconOnly,
|
|
723
|
+
iconSize = 24,
|
|
724
|
+
icons,
|
|
725
|
+
maxAccounts = 1,
|
|
726
|
+
showFavorite = false,
|
|
727
|
+
size,
|
|
728
|
+
variant = "outlined",
|
|
729
|
+
...props
|
|
730
|
+
}) => {
|
|
731
|
+
const { activeAccountIndex = 0, setActiveAccountIndex, rootWallet } = useWalletContext();
|
|
732
|
+
const disabled = !rootWallet || activeAccountIndex === void 0;
|
|
733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: rootWallet ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
734
|
+
import_react_select.SelectEx,
|
|
735
|
+
{
|
|
736
|
+
margin: "dense",
|
|
737
|
+
disabled,
|
|
738
|
+
renderValue: (selectedAccountIndex) => {
|
|
739
|
+
const Item = () => {
|
|
740
|
+
const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: rootWallet });
|
|
741
|
+
const customName = selectedAccount ? addressNames[selectedAccount.address] : void 0;
|
|
742
|
+
const favorite = !!selectedAccount && selectedAccount.address in addressNames;
|
|
743
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.MenuItem, { value: selectedAccountIndex, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
744
|
+
import_react_address_render.AddressRenderRowBox,
|
|
745
|
+
{
|
|
746
|
+
disableSharedRef: true,
|
|
747
|
+
flexGrow: 1,
|
|
748
|
+
address: selectedAccount == null ? void 0 : selectedAccount.address,
|
|
749
|
+
iconOnly,
|
|
750
|
+
iconSize,
|
|
751
|
+
icons,
|
|
752
|
+
name: customName,
|
|
753
|
+
favorite,
|
|
754
|
+
showFavorite
|
|
755
|
+
}
|
|
756
|
+
) });
|
|
757
|
+
};
|
|
758
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Item, {});
|
|
759
|
+
},
|
|
760
|
+
value: activeAccountIndex,
|
|
761
|
+
onChange: (event) => setActiveAccountIndex == null ? void 0 : setActiveAccountIndex(Number.parseInt(`${event.target.value}`)),
|
|
762
|
+
size,
|
|
763
|
+
variant,
|
|
764
|
+
...props,
|
|
765
|
+
children: arrayRange(maxAccounts).map((index) => {
|
|
766
|
+
const Item = () => {
|
|
767
|
+
const [account] = useWallet({ path: index.toString(), wallet: rootWallet });
|
|
768
|
+
const customName = account ? addressNames[account.address] : void 0;
|
|
769
|
+
const favorite = !!account && account.address in addressNames;
|
|
770
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.MenuItem, { value: index, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
771
|
+
import_react_address_render.AddressRenderRowBox,
|
|
772
|
+
{
|
|
773
|
+
disableSharedRef: true,
|
|
774
|
+
flexGrow: 1,
|
|
775
|
+
address: account == null ? void 0 : account.address,
|
|
776
|
+
favorite,
|
|
777
|
+
iconOnly,
|
|
778
|
+
iconSize,
|
|
779
|
+
icons,
|
|
780
|
+
name: customName,
|
|
781
|
+
showFavorite
|
|
782
|
+
}
|
|
783
|
+
) }, account == null ? void 0 : account.address);
|
|
784
|
+
};
|
|
785
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Item, {}, index);
|
|
786
|
+
})
|
|
787
|
+
}
|
|
788
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.CircularProgress, { size: 24 }) });
|
|
789
|
+
};
|
|
790
|
+
|
|
791
|
+
// src/components/WalletAccountSelect/SelectBar.tsx
|
|
792
|
+
var import_react_flexbox4 = require("@xylabs/react-flexbox");
|
|
793
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
794
|
+
var WalletAccountSelectBar = ({
|
|
795
|
+
addressNames = {},
|
|
796
|
+
iconOnly,
|
|
797
|
+
iconSize,
|
|
798
|
+
icons,
|
|
799
|
+
maxAccounts = 1,
|
|
800
|
+
showFavorite = false,
|
|
801
|
+
size = "small",
|
|
802
|
+
...props
|
|
803
|
+
}) => {
|
|
804
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_flexbox4.FlexCol, { alignItems: "stretch", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
805
|
+
WalletAccountSelect,
|
|
806
|
+
{
|
|
807
|
+
addressNames,
|
|
808
|
+
fullWidth: true,
|
|
809
|
+
showFavorite,
|
|
810
|
+
iconSize,
|
|
811
|
+
iconOnly,
|
|
812
|
+
icons,
|
|
813
|
+
maxAccounts,
|
|
814
|
+
size: size ?? "small",
|
|
815
|
+
variant: "outlined"
|
|
816
|
+
}
|
|
817
|
+
) });
|
|
818
|
+
};
|
|
819
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
820
|
+
0 && (module.exports = {
|
|
821
|
+
DefaultSeedPhrase,
|
|
822
|
+
DialogActionButtons,
|
|
823
|
+
InvalidPhraseTypography,
|
|
824
|
+
MaxAccountsTableRow,
|
|
825
|
+
NewPhraseTextField,
|
|
826
|
+
OverwriteWarning,
|
|
827
|
+
PhraseDialogActions,
|
|
828
|
+
PhraseHeaderBox,
|
|
829
|
+
SavedPhraseTextField,
|
|
830
|
+
SeedPhraseContext,
|
|
831
|
+
SeedPhraseDialog,
|
|
832
|
+
SeedPhraseDialogInner,
|
|
833
|
+
SeedPhraseIconButton,
|
|
834
|
+
SeedPhraseProvider,
|
|
835
|
+
SeedPhraseTableRow,
|
|
836
|
+
WalletAccountDetails,
|
|
837
|
+
WalletAccountSelect,
|
|
838
|
+
WalletAccountSelectBar,
|
|
839
|
+
WalletContext,
|
|
840
|
+
WalletProvider,
|
|
841
|
+
colorParser,
|
|
842
|
+
useAccount,
|
|
843
|
+
useIndexedWalletFromContext,
|
|
844
|
+
useRootWallet,
|
|
845
|
+
useSeedPhrase,
|
|
846
|
+
useSelectedWalletAccount,
|
|
847
|
+
useWallet,
|
|
848
|
+
useWalletContext,
|
|
849
|
+
useWalletProvided,
|
|
850
|
+
useWallets,
|
|
851
|
+
useWrapperAccount
|
|
852
|
+
});
|
|
2
853
|
//# sourceMappingURL=index.cjs.map
|