@naculus/connect-appkit-react 0.1.2
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/LICENSE +21 -0
- package/api-extractor.json +21 -0
- package/dist/client.cjs +2 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +39 -0
- package/src/chain-abstraction/index.ts +8 -0
- package/src/chain-abstraction/useCompareCosts.ts +137 -0
- package/src/chain-abstraction/useExecuteRoute.ts +129 -0
- package/src/chain-abstraction/useRouteQuote.ts +168 -0
- package/src/client.test.ts +242 -0
- package/src/client.ts +265 -0
- package/src/hooks/useAccount.test.ts +67 -0
- package/src/hooks/useAccount.ts +37 -0
- package/src/hooks/useBalance.test.ts +459 -0
- package/src/hooks/useBalance.ts +170 -0
- package/src/hooks/useChain.test.ts +160 -0
- package/src/hooks/useChain.ts +53 -0
- package/src/hooks/useConnect.test.ts +112 -0
- package/src/hooks/useConnect.ts +29 -0
- package/src/hooks/useDisconnect.test.ts +75 -0
- package/src/hooks/useDisconnect.ts +32 -0
- package/src/hooks/useERC20Allowance.ts +93 -0
- package/src/hooks/useERC20Approve.ts +220 -0
- package/src/hooks/useERC20Transfer.ts +134 -0
- package/src/hooks/useERC20TransferSimulation.ts +147 -0
- package/src/hooks/useEmbeddedWallet.test.ts +266 -0
- package/src/hooks/useEmbeddedWallet.ts +181 -0
- package/src/hooks/useLastTx.test.ts +117 -0
- package/src/hooks/useLastTx.ts +73 -0
- package/src/hooks/useLookupAddress.ts +131 -0
- package/src/hooks/useNotification.ts +308 -0
- package/src/hooks/useResolveName.ts +128 -0
- package/src/hooks/useSIWxLogin.test.ts +307 -0
- package/src/hooks/useSIWxLogin.ts +163 -0
- package/src/hooks/useSIWxSession.test.ts +481 -0
- package/src/hooks/useSIWxSession.ts +290 -0
- package/src/hooks/useSendCalls.ts +103 -0
- package/src/hooks/useSendTransaction.test.ts +175 -0
- package/src/hooks/useSendTransaction.ts +80 -0
- package/src/hooks/useSendUserOperation.ts +313 -0
- package/src/hooks/useSession.ts +96 -0
- package/src/hooks/useSessionKeys.ts +356 -0
- package/src/hooks/useSignInWithEthereum.test.ts +224 -0
- package/src/hooks/useSignInWithEthereum.ts +46 -0
- package/src/hooks/useSignInWithX.test.ts +210 -0
- package/src/hooks/useSignInWithX.ts +141 -0
- package/src/hooks/useSignMessage.test.ts +151 -0
- package/src/hooks/useSignMessage.ts +65 -0
- package/src/hooks/useSimulateTransfer.ts +165 -0
- package/src/hooks/useSiwxAuthSession.test.ts +456 -0
- package/src/hooks/useSiwxAuthSession.ts +163 -0
- package/src/hooks/useSmartAccount.ts +194 -0
- package/src/hooks/useSwitchChain.ts +68 -0
- package/src/hooks/useTokenBalance.test.ts +337 -0
- package/src/hooks/useTokenBalance.ts +210 -0
- package/src/hooks/useTransactionSimulation.ts +401 -0
- package/src/hooks/useTxHistory.test.ts +108 -0
- package/src/hooks/useTxHistory.ts +83 -0
- package/src/hooks/useTxMonitor.test.ts +127 -0
- package/src/hooks/useTxMonitor.ts +178 -0
- package/src/hooks/useUserOpStatus.ts +245 -0
- package/src/hooks/useValidateDestination.test.ts +96 -0
- package/src/hooks/useValidateDestination.ts +72 -0
- package/src/hooks/useViemClient.test.ts +155 -0
- package/src/hooks/useViemClient.ts +65 -0
- package/src/hooks/useWallet.test.ts +133 -0
- package/src/hooks/useWallet.ts +39 -0
- package/src/hooks/useWeb3ErrorHandler.ts +102 -0
- package/src/index.ts +186 -0
- package/src/provider/Web3ConnectProvider.test.tsx +178 -0
- package/src/provider/Web3ConnectProvider.tsx +530 -0
- package/src/token-list/TokenSelector.tsx +351 -0
- package/src/token-list/defaults.ts +39 -0
- package/src/token-list/index.ts +14 -0
- package/src/token-list/useTokenList.ts +119 -0
- package/src/token-list/useTokenSearch.ts +99 -0
- package/src/types/index.ts +99 -0
- package/src/utils/chains.ts +115 -0
- package/src/utils/errorMessages.ts +142 -0
- package/src/utils/i18n.ts +90 -0
- package/src/wc-generated/components.ts +377 -0
- package/test/setup.ts +17 -0
- package/test/test-utils.tsx +78 -0
- package/tsup.config.ts +18 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createContext as Ln,useContext as Mn,useReducer as Bn,useEffect as Oe,useCallback as M,useMemo as Y,useRef as Hn}from"react";import{createWalletConnectConnector as Un}from"@naculus/connector-walletconnect";import{eip6963Connector as K}from"@naculus/connector-evm-injected";import{logger as Ie,WalletError as z}from"@naculus/connect-core";var L=null;function Ue(e){if(L)return L;let t=Un({projectId:e.projectId,metadata:e.metadata}),n=null,s=null;e.enableEmbedded&&(s=import("@naculus/connector-embedded").then(o=>{n=o.createPocketConnector(),L&&L._setEmbeddedConnector(n)}).catch(o=>{Ie.warn("react/client","Embedded wallet connector not available:",o),n=null}));let r=null,i=null;e.enablePasskeys&&(i=import("@naculus/connector-passkeys").then(o=>{r=o.createPasskeysConnector(),L&&L._setPasskeysConnector(r)}).catch(o=>{Ie.warn("react/client","Passkeys connector not available:",o),r=null}));let l=null,p=null;return e.enableSolana&&(p=import("@naculus/connector-solana").then(o=>{let a=o.solanaConnector;e.solanaDefaultChain&&"configure"in a&&a.configure({defaultChain:e.solanaDefaultChain}),l=a,typeof window<"u"&&"startDiscovery"in a&&a.startDiscovery(),L&&L._setSolanaConnector(l)}).catch(o=>{Ie.warn("react/client","Solana connector not available:",o),l=null})),typeof window<"u"&&K.startDiscovery(),L={connector:t,get embeddedConnector(){return n},get passkeysConnector(){return r},get solanaConnector(){return l},connect:()=>t.connect(),connectInjected:async o=>K.connect(o),connectEmbedded:async()=>{if(s&&await s,!n)throw new Error("Embedded wallet not enabled. Set enableEmbedded: true in config.");return n.connect()},connectPasskeys:async()=>{if(i&&await i,!r)throw new Error("Passkeys connector not enabled. Set enablePasskeys: true in config.");return r.connect()},startPairing:()=>t.startPairing(),completePairing:()=>t.completePairing(),signMessage:async(o,a)=>{if(o.id?.startsWith("eip6963-"))return K.signMessage(o,a);if(o.walletType==="passkeys"&&r)return r.signMessage(o,a);if(o.walletType==="solana"){if(p&&await p,l)return l.signMessage(o,a);throw new z("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return t.signMessage(o,a)},sendTransaction:async(o,a)=>{if(o.id?.startsWith("eip6963-"))return K.sendTransaction(o,a);if(o.walletType==="passkeys"&&r)return r.sendTransaction(o,a);if(o.walletType==="solana"){if(p&&await p,l)return l.sendTransaction(o,a);throw new z("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return t.sendTransaction(o,a)},sendCalls:async(o,a,u)=>{if(o.id?.startsWith("eip6963-"))return K.sendCalls(o,a,u);if(o.walletType==="passkeys"&&r)return r.sendCalls(o,a,u);if(o.walletType==="solana"){if(p&&await p,l)return l.sendCalls(o,a,u);throw new z("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}if(o.walletType==="embedded"&&n&&n.sendCalls)return n.sendCalls(o,a,u);if(!t.sendCalls)throw new z("method_not_allowed","sendCalls not supported by this connector");return t.sendCalls(o,a,u)},getCallsStatus:async(o,a)=>{if(o.id?.startsWith("eip6963-")&&K.getCallsStatus)return K.getCallsStatus(o,a);if(o.walletType==="passkeys"&&r?.getCallsStatus)return r.getCallsStatus(o,a);if(!t.getCallsStatus)throw new z("method_not_allowed","getCallsStatus not supported by this connector");return t.getCallsStatus(o,a)},reconnect:async o=>o.walletType==="eip6963"?K.reconnect(o):o.walletType==="embedded"?n?n.reconnect(o):o:o.walletType==="solana"?o:t.reconnect(o),disconnect:async o=>{if(o.walletType==="solana"){if(p&&await p,l)return l.disconnect(o);throw new z("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return t.disconnect(o)},getAllConnectors:()=>{let o=[t];return n&&o.push(n),r&&o.push(r),l&&o.push(l),o},_setEmbeddedConnector:o=>{n=o},_setPasskeysConnector:o=>{r=o},_setSolanaConnector:o=>{l=o}},L}function _(){return L}function Pn(){L=null}import{eip6963Connector as Fn}from"@naculus/connector-evm-injected";import{LocalStorageSessionStorage as Gn,WalletError as Et,logger as j,createSessionManager as $n,createConnectorManager as Kn}from"@naculus/connect-core";import{CHAINS as ue,getRpcUrl as Wn,DEFAULT_RPC_URLS as On}from"@naculus/connect-core";var _n=[{id:5,namespace:"eip155",name:"Goerli",rpcUrl:"https://goerli.blockpi.network/v1/rpc/public",explorerUrl:"https://goerli.etherscan.io",token:"ETH"},{id:80001,namespace:"eip155",name:"Mumbai",rpcUrl:"https://rpc-mumbai.maticvigil.com",explorerUrl:"https://mumbai.polygonscan.com",token:"MATIC"},{id:421613,namespace:"eip155",name:"Arbitrum Goerli",rpcUrl:"https://goerli-rollup.arbitrum.io/rpc",explorerUrl:"https://goerli.arbiscan.io",token:"ETH"},{id:420,namespace:"eip155",name:"Optimism Goerli",rpcUrl:"https://goerli.optimism.io",explorerUrl:"https://goerli-optimism.etherscan.io",token:"ETH"}];function Nn(e){let t=ue[e];if(!t||!t.explorerUrl)return null;let n=t.caip2Id;return{id:e,namespace:"eip155",name:t.name,rpcUrl:Wn(n,On[n]??""),explorerUrl:t.explorerUrl,token:t.nativeCurrency.symbol}}function Dn(){if(!ue)return[];let e=[],t=Object.keys(ue).map(Number).sort((n,s)=>n-s);for(let n of t){let s=Nn(n);s&&e.push(s)}for(let n of _n)ue[n.id]||e.push(n);return e}var ht=Dn();function Pe(e,t){return e.find(n=>{let s=t.startsWith("eip155:")?"eip155":null;if(!s)return!1;let r=t.includes(":")?parseInt(t.split(":")[1],10):parseInt(t,10);return n.namespace===s&&n.id===r})}function We(){return[...ht]}import{jsx as zn}from"react/jsx-runtime";function kt(e,t,n="Operation"){return Promise.race([e,new Promise((s,r)=>setTimeout(()=>r(new Error(`${n} timed out after ${t}ms`)),t))])}async function jn(e,t){let n;for(let s=0;s<=t.maxRetries;s++)try{return await e()}catch(r){if(n=r,s<t.maxRetries){let i=t.baseDelay*2**s;j.warn("react/provider",`Retry attempt ${s+1}/${t.maxRetries} after ${i}ms`),await new Promise(l=>setTimeout(l,i))}}throw n}var yt={status:"disconnected",session:null,accounts:[],chainId:null,error:null};function Vn(e,t){switch(t.type){case"SET_STATUS":return{...e,status:t.payload};case"SET_SESSION":return{...e,session:t.payload};case"SET_ACCOUNTS":return{...e,accounts:t.payload};case"SET_CHAIN":return{...e,chainId:t.payload};case"SET_ERROR":return{...e,error:t.payload};case"RESET":return yt;default:return e}}var _e=Ln(null);function qn({children:e,config:t,autoConnect:n=!0}){let[s,r]=Bn(Vn,yt),i=Y(()=>t.chains??We(),[t.chains]),l=t.connectionTimeout??3e4,p=t.maxRetries??2,o=Y(()=>new Gn(t.storageKey??"naculus_web3_session"),[t.storageKey]),a=Y(()=>Ue({projectId:t.projectId,metadata:t.metadata,enableEmbedded:t.enableEmbedded,enablePasskeys:t.enablePasskeys,enableSolana:t.enableSolana,solanaDefaultChain:t.solanaDefaultChain}),[t.projectId,t.metadata,t.enableEmbedded,t.enablePasskeys,t.enableSolana,t.solanaDefaultChain]),u=Hn(null),c=Y(()=>{let C=Kn();C.register(a.connector.id,a.connector);let x={},w={};for(let U of i){let O=`${U.namespace}:${U.id}`;U.rpcUrl&&(x[O]=U.rpcUrl),U.token&&(w[O]={name:U.name,symbol:U.token,decimals:18})}let T=$n(C,{autoRefreshFeeOnSwitch:!0,defaultRpcUrls:x,defaultCurrencies:w,encryptionKey:t.encryptionKey});return u.current=T,T},[a,i]);Oe(()=>{let C=T=>{let{walletSession:U}=T.bundle;r({type:"SET_SESSION",payload:U});let O=[];Object.values(U.namespaces).forEach(ce=>{O.push(...ce.accounts)}),r({type:"SET_ACCOUNTS",payload:O}),r({type:"SET_CHAIN",payload:T.bundle.activeChainId}),r({type:"SET_STATUS",payload:"connected"})},x=()=>{r({type:"RESET"})},w=T=>{r({type:"SET_CHAIN",payload:T.newChainId})};return c.on("sessionConnected",C),c.on("sessionDisconnected",x),c.on("chainChanged",w),()=>{c.off("sessionConnected",C),c.off("sessionDisconnected",x),c.off("chainChanged",w)}},[c]),Oe(()=>{let C=()=>{o.clear(),r({type:"RESET"})};a.connector.onSessionExpiry(C)},[a,o]);let m=M(C=>{if(r({type:"SET_SESSION",payload:C}),C){let x=[];Object.values(C.namespaces).forEach(O=>{x.push(...O.accounts)}),r({type:"SET_ACCOUNTS",payload:x});let w=C.namespaces.eip155?.chains?.[0],T=C.namespaces.solana?.chains?.[0],U=C.namespaces.xrpl?.chains?.[0];r({type:"SET_CHAIN",payload:w??T??U??null})}else r({type:"SET_ACCOUNTS",payload:[]}),r({type:"SET_CHAIN",payload:null})},[]),d=M(async C=>{if(!t.siwx||!C)return!0;r({type:"SET_STATUS",payload:"authenticating"});try{let x=C.namespaces.eip155?.accounts?.[0],w=C.namespaces.solana?.accounts?.[0],T=x??w;if(!T)throw new Et("siwx_error","No account found in session");let U=x?C.namespaces.eip155.chains?.[0]??"eip155:1":C.namespaces.solana.chains?.[0]??"solana:0",O=T.includes(":")?T.split(":").pop():T,ce=await t.siwx.createMessage({address:O,chainId:U}),In=await a.signMessage(C,{message:ce,address:O,chainId:U});return t.siwx.handleSignComplete&&await t.siwx.handleSignComplete({message:ce,signature:In}),!0}catch(x){return j.error("react/provider","SIWx authentication failed:",x),t.siwx.required!==!1?(await o.clear(),r({type:"RESET"}),r({type:"SET_ERROR",payload:x instanceof Error?x:new Error("Wallet authentication failed")}),!1):!0}},[t.siwx,a,o]),h=M(async()=>{r({type:"SET_STATUS",payload:"connecting"}),r({type:"SET_ERROR",payload:null});try{let C=await kt(a.connect(),l,"Wallet connect");await o.save(C),m(C);try{let x=u.current;if(x&&C.walletType){let T=C.namespaces.eip155?.chains?.[0]??"eip155:1";x.connect(C.walletType,T)}}catch(x){j.warn("react/provider","SessionManager sync error:",x)}if(!await d(C))return;r({type:"SET_STATUS",payload:"connected"})}catch(C){let x=C instanceof Error?C.message:"Connection failed";r({type:"SET_ERROR",payload:C instanceof Error?C:new Error(x)}),r({type:"SET_STATUS",payload:"disconnected"})}},[a,o,m,l,d]),f=M(async()=>{r({type:"SET_STATUS",payload:"connecting"}),r({type:"SET_ERROR",payload:null});try{let C=await a.connectEmbedded();if(await o.save(C),m(C),!await d(C))return;r({type:"SET_STATUS",payload:"connected"})}catch(C){let x=C instanceof Error?C.message:"Embedded wallet connection failed";r({type:"SET_ERROR",payload:C instanceof Error?C:new Error(x)}),r({type:"SET_STATUS",payload:"disconnected"})}},[a,o,m,d]),k=M(async()=>{r({type:"SET_STATUS",payload:"connecting"}),r({type:"SET_ERROR",payload:null});try{let C=await a.connectPasskeys();if(await o.save(C),m(C),!await d(C))return;r({type:"SET_STATUS",payload:"connected"})}catch(C){let x=C instanceof Error?C.message:"Passkeys connection failed";r({type:"SET_ERROR",payload:C instanceof Error?C:new Error(x)}),r({type:"SET_STATUS",payload:"disconnected"})}},[a,o,m,d]),g=M(async()=>{if(!s.session){r({type:"RESET"});return}try{await a.disconnect(s.session)}catch(C){j.error("react/provider","Disconnect error:",C)}try{let C=u.current;C&&await C.disconnect()}catch(C){j.warn("react/provider","SessionManager disconnect error:",C)}await o.clear(),r({type:"RESET"})},[a,s.session,o]),E=M(async C=>{r({type:"SET_STATUS",payload:"connecting"}),r({type:"SET_ERROR",payload:null});try{let x=await kt(a.connectInjected(C),l,"Injected wallet connect");await o.save(x),m(x);try{let w=u.current;if(w){let U=x.namespaces.eip155?.chains?.[0]??"eip155:1";w.connect("eip6963",U)}}catch(w){j.warn("react/provider","SessionManager sync error:",w)}if(!await d(x))return;r({type:"SET_STATUS",payload:"connected"})}catch(x){let w=x instanceof Error?x.message:"Connection failed";r({type:"SET_ERROR",payload:x instanceof Error?x:new Error(w)}),r({type:"SET_STATUS",payload:"disconnected"})}},[a,o,m,l,d]),S=M(async()=>a.startPairing(),[a]),A=M(async()=>{let C=await a.completePairing();return await o.save(C),m(C),await d(C)&&r({type:"SET_STATUS",payload:"connected"}),C},[a,o,m,d]),y=M(async()=>{let C=await o.load();if(!C){r({type:"SET_STATUS",payload:"disconnected"});return}r({type:"SET_STATUS",payload:"reconnecting"});try{let x=await jn(()=>a.reconnect(C),{maxRetries:p,baseDelay:1e3,label:"reconnect"});m(x);try{let w=u.current;w&&await w.restoreFromPersistence()}catch(w){j.warn("react/provider","SessionManager restore error:",w)}r({type:"SET_STATUS",payload:"connected"})}catch(x){j.error("react/provider","Reconnect error:",x),await o.clear(),r({type:"SET_STATUS",payload:"disconnected"}),r({type:"SET_SESSION",payload:null})}},[a,o,m,p]),v=M(async C=>{let x=u.current;if(x){await x.switchChain(C),r({type:"SET_CHAIN",payload:C});return}if(!s.session)throw new Error("No active session");try{s.session.walletType==="eip6963"||s.session.id?.startsWith("eip6963-")?await Fn.switchChain(s.session,C):s.session.walletType==="solana"&&a.solanaConnector?await a.solanaConnector.switchChain?.(s.session,C):await a.connector.switchChain(s.session,C),r({type:"SET_CHAIN",payload:C})}catch(w){throw new Et("chain_unsupported","Failed to switch chain",w)}},[a,s.session]);Oe(()=>{n&&y()},[n,y]);let R=M(()=>{r({type:"SET_ERROR",payload:null})},[]),b=Y(()=>({...s,connect:h,connectEmbedded:f,connectPasskeys:k,disconnect:g,reconnect:y,switchChain:v,startPairing:S,completePairing:A,connectInjected:E,clearError:R,isConnected:s.status==="connected",chains:i,sessionManager:c}),[s,h,f,k,g,y,v,S,A,E,R,i,c]);return zn(_e.Provider,{value:b,children:e})}function I(){let e=Mn(_e);if(!e)throw new Error("useWeb3 must be used within a Web3ConnectProvider");return e}function Qn(){let{status:e,session:t,accounts:n,chainId:s,error:r,connect:i,disconnect:l,reconnect:p,switchChain:o}=I(),a=e==="connected",u=e==="connecting",c=e==="reconnecting",m=n[0]??null;return{status:e,session:t,accounts:n,chainId:s,error:r,isConnected:a,isConnecting:u,isReconnecting:c,isDisconnected:e==="disconnected",currentAccount:m,connect:i,disconnect:l,reconnect:p,switchChain:o}}import{useCallback as Xn,useState as At}from"react";import{WalletError as Yn}from"@naculus/connect-core";function Jn(){let{connect:e,status:t}=I(),[n,s]=At(!1),[r,i]=At(null);return{connect:Xn(async()=>{s(!0),i(null);try{await e()}catch(p){let o=p instanceof Error?p.message:"Connection failed";i(p instanceof Yn?p:new Error(o))}finally{s(!1)}},[e]),isConnecting:n||t==="connecting",error:r}}import{useCallback as Zn,useRef as er,useState as xt}from"react";function tr(){let{disconnect:e,status:t}=I(),[n,s]=xt(!1),[r,i]=xt(null),l=er(!0);return{disconnect:Zn(async()=>{if(t!=="disconnected"){s(!0),i(null);try{await e()}catch(o){if(!l.current)return;i(o instanceof Error?o:new Error("Disconnect failed"))}finally{l.current&&s(!1)}}},[e,t]),isDisconnecting:n,error:r,cleanup:()=>{l.current=!1}}}import{useMemo as nr}from"react";function N(){let{accounts:e,session:t,isConnected:n}=I(),s=nr(()=>!n||e.length===0?null:e.map(i=>{let l=/^eip155:\d+:0x[0-9a-fA-F]{40}$/.test(i),p=/^0x[0-9a-fA-F]{40}$/.test(i);return{address:i,isEVM:l||p}}),[e,n]),r=s?.find(i=>i.isEVM)?.address??null;return{accounts:s,evmAccount:r,primaryAccount:e[0]??null,isConnected:n,count:e.length}}import{useMemo as Ne}from"react";function V(){let{chainId:e,session:t,switchChain:n,chains:s}=I(),r=Ne(()=>e?Pe(s,e)??null:null,[e,s]),i=Ne(()=>{if(!e||!t)return null;let p=e.startsWith("eip155:")?"eip155":null;if(!p)return null;let o=e.includes(":")?parseInt(e.split(":")[1],10):parseInt(e,10),a=s.find(u=>u.namespace===p&&u.id===o);return{namespace:p,chainId:e,name:a?.name??`Chain ${o}`,selected:!0}},[e,t,s]),l=Ne(()=>s,[s]);return{chainId:e,currentChain:r,chainInfo:i,availableChains:l,chains:l,isEvm:e?.startsWith("eip155:"),switchChain:n}}import{useState as vt,useCallback as rr}from"react";import{WalletError as De}from"@naculus/connect-core";function sr(){let{session:e,chainId:t}=I(),[n,s]=vt(!1),[r,i]=vt(null);return{signMessage:rr(async p=>{if(!e){let u=new De("wallet_unavailable","No active session");throw i(u),u}let o=_();if(!o){let u=new De("wallet_unavailable","Client not initialized");throw i(u),u}let a=Object.values(e.namespaces).flatMap(u=>u.accounts).find(u=>u.includes("0x"))??Object.values(e.namespaces)[0]?.accounts[0];if(!a){let u=new De("wallet_unavailable","No account found");throw i(u),u}s(!0),i(null);try{return await o.signMessage(e,{message:p,address:a,chainId:t??void 0})}catch(u){let c=u instanceof Error?u.message:"Signing failed",m=u instanceof Error?u:new Error(c);throw i(m),m}finally{s(!1)}},[e,t]),isSigning:n,error:r}}import{useState as wt,useCallback as bt}from"react";import{WalletError as Le}from"@naculus/connect-core";function J(){let{session:e,chainId:t}=I(),[n,s]=wt("idle"),[r,i]=wt(null),l=bt(async o=>{if(!e){s("failed");let c=new Le("wallet_unavailable","No active session");throw i(c),c}let a=_();if(!a){s("failed");let c=new Le("wallet_unavailable","Client not initialized");throw i(c),c}let u=Object.values(e.namespaces).flatMap(c=>c.accounts).find(c=>c.includes("0x"));if(!u){s("failed");let c=new Le("wallet_unavailable","No EVM account found");throw i(c),c}s("awaiting_approval"),i(null);try{let c={...o,from:o.from??u.split(":").pop()},m=await a.sendTransaction(e,{transaction:c,chainId:t??void 0});return s("confirmed"),m}catch(c){s("failed");let m=c instanceof Error?c.message:"Transaction failed";throw i(c instanceof Error?c:new Error(m)),c}},[e,t]),p=bt(()=>{s("idle"),i(null)},[]);return{sendTransaction:l,status:n,error:r,reset:p,isSending:n==="awaiting_approval"}}import{useState as pe,useCallback as Me}from"react";import{WalletError as Q}from"@naculus/connect-core";function or(){let{session:e,chainId:t}=I(),[n,s]=pe("idle"),[r,i]=pe(null),[l,p]=pe(null),[o,a]=pe(null),u=Me(async(d,h)=>{if(!e){s("failed");let k=new Q("wallet_unavailable","No active session");throw i(k),k}let f=_();if(!f){s("failed");let k=new Q("wallet_unavailable","Client not initialized");throw i(k),k}if(d.length===0){s("failed");let k=new Q("invalid_input","At least one call is required");throw i(k),k}s("awaiting_approval"),i(null),p(null);try{let k=await f.sendCalls(e,d,h?.chainId??t??void 0);return s("confirmed"),p(k),k}catch(k){s("failed");let g=k instanceof Error?k.message:"sendCalls failed";throw i(k instanceof Error?k:new Error(g)),k}},[e,t]),c=Me(async d=>{if(!e)throw new Q("wallet_unavailable","No active session");let h=_();if(!h)throw new Q("wallet_unavailable","Client not initialized");let f=d??l;if(!f)throw new Q("invalid_input","No bundle hash available");let k=await h.getCallsStatus(e,f);return a(k),k},[e,l]),m=Me(()=>{s("idle"),i(null),p(null),a(null)},[]);return{sendCalls:u,getCallsStatus:c,status:n,error:r,batchHash:l,callsStatus:o,reset:m,isSending:n==="awaiting_approval"}}import{useState as Z,useEffect as Be,useCallback as ar,useMemo as de,useRef as ir}from"react";import{createPublicClient as lr,http as cr,formatEther as ur}from"viem";import{getNativeTokenPriceUsd as pr}from"@naculus/connect-core";function dr(e){let{evmAccount:t,isConnected:n}=N(),{chainId:s,chains:r}=I(),[i,l]=Z(null),[p,o]=Z(!1),[a,u]=Z(null),[c,m]=Z(null),d=e?.refreshInterval,h=ir(null),f=de(()=>{if(!s||!r.length)return null;let v=s.startsWith("eip155:")?"eip155":null;if(!v)return null;let R=s.split(":")[1],b=Number(R);return!Number.isFinite(b)||b<=0?null:r.find(C=>C.namespace===v&&C.id===b)??null},[s,r]),k=de(()=>f?.token??"ETH",[f]),[g,E]=Z(null);Be(()=>{if(!f?.rpcUrl){E(null);return}let v=lr({transport:cr(f.rpcUrl),chain:{id:f.id,name:f.name,nativeCurrency:{name:f.token??"ETH",symbol:f.token??"ETH",decimals:18},rpcUrls:{default:{http:[f.rpcUrl]},public:{http:[f.rpcUrl]}}}});return E(v),()=>{}},[f]);let S=ar(async()=>{if(!t||!g){l(null);return}o(!0),u(null);try{let R=t.includes(":")?t.split(":").pop():t,[b,C]=await Promise.all([g.getBalance({address:R}),s?pr(s,f?.rpcUrl).catch(()=>null):Promise.resolve(null)]);l(b.toString()),m(C)}catch(v){u(v instanceof Error?v:new Error("Failed to fetch balance")),l(null),m(null)}finally{o(!1)}},[t,g,s,f?.rpcUrl]);Be(()=>{n&&t&&S()},[n,t,S]),Be(()=>(d&&d>0&&n&&t&&(h.current=setInterval(S,d)),()=>{h.current&&(clearInterval(h.current),h.current=null)}),[d,n,t,S]);let A=de(()=>{if(i===null)return null;try{return ur(BigInt(i))}catch{return null}},[i]),y=de(()=>{if(c===null||A===null)return null;let v=parseFloat(A);if(isNaN(v))return null;let R=v*c;return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(R)},[c,A]);return{balance:i,formatted:A,symbol:k,usdPrice:c,usdValue:y,isLoading:p,error:a,refetch:S,chain:f}}import{useState as me,useEffect as He,useCallback as Tt,useMemo as Rt,useRef as mr}from"react";import{createPublicClient as fr,http as gr,formatUnits as Cr}from"viem";function Sr(e){let{evmAccount:t,isConnected:n}=N(),{chainId:s,chains:r}=I(),[i,l]=me([]),[p,o]=me(!1),[a,u]=me(null),{tokens:c,refreshInterval:m}=e,d=mr(null),h=Rt(()=>c.map(y=>y.address.toLowerCase()+"|"+y.decimals+"|"+y.symbol).join(","),[c]),f=Rt(()=>{if(!s||!r.length)return null;let y=s.startsWith("eip155:")?"eip155":null;if(!y)return null;let v=parseInt(s.split(":")[1],10);return r.find(R=>R.namespace===y&&R.id===v)??null},[s,r]),[k,g]=me(null);He(()=>{if(!f?.rpcUrl){g(null);return}let y=fr({transport:gr(f.rpcUrl),chain:{id:f.id,name:f.name,nativeCurrency:{name:f.token??"ETH",symbol:f.token??"ETH",decimals:18},rpcUrls:{default:{http:[f.rpcUrl]},public:{http:[f.rpcUrl]}}}});g(y)},[f]);let E=[{name:"balanceOf",type:"function",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"balance",type:"uint256"}]}],S=Tt(async()=>{if(!t||!k||c.length===0){l([]);return}o(!0),u(null);try{let y=t.includes(":")?t.split(":").pop():t,R=(await Promise.allSettled(c.map(async b=>{try{let C=await k.readContract({address:b.address,abi:E,functionName:"balanceOf",args:[y]});return{address:b.address,symbol:b.symbol,decimals:b.decimals,name:b.name,balance:C.toString(),formatted:Cr(C,b.decimals)}}catch{return{address:b.address,symbol:b.symbol,decimals:b.decimals,name:b.name,balance:null,formatted:null}}}))).map(b=>b.status==="fulfilled"?b.value:{address:"",symbol:"?",decimals:0,balance:null,formatted:null});l(R)}catch(y){u(y instanceof Error?y:new Error("Failed to fetch token balances"))}finally{o(!1)}},[t,k,h]);He(()=>{n&&t&&c.length>0&&S()},[n,t,h,S]),He(()=>(m&&m>0&&n&&t&&c.length>0&&(d.current=setInterval(S,m)),()=>{d.current&&(clearInterval(d.current),d.current=null)}),[m,n,t,h,S]);let A=Tt(y=>i.find(v=>v.address.toLowerCase()===y.toLowerCase()),[i]);return{tokenBalances:i,isLoading:p,error:a,refetch:S,getTokenBalance:A,chain:f}}import{useState as kr,useCallback as yr,useRef as Ar}from"react";import{useMemo as It}from"react";import{createPublicClient as hr,http as Ut,createWalletClient as Er}from"viem";function F(){let{evmAccount:e,isConnected:t}=N(),{currentChain:n,chains:s}=V(),r=It(()=>n?.rpcUrl?hr({transport:Ut(n.rpcUrl),chain:{id:n.id,name:n.name,nativeCurrency:{name:n.token??"ETH",symbol:n.token??"ETH",decimals:18},rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}}}}):null,[n]),i=It(()=>{if(!t||!e||!n?.rpcUrl)return null;let l=e.includes(":")?e.split(":").pop():e;return Er({transport:Ut(n.rpcUrl),chain:{id:n.id,name:n.name,nativeCurrency:{name:n.token??"ETH",symbol:n.token??"ETH",decimals:18},rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}}},account:l})},[t,e,n]);return{publicClient:r,walletClient:i,chains:s}}import{WalletError as Pt,ERC20_MIN_ABI as Fe,parseUnits as xr}from"@naculus/connect-core";import{encodeFunctionData as vr}from"viem";function wr(e){return e.includes(":")?e.split(":").pop():e}function br(e,t){return vr({abi:Fe,functionName:"transfer",args:[e,t]})}function Tr(e){let{publicClient:t,walletClient:n}=F(),{evmAccount:s,isConnected:r}=N(),{session:i}=I(),{sendTransaction:l,isSending:p,error:o,reset:a}=J(),[u,c]=kr(null),m=Ar(e.token.decimals),d=u??o;return{sendTransfer:yr(async(f,k)=>{if(c(null),a(),!r||!s){let y=new Pt("wallet_unavailable","No connected account");throw c(y),y}if(!t){let y=new Pt("wallet_unavailable","No public client available");throw c(y),y}let g=wr(s),E=m.current;E===void 0&&(E=await t.readContract({address:e.token.address,abi:Fe,functionName:"decimals"}),m.current=E);let S=xr(k,E),A=br(f,S);try{if(i&&_())return await l({to:e.token.address,data:A,value:"0"});if(n){let{request:v}=await t.simulateContract({address:e.token.address,abi:Fe,functionName:"transfer",args:[f,S],account:g});return await n.writeContract(v)}return await l({to:e.token.address,data:A,value:"0"})}catch(y){let v=y instanceof Error?y:new Error("Transfer failed");throw c(v),v}},[e.token,t,n,s,r,i,l,a]),isSending:p,error:d}}import{useState as Ge,useCallback as ee,useRef as Rr}from"react";import{WalletError as $e,ERC20_MIN_ABI as fe,parseUnits as Wt}from"@naculus/connect-core";import{encodeFunctionData as Ir}from"viem";function Ur(e){return e.includes(":")?e.split(":").pop():e}function Pr(e,t){return Ir({abi:fe,functionName:"approve",args:[e,t]})}var Wr=2n**256n-1n;function Or(e){let{publicClient:t,walletClient:n}=F(),{evmAccount:s,isConnected:r}=N(),{session:i}=I(),{sendTransaction:l,isSending:p,error:o,reset:a}=J(),[u,c]=Ge(null),[m,d]=Ge(null),[h,f]=Ge(!1),k=Rr(e.token.decimals),g=u??o,E=s?Ur(s):null,S=ee(async()=>{if(!(!t||!E)){f(!0);try{let C=await t.readContract({address:e.token.address,abi:fe,functionName:"allowance",args:[E,e.spender]});d(C)}catch{d(null)}finally{f(!1)}}},[t,E,e.token.address,e.spender]),A=(()=>{if(m===null)return null;let C=k.current??e.token.decimals??18,w=m.toString().padStart(C+1,"0"),T=w.length-C,U=w.slice(0,T).replace(/^0+/,"")||"0",O=w.slice(T).replace(/0+$/,"");return O?`${U}.${O}`:U})(),y=ee(async C=>{if(c(null),a(),!r||!s){let w=new $e("wallet_unavailable","No connected account");throw c(w),w}if(!t){let w=new $e("wallet_unavailable","No public client");throw c(w),w}let x=Pr(e.spender,C);try{if(i&&_()){let U=await l({to:e.token.address,data:x,value:"0"});return S(),U}if(n){let{request:T}=await t.simulateContract({address:e.token.address,abi:fe,functionName:"approve",args:[e.spender,C],account:E}),U=await n.writeContract(T);return S(),U}let w=await l({to:e.token.address,data:x,value:"0"});return S(),w}catch(w){let T=w instanceof Error?w:new Error("Approve failed");throw c(T),T}},[e,t,n,s,r,i,E,l,a,S]),v=ee(async C=>{if(!t)throw new $e("wallet_unavailable","No public client");let x=k.current;x===void 0&&(x=await t.readContract({address:e.token.address,abi:fe,functionName:"decimals"}),k.current=x);let w=Wt(C,x);return y(w)},[e.token.address,t,y]),R=ee(async()=>y(Wr),[y]),b=ee(async C=>{if(m===null&&await S(),m===null)return!1;let x=k.current??e.token.decimals;x===void 0&&(x=18);let w=Wt(C,x);return m>=w},[m,S,e.token.decimals]);return{approve:v,approveMax:R,allowance:A,allowanceRaw:m,hasAllowance:b,isApproving:p,isFetchingAllowance:h,error:g,refetchAllowance:S}}import{useState as Ke,useCallback as _r,useEffect as Ot,useRef as Nr,useMemo as Dr}from"react";import{ERC20_MIN_ABI as Lr}from"@naculus/connect-core";function Mr(e){let{publicClient:t}=F(),[n,s]=Ke(null),[r,i]=Ke(!1),[l,p]=Ke(null),o=Nr(null),a=_r(async()=>{if(t){i(!0),p(null);try{let c=await t.readContract({address:e.token.address,abi:Lr,functionName:"allowance",args:[e.owner,e.spender]});s(c)}catch(c){p(c instanceof Error?c:new Error("Failed to fetch allowance")),s(null)}finally{i(!1)}}},[t,e.token.address,e.owner,e.spender]);return Ot(()=>{a().catch(c=>console.warn("useERC20Allowance: initial fetch failed:",c))},[a]),Ot(()=>(e.refreshInterval&&e.refreshInterval>0&&(o.current=setInterval(a,e.refreshInterval)),()=>{o.current&&(clearInterval(o.current),o.current=null)}),[e.refreshInterval,a]),{allowance:Dr(()=>{if(n===null)return null;let c=e.token.decimals??18,d=n.toString().padStart(c+1,"0"),h=d.length-c,f=d.slice(0,h).replace(/^0+/,"")||"0",k=d.slice(h).replace(/0+$/,"");return k?`${f}.${k}`:f},[n,e.token.decimals]),allowanceRaw:n,isFetching:r,error:l,refetch:a}}import{useCallback as Br,useRef as Hr,useState as ge}from"react";import{WalletError as Fr}from"@naculus/connect-core";function Gr(){let{connectEmbedded:e}=I(),[t,n]=ge(null),s=Hr(null),[r,i]=ge(!1),[l,p]=ge(!1),[o,a]=ge(null),u=()=>a(null),c=Br(()=>{let S=s.current;return s.current=null,S},[]),m=()=>{let S=_();if(!S?.embeddedConnector)throw new Fr("wallet_unavailable","Embedded wallet not enabled.");return S.embeddedConnector},d=async()=>{p(!0),a(null);try{let S=m(),A=await S.load(),y=S.getWallet();A&&y&&(n(y),s.current=y.mnemonic||null,i(!y.mnemonic)),await e();let v=S.getWallet();v&&(n(v),v.mnemonic&&!A&&(s.current=v.mnemonic,i(!0)))}catch(S){a(S instanceof Error?S:new Error("Embedded wallet connection failed"))}finally{p(!1)}},h=async()=>{p(!0),a(null);try{let A=await m().generateWallet();return n(A),s.current=A.mnemonic,i(!0),A}catch(S){return a(S instanceof Error?S:new Error("Failed to generate wallet")),null}finally{p(!1)}},f=async S=>{p(!0),a(null);try{let y=await m().importFromMnemonic(S);return n(y),s.current=null,i(!1),y}catch(A){return a(A instanceof Error?A:new Error("Failed to import wallet")),null}finally{p(!1)}},k=async S=>{p(!0),a(null);try{let y=await m().importFromPrivateKey(S);return n(y),s.current=null,i(!1),y}catch(A){return a(A instanceof Error?A:new Error("Failed to import wallet")),null}finally{p(!1)}},g=()=>{try{m().wipe(),n(null),s.current=null,i(!1)}catch(S){a(S instanceof Error?S:new Error("Failed to wipe wallet"))}},E=()=>{s.current=null,i(!1)};return{connectEmbedded:d,generateWallet:h,importFromMnemonic:f,importFromPrivateKey:k,wipe:g,wallet:t,hasWallet:t!==null,address:t?.address??null,seedPhrase:s.current,getSeedPhrase:c,backupPending:r,confirmBackup:E,isBusy:l,error:o,clearError:u,storageSecurityLevel:(()=>{try{return m().getStorageSecurityLevel?.()??4}catch{return 4}})()}}import{useMemo as qr}from"react";var $r={"storage.critical.title":"Insecure Storage Detected","storage.critical.body":"Your browser does not support IndexedDB. Wallet data is stored in plaintext in localStorage and could be exposed to XSS attacks. We strongly recommend switching to a modern browser.","storage.warning.title":"Storage Security Warning","storage.warning.body":"Your browser does not support IndexedDB, but your wallet data is encrypted with AES-256-GCM. Consider switching browsers for better origin isolation.","address.empty":"Address is empty","address.invalid_format":"Invalid address format (expected 0x + 40 hex chars)","address.zero_address":"Address is the zero address \u2014 funds would be permanently lost","address.burn_address":"Address appears to be a burn address \u2014 funds would be permanently lost","wallet.connect":"Connect Wallet","wallet.disconnect":"Disconnect","wallet.connecting":"Connecting...","wallet.copy_address":"Copy address","wallet.copied":"Copied!","wallet.view_on_explorer":"View on Explorer","wallet.retry":"Retry","wallet.connection_failed":"Connection failed","wallet.scan_qr":"Scan with your wallet app","embedded.generate":"Create Wallet","embedded.import":"Import Wallet","embedded.backup_seed":"Back up your seed phrase","embedded.backup_warning":"Anyone with your seed phrase can access your funds. Store it securely.","embedded.backup_done":"I've saved my seed phrase","embedded.wipe":"Remove Wallet","embedded.wipe_confirm":"Are you sure? This cannot be undone."},Kr={"storage.critical.title":"\u5075\u6E2C\u5230\u4E0D\u5B89\u5168\u5132\u5B58","storage.critical.body":"\u60A8\u7684\u700F\u89BD\u5668\u4E0D\u652F\u63F4 IndexedDB\u3002\u9322\u5305\u8CC7\u6599\u4EE5\u660E\u6587\u5132\u5B58\u5728 localStorage \u4E2D\uFF0C\u53EF\u80FD\u66B4\u9732\u65BC XSS \u653B\u64CA\u3002\u5F37\u70C8\u5EFA\u8B70\u66F4\u63DB\u81F3\u73FE\u4EE3\u700F\u89BD\u5668\u3002","storage.warning.title":"\u5132\u5B58\u5B89\u5168\u8B66\u544A","storage.warning.body":"\u60A8\u7684\u700F\u89BD\u5668\u4E0D\u652F\u63F4 IndexedDB\uFF0C\u4F46\u9322\u5305\u8CC7\u6599\u5DF2\u4F7F\u7528 AES-256-GCM \u52A0\u5BC6\u3002\u5EFA\u8B70\u66F4\u63DB\u700F\u89BD\u5668\u4EE5\u7372\u5F97\u66F4\u597D\u7684\u9694\u96E2\u4FDD\u8B77\u3002","address.empty":"\u5730\u5740\u70BA\u7A7A","address.invalid_format":"\u7121\u6548\u7684\u5730\u5740\u683C\u5F0F\uFF08\u61C9\u70BA 0x + 40 \u500B\u5341\u516D\u9032\u4F4D\u5B57\u5143\uFF09","address.zero_address":"\u6B64\u70BA\u96F6\u5730\u5740 \u2014 \u8CC7\u91D1\u5C07\u6C38\u4E45\u4E1F\u5931","address.burn_address":"\u6B64\u5730\u5740\u70BA\u71D2\u6BC0\u5730\u5740 \u2014 \u8CC7\u91D1\u5C07\u6C38\u4E45\u4E1F\u5931","wallet.connect":"\u9023\u63A5\u9322\u5305","wallet.disconnect":"\u65B7\u958B\u9023\u7DDA","wallet.connecting":"\u9023\u7DDA\u4E2D...","wallet.copy_address":"\u8907\u88FD\u5730\u5740","wallet.copied":"\u5DF2\u8907\u88FD\uFF01","wallet.view_on_explorer":"\u5728\u700F\u89BD\u5668\u67E5\u770B","wallet.retry":"\u91CD\u8A66","wallet.connection_failed":"\u9023\u7DDA\u5931\u6557","wallet.scan_qr":"\u4F7F\u7528\u9322\u5305 App \u6383\u63CF","embedded.generate":"\u5EFA\u7ACB\u9322\u5305","embedded.import":"\u532F\u5165\u9322\u5305","embedded.backup_seed":"\u5099\u4EFD\u52A9\u8A18\u8A5E","embedded.backup_warning":"\u4EFB\u4F55\u4EBA\u53D6\u5F97\u60A8\u7684\u52A9\u8A18\u8A5E\u90FD\u53EF\u4EE5\u5B58\u53D6\u60A8\u7684\u8CC7\u91D1\u3002\u8ACB\u5B89\u5168\u5132\u5B58\u3002","embedded.backup_done":"\u6211\u5DF2\u5132\u5B58\u52A9\u8A18\u8A5E","embedded.wipe":"\u79FB\u9664\u9322\u5305","embedded.wipe_confirm":"\u78BA\u5B9A\u8981\u79FB\u9664\u55CE\uFF1F\u6B64\u64CD\u4F5C\u7121\u6CD5\u5FA9\u539F\u3002"},_t={en:$r,zh:Kr},je="en";function jr(e){je=e}function Vr(){return je}function X(e){return _t[je][e]??_t.en[e]??e}var Nt="0x0000000000000000000000000000000000000000",zr=new Set([Nt,"0x0000000000000000000000000000000000000001","0x000000000000000000000000000000000000dead","0x000000000000000000000000000000000000dEaD"]);function Qr(e){let t=e.toLowerCase();return zr.has(t)?!0:t.includes("dead")&&t.length>=40}function Xr(e){return e===Nt}function Yr(e){return/^0x[0-9a-fA-F]{40}$/.test(e)}function Dt(e){return e?Yr(e)?Xr(e)?{isValid:!1,level:"blocked",warning:X("address.zero_address")}:Qr(e)?{isValid:!1,level:"blocked",warning:X("address.burn_address")}:{isValid:!0,level:"safe",warning:null}:{isValid:!1,level:"blocked",warning:X("address.invalid_format")}:{isValid:!1,level:"blocked",warning:X("address.empty")}}function Jr({address:e}){return{validation:qr(()=>Dt(e),[e])}}import{useState as Ve,useCallback as Lt}from"react";import{WalletError as qe}from"@naculus/connect-core";import{createSiwxMessage as Zr,generateNonce as es,nowISO as ts,getBlockchainName as ns}from"@naculus/siwx";function rs(){return typeof window<"u"?window.location.host:"localhost"}function ss(){return typeof window<"u"?window.location.origin:"http://localhost"}function te(){let{session:e,chainId:t}=I(),[n,s]=Ve(!1),[r,i]=Ve(null),[l,p]=Ve(null),o=Lt(()=>p(null),[]);return{signIn:Lt(async u=>{if(!e)throw new qe("wallet_unavailable","No active session");let c=_();if(!c)throw new qe("wallet_unavailable","Client not initialized");let m=Object.entries(e.namespaces).flatMap(([A,y])=>y.accounts.map(v=>({ns:A,acc:v})));if(m.length===0)throw new qe("wallet_unavailable","No account found");let{acc:d}=m[0],h=u?.chainId??t??"eip155:1",f=u?.domain??rs(),k=u?.uri??ss(),g=es(),E=ts(),S=Zr({domain:f,address:d,uri:k,version:1,chainId:h,nonce:g,issuedAt:E,statement:u?.statement,expirationTime:u?.expirySeconds?new Date(Date.now()+u.expirySeconds*1e3).toISOString():void 0,resources:u?.resources,requestId:u?.requestId});s(!0),p(null);try{let A=await c.signMessage(e,{message:S,address:d,chainId:h??void 0}),y=u?.expirySeconds?new Date(Date.now()+u.expirySeconds*1e3).toISOString():null,v={message:{raw:S,domain:f,address:d,statement:u?.statement??null,uri:k,version:1,chainId:h,nonce:g,issuedAt:E,blockchain:ns(h),expirationTime:y,notBefore:null,resources:u?.resources??[],requestId:u?.requestId??null},signature:A};return i(v),v}catch(A){let y=A instanceof Error?A:new Error("SIWx sign-in failed");throw p(y),y}finally{s(!1)}},[e,t]),isSigningIn:n,result:r,error:l,clearError:o}}import{WalletError as Mt}from"@naculus/connect-core";import{useCallback as Bt}from"react";function os(){let{session:e}=I();return Bt(()=>{if(!e)throw new Mt("wallet_unavailable","No active session");let t=e.namespaces.eip155;if(!t||t.accounts.length===0)throw new Mt("namespace_mismatch","No EVM (eip155) accounts found in session")},[e])}function as(){let e=os(),t=te();return{signIn:Bt(async s=>(e(),t.signIn(s)),[e,t.signIn]),isSigningIn:t.isSigningIn,result:t.result,error:t.error,clearError:t.clearError}}import{useState as Ce,useCallback as ze,useEffect as is,useRef as ls}from"react";import{LocalStorageAdapter as cs,logger as Se}from"@naculus/connect-core";var he="siwx_auth";function us(e){return new cs(e)}function ps(e,t){return e.message.expirationTime?new Date(e.message.expirationTime).getTime()<=t.getTime():!1}function ds(e,t){return e.message.notBefore?new Date(e.message.notBefore).getTime()<=t.getTime():!0}function ms(e){let{storagePrefix:t="naculus_",autoRestore:n=!0}=e??{},[s,r]=Ce(null),[i,l]=Ce(n),[p,o]=Ce(!1),[a,u]=Ce(null),c=te(),m=ls(us(t)),d=ze(()=>u(null),[]);is(()=>{if(!n){l(!1);return}let k=!1;return(async()=>{try{let g=m.current,E=await g.get(he);if(k)return;E&&!ps(E,new Date)&&ds(E,new Date)?(Se.info("react/useSiwxAuthSession","Restored persisted SIWx auth session"),r(E),u(null)):E&&(Se.info("react/useSiwxAuthSession","Persisted SIWx auth expired, clearing"),await g.remove(he))}catch(g){Se.warn("react/useSiwxAuthSession","Failed to restore SIWx auth:",g)}finally{k||l(!1)}})(),()=>{k=!0}},[n]);let h=ze(async k=>{o(!0),u(null);try{let g=await c.signIn(k);return await m.current.set(he,g),r(g),o(!1),g}catch(g){let E=g instanceof Error?g:new Error("SIWx sign-in failed");throw u(E),o(!1),E}},[c]),f=ze(async()=>{try{await m.current.remove(he)}catch(k){Se.warn("react/useSiwxAuthSession","Failed to clear SIWx auth:",k)}r(null),u(null)},[]);return{isSignedIn:s!==null,isRestoring:i,siwxResult:s,isSigningIn:p,error:a,signIn:h,signOut:f,clearError:d}}import{useState as Ht,useCallback as Ft}from"react";import{WalletError as Qe}from"@naculus/connect-core";import{createSiwxMessage as fs,generateNonce as gs,nowISO as Cs,getBlockchainName as Ss}from"@naculus/siwx";var hs=86400;function Es(){return typeof window<"u"?window.location.host:"localhost"}function ks(){return typeof window<"u"?window.location.origin:"http://localhost"}function Xe(){let{session:e,chainId:t}=I(),[n,s]=Ht(!1),[r,i]=Ht(null),l=Ft(()=>i(null),[]);return{signIn:Ft(async o=>{if(!e)throw new Qe("wallet_unavailable","No active session");let a=_();if(!a)throw new Qe("wallet_unavailable","Client not initialized");let u=Object.entries(e.namespaces).flatMap(([A,y])=>y.accounts.map(v=>({ns:A,acc:v})));if(u.length===0)throw new Qe("wallet_unavailable","No account found");let{acc:c}=u[0],m=o?.chainId??t??"eip155:1",d=o?.domain??Es(),h=o?.uri??ks(),f=gs(),k=Cs(),g=o?.expirySeconds??hs,E=new Date(Date.now()+g*1e3).toISOString(),S=fs({domain:d,address:c,uri:h,version:1,chainId:m,nonce:f,issuedAt:k,expirationTime:E,statement:o?.statement,resources:o?.resources,requestId:o?.requestId});s(!0),i(null);try{let A=await a.signMessage(e,{message:S,address:c,chainId:m??void 0}),y={message:{raw:S,domain:d,address:c,statement:o?.statement??null,uri:h,version:1,chainId:m,nonce:f,issuedAt:k,blockchain:Ss(m),expirationTime:E,notBefore:null,resources:o?.resources??[],requestId:o?.requestId??null},signature:A};return s(!1),y}catch(A){let y=A instanceof Error?A:new Error("SIWx sign-in failed");throw i(y),s(!1),y}},[e,t]),isSigningIn:n,error:r,clearError:l}}import{useState as Ee,useCallback as ke,useEffect as Gt,useRef as ys}from"react";import{logger as Ye}from"@naculus/connect-core";import{checkSessionExpired as $t,createLocalStorageSiwxSessionStorage as As}from"@naculus/siwx";function Kt(e){return{id:`siwx_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,chainId:e.message.chainId,address:e.message.address,domain:e.message.domain,message:e.message,signature:e.signature,issuedAt:e.message.issuedAt??new Date().toISOString(),expiresAt:e.message.expirationTime,refreshedAt:null}}function xs(e){let{storagePrefix:t="naculus_",autoRestore:n=!0,defaultExpirySeconds:s=86400}=e??{},[r,i]=Ee(null),[l,p]=Ee(n),[o,a]=Ee(!1),[u,c]=Ee(null),{session:m,chainId:d}=I(),h=Xe(),f=ys(As(`${t}siwx_session`)),k=ke(()=>c(null),[]);Gt(()=>{if(!n){p(!1);return}let R=!1;return(async()=>{try{let C=await f.current.get();if(R)return;C?(Ye.info("react/useSIWxSession","Restored persisted SIWx session"),i(C),c(null)):i(null)}catch(b){Ye.warn("react/useSIWxSession","Failed to restore SIWx session:",b),i(null)}finally{R||p(!1)}})(),()=>{R=!0}},[n]),Gt(()=>{if(!r?.expiresAt)return;let R=new Date(r.expiresAt).getTime()-Date.now();if(R<=0){i(null);return}let b=setTimeout(()=>{i(C=>C&&C.id===r.id?null:C)},R);return()=>clearTimeout(b)},[r?.id,r?.expiresAt]);let g=ke(async R=>{a(!0),c(null);try{let b={expirySeconds:s,chainId:d??void 0,...R},C=await h.signIn(b),x=Kt(C);return await f.current.set(x),i(x),a(!1),x}catch(b){let C=b instanceof Error?b:new Error("SIWx sign-in failed");throw c(C),a(!1),C}},[h,d,s]),E=ke(async()=>{try{await f.current.remove()}catch(R){Ye.warn("react/useSIWxSession","Failed to clear session:",R)}i(null),c(null)},[]),S=ke(async()=>{if(!r)throw new Error("No active session to refresh");a(!0),c(null);try{let R=await h.signIn({domain:r.domain,statement:r.message.statement??void 0,uri:r.message.uri,chainId:r.chainId,expirySeconds:s,resources:r.message.resources.length>0?r.message.resources:void 0,requestId:r.message.requestId??void 0}),b={...Kt(R),id:r.id,refreshedAt:new Date().toISOString()};return await f.current.set(b),i(b),a(!1),b}catch(R){let b=R instanceof Error?R:new Error("Session refresh failed");throw c(b),a(!1),b}},[r,h,s]),A=r!==null&&!$t(r),y=$t(r),v=r?.expiresAt?Math.max(0,new Date(r.expiresAt).getTime()-Date.now()):null;return{session:A?r:null,isAuthenticated:A,isRestoring:l,isSigningIn:o,isExpired:y,timeUntilExpiry:v,signIn:g,signOut:E,refresh:S,error:u,clearError:k}}import{useState as H,useCallback as G,useEffect as vs,useRef as ws}from"react";import{WalletError as bs,SessionKeyManager as Ts,MemoryStorageAdapter as Rs}from"@naculus/connect-core";var ye=null;function Ae(e){return ye||(ye=new Ts(e,typeof window<"u"?void 0:new Rs)),ye}function Is(){let{session:e}=I(),[t,n]=H([]),[s,r]=H(!1),[i,l]=H(null),p=ws(!0),o=G(()=>l(null),[]),a=Ae(),u=a.isStorageAvailable(),c=G(async()=>{if(!e){n([]);return}r(!0),l(null);try{let d=await a.listSessions();p.current&&n(d)}catch(d){p.current&&l(d instanceof Error?d:new Error("Failed to load session keys"))}finally{p.current&&r(!1)}},[e,a]);vs(()=>(p.current=!0,c(),()=>{p.current=!1}),[c]);let m=t.filter(d=>d.status==="active");return{sessions:t,activeSessions:m,loading:s,error:i,refresh:c,clearError:o,storageAvailable:u}}function Us(){let{session:e}=I(),[t,n]=H(null),[s,r]=H(!1),[i,l]=H(null),p=G(()=>l(null),[]),o=Ae();return{createSessionKey:G(async(u,c)=>{if(!e)throw new bs("wallet_unavailable","No active wallet session");r(!0),l(null);try{let m=c??void 0,d=await o.createSessionKey(u,m);return n(d),d}catch(m){let d=m instanceof Error?m:new Error("Failed to create session key");throw l(d),d}finally{r(!1)}},[e,o]),lastCreated:t,isCreating:s,error:i,clearError:p}}function Ps(){let[e,t]=H(!1),[n,s]=H(null),r=G(()=>s(null),[]),i=Ae();return{revokeSession:G(async p=>{t(!0),s(null);try{await i.revokeSession(p)}catch(o){let a=o instanceof Error?o:new Error("Failed to revoke session key");throw s(a),a}finally{t(!1)}},[i]),isRevoking:e,error:n,clearError:r}}function Ws(){let[e,t]=H(!1),[n,s]=H(null),r=G(()=>s(null),[]),i=Ae(),l=G(async(o,a)=>{t(!0),s(null);try{return await i.signWithSessionKey(o,a)}catch(u){let c=u instanceof Error?u:new Error("Failed to sign with session key");throw s(c),c}finally{t(!1)}},[i]),p=G(async(o,a)=>{t(!0),s(null);try{return await i.checkSessionScope(o,a)}catch(u){let c=u instanceof Error?u:new Error("Failed to check session scope");throw s(c),c}finally{t(!1)}},[i]);return{signWithSession:l,checkScope:p,isBusy:e,error:n,clearError:r}}function Os(){ye=null}import{useState as Je,useEffect as jt,useCallback as Vt,useRef as Ze}from"react";import{NameResolver as qt}from"@naculus/connect-core";var et=null;function _s(e){return e?new qt(e):(et||(et=new qt),et)}function Ns(e,t){let[n,s]=Je(null),[r,i]=Je(!1),[l,p]=Je(null),o=t?.skip??!1,a=Ze(null),u=Ze(""),c=Ze(!0);jt(()=>(c.current=!0,()=>{c.current=!1}),[]);let m=a.current??_s(t?.resolverConfig);a.current=m;let d=Vt(()=>{let f=e.trim();if(!f||o){s(null),i(!1),p(null);return}u.current===f&&n||(u.current=f,i(!0),p(null),m.resolveName(f).then(k=>{c.current&&(s(k),i(!1))}).catch(k=>{if(c.current){let g=k instanceof Error?k:new Error(String(k));p(g),s(null),i(!1)}}))},[e,o]);jt(()=>{d()},[d]);let h=Vt(()=>{u.current="",d()},[d]);return{data:n,isLoading:r,error:l,refetch:h}}import{useState as tt,useEffect as zt,useCallback as Qt,useRef as nt}from"react";import{NameResolver as Xt}from"@naculus/connect-core";var rt=null;function Ds(e){return e?new Xt(e):(rt||(rt=new Xt),rt)}function Ls(e,t){let[n,s]=tt(null),[r,i]=tt(!1),[l,p]=tt(null),o=t?.chainId,a=t?.skip??!1,u=nt(null),c=nt(""),m=nt(!0);zt(()=>(m.current=!0,()=>{m.current=!1}),[]);let d=u.current??Ds(t?.resolverConfig);u.current=d;let h=Qt(()=>{let k=e.trim();if(!k||a){s(null),i(!1),p(null);return}c.current===k&&n||(c.current=k,i(!0),p(null),d.lookupAddress(k,o).then(g=>{m.current&&(s(g),i(!1))}).catch(g=>{if(m.current){let E=g instanceof Error?g:new Error(String(g));p(E),s(null),i(!1)}}))},[e,o,a]);zt(()=>{h()},[h]);let f=Qt(()=>{c.current="",h()},[h]);return{data:n,isLoading:r,error:l,refetch:f}}import{useSyncExternalStore as Ms,useCallback as Yt}from"react";function Bs(e,t){if(!e)return()=>{};let n=()=>t();return e.on("sessionConnected",n),e.on("sessionDisconnected",n),e.on("chainChanged",n),()=>{e.off("sessionConnected",n),e.off("sessionDisconnected",n),e.off("chainChanged",n)}}function Hs(e){if(!e)return{session:null,chainSessions:[],activeChainId:null,isConnected:!1,connectorId:null};let t=e.getActiveBundle();return t?{session:t.walletSession,chainSessions:Array.from(t.chainSessions.values()),activeChainId:t.activeChainId,isConnected:!0,connectorId:t.walletSession.walletType}:{session:null,chainSessions:[],activeChainId:null,isConnected:!1,connectorId:null}}function Fs(e){let t=I(),n=e??t.sessionManager??null,s=Yt(i=>Bs(n,i),[n]),r=Yt(()=>Hs(n),[n]);return Ms(s,r)}import{useState as Jt,useCallback as Zt}from"react";import{WalletError as en}from"@naculus/connect-core";function Gs(){let{switchChain:e,chainId:t}=I(),[n,s]=Jt(!1),[r,i]=Jt(null),l=Zt(async o=>{s(!0),i(null);try{await e(o)}catch(a){let u=a instanceof en?a:new en("chain_unsupported",a instanceof Error?a.message:"Unknown error during chain switch");throw i(u),u}finally{s(!1)}},[e]),p=Zt(()=>{i(null)},[]);return{switchChain:l,isSwitching:n,currentChainId:t,error:r,clearError:p}}import{useCallback as ot,useMemo as rn}from"react";var tn={wallet_unavailable:"Wallet Not Detected",user_rejected:"Connection Rejected",deeplink_timeout:"Wallet Connection Timed Out",session_expired:"Session Expired",intent_expired:"Connection Request Expired",namespace_mismatch:"Network Mismatch",chain_unsupported:"Unsupported Network",method_not_allowed:"Action Not Allowed",signature_rejected:"Signature Rejected",tx_failed:"Transaction Failed"},nn={wallet_unavailable:"No wallet found. Please install a compatible wallet (e.g., MetaMask, WalletConnect) and try again.",user_rejected:"The connection request was declined in your wallet. You can try again whenever you're ready.",deeplink_timeout:"The wallet didn't respond in time. This can happen if the wallet app isn't installed or takes too long to open.",session_expired:"Your wallet session has expired. Please reconnect to continue.",intent_expired:"The connection request expired. Please try connecting again.",namespace_mismatch:"This wallet doesn't support the required network. Try using a different wallet or network.",chain_unsupported:"This network isn't supported. Please switch to a supported network in your wallet.",method_not_allowed:"This action isn't supported by your current wallet or network.",signature_rejected:"The signature request was declined in your wallet.",tx_failed:"The transaction couldn't be completed. This could be due to insufficient funds, network congestion, or a contract error."},ne="Something went wrong",re="An unexpected error occurred. Please try again. If the problem persists, check your connection and wallet configuration.";function se(e){if(!e)return{title:ne,description:re};let t=e;if(t.name==="WalletError"&&t.code){let n=t.code,s=tn[n]??ne,r=nn[n]??t.message??re;return{title:s,description:r,code:n}}if(e instanceof Error){let n=e.message;return/user rejected/i.test(n)||/rejected/.test(n)?{title:"Request Rejected",description:"The request was declined.",code:"user_rejected"}:/timeout/i.test(n)||/timed? ?out/i.test(n)?{title:"Request Timed Out",description:"The request took too long. Please try again.",code:"deeplink_timeout"}:/network/i.test(n)||/chain/i.test(n)?{title:"Network Error",description:n,code:"chain_unsupported"}:/insufficient funds/i.test(n)?{title:"Insufficient Funds",description:"You don't have enough funds to complete this transaction.",code:"tx_failed"}:{title:ne,description:n||re}}return typeof e=="string"?{title:ne,description:e||re}:{title:ne,description:re}}function st(e){let t=e;return t.name!=="WalletError"||!t.code?!1:["deeplink_timeout","session_expired","intent_expired","tx_failed"].includes(t.code)}function $s(){let{error:e,clearError:t}=I(),n=rn(()=>e?se(e):null,[e]),s=rn(()=>e?st(e):!1,[e]),r=ot(()=>{t()},[t]),i=ot(p=>se(p),[]),l=ot(p=>async()=>{try{return await p()}catch(o){let a=se(o),u=new Error(a.description);throw u.title=a.title,u.code=a.code,u}},[]);return{error:e,friendlyError:n,clearError:r,isRetryable:s,formatError:i,wrapAsync:l}}import{useState as xe,useEffect as Ks,useCallback as sn,useRef as js}from"react";import{createContext as Vs,useContext as qs}from"react";var on=Vs(null);function oe(){return qs(on)}function zs(e,t,n){let s=oe(),r=n??s,[i,l]=xe(null),[p,o]=xe(!1),[a,u]=xe(!1),[c,m]=xe(null),d=js(void 0),h=sn(async()=>{if(!(!r||!e)){o(!0),m(null);try{await r.refreshTx(e,t);let g=r.getTxStatus(e,t);g&&l(g)}catch(g){m(g instanceof Error?g:new Error(String(g)))}finally{o(!1)}}},[r,e,t]),f=sn(()=>{!r||!e||(r.stopWatching(e,t),u(!1))},[r,e,t]);Ks(()=>{if(!r||!e||!t){l(null),u(!1);return}d.current&&d.current!==e&&r.stopWatching(d.current),d.current=e;let g=!1;u(!0),o(!0),m(null);let E=r.getTxStatus(e,t);E&&(l(E),o(!1)),r.watchTx(e,t,{}).then(A=>{g||(l(A),o(!1))}).catch(A=>{g||(m(A instanceof Error?A:new Error(String(A))),o(!1))});let S=A=>{g||l({...A})};return r.on("statusChange",S),()=>{g=!0,u(!1),r.off("statusChange",S)}},[r,e,t]);let k=i?.status??"idle";return{entry:i,status:k,isLoading:p,isWatching:a,error:c,refresh:h,stopWatching:f}}import{useState as at,useEffect as an,useCallback as Qs,useRef as Xs}from"react";function Ys(e,t,n){let s=oe(),r=n??s,[i,l]=at([]),[p,o]=at(!1),[a,u]=at(null),c=Xs(0),m=Qs(async()=>{if(r){o(!0),u(null),c.current++;try{let h=await r.getTxHistory(e,t);l(h)}catch(h){u(h instanceof Error?h:new Error(String(h)))}finally{o(!1)}}},[r,e,t]);an(()=>{m().catch(()=>{})},[m]),an(()=>{if(!r)return;let h=()=>{m().catch(()=>{})};return r.on("statusChange",h),()=>{r.off("statusChange",h)}},[r,m]);let d={pending:i.filter(h=>h.status==="pending").length,confirmed:i.filter(h=>h.status==="confirmed").length,failed:i.filter(h=>h.status==="failed").length};return{entries:i,isLoading:p,error:a,refresh:m,summary:d}}import{useState as it,useCallback as ln,useEffect as Js,useRef as Zs}from"react";function lt(e,t){let{session:n}=I(),{evmAccount:s,isConnected:r}=N(),{currentChain:i}=V(),{publicClient:l}=F(),[p,o]=it(void 0),[a,u]=it(!1),[c,m]=it(null),d=Zs(void 0),h=ln(async()=>{if(!e){let k={status:"unavailable",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[]},provider:"eth_call",summary:"No transaction to simulate",changesDetected:!1};return o(k),k}u(!0),m(null);try{let k=t??i?.id??1,g=i?.rpcUrl;if(l)try{let S=s?.includes(":")?s.split(":").pop():s,A={to:e.to,data:e.data??"0x",value:e.value?BigInt(e.value):0n};S&&(A.from=S),await l.call(A);let y={status:"success",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[]},gasInfo:e.gas?{gasLimit:BigInt(e.gas),estimatedFeeEth:"0"}:void 0,provider:"eth_call",summary:"Transaction simulation succeeded (basic revert check only)",changesDetected:!0};return o(y),y}catch(S){let A,y=S?.message??String(S),v=S?.data??S?.cause?.data;if(v&&typeof v=="string"){let b=v.startsWith("0x")?v.slice(2):v;if(b.startsWith("08c379a0")&&b.length>138){let C=parseInt(b.slice(72,136),16);if(C>0){let x=b.slice(136,136+C*2),w=new Uint8Array(C);for(let T=0;T<C;T++)w[T]=parseInt(x.slice(T*2,T*2+2),16);A=new TextDecoder().decode(w)}}else b.startsWith("4e487b71")&&(A="Panic: Built-in failure")}A||(A=y.includes("revert")?y:"Transaction reverted");let R={status:"reverted",revertReason:A,balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[{category:"simulation_failed",severity:"high",message:A?`Transaction would revert: ${A}`:"Transaction would revert"}]},provider:"eth_call",summary:A?`Transaction reverted: ${A}`:"Transaction reverted",changesDetected:!1};return o(R),R}if(g)try{let A=await(await fetch(g,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:Date.now(),method:"eth_call",params:[{to:e.to,from:s?.includes(":")?s.split(":").pop():s,data:e.data??"0x",value:e.value??"0x0"},"latest"]})})).json();if(A.error){let v={status:"reverted",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[{category:"simulation_failed",severity:"high",message:`Transaction would revert: ${A.error.message}`}]},provider:"eth_call",summary:"Transaction reverted",changesDetected:!1};return o(v),v}let y={status:"success",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[]},provider:"eth_call",summary:"Transaction simulation succeeded",changesDetected:!0};return o(y),y}catch(S){let A={status:"unavailable",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[{category:"simulation_failed",severity:"medium",message:`Network error: ${S?.message??"Unknown"}`}]},provider:"eth_call",summary:"Simulation unavailable due to network error",changesDetected:!1};return o(A),A}let E={status:"unavailable",balanceChanges:[],approvalChanges:[],riskAssessment:{level:"unknown",score:0,warnings:[{category:"simulation_failed",severity:"low",message:"No RPC URL or public client available for simulation"}]},provider:"eth_call",summary:"Simulation unavailable: no RPC URL",changesDetected:!1};return o(E),E}catch(k){let g=k instanceof Error?k:new Error("Simulation failed");throw m(g),g}finally{u(!1)}},[e,t,i,l,s]);Js(()=>{if(e)return d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{h().catch(()=>{})},300),()=>{d.current&&clearTimeout(d.current)}},[e,h]);let f=ln(()=>{o(void 0),m(null),u(!1)},[]);return{result:p,isSimulating:a,error:c,simulate:h,reset:f}}import{useMemo as eo}from"react";var to="0xa9059cbb";function no(e){return(e.startsWith("0x")?e.slice(2):e).padStart(64,"0")}function ro(e,t=32){return(e.startsWith("0x")?e.slice(2):e).padStart(t*2,"0")}function so(e,t){let[n="0",s=""]=e.split("."),r=s.padEnd(t,"0").slice(0,t);return BigInt(n+r||"0")}function oo(e,t){return`${to}${no(e)}${ro(t.toString(16))}`}function ao(e){let{evmAccount:t,isConnected:n}=N(),{currentChain:s}=V(),r=e.token.chainId??s?.id??1,i=eo(()=>{if(!(!n||!t))try{let p=e.token.decimals??18,o=so(e.amount,p),a=oo(e.to,o);return{to:e.token.address,data:a,value:"0"}}catch{return}},[e.token.address,e.token.decimals,e.to,e.amount,t,n]),l=lt(i,r);return{result:l.result,isSimulating:l.isSimulating,error:l.error,reSimulate:l.simulate,reset:l.reset}}import{useState as ct,useCallback as io,useRef as ut}from"react";function lo(e){let t=oe(),n=e??t,[s,r]=ct(null),[i,l]=ct(null),[p,o]=ct(null),a=ut(null),u=ut(null),c=ut(null);n&&(u.current||(u.current=d=>{l(d),(!a.current||d.createdAt>=a.current.createdAt)&&(r(d),a.current=d)},n.on("confirmed",u.current)),c.current||(c.current=d=>{o(d),(!a.current||d.createdAt>=a.current.createdAt)&&(r(d),a.current=d)},n.on("failed",c.current)));let m=io(()=>{r(null),l(null),o(null),a.current=null},[]);return{lastTx:s,lastConfirmedTx:i,lastFailedTx:p,clear:m}}import{useState as ae,useCallback as ve,useEffect as co,useRef as uo}from"react";function po(e){let{evmAccount:t}=N(),[n,s]=ae(null),[r,i]=ae(!1),[l,p]=ae(null),[o,a]=ae(!1),[u,c]=ae(null),m=uo(null);co(()=>{if(!e?.rpcUrl){m.current=null;return}let g=!1;return import("@naculus/connect-core").then(({SmartAccountManager:E})=>{g||(m.current=new E({rpcUrl:e.rpcUrl,chainId:e.chainId??"eip155:1",bundlerClient:{url:e.bundlerUrl??""}}))}).catch(E=>{g||c(E instanceof Error?E:new Error("Failed to load account-abstraction module"))}),()=>{g=!0}},[e?.rpcUrl,e?.bundlerUrl,e?.chainId]);let d=ve(()=>{let g=t;return!g||!m.current?null:{owner:g.includes(":")?g.split(":").pop():g,accountType:e?.accountType??"simple",entryPoint:"0x0000000071727De22E5E9d8BAf0edAc6f37da032",chainId:e?.chainId??"eip155:1",salt:e?.salt}},[t,e?.accountType,e?.chainId,e?.salt]),h=ve(async()=>{let g=d();if(!g||!m.current)return c(new Error("Smart account not configured")),null;a(!0),c(null);try{let E=await m.current.createAccount(g);return s(E.address),i(E.isDeployed),p(E),E}catch(E){let S=E instanceof Error?E:new Error("Failed to create smart account");return c(S),null}finally{a(!1)}},[d]),f=ve(async()=>{let g=d();if(!g||!m.current)return c(new Error("Smart account not configured")),null;a(!0),c(null);try{let E=await m.current.deployAccount(g);if(E){let S=await m.current.createAccount(g);s(S.address),i(!0),p(S)}return E}catch(E){let S=E instanceof Error?E:new Error("Failed to deploy smart account");return c(S),null}finally{a(!1)}},[d]),k=ve(async()=>{let g=d();if(!g||!m.current)return null;try{return await m.current.getAccountAddress(g)}catch{return null}},[d]);return{address:n,isDeployed:r,accountInfo:l,isLoading:o,error:u,createWallet:h,deployWallet:f,getAddress:k}}import{useState as ie,useCallback as cn,useRef as mo}from"react";function fo(e){let[t,n]=ie(null),[s,r]=ie(null),[i,l]=ie(!1),[p,o]=ie(!1),[a,u]=ie(null),c=mo(null),m=cn(async(h,f)=>{if(!e?.bundlerUrl)return u(new Error("Bundler URL not configured")),null;if(!h.length)return u(new Error("At least one call is required")),null;c.current?.abort(),c.current=new AbortController,l(!0),o(!0),u(null),n(null),r(null);try{let{SmartAccountManager:k,buildCallData:g,signUserOperation:E,sendUserOperation:S,buildUserOperation:A}=await import("@naculus/connect-core"),y=g(h),v=e?.entryPoint??"0x0000000071727De22E5E9d8BAf0edAc6f37da032",R={callGasLimit:100000n,verificationGasLimit:100000n,preVerificationGas:50000n};o(!1);try{R=await import("@naculus/connect-core").then(({estimateUserOperationGas:U})=>U({callData:y,sender:"0x0000000000000000000000000000000000000000"},v,e.bundlerUrl))}catch{}let b=50000000000n,C=1000000000n;if(e.rpcUrl)try{let T=await fetch(e.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_getBlockByNumber",params:["latest",!1]}),signal:c.current.signal}).then(O=>O.json()).then(O=>O.result?.baseFeePerGas?BigInt(O.result.baseFeePerGas):null),U=await fetch(e.rpcUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_maxPriorityFeePerGas",params:[]}),signal:c.current.signal}).then(O=>O.json()).then(O=>O.result?BigInt(O.result):null);T&&U&&(b=T*2n+U,C=U)}catch{}f?.gasOverrides?.callGasLimit&&(R.callGasLimit=f.gasOverrides.callGasLimit),f?.gasOverrides?.verificationGasLimit&&(R.verificationGasLimit=f.gasOverrides.verificationGasLimit),f?.gasOverrides?.preVerificationGas&&(R.preVerificationGas=f.gasOverrides.preVerificationGas),f?.gasOverrides?.maxFeePerGas&&(b=f.gasOverrides.maxFeePerGas),f?.gasOverrides?.maxPriorityFeePerGas&&(C=f.gasOverrides.maxPriorityFeePerGas);let x=A({sender:"0x0000000000000000000000000000000000000000",nonce:0n,callData:y,accountGasLimits:`0x${R.verificationGasLimit.toString(16).padStart(32,"0")}${R.callGasLimit.toString(16).padStart(32,"0")}`,preVerificationGas:R.preVerificationGas,maxFeePerGas:b,maxPriorityFeePerGas:C}),w=await S(x,e.bundlerUrl,v);return n(w.userOpHash),go(w.userOpHash,e.bundlerUrl,v).then(T=>{T&&r(T)}).catch(()=>{}),w}catch(k){let g=k instanceof Error?k:new Error("Failed to send UserOperation");return u(g),null}finally{l(!1),o(!1)}},[e]),d=cn(()=>{n(null),r(null),l(!1),o(!1),u(null)},[]);return{sendUserOp:m,userOpHash:t,receipt:s,isPending:i,isEstimating:p,error:a,reset:d}}async function go(e,t,n,s=20,r=2e3){for(let i=0;i<s;i++){try{let p=await(await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_getUserOperationReceipt",params:[e]})})).json();if(p.result)return{userOpHash:p.result.userOpHash,entryPoint:p.result.entryPoint,sender:p.result.sender,nonce:BigInt(p.result.nonce),paymaster:p.result.paymaster,actualGasUsed:BigInt(p.result.actualGasUsed),actualGasCost:BigInt(p.result.actualGasCost),success:p.result.success,transactionHash:p.result.transactionHash,logs:p.result.logs}}catch{}i<s-1&&await new Promise(l=>setTimeout(l,r))}return null}import{useState as q,useEffect as un,useRef as pt,useCallback as le}from"react";function Co(e){let t=e?.bundlerUrl,n=e?.pollInterval??2e3,s=e?.maxRetries??30,[r,i]=q("idle"),[l,p]=q(null),[o,a]=q(e?.userOpHash??null),[u,c]=q(null),[m,d]=q(!1),[h,f]=q(0),k=pt(0),[g,E]=q(0),S=pt(null),A=pt(null),y=le(()=>{S.current&&(clearInterval(S.current),S.current=null),A.current&&(clearTimeout(A.current),A.current=null)},[]),v=le(async x=>{if(t)try{let w=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:1,method:"eth_getUserOperationReceipt",params:[x]})});if(!w.ok)return;let T=await w.json();if(T.result){let U={userOpHash:T.result.userOpHash,entryPoint:T.result.entryPoint,sender:T.result.sender,nonce:BigInt(T.result.nonce),paymaster:T.result.paymaster,actualGasUsed:BigInt(T.result.actualGasUsed),actualGasCost:BigInt(T.result.actualGasCost),success:T.result.success,transactionHash:T.result.transactionHash,logs:T.result.logs};p(U),i(T.result.success?"confirmed":"failed"),d(!1),y();return}f(U=>U+1),i("pending"),h<s?A.current=setTimeout(()=>v(x),n):(i("not_found"),d(!1),y(),c(new Error("UserOperation not included after maximum retries")))}catch{f(w=>w+1),h<s&&(A.current=setTimeout(()=>v(x),n))}},[t,n,s,h,y]),R=le(x=>{y(),a(x),i("pending"),p(null),c(null),f(0),d(!0),k.current=Date.now(),S.current=setInterval(()=>{E(Date.now()-k.current)},1e3),v(x)},[y,v]),b=le(()=>{y(),d(!1)},[y]),C=le(()=>{y(),a(null),i("idle"),p(null),c(null),d(!1),f(0),E(0)},[y]);return un(()=>{e?.userOpHash&&e?.autoStart!==!1&&R(e.userOpHash)},[]),un(()=>()=>{y()},[y]),{status:r,receipt:l,userOpHash:o,error:u,isPolling:m,elapsedMs:g,attempts:h,start:R,stop:b,reset:C}}import{useState as we,useEffect as So,useCallback as pn,useRef as ho}from"react";import{TokenListManager as Eo}from"@naculus/connect-core";function be(e,t){let n=ho(null),[s,r]=we([]),[i,l]=we(t?.autoLoad!==!1),[p,o]=we(!1),[a,u]=we(null);if(!n.current){let d={};t?.sources&&(d.sources=t.sources),n.current=new Eo(d)}let c=pn(async()=>{let d=n.current;if(d){l(!0),u(null);try{await d.load();let h=e?dn(e):void 0,f=d.getTokens(h!==void 0?{chainId:h}:void 0);r(f),o(!0)}catch(h){u(h instanceof Error?h:new Error(String(h)))}finally{l(!1)}}},[e]),m=pn(async()=>{let d=n.current;if(d){l(!0),u(null);try{await d.refresh();let h=e?dn(e):void 0,f=d.getTokens(h!==void 0?{chainId:h}:void 0);r(f),o(!0)}catch(h){u(h instanceof Error?h:new Error(String(h)))}finally{l(!1)}}},[e]);return So(()=>{t?.autoLoad!==!1&&c()},[c,t?.autoLoad]),{tokens:s,isLoading:i,isLoaded:p,error:a,refetch:m}}function dn(e){let t=e.split(":"),n=parseInt(t[t.length-1],10);return isNaN(n)?void 0:n}import{useState as fn,useEffect as wo,useRef as bo}from"react";import{TokenListManager as To}from"@naculus/connect-core";import{ETHEREUM_MAINNET_TOKENS as ko,POLYGON_TOKENS as yo,OPTIMISM_TOKENS as Ao,ARBITRUM_TOKENS as xo,BASE_TOKENS as vo}from"@naculus/connect-core";function mn(){return[{name:"built-in",tokens:[...ko,...yo,...Ao,...xo,...vo],enabled:!0},{name:"uniswap-default",url:"https://tokens.uniswap.org",enabled:!0,refreshInterval:1440*60*1e3}]}var Ro=300,Te=null;function Io(){return Te||(Te=new To({sources:mn()}),Te.load().catch(()=>{})),Te}function Re(e,t){let[n,s]=fn({exact:[],fuzzy:[],hasMore:!1}),[r,i]=fn(!1),l=bo(null),p=e.trim();return wo(()=>{if(!p){s({exact:[],fuzzy:[],hasMore:!1}),i(!1);return}return l.current&&clearTimeout(l.current),i(!0),l.current=setTimeout(()=>{let o=Io(),a=t?Uo(t):void 0,u=o.search(p,{chainId:a,limit:20});s(u),i(!1)},Ro),()=>{l.current&&clearTimeout(l.current)}},[p,t]),{results:n,isSearching:r}}function Uo(e){let t=e.split(":"),n=parseInt(t[t.length-1],10);return isNaN(n)?void 0:n}import dt,{useCallback as Po}from"react";import{Fragment as Wo,jsx as D,jsxs as B}from"react/jsx-runtime";function gn({chainId:e,onSelect:t,onClose:n,options:s}){let[r,i]=dt.useState(""),{tokens:l,isLoading:p,error:o}=be(e),{results:a,isSearching:u}=Re(r,r?e:void 0),c=s?.showRecommendations??!0,m=dt.useMemo(()=>{if(r.trim()){let k=[...a.exact,...a.fuzzy].map(g=>g.token);return s?.filter?k.filter(s.filter):k}let f=l;return s?.filter?f.filter(s.filter):f},[r,a,l,s?.filter]),d=dt.useMemo(()=>!c||r.trim()?[]:l.slice(0,6),[l,c,r]),h=Po(f=>{t(f),n()},[t,n]);return B("div",{style:{background:"hsl(var(--background))",borderRadius:"12px",padding:"16px",color:"hsl(var(--foreground))",minWidth:"320px",maxWidth:"400px",fontFamily:"system-ui, sans-serif"},children:[B("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"},children:[D("h3",{style:{margin:0,fontSize:"16px",fontWeight:600},children:"Select Token"}),D("button",{onClick:n,style:{background:"none",border:"none",color:"hsl(var(--muted-foreground))",cursor:"pointer",fontSize:"18px",padding:"4px 8px"},children:"\u2715"})]}),D("input",{type:"text",placeholder:"Search token name or paste address",value:r,onChange:f=>i(f.target.value),style:{width:"100%",padding:"10px 12px",borderRadius:"8px",border:"1px solid #333",background:"hsl(var(--card))",color:"hsl(var(--foreground))",fontSize:"14px",outline:"none",boxSizing:"border-box",marginBottom:"12px"},autoFocus:!0}),p&&!u&&D("div",{style:{textAlign:"center",padding:"20px",color:"hsl(var(--muted-foreground))"},children:"Loading tokens..."}),o&&B("div",{style:{textAlign:"center",padding:"12px",color:"hsl(var(--destructive))",fontSize:"13px"},children:["Error: ",o.message]}),c&&d.length>0&&!r.trim()&&B("div",{style:{marginBottom:"12px"},children:[D("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"8px"},children:"Popular"}),D("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap"},children:d.map(f=>B("button",{onClick:()=>h(f),style:{background:"hsl(var(--card))",border:"1px solid #333",borderRadius:"20px",padding:"6px 14px",color:"hsl(var(--foreground))",cursor:"pointer",fontSize:"13px",display:"flex",alignItems:"center",gap:"4px"},children:[f.logoURI?D("img",{src:f.logoURI,alt:"",style:{width:"16px",height:"16px",borderRadius:"50%"},onError:k=>{k.target.style.display="none"}}):null,f.symbol]},`${f.chainId}:${f.address}`))})]}),r.trim()&&!p&&D("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",marginBottom:"8px"},children:m.length>0?B(Wo,{children:[a.exact.length," exact, ",a.fuzzy.length," fuzzy",a.hasMore?" (more available)":""]}):"No results found"}),D("div",{style:{maxHeight:"320px",overflowY:"auto",display:"flex",flexDirection:"column",gap:"2px"},children:m.map(f=>B("button",{onClick:()=>h(f),style:{display:"flex",alignItems:"center",gap:"10px",padding:"10px 8px",background:"transparent",border:"none",borderRadius:"8px",color:"hsl(var(--foreground))",cursor:"pointer",textAlign:"left",width:"100%",fontSize:"14px"},onMouseEnter:k=>{k.target.style.background="hsl(var(--card))"},onMouseLeave:k=>{k.target.style.background="transparent"},children:[D("div",{style:{width:"32px",height:"32px",borderRadius:"50%",background:"hsl(var(--border))",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:600,flexShrink:0,overflow:"hidden"},children:f.logoURI?D("img",{src:f.logoURI,alt:f.symbol,style:{width:"100%",height:"100%"},onError:k=>{let g=k.target;g.style.display="none",g.parentElement.textContent=f.symbol.slice(0,2)}}):f.symbol.slice(0,2)}),B("div",{style:{flex:1,minWidth:0},children:[D("div",{style:{fontWeight:600,fontSize:"14px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:f.symbol}),D("div",{style:{fontSize:"12px",color:"hsl(var(--muted-foreground))",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:f.name})]}),B("div",{style:{fontSize:"11px",color:"#666",textAlign:"right",flexShrink:0},children:[B("div",{children:[f.decimals," decimals"]}),B("div",{children:["Chain ",f.chainId]})]})]},`${f.chainId}:${f.address}`))})]})}import{useState as Cn,useCallback as $,useMemo as Oo,useEffect as Sn,useRef as _o}from"react";import{InAppChannel as No}from"@naculus/connect-core";import{createStorageAdapter as Do}from"@naculus/connect-core";var Lo={telegram:!1,webpush:!1,inapp:!0,frequency:"final-only",mutedChains:[],mutedTypes:[]},hn="naculus_notif_react_settings";function Mo(e){let t=_o(null);t.current||(t.current=e?.channel??new No);let n=t.current,[s,r]=Cn(()=>n.getHistory()),[i,l]=Cn(()=>Lo);Sn(()=>{(e?.storage??En()).getItem(hn).then(E=>{E&&l(E)})},[]),Sn(()=>(n.onNotification=g=>{r(E=>[...E,g])},n.restore().then(()=>{r(n.getHistory())}),()=>{n.onNotification=void 0}),[]);let p=Oo(()=>s.filter(g=>!g.read).length,[s]),o=$(()=>{n.clear(),r([])},[n]),a=$(g=>{let E=n.getHistory().filter(S=>S.id!==g);n.clear(),Promise.all(E.map(S=>n.send({id:S.id,userId:"",txHash:S.txHash,chainId:"",chainName:S.chainName,status:S.status,title:S.title,body:S.body,valueFormatted:S.valueFormatted,explorerUrl:S.explorerUrl,timestamp:S.timestamp}))).then(()=>{r(n.getHistory())})},[n]),u=$(g=>{n.markAsRead(g),r(E=>E.map(S=>S.id===g?{...S,read:!0}:S))},[n]),c=$(()=>{n.markAllAsRead(),r(g=>g.map(E=>({...E,read:!0})))},[n]),m=$(g=>{let E={...g,id:`notif_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,timestamp:Date.now()};n.send({id:E.id,userId:"",txHash:E.txHash,chainId:"",chainName:E.chainName,status:E.status,title:E.title,body:E.body,valueFormatted:E.valueFormatted,explorerUrl:E.explorerUrl,timestamp:E.timestamp})},[n]),d=$(g=>{l(E=>{let S={...E,...g};return(e?.storage??En()).setItem(hn,S).catch(()=>{}),S})},[e?.storage]),h=$(g=>{let E={};g.includes("telegram")&&(E.telegram=!0),g.includes("webpush")&&(E.webpush=!0),g.includes("inapp")&&(E.inapp=!0),d(E)},[d]),f=$(g=>{d({mutedChains:[...new Set([...i.mutedChains,g])]})},[i.mutedChains,d]),k=$(g=>{d({mutedChains:i.mutedChains.filter(E=>E!==g)})},[i.mutedChains,d]);return{notifications:s,unreadCount:p,addNotification:m,clear:o,clearOne:a,markAsRead:u,markAllAsRead:c,settings:i,updateSettings:d,setChannels:h,muteChain:f,unmuteChain:k}}function En(){let e=Do("local","naculus_notif_");return{getItem:async t=>{try{return await e.get(t)}catch(n){return console.warn("useNotification: failed to read from storage:",n),null}},setItem:async(t,n)=>{try{await e.set(t,n)}catch(s){console.warn("useNotification: failed to write to storage:",s)}},removeItem:async t=>{try{await e.remove(t)}catch(n){console.warn("useNotification: failed to remove from storage:",n)}}}}import{useState as mt,useCallback as kn,useRef as Bo}from"react";import{SimulationManager as Ho}from"@naculus/wallet-engine";function Fo(e){let t=e?.rpcUrl,n=e?.chainId,s=Bo(null);function r(){return s.current||(s.current=new Ho({enabled:!0,rpcUrl:t,autoSimulate:!1})),s.current}let[i,l]=mt(null),[p,o]=mt(!1),[a,u]=mt(null),c=kn(async(d,h,f,k,g)=>{o(!0),u(null);try{let E=r(),S=g?.chainId??n??1,A=g?.rpcUrl??t,y=await E.simulateERC20Transfer(d,h,f,k,S,g?.decimals);return l(y),y}catch(E){let S=E instanceof Error?E:new Error(String(E));throw u(S),S}finally{o(!1)}},[t,n]),m=kn(()=>{l(null),u(null),o(!1)},[]);return{result:i,loading:p,error:a,simulate:c,reset:m}}import{useState as ft,useEffect as yn,useCallback as gt,useRef as An}from"react";function xn(e,t){let{fromChain:n,toChain:s,fromToken:r,toToken:i,amount:l,options:p}=e,[o,a]=ft([]),[u,c]=ft(!1),[m,d]=ft(null),h=An(null),f=An(!0),k=gt(async()=>{if(!n||!s||!r||!l||BigInt(l)<=0n){a([]);return}if(t){c(!0),d(null);try{let S=await t(n,s,r,l,p);f.current&&a(S)}catch(S){f.current&&(d(S instanceof Error?S:new Error(String(S))),a([]))}finally{f.current&&c(!1)}}},[n,s,r,l,p,t]);yn(()=>{if(h.current&&clearTimeout(h.current),!n||!s||!r||!l){a([]);return}return h.current=setTimeout(()=>{k()},300),()=>{h.current&&clearTimeout(h.current)}},[k,n,s,r,l]),yn(()=>(f.current=!0,()=>{f.current=!1}),[]);let g=gt(async()=>{await k()},[k]),E=gt(()=>{a([]),d(null),c(!1)},[]);return{quotes:o,loading:u,error:m,refresh:g,clear:E}}import{useState as Ct,useCallback as vn,useRef as Go}from"react";function wn(e){let[t,n]=Ct(!1),[s,r]=Ct(null),[i,l]=Ct(null),p=Go(!0),o=vn(async(u,c,m)=>{if(!e){l({code:"no_executor",message:"No executeRoute function provided"});return}n(!0),l(null),r(null);try{let d=await e(u,c,m);p.current&&r(d)}catch(d){if(p.current){let h=d;l({code:h.code??"execution_failed",message:h.message,details:h.details})}}finally{p.current&&n(!1)}},[e]),a=vn(()=>{r(null),l(null),n(!1)},[]);return{execute:o,executing:t,result:s,error:i,reset:a}}import{useState as St,useEffect as bn,useCallback as Tn,useRef as $o}from"react";function Rn(e,t){let{operation:n,chains:s,options:r}=e,[i,l]=St([]),[p,o]=St(!1),[a,u]=St(null),c=$o(!0),m=Tn(async()=>{if(!s||s.length===0){l([]);return}if(t){o(!0),u(null);try{let h=await t(n,s,r);c.current&&l(h)}catch(h){c.current&&(u(h instanceof Error?h:new Error(String(h))),l([]))}finally{c.current&&o(!1)}}},[n,s,r,t]);bn(()=>{m()},[m]),bn(()=>(c.current=!0,()=>{c.current=!1}),[]);let d=Tn(async()=>{await m()},[m]);return{comparisons:i,loading:p,error:a,refresh:d}}import{createComponent as P}from"@stencil/react-output-target/runtime";import W from"react";import{AppkitAccordion as Ko,defineCustomElement as jo}from"@naculus/connect-appkit-wc/dist/components/appkit-accordion.js";import{AppkitAccountButton as Vo,defineCustomElement as qo}from"@naculus/connect-appkit-wc/dist/components/appkit-account-button.js";import{AppkitAlertDialog as zo,defineCustomElement as Qo}from"@naculus/connect-appkit-wc/dist/components/appkit-alert-dialog.js";import{AppkitAvatar as Xo,defineCustomElement as Yo}from"@naculus/connect-appkit-wc/dist/components/appkit-avatar.js";import{AppkitBadge as Jo,defineCustomElement as Zo}from"@naculus/connect-appkit-wc/dist/components/appkit-badge.js";import{AppkitButton as ea,defineCustomElement as ta}from"@naculus/connect-appkit-wc/dist/components/appkit-button.js";import{AppkitCardContent as na,defineCustomElement as ra}from"@naculus/connect-appkit-wc/dist/components/appkit-card-content.js";import{AppkitCardDescription as sa,defineCustomElement as oa}from"@naculus/connect-appkit-wc/dist/components/appkit-card-description.js";import{AppkitCardFooter as aa,defineCustomElement as ia}from"@naculus/connect-appkit-wc/dist/components/appkit-card-footer.js";import{AppkitCardHeader as la,defineCustomElement as ca}from"@naculus/connect-appkit-wc/dist/components/appkit-card-header.js";import{AppkitCardTitle as ua,defineCustomElement as pa}from"@naculus/connect-appkit-wc/dist/components/appkit-card-title.js";import{AppkitCard as da,defineCustomElement as ma}from"@naculus/connect-appkit-wc/dist/components/appkit-card.js";import{AppkitCheckbox as fa,defineCustomElement as ga}from"@naculus/connect-appkit-wc/dist/components/appkit-checkbox.js";import{AppkitCollapsible as Ca,defineCustomElement as Sa}from"@naculus/connect-appkit-wc/dist/components/appkit-collapsible.js";import{AppkitConnectButton as ha,defineCustomElement as Ea}from"@naculus/connect-appkit-wc/dist/components/appkit-connect-button.js";import{AppkitDialog as ka,defineCustomElement as ya}from"@naculus/connect-appkit-wc/dist/components/appkit-dialog.js";import{AppkitDropdownMenu as Aa,defineCustomElement as xa}from"@naculus/connect-appkit-wc/dist/components/appkit-dropdown-menu.js";import{AppkitInput as va,defineCustomElement as wa}from"@naculus/connect-appkit-wc/dist/components/appkit-input.js";import{AppkitPopover as ba,defineCustomElement as Ta}from"@naculus/connect-appkit-wc/dist/components/appkit-popover.js";import{AppkitProgress as Ra,defineCustomElement as Ia}from"@naculus/connect-appkit-wc/dist/components/appkit-progress.js";import{AppkitScrollArea as Ua,defineCustomElement as Pa}from"@naculus/connect-appkit-wc/dist/components/appkit-scroll-area.js";import{AppkitSelect as Wa,defineCustomElement as Oa}from"@naculus/connect-appkit-wc/dist/components/appkit-select.js";import{AppkitSeparator as _a,defineCustomElement as Na}from"@naculus/connect-appkit-wc/dist/components/appkit-separator.js";import{AppkitSkeleton as Da,defineCustomElement as La}from"@naculus/connect-appkit-wc/dist/components/appkit-skeleton.js";import{AppkitSwitch as Ma,defineCustomElement as Ba}from"@naculus/connect-appkit-wc/dist/components/appkit-switch.js";import{AppkitTabs as Ha,defineCustomElement as Fa}from"@naculus/connect-appkit-wc/dist/components/appkit-tabs.js";import{AppkitToggleGroup as Ga,defineCustomElement as $a}from"@naculus/connect-appkit-wc/dist/components/appkit-toggle-group.js";import{AppkitTooltip as Ka,defineCustomElement as ja}from"@naculus/connect-appkit-wc/dist/components/appkit-tooltip.js";var Va=P({tagName:"appkit-accordion",elementClass:Ko,react:W,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:jo}),qa=P({tagName:"appkit-account-button",elementClass:Vo,react:W,events:{},defineCustomElement:qo}),za=P({tagName:"appkit-alert-dialog",elementClass:zo,react:W,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:Qo}),Qa=P({tagName:"appkit-avatar",elementClass:Xo,react:W,events:{},defineCustomElement:Yo}),Xa=P({tagName:"appkit-badge",elementClass:Jo,react:W,events:{},defineCustomElement:Zo}),Ya=P({tagName:"appkit-button",elementClass:ea,react:W,events:{},defineCustomElement:ta}),Ja=P({tagName:"appkit-card",elementClass:da,react:W,events:{},defineCustomElement:ma}),Za=P({tagName:"appkit-card-content",elementClass:na,react:W,events:{},defineCustomElement:ra}),ei=P({tagName:"appkit-card-description",elementClass:sa,react:W,events:{},defineCustomElement:oa}),ti=P({tagName:"appkit-card-footer",elementClass:aa,react:W,events:{},defineCustomElement:ia}),ni=P({tagName:"appkit-card-header",elementClass:la,react:W,events:{},defineCustomElement:ca}),ri=P({tagName:"appkit-card-title",elementClass:ua,react:W,events:{},defineCustomElement:pa}),si=P({tagName:"appkit-checkbox",elementClass:fa,react:W,events:{onAppkitChange:"appkitChange"},defineCustomElement:ga}),oi=P({tagName:"appkit-collapsible",elementClass:Ca,react:W,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:Sa}),ai=P({tagName:"appkit-connect-button",elementClass:ha,react:W,events:{onAppkitConnect:"appkitConnect",onAppkitDisconnect:"appkitDisconnect",onAppkitStartPairing:"appkitStartPairing",onAppkitRetry:"appkitRetry",onAppkitMobileDeepLink:"appkitMobileDeepLink",onAppkitCopyAddress:"appkitCopyAddress"},defineCustomElement:Ea}),ii=P({tagName:"appkit-dialog",elementClass:ka,react:W,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:ya}),li=P({tagName:"appkit-dropdown-menu",elementClass:Aa,react:W,events:{onAppkitSelect:"appkitSelect"},defineCustomElement:xa}),ci=P({tagName:"appkit-input",elementClass:va,react:W,events:{onAppkitChange:"appkitChange"},defineCustomElement:wa}),ui=P({tagName:"appkit-popover",elementClass:ba,react:W,events:{onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:Ta}),pi=P({tagName:"appkit-progress",elementClass:Ra,react:W,events:{},defineCustomElement:Ia}),di=P({tagName:"appkit-scroll-area",elementClass:Ua,react:W,events:{},defineCustomElement:Pa}),mi=P({tagName:"appkit-select",elementClass:Wa,react:W,events:{onAppkitChange:"appkitChange"},defineCustomElement:Oa}),fi=P({tagName:"appkit-separator",elementClass:_a,react:W,events:{},defineCustomElement:Na}),gi=P({tagName:"appkit-skeleton",elementClass:Da,react:W,events:{},defineCustomElement:La}),Ci=P({tagName:"appkit-switch",elementClass:Ma,react:W,events:{onAppkitChange:"appkitChange"},defineCustomElement:Ba}),Si=P({tagName:"appkit-tabs",elementClass:Ha,react:W,events:{onAppkitTabChange:"appkitTabChange"},defineCustomElement:Fa}),hi=P({tagName:"appkit-toggle-group",elementClass:Ga,react:W,events:{onAppkitChange:"appkitChange"},defineCustomElement:$a}),Ei=P({tagName:"appkit-tooltip",elementClass:Ka,react:W,events:{},defineCustomElement:ja});export{Va as AppkitAccordion,qa as AppkitAccountButton,za as AppkitAlertDialog,Qa as AppkitAvatar,Xa as AppkitBadge,Ya as AppkitButton,Ja as AppkitCard,Za as AppkitCardContent,ei as AppkitCardDescription,ti as AppkitCardFooter,ni as AppkitCardHeader,ri as AppkitCardTitle,si as AppkitCheckbox,oi as AppkitCollapsible,ai as AppkitConnectButton,ii as AppkitDialog,li as AppkitDropdownMenu,ci as AppkitInput,ui as AppkitPopover,pi as AppkitProgress,di as AppkitScrollArea,mi as AppkitSelect,fi as AppkitSeparator,gi as AppkitSkeleton,Ci as AppkitSwitch,Si as AppkitTabs,hi as AppkitToggleGroup,Ei as AppkitTooltip,ht as DEFAULT_EVM_CHAINS,gn as TokenSelector,on as TxMonitorContext,nn as WALLET_ERROR_DESCRIPTIONS,tn as WALLET_ERROR_TITLES,qn as Web3ConnectProvider,_e as Web3Context,Pn as clearClient,Ue as createClient,Pe as getChainById,_ as getClient,We as getDefaultChains,Vr as getLocale,se as getUserFriendlyError,st as isRetryableError,Os as resetSessionKeyManager,jr as setLocale,X as t,N as useAccount,dr as useBalance,V as useChain,Rn as useCompareCosts,Jn as useConnect,Us as useCreateSessionKey,tr as useDisconnect,Mr as useERC20Allowance,Or as useERC20Approve,Tr as useERC20Transfer,ao as useERC20TransferSimulation,Gr as useEmbeddedWallet,wn as useExecuteRoute,lo as useLastTx,Ls as useLookupAddress,Mo as useNotification,Ns as useResolveName,Ps as useRevokeSession,xn as useRouteQuote,Xe as useSIWxLogin,xs as useSIWxSession,or as useSendCalls,J as useSendTransaction,fo as useSendUserOperation,Ws as useSendWithSession,Fs as useSession,Is as useSessionKeys,as as useSignInWithEthereum,te as useSignInWithX,sr as useSignMessage,Fo as useSimulateTransfer,ms as useSiwxAuthSession,po as useSmartAccount,Gs as useSwitchChain,Sr as useTokenBalance,be as useTokenList,Re as useTokenSearch,lt as useTransactionSimulation,Ys as useTxHistory,zs as useTxMonitor,Co as useUserOpStatus,Jr as useValidateDestination,F as useViemClient,Qn as useWallet,I as useWeb3,$s as useWeb3ErrorHandler,Dt as validateDestination};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|