@naculus/connect-appkit-react 0.8.1 → 0.10.0

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/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{formatSol as my,getLatestBlockhash as fy,getSignatureStatus as gy,getSolanaBalance as hy,LAMPORTS_PER_SOL as yy,PassphraseCancelledError as Cy,PassphraseGate as Sy,parseSol as Ey,SolanaRpcError as wy}from"@naculus/connect-core";import{compareCostsKey as zr}from"@naculus/connect-appkit-core";import{useCallback as pn,useEffect as dn,useRef as mn,useState as ot}from"react";function fn(e,t){let{operation:o,chains:s,options:n}=e,[u,i]=ot([]),[h,c]=ot(!1),[l,g]=ot(null),r=mn(!0),a=mn(0),p=zr(e),d=pn(async()=>{if(!s||s.length===0){i([]);return}if(!t)return;let C=++a.current;c(!0),g(null);try{let E=await t(o,s,n);r.current&&C===a.current&&i(E)}catch(E){r.current&&C===a.current&&(g(E instanceof Error?E:new Error(String(E))),i([]))}finally{r.current&&C===a.current&&c(!1)}},[p,t]);dn(()=>{d()},[d]),dn(()=>(r.current=!0,()=>{r.current=!1}),[]);let m=pn(async()=>{await d()},[d]);return{comparisons:u,loading:h,error:l,refresh:m}}import{toExecuteRouteError as jr,validateRouteRecipient as $r}from"@naculus/connect-appkit-core";import{useCallback as gn,useEffect as Gr,useRef as hn,useState as st}from"react";function yn(e){let[t,o]=st(!1),[s,n]=st(null),[u,i]=st(null),h=hn(!0),c=hn(!1);Gr(()=>(h.current=!0,()=>{h.current=!1}),[]);let l=gn(async(r,a,p)=>{if(!e)return i({code:"no_executor",message:"No executeRoute function provided"}),n(null),null;let d=$r(r,a);if(d)return i(d),n(null),null;if(c.current)return i({code:"execution_in_progress",message:"A route execution is already in progress"}),null;c.current=!0,o(!0),i(null),n(null);try{let m=await e(r,a,p);return h.current&&n(m),m}catch(m){return h.current&&i(jr(m)),null}finally{c.current=!1,h.current&&o(!1)}},[e]),g=gn(()=>{n(null),i(null),o(!1)},[]);return{execute:l,executing:t,result:s,error:u,reset:g}}import{isQuotableInput as Qr}from"@naculus/connect-appkit-core";import{useCallback as at,useEffect as Cn,useRef as Sn,useState as it}from"react";function En(e,t){let{fromChain:o,toChain:s,fromToken:n,toToken:u,amount:i,options:h}=e,[c,l]=it([]),[g,r]=it(!1),[a,p]=it(null),d=Sn(null),m=Sn(!0),C=at(async()=>{if(!Qr({fromChain:o,toChain:s,fromToken:n,amount:i})){l([]);return}if(t){r(!0),p(null);try{let y=await t(o,s,n,i,h,u);m.current&&l(y)}catch(y){m.current&&(p(y instanceof Error?y:new Error(String(y))),l([]))}finally{m.current&&r(!1)}}},[o,s,n,u,i,h,t]);Cn(()=>{if(d.current&&clearTimeout(d.current),!o||!s||!n||!i){l([]);return}return d.current=setTimeout(()=>{C()},300),()=>{d.current&&clearTimeout(d.current)}},[C,o,s,n,i]),Cn(()=>(m.current=!0,()=>{m.current=!1}),[]);let E=at(async()=>{await C()},[C]),A=at(()=>{l([]),p(null),r(!1)},[]);return{quotes:c,loading:g,error:a,refresh:E,clear:A}}import{logger as lt,WalletError as q}from"@naculus/connect-core";import{eip6963Connector as H}from"@naculus/connector-evm-injected";import{PassphraseGate as Xr}from"@naculus/connect-core";import{createWalletConnectConnector as Yr}from"@naculus/connector-walletconnect";var ct=null;function ut(e){let t=null,o=Yr({projectId:e.projectId,metadata:e.metadata,...e.walletConnect?.client?{client:e.walletConnect.client}:{},...e.walletConnect?.openUrl?{openUrl:e.walletConnect.openUrl}:{}}),s=null,n=null,u=null,i=null,h=e.passphrasePrompt&&e.enableEmbedded&&!e.embeddedConfig?.encryptionPassphrase?new Xr:null;e.enableEmbedded&&(n=import("@naculus/connector-embedded").then(r=>{let a={...e.embeddedConfig};h&&(a.encryptionPassphrase=h.request),e.enablePasskeys&&a.encryptionPassphrase&&!a.prfUnlock&&(a.prfUnlock={async derive(d){i&&await i;let m=u;return m?.hasCredential()?m.derivePrfKey(d):null}}),s=r.createPocketConnector(a),t?._setEmbeddedConnector(s)}).catch(r=>{lt.warn("react/client","Embedded wallet connector not available:",r),s=null})),e.enablePasskeys&&(i=import("@naculus/connector-passkeys").then(r=>{u=r.createPasskeysConnector(),t?._setPasskeysConnector(u)}).catch(r=>{lt.warn("react/client","Passkeys connector not available:",r),u=null}));let c=null,l=null;e.enableSolana&&(l=import("@naculus/connector-solana").then(r=>{let a=r.solanaConnector;e.solanaDefaultChain&&"configure"in a&&a.configure({defaultChain:e.solanaDefaultChain}),c=a,typeof window<"u"&&"startDiscovery"in a&&a.startDiscovery();for(let p of e.solanaWallets??[])a.registerWallet?.(p);t?._setSolanaConnector(c)}).catch(r=>{lt.warn("react/client","Solana connector not available:",r),c=null})),typeof window<"u"&&H.startDiscovery();for(let{info:r,provider:a}of e.injectedProviders??[])H.registerProvider(r,a);let g={connector:o,get embeddedConnector(){return s},getEmbeddedConnector:async()=>(n&&await n,s),get passkeysConnector(){return u},passphraseGate:h,solanaRpcUrl:e.solanaRpcUrl??null,get solanaConnector(){return c},connect:()=>o.connect(),connectInjected:async r=>H.connect(r),connectEmbedded:async()=>{if(n&&await n,!s)throw new Error("Embedded wallet not enabled. Set enableEmbedded: true in config.");return s.connect()},connectPasskeys:async()=>{if(i&&await i,!u)throw new Error("Passkeys connector not enabled. Set enablePasskeys: true in config.");return u.connect()},startPairing:()=>o.startPairing(),completePairing:()=>o.completePairing(),cancelPairing:()=>o.cancelPairing?.(),signMessage:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.signMessage(r,a);if(r.walletType==="passkeys"&&u)return u.signMessage(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.signMessage(r,a)}if(r.walletType==="solana"){if(l&&await l,c)return c.signMessage(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.signMessage(r,a)},signTransaction:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.signTransaction(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.signTransaction(r,a)}if(r.walletType==="solana"){if(l&&await l,c)return c.signTransaction(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.signTransaction(r,a)},sendTransaction:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.sendTransaction(r,a);if(r.walletType==="passkeys"&&u)return u.sendTransaction(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.sendTransaction(r,a)}if(r.walletType==="solana"){if(l&&await l,c)return c.sendTransaction(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.sendTransaction(r,a)},onAccountsChanged:(r,a)=>{let p=()=>{};return r.id?.startsWith("eip6963-")?H.onAccountsChanged?.(r,a)??p:r.walletType==="embedded"?s?.onAccountsChanged?.(r,a)??p:r.walletType==="passkeys"?p:r.walletType==="solana"?c?.onAccountsChanged?.(r,a)??p:o.onAccountsChanged?.(r,a)??p},onChainChanged:(r,a)=>{let p=()=>{};return r.id?.startsWith("eip6963-")?H.onChainChanged?.(r,a)??p:r.walletType==="passkeys"||r.walletType==="embedded"?p:r.walletType==="solana"?c?.onChainChanged?.(r,a)??p:o.onChainChanged?.(r,a)??p},getCapabilities:r=>r.id?.startsWith("eip6963-")?H.getCapabilities?.(r):r.walletType==="passkeys"?u?.getCapabilities?.(r):r.walletType==="solana"?c?.getCapabilities?.(r):r.walletType==="embedded"?s?.getCapabilities?.(r):o.getCapabilities?.(r),sendCalls:async(r,a,p,d)=>{if(r.id?.startsWith("eip6963-"))return H.sendCalls(r,a,p,d);if(r.walletType==="passkeys"&&u)return u.sendCalls(r,a,p,d);if(r.walletType==="solana"){if(l&&await l,c)return c.sendCalls(r,a,p,d);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}if(r.walletType==="embedded"){if(!s?.sendCalls)throw new q("method_not_allowed","Embedded wallet does not support sendCalls");return s.sendCalls(r,a,p,d)}if(!o.sendCalls)throw new q("method_not_allowed","sendCalls not supported by this connector");return o.sendCalls(r,a,p,d)},showCallsStatus:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.showCallsStatus(r,a);if(r.walletType==="passkeys"||r.walletType==="embedded")throw new q("method_unsupported",`${r.walletType} wallets have no UI to display a call bundle.`);if(!o.showCallsStatus)throw new q("method_unsupported","This connector cannot display call status.");return o.showCallsStatus(r,a)},getCallsStatus:async(r,a)=>{if(r.id?.startsWith("eip6963-")&&H.getCallsStatus)return H.getCallsStatus(r,a);if(r.walletType==="passkeys"&&u?.getCallsStatus)return u.getCallsStatus(r,a);if(r.walletType==="embedded")throw new q("method_not_allowed","Embedded wallet does not support getCallsStatus");if(!o.getCallsStatus)throw new q("method_not_allowed","getCallsStatus not supported by this connector");return o.getCallsStatus(r,a)},reconnect:async r=>r.walletType==="eip6963"?H.reconnect(r):r.walletType==="embedded"?s?s.reconnect(r):r:r.walletType==="solana"?r:o.reconnect(r),disconnect:async r=>{if(r.id?.startsWith("eip6963-")||r.walletType==="eip6963")return H.disconnect(r);if(r.walletType==="embedded"&&s)return s.disconnect();if(r.walletType==="passkeys"&&u)return u.disconnect(r);if(r.walletType==="solana"){if(l&&await l,c)return c.disconnect(r);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.disconnect(r)},getAllConnectors:()=>{let r=[o];return s&&r.push(s),u&&r.push(u),c&&r.push(c),r},_setEmbeddedConnector:r=>{s=r},_setPasskeysConnector:r=>{u=r},_setSolanaConnector:r=>{c=r}};return t=g,ct=g,g}function pt(){return ct}function Jr(){ct=null}import{isEvmAddress as An,parseCaip10 as xo}from"@naculus/connect-core";import{useMemo as Ao}from"react";import{createConnectorManager as po,createSessionManager as mo,LocalStorageSessionStorage as fo,logger as Z,WalletError as go}from"@naculus/connect-core";import{eip6963Connector as Oe}from"@naculus/connector-evm-injected";import{createContext as ho,useCallback as K,useContext as yo,useEffect as me,useMemo as fe,useReducer as Co,useRef as vn}from"react";import{logger as Zr}from"@naculus/connect-core";import{issueNonce as eo,parseSiwxMessage as to}from"@naculus/siwx";function se(e,t){let o=t.split(":",1)[0],n=(e.namespaces[o]?.accounts??[]).filter(u=>u.startsWith(`${o}:`)).map(u=>({namespace:o,caip10:u}))[0];if(n)return{...n,address:n.caip10.split(":").pop()??n.caip10}}function no(e){return e.namespaces.eip155?.chains?.[0]??e.namespaces.solana?.chains?.[0]??e.namespaces.xrpl?.chains?.[0]??"eip155:1"}async function wn(e){let{session:t,siwx:o,signMessage:s}=e;if(!o||!t)return{kind:"skipped"};try{let n=no(t),u=se(t,n);if(!u)throw new Error("No account found in session");let{address:i}=u,h=await o.createMessage({address:i,chainId:n}),c=to(h);if(!c?.nonce)throw new Error("SIWx message must contain a nonce");await eo(c.nonce);let l=await s(t,{message:h,address:i,chainId:n});return await o.handleSignComplete?.({message:h,signature:l}),{kind:"authenticated",address:i,chainId:n}}catch(n){let u=n instanceof Error?n:new Error("Wallet authentication failed");return Zr.error("appkit/core","SIWx authentication failed:",n),{kind:"failed",error:u,fatal:o.required!==!1}}}import{initialWeb3State as So,web3Reducer as Eo,withRetry as wo,withTimeout as xn}from"@naculus/connect-appkit-core";import{resolveChain as ro}from"@naculus/connect-appkit-core";import{CHAINS as We,DEFAULT_RPC_URLS as oo,eip155Reference as so,getRpcUrl as ao}from"@naculus/connect-core";var io=[{caip2:"eip155:5",name:"Goerli",rpcUrl:"https://goerli.blockpi.network/v1/rpc/public",explorerUrl:"https://goerli.etherscan.io",token:"ETH"},{caip2:"eip155:80001",name:"Mumbai",rpcUrl:"https://rpc-mumbai.maticvigil.com",explorerUrl:"https://mumbai.polygonscan.com",token:"MATIC"},{caip2:"eip155:421613",name:"Arbitrum Goerli",rpcUrl:"https://goerli-rollup.arbitrum.io/rpc",explorerUrl:"https://goerli.arbiscan.io",token:"ETH"},{caip2:"eip155:420",name:"Optimism Goerli",rpcUrl:"https://goerli.optimism.io",explorerUrl:"https://goerli-optimism.etherscan.io",token:"ETH"}];function lo(e){let t=We[e];if(!t||!t.explorerUrl)return null;let o=t.caip2Id;return{caip2:o,name:t.name,rpcUrl:ao(o,oo[o]??""),explorerUrl:t.explorerUrl,token:t.nativeCurrency.symbol}}function co(){if(!We)return[];let e=[],t=Object.keys(We).map(Number).sort((o,s)=>o-s);for(let o of t){let s=lo(o);s&&e.push(s)}for(let o of io){let s=so(o.caip2);(s===null||!We[s])&&e.push(o)}return e}var kn=co();function uo(e,t){return ro(e,t)??void 0}function dt(){return[...kn]}import{jsx as vo}from"react/jsx-runtime";var mt=ho(null);function ko({children:e,config:t,autoConnect:o=!0}){let[s,n]=Co(Eo,So),u=fe(()=>t.chains??dt(),[t.chains]),i=t.connectionTimeout??3e4,h=t.maxRetries??2,c=fe(()=>t.sessionStorage??new fo(t.storageKey??"naculus_web3_session",t.encryptionKey),[t.sessionStorage,t.storageKey,t.encryptionKey]),l=fe(()=>ut({projectId:t.projectId,metadata:t.metadata,enableEmbedded:t.enableEmbedded,embeddedConfig:t.embeddedConfig,enablePasskeys:t.enablePasskeys,enableSolana:t.enableSolana,solanaDefaultChain:t.solanaDefaultChain,walletConnect:t.walletConnect,solanaWallets:t.solanaWallets,injectedProviders:t.injectedProviders}),[t.projectId,t.metadata,t.enableEmbedded,t.embeddedConfig,t.enablePasskeys,t.enableSolana,t.solanaDefaultChain,t.walletConnect,t.solanaWallets,t.injectedProviders]),g=vn(null),r=vn(null),a=fe(()=>{let f=po();for(let O of[Oe,...l.getAllConnectors()])f.register(O.id,O);let S={},x={};for(let O of u){let F=O.caip2;O.rpcUrl&&(S[F]=O.rpcUrl),O.token&&(x[F]={name:O.name,symbol:O.token,decimals:18})}let U=mo(f,{autoRefreshFeeOnSwitch:t.autoRefreshFeeOnSwitch??!0,defaultRpcUrls:S,defaultCurrencies:x,encryptionKey:t.encryptionKey});return g.current=U,U},[l,u,t.autoRefreshFeeOnSwitch,t.encryptionKey]);me(()=>{let f=F=>{let{walletSession:ne}=F.bundle;n({type:"SET_SESSION",payload:ne});let V=[];Object.values(ne.namespaces).forEach(de=>{V.push(...de.accounts)}),n({type:"SET_ACCOUNTS",payload:V}),n({type:"SET_CHAIN",payload:F.bundle.activeChainId}),n({type:"SET_STATUS",payload:"connected"})},S=()=>{n({type:"RESET"})},x=F=>{n({type:"SET_CHAIN",payload:F.newChainId})},U=F=>f(F),O=()=>{c.clear(),n({type:"RESET"})};return a.on("sessionConnected",f),a.on("sessionDisconnected",S),a.on("chainChanged",x),a.on("sessionScopeChanged",U),a.on("sessionRevoked",O),()=>{a.off("sessionConnected",f),a.off("sessionDisconnected",S),a.off("chainChanged",x),a.off("sessionScopeChanged",U),a.off("sessionRevoked",O)}},[a,c]),me(()=>{let f=()=>{c.clear(),n({type:"RESET"})};l.connector.onSessionExpiry(f)},[l,c]);let p=K(()=>{for(let f of[Oe,...l.getAllConnectors()])a.registerConnector(f)},[l,a]),d=K(async f=>{p();let S=[Oe,...l.getAllConnectors()].find(U=>U.id===f.walletType||U.kind===f.walletType);S&&!f.connectorId&&(f.connectorId=S.id);let x=f.namespaces.eip155?.chains?.[0]??f.namespaces.solana?.chains?.[0]??f.namespaces.xrpl?.chains?.[0];x&&await a.attach(f,x)},[l,a,p]),m=K(f=>{if(n({type:"SET_SESSION",payload:f}),f){let S=[];Object.values(f.namespaces).forEach(F=>{S.push(...F.accounts)}),n({type:"SET_ACCOUNTS",payload:S});let x=f.namespaces.eip155?.chains?.[0],U=f.namespaces.solana?.chains?.[0],O=f.namespaces.xrpl?.chains?.[0];n({type:"SET_CHAIN",payload:x??U??O??null})}else n({type:"SET_ACCOUNTS",payload:[]}),n({type:"SET_CHAIN",payload:null})},[]);me(()=>{let f=s.session,S=l;return!f||!S?.onAccountsChanged?void 0:S.onAccountsChanged(f,U=>{if(U.length===0){c.clear().finally(()=>n({type:"RESET"}));return}m(f),c.save(f)})},[s.session,l,c,m]),me(()=>{let f=s.session,S=l;if(!(!f||!S?.onChainChanged))return S.onChainChanged(f,x=>{m(f),c.save(f);let U=a.syncExternalChain;if(!U)return;let O=U.call(a,x).catch(F=>{Z.warn("react/provider","External chain sync error:",F)});r.current=O,O.finally(()=>{r.current===O&&(r.current=null)})})},[s.session,l,c,m,a]);let C=K(async f=>{if(!t.siwx||!f)return!0;n({type:"SET_STATUS",payload:"authenticating"});let S=await wn({session:f,siwx:t.siwx,signMessage:(x,U)=>l.signMessage(x,U)});return S.kind==="failed"&&S.fatal?(await c.clear(),n({type:"RESET"}),n({type:"SET_ERROR",payload:S.error}),!1):!0},[t.siwx,l,c]),E=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await xn(l.connect(),i,"Wallet connect");await c.save(f),m(f);try{await d(f)}catch(S){Z.warn("react/provider","SessionManager sync error:",S)}if(!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,c,m,i,C,d]),A=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await l.connectEmbedded();if(await c.save(f),m(f),await d(f),!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Embedded wallet connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,c,m,C,d]),y=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await l.connectPasskeys();if(await c.save(f),m(f),await d(f),!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Passkeys connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,c,m,C,d]),w=K(async()=>{if(!s.session){n({type:"RESET"});return}try{await l.disconnect(s.session)}catch(f){Z.error("react/provider","Disconnect error:",f)}try{let f=g.current;f&&await f.disconnect()}catch(f){Z.warn("react/provider","SessionManager disconnect error:",f)}await c.clear(),n({type:"RESET"})},[l,s.session,c]),R=K(async f=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let S=await xn(l.connectInjected(f),i,"Injected wallet connect");await c.save(S),m(S);try{await d(S)}catch(x){Z.warn("react/provider","SessionManager sync error:",x)}if(!await C(S))return;n({type:"SET_STATUS",payload:"connected"})}catch(S){let x=S instanceof Error?S.message:"Connection failed";n({type:"SET_ERROR",payload:S instanceof Error?S:new Error(x)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,c,m,i,C,d]),k=K(async()=>l.startPairing(),[l]),T=K(()=>{l.cancelPairing?.()},[l]),v=K(async()=>{let f=await l.completePairing();return await c.save(f),m(f),await d(f),await C(f)&&n({type:"SET_STATUS",payload:"connected"}),f},[l,c,m,C,d]),b=K(async f=>{let S=t.siwx;if(!S||S.required===!1)return!0;try{if(await S.hasValidSession?.())return!0}catch(x){Z.warn("react/provider","siwx.hasValidSession failed",x)}return C(f)},[t.siwx,C]),I=K(async()=>{let f=await c.load();if(!f){n({type:"SET_STATUS",payload:"disconnected"});return}n({type:"SET_STATUS",payload:"reconnecting"});try{let S=await wo(()=>l.reconnect(f),{maxRetries:h,baseDelay:1e3,label:"reconnect"});m(S);try{let x=g.current;x&&(p(),await x.restoreFromPersistence())}catch(x){Z.warn("react/provider","SessionManager restore error:",x)}if(!await b(S))return;n({type:"SET_STATUS",payload:"connected"})}catch(S){Z.error("react/provider","Reconnect error:",S),await c.clear(),n({type:"SET_STATUS",payload:"disconnected"}),n({type:"SET_SESSION",payload:null})}},[l,c,m,h,p,b]),W=K(async f=>{r.current&&await r.current;let S=g.current;if(S?.getActiveBundle()){await S.switchChain(f),m(s.session);return}if(!s.session)throw new Error("No active session");try{s.session.walletType==="eip6963"||s.session.id?.startsWith("eip6963-")?await Oe.switchChain(s.session,f):s.session.walletType==="embedded"&&l.embeddedConnector?await l.embeddedConnector.switchChain?.(s.session,f):s.session.walletType==="passkeys"&&l.passkeysConnector?await l.passkeysConnector.switchChain?.(s.session,f):s.session.walletType==="solana"&&l.solanaConnector?await l.solanaConnector.switchChain?.(s.session,f):await l.connector.switchChain(s.session,f),m(s.session)}catch(x){throw new go("chain_unsupported","Failed to switch chain",x)}},[l,s.session,m]);me(()=>{o&&I()},[o,I]);let _=K(()=>{n({type:"SET_ERROR",payload:null})},[]),D=fe(()=>({...s,connect:E,connectEmbedded:A,connectPasskeys:y,disconnect:w,reconnect:I,switchChain:W,startPairing:k,completePairing:v,cancelPairing:T,connectInjected:R,clearError:_,isConnected:s.status==="connected",chains:u,client:l,sessionManager:a}),[s,E,A,y,w,I,W,k,v,T,R,_,u,l,a]);return vo(mt.Provider,{value:D,children:e})}function P(){let e=yo(mt);if(!e)throw new Error("useWeb3 must be used within a Web3ConnectProvider");return e}function B(){let{accounts:e,isConnected:t}=P(),o=Ao(()=>!t||e.length===0?null:e.map(n=>{let u=xo(n);return u?{address:n,namespace:u.namespace,isEVM:u.namespace==="eip155"&&An(u.address)}:{address:n,namespace:null,isEVM:An(n)}}),[e,t]),s=o?.find(n=>n.isEVM)?.address??null;return{accounts:o,evmAccount:s,primaryAccount:e[0]??null,isConnected:t,count:e.length}}import{listAuthorizations as bo,revokeListedAuthorization as Ro}from"@naculus/connect-core";import{useCallback as bn,useEffect as Rn,useRef as ft,useState as gt}from"react";function To({managers:e}){let t=ft(e);t.current=e;let o=ft(0),s=ft(!0),[n,u]=gt([]),[i,h]=gt(!1),[c,l]=gt(null);Rn(()=>()=>{s.current=!1,o.current+=1},[]);let g=bn(async()=>{let a=++o.current;h(!0),l(null);try{let p=await bo(t.current);s.current&&a===o.current&&u(p)}catch(p){s.current&&a===o.current&&l(p instanceof Error?p:new Error("Failed to list authorizations"))}finally{s.current&&a===o.current&&h(!1)}},[]);Rn(()=>{g()},[g]);let r=bn(async a=>{try{let p=await Ro(t.current,a);return await g(),p}catch(p){let d=p instanceof Error?p:new Error("Failed to revoke authorization");throw s.current&&l(d),d}},[g]);return{entries:n,loading:i,error:c,refresh:g,revoke:r}}import{chainNumber as Io,resolveChain as Uo,toViemChain as Po}from"@naculus/connect-appkit-core";import{useState as ge,useEffect as ht,useCallback as Wo,useMemo as he,useRef as Oo}from"react";import{createPublicClient as No,http as _o,formatEther as Do}from"viem";import{getNativeTokenPriceUsd as Mo}from"@naculus/connect-core";function Lo(e){let{evmAccount:t,isConnected:o}=B(),{chainId:s,chains:n}=P(),[u,i]=ge(null),[h,c]=ge(!1),[l,g]=ge(null),[r,a]=ge(null),p=e?.refreshInterval,d=Oo(null),m=he(()=>Uo(n,s),[s,n]),C=m?Io(m):null,E=he(()=>m?Po(m,C):null,[m,C]),A=he(()=>m?.token??null,[m]),[y,w]=ge(null);ht(()=>{if(!E||!m?.rpcUrl){w(null);return}let v=No({transport:_o(m.rpcUrl),chain:E});return w(v),()=>{}},[m,E]);let R=Wo(async()=>{if(!t||!y){i(null);return}c(!0),g(null);try{let b=t.includes(":")?t.split(":").pop():t,[I,W]=await Promise.all([y.getBalance({address:b}),s?Mo(s,m?.rpcUrl).catch(()=>null):Promise.resolve(null)]);i(I.toString()),a(W)}catch(v){g(v instanceof Error?v:new Error("Failed to fetch balance")),i(null),a(null)}finally{c(!1)}},[t,y,s,m?.rpcUrl]);ht(()=>{o&&t&&R()},[o,t,R]),ht(()=>(p&&p>0&&o&&t&&(d.current=setInterval(R,p)),()=>{d.current&&(clearInterval(d.current),d.current=null)}),[p,o,t,R]);let k=he(()=>{if(u===null)return null;try{return Do(BigInt(u))}catch{return null}},[u]),T=he(()=>{if(r===null||k===null)return null;let v=parseFloat(k);if(Number.isNaN(v))return null;let b=v*r;return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(b)},[r,k]);return{balance:u,formatted:k,symbol:A,usdPrice:r,usdValue:T,isLoading:h,error:l,refetch:R,chain:m}}import{atomicSupportFor as Bo,normalizeCapabilities as Fo,selectChainCapabilities as Ko}from"@naculus/connect-appkit-core";import{useCallback as Ho,useEffect as qo,useRef as Vo,useState as yt}from"react";function N(e){return e??pt()}function Ct(){let{client:e,session:t,chainId:o}=P(),[s,n]=yt(null),[u,i]=yt(!1),[h,c]=yt(null),l=Vo(0),g=Ho(async()=>{let r=++l.current,a=N(e);if(!a?.getCapabilities||!t){n(null),i(!1),c(null);return}i(!0),c(null);try{let p=await a.getCapabilities(t);if(r!==l.current)return;n(Fo(p))}catch(p){if(r!==l.current)return;n(null),c(p instanceof Error?p:new Error("Capability query failed"))}finally{r===l.current&&i(!1)}},[e,t]);return qo(()=>{g()},[g]),{capabilities:s,current:Ko(s,o),atomic:Bo(s,o),isFetching:u,error:h,refetch:g}}import{useMemo as St}from"react";import{chainsForNamespace as zo,describeChain as jo,resolveChain as $o}from"@naculus/connect-appkit-core";function z(){let{chainId:e,session:t,switchChain:o,chains:s}=P(),n=St(()=>$o(s,e),[s,e]),u=St(()=>t?jo(s,e):null,[s,e,t]),i=St(()=>zo(s,e),[s,e]);return{chainId:e,currentChain:n,chainInfo:u,availableChains:i,chains:i,isEvm:e?.startsWith("eip155:")??!1,switchChain:o}}import{useCallback as Go,useState as Tn}from"react";import{WalletError as Qo}from"@naculus/connect-core";function Xo(){let{connect:e,status:t}=P(),[o,s]=Tn(!1),[n,u]=Tn(null);return{connect:Go(async()=>{s(!0),u(null);try{await e()}catch(h){let c=h instanceof Error?h.message:"Connection failed";u(h instanceof Qo?h:new Error(c))}finally{s(!1)}},[e]),isConnecting:o||t==="connecting",error:n}}import{bareEvmAddress as ts}from"@naculus/connect-appkit-core";import{delegateAccount as ns,eip155Reference as rs,REVOKE_DELEGATE as os,WalletError as Un}from"@naculus/connect-core";import{useCallback as Ne,useEffect as Pn,useRef as Wn,useState as wt}from"react";import{chainNumber as Yo,toViemChain as Jo}from"@naculus/connect-appkit-core";import{useMemo as Et}from"react";import{createPublicClient as Zo,http as In,createWalletClient as es}from"viem";function j(){let{evmAccount:e,isConnected:t}=B(),{currentChain:o,chains:s}=z(),n=o?Yo(o):null,u=Et(()=>o?Jo(o,n):null,[o,n]),i=Et(()=>u?Zo({transport:In(u.rpcUrls.default.http[0]),chain:u}):null,[u]),h=Et(()=>{if(!t||!e||!u)return null;let c=e.includes(":")?e.split(":").pop():e;return es({transport:In(u.rpcUrls.default.http[0]),chain:u,account:c})},[t,e,u]);return{publicClient:i,walletClient:h,chains:s}}function ss(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=P(),{publicClient:u}=j(),[i,h]=wt(null),[c,l]=wt(!1),[g,r]=wt(null),a=Wn(0),p=Wn(!1);Pn(()=>()=>{a.current+=1},[]),Pn(()=>{a.current+=1,h(null),l(!1),r(null)},[o,s,t]);let d=Ne(async(A,y)=>{let w=v=>(r(v),null);if(p.current)return w(new Error("A delegation is already in progress"));let R=ts(t);if(!o||!R||!s)return w(new Un("wallet_unavailable","No connected EVM account"));if(!u||u.chain?.id!==rs(s))return w(new Un("chain_mismatch",`No RPC client for ${s}; refusing to read the nonce elsewhere.`));let k=o.walletType==="embedded"?N(n)?.embeddedConnector??{}:{},T=++a.current;p.current=!0,l(!0),r(null),h(null);try{let v=await ns({connector:k,session:o,account:R,chainId:s,delegate:A,allowlist:y,getTransactionCount:(b,I)=>u.getTransactionCount({address:b,blockTag:I})});return T!==a.current?null:(h(v),v)}catch(v){return T!==a.current?null:w(v instanceof Error?v:new Error("Failed to send delegation"))}finally{p.current=!1,T===a.current&&l(!1)}},[s,n,t,u,o]),m=Ne(A=>d(A,e.allowlist),[d,e.allowlist]),C=Ne(()=>d(os,[]),[d]),E=Ne(()=>{a.current+=1,h(null),l(!1),r(null)},[]);return{delegate:m,revoke:C,result:i,isPending:c,error:g,reset:E}}import{applySettlementVerification as On,DEFAULT_VERIFY_RETRY as as,describePayment as is}from"@naculus/connect-appkit-core";import{useCallback as Nn,useEffect as ls,useRef as ye,useState as kt}from"react";function cs(e,t={}){let[o,s]=kt(0),[n,u]=kt(null),[i,h]=kt(null),c=ye(0),l=ye(0),g=ye(e);g.current=e;let r=ye(t);r.current=t;let a=ye(0);ls(()=>()=>{c.current+=1,l.current+=1,a.current+=1},[]);let p=Nn(async(m,C)=>{let E=++c.current,A=l.current;s(y=>y+1),h(null);try{let y=await g.current(m,C),w=is(m,y);if(w&&A===l.current){let R=r.current.verify;if(!R)u(w);else{w=On(w,{status:"pending"}),u(w);let k=++a.current,T=r.current.verifyRetry??as;Promise.resolve().then(async()=>{let v={status:"pending"};for(let b=0;b<T.attempts;b+=1){if(b>0&&await new Promise(I=>setTimeout(I,T.delayMs)),A!==l.current||k!==a.current)return;try{v=await R(y)}catch(I){v={status:"unavailable",reason:I instanceof Error?I.message:"Settlement verification failed"}}if(v.status!=="pending")break}A===l.current&&k===a.current&&u(b=>b&&On(b,v))})}}return y}catch(y){let w=y instanceof Error?y:new Error("Paid request failed");throw E===c.current&&h(w),w}finally{s(y=>y-1)}},[]),d=Nn(()=>{c.current+=1,l.current+=1,a.current+=1,u(null),h(null)},[]);return{payFetch:p,isPending:o>0,lastPayment:n,error:i,reset:d}}import{readCurrentMppSessionChannel as Ce,readMppRecoveryChannelId as _n,readMppSessionReceipt as Dn}from"@naculus/connect-appkit-core";import{useCallback as ae,useEffect as Mn,useMemo as us,useRef as _e,useState as ie}from"react";function Ln(e){return e instanceof Error?e:new Error("MPP session operation failed")}function ps(e){let[t,o]=ie(0),[s,n]=ie(()=>e.meter.pending),[u,i]=ie(()=>Ce(e)),[h,c]=ie(null),[l,g]=ie(null),[r,a]=ie(null),p=_e(0),d=_e(0),m=_e(!0),C=_e(e);C.current=e,Mn(()=>{p.current+=1,d.current+=1,o(0),n(e.meter.pending),i(Ce(e)),c(null),g(null),a(null)},[e]),Mn(()=>()=>{m.current=!1,p.current+=1,d.current+=1},[]);let E=ae(async(v,b,I=!1)=>{let W=++p.current,_=d.current,D=C.current;o(f=>f+1),a(null);try{let f=await v(D);if(m.current&&_===d.current){b?.(f);let S=Ce(D);i(S),n(D.meter.pending),(I||!S)&&g(null)}return f}catch(f){let S=Ln(f);if(m.current&&_===d.current){let x=Ce(D);i(x),n(D.meter.pending);let U=_n(f);U?g(U):x||g(null),W===p.current&&a(S)}throw S}finally{m.current&&_===d.current&&o(f=>f-1)}},[]),A=ae((v,b)=>E(I=>I(v,b),I=>{let W=Dn(I.receipt);W&&c(W)}),[E]),y=ae(()=>E(v=>v.close(),v=>{let b=Dn(v.receipt);b&&c(b)},!0),[E]),w=ae(()=>E(v=>v.forceClose(),void 0,!0),[E]),R=ae(v=>{try{C.current.meter.add(v),n(C.current.meter.pending),a(null)}catch(b){let I=Ln(b);throw a(I),g(_n(b)),I}},[]),k=ae(()=>{p.current+=1,d.current+=1,o(0),n(C.current.meter.pending),i(Ce(C.current)),c(null),g(null),a(null)},[]),T=us(()=>({add:R}),[R]);return{fetch:A,meter:T,pending:s,channel:u,lastReceipt:h,recoveryChannelId:l,isPending:t>0,error:r,close:y,forceClose:w,reset:k}}import{createSolanaSessionKeyFlow as ds}from"@naculus/connect-appkit-core";import{useCallback as De,useEffect as ms,useMemo as fs,useRef as gs,useState as vt}from"react";function Bn(){return Promise.reject(new Error("No Solana session key manager is connected"))}function hs(e){let[t,o]=vt([]),[s,n]=vt(0),[u,i]=vt(null),h=gs(0),c=e?.manager,l=e?.rpc,g=e?.owner,r=fs(()=>c&&l&&g?ds({manager:c,rpc:l,owner:g}):null,[c,l,g]),a=De(async(C,E)=>{let A=++h.current;n(y=>y+1),i(null);try{return await C()}catch(y){let w=y instanceof Error?y:new Error(E);throw A===h.current&&i(w),w}finally{if(r&&A===h.current){let y=await r.list().catch(()=>null);y&&A===h.current&&o(y)}n(y=>y-1)}},[r]),p=De(async()=>{if(!r){o([]);return}let C=h.current,E=await r.list();C===h.current&&o(E)},[r]);ms(()=>(h.current+=1,p().catch(()=>{}),()=>{h.current+=1}),[p]);let d=De(C=>r?a(()=>r.create(C),"Could not create the key"):Bn(),[r,a]),m=De(C=>r?a(()=>r.revoke(C),"Could not revoke the key"):Bn(),[r,a]);return{keys:t,create:d,revoke:m,refresh:p,isPending:s>0,error:u}}import{readDelegation as ys,UNKNOWN_DELEGATION as xt}from"@naculus/connect-core";import{useCallback as Cs,useEffect as Ss,useRef as Es,useState as At}from"react";function Se(){let{publicClient:e}=j(),{evmAccount:t}=B(),[o,s]=At(xt),[n,u]=At(!1),[i,h]=At(null),c=Es(0),l=t?.includes(":")?t.split(":").pop():t,g=Cs(async()=>{let r=++c.current;if(!e||!l){s(xt),u(!1),h(null);return}u(!0),h(null);try{let a=await e.getCode({address:l});if(r!==c.current)return;s(ys(a??"0x"))}catch(a){if(r!==c.current)return;s(xt),h(a instanceof Error?a:new Error("Code read failed"))}finally{r===c.current&&u(!1)}},[e,l]);return Ss(()=>{g()},[g]),{...o,isFetching:n,error:i,refetch:g}}import{bareEvmAddress as Ds,createDelegationPolicyFlow as Ms,isVerifiablePolicy as Ls}from"@naculus/connect-appkit-core";import{useCallback as we,useEffect as Bs,useMemo as Fs,useState as Be}from"react";import{recoverMessageAddress as Ks}from"viem";import{planExecution as xs,WalletError as As}from"@naculus/connect-core";import{useCallback as Fn,useState as Rt}from"react";import{chooseExecutionStrategy as ks,getAccountCapabilities as vs,WalletError as ee}from"@naculus/connect-core";import{useCallback as Le,useState as Ee}from"react";import{WalletError as ws}from"@naculus/connect-core";function Me(e){let t=typeof e=="string"?e:e&&typeof e=="object"&&"hash"in e?e.hash:void 0;if(typeof t=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t))return t;throw new ws("tx_failed","Wallet did not return a valid 32-byte transaction hash")}function bt(){let{session:e,chainId:t,client:o}=P(),[s,n]=Ee("idle"),[u,i]=Ee(null),[h,c]=Ee(null),[l,g]=Ee(null),[r,a]=Ee(null),p=Le(async(E,A)=>{if(!e){n("failed");let y=new ee("wallet_unavailable","No active session");throw i(y),y}if(E.length===0){n("failed");let y=new ee("invalid_input","At least one call is required");throw i(y),y}n("awaiting_approval"),i(null),c(null);try{let y=N(o);if(!y)throw new ee("wallet_unavailable","Client not initialized");let w=A?.chainId??t??void 0,R=A?.strategy??ks(await vs(y,e,w),E.length);if(a(R),R==="atomic-batch"){let T=await y.sendCalls(e,E,w,{atomicRequired:!0,...A?.paymasterService?{paymasterService:A.paymasterService}:{}});return n("submitted"),c(T),T}let k="";for(let T=0;T<E.length;T++){let v=E[T];try{k=Me(await y.sendTransaction(e,{transaction:{to:v.to,data:v.data,value:v.value},chainId:w}))}catch(b){throw new ee("tx_failed",`Call ${T+1} of ${E.length} failed after ${T} already landed (sent sequentially \u2014 this wallet cannot batch atomically): ${b instanceof Error?b.message:String(b)}`)}}return n("submitted"),c(k),k}catch(y){n("failed");let w=y instanceof Error?y.message:"sendCalls failed";throw i(y instanceof Error?y:new Error(w)),y}},[e,t,o]),d=Le(async E=>{if(!e)throw new ee("wallet_unavailable","No active session");let A=E??h;if(!A)throw new ee("invalid_input","No bundle hash available");if(!E&&r==="sequential")throw new ee("invalid_input","Calls were sent sequentially, so there is no bundle to query. Track the returned transaction hash instead.");let y=N(o);if(!y)throw new ee("wallet_unavailable","Client not initialized");let w=await y.getCallsStatus(e,A);return g(w),w},[e,h,o,r]),m=Le(async E=>{if(!e)return!1;let A=E??h;if(!A||!E&&r==="sequential")return!1;let y=N(o);if(!y?.showCallsStatus)return!1;try{return await y.showCallsStatus(e,A),!0}catch{return!1}},[e,h,o,r]),C=Le(()=>{n("idle"),i(null),c(null),g(null),a(null)},[]);return{sendCalls:p,getCallsStatus:d,showCallsStatus:m,status:s,error:u,batchHash:h,callsStatus:l,execution:r,reset:C,isSending:s==="awaiting_approval"}}function Tt(e={}){let{current:t,atomic:o}=Ct(),{delegated:s,delegate:n}=Se(),{sendCalls:u}=bt(),[i,h]=Rt(!1),[c,l]=Rt(null),[g,r]=Rt(null),a=e.atomicity??"preferred",p=e.sponsorship??"any",d=e.paymasterService,m=e.userOperation,C=e.userOperationSponsored??!1,E=!!(t?.raw?.paymasterService?.supported&&d),A=Fn((w,R=a)=>{let k=xs({atomicBatch:o==="supported",discovered:o!=="unknown",sponsoredTransactions:!1,...t?.maxBatchSize===void 0?{}:{maxBatchSize:t.maxBatchSize}},w,{atomicity:R,sponsorship:p}),T=p==="required"&&!C;if(k.strategy==="atomic-batch"&&!T)return{...k,reason:k.reason+(E?" A paymaster service will be requested, but the wallet's final fee payer must be checked after execution.":""),route:"wallet-batch"};let v=s&&o!=="supported"?` This account does delegate to ${n} under EIP-7702, so it is capable of batching even though the wallet has not offered to.`:"",b=R!=="any"&&!k.atomic||p==="required";return m&&b&&!T?{strategy:"atomic-batch",atomic:!0,sponsored:C,reason:p==="required"&&!k.sponsored?"The wallet batch is not configured for sponsored gas, so the calls are executed through the configured sponsored UserOperation route.":"This wallet cannot batch, so the calls are executed as a single UserOperation through the smart account, which lands as one transaction.",route:"user-operation"}:T?{strategy:"refuse",atomic:k.atomic,sponsored:!1,reason:"Sponsored gas was required, but there is no executable sponsored route: no paymaster is configured for a wallet batch, and capability advertising alone cannot pay for a sequential transaction.",route:null}:k.strategy==="refuse"?{...k,reason:k.reason+v,route:null}:{...k,reason:k.reason+v,route:"sequential"}},[o,t,E,m,C,a,p,s,n]),y=Fn(async(w,R=a)=>{h(!0),l(null);try{let k=A(w.length,R);if(k.route===null)throw new As("method_not_allowed",k.reason);return r(k.route),k.route==="user-operation"?await m(w):await u(w,{strategy:k.route==="wallet-batch"?"atomic-batch":"sequential",...k.route==="wallet-batch"&&E?{paymasterService:d}:{}})}catch(k){let T=k instanceof Error?k:new Error("Execution failed");throw l(T),T}finally{h(!1)}},[A,u,m,a,d,E]);return{preview:A,execute:y,isExecuting:i,error:c,lastRoute:g,reset:()=>{l(null),r(null)}}}import{getSharedSessionKeyManager as bs,resetSharedSessionKeyManager as Rs}from"@naculus/connect-appkit-core";import{WalletError as Ts}from"@naculus/connect-core";import{useCallback as Y,useEffect as Is,useRef as Us,useState as Q}from"react";function le(e){return bs(e)}function It(e){let{session:t}=P(),[o,s]=Q([]),[n,u]=Q(!1),[i,h]=Q(null),c=Us(!0),l=Y(()=>h(null),[]),g=le(e),r=g.isStorageAvailable(),a=Y(async()=>{if(!t){s([]);return}u(!0),h(null);try{let d=await g.listSessions();c.current&&s(d)}catch(d){c.current&&h(d instanceof Error?d:new Error("Failed to load session keys"))}finally{c.current&&u(!1)}},[t,g]);Is(()=>(c.current=!0,a(),()=>{c.current=!1}),[a]);let p=o.filter(d=>d.status==="active");return{sessions:o,activeSessions:p,loading:n,error:i,refresh:a,clearError:l,storageAvailable:r}}function Ps(e){let{session:t}=P(),[o,s]=Q(null),[n,u]=Q(!1),[i,h]=Q(null),c=Y(()=>h(null),[]),l=le(e);return{createSessionKey:Y(async(r,a)=>{if(!t)throw new Ts("wallet_unavailable","No active wallet session");u(!0),h(null);try{let p=a??void 0,d=await l.createSessionKey(r,p);return s(d),d}catch(p){let d=p instanceof Error?p:new Error("Failed to create session key");throw h(d),d}finally{u(!1)}},[t,l]),lastCreated:o,isCreating:n,error:i,clearError:c}}function Ws(e){let[t,o]=Q(!1),[s,n]=Q(null),u=Y(()=>n(null),[]),i=le(e);return{revokeSession:Y(async c=>{o(!0),n(null);try{await i.revokeSession(c)}catch(l){let g=l instanceof Error?l:new Error("Failed to revoke session key");throw n(g),g}finally{o(!1)}},[i]),isRevoking:t,error:s,clearError:u}}function Os(e){let[t,o]=Q(!1),[s,n]=Q(null),u=Y(()=>n(null),[]),i=le(e),h=Y(async(l,g,r)=>{o(!0),n(null);try{return await i.signWithSessionKey(l,g,r)}catch(a){let p=a instanceof Error?a:new Error("Failed to sign with session key");throw n(p),p}finally{o(!1)}},[i]),c=Y(async(l,g)=>{o(!0),n(null);try{return await i.checkSessionScope(l,g)}catch(r){let a=r instanceof Error?r:new Error("Failed to check session scope");throw n(a),a}finally{o(!1)}},[i]);return{signWithSession:h,checkScope:c,isBusy:t,error:s,clearError:u}}function Ns(){Rs()}import{useState as Kn,useCallback as _s}from"react";import{WalletError as Ut}from"@naculus/connect-core";function Pt(){let{session:e,chainId:t,client:o}=P(),[s,n]=Kn(!1),[u,i]=Kn(null);return{signMessage:_s(async c=>{if(!e){let g=new Ut("wallet_unavailable","No active session");throw i(g),g}let l=e.namespaces.eip155?.accounts[0]??Object.values(e.namespaces)[0]?.accounts[0];if(!l){let g=new Ut("wallet_unavailable","No account found");throw i(g),g}n(!0),i(null);try{let g=N(o);if(!g)throw new Ut("wallet_unavailable","Client not initialized");return await g.signMessage(e,{message:c,address:l,chainId:t??void 0})}catch(g){let r=g instanceof Error?g.message:"Signing failed",a=g instanceof Error?g:new Error(r);throw i(a),a}finally{n(!1)}},[e,t,o]),isSigning:s,error:u}}import{buildDelegationPolicyMessage as qs}from"@naculus/connect-appkit-core";function Hs(e={}){let{evmAccount:t}=B(),o=Ds(t),s=Se(),n=Tt(e.execution),{signMessage:u}=Pt(),i=It(e.managerConfig),h=le(e.managerConfig),[c,l]=Be(!1),[g,r]=Be(null),[a,p]=Be(()=>new Set),[d,m]=Be(!1),C=e.origin??(typeof window<"u"?window.location.origin:"unknown"),E=!!e.managerConfig?.encryptionKey,A=e.execution?.sponsorship,{refresh:y,storageAvailable:w}=i,{preview:R}=n,{delegated:k,delegate:T}=s,v=Fs(()=>Ms({manager:h,origin:C,signer:()=>o,signMessage:u,verifySignature:async({message:S,signature:x,signerAddress:U})=>(await Ks({message:S,signature:x})).toLowerCase()===U.toLowerCase(),previewExecution:R,sponsorship:A,adapter:e.adapter,signTypedData:e.signTypedData,chainId:()=>e.chainId??null,delegation:()=>({delegated:k,delegate:T}),encryptionKeyConfigured:E,storageAvailable:()=>w,refresh:y}),[h,C,o,u,R,A,e.adapter,e.signTypedData,e.chainId,k,T,E,w,y]);Bs(()=>{let S=!1,x=i.sessions.filter(Ls);return x.length===0?(p(new Set),m(!1),()=>{S=!0}):(m(!0),Promise.all(x.map(async U=>[U.id,await v.verifyStoredPolicy(U)])).then(U=>{S||p(new Set(U.filter(([,O])=>O).map(([O])=>O)))}).catch(U=>{S||(p(new Set),r(U instanceof Error?U:new Error("Policy verification failed")))}).finally(()=>{S||m(!1)}),()=>{S=!0})},[i.sessions,v]);let b=we(()=>{r(null),i.clearError()},[i]),I=we(async(S,x)=>{l(!0),r(null);try{return await S()}catch(U){let O=U instanceof Error?U:new Error(x);throw r(O),O}finally{l(!1)}},[]),W=we(S=>I(()=>v.createPolicy(S),"Policy creation failed"),[v,I]),_=we(S=>I(()=>v.revokePolicy(S),"Policy revocation failed"),[v,I]),D=we((S,x)=>I(()=>v.executePolicy(S,x),"Policy execution failed"),[v,I]),f=i.activeSessions.filter(S=>a.has(S.id));return{policies:i.sessions,activePolicies:f,storageAvailable:i.storageAvailable,loading:i.loading||d,isBusy:c,error:g??i.error,delegation:s,createPolicy:W,revokePolicy:_,previewPolicyExecution:v.previewPolicyExecution,signPolicyDigest:v.signPolicyDigest,executePolicy:D,refresh:i.refresh,clearError:b}}import{useCallback as Vs,useRef as zs,useState as Hn}from"react";function js(){let{disconnect:e,status:t}=P(),[o,s]=Hn(!1),[n,u]=Hn(null),i=zs(!0);return{disconnect:Vs(async()=>{if(t!=="disconnected"){s(!0),u(null);try{await e()}catch(c){if(!i.current)return;u(c instanceof Error?c:new Error("Disconnect failed"))}finally{i.current&&s(!1)}}},[e,t]),isDisconnecting:o,error:n,cleanup:()=>{i.current=!1}}}import{WalletError as Wt}from"@naculus/connect-core";import{useCallback as J,useEffect as $s,useRef as Fe,useState as Ke}from"react";function te(e){let t=e.activeNamespace??"eip155",o=Array.isArray(e.accounts)?e.accounts.map(({namespace:s,address:n,derivationPath:u})=>({namespace:s,address:n,...u?{derivationPath:u}:{}})):e.address?[{namespace:t,address:e.address}]:[];return{accounts:o,activeNamespace:t,createdAt:e.createdAt??0,...e.chainId?{chainId:e.chainId}:{},...e.version?{version:e.version}:{},recoveryAvailable:!!e.mnemonic,address:o.find(s=>s.namespace===t)?.address??e.address}}function Gs(){let{connectEmbedded:e,client:t}=P(),[o,s]=Ke(null),n=Fe(null),u=Fe(4),i=Fe(!1),h=Fe(null),[c,l]=Ke(!1),[g,r]=Ke(!1),[a,p]=Ke(null),d=()=>p(null),m=J(()=>{let f=n.current;return n.current=null,f},[]),C=J(()=>{let f=N(t);if(!f?.embeddedConnector)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");return f.embeddedConnector},[t]),E=J(()=>{try{return C().getWallet()?.privateKey??null}catch{return null}},[C]),A=J(async()=>{let f=N(t);if(!f)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");let S=f.getEmbeddedConnector?await f.getEmbeddedConnector():f.embeddedConnector;if(!S)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");return S},[t]),y=J(()=>{try{return N(t)?.passphraseGate??null}catch{return null}},[t]),w=J(f=>{f?.code==="decryption_failed"&&y()?.forget("That passphrase did not open the wallet.")},[y]),R=J(async()=>{i.current=!1,p(null);try{let f=await A();if(!await f.load())return!1;let x=f.getWallet();return x?(n.current=null,l(!1),s(te(x)),!0):!1}catch(f){return i.current=!0,w(f),p(f instanceof Error?f:new Error("Failed to restore embedded wallet")),!1}},[w,A]);$s(()=>{let f=!1,S=null;return R().then(x=>{f||x||i.current||(S=setTimeout(()=>{f||R()},100))}),()=>{f=!0,S&&clearTimeout(S)}},[R]);let k=async()=>{r(!0),p(null);try{let f=await A(),S=await f.load(),x=f.getWallet();S&&x&&(s(te(x)),n.current=x.mnemonic||null,l(!x.mnemonic)),await e();let U=f.getWallet();U&&(s(te(U)),U.mnemonic&&!S&&(n.current=U.mnemonic,l(!0)))}catch(f){w(f),p(f instanceof Error?f:new Error("Embedded wallet connection failed"))}finally{r(!1)}},T=async()=>{r(!0),p(null);try{let f=await A();y()?.expect("create");let S=await f.generateWallet();return s(te(S)),n.current=S.mnemonic,l(!0),S}catch(f){return p(f instanceof Error?f:new Error("Failed to generate wallet")),null}finally{r(!1)}},v=async f=>{r(!0),p(null);try{let S=await A();y()?.expect("create");let x=await S.importFromMnemonic(f);return s(te(x)),n.current=null,l(!1),x}catch(S){return p(S instanceof Error?S:new Error("Failed to import wallet")),null}finally{r(!1)}},b=async f=>{r(!0),p(null);try{let S=await A();y()?.expect("create");let x=await S.importFromPrivateKey(f);return s(te(x)),n.current=null,l(!1),x}catch(S){return p(S instanceof Error?S:new Error("Failed to import wallet")),null}finally{r(!1)}},I=async()=>{r(!0),p(null);try{await(await A()).wipe(),s(null),n.current=null,l(!1)}catch(f){p(f instanceof Error?f:new Error("Failed to wipe wallet"))}finally{r(!1)}},W=J(f=>{let S=C();S.setActiveNamespace(f);let x=S.getWallet();s(x?te(x):null)},[C]),_=J(async()=>{let f=await A(),S=await f.backfillAccounts();if(S.length>0){let x=f.getWallet();s(x?te(x):null)}return S.map(({namespace:x,address:U,derivationPath:O})=>({namespace:x,address:U,...O?{derivationPath:O}:{}}))},[A]),D=()=>{n.current=null,l(!1)};return{connectEmbedded:k,restoreWallet:R,generateWallet:T,importFromMnemonic:v,importFromPrivateKey:b,wipe:I,wallet:o,hasWallet:o!==null,address:o?.address??null,accounts:o?.accounts??[],activeNamespace:o?.activeNamespace??null,setActiveNamespace:W,backfillAccounts:_,seedPhrase:n.current,getSeedPhrase:m,getPrivateKey:E,backupPending:c,confirmBackup:D,isBusy:g,error:a,clearError:d,storageSecurityLevel:(()=>{try{let f=C(),S=f.getStorageSecurityLevel?.()??4;return f.getWallet()?(u.current=S,S):o?u.current:S}catch{return o?u.current:4}})(),securityReport:(()=>{let f=null;try{f=C().getStorageSecurityReport?.()??null}catch{f=null}if(!f)return h.current=null,null;let S=JSON.stringify(f);return h.current?.json===S?h.current.value:(h.current={json:S,value:f},f)})()}}import{chainNumber as ta}from"@naculus/connect-appkit-core";import{useState as na,useCallback as ra,useEffect as zn,useRef as jn,useMemo as oa}from"react";import{WalletError as Qs}from"@naculus/connect-core";import{useCallback as qn,useEffect as Xs,useLayoutEffect as Ys,useMemo as Js,useRef as Vn}from"react";import{tokenChainMismatch as Zs}from"@naculus/connect-appkit-core";function ea(e){return[e.token.address.toLowerCase(),e.token.chainId??"",e.token.decimals??"",e.chainId??"",e.owner??"",e.spender??"",e.connected?"1":"0",e.publicClient?"1":"0",e.walletClient?"1":"0",e.session?.id??""].join("|")}function ce(e){let{token:t,chainId:o}=e,s=t.address.toLowerCase(),n=ea(e),u=Js(()=>({key:n}),[n]),i=Vn(n),h=Vn(!0);Ys(()=>{i.current=n},[n]),Xs(()=>(h.current=!0,()=>{h.current=!1}),[]);let c=qn(()=>h.current&&i.current===n,[n]),l=qn(()=>{if(!c())throw new Qs("session_inactive","Wallet or token context changed. Retry the operation with the current account and chain.");let g=Zs({address:s,chainId:t.chainId},o);if(g)throw g},[c,s,t.chainId,o]);return{identity:u,isCurrent:c,assertCurrent:l}}import{ERC20_MIN_ABI as sa,formatUnits as aa}from"@naculus/connect-core";function ia(e){let{publicClient:t}=j(),{currentChain:o}=z(),{identity:s,isCurrent:n,assertCurrent:u}=ce({token:e.token,chainId:o?ta(o)??void 0:void 0,owner:e.owner,spender:e.spender,publicClient:t}),[i,h]=na(null),c=i?.identity===s?i.raw:null,l=i?.identity===s&&i.fetching,g=i?.identity===s?i.error:null,r=jn(null),a=jn(0),p=ra(async()=>{if(!n())return;let m=++a.current,C=()=>n()&&m===a.current;if(h({identity:s,raw:null,fetching:!!t,error:null}),!!t)try{u();let E=await t.readContract({address:e.token.address,abi:sa,functionName:"allowance",args:[e.owner,e.spender]});if(!C())return;h({identity:s,raw:E,fetching:!1,error:null})}catch(E){if(!C())return;h({identity:s,raw:null,fetching:!1,error:E instanceof Error?E:new Error("Failed to fetch allowance")})}},[t,e.token.address,e.token.chainId,e.owner,e.spender,s,n,u]);return zn(()=>{p().catch(m=>console.warn("useERC20Allowance: initial fetch failed:",m))},[p]),zn(()=>(e.refreshInterval&&e.refreshInterval>0&&(r.current=setInterval(p,e.refreshInterval)),()=>{r.current&&(clearInterval(r.current),r.current=null)}),[e.refreshInterval,p]),{allowance:oa(()=>{if(c===null)return null;let m=e.token.decimals;return m===void 0?null:aa(c,m)},[c,e.token.decimals]),allowanceRaw:c,isFetching:l,error:g,refetch:p}}import{chainNumber as la,createDecimalsCache as ca,encodeErc20Approve as ua,readDecimals as Nt,writeDecimals as Qn}from"@naculus/connect-appkit-core";import{ERC20_MIN_ABI as He,formatUnits as pa,parseUnits as Xn,WalletError as qe}from"@naculus/connect-core";import{useCallback as ve,useRef as Yn,useState as Jn}from"react";import{WalletError as Ot}from"@naculus/connect-core";import{useCallback as $n,useState as Gn}from"react";function ke(){let{session:e,chainId:t,client:o}=P(),[s,n]=Gn("idle"),[u,i]=Gn(null),h=$n(async l=>{if(!e){n("failed");let r=new Ot("wallet_unavailable","No active session");throw i(r),r}let g=e.namespaces.eip155?.accounts.find(r=>/^eip155:\d+:0x[0-9a-fA-F]{40}$/.test(r)||/^0x[0-9a-fA-F]{40}$/.test(r));if(!g){n("failed");let r=new Ot("wallet_unavailable","No EVM account found");throw i(r),r}n("awaiting_approval"),i(null);try{let r={...l,from:l.from??g.split(":").pop()},a=N(o);if(!a)throw new Ot("wallet_unavailable","Client not initialized");let p=await a.sendTransaction(e,{transaction:r,chainId:t??void 0}),d=Me(p);return n("submitted"),d}catch(r){n("failed");let a=r instanceof Error?r.message:"Transaction failed";throw i(r instanceof Error?r:new Error(a)),r}},[e,t,o]),c=$n(()=>{n("idle"),i(null)},[]);return{sendTransaction:h,status:s,error:u,reset:c,isSending:s==="awaiting_approval"}}function da(e){return e.includes(":")?e.split(":").pop():e}var ma=2n**256n-1n;function fa(e){let{publicClient:t,walletClient:o}=j(),{evmAccount:s,isConnected:n}=B(),{currentChain:u}=z(),{session:i,client:h}=P(),{sendTransaction:c,isSending:l,error:g,reset:r}=ke(),[a,p]=Jn(null),{identity:d,isCurrent:m,assertCurrent:C}=ce({token:e.token,chainId:u?la(u)??void 0:void 0,owner:s,spender:e.spender,connected:n,publicClient:t,walletClient:o,session:i,client:h}),[E,A]=Jn(null),y=E?.identity===d?E.raw:null,w=E?.identity===d&&E.fetching,R=Yn(ca(e.token,e.token.decimals)),k=Yn(0),T=a??g,v=s?da(s):null,b=ve(async()=>{if(!m())return null;let S=++k.current,x=()=>m()&&S===k.current;if(A({identity:d,raw:null,fetching:!!t&&!!v&&n}),p(null),!t||!v||!n)return null;try{C();let U=await t.readContract({address:e.token.address,abi:He,functionName:"allowance",args:[v,e.spender]});return x()?(A({identity:d,raw:U,fetching:!1}),U):null}catch(U){return x()&&(A({identity:d,raw:null,fetching:!1}),p(U instanceof Error?U:new Error("Failed to fetch allowance"))),null}},[t,v,e.token.address,e.token.chainId,e.spender,d,m,C,n]),I=(()=>{if(y===null)return null;let S=Nt(R.current,e.token,e.token.decimals);return S===void 0?null:pa(y,S)})(),W=ve(async S=>{if(p(null),r(),!n||!s){let x=new qe("wallet_unavailable","No connected account");throw p(x),x}if(!t){let x=new qe("wallet_unavailable","No public client");throw p(x),x}try{C();let x=ua(e.spender,S),U=N(h);if(i&&U){let F=await c({to:e.token.address,data:x,value:"0"});return b(),F}if(o){let{request:F}=await t.simulateContract({address:e.token.address,abi:He,functionName:"approve",args:[e.spender,S],account:v});C();let ne=await o.writeContract(F);return b(),ne}let O=await c({to:e.token.address,data:x,value:"0"});return b(),O}catch(x){let U=x instanceof Error?x:new Error("Approve failed");throw m()&&p(U),U}},[e,t,o,s,n,i,h,v,c,r,b,C,m]),_=ve(async S=>{try{if(C(),!t)throw new qe("wallet_unavailable","No public client");let x=Nt(R.current,e.token,e.token.decimals);x===void 0&&(x=await t.readContract({address:e.token.address,abi:He,functionName:"decimals"}),C(),Qn(R.current,e.token,x));let U=Xn(S,x);return await W(U)}catch(x){throw m()&&p(x instanceof Error?x:new Error("Approve failed")),x}},[e.token,t,W,C,m]),D=ve(async()=>W(ma),[W]),f=ve(async S=>{if(!m()||!n||!v||!t)return!1;try{C()}catch(F){return p(F instanceof Error?F:new Error("Cannot check allowance")),!1}let x=y??await b();if(x===null)return!1;let U=Nt(R.current,e.token,e.token.decimals);if(U===void 0){if(!t)throw new qe("wallet_unavailable","Cannot check allowance: no public client to read token decimals.");if(U=await t.readContract({address:e.token.address,abi:He,functionName:"decimals"}),!m())return!1;Qn(R.current,e.token,U)}let O=Xn(S,U);return m()&&x>=O},[y,b,e.token.address,e.token.chainId,e.token.decimals,t,m,C,n,v]);return{approve:_,approveMax:D,allowance:I,allowanceRaw:y,hasAllowance:f,isApproving:l,isFetchingAllowance:w,error:T,refetchAllowance:b}}import{chainNumber as ga,createDecimalsCache as ha,encodeErc20Transfer as ya,readDecimals as Ca,writeDecimals as Sa}from"@naculus/connect-appkit-core";import{ERC20_MIN_ABI as Zn,parseUnits as Ea,WalletError as er}from"@naculus/connect-core";import{useCallback as wa,useRef as ka,useState as va}from"react";function xa(e){return e.includes(":")?e.split(":").pop():e}function Aa(e){let{publicClient:t,walletClient:o}=j(),{evmAccount:s,isConnected:n}=B(),{currentChain:u}=z(),{session:i,client:h}=P(),{sendTransaction:c,isSending:l,error:g,reset:r}=ke(),[a,p]=va(null),{isCurrent:d,assertCurrent:m}=ce({token:e.token,chainId:u?ga(u)??void 0:void 0,owner:s,connected:n,publicClient:t,walletClient:o,session:i,client:h}),C=ka(ha(e.token,e.token.decimals)),E=a??g;return{sendTransfer:wa(async(y,w)=>{if(p(null),r(),!n||!s){let R=new er("wallet_unavailable","No connected account");throw p(R),R}if(!t){let R=new er("wallet_unavailable","No public client available");throw p(R),R}try{m();let R=xa(s),k=Ca(C.current,e.token,e.token.decimals);k===void 0&&(k=await t.readContract({address:e.token.address,abi:Zn,functionName:"decimals"}),m(),Sa(C.current,e.token,k));let T=Ea(w,k),v=ya(y,T),b=N(h);if(i&&b)return await c({to:e.token.address,data:v,value:"0"});if(o){let{request:W}=await t.simulateContract({address:e.token.address,abi:Zn,functionName:"transfer",args:[y,T],account:R});return m(),await o.writeContract(W)}return await c({to:e.token.address,data:v,value:"0"})}catch(R){let k=R instanceof Error?R:new Error("Transfer failed");throw d()&&p(k),k}},[e.token,t,o,s,n,i,h,c,r,m,d]),isSending:l,error:E}}import{chainNumber as Ia,encodeErc20Transfer as Ua}from"@naculus/connect-appkit-core";import{parseUnits as Pa}from"@naculus/connect-core";import{useMemo as Wa}from"react";import{simulateTransactionPreview as ba}from"@naculus/connect-appkit-core";import{useCallback as tr,useEffect as Ra,useRef as Ta,useState as _t}from"react";function Dt(e,t){P();let{evmAccount:o}=B(),{currentChain:s}=z(),{publicClient:n}=j(),[u,i]=_t(void 0),[h,c]=_t(!1),[l,g]=_t(null),r=Ta(void 0),a=tr(async()=>{e&&(c(!0),g(null));try{let d=await ba(e,{chainId:t,currentChain:s,publicClient:n,evmAccount:o});return i(d),d}catch(d){let m=d instanceof Error?d:new Error("Simulation failed");throw g(m),m}finally{e&&c(!1)}},[e,t,s,n,o]);Ra(()=>{if(e)return r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{a().catch(()=>{})},300),()=>{r.current&&clearTimeout(r.current)}},[e,a]);let p=tr(()=>{i(void 0),g(null),c(!1)},[]);return{result:u,isSimulating:h,error:l,simulate:a,reset:p}}function Oa(e){let{evmAccount:t,isConnected:o}=B(),{currentChain:s}=z(),n=e.token.chainId??(s?Ia(s)??void 0:void 0),u=Wa(()=>{if(!(!o||!t))try{let h=e.token.decimals;if(h===void 0)return;let c=Pa(e.amount,h),l=Ua(e.to,c);return{to:e.token.address,data:l,value:"0"}}catch{return}},[e.token.address,e.token.decimals,e.to,e.amount,t,o]),i=Dt(u,n);return{result:u?i.result:void 0,isSimulating:!!u&&i.isSimulating,error:u?i.error:null,reSimulate:i.simulate,reset:i.reset}}import{useState as Mt,useCallback as Ba,useRef as Lt}from"react";import{useState as Ve,useEffect as Na,useCallback as nr,useRef as _a}from"react";import{createContext as Da,useContext as Ma}from"react";var rr=Da(null);function xe(){return Ma(rr)}function La(e,t,o){let s=xe(),n=o??s,[u,i]=Ve(null),[h,c]=Ve(!1),[l,g]=Ve(!1),[r,a]=Ve(null),p=_a(void 0),d=nr(async()=>{if(!(!n||!e)){c(!0),a(null);try{await n.refreshTx(e,t);let E=n.getTxStatus(e,t);E&&i(E)}catch(E){a(E instanceof Error?E:new Error(String(E)))}finally{c(!1)}}},[n,e,t]),m=nr(()=>{!n||!e||(n.stopWatching(e,t),g(!1))},[n,e,t]);Na(()=>{if(!n||!e||!t){i(null),g(!1);return}p.current&&p.current!==e&&n.stopWatching(p.current),p.current=e;let E=!1;g(!0),c(!0),a(null);let A=n.getTxStatus(e,t);A&&(i(A),c(!1)),n.watchTx(e,t,{}).then(w=>{E||(i(w),c(!1))}).catch(w=>{E||(a(w instanceof Error?w:new Error(String(w))),c(!1))});let y=w=>{E||i({...w})};return n.on("statusChange",y),()=>{E=!0,g(!1),n.off("statusChange",y)}},[n,e,t]);let C=u?.status??"idle";return{entry:u,status:C,isLoading:h,isWatching:l,error:r,refresh:d,stopWatching:m}}function Fa(e){let t=xe(),o=e??t,[s,n]=Mt(null),[u,i]=Mt(null),[h,c]=Mt(null),l=Lt(null),g=Lt(null),r=Lt(null);o&&(g.current||(g.current=p=>{i(p),(!l.current||p.createdAt>=l.current.createdAt)&&(n(p),l.current=p)},o.on("confirmed",g.current)),r.current||(r.current=p=>{c(p),(!l.current||p.createdAt>=l.current.createdAt)&&(n(p),l.current=p)},o.on("failed",r.current)));let a=Ba(()=>{n(null),i(null),c(null),l.current=null},[]);return{lastTx:s,lastConfirmedTx:u,lastFailedTx:h,clear:a}}import{useCallback as Va}from"react";import{useCallback as Ka,useEffect as or,useMemo as Ha,useRef as sr,useState as Bt}from"react";import{getResolver as qa}from"@naculus/connect-appkit-core";function ze({input:e,skip:t=!1,resolverConfig:o,scope:s,query:n}){let[u,i]=Bt(null),[h,c]=Bt(!1),[l,g]=Bt(null),r=sr(0),a=sr(!0);or(()=>(a.current=!0,()=>{a.current=!1}),[]);let p=Ha(()=>qa(o),[o]),d=Ka(()=>{let m=e.trim();if(!m||t){r.current+=1,i(null),c(!1),g(null);return}let C=++r.current;c(!0),g(null),n(p,m,s).then(E=>{!a.current||C!==r.current||(i(E),c(!1))}).catch(E=>{!a.current||C!==r.current||(g(E instanceof Error?E:new Error(String(E))),i(null),c(!1))})},[e,t,s,p,n]);return or(()=>{d()},[d]),{data:u,isLoading:h,error:l,refetch:d}}function za(e,t){let o=Va((s,n,u)=>s.lookupAddress(n,u),[]);return ze({input:e,skip:t?.skip,resolverConfig:t?.resolverConfig,scope:t?.chainId,query:o})}import{useState as ar,useCallback as X,useMemo as ja,useEffect as ir,useRef as lr}from"react";import{addInAppNotification as $a,channelsUpdate as Ga,clearOneInAppNotification as Qa,createNotificationSettingsStorage as cr,DEFAULT_NOTIFICATION_SETTINGS as Xa,loadNotificationSettings as Ya,mutedChainSettings as ur,saveNotificationSettings as pr,replayNotificationSettings as Ja,updateNotificationSettings as Za}from"@naculus/connect-appkit-core";import{InAppChannel as ei}from"@naculus/connect-core";function ti(e){let t=lr(null);t.current||(t.current=e?.channel??new ei);let o=t.current,[s,n]=ar(()=>o.getHistory()),[u,i]=ar(()=>Xa),h=lr([]);ir(()=>{let y=e?.storage??cr(),w=R=>{let k=h.current??[];if(h.current=null,k.length===0){R&&i(R);return}i(()=>{let T=Ja(R,k);return pr(y,T),T})};Ya(y).then(w,()=>w(null))},[]),ir(()=>(o.onNotification=y=>{n(w=>[...w,y])},o.restore().then(()=>{n(o.getHistory())}),()=>{o.onNotification=void 0}),[]);let c=ja(()=>s.filter(y=>!y.read).length,[s]),l=X(()=>{o.clear(),n([])},[o]),g=X(y=>{Qa(o,y).then(()=>{n(o.getHistory())})},[o]),r=X(y=>{o.markAsRead(y),n(w=>w.map(R=>R.id===y?{...R,read:!0}:R))},[o]),a=X(()=>{o.markAllAsRead(),n(y=>y.map(w=>({...w,read:!0})))},[o]),p=X(y=>{$a(o,y)},[o]),d=X(y=>{h.current?.push(y),i(w=>{let R=Za(w,y(w)),k=e?.storage??cr();return pr(k,R),R})},[e?.storage]),m=X(y=>d(()=>y),[d]),C=X(y=>{m(Ga(y))},[m]),E=X(y=>{d(w=>ur(w,y,!0))},[d]),A=X(y=>{d(w=>ur(w,y,!1))},[d]);return{notifications:s,unreadCount:c,addNotification:p,clear:l,clearOne:g,markAsRead:r,markAllAsRead:a,settings:u,updateSettings:m,setChannels:C,muteChain:E,unmuteChain:A}}import{useCallback as Ft,useSyncExternalStore as ni}from"react";var dr=()=>null,ri=()=>()=>{};function oi(){let{client:e}=P(),t=N(e)?.passphraseGate??null,o=ni(t?.subscribe??ri,t?.getSnapshot??dr,dr),s=Ft(i=>t?.submit(i),[t]),n=Ft(()=>t?.cancel(),[t]),u=Ft(i=>t?.forget(i),[t]);return{request:o,submit:s,cancel:n,forget:u,isUnlocked:t?.isUnlocked??!1,gate:t}}import{useCallback as si}from"react";function ai(e,t){let o=si((s,n)=>s.resolveName(n),[]);return ze({input:e,skip:t?.skip,resolverConfig:t?.resolverConfig,query:o})}import{assertHexSignature as Kt,bareEvmAddress as ii,buildSmartAccountConfig as li,resolveUserOpChain as ci}from"@naculus/connect-appkit-core";import{WalletError as ue}from"@naculus/connect-core";import{useCallback as mr,useEffect as fr,useRef as gr,useState as Ae}from"react";async function ui(e,t,o,s,n){let u=N(t);if(!u)throw new ue("wallet_unavailable","Client not initialized");let i=[o,s];if(e.walletType==="eip6963"||e.id?.startsWith("eip6963-")){let{eip6963Connector:h}=await import("@naculus/connector-evm-injected"),c=h.getDiscoveredWallets().find(g=>g.id===e.walletId),l=c?await c.provider.request({method:"personal_sign",params:i}):await h.request({method:"personal_sign",params:i});return Kt(l)}if(e.walletType==="walletconnect")return Kt(await u.connector.request({method:"personal_sign",params:i}));if(e.walletType==="embedded"){let h=u.embeddedConnector;if(!h?.signHash)throw new ue("method_unsupported","This embedded wallet build cannot sign a raw digest. Upgrade @naculus/connector-embedded or pass an explicit signer.");return Kt(await h.signHash(e,o))}throw e.walletType==="passkeys"?new ue("method_unsupported","Passkeys sign with P-256, which a SimpleAccount cannot verify. Use a smart account with a WebAuthn validator, or pass an explicit signer."):new ue("method_unsupported",`Raw UserOperation signing is not available for ${e.walletType} on ${n}. Pass a signer that signs the raw 32-byte hash.`)}function pi(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=P(),[u,i]=Ae(null),[h,c]=Ae(null),[l,g]=Ae(!1),[r,a]=Ae(!1),[p,d]=Ae(null),m=gr(0),C=gr(!1);fr(()=>()=>{m.current+=1,C.current=!1},[]),fr(()=>{m.current+=1,C.current=!1,i(null),c(null),g(!1),a(!1),d(null)},[n,s,t,e?.accountType,e?.bundlerUrl,e?.chainId,e?.entryPoint,e?.owner,e?.rpcUrl,e?.salt,e?.signerMode,o]);let E=mr(async(y,w)=>{let R=b=>(d(b),null);if(!e?.rpcUrl)return R(new Error("RPC URL not configured"));if(!e.bundlerUrl)return R(new Error("Bundler URL not configured"));if(!y.length)return R(new Error("At least one call is required"));if(C.current)return R(new Error("A UserOperation is already in progress"));let k=ii(e.owner??t);if(!k)return R(new ue("wallet_unavailable","No EVM account found"));let T;try{T=ci(e.chainId,s)}catch(b){return R(b)}if(!e.signer&&!o)return R(new ue("wallet_unavailable","No active session"));let v=++m.current;C.current=!0,g(!0),a(!0),d(null),i(null),c(null);try{let{SmartAccountManager:b}=await import("@naculus/connect-core"),I=e.signer??(f=>ui(o,n,f,k,T)),W=new b({rpcUrl:e.rpcUrl,bundlerClient:{url:e.bundlerUrl},chainId:T,signer:I,signerMode:e.signer?e.signerMode??"eip191":"raw"}),_=li(k,T,e),D=await W.sendUserOperation(_,y,w);return v!==m.current?null:(a(!1),i(D.userOpHash),W.getUserOperationReceipt(D.userOpHash).then(f=>{v===m.current&&c(f)}).catch(()=>{}),D)}catch(b){if(v!==m.current)return null;let I=b instanceof Error?b:new Error("Failed to send UserOperation");return d(I),null}finally{C.current=!1,v===m.current&&(g(!1),a(!1))}},[n,s,t,e,o]),A=mr(()=>{m.current+=1,i(null),c(null),g(!1),a(!1),d(null)},[]);return{sendUserOp:E,userOpHash:u,receipt:h,isPending:l,isEstimating:r,error:p,reset:A}}import{useSyncExternalStore as di,useCallback as hr}from"react";function mi(e,t){if(!e)return()=>{};let o=()=>t();return e.on("sessionConnected",o),e.on("sessionDisconnected",o),e.on("chainChanged",o),e.on("sessionScopeChanged",o),e.on("sessionRevoked",o),()=>{e.off("sessionConnected",o),e.off("sessionDisconnected",o),e.off("chainChanged",o),e.off("sessionScopeChanged",o),e.off("sessionRevoked",o)}}var Ht=Object.freeze({session:null,chainSessions:[],activeChainId:null,isConnected:!1,connectorId:null}),qt=new WeakMap;function fi(e,t){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0}function gi(e){if(!e)return Ht;let t=e.getActiveBundle(),o=qt.get(e);if(!t)return o&&o.session===null?o:(qt.set(e,Ht),Ht);let s=Array.from(t.chainSessions.values());if(o&&o.session===t.walletSession&&o.activeChainId===t.activeChainId&&fi(o.chainSessions,s))return o;let n={session:t.walletSession,chainSessions:s,activeChainId:t.activeChainId,isConnected:!0,connectorId:t.walletSession.walletType};return qt.set(e,n),n}function hi(e){let t=P(),o=e??t.sessionManager??null,s=hr(u=>mi(o,u),[o]),n=hr(()=>gi(o),[o]);return di(s,n)}import{defaultSiwxDomain as yi,defaultSiwxUri as Ci}from"@naculus/connect-appkit-core";import{WalletError as je}from"@naculus/connect-core";import{createSiwxMessage as Si,generateNonce as Ei,getBlockchainName as wi,issueNonce as ki,nowISO as vi}from"@naculus/siwx";import{useCallback as yr,useState as Cr}from"react";var xi=86400;function Vt(){let{session:e,chainId:t,client:o}=P(),[s,n]=Cr(!1),[u,i]=Cr(null),h=yr(()=>i(null),[]);return{signIn:yr(async l=>{if(!e)throw new je("wallet_unavailable","No active session");let g=l?.chainId??t;if(!g)throw new je("invalid_chain","No chain to sign for. Connect a wallet or pass options.chainId.");let r=se(e,g);if(!r)throw new je("wallet_unavailable","No account found");let a=N(o);if(!a)throw new je("wallet_unavailable","Client not initialized");let{address:p}=r,d=typeof window>"u"?void 0:window.location,m=l?.domain??yi(d),C=l?.uri??Ci(d);n(!0),i(null);try{let E=Ei();await ki(E);let A=vi(),y=l?.expirySeconds??xi,w=new Date(Date.now()+y*1e3).toISOString(),R=Si({domain:m,address:p,uri:C,version:1,chainId:g,nonce:E,issuedAt:A,expirationTime:w,statement:l?.statement,resources:l?.resources,requestId:l?.requestId}),k=await a.signMessage(e,{message:R,address:p,chainId:g??void 0}),T={message:{raw:R,domain:m,address:p,statement:l?.statement??null,uri:C,version:1,chainId:g,nonce:E,issuedAt:A,blockchain:wi(g),expirationTime:w,notBefore:null,resources:l?.resources??[],requestId:l?.requestId??null},signature:k};return n(!1),T}catch(E){let A=E instanceof Error?E:new Error("SIWx sign-in failed");throw i(A),n(!1),A}},[e,t,o]),isSigningIn:s,error:u,clearError:h}}import{siwxResultToSession as Sr}from"@naculus/connect-appkit-core";import{logger as zt}from"@naculus/connect-core";import{checkSessionExpired as Er,createLocalStorageSiwxSessionStorage as Ai}from"@naculus/siwx";import{useCallback as $e,useEffect as wr,useRef as bi,useState as Ge}from"react";function Ri(e){let{storagePrefix:t="naculus_",autoRestore:o=!0,defaultExpirySeconds:s=86400}=e??{},[n,u]=Ge(null),[i,h]=Ge(o),[c,l]=Ge(!1),[g,r]=Ge(null),{chainId:a}=P(),p=Vt(),d=bi(Ai(`${t}siwx_session`)),m=$e(()=>r(null),[]);wr(()=>{if(!o){h(!1);return}let k=!1;return(async()=>{try{let v=await d.current.get();if(k)return;v?(zt.info("react/useSIWxSession","Restored persisted SIWx session"),u(v),r(null)):u(null)}catch(T){zt.warn("react/useSIWxSession","Failed to restore SIWx session:",T),u(null)}finally{k||h(!1)}})(),()=>{k=!0}},[o]),wr(()=>{if(!n?.expiresAt)return;let k=new Date(n.expiresAt).getTime()-Date.now();if(k<=0){u(null);return}let T=setTimeout(()=>{u(v=>v&&v.id===n.id?null:v)},k);return()=>clearTimeout(T)},[n?.id,n?.expiresAt]);let C=$e(async k=>{l(!0),r(null);try{let T={expirySeconds:s,chainId:a??void 0,...k},v=await p.signIn(T),b=Sr(v);return await d.current.set(b),u(b),l(!1),b}catch(T){let v=T instanceof Error?T:new Error("SIWx sign-in failed");throw r(v),l(!1),v}},[p,a,s]),E=$e(async()=>{try{await d.current.remove()}catch(k){zt.warn("react/useSIWxSession","Failed to clear session:",k)}u(null),r(null)},[]),A=$e(async()=>{if(!n)throw new Error("No active session to refresh");l(!0),r(null);try{let k=await p.signIn({domain:n.domain,statement:n.message.statement??void 0,uri:n.message.uri,chainId:n.chainId,expirySeconds:s,resources:n.message.resources.length>0?n.message.resources:void 0,requestId:n.message.requestId??void 0}),T={...Sr(k),id:n.id,refreshedAt:new Date().toISOString()};return await d.current.set(T),u(T),l(!1),T}catch(k){let T=k instanceof Error?k:new Error("Session refresh failed");throw r(T),l(!1),T}},[n,p,s]),y=n!==null&&!Er(n),w=Er(n),R=n?.expiresAt?Math.max(0,new Date(n.expiresAt).getTime()-Date.now()):null;return{session:y?n:null,isAuthenticated:y,isRestoring:i,isSigningIn:c,isExpired:w,timeUntilExpiry:R,signIn:C,signOut:E,refresh:A,error:g,clearError:m}}import{defaultSiwxDomain as Ti,defaultSiwxUri as Ii}from"@naculus/connect-appkit-core";import{WalletError as Qe}from"@naculus/connect-core";import{createSiwxMessage as Ui,generateNonce as Pi,getBlockchainName as Wi,issueNonce as Oi,nowISO as Ni}from"@naculus/siwx";import{useCallback as kr,useState as jt}from"react";function be(){let{session:e,chainId:t,client:o}=P(),[s,n]=jt(!1),[u,i]=jt(null),[h,c]=jt(null),l=kr(()=>c(null),[]);return{signIn:kr(async r=>{if(!e)throw new Qe("wallet_unavailable","No active session");let a=r?.chainId??t;if(!a)throw new Qe("invalid_chain","No chain to sign for. Connect a wallet or pass options.chainId.");let p=se(e,a);if(!p)throw new Qe("wallet_unavailable","No account found");let d=N(o);if(!d)throw new Qe("wallet_unavailable","Client not initialized");let{address:m}=p,C=typeof window>"u"?void 0:window.location,E=r?.domain??Ti(C),A=r?.uri??Ii(C);n(!0),c(null);try{let y=Pi();await Oi(y);let w=Ni(),R=Ui({domain:E,address:m,uri:A,version:1,chainId:a,nonce:y,issuedAt:w,statement:r?.statement,expirationTime:r?.expirySeconds?new Date(Date.now()+r.expirySeconds*1e3).toISOString():void 0,resources:r?.resources,requestId:r?.requestId}),k=await d.signMessage(e,{message:R,address:m,chainId:a??void 0}),T=r?.expirySeconds?new Date(Date.now()+r.expirySeconds*1e3).toISOString():null,v={message:{raw:R,domain:E,address:m,statement:r?.statement??null,uri:A,version:1,chainId:a,nonce:y,issuedAt:w,blockchain:Wi(a),expirationTime:T,notBefore:null,resources:r?.resources??[],requestId:r?.requestId??null},signature:k};return i(v),v}catch(y){let w=y instanceof Error?y:new Error("SIWx sign-in failed");throw c(w),w}finally{n(!1)}},[e,t,o]),isSigningIn:s,result:u,error:h,clearError:l}}import{WalletError as $t}from"@naculus/connect-core";import{useCallback as vr}from"react";function _i(){let{session:e,chainId:t}=P();return vr(o=>{if(!e)throw new $t("wallet_unavailable","No active session");let s=o??t;if(s&&!s.startsWith("eip155:"))throw new $t("namespace_mismatch",`Ethereum SIWx requires an eip155 chain, received ${s}`);let n=e.namespaces.eip155;if(!n||n.accounts.length===0)throw new $t("namespace_mismatch","No EVM (eip155) accounts found in session")},[e,t])}function Di(){let e=_i(),t=be();return{signIn:vr(async s=>(e(s?.chainId),t.signIn(s)),[e,t.signIn]),isSigningIn:t.isSigningIn,result:t.result,error:t.error,clearError:t.clearError}}import{resolveSimulationEndpoint as Mi}from"@naculus/connect-appkit-core";import{SimulationManager as Li}from"@naculus/wallet-engine";import{useCallback as Gt,useRef as Bi,useState as Qt}from"react";function Fi(e){let t=e?.rpcUrl,o=e?.chainId,s=Bi(null),n=Gt(()=>(s.current||(s.current=new Li({enabled:!0,rpcUrl:t,autoSimulate:!1})),s.current),[t]),[u,i]=Qt(null),[h,c]=Qt(!1),[l,g]=Qt(null),r=Gt(async(p,d,m,C,E)=>{c(!0),g(null);try{let A=n(),y=Mi(E?.chainId,o,E?.rpcUrl,t),w=await A.simulateERC20Transfer(p,d,m,C,y.chainId,E?.decimals,y.rpcUrl);return i(w),w}catch(A){let y=A instanceof Error?A:new Error(String(A));throw g(y),y}finally{c(!1)}},[t,o,n]),a=Gt(()=>{i(null),g(null),c(!1)},[]);return{result:u,loading:h,error:l,simulate:r,reset:a}}import{isSiwxExpired as Ki,isSiwxNotBeforeValid as Hi}from"@naculus/connect-appkit-core";import{LocalStorageAdapter as qi,logger as Xe}from"@naculus/connect-core";import{useCallback as Xt,useEffect as Vi,useRef as zi,useState as Ye}from"react";var Je="siwx_auth";function ji(e){return new qi(e)}function $i(e){let{storagePrefix:t="naculus_",autoRestore:o=!0}=e??{},[s,n]=Ye(null),[u,i]=Ye(o),[h,c]=Ye(!1),[l,g]=Ye(null),r=be(),a=zi(ji(t)),p=Xt(()=>g(null),[]);Vi(()=>{if(!o){i(!1);return}let C=!1;return(async()=>{try{let E=a.current,A=await E.get(Je);if(C)return;A&&!Ki(A,new Date)&&Hi(A,new Date)?(Xe.info("react/useSiwxAuthSession","Restored persisted SIWx auth session"),n(A),g(null)):A&&(Xe.info("react/useSiwxAuthSession","Persisted SIWx auth expired, clearing"),await E.remove(Je))}catch(E){Xe.warn("react/useSiwxAuthSession","Failed to restore SIWx auth:",E)}finally{C||i(!1)}})(),()=>{C=!0}},[o]);let d=Xt(async C=>{c(!0),g(null);try{let E=await r.signIn(C);return await a.current.set(Je,E),n(E),c(!1),E}catch(E){let A=E instanceof Error?E:new Error("SIWx sign-in failed");throw g(A),c(!1),A}},[r]),m=Xt(async()=>{try{await a.current.remove(Je)}catch(C){Xe.warn("react/useSiwxAuthSession","Failed to clear SIWx auth:",C)}n(null),g(null)},[]);return{isSignedIn:s!==null,isRestoring:u,siwxResult:s,isSigningIn:h,error:l,signIn:d,signOut:m,clearError:p}}import{bareEvmAddress as Gi,buildSmartAccountConfig as Qi,resolveEvmChainId as xr}from"@naculus/connect-appkit-core";import{WalletError as Rr}from"@naculus/connect-core";import{useCallback as re,useEffect as Ar,useRef as Yt,useState as Re}from"react";function br(e){return new Rr("wallet_unavailable",e)}function Xi(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=P(),[u,i]=Re(null),[h,c]=Re(!1),[l,g]=Re(null),[r,a]=Re(!1),[p,d]=Re(null),m=Yt(null),C=Yt(0),E=Yt(!1);Ar(()=>{if(m.current=null,!e?.rpcUrl)return;let b=!1;return import("@naculus/connect-core").then(({SmartAccountManager:I})=>{if(b)return;let W=xr(e.chainId,s);W&&(m.current=new I({rpcUrl:e.rpcUrl,chainId:W,bundlerClient:{url:e.bundlerUrl??""}}))}).catch(I=>{b||d(I instanceof Error?I:new Error("Failed to load account-abstraction module"))}),()=>{b=!0}},[s,e?.rpcUrl,e?.bundlerUrl,e?.chainId]),Ar(()=>{C.current+=1,E.current=!1,i(null),c(!1),g(null),a(!1),d(null)},[t,s,e?.rpcUrl,e?.bundlerUrl,e?.chainId,e?.entryPoint,e?.accountType,e?.salt]);let A=re(()=>{let b=Gi(t);if(!b||!m.current)return null;let I=xr(e?.chainId,s);return I?Qi(b,I,{accountType:e?.accountType,entryPoint:e?.entryPoint,salt:e?.salt}):null},[t,s,e?.accountType,e?.chainId,e?.entryPoint,e?.salt]),y=re(b=>(d(b),null),[]),w=re(()=>E.current?null:(E.current=!0,C.current),[]),R=re(b=>{C.current===b&&(E.current=!1)},[]),k=re(async()=>{let b=A();if(!b||!m.current)return y(new Error("Smart account not configured"));let I=w();if(I===null)return y(new Error("Smart account operation already in progress"));a(!0),d(null);try{let _=await m.current.createAccount(b);return C.current!==I?null:(i(_.address),c(_.isDeployed),g(_),_)}catch(W){if(C.current!==I)return null;let _=W instanceof Error?W:new Error("Failed to create smart account");return d(_),null}finally{C.current===I&&a(!1),R(I)}},[w,y,R,A]),T=re(async()=>{let b=A();if(!b||!m.current)return y(new Error("Smart account not configured"));if(!o)return y(br("No active session"));let I=N(n);if(!I)return y(br("Client not initialized"));if(s&&s!==b.chainId)return y(new Rr("chain_mismatch",`Connected chain ${s} does not match smart account chain ${b.chainId}.`));let W=w();if(W===null)return y(new Error("Smart account operation already in progress"));a(!0),d(null);try{let _=m.current,D=await _.createAccount(b);if(C.current!==W)return null;if(D.isDeployed)return i(D.address),c(!0),g(D),D.address;let f=await _.getDeployCallData(b),S=await I.sendTransaction(o,{transaction:{to:f.to,data:f.data,value:f.value.toString()},chainId:b.chainId});if(C.current!==W)return null;let x=await _.createAccount(b);return i(x.address),c(x.isDeployed),g(x),S}catch(_){if(C.current!==W)return null;let D=_ instanceof Error?_:new Error("Failed to deploy smart account");return d(D),null}finally{C.current===W&&a(!1),R(W)}},[n,s,w,y,R,A,o]),v=re(async()=>{let b=A();if(!b||!m.current)return null;let I=C.current;try{let W=await m.current.getAccountAddress(b);return C.current!==I?null:(i(W),W)}catch(W){return C.current!==I||d(W instanceof Error?W:new Error("Failed to get smart account address")),null}},[A]);return{address:u,isDeployed:h,accountInfo:l,isLoading:r,error:p,createWallet:k,deployWallet:T,getAddress:v}}import{useMemo as Yi}from"react";function Jt(){let{accounts:e,isConnected:t}=P();return Yi(()=>{if(!t)return{address:null,caip10:null,chainId:null,isConnected:!1};let o=e.find(i=>i.startsWith("solana:"))??null;if(!o)return{address:null,caip10:null,chainId:null,isConnected:t};let s=o.split(":"),n=s.length>=3?s[s.length-1]:null,u=s.length>=3?s.slice(0,-1).join(":"):null;return{address:n,caip10:o,chainId:u,isConnected:t}},[e,t])}import{useCallback as Ji,useEffect as Tr,useRef as Zi,useState as Zt}from"react";import{getSolanaBalance as el}from"@naculus/connect-core";function tl(e={}){let{client:t}=P(),{address:o}=Jt(),s=e.address??o,n=e.rpcUrl??N(t)?.solanaRpcUrl??null,[u,i]=Zt(null),[h,c]=Zt(!1),[l,g]=Zt(null),r=Zi(0),a=Ji(async()=>{if(!s||!n){i(null);return}let p=++r.current;c(!0),g(null);try{let d=await el(n,s);if(p!==r.current)return;i(d)}catch(d){if(p!==r.current)return;i(null),g(d instanceof Error?d:new Error("Balance read failed"))}finally{p===r.current&&c(!1)}},[s,n]);return Tr(()=>{a()},[a]),Tr(()=>{if(!e.refreshInterval||e.refreshInterval<=0)return;let p=setInterval(()=>{a()},e.refreshInterval);return()=>clearInterval(p)},[e.refreshInterval,a]),{balance:u,isFetching:h,error:l,isConfigured:!!n,refetch:a}}import{readSolanaRoles as nl}from"@naculus/connect-appkit-core";import{useMemo as rl}from"react";function ol(){let{client:e,session:t,accounts:o}=P();return rl(()=>{let s=N(e)?.solanaConnector,{roles:n,absence:u}=nl(s,t);return{roles:n,absence:u,identity:n?.identity??null,signer:n?.signer??null,payer:n?.payer??null}},[e,t,o])}import{WalletError as Ir}from"@naculus/connect-core";import{useCallback as en,useState as tn}from"react";import{getSignatureStatus as sl}from"@naculus/connect-core";function al(){let{client:e,session:t}=P(),[o,s]=tn(!1),[n,u]=tn(!1),[i,h]=tn(null),c=()=>{let a=N(e);if(!a||!t)throw new Ir("wallet_unavailable","No connected wallet.");return a},l=en(async a=>{s(!0),h(null);try{return await c().signTransaction(t,{transaction:a})}catch(p){let d=p instanceof Error?p:new Error("Signing failed");throw h(d),d}finally{s(!1)}},[e,t]),g=en(async a=>{u(!0),h(null);try{return await c().sendTransaction(t,{transaction:a})}catch(p){let d=p instanceof Error?p:new Error("Send failed");throw h(d),d}finally{u(!1)}},[e,t]),r=en(async a=>{let p=N(e)?.solanaRpcUrl;if(!p)throw new Ir("no_rpc","Set solanaRpcUrl on the client to read a signature's status.");return sl(p,a)},[e]);return{signTransaction:l,sendTransaction:g,getStatus:r,isSigning:o,isSending:n,error:i,reset:()=>h(null)}}import{useCallback as Ur,useState as Pr}from"react";import{toChainSwitchError as il}from"@naculus/connect-appkit-core";function ll(){let{switchChain:e,chainId:t}=P(),[o,s]=Pr(!1),[n,u]=Pr(null),i=Ur(async c=>{s(!0),u(null);try{await e(c)}catch(l){let g=il(l);throw u(g),g}finally{s(!1)}},[e]),h=Ur(()=>{u(null)},[]);return{switchChain:i,isSwitching:o,currentChainId:t,error:n,clearError:h}}import{chainNumber as cl,resolveChain as ul,toViemChain as pl}from"@naculus/connect-appkit-core";import{useState as Ze,useEffect as nn,useCallback as Wr,useMemo as rn,useRef as dl}from"react";import{createPublicClient as ml,http as fl,formatUnits as gl}from"viem";var hl=[{name:"balanceOf",type:"function",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"balance",type:"uint256"}]}];function yl(e){let{evmAccount:t,isConnected:o}=B(),{chainId:s,chains:n}=P(),[u,i]=Ze([]),[h,c]=Ze(!1),[l,g]=Ze(null),{tokens:r,refreshInterval:a}=e,p=dl(null),d=rn(()=>r.map(k=>k.address.toLowerCase()+"|"+k.decimals+"|"+k.symbol).join(","),[r]),m=rn(()=>ul(n,s),[s,n]),C=m?cl(m):null,E=rn(()=>m?pl(m,C):null,[m,C]),[A,y]=Ze(null);nn(()=>{if(!E||!m?.rpcUrl){y(null);return}let k=ml({transport:fl(m.rpcUrl),chain:E});y(k)},[m,E]);let w=Wr(async()=>{if(!t||!A||r.length===0){i([]);return}c(!0),g(null);try{let k=t.includes(":")?t.split(":").pop():t,v=(await Promise.allSettled(r.map(async b=>{try{let I=await A.readContract({address:b.address,abi:hl,functionName:"balanceOf",args:[k]});return{address:b.address,symbol:b.symbol,decimals:b.decimals,name:b.name,balance:I.toString(),formatted:gl(I,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});i(v)}catch(k){g(k instanceof Error?k:new Error("Failed to fetch token balances"))}finally{c(!1)}},[t,A,d]);nn(()=>{o&&t&&r.length>0&&w()},[o,t,d,w]),nn(()=>(a&&a>0&&o&&t&&r.length>0&&(p.current=setInterval(w,a)),()=>{p.current&&(clearInterval(p.current),p.current=null)}),[a,o,t,d,w]);let R=Wr(k=>u.find(T=>T.address.toLowerCase()===k.toLowerCase()),[u]);return{tokenBalances:u,isLoading:h,error:l,refetch:w,getTokenBalance:R,chain:m}}import{useState as on,useEffect as Or,useCallback as Cl,useRef as Sl}from"react";function El(e,t,o){let s=xe(),n=o??s,[u,i]=on([]),[h,c]=on(!1),[l,g]=on(null),r=Sl(0),a=Cl(async()=>{if(n){c(!0),g(null),r.current++;try{let d=await n.getTxHistory(e,t);i(d)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{c(!1)}}},[n,e,t]);Or(()=>{a().catch(()=>{})},[a]),Or(()=>{if(!n)return;let d=()=>{a().catch(()=>{})};return n.on("statusChange",d),()=>{n.off("statusChange",d)}},[n,a]);let p={pending:u.filter(d=>d.status==="pending").length,confirmed:u.filter(d=>d.status==="confirmed").length,failed:u.filter(d=>d.status==="failed").length};return{entries:u,isLoading:h,error:l,refresh:a,summary:p}}import{fetchUserOperationReceipt as wl,InvalidUserOperationReceiptError as kl}from"@naculus/connect-appkit-core";import{useCallback as Te,useEffect as Nr,useRef as pe,useState as oe}from"react";function vl(e){let t=e?.bundlerUrl,o=e?.pollInterval??2e3,s=e?.maxRetries??30,[n,u]=oe("idle"),[i,h]=oe(null),[c,l]=oe(e?.userOpHash??null),[g,r]=oe(null),[a,p]=oe(!1),[d,m]=oe(0),C=pe(0),[E,A]=oe(0),y=pe(null),w=pe(null),R=pe(0),k=pe(0),T=pe(null),v=Te(()=>{y.current&&(clearInterval(y.current),y.current=null),w.current&&(clearTimeout(w.current),w.current=null)},[]),b=Te(async(S,x)=>{if(!t||x!==R.current)return;let U=k.current+1;k.current=U,m(U);let O=new AbortController;T.current=O;let F=V=>{x===R.current&&(u("not_found"),p(!1),v(),r(V))},ne=V=>{if(x===R.current){if(U<=s){w.current=setTimeout(()=>{b(S,x)},o);return}F(V)}};try{let V=await wl(t,S,O.signal);if(x!==R.current)return;if(V){h(V),u(V.success?"confirmed":"failed"),p(!1),v();return}u("pending"),ne(new Error("UserOperation not included after maximum retries"))}catch(V){if(x!==R.current||O.signal.aborted)return;let de=V instanceof Error?V:new Error("Unknown bundler response failure");if(de instanceof kl){F(de);return}ne(new Error(`UserOperation status unavailable after ${U} attempt${U===1?"":"s"}: ${de.message}`))}finally{T.current===O&&(T.current=null)}},[t,o,s,v]),I=Te(S=>{R.current+=1;let x=R.current;if(T.current?.abort(),T.current=null,v(),l(S),h(null),r(null),k.current=0,m(0),A(0),C.current=Date.now(),!t){u("not_found"),p(!1),r(new Error("Bundler URL not configured"));return}u("pending"),p(!0),y.current=setInterval(()=>{A(Date.now()-C.current)},1e3),b(S,x)},[t,v,b]),W=Te(()=>{R.current+=1,T.current?.abort(),T.current=null,v(),p(!1)},[v]),_=Te(()=>{R.current+=1,T.current?.abort(),T.current=null,v(),l(null),u("idle"),h(null),r(null),p(!1),k.current=0,m(0),A(0)},[v]),D=e?.userOpHash??null,f=e?.autoStart!==!1;return Nr(()=>{D&&f&&I(D)},[D,f,I]),Nr(()=>()=>{R.current+=1,T.current?.abort(),T.current=null,v()},[v]),{status:n,receipt:i,userOpHash:c,error:g,isPolling:a,elapsedMs:E,attempts:d,start:I,stop:W,reset:_}}import{validateDestination as Tl}from"@naculus/connect-appkit-core";import{useMemo as Il}from"react";var xl={"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."},Al={"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"},_r={en:xl,zh:Al},sn="en";function bl(e){sn=e}function Rl(){return sn}function an(e){return _r[sn][e]??_r.en[e]??e}function Dr(e){let{isValid:t,level:o,issue:s}=Tl(e);return{isValid:t,level:o,warning:s?an(`address.${s}`):null}}function Ul({address:e}){return{validation:Il(()=>Dr(e),[e])}}function Pl(){let{status:e,session:t,accounts:o,chainId:s,error:n,connect:u,disconnect:i,reconnect:h,switchChain:c}=P(),l=e==="connected",g=e==="connecting",r=e==="reconnecting",a=o[0]??null;return{status:e,session:t,accounts:o,chainId:s,error:n,isConnected:l,isConnecting:g,isReconnecting:r,isDisconnected:e==="disconnected",currentAccount:a,connect:u,disconnect:i,reconnect:h,switchChain:c}}import{useCallback as cn,useMemo as Br}from"react";var Mr={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"},Lr={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."},Ie="Something went wrong",Ue="An unexpected error occurred. Please try again. If the problem persists, check your connection and wallet configuration.";function Pe(e){if(!e)return{title:Ie,description:Ue};let t=e;if(t.name==="WalletError"&&t.code){let o=t.code,s=Mr[o]??Ie,n=Lr[o]??t.message??Ue;return{title:s,description:n,code:o}}if(e instanceof Error){let o=e.message;return/user rejected/i.test(o)||/rejected/.test(o)?{title:"Request Rejected",description:"The request was declined.",code:"user_rejected"}:/timeout/i.test(o)||/timed? ?out/i.test(o)?{title:"Request Timed Out",description:"The request took too long. Please try again.",code:"deeplink_timeout"}:/insufficient funds/i.test(o)?{title:"Insufficient Funds",description:"You don't have enough funds to complete this transaction.",code:"tx_failed"}:/network/i.test(o)||/chain/i.test(o)?{title:"Network Error",description:o,code:"chain_unsupported"}:{title:Ie,description:o||Ue}}return typeof e=="string"?{title:Ie,description:e||Ue}:{title:Ie,description:Ue}}function ln(e){if(e===null||typeof e!="object")return!1;let t=e;return t.name!=="WalletError"||!t.code?!1:["deeplink_timeout","session_expired","intent_expired","tx_failed"].includes(t.code)}function Wl(){let{error:e,clearError:t}=P(),o=Br(()=>e?Pe(e):null,[e]),s=Br(()=>e?ln(e):!1,[e]),n=cn(()=>{t()},[t]),u=cn(h=>Pe(h),[]),i=cn(h=>async()=>{try{return await h()}catch(c){let l=Pe(c);if(c instanceof Error){let g=c;try{g.title=l.title,g.friendlyMessage=l.description,g.code===void 0&&l.code!==void 0&&(g.code=l.code)}catch{}throw g}throw Object.assign(new Error(l.description,{cause:c}),{title:l.title,code:l.code,friendlyMessage:l.description})}},[]);return{error:e,friendlyError:o,clearError:n,isRetryable:s,formatError:u,wrapAsync:i}}import{useState as et,useEffect as Ol,useCallback as Fr,useRef as Nl}from"react";import{TokenListManager as _l}from"@naculus/connect-core";import{eip155ChainIdToNumber as Kr}from"@naculus/connect-appkit-core";function tt(e,t){let o=Nl(null),[s,n]=et([]),[u,i]=et(t?.autoLoad!==!1),[h,c]=et(!1),[l,g]=et(null);if(!o.current){let p={};t?.sources&&(p.sources=t.sources),o.current=new _l(p)}let r=Fr(async()=>{let p=o.current;if(p){i(!0),g(null);try{await p.load();let d=e?Kr(e):void 0,m=p.getTokens(d!==void 0?{chainId:d}:void 0);n(m),c(!0)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{i(!1)}}},[e]),a=Fr(async()=>{let p=o.current;if(p){i(!0),g(null);try{await p.refresh();let d=e?Kr(e):void 0,m=p.getTokens(d!==void 0?{chainId:d}:void 0);n(m),c(!0)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{i(!1)}}},[e]);return Ol(()=>{t?.autoLoad!==!1&&r()},[r,t?.autoLoad]),{tokens:s,isLoading:u,isLoaded:h,error:l,refetch:a}}import{useState as qr,useEffect as Kl,useRef as Hl}from"react";import{TokenListManager as ql}from"@naculus/connect-core";import{ETHEREUM_MAINNET_TOKENS as Dl,POLYGON_TOKENS as Ml,OPTIMISM_TOKENS as Ll,ARBITRUM_TOKENS as Bl,BASE_TOKENS as Fl}from"@naculus/connect-core";function Hr(){return[{name:"built-in",tokens:[...Dl,...Ml,...Ll,...Bl,...Fl],enabled:!0},{name:"uniswap-default",url:"https://tokens.uniswap.org",enabled:!0,refreshInterval:1440*60*1e3}]}import{eip155ChainIdToNumber as Vl}from"@naculus/connect-appkit-core";var zl=300,nt=null;function jl(){return nt||(nt=new ql({sources:Hr()}),nt.load().catch(()=>{})),nt}function rt(e,t){let[o,s]=qr({exact:[],fuzzy:[],hasMore:!1}),[n,u]=qr(!1),i=Hl(null),h=e.trim();return Kl(()=>{if(!h){s({exact:[],fuzzy:[],hasMore:!1}),u(!1);return}return i.current&&clearTimeout(i.current),u(!0),i.current=setTimeout(()=>{let c=jl(),l=t?Vl(t):void 0,g=c.search(h,{chainId:l,limit:20});s(g),u(!1)},zl),()=>{i.current&&clearTimeout(i.current)}},[h,t]),{results:o,isSearching:n}}import un,{useCallback as $l}from"react";import{Fragment as Gl,jsx as $,jsxs as G}from"react/jsx-runtime";function Vr({chainId:e,onSelect:t,onClose:o,options:s}){let[n,u]=un.useState(""),{tokens:i,isLoading:h,error:c}=tt(e),{results:l,isSearching:g}=rt(n,n?e:void 0),r=s?.showRecommendations??!0,a=un.useMemo(()=>{if(n.trim()){let C=[...l.exact,...l.fuzzy].map(E=>E.token);return s?.filter?C.filter(s.filter):C}let m=i;return s?.filter?m.filter(s.filter):m},[n,l,i,s?.filter]),p=un.useMemo(()=>!r||n.trim()?[]:i.slice(0,6),[i,r,n]),d=$l(m=>{t(m),o()},[t,o]);return G("div",{style:{background:"hsl(var(--background))",borderRadius:"12px",padding:"16px",color:"hsl(var(--foreground))",minWidth:"320px",maxWidth:"400px",fontFamily:"system-ui, sans-serif"},children:[G("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"},children:[$("h3",{style:{margin:0,fontSize:"16px",fontWeight:600},children:"Select Token"}),$("button",{type:"button",onClick:o,style:{background:"none",border:"none",color:"hsl(var(--muted-foreground))",cursor:"pointer",fontSize:"18px",padding:"4px 8px"},children:"\u2715"})]}),$("input",{type:"text",placeholder:"Search token name or paste address",value:n,onChange:m=>u(m.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}),h&&!g&&$("div",{style:{textAlign:"center",padding:"20px",color:"hsl(var(--muted-foreground))"},children:"Loading tokens..."}),c&&G("div",{style:{textAlign:"center",padding:"12px",color:"hsl(var(--destructive))",fontSize:"13px"},children:["Error: ",c.message]}),r&&p.length>0&&!n.trim()&&G("div",{style:{marginBottom:"12px"},children:[$("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"8px"},children:"Popular"}),$("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap"},children:p.map(m=>G("button",{type:"button",onClick:()=>d(m),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:[m.logoURI?$("img",{src:m.logoURI,alt:"",style:{width:"16px",height:"16px",borderRadius:"50%"},onError:C=>{C.target.style.display="none"}}):null,m.symbol]},`${m.chainId}:${m.address}`))})]}),n.trim()&&!h&&$("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",marginBottom:"8px"},children:a.length>0?G(Gl,{children:[l.exact.length," exact, ",l.fuzzy.length," fuzzy",l.hasMore?" (more available)":""]}):"No results found"}),$("div",{style:{maxHeight:"320px",overflowY:"auto",display:"flex",flexDirection:"column",gap:"2px"},children:a.map(m=>G("button",{type:"button",onClick:()=>d(m),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:C=>{C.target.style.background="hsl(var(--card))"},onMouseLeave:C=>{C.target.style.background="transparent"},children:[$("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:m.logoURI?$("img",{src:m.logoURI,alt:m.symbol,style:{width:"100%",height:"100%"},onError:C=>{let E=C.target;E.style.display="none",E.parentElement.textContent=m.symbol.slice(0,2)}}):m.symbol.slice(0,2)}),G("div",{style:{flex:1,minWidth:0},children:[$("div",{style:{fontWeight:600,fontSize:"14px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m.symbol}),$("div",{style:{fontSize:"12px",color:"hsl(var(--muted-foreground))",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m.name})]}),G("div",{style:{fontSize:"11px",color:"#666",textAlign:"right",flexShrink:0},children:[G("div",{children:[m.decimals," decimals"]}),G("div",{children:["Chain ",m.chainId]})]})]},`${m.chainId}:${m.address}`))})]})}import{createComponent as M}from"@stencil/react-output-target/runtime";import L from"react";import{AppkitAccordion as Ql,defineCustomElement as Xl}from"@naculus/connect-appkit-wc/dist/components/appkit-accordion.js";import{AppkitAccountButton as Yl,defineCustomElement as Jl}from"@naculus/connect-appkit-wc/dist/components/appkit-account-button.js";import{AppkitAlertDialog as Zl,defineCustomElement as ec}from"@naculus/connect-appkit-wc/dist/components/appkit-alert-dialog.js";import{AppkitAvatar as tc,defineCustomElement as nc}from"@naculus/connect-appkit-wc/dist/components/appkit-avatar.js";import{AppkitBadge as rc,defineCustomElement as oc}from"@naculus/connect-appkit-wc/dist/components/appkit-badge.js";import{AppkitButton as sc,defineCustomElement as ac}from"@naculus/connect-appkit-wc/dist/components/appkit-button.js";import{AppkitCardContent as ic,defineCustomElement as lc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-content.js";import{AppkitCardDescription as cc,defineCustomElement as uc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-description.js";import{AppkitCardFooter as pc,defineCustomElement as dc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-footer.js";import{AppkitCardHeader as mc,defineCustomElement as fc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-header.js";import{AppkitCardTitle as gc,defineCustomElement as hc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-title.js";import{AppkitCard as yc,defineCustomElement as Cc}from"@naculus/connect-appkit-wc/dist/components/appkit-card.js";import{AppkitCheckbox as Sc,defineCustomElement as Ec}from"@naculus/connect-appkit-wc/dist/components/appkit-checkbox.js";import{AppkitCollapsible as wc,defineCustomElement as kc}from"@naculus/connect-appkit-wc/dist/components/appkit-collapsible.js";import{AppkitConnectButton as vc,defineCustomElement as xc}from"@naculus/connect-appkit-wc/dist/components/appkit-connect-button.js";import{AppkitDialog as Ac,defineCustomElement as bc}from"@naculus/connect-appkit-wc/dist/components/appkit-dialog.js";import{AppkitDropdownMenu as Rc,defineCustomElement as Tc}from"@naculus/connect-appkit-wc/dist/components/appkit-dropdown-menu.js";import{AppkitInput as Ic,defineCustomElement as Uc}from"@naculus/connect-appkit-wc/dist/components/appkit-input.js";import{AppkitPopover as Pc,defineCustomElement as Wc}from"@naculus/connect-appkit-wc/dist/components/appkit-popover.js";import{AppkitProgress as Oc,defineCustomElement as Nc}from"@naculus/connect-appkit-wc/dist/components/appkit-progress.js";import{AppkitScrollArea as _c,defineCustomElement as Dc}from"@naculus/connect-appkit-wc/dist/components/appkit-scroll-area.js";import{AppkitSelect as Mc,defineCustomElement as Lc}from"@naculus/connect-appkit-wc/dist/components/appkit-select.js";import{AppkitSeparator as Bc,defineCustomElement as Fc}from"@naculus/connect-appkit-wc/dist/components/appkit-separator.js";import{AppkitSkeleton as Kc,defineCustomElement as Hc}from"@naculus/connect-appkit-wc/dist/components/appkit-skeleton.js";import{AppkitSwitch as qc,defineCustomElement as Vc}from"@naculus/connect-appkit-wc/dist/components/appkit-switch.js";import{AppkitTabs as zc,defineCustomElement as jc}from"@naculus/connect-appkit-wc/dist/components/appkit-tabs.js";import{AppkitToggleGroup as $c,defineCustomElement as Gc}from"@naculus/connect-appkit-wc/dist/components/appkit-toggle-group.js";import{AppkitTooltip as Qc,defineCustomElement as Xc}from"@naculus/connect-appkit-wc/dist/components/appkit-tooltip.js";var Yc=M({tagName:"appkit-accordion",elementClass:Ql,react:L,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:Xl}),Jc=M({tagName:"appkit-account-button",elementClass:Yl,react:L,events:{},defineCustomElement:Jl}),Zc=M({tagName:"appkit-alert-dialog",elementClass:Zl,react:L,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:ec}),eu=M({tagName:"appkit-avatar",elementClass:tc,react:L,events:{},defineCustomElement:nc}),tu=M({tagName:"appkit-badge",elementClass:rc,react:L,events:{},defineCustomElement:oc}),nu=M({tagName:"appkit-button",elementClass:sc,react:L,events:{},defineCustomElement:ac}),ru=M({tagName:"appkit-card",elementClass:yc,react:L,events:{},defineCustomElement:Cc}),ou=M({tagName:"appkit-card-content",elementClass:ic,react:L,events:{},defineCustomElement:lc}),su=M({tagName:"appkit-card-description",elementClass:cc,react:L,events:{},defineCustomElement:uc}),au=M({tagName:"appkit-card-footer",elementClass:pc,react:L,events:{},defineCustomElement:dc}),iu=M({tagName:"appkit-card-header",elementClass:mc,react:L,events:{},defineCustomElement:fc}),lu=M({tagName:"appkit-card-title",elementClass:gc,react:L,events:{},defineCustomElement:hc}),cu=M({tagName:"appkit-checkbox",elementClass:Sc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Ec}),uu=M({tagName:"appkit-collapsible",elementClass:wc,react:L,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:kc}),pu=M({tagName:"appkit-connect-button",elementClass:vc,react:L,events:{onAppkitConnect:"appkitConnect",onAppkitDisconnect:"appkitDisconnect",onAppkitStartPairing:"appkitStartPairing",onAppkitRetry:"appkitRetry",onAppkitCancelPairing:"appkitCancelPairing",onAppkitMobileDeepLink:"appkitMobileDeepLink",onAppkitCopyAddress:"appkitCopyAddress"},defineCustomElement:xc}),du=M({tagName:"appkit-dialog",elementClass:Ac,react:L,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:bc}),mu=M({tagName:"appkit-dropdown-menu",elementClass:Rc,react:L,events:{onAppkitSelect:"appkitSelect"},defineCustomElement:Tc}),fu=M({tagName:"appkit-input",elementClass:Ic,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Uc}),gu=M({tagName:"appkit-popover",elementClass:Pc,react:L,events:{onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:Wc}),hu=M({tagName:"appkit-progress",elementClass:Oc,react:L,events:{},defineCustomElement:Nc}),yu=M({tagName:"appkit-scroll-area",elementClass:_c,react:L,events:{},defineCustomElement:Dc}),Cu=M({tagName:"appkit-select",elementClass:Mc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Lc}),Su=M({tagName:"appkit-separator",elementClass:Bc,react:L,events:{},defineCustomElement:Fc}),Eu=M({tagName:"appkit-skeleton",elementClass:Kc,react:L,events:{},defineCustomElement:Hc}),wu=M({tagName:"appkit-switch",elementClass:qc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Vc}),ku=M({tagName:"appkit-tabs",elementClass:zc,react:L,events:{onAppkitTabChange:"appkitTabChange"},defineCustomElement:jc}),vu=M({tagName:"appkit-toggle-group",elementClass:$c,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Gc}),xu=M({tagName:"appkit-tooltip",elementClass:Qc,react:L,events:{},defineCustomElement:Xc});export{Yc as AppkitAccordion,Jc as AppkitAccountButton,Zc as AppkitAlertDialog,eu as AppkitAvatar,tu as AppkitBadge,nu as AppkitButton,ru as AppkitCard,ou as AppkitCardContent,su as AppkitCardDescription,au as AppkitCardFooter,iu as AppkitCardHeader,lu as AppkitCardTitle,cu as AppkitCheckbox,uu as AppkitCollapsible,pu as AppkitConnectButton,du as AppkitDialog,mu as AppkitDropdownMenu,fu as AppkitInput,gu as AppkitPopover,hu as AppkitProgress,yu as AppkitScrollArea,Cu as AppkitSelect,Su as AppkitSeparator,Eu as AppkitSkeleton,wu as AppkitSwitch,ku as AppkitTabs,vu as AppkitToggleGroup,xu as AppkitTooltip,kn as DEFAULT_EVM_CHAINS,yy as LAMPORTS_PER_SOL,Cy as PassphraseCancelledError,Sy as PassphraseGate,wy as SolanaRpcError,Vr as TokenSelector,rr as TxMonitorContext,Lr as WALLET_ERROR_DESCRIPTIONS,Mr as WALLET_ERROR_TITLES,ko as Web3ConnectProvider,mt as Web3Context,qs as buildDelegationPolicyMessage,Jr as clearClient,ut as createClient,my as formatSol,uo as getChainById,pt as getClient,dt as getDefaultChains,fy as getLatestBlockhash,Rl as getLocale,gy as getSignatureStatus,hy as getSolanaBalance,Pe as getUserFriendlyError,ln as isRetryableError,Ey as parseSol,Ns as resetSessionKeyManager,bl as setLocale,an as t,B as useAccount,To as useAuthorizations,Lo as useBalance,Ct as useCapabilities,z as useChain,fn as useCompareCosts,Xo as useConnect,Ps as useCreateSessionKey,ss as useDelegate,Se as useDelegation,Hs as useDelegationPolicy,js as useDisconnect,ia as useERC20Allowance,fa as useERC20Approve,Aa as useERC20Transfer,Oa as useERC20TransferSimulation,Gs as useEmbeddedWallet,Tt as useExecuteCalls,yn as useExecuteRoute,Fa as useLastTx,za as useLookupAddress,ps as useMppSession,ti as useNotification,oi as usePassphraseGate,cs as usePaymentFetch,ai as useResolveName,Ws as useRevokeSession,En as useRouteQuote,Vt as useSIWxLogin,Ri as useSIWxSession,bt as useSendCalls,ke as useSendTransaction,pi as useSendUserOperation,Os as useSendWithSession,hi as useSession,It as useSessionKeys,Di as useSignInWithEthereum,be as useSignInWithX,Pt as useSignMessage,Fi as useSimulateTransfer,$i as useSiwxAuthSession,Xi as useSmartAccount,Jt as useSolanaAccount,tl as useSolanaBalance,ol as useSolanaRoles,hs as useSolanaSessionKey,al as useSolanaTransaction,ll as useSwitchChain,yl as useTokenBalance,tt as useTokenList,rt as useTokenSearch,Dt as useTransactionSimulation,El as useTxHistory,La as useTxMonitor,vl as useUserOpStatus,Ul as useValidateDestination,j as useViemClient,Pl as useWallet,P as useWeb3,Wl as useWeb3ErrorHandler,Dr as validateDestination};
1
+ import{formatSol as vy,getLatestBlockhash as xy,getSignatureStatus as Ay,getSolanaBalance as by,LAMPORTS_PER_SOL as Ry,PassphraseCancelledError as Ty,PassphraseGate as Iy,parseSol as Uy,SolanaRpcError as Py}from"@naculus/connect-core";import{compareCostsKey as zr}from"@naculus/connect-appkit-core";import{useCallback as pn,useEffect as dn,useRef as mn,useState as ot}from"react";function fn(e,t){let{operation:o,chains:s,options:n}=e,[c,i]=ot([]),[h,u]=ot(!1),[l,g]=ot(null),r=mn(!0),a=mn(0),p=zr(e),d=pn(async()=>{if(!s||s.length===0){i([]);return}if(!t)return;let C=++a.current;u(!0),g(null);try{let E=await t(o,s,n);r.current&&C===a.current&&i(E)}catch(E){r.current&&C===a.current&&(g(E instanceof Error?E:new Error(String(E))),i([]))}finally{r.current&&C===a.current&&u(!1)}},[p,t]);dn(()=>{d()},[d]),dn(()=>(r.current=!0,()=>{r.current=!1}),[]);let m=pn(async()=>{await d()},[d]);return{comparisons:c,loading:h,error:l,refresh:m}}import{toExecuteRouteError as jr,validateRouteRecipient as $r}from"@naculus/connect-appkit-core";import{useCallback as gn,useEffect as Gr,useRef as hn,useState as st}from"react";function yn(e){let[t,o]=st(!1),[s,n]=st(null),[c,i]=st(null),h=hn(!0),u=hn(!1);Gr(()=>(h.current=!0,()=>{h.current=!1}),[]);let l=gn(async(r,a,p)=>{if(!e)return i({code:"no_executor",message:"No executeRoute function provided"}),n(null),null;let d=$r(r,a);if(d)return i(d),n(null),null;if(u.current)return i({code:"execution_in_progress",message:"A route execution is already in progress"}),null;u.current=!0,o(!0),i(null),n(null);try{let m=await e(r,a,p);return h.current&&n(m),m}catch(m){return h.current&&i(jr(m)),null}finally{u.current=!1,h.current&&o(!1)}},[e]),g=gn(()=>{n(null),i(null),o(!1)},[]);return{execute:l,executing:t,result:s,error:c,reset:g}}import{isQuotableInput as Xr}from"@naculus/connect-appkit-core";import{useCallback as at,useEffect as Cn,useRef as Sn,useState as it}from"react";function En(e,t){let{fromChain:o,toChain:s,fromToken:n,toToken:c,amount:i,options:h}=e,[u,l]=it([]),[g,r]=it(!1),[a,p]=it(null),d=Sn(null),m=Sn(!0),C=at(async()=>{if(!Xr({fromChain:o,toChain:s,fromToken:n,amount:i})){l([]);return}if(t){r(!0),p(null);try{let y=await t(o,s,n,i,h,c);m.current&&l(y)}catch(y){m.current&&(p(y instanceof Error?y:new Error(String(y))),l([]))}finally{m.current&&r(!1)}}},[o,s,n,c,i,h,t]);Cn(()=>{if(d.current&&clearTimeout(d.current),!o||!s||!n||!i){l([]);return}return d.current=setTimeout(()=>{C()},300),()=>{d.current&&clearTimeout(d.current)}},[C,o,s,n,i]),Cn(()=>(m.current=!0,()=>{m.current=!1}),[]);let E=at(async()=>{await C()},[C]),A=at(()=>{l([]),p(null),r(!1)},[]);return{quotes:u,loading:g,error:a,refresh:E,clear:A}}import{logger as lt,WalletError as q}from"@naculus/connect-core";import{eip6963Connector as H}from"@naculus/connector-evm-injected";import{PassphraseGate as Qr}from"@naculus/connect-core";import{createWalletConnectConnector as Yr}from"@naculus/connector-walletconnect";var ct=null;function ut(e){let t=null,o=Yr({projectId:e.projectId,metadata:e.metadata,...e.walletConnect?.client?{client:e.walletConnect.client}:{},...e.walletConnect?.openUrl?{openUrl:e.walletConnect.openUrl}:{}}),s=null,n=null,c=null,i=null,h=e.passphrasePrompt&&e.enableEmbedded&&!e.embeddedConfig?.encryptionPassphrase?new Qr:null;e.enableEmbedded&&(n=import("@naculus/connector-embedded").then(r=>{let a={...e.embeddedConfig};h&&(a.encryptionPassphrase=h.request),e.enablePasskeys&&a.encryptionPassphrase&&!a.prfUnlock&&(a.prfUnlock={async derive(d){i&&await i;let m=c;return m?.hasCredential()?m.derivePrfKey(d):null}}),s=r.createPocketConnector(a),t?._setEmbeddedConnector(s)}).catch(r=>{lt.warn("react/client","Embedded wallet connector not available:",r),s=null})),e.enablePasskeys&&(i=import("@naculus/connector-passkeys").then(r=>{c=r.createPasskeysConnector(),t?._setPasskeysConnector(c)}).catch(r=>{lt.warn("react/client","Passkeys connector not available:",r),c=null}));let u=null,l=null;e.enableSolana&&(l=import("@naculus/connector-solana").then(r=>{let a=r.solanaConnector;e.solanaDefaultChain&&"configure"in a&&a.configure({defaultChain:e.solanaDefaultChain}),u=a,typeof window<"u"&&"startDiscovery"in a&&a.startDiscovery();for(let p of e.solanaWallets??[])a.registerWallet?.(p);t?._setSolanaConnector(u)}).catch(r=>{lt.warn("react/client","Solana connector not available:",r),u=null})),typeof window<"u"&&H.startDiscovery();for(let{info:r,provider:a}of e.injectedProviders??[])H.registerProvider(r,a);let g={connector:o,get embeddedConnector(){return s},getEmbeddedConnector:async()=>(n&&await n,s),get passkeysConnector(){return c},passphraseGate:h,solanaRpcUrl:e.solanaRpcUrl??null,get solanaConnector(){return u},connect:()=>o.connect(),connectInjected:async r=>H.connect(r),connectEmbedded:async()=>{if(n&&await n,!s)throw new Error("Embedded wallet not enabled. Set enableEmbedded: true in config.");return s.connect()},connectPasskeys:async()=>{if(i&&await i,!c)throw new Error("Passkeys connector not enabled. Set enablePasskeys: true in config.");return c.connect()},startPairing:()=>o.startPairing(),completePairing:()=>o.completePairing(),cancelPairing:()=>o.cancelPairing?.(),signMessage:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.signMessage(r,a);if(r.walletType==="passkeys"&&c)return c.signMessage(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.signMessage(r,a)}if(r.walletType==="solana"){if(l&&await l,u)return u.signMessage(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.signMessage(r,a)},signTransaction:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.signTransaction(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.signTransaction(r,a)}if(r.walletType==="solana"){if(l&&await l,u)return u.signTransaction(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.signTransaction(r,a)},sendTransaction:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.sendTransaction(r,a);if(r.walletType==="passkeys"&&c)return c.sendTransaction(r,a);if(r.walletType==="embedded"){if(!s)throw new q("wallet_unavailable","Embedded wallet connector not available.");return s.sendTransaction(r,a)}if(r.walletType==="solana"){if(l&&await l,u)return u.sendTransaction(r,a);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.sendTransaction(r,a)},onAccountsChanged:(r,a)=>{let p=()=>{};return r.id?.startsWith("eip6963-")?H.onAccountsChanged?.(r,a)??p:r.walletType==="embedded"?s?.onAccountsChanged?.(r,a)??p:r.walletType==="passkeys"?p:r.walletType==="solana"?u?.onAccountsChanged?.(r,a)??p:o.onAccountsChanged?.(r,a)??p},onChainChanged:(r,a)=>{let p=()=>{};return r.id?.startsWith("eip6963-")?H.onChainChanged?.(r,a)??p:r.walletType==="passkeys"||r.walletType==="embedded"?p:r.walletType==="solana"?u?.onChainChanged?.(r,a)??p:o.onChainChanged?.(r,a)??p},getCapabilities:r=>r.id?.startsWith("eip6963-")?H.getCapabilities?.(r):r.walletType==="passkeys"?c?.getCapabilities?.(r):r.walletType==="solana"?u?.getCapabilities?.(r):r.walletType==="embedded"?s?.getCapabilities?.(r):o.getCapabilities?.(r),sendCalls:async(r,a,p,d)=>{if(r.id?.startsWith("eip6963-"))return H.sendCalls(r,a,p,d);if(r.walletType==="passkeys"&&c)return c.sendCalls(r,a,p,d);if(r.walletType==="solana"){if(l&&await l,u)return u.sendCalls(r,a,p,d);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}if(r.walletType==="embedded"){if(!s?.sendCalls)throw new q("method_not_allowed","Embedded wallet does not support sendCalls");return s.sendCalls(r,a,p,d)}if(!o.sendCalls)throw new q("method_not_allowed","sendCalls not supported by this connector");return o.sendCalls(r,a,p,d)},showCallsStatus:async(r,a)=>{if(r.id?.startsWith("eip6963-"))return H.showCallsStatus(r,a);if(r.walletType==="passkeys"||r.walletType==="embedded")throw new q("method_unsupported",`${r.walletType} wallets have no UI to display a call bundle.`);if(!o.showCallsStatus)throw new q("method_unsupported","This connector cannot display call status.");return o.showCallsStatus(r,a)},getCallsStatus:async(r,a)=>{if(r.id?.startsWith("eip6963-")&&H.getCallsStatus)return H.getCallsStatus(r,a);if(r.walletType==="passkeys"&&c?.getCallsStatus)return c.getCallsStatus(r,a);if(r.walletType==="embedded")throw new q("method_not_allowed","Embedded wallet does not support getCallsStatus");if(!o.getCallsStatus)throw new q("method_not_allowed","getCallsStatus not supported by this connector");return o.getCallsStatus(r,a)},reconnect:async r=>r.walletType==="eip6963"?H.reconnect(r):r.walletType==="embedded"?s?s.reconnect(r):r:r.walletType==="solana"?r:o.reconnect(r),disconnect:async r=>{if(r.id?.startsWith("eip6963-")||r.walletType==="eip6963")return H.disconnect(r);if(r.walletType==="embedded"&&s)return s.disconnect();if(r.walletType==="passkeys"&&c)return c.disconnect(r);if(r.walletType==="solana"){if(l&&await l,u)return u.disconnect(r);throw new q("wallet_unavailable","Solana connector not available. Ensure enableSolana is true and @naculus/connector-solana is installed.")}return o.disconnect(r)},getAllConnectors:()=>{let r=[o];return s&&r.push(s),c&&r.push(c),u&&r.push(u),r},_setEmbeddedConnector:r=>{s=r},_setPasskeysConnector:r=>{c=r},_setSolanaConnector:r=>{u=r}};return t=g,ct=g,g}function pt(){return ct}function Jr(){ct=null}import{isEvmAddress as An,parseCaip10 as xo}from"@naculus/connect-core";import{useMemo as Ao}from"react";import{createConnectorManager as po,createSessionManager as mo,LocalStorageSessionStorage as fo,logger as Z,WalletError as go}from"@naculus/connect-core";import{eip6963Connector as Oe}from"@naculus/connector-evm-injected";import{createContext as ho,useCallback as K,useContext as yo,useEffect as me,useMemo as fe,useReducer as Co,useRef as vn}from"react";import{logger as Zr}from"@naculus/connect-core";import{issueNonce as eo,parseSiwxMessage as to}from"@naculus/siwx";function se(e,t){let o=t.split(":",1)[0],n=(e.namespaces[o]?.accounts??[]).filter(c=>c.startsWith(`${o}:`)).map(c=>({namespace:o,caip10:c}))[0];if(n)return{...n,address:n.caip10.split(":").pop()??n.caip10}}function no(e){return e.namespaces.eip155?.chains?.[0]??e.namespaces.solana?.chains?.[0]??e.namespaces.xrpl?.chains?.[0]??"eip155:1"}async function wn(e){let{session:t,siwx:o,signMessage:s}=e;if(!o||!t)return{kind:"skipped"};try{let n=no(t),c=se(t,n);if(!c)throw new Error("No account found in session");let{address:i}=c,h=await o.createMessage({address:i,chainId:n}),u=to(h);if(!u?.nonce)throw new Error("SIWx message must contain a nonce");await eo(u.nonce);let l=await s(t,{message:h,address:i,chainId:n});return await o.handleSignComplete?.({message:h,signature:l}),{kind:"authenticated",address:i,chainId:n}}catch(n){let c=n instanceof Error?n:new Error("Wallet authentication failed");return Zr.error("appkit/core","SIWx authentication failed:",n),{kind:"failed",error:c,fatal:o.required!==!1}}}import{initialWeb3State as So,web3Reducer as Eo,withRetry as wo,withTimeout as xn}from"@naculus/connect-appkit-core";import{resolveChain as ro}from"@naculus/connect-appkit-core";import{CHAINS as We,DEFAULT_RPC_URLS as oo,eip155Reference as so,getRpcUrl as ao}from"@naculus/connect-core";var io=[{caip2:"eip155:5",name:"Goerli",rpcUrl:"https://goerli.blockpi.network/v1/rpc/public",explorerUrl:"https://goerli.etherscan.io",token:"ETH"},{caip2:"eip155:80001",name:"Mumbai",rpcUrl:"https://rpc-mumbai.maticvigil.com",explorerUrl:"https://mumbai.polygonscan.com",token:"MATIC"},{caip2:"eip155:421613",name:"Arbitrum Goerli",rpcUrl:"https://goerli-rollup.arbitrum.io/rpc",explorerUrl:"https://goerli.arbiscan.io",token:"ETH"},{caip2:"eip155:420",name:"Optimism Goerli",rpcUrl:"https://goerli.optimism.io",explorerUrl:"https://goerli-optimism.etherscan.io",token:"ETH"}];function lo(e){let t=We[e];if(!t||!t.explorerUrl)return null;let o=t.caip2Id;return{caip2:o,name:t.name,rpcUrl:ao(o,oo[o]??""),explorerUrl:t.explorerUrl,token:t.nativeCurrency.symbol}}function co(){if(!We)return[];let e=[],t=Object.keys(We).map(Number).sort((o,s)=>o-s);for(let o of t){let s=lo(o);s&&e.push(s)}for(let o of io){let s=so(o.caip2);(s===null||!We[s])&&e.push(o)}return e}var kn=co();function uo(e,t){return ro(e,t)??void 0}function dt(){return[...kn]}import{jsx as vo}from"react/jsx-runtime";var mt=ho(null);function ko({children:e,config:t,autoConnect:o=!0}){let[s,n]=Co(Eo,So),c=fe(()=>t.chains??dt(),[t.chains]),i=t.connectionTimeout??3e4,h=t.maxRetries??2,u=fe(()=>t.sessionStorage??new fo(t.storageKey??"naculus_web3_session",t.encryptionKey),[t.sessionStorage,t.storageKey,t.encryptionKey]),l=fe(()=>ut({projectId:t.projectId,metadata:t.metadata,enableEmbedded:t.enableEmbedded,embeddedConfig:t.embeddedConfig,enablePasskeys:t.enablePasskeys,enableSolana:t.enableSolana,solanaDefaultChain:t.solanaDefaultChain,walletConnect:t.walletConnect,solanaWallets:t.solanaWallets,injectedProviders:t.injectedProviders}),[t.projectId,t.metadata,t.enableEmbedded,t.embeddedConfig,t.enablePasskeys,t.enableSolana,t.solanaDefaultChain,t.walletConnect,t.solanaWallets,t.injectedProviders]),g=vn(null),r=vn(null),a=fe(()=>{let f=po();for(let O of[Oe,...l.getAllConnectors()])f.register(O.id,O);let S={},x={};for(let O of c){let F=O.caip2;O.rpcUrl&&(S[F]=O.rpcUrl),O.token&&(x[F]={name:O.name,symbol:O.token,decimals:18})}let P=mo(f,{autoRefreshFeeOnSwitch:t.autoRefreshFeeOnSwitch??!0,defaultRpcUrls:S,defaultCurrencies:x,encryptionKey:t.encryptionKey});return g.current=P,P},[l,c,t.autoRefreshFeeOnSwitch,t.encryptionKey]);me(()=>{let f=F=>{let{walletSession:ne}=F.bundle;n({type:"SET_SESSION",payload:ne});let V=[];Object.values(ne.namespaces).forEach(de=>{V.push(...de.accounts)}),n({type:"SET_ACCOUNTS",payload:V}),n({type:"SET_CHAIN",payload:F.bundle.activeChainId}),n({type:"SET_STATUS",payload:"connected"})},S=()=>{n({type:"RESET"})},x=F=>{n({type:"SET_CHAIN",payload:F.newChainId})},P=F=>f(F),O=()=>{u.clear(),n({type:"RESET"})};return a.on("sessionConnected",f),a.on("sessionDisconnected",S),a.on("chainChanged",x),a.on("sessionScopeChanged",P),a.on("sessionRevoked",O),()=>{a.off("sessionConnected",f),a.off("sessionDisconnected",S),a.off("chainChanged",x),a.off("sessionScopeChanged",P),a.off("sessionRevoked",O)}},[a,u]),me(()=>{let f=()=>{u.clear(),n({type:"RESET"})};l.connector.onSessionExpiry(f)},[l,u]);let p=K(()=>{for(let f of[Oe,...l.getAllConnectors()])a.registerConnector(f)},[l,a]),d=K(async f=>{p();let S=[Oe,...l.getAllConnectors()].find(P=>P.id===f.walletType||P.kind===f.walletType);S&&!f.connectorId&&(f.connectorId=S.id);let x=f.namespaces.eip155?.chains?.[0]??f.namespaces.solana?.chains?.[0]??f.namespaces.xrpl?.chains?.[0];x&&await a.attach(f,x)},[l,a,p]),m=K(f=>{if(n({type:"SET_SESSION",payload:f}),f){let S=[];Object.values(f.namespaces).forEach(F=>{S.push(...F.accounts)}),n({type:"SET_ACCOUNTS",payload:S});let x=f.namespaces.eip155?.chains?.[0],P=f.namespaces.solana?.chains?.[0],O=f.namespaces.xrpl?.chains?.[0];n({type:"SET_CHAIN",payload:x??P??O??null})}else n({type:"SET_ACCOUNTS",payload:[]}),n({type:"SET_CHAIN",payload:null})},[]);me(()=>{let f=s.session,S=l;return!f||!S?.onAccountsChanged?void 0:S.onAccountsChanged(f,P=>{if(P.length===0){u.clear().finally(()=>n({type:"RESET"}));return}m(f),u.save(f)})},[s.session,l,u,m]),me(()=>{let f=s.session,S=l;if(!(!f||!S?.onChainChanged))return S.onChainChanged(f,x=>{m(f),u.save(f);let P=a.syncExternalChain;if(!P)return;let O=P.call(a,x).catch(F=>{Z.warn("react/provider","External chain sync error:",F)});r.current=O,O.finally(()=>{r.current===O&&(r.current=null)})})},[s.session,l,u,m,a]);let C=K(async f=>{if(!t.siwx||!f)return!0;n({type:"SET_STATUS",payload:"authenticating"});let S=await wn({session:f,siwx:t.siwx,signMessage:(x,P)=>l.signMessage(x,P)});return S.kind==="failed"&&S.fatal?(await u.clear(),n({type:"RESET"}),n({type:"SET_ERROR",payload:S.error}),!1):!0},[t.siwx,l,u]),E=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await xn(l.connect(),i,"Wallet connect");await u.save(f),m(f);try{await d(f)}catch(S){Z.warn("react/provider","SessionManager sync error:",S)}if(!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,u,m,i,C,d]),A=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await l.connectEmbedded();if(await u.save(f),m(f),await d(f),!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Embedded wallet connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,u,m,C,d]),y=K(async()=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let f=await l.connectPasskeys();if(await u.save(f),m(f),await d(f),!await C(f))return;n({type:"SET_STATUS",payload:"connected"})}catch(f){let S=f instanceof Error?f.message:"Passkeys connection failed";n({type:"SET_ERROR",payload:f instanceof Error?f:new Error(S)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,u,m,C,d]),w=K(async()=>{if(!s.session){n({type:"RESET"});return}try{await l.disconnect(s.session)}catch(f){Z.error("react/provider","Disconnect error:",f)}try{let f=g.current;f&&await f.disconnect()}catch(f){Z.warn("react/provider","SessionManager disconnect error:",f)}await u.clear(),n({type:"RESET"})},[l,s.session,u]),R=K(async f=>{n({type:"SET_STATUS",payload:"connecting"}),n({type:"SET_ERROR",payload:null});try{let S=await xn(l.connectInjected(f),i,"Injected wallet connect");await u.save(S),m(S);try{await d(S)}catch(x){Z.warn("react/provider","SessionManager sync error:",x)}if(!await C(S))return;n({type:"SET_STATUS",payload:"connected"})}catch(S){let x=S instanceof Error?S.message:"Connection failed";n({type:"SET_ERROR",payload:S instanceof Error?S:new Error(x)}),n({type:"SET_STATUS",payload:"disconnected"})}},[l,u,m,i,C,d]),k=K(async()=>l.startPairing(),[l]),T=K(()=>{l.cancelPairing?.()},[l]),v=K(async()=>{let f=await l.completePairing();return await u.save(f),m(f),await d(f),await C(f)&&n({type:"SET_STATUS",payload:"connected"}),f},[l,u,m,C,d]),b=K(async f=>{let S=t.siwx;if(!S||S.required===!1)return!0;try{if(await S.hasValidSession?.())return!0}catch(x){Z.warn("react/provider","siwx.hasValidSession failed",x)}return C(f)},[t.siwx,C]),I=K(async()=>{let f=await u.load();if(!f){n({type:"SET_STATUS",payload:"disconnected"});return}n({type:"SET_STATUS",payload:"reconnecting"});try{let S=await wo(()=>l.reconnect(f),{maxRetries:h,baseDelay:1e3,label:"reconnect"});m(S);try{let x=g.current;x&&(p(),await x.restoreFromPersistence())}catch(x){Z.warn("react/provider","SessionManager restore error:",x)}if(!await b(S))return;n({type:"SET_STATUS",payload:"connected"})}catch(S){Z.error("react/provider","Reconnect error:",S),await u.clear(),n({type:"SET_STATUS",payload:"disconnected"}),n({type:"SET_SESSION",payload:null})}},[l,u,m,h,p,b]),W=K(async f=>{r.current&&await r.current;let S=g.current;if(S?.getActiveBundle()){await S.switchChain(f),m(s.session);return}if(!s.session)throw new Error("No active session");try{s.session.walletType==="eip6963"||s.session.id?.startsWith("eip6963-")?await Oe.switchChain(s.session,f):s.session.walletType==="embedded"&&l.embeddedConnector?await l.embeddedConnector.switchChain?.(s.session,f):s.session.walletType==="passkeys"&&l.passkeysConnector?await l.passkeysConnector.switchChain?.(s.session,f):s.session.walletType==="solana"&&l.solanaConnector?await l.solanaConnector.switchChain?.(s.session,f):await l.connector.switchChain(s.session,f),m(s.session)}catch(x){throw new go("chain_unsupported","Failed to switch chain",x)}},[l,s.session,m]);me(()=>{o&&I()},[o,I]);let _=K(()=>{n({type:"SET_ERROR",payload:null})},[]),D=fe(()=>({...s,connect:E,connectEmbedded:A,connectPasskeys:y,disconnect:w,reconnect:I,switchChain:W,startPairing:k,completePairing:v,cancelPairing:T,connectInjected:R,clearError:_,isConnected:s.status==="connected",chains:c,client:l,sessionManager:a}),[s,E,A,y,w,I,W,k,v,T,R,_,c,l,a]);return vo(mt.Provider,{value:D,children:e})}function U(){let e=yo(mt);if(!e)throw new Error("useWeb3 must be used within a Web3ConnectProvider");return e}function B(){let{accounts:e,isConnected:t}=U(),o=Ao(()=>!t||e.length===0?null:e.map(n=>{let c=xo(n);return c?{address:n,namespace:c.namespace,isEVM:c.namespace==="eip155"&&An(c.address)}:{address:n,namespace:null,isEVM:An(n)}}),[e,t]),s=o?.find(n=>n.isEVM)?.address??null;return{accounts:o,evmAccount:s,primaryAccount:e[0]??null,isConnected:t,count:e.length}}import{listAuthorizations as bo,revokeListedAuthorization as Ro}from"@naculus/connect-core";import{useCallback as bn,useEffect as Rn,useRef as ft,useState as gt}from"react";function To({managers:e}){let t=ft(e);t.current=e;let o=ft(0),s=ft(!0),[n,c]=gt([]),[i,h]=gt(!1),[u,l]=gt(null);Rn(()=>()=>{s.current=!1,o.current+=1},[]);let g=bn(async()=>{let a=++o.current;h(!0),l(null);try{let p=await bo(t.current);s.current&&a===o.current&&c(p)}catch(p){s.current&&a===o.current&&l(p instanceof Error?p:new Error("Failed to list authorizations"))}finally{s.current&&a===o.current&&h(!1)}},[]);Rn(()=>{g()},[g]);let r=bn(async a=>{try{let p=await Ro(t.current,a);return await g(),p}catch(p){let d=p instanceof Error?p:new Error("Failed to revoke authorization");throw s.current&&l(d),d}},[g]);return{entries:n,loading:i,error:u,refresh:g,revoke:r}}import{chainNumber as Io,resolveChain as Uo,toViemChain as Po}from"@naculus/connect-appkit-core";import{useState as ge,useEffect as ht,useCallback as Wo,useMemo as he,useRef as Oo}from"react";import{createPublicClient as No,http as _o,formatEther as Do}from"viem";import{getNativeTokenPriceUsd as Mo}from"@naculus/connect-core";function Lo(e){let{evmAccount:t,isConnected:o}=B(),{chainId:s,chains:n}=U(),[c,i]=ge(null),[h,u]=ge(!1),[l,g]=ge(null),[r,a]=ge(null),p=e?.refreshInterval,d=Oo(null),m=he(()=>Uo(n,s),[s,n]),C=m?Io(m):null,E=he(()=>m?Po(m,C):null,[m,C]),A=he(()=>m?.token??null,[m]),[y,w]=ge(null);ht(()=>{if(!E||!m?.rpcUrl){w(null);return}let v=No({transport:_o(m.rpcUrl),chain:E});return w(v),()=>{}},[m,E]);let R=Wo(async()=>{if(!t||!y){i(null);return}u(!0),g(null);try{let b=t.includes(":")?t.split(":").pop():t,[I,W]=await Promise.all([y.getBalance({address:b}),s?Mo(s,m?.rpcUrl).catch(()=>null):Promise.resolve(null)]);i(I.toString()),a(W)}catch(v){g(v instanceof Error?v:new Error("Failed to fetch balance")),i(null),a(null)}finally{u(!1)}},[t,y,s,m?.rpcUrl]);ht(()=>{o&&t&&R()},[o,t,R]),ht(()=>(p&&p>0&&o&&t&&(d.current=setInterval(R,p)),()=>{d.current&&(clearInterval(d.current),d.current=null)}),[p,o,t,R]);let k=he(()=>{if(c===null)return null;try{return Do(BigInt(c))}catch{return null}},[c]),T=he(()=>{if(r===null||k===null)return null;let v=parseFloat(k);if(Number.isNaN(v))return null;let b=v*r;return new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(b)},[r,k]);return{balance:c,formatted:k,symbol:A,usdPrice:r,usdValue:T,isLoading:h,error:l,refetch:R,chain:m}}import{atomicSupportFor as Bo,normalizeCapabilities as Fo,selectChainCapabilities as Ko}from"@naculus/connect-appkit-core";import{useCallback as Ho,useEffect as qo,useRef as Vo,useState as yt}from"react";function N(e){return e??pt()}function Ct(){let{client:e,session:t,chainId:o}=U(),[s,n]=yt(null),[c,i]=yt(!1),[h,u]=yt(null),l=Vo(0),g=Ho(async()=>{let r=++l.current,a=N(e);if(!a?.getCapabilities||!t){n(null),i(!1),u(null);return}i(!0),u(null);try{let p=await a.getCapabilities(t);if(r!==l.current)return;n(Fo(p))}catch(p){if(r!==l.current)return;n(null),u(p instanceof Error?p:new Error("Capability query failed"))}finally{r===l.current&&i(!1)}},[e,t]);return qo(()=>{g()},[g]),{capabilities:s,current:Ko(s,o),atomic:Bo(s,o),isFetching:c,error:h,refetch:g}}import{useMemo as St}from"react";import{chainsForNamespace as zo,describeChain as jo,resolveChain as $o}from"@naculus/connect-appkit-core";function z(){let{chainId:e,session:t,switchChain:o,chains:s}=U(),n=St(()=>$o(s,e),[s,e]),c=St(()=>t?jo(s,e):null,[s,e,t]),i=St(()=>zo(s,e),[s,e]);return{chainId:e,currentChain:n,chainInfo:c,availableChains:i,chains:i,isEvm:e?.startsWith("eip155:")??!1,switchChain:o}}import{useCallback as Go,useState as Tn}from"react";import{WalletError as Xo}from"@naculus/connect-core";function Qo(){let{connect:e,status:t}=U(),[o,s]=Tn(!1),[n,c]=Tn(null);return{connect:Go(async()=>{s(!0),c(null);try{await e()}catch(h){let u=h instanceof Error?h.message:"Connection failed";c(h instanceof Xo?h:new Error(u))}finally{s(!1)}},[e]),isConnecting:o||t==="connecting",error:n}}import{bareEvmAddress as ts}from"@naculus/connect-appkit-core";import{delegateAccount as ns,eip155Reference as rs,REVOKE_DELEGATE as os,WalletError as Un}from"@naculus/connect-core";import{useCallback as Ne,useEffect as Pn,useRef as Wn,useState as wt}from"react";import{chainNumber as Yo,toViemChain as Jo}from"@naculus/connect-appkit-core";import{useMemo as Et}from"react";import{createPublicClient as Zo,http as In,createWalletClient as es}from"viem";function j(){let{evmAccount:e,isConnected:t}=B(),{currentChain:o,chains:s}=z(),n=o?Yo(o):null,c=Et(()=>o?Jo(o,n):null,[o,n]),i=Et(()=>c?Zo({transport:In(c.rpcUrls.default.http[0]),chain:c}):null,[c]),h=Et(()=>{if(!t||!e||!c)return null;let u=e.includes(":")?e.split(":").pop():e;return es({transport:In(c.rpcUrls.default.http[0]),chain:c,account:u})},[t,e,c]);return{publicClient:i,walletClient:h,chains:s}}function ss(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=U(),{publicClient:c}=j(),[i,h]=wt(null),[u,l]=wt(!1),[g,r]=wt(null),a=Wn(0),p=Wn(!1);Pn(()=>()=>{a.current+=1},[]),Pn(()=>{a.current+=1,h(null),l(!1),r(null)},[o,s,t]);let d=Ne(async(A,y)=>{let w=v=>(r(v),null);if(p.current)return w(new Error("A delegation is already in progress"));let R=ts(t);if(!o||!R||!s)return w(new Un("wallet_unavailable","No connected EVM account"));if(!c||c.chain?.id!==rs(s))return w(new Un("chain_mismatch",`No RPC client for ${s}; refusing to read the nonce elsewhere.`));let k=o.walletType==="embedded"?N(n)?.embeddedConnector??{}:{},T=++a.current;p.current=!0,l(!0),r(null),h(null);try{let v=await ns({connector:k,session:o,account:R,chainId:s,delegate:A,allowlist:y,getTransactionCount:(b,I)=>c.getTransactionCount({address:b,blockTag:I})});return T!==a.current?null:(h(v),v)}catch(v){return T!==a.current?null:w(v instanceof Error?v:new Error("Failed to send delegation"))}finally{p.current=!1,T===a.current&&l(!1)}},[s,n,t,c,o]),m=Ne(A=>d(A,e.allowlist),[d,e.allowlist]),C=Ne(()=>d(os,[]),[d]),E=Ne(()=>{a.current+=1,h(null),l(!1),r(null)},[]);return{delegate:m,revoke:C,result:i,isPending:u,error:g,reset:E}}import{applySettlementVerification as On,DEFAULT_VERIFY_RETRY as as,describePayment as is}from"@naculus/connect-appkit-core";import{useCallback as Nn,useEffect as ls,useRef as ye,useState as kt}from"react";function cs(e,t={}){let[o,s]=kt(0),[n,c]=kt(null),[i,h]=kt(null),u=ye(0),l=ye(0),g=ye(e);g.current=e;let r=ye(t);r.current=t;let a=ye(0);ls(()=>()=>{u.current+=1,l.current+=1,a.current+=1},[]);let p=Nn(async(m,C)=>{let E=++u.current,A=l.current;s(y=>y+1),h(null);try{let y=await g.current(m,C),w=is(m,y);if(w&&A===l.current){let R=r.current.verify;if(!R)c(w);else{w=On(w,{status:"pending"}),c(w);let k=++a.current,T=r.current.verifyRetry??as;Promise.resolve().then(async()=>{let v={status:"pending"};for(let b=0;b<T.attempts;b+=1){if(b>0&&await new Promise(I=>setTimeout(I,T.delayMs)),A!==l.current||k!==a.current)return;try{v=await R(y)}catch(I){v={status:"unavailable",reason:I instanceof Error?I.message:"Settlement verification failed"}}if(v.status!=="pending")break}A===l.current&&k===a.current&&c(b=>b&&On(b,v))})}}return y}catch(y){let w=y instanceof Error?y:new Error("Paid request failed");throw E===u.current&&h(w),w}finally{s(y=>y-1)}},[]),d=Nn(()=>{u.current+=1,l.current+=1,a.current+=1,c(null),h(null)},[]);return{payFetch:p,isPending:o>0,lastPayment:n,error:i,reset:d}}import{createX402WalletSigner as us,findX402Provider as ps}from"@naculus/connect-appkit-core";import{eip6963Connector as ds}from"@naculus/connector-evm-injected";import{useMemo as ms}from"react";function fs(){let{session:e,accounts:t,chainId:o,client:s,switchChain:n}=U(),c=t.join("\0");return ms(()=>{let i=ps(e,{injected:ds.getDiscoveredWallets(),walletConnect:s.connector});return us(e,i,n)},[e,c,o,s.connector,n])}import{readCurrentMppSessionChannel as Ce,readMppRecoveryChannelId as _n,readMppSessionReceipt as Dn}from"@naculus/connect-appkit-core";import{useCallback as ae,useEffect as Mn,useMemo as gs,useRef as _e,useState as ie}from"react";function Ln(e){return e instanceof Error?e:new Error("MPP session operation failed")}function hs(e){let[t,o]=ie(0),[s,n]=ie(()=>e.meter.pending),[c,i]=ie(()=>Ce(e)),[h,u]=ie(null),[l,g]=ie(null),[r,a]=ie(null),p=_e(0),d=_e(0),m=_e(!0),C=_e(e);C.current=e,Mn(()=>{p.current+=1,d.current+=1,o(0),n(e.meter.pending),i(Ce(e)),u(null),g(null),a(null)},[e]),Mn(()=>()=>{m.current=!1,p.current+=1,d.current+=1},[]);let E=ae(async(v,b,I=!1)=>{let W=++p.current,_=d.current,D=C.current;o(f=>f+1),a(null);try{let f=await v(D);if(m.current&&_===d.current){b?.(f);let S=Ce(D);i(S),n(D.meter.pending),(I||!S)&&g(null)}return f}catch(f){let S=Ln(f);if(m.current&&_===d.current){let x=Ce(D);i(x),n(D.meter.pending);let P=_n(f);P?g(P):x||g(null),W===p.current&&a(S)}throw S}finally{m.current&&_===d.current&&o(f=>f-1)}},[]),A=ae((v,b)=>E(I=>I(v,b),I=>{let W=Dn(I.receipt);W&&u(W)}),[E]),y=ae(()=>E(v=>v.close(),v=>{let b=Dn(v.receipt);b&&u(b)},!0),[E]),w=ae(()=>E(v=>v.forceClose(),void 0,!0),[E]),R=ae(v=>{try{C.current.meter.add(v),n(C.current.meter.pending),a(null)}catch(b){let I=Ln(b);throw a(I),g(_n(b)),I}},[]),k=ae(()=>{p.current+=1,d.current+=1,o(0),n(C.current.meter.pending),i(Ce(C.current)),u(null),g(null),a(null)},[]),T=gs(()=>({add:R}),[R]);return{fetch:A,meter:T,pending:s,channel:c,lastReceipt:h,recoveryChannelId:l,isPending:t>0,error:r,close:y,forceClose:w,reset:k}}import{createSolanaSessionKeyFlow as ys}from"@naculus/connect-appkit-core";import{useCallback as De,useEffect as Cs,useMemo as Ss,useRef as Es,useState as vt}from"react";function Bn(){return Promise.reject(new Error("No Solana session key manager is connected"))}function ws(e){let[t,o]=vt([]),[s,n]=vt(0),[c,i]=vt(null),h=Es(0),u=e?.manager,l=e?.rpc,g=e?.owner,r=Ss(()=>u&&l&&g?ys({manager:u,rpc:l,owner:g}):null,[u,l,g]),a=De(async(C,E)=>{let A=++h.current;n(y=>y+1),i(null);try{return await C()}catch(y){let w=y instanceof Error?y:new Error(E);throw A===h.current&&i(w),w}finally{if(r&&A===h.current){let y=await r.list().catch(()=>null);y&&A===h.current&&o(y)}n(y=>y-1)}},[r]),p=De(async()=>{if(!r){o([]);return}let C=h.current,E=await r.list();C===h.current&&o(E)},[r]);Cs(()=>(h.current+=1,p().catch(()=>{}),()=>{h.current+=1}),[p]);let d=De(C=>r?a(()=>r.create(C),"Could not create the key"):Bn(),[r,a]),m=De(C=>r?a(()=>r.revoke(C),"Could not revoke the key"):Bn(),[r,a]);return{keys:t,create:d,revoke:m,refresh:p,isPending:s>0,error:c}}import{readDelegation as ks,UNKNOWN_DELEGATION as xt}from"@naculus/connect-core";import{useCallback as vs,useEffect as xs,useRef as As,useState as At}from"react";function Se(){let{publicClient:e}=j(),{evmAccount:t}=B(),[o,s]=At(xt),[n,c]=At(!1),[i,h]=At(null),u=As(0),l=t?.includes(":")?t.split(":").pop():t,g=vs(async()=>{let r=++u.current;if(!e||!l){s(xt),c(!1),h(null);return}c(!0),h(null);try{let a=await e.getCode({address:l});if(r!==u.current)return;s(ks(a??"0x"))}catch(a){if(r!==u.current)return;s(xt),h(a instanceof Error?a:new Error("Code read failed"))}finally{r===u.current&&c(!1)}},[e,l]);return xs(()=>{g()},[g]),{...o,isFetching:n,error:i,refetch:g}}import{bareEvmAddress as Ks,createDelegationPolicyFlow as Hs,isVerifiablePolicy as qs}from"@naculus/connect-appkit-core";import{useCallback as we,useEffect as Vs,useMemo as zs,useState as Be}from"react";import{recoverMessageAddress as js}from"viem";import{planExecution as Is,WalletError as Us}from"@naculus/connect-core";import{useCallback as Fn,useState as Rt}from"react";import{chooseExecutionStrategy as Rs,getAccountCapabilities as Ts,WalletError as ee}from"@naculus/connect-core";import{useCallback as Le,useState as Ee}from"react";import{WalletError as bs}from"@naculus/connect-core";function Me(e){let t=typeof e=="string"?e:e&&typeof e=="object"&&"hash"in e?e.hash:void 0;if(typeof t=="string"&&/^0x[0-9a-fA-F]{64}$/.test(t))return t;throw new bs("tx_failed","Wallet did not return a valid 32-byte transaction hash")}function bt(){let{session:e,chainId:t,client:o}=U(),[s,n]=Ee("idle"),[c,i]=Ee(null),[h,u]=Ee(null),[l,g]=Ee(null),[r,a]=Ee(null),p=Le(async(E,A)=>{if(!e){n("failed");let y=new ee("wallet_unavailable","No active session");throw i(y),y}if(E.length===0){n("failed");let y=new ee("invalid_input","At least one call is required");throw i(y),y}n("awaiting_approval"),i(null),u(null);try{let y=N(o);if(!y)throw new ee("wallet_unavailable","Client not initialized");let w=A?.chainId??t??void 0,R=A?.strategy??Rs(await Ts(y,e,w),E.length);if(a(R),R==="atomic-batch"){let T=await y.sendCalls(e,E,w,{atomicRequired:!0,...A?.paymasterService?{paymasterService:A.paymasterService}:{}});return n("submitted"),u(T),T}let k="";for(let T=0;T<E.length;T++){let v=E[T];try{k=Me(await y.sendTransaction(e,{transaction:{to:v.to,data:v.data,value:v.value},chainId:w}))}catch(b){throw new ee("tx_failed",`Call ${T+1} of ${E.length} failed after ${T} already landed (sent sequentially \u2014 this wallet cannot batch atomically): ${b instanceof Error?b.message:String(b)}`)}}return n("submitted"),u(k),k}catch(y){n("failed");let w=y instanceof Error?y.message:"sendCalls failed";throw i(y instanceof Error?y:new Error(w)),y}},[e,t,o]),d=Le(async E=>{if(!e)throw new ee("wallet_unavailable","No active session");let A=E??h;if(!A)throw new ee("invalid_input","No bundle hash available");if(!E&&r==="sequential")throw new ee("invalid_input","Calls were sent sequentially, so there is no bundle to query. Track the returned transaction hash instead.");let y=N(o);if(!y)throw new ee("wallet_unavailable","Client not initialized");let w=await y.getCallsStatus(e,A);return g(w),w},[e,h,o,r]),m=Le(async E=>{if(!e)return!1;let A=E??h;if(!A||!E&&r==="sequential")return!1;let y=N(o);if(!y?.showCallsStatus)return!1;try{return await y.showCallsStatus(e,A),!0}catch{return!1}},[e,h,o,r]),C=Le(()=>{n("idle"),i(null),u(null),g(null),a(null)},[]);return{sendCalls:p,getCallsStatus:d,showCallsStatus:m,status:s,error:c,batchHash:h,callsStatus:l,execution:r,reset:C,isSending:s==="awaiting_approval"}}function Tt(e={}){let{current:t,atomic:o}=Ct(),{delegated:s,delegate:n}=Se(),{sendCalls:c}=bt(),[i,h]=Rt(!1),[u,l]=Rt(null),[g,r]=Rt(null),a=e.atomicity??"preferred",p=e.sponsorship??"any",d=e.paymasterService,m=e.userOperation,C=e.userOperationSponsored??!1,E=!!(t?.raw?.paymasterService?.supported&&d),A=Fn((w,R=a)=>{let k=Is({atomicBatch:o==="supported",discovered:o!=="unknown",sponsoredTransactions:!1,...t?.maxBatchSize===void 0?{}:{maxBatchSize:t.maxBatchSize}},w,{atomicity:R,sponsorship:p}),T=p==="required"&&!C;if(k.strategy==="atomic-batch"&&!T)return{...k,reason:k.reason+(E?" A paymaster service will be requested, but the wallet's final fee payer must be checked after execution.":""),route:"wallet-batch"};let v=s&&o!=="supported"?` This account does delegate to ${n} under EIP-7702, so it is capable of batching even though the wallet has not offered to.`:"",b=R!=="any"&&!k.atomic||p==="required";return m&&b&&!T?{strategy:"atomic-batch",atomic:!0,sponsored:C,reason:p==="required"&&!k.sponsored?"The wallet batch is not configured for sponsored gas, so the calls are executed through the configured sponsored UserOperation route.":"This wallet cannot batch, so the calls are executed as a single UserOperation through the smart account, which lands as one transaction.",route:"user-operation"}:T?{strategy:"refuse",atomic:k.atomic,sponsored:!1,reason:"Sponsored gas was required, but there is no executable sponsored route: no paymaster is configured for a wallet batch, and capability advertising alone cannot pay for a sequential transaction.",route:null}:k.strategy==="refuse"?{...k,reason:k.reason+v,route:null}:{...k,reason:k.reason+v,route:"sequential"}},[o,t,E,m,C,a,p,s,n]),y=Fn(async(w,R=a)=>{h(!0),l(null);try{let k=A(w.length,R);if(k.route===null)throw new Us("method_not_allowed",k.reason);return r(k.route),k.route==="user-operation"?await m(w):await c(w,{strategy:k.route==="wallet-batch"?"atomic-batch":"sequential",...k.route==="wallet-batch"&&E?{paymasterService:d}:{}})}catch(k){let T=k instanceof Error?k:new Error("Execution failed");throw l(T),T}finally{h(!1)}},[A,c,m,a,d,E]);return{preview:A,execute:y,isExecuting:i,error:u,lastRoute:g,reset:()=>{l(null),r(null)}}}import{getSharedSessionKeyManager as Ps,resetSharedSessionKeyManager as Ws}from"@naculus/connect-appkit-core";import{WalletError as Os}from"@naculus/connect-core";import{useCallback as Y,useEffect as Ns,useRef as _s,useState as X}from"react";function le(e){return Ps(e)}function It(e){let{session:t}=U(),[o,s]=X([]),[n,c]=X(!1),[i,h]=X(null),u=_s(!0),l=Y(()=>h(null),[]),g=le(e),r=g.isStorageAvailable(),a=Y(async()=>{if(!t){s([]);return}c(!0),h(null);try{let d=await g.listSessions();u.current&&s(d)}catch(d){u.current&&h(d instanceof Error?d:new Error("Failed to load session keys"))}finally{u.current&&c(!1)}},[t,g]);Ns(()=>(u.current=!0,a(),()=>{u.current=!1}),[a]);let p=o.filter(d=>d.status==="active");return{sessions:o,activeSessions:p,loading:n,error:i,refresh:a,clearError:l,storageAvailable:r}}function Ds(e){let{session:t}=U(),[o,s]=X(null),[n,c]=X(!1),[i,h]=X(null),u=Y(()=>h(null),[]),l=le(e);return{createSessionKey:Y(async(r,a)=>{if(!t)throw new Os("wallet_unavailable","No active wallet session");c(!0),h(null);try{let p=a??void 0,d=await l.createSessionKey(r,p);return s(d),d}catch(p){let d=p instanceof Error?p:new Error("Failed to create session key");throw h(d),d}finally{c(!1)}},[t,l]),lastCreated:o,isCreating:n,error:i,clearError:u}}function Ms(e){let[t,o]=X(!1),[s,n]=X(null),c=Y(()=>n(null),[]),i=le(e);return{revokeSession:Y(async u=>{o(!0),n(null);try{await i.revokeSession(u)}catch(l){let g=l instanceof Error?l:new Error("Failed to revoke session key");throw n(g),g}finally{o(!1)}},[i]),isRevoking:t,error:s,clearError:c}}function Ls(e){let[t,o]=X(!1),[s,n]=X(null),c=Y(()=>n(null),[]),i=le(e),h=Y(async(l,g,r)=>{o(!0),n(null);try{return await i.signWithSessionKey(l,g,r)}catch(a){let p=a instanceof Error?a:new Error("Failed to sign with session key");throw n(p),p}finally{o(!1)}},[i]),u=Y(async(l,g)=>{o(!0),n(null);try{return await i.checkSessionScope(l,g)}catch(r){let a=r instanceof Error?r:new Error("Failed to check session scope");throw n(a),a}finally{o(!1)}},[i]);return{signWithSession:h,checkScope:u,isBusy:t,error:s,clearError:c}}function Bs(){Ws()}import{useState as Kn,useCallback as Fs}from"react";import{WalletError as Ut}from"@naculus/connect-core";function Pt(){let{session:e,chainId:t,client:o}=U(),[s,n]=Kn(!1),[c,i]=Kn(null);return{signMessage:Fs(async u=>{if(!e){let g=new Ut("wallet_unavailable","No active session");throw i(g),g}let l=e.namespaces.eip155?.accounts[0]??Object.values(e.namespaces)[0]?.accounts[0];if(!l){let g=new Ut("wallet_unavailable","No account found");throw i(g),g}n(!0),i(null);try{let g=N(o);if(!g)throw new Ut("wallet_unavailable","Client not initialized");return await g.signMessage(e,{message:u,address:l,chainId:t??void 0})}catch(g){let r=g instanceof Error?g.message:"Signing failed",a=g instanceof Error?g:new Error(r);throw i(a),a}finally{n(!1)}},[e,t,o]),isSigning:s,error:c}}import{buildDelegationPolicyMessage as Gs}from"@naculus/connect-appkit-core";function $s(e={}){let{evmAccount:t}=B(),o=Ks(t),s=Se(),n=Tt(e.execution),{signMessage:c}=Pt(),i=It(e.managerConfig),h=le(e.managerConfig),[u,l]=Be(!1),[g,r]=Be(null),[a,p]=Be(()=>new Set),[d,m]=Be(!1),C=e.origin??(typeof window<"u"?window.location.origin:"unknown"),E=!!e.managerConfig?.encryptionKey,A=e.execution?.sponsorship,{refresh:y,storageAvailable:w}=i,{preview:R}=n,{delegated:k,delegate:T}=s,v=zs(()=>Hs({manager:h,origin:C,signer:()=>o,signMessage:c,verifySignature:async({message:S,signature:x,signerAddress:P})=>(await js({message:S,signature:x})).toLowerCase()===P.toLowerCase(),previewExecution:R,sponsorship:A,adapter:e.adapter,signTypedData:e.signTypedData,chainId:()=>e.chainId??null,delegation:()=>({delegated:k,delegate:T}),encryptionKeyConfigured:E,storageAvailable:()=>w,refresh:y}),[h,C,o,c,R,A,e.adapter,e.signTypedData,e.chainId,k,T,E,w,y]);Vs(()=>{let S=!1,x=i.sessions.filter(qs);return x.length===0?(p(new Set),m(!1),()=>{S=!0}):(m(!0),Promise.all(x.map(async P=>[P.id,await v.verifyStoredPolicy(P)])).then(P=>{S||p(new Set(P.filter(([,O])=>O).map(([O])=>O)))}).catch(P=>{S||(p(new Set),r(P instanceof Error?P:new Error("Policy verification failed")))}).finally(()=>{S||m(!1)}),()=>{S=!0})},[i.sessions,v]);let b=we(()=>{r(null),i.clearError()},[i]),I=we(async(S,x)=>{l(!0),r(null);try{return await S()}catch(P){let O=P instanceof Error?P:new Error(x);throw r(O),O}finally{l(!1)}},[]),W=we(S=>I(()=>v.createPolicy(S),"Policy creation failed"),[v,I]),_=we(S=>I(()=>v.revokePolicy(S),"Policy revocation failed"),[v,I]),D=we((S,x)=>I(()=>v.executePolicy(S,x),"Policy execution failed"),[v,I]),f=i.activeSessions.filter(S=>a.has(S.id));return{policies:i.sessions,activePolicies:f,storageAvailable:i.storageAvailable,loading:i.loading||d,isBusy:u,error:g??i.error,delegation:s,createPolicy:W,revokePolicy:_,previewPolicyExecution:v.previewPolicyExecution,signPolicyDigest:v.signPolicyDigest,executePolicy:D,refresh:i.refresh,clearError:b}}import{useCallback as Xs,useRef as Qs,useState as Hn}from"react";function Ys(){let{disconnect:e,status:t}=U(),[o,s]=Hn(!1),[n,c]=Hn(null),i=Qs(!0);return{disconnect:Xs(async()=>{if(t!=="disconnected"){s(!0),c(null);try{await e()}catch(u){if(!i.current)return;c(u instanceof Error?u:new Error("Disconnect failed"))}finally{i.current&&s(!1)}}},[e,t]),isDisconnecting:o,error:n,cleanup:()=>{i.current=!1}}}import{WalletError as Wt}from"@naculus/connect-core";import{useCallback as J,useEffect as Js,useRef as Fe,useState as Ke}from"react";function te(e){let t=e.activeNamespace??"eip155",o=Array.isArray(e.accounts)?e.accounts.map(({namespace:s,address:n,derivationPath:c})=>({namespace:s,address:n,...c?{derivationPath:c}:{}})):e.address?[{namespace:t,address:e.address}]:[];return{accounts:o,activeNamespace:t,createdAt:e.createdAt??0,...e.chainId?{chainId:e.chainId}:{},...e.version?{version:e.version}:{},recoveryAvailable:!!e.mnemonic,address:o.find(s=>s.namespace===t)?.address??e.address}}function Zs(){let{connectEmbedded:e,client:t}=U(),[o,s]=Ke(null),n=Fe(null),c=Fe(4),i=Fe(!1),h=Fe(null),[u,l]=Ke(!1),[g,r]=Ke(!1),[a,p]=Ke(null),d=()=>p(null),m=J(()=>{let f=n.current;return n.current=null,f},[]),C=J(()=>{let f=N(t);if(!f?.embeddedConnector)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");return f.embeddedConnector},[t]),E=J(()=>{try{return C().getWallet()?.privateKey??null}catch{return null}},[C]),A=J(async()=>{let f=N(t);if(!f)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");let S=f.getEmbeddedConnector?await f.getEmbeddedConnector():f.embeddedConnector;if(!S)throw new Wt("wallet_unavailable","Embedded wallet not enabled.");return S},[t]),y=J(()=>{try{return N(t)?.passphraseGate??null}catch{return null}},[t]),w=J(f=>{f?.code==="decryption_failed"&&y()?.forget("That passphrase did not open the wallet.")},[y]),R=J(async()=>{i.current=!1,p(null);try{let f=await A();if(!await f.load())return!1;let x=f.getWallet();return x?(n.current=null,l(!1),s(te(x)),!0):!1}catch(f){return i.current=!0,w(f),p(f instanceof Error?f:new Error("Failed to restore embedded wallet")),!1}},[w,A]);Js(()=>{let f=!1,S=null;return R().then(x=>{f||x||i.current||(S=setTimeout(()=>{f||R()},100))}),()=>{f=!0,S&&clearTimeout(S)}},[R]);let k=async()=>{r(!0),p(null);try{let f=await A(),S=await f.load(),x=f.getWallet();S&&x&&(s(te(x)),n.current=x.mnemonic||null,l(!x.mnemonic)),await e();let P=f.getWallet();P&&(s(te(P)),P.mnemonic&&!S&&(n.current=P.mnemonic,l(!0)))}catch(f){w(f),p(f instanceof Error?f:new Error("Embedded wallet connection failed"))}finally{r(!1)}},T=async()=>{r(!0),p(null);try{let f=await A();y()?.expect("create");let S=await f.generateWallet();return s(te(S)),n.current=S.mnemonic,l(!0),S}catch(f){return p(f instanceof Error?f:new Error("Failed to generate wallet")),null}finally{r(!1)}},v=async f=>{r(!0),p(null);try{let S=await A();y()?.expect("create");let x=await S.importFromMnemonic(f);return s(te(x)),n.current=null,l(!1),x}catch(S){return p(S instanceof Error?S:new Error("Failed to import wallet")),null}finally{r(!1)}},b=async f=>{r(!0),p(null);try{let S=await A();y()?.expect("create");let x=await S.importFromPrivateKey(f);return s(te(x)),n.current=null,l(!1),x}catch(S){return p(S instanceof Error?S:new Error("Failed to import wallet")),null}finally{r(!1)}},I=async()=>{r(!0),p(null);try{await(await A()).wipe(),s(null),n.current=null,l(!1)}catch(f){p(f instanceof Error?f:new Error("Failed to wipe wallet"))}finally{r(!1)}},W=J(f=>{let S=C();S.setActiveNamespace(f);let x=S.getWallet();s(x?te(x):null)},[C]),_=J(async()=>{let f=await A(),S=await f.backfillAccounts();if(S.length>0){let x=f.getWallet();s(x?te(x):null)}return S.map(({namespace:x,address:P,derivationPath:O})=>({namespace:x,address:P,...O?{derivationPath:O}:{}}))},[A]),D=()=>{n.current=null,l(!1)};return{connectEmbedded:k,restoreWallet:R,generateWallet:T,importFromMnemonic:v,importFromPrivateKey:b,wipe:I,wallet:o,hasWallet:o!==null,address:o?.address??null,accounts:o?.accounts??[],activeNamespace:o?.activeNamespace??null,setActiveNamespace:W,backfillAccounts:_,seedPhrase:n.current,getSeedPhrase:m,getPrivateKey:E,backupPending:u,confirmBackup:D,isBusy:g,error:a,clearError:d,storageSecurityLevel:(()=>{try{let f=C(),S=f.getStorageSecurityLevel?.()??4;return f.getWallet()?(c.current=S,S):o?c.current:S}catch{return o?c.current:4}})(),securityReport:(()=>{let f=null;try{f=C().getStorageSecurityReport?.()??null}catch{f=null}if(!f)return h.current=null,null;let S=JSON.stringify(f);return h.current?.json===S?h.current.value:(h.current={json:S,value:f},f)})()}}import{chainNumber as aa}from"@naculus/connect-appkit-core";import{useState as ia,useCallback as la,useEffect as zn,useRef as jn,useMemo as ca}from"react";import{WalletError as ea}from"@naculus/connect-core";import{useCallback as qn,useEffect as ta,useLayoutEffect as na,useMemo as ra,useRef as Vn}from"react";import{tokenChainMismatch as oa}from"@naculus/connect-appkit-core";function sa(e){return[e.token.address.toLowerCase(),e.token.chainId??"",e.token.decimals??"",e.chainId??"",e.owner??"",e.spender??"",e.connected?"1":"0",e.publicClient?"1":"0",e.walletClient?"1":"0",e.session?.id??""].join("|")}function ce(e){let{token:t,chainId:o}=e,s=t.address.toLowerCase(),n=sa(e),c=ra(()=>({key:n}),[n]),i=Vn(n),h=Vn(!0);na(()=>{i.current=n},[n]),ta(()=>(h.current=!0,()=>{h.current=!1}),[]);let u=qn(()=>h.current&&i.current===n,[n]),l=qn(()=>{if(!u())throw new ea("session_inactive","Wallet or token context changed. Retry the operation with the current account and chain.");let g=oa({address:s,chainId:t.chainId},o);if(g)throw g},[u,s,t.chainId,o]);return{identity:c,isCurrent:u,assertCurrent:l}}import{ERC20_MIN_ABI as ua,formatUnits as pa}from"@naculus/connect-core";function da(e){let{publicClient:t}=j(),{currentChain:o}=z(),{identity:s,isCurrent:n,assertCurrent:c}=ce({token:e.token,chainId:o?aa(o)??void 0:void 0,owner:e.owner,spender:e.spender,publicClient:t}),[i,h]=ia(null),u=i?.identity===s?i.raw:null,l=i?.identity===s&&i.fetching,g=i?.identity===s?i.error:null,r=jn(null),a=jn(0),p=la(async()=>{if(!n())return;let m=++a.current,C=()=>n()&&m===a.current;if(h({identity:s,raw:null,fetching:!!t,error:null}),!!t)try{c();let E=await t.readContract({address:e.token.address,abi:ua,functionName:"allowance",args:[e.owner,e.spender]});if(!C())return;h({identity:s,raw:E,fetching:!1,error:null})}catch(E){if(!C())return;h({identity:s,raw:null,fetching:!1,error:E instanceof Error?E:new Error("Failed to fetch allowance")})}},[t,e.token.address,e.token.chainId,e.owner,e.spender,s,n,c]);return zn(()=>{p().catch(m=>console.warn("useERC20Allowance: initial fetch failed:",m))},[p]),zn(()=>(e.refreshInterval&&e.refreshInterval>0&&(r.current=setInterval(p,e.refreshInterval)),()=>{r.current&&(clearInterval(r.current),r.current=null)}),[e.refreshInterval,p]),{allowance:ca(()=>{if(u===null)return null;let m=e.token.decimals;return m===void 0?null:pa(u,m)},[u,e.token.decimals]),allowanceRaw:u,isFetching:l,error:g,refetch:p}}import{chainNumber as ma,createDecimalsCache as fa,encodeErc20Approve as ga,readDecimals as Nt,writeDecimals as Xn}from"@naculus/connect-appkit-core";import{ERC20_MIN_ABI as He,formatUnits as ha,parseUnits as Qn,WalletError as qe}from"@naculus/connect-core";import{useCallback as ve,useRef as Yn,useState as Jn}from"react";import{WalletError as Ot}from"@naculus/connect-core";import{useCallback as $n,useState as Gn}from"react";function ke(){let{session:e,chainId:t,client:o}=U(),[s,n]=Gn("idle"),[c,i]=Gn(null),h=$n(async l=>{if(!e){n("failed");let r=new Ot("wallet_unavailable","No active session");throw i(r),r}let g=e.namespaces.eip155?.accounts.find(r=>/^eip155:\d+:0x[0-9a-fA-F]{40}$/.test(r)||/^0x[0-9a-fA-F]{40}$/.test(r));if(!g){n("failed");let r=new Ot("wallet_unavailable","No EVM account found");throw i(r),r}n("awaiting_approval"),i(null);try{let r={...l,from:l.from??g.split(":").pop()},a=N(o);if(!a)throw new Ot("wallet_unavailable","Client not initialized");let p=await a.sendTransaction(e,{transaction:r,chainId:t??void 0}),d=Me(p);return n("submitted"),d}catch(r){n("failed");let a=r instanceof Error?r.message:"Transaction failed";throw i(r instanceof Error?r:new Error(a)),r}},[e,t,o]),u=$n(()=>{n("idle"),i(null)},[]);return{sendTransaction:h,status:s,error:c,reset:u,isSending:s==="awaiting_approval"}}function ya(e){return e.includes(":")?e.split(":").pop():e}var Ca=2n**256n-1n;function Sa(e){let{publicClient:t,walletClient:o}=j(),{evmAccount:s,isConnected:n}=B(),{currentChain:c}=z(),{session:i,client:h}=U(),{sendTransaction:u,isSending:l,error:g,reset:r}=ke(),[a,p]=Jn(null),{identity:d,isCurrent:m,assertCurrent:C}=ce({token:e.token,chainId:c?ma(c)??void 0:void 0,owner:s,spender:e.spender,connected:n,publicClient:t,walletClient:o,session:i,client:h}),[E,A]=Jn(null),y=E?.identity===d?E.raw:null,w=E?.identity===d&&E.fetching,R=Yn(fa(e.token,e.token.decimals)),k=Yn(0),T=a??g,v=s?ya(s):null,b=ve(async()=>{if(!m())return null;let S=++k.current,x=()=>m()&&S===k.current;if(A({identity:d,raw:null,fetching:!!t&&!!v&&n}),p(null),!t||!v||!n)return null;try{C();let P=await t.readContract({address:e.token.address,abi:He,functionName:"allowance",args:[v,e.spender]});return x()?(A({identity:d,raw:P,fetching:!1}),P):null}catch(P){return x()&&(A({identity:d,raw:null,fetching:!1}),p(P instanceof Error?P:new Error("Failed to fetch allowance"))),null}},[t,v,e.token.address,e.token.chainId,e.spender,d,m,C,n]),I=(()=>{if(y===null)return null;let S=Nt(R.current,e.token,e.token.decimals);return S===void 0?null:ha(y,S)})(),W=ve(async S=>{if(p(null),r(),!n||!s){let x=new qe("wallet_unavailable","No connected account");throw p(x),x}if(!t){let x=new qe("wallet_unavailable","No public client");throw p(x),x}try{C();let x=ga(e.spender,S),P=N(h);if(i&&P){let F=await u({to:e.token.address,data:x,value:"0"});return b(),F}if(o){let{request:F}=await t.simulateContract({address:e.token.address,abi:He,functionName:"approve",args:[e.spender,S],account:v});C();let ne=await o.writeContract(F);return b(),ne}let O=await u({to:e.token.address,data:x,value:"0"});return b(),O}catch(x){let P=x instanceof Error?x:new Error("Approve failed");throw m()&&p(P),P}},[e,t,o,s,n,i,h,v,u,r,b,C,m]),_=ve(async S=>{try{if(C(),!t)throw new qe("wallet_unavailable","No public client");let x=Nt(R.current,e.token,e.token.decimals);x===void 0&&(x=await t.readContract({address:e.token.address,abi:He,functionName:"decimals"}),C(),Xn(R.current,e.token,x));let P=Qn(S,x);return await W(P)}catch(x){throw m()&&p(x instanceof Error?x:new Error("Approve failed")),x}},[e.token,t,W,C,m]),D=ve(async()=>W(Ca),[W]),f=ve(async S=>{if(!m()||!n||!v||!t)return!1;try{C()}catch(F){return p(F instanceof Error?F:new Error("Cannot check allowance")),!1}let x=y??await b();if(x===null)return!1;let P=Nt(R.current,e.token,e.token.decimals);if(P===void 0){if(!t)throw new qe("wallet_unavailable","Cannot check allowance: no public client to read token decimals.");if(P=await t.readContract({address:e.token.address,abi:He,functionName:"decimals"}),!m())return!1;Xn(R.current,e.token,P)}let O=Qn(S,P);return m()&&x>=O},[y,b,e.token.address,e.token.chainId,e.token.decimals,t,m,C,n,v]);return{approve:_,approveMax:D,allowance:I,allowanceRaw:y,hasAllowance:f,isApproving:l,isFetchingAllowance:w,error:T,refetchAllowance:b}}import{chainNumber as Ea,createDecimalsCache as wa,encodeErc20Transfer as ka,readDecimals as va,writeDecimals as xa}from"@naculus/connect-appkit-core";import{ERC20_MIN_ABI as Zn,parseUnits as Aa,WalletError as er}from"@naculus/connect-core";import{useCallback as ba,useRef as Ra,useState as Ta}from"react";function Ia(e){return e.includes(":")?e.split(":").pop():e}function Ua(e){let{publicClient:t,walletClient:o}=j(),{evmAccount:s,isConnected:n}=B(),{currentChain:c}=z(),{session:i,client:h}=U(),{sendTransaction:u,isSending:l,error:g,reset:r}=ke(),[a,p]=Ta(null),{isCurrent:d,assertCurrent:m}=ce({token:e.token,chainId:c?Ea(c)??void 0:void 0,owner:s,connected:n,publicClient:t,walletClient:o,session:i,client:h}),C=Ra(wa(e.token,e.token.decimals)),E=a??g;return{sendTransfer:ba(async(y,w)=>{if(p(null),r(),!n||!s){let R=new er("wallet_unavailable","No connected account");throw p(R),R}if(!t){let R=new er("wallet_unavailable","No public client available");throw p(R),R}try{m();let R=Ia(s),k=va(C.current,e.token,e.token.decimals);k===void 0&&(k=await t.readContract({address:e.token.address,abi:Zn,functionName:"decimals"}),m(),xa(C.current,e.token,k));let T=Aa(w,k),v=ka(y,T),b=N(h);if(i&&b)return await u({to:e.token.address,data:v,value:"0"});if(o){let{request:W}=await t.simulateContract({address:e.token.address,abi:Zn,functionName:"transfer",args:[y,T],account:R});return m(),await o.writeContract(W)}return await u({to:e.token.address,data:v,value:"0"})}catch(R){let k=R instanceof Error?R:new Error("Transfer failed");throw d()&&p(k),k}},[e.token,t,o,s,n,i,h,u,r,m,d]),isSending:l,error:E}}import{chainNumber as Na,encodeErc20Transfer as _a}from"@naculus/connect-appkit-core";import{parseUnits as Da}from"@naculus/connect-core";import{useMemo as Ma}from"react";import{simulateTransactionPreview as Pa}from"@naculus/connect-appkit-core";import{useCallback as tr,useEffect as Wa,useRef as Oa,useState as _t}from"react";function Dt(e,t){U();let{evmAccount:o}=B(),{currentChain:s}=z(),{publicClient:n}=j(),[c,i]=_t(void 0),[h,u]=_t(!1),[l,g]=_t(null),r=Oa(void 0),a=tr(async()=>{e&&(u(!0),g(null));try{let d=await Pa(e,{chainId:t,currentChain:s,publicClient:n,evmAccount:o});return i(d),d}catch(d){let m=d instanceof Error?d:new Error("Simulation failed");throw g(m),m}finally{e&&u(!1)}},[e,t,s,n,o]);Wa(()=>{if(e)return r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{a().catch(()=>{})},300),()=>{r.current&&clearTimeout(r.current)}},[e,a]);let p=tr(()=>{i(void 0),g(null),u(!1)},[]);return{result:c,isSimulating:h,error:l,simulate:a,reset:p}}function La(e){let{evmAccount:t,isConnected:o}=B(),{currentChain:s}=z(),n=e.token.chainId??(s?Na(s)??void 0:void 0),c=Ma(()=>{if(!(!o||!t))try{let h=e.token.decimals;if(h===void 0)return;let u=Da(e.amount,h),l=_a(e.to,u);return{to:e.token.address,data:l,value:"0"}}catch{return}},[e.token.address,e.token.decimals,e.to,e.amount,t,o]),i=Dt(c,n);return{result:c?i.result:void 0,isSimulating:!!c&&i.isSimulating,error:c?i.error:null,reSimulate:i.simulate,reset:i.reset}}import{useState as Mt,useCallback as Va,useRef as Lt}from"react";import{useState as Ve,useEffect as Ba,useCallback as nr,useRef as Fa}from"react";import{createContext as Ka,useContext as Ha}from"react";var rr=Ka(null);function xe(){return Ha(rr)}function qa(e,t,o){let s=xe(),n=o??s,[c,i]=Ve(null),[h,u]=Ve(!1),[l,g]=Ve(!1),[r,a]=Ve(null),p=Fa(void 0),d=nr(async()=>{if(!(!n||!e)){u(!0),a(null);try{await n.refreshTx(e,t);let E=n.getTxStatus(e,t);E&&i(E)}catch(E){a(E instanceof Error?E:new Error(String(E)))}finally{u(!1)}}},[n,e,t]),m=nr(()=>{!n||!e||(n.stopWatching(e,t),g(!1))},[n,e,t]);Ba(()=>{if(!n||!e||!t){i(null),g(!1);return}p.current&&p.current!==e&&n.stopWatching(p.current),p.current=e;let E=!1;g(!0),u(!0),a(null);let A=n.getTxStatus(e,t);A&&(i(A),u(!1)),n.watchTx(e,t,{}).then(w=>{E||(i(w),u(!1))}).catch(w=>{E||(a(w instanceof Error?w:new Error(String(w))),u(!1))});let y=w=>{E||i({...w})};return n.on("statusChange",y),()=>{E=!0,g(!1),n.off("statusChange",y)}},[n,e,t]);let C=c?.status??"idle";return{entry:c,status:C,isLoading:h,isWatching:l,error:r,refresh:d,stopWatching:m}}function za(e){let t=xe(),o=e??t,[s,n]=Mt(null),[c,i]=Mt(null),[h,u]=Mt(null),l=Lt(null),g=Lt(null),r=Lt(null);o&&(g.current||(g.current=p=>{i(p),(!l.current||p.createdAt>=l.current.createdAt)&&(n(p),l.current=p)},o.on("confirmed",g.current)),r.current||(r.current=p=>{u(p),(!l.current||p.createdAt>=l.current.createdAt)&&(n(p),l.current=p)},o.on("failed",r.current)));let a=Va(()=>{n(null),i(null),u(null),l.current=null},[]);return{lastTx:s,lastConfirmedTx:c,lastFailedTx:h,clear:a}}import{useCallback as Xa}from"react";import{useCallback as ja,useEffect as or,useMemo as $a,useRef as sr,useState as Bt}from"react";import{getResolver as Ga}from"@naculus/connect-appkit-core";function ze({input:e,skip:t=!1,resolverConfig:o,scope:s,query:n}){let[c,i]=Bt(null),[h,u]=Bt(!1),[l,g]=Bt(null),r=sr(0),a=sr(!0);or(()=>(a.current=!0,()=>{a.current=!1}),[]);let p=$a(()=>Ga(o),[o]),d=ja(()=>{let m=e.trim();if(!m||t){r.current+=1,i(null),u(!1),g(null);return}let C=++r.current;u(!0),g(null),n(p,m,s).then(E=>{!a.current||C!==r.current||(i(E),u(!1))}).catch(E=>{!a.current||C!==r.current||(g(E instanceof Error?E:new Error(String(E))),i(null),u(!1))})},[e,t,s,p,n]);return or(()=>{d()},[d]),{data:c,isLoading:h,error:l,refetch:d}}function Qa(e,t){let o=Xa((s,n,c)=>s.lookupAddress(n,c),[]);return ze({input:e,skip:t?.skip,resolverConfig:t?.resolverConfig,scope:t?.chainId,query:o})}import{useState as ar,useCallback as Q,useMemo as Ya,useEffect as ir,useRef as lr}from"react";import{addInAppNotification as Ja,channelsUpdate as Za,clearOneInAppNotification as ei,createNotificationSettingsStorage as cr,DEFAULT_NOTIFICATION_SETTINGS as ti,loadNotificationSettings as ni,mutedChainSettings as ur,saveNotificationSettings as pr,replayNotificationSettings as ri,updateNotificationSettings as oi}from"@naculus/connect-appkit-core";import{InAppChannel as si}from"@naculus/connect-core";function ai(e){let t=lr(null);t.current||(t.current=e?.channel??new si);let o=t.current,[s,n]=ar(()=>o.getHistory()),[c,i]=ar(()=>ti),h=lr([]);ir(()=>{let y=e?.storage??cr(),w=R=>{let k=h.current??[];if(h.current=null,k.length===0){R&&i(R);return}i(()=>{let T=ri(R,k);return pr(y,T),T})};ni(y).then(w,()=>w(null))},[]),ir(()=>(o.onNotification=y=>{n(w=>[...w,y])},o.restore().then(()=>{n(o.getHistory())}),()=>{o.onNotification=void 0}),[]);let u=Ya(()=>s.filter(y=>!y.read).length,[s]),l=Q(()=>{o.clear(),n([])},[o]),g=Q(y=>{ei(o,y).then(()=>{n(o.getHistory())})},[o]),r=Q(y=>{o.markAsRead(y),n(w=>w.map(R=>R.id===y?{...R,read:!0}:R))},[o]),a=Q(()=>{o.markAllAsRead(),n(y=>y.map(w=>({...w,read:!0})))},[o]),p=Q(y=>{Ja(o,y)},[o]),d=Q(y=>{h.current?.push(y),i(w=>{let R=oi(w,y(w)),k=e?.storage??cr();return pr(k,R),R})},[e?.storage]),m=Q(y=>d(()=>y),[d]),C=Q(y=>{m(Za(y))},[m]),E=Q(y=>{d(w=>ur(w,y,!0))},[d]),A=Q(y=>{d(w=>ur(w,y,!1))},[d]);return{notifications:s,unreadCount:u,addNotification:p,clear:l,clearOne:g,markAsRead:r,markAllAsRead:a,settings:c,updateSettings:m,setChannels:C,muteChain:E,unmuteChain:A}}import{useCallback as Ft,useSyncExternalStore as ii}from"react";var dr=()=>null,li=()=>()=>{};function ci(){let{client:e}=U(),t=N(e)?.passphraseGate??null,o=ii(t?.subscribe??li,t?.getSnapshot??dr,dr),s=Ft(i=>t?.submit(i),[t]),n=Ft(()=>t?.cancel(),[t]),c=Ft(i=>t?.forget(i),[t]);return{request:o,submit:s,cancel:n,forget:c,isUnlocked:t?.isUnlocked??!1,gate:t}}import{useCallback as ui}from"react";function pi(e,t){let o=ui((s,n)=>s.resolveName(n),[]);return ze({input:e,skip:t?.skip,resolverConfig:t?.resolverConfig,query:o})}import{assertHexSignature as Kt,bareEvmAddress as di,buildSmartAccountConfig as mi,resolveUserOpChain as fi}from"@naculus/connect-appkit-core";import{WalletError as ue}from"@naculus/connect-core";import{useCallback as mr,useEffect as fr,useRef as gr,useState as Ae}from"react";async function gi(e,t,o,s,n){let c=N(t);if(!c)throw new ue("wallet_unavailable","Client not initialized");let i=[o,s];if(e.walletType==="eip6963"||e.id?.startsWith("eip6963-")){let{eip6963Connector:h}=await import("@naculus/connector-evm-injected"),u=h.getDiscoveredWallets().find(g=>g.id===e.walletId),l=u?await u.provider.request({method:"personal_sign",params:i}):await h.request({method:"personal_sign",params:i});return Kt(l)}if(e.walletType==="walletconnect")return Kt(await c.connector.request({method:"personal_sign",params:i}));if(e.walletType==="embedded"){let h=c.embeddedConnector;if(!h?.signHash)throw new ue("method_unsupported","This embedded wallet build cannot sign a raw digest. Upgrade @naculus/connector-embedded or pass an explicit signer.");return Kt(await h.signHash(e,o))}throw e.walletType==="passkeys"?new ue("method_unsupported","Passkeys sign with P-256, which a SimpleAccount cannot verify. Use a smart account with a WebAuthn validator, or pass an explicit signer."):new ue("method_unsupported",`Raw UserOperation signing is not available for ${e.walletType} on ${n}. Pass a signer that signs the raw 32-byte hash.`)}function hi(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=U(),[c,i]=Ae(null),[h,u]=Ae(null),[l,g]=Ae(!1),[r,a]=Ae(!1),[p,d]=Ae(null),m=gr(0),C=gr(!1);fr(()=>()=>{m.current+=1,C.current=!1},[]),fr(()=>{m.current+=1,C.current=!1,i(null),u(null),g(!1),a(!1),d(null)},[n,s,t,e?.accountType,e?.bundlerUrl,e?.chainId,e?.entryPoint,e?.owner,e?.rpcUrl,e?.salt,e?.signerMode,o]);let E=mr(async(y,w)=>{let R=b=>(d(b),null);if(!e?.rpcUrl)return R(new Error("RPC URL not configured"));if(!e.bundlerUrl)return R(new Error("Bundler URL not configured"));if(!y.length)return R(new Error("At least one call is required"));if(C.current)return R(new Error("A UserOperation is already in progress"));let k=di(e.owner??t);if(!k)return R(new ue("wallet_unavailable","No EVM account found"));let T;try{T=fi(e.chainId,s)}catch(b){return R(b)}if(!e.signer&&!o)return R(new ue("wallet_unavailable","No active session"));let v=++m.current;C.current=!0,g(!0),a(!0),d(null),i(null),u(null);try{let{SmartAccountManager:b}=await import("@naculus/connect-core"),I=e.signer??(f=>gi(o,n,f,k,T)),W=new b({rpcUrl:e.rpcUrl,bundlerClient:{url:e.bundlerUrl},chainId:T,signer:I,signerMode:e.signer?e.signerMode??"eip191":"raw"}),_=mi(k,T,e),D=await W.sendUserOperation(_,y,w);return v!==m.current?null:(a(!1),i(D.userOpHash),W.getUserOperationReceipt(D.userOpHash).then(f=>{v===m.current&&u(f)}).catch(()=>{}),D)}catch(b){if(v!==m.current)return null;let I=b instanceof Error?b:new Error("Failed to send UserOperation");return d(I),null}finally{C.current=!1,v===m.current&&(g(!1),a(!1))}},[n,s,t,e,o]),A=mr(()=>{m.current+=1,i(null),u(null),g(!1),a(!1),d(null)},[]);return{sendUserOp:E,userOpHash:c,receipt:h,isPending:l,isEstimating:r,error:p,reset:A}}import{useSyncExternalStore as yi,useCallback as hr}from"react";function Ci(e,t){if(!e)return()=>{};let o=()=>t();return e.on("sessionConnected",o),e.on("sessionDisconnected",o),e.on("chainChanged",o),e.on("sessionScopeChanged",o),e.on("sessionRevoked",o),()=>{e.off("sessionConnected",o),e.off("sessionDisconnected",o),e.off("chainChanged",o),e.off("sessionScopeChanged",o),e.off("sessionRevoked",o)}}var Ht=Object.freeze({session:null,chainSessions:[],activeChainId:null,isConnected:!1,connectorId:null}),qt=new WeakMap;function Si(e,t){if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0}function Ei(e){if(!e)return Ht;let t=e.getActiveBundle(),o=qt.get(e);if(!t)return o&&o.session===null?o:(qt.set(e,Ht),Ht);let s=Array.from(t.chainSessions.values());if(o&&o.session===t.walletSession&&o.activeChainId===t.activeChainId&&Si(o.chainSessions,s))return o;let n={session:t.walletSession,chainSessions:s,activeChainId:t.activeChainId,isConnected:!0,connectorId:t.walletSession.walletType};return qt.set(e,n),n}function wi(e){let t=U(),o=e??t.sessionManager??null,s=hr(c=>Ci(o,c),[o]),n=hr(()=>Ei(o),[o]);return yi(s,n)}import{defaultSiwxDomain as ki,defaultSiwxUri as vi}from"@naculus/connect-appkit-core";import{WalletError as je}from"@naculus/connect-core";import{createSiwxMessage as xi,generateNonce as Ai,getBlockchainName as bi,issueNonce as Ri,nowISO as Ti}from"@naculus/siwx";import{useCallback as yr,useState as Cr}from"react";var Ii=86400;function Vt(){let{session:e,chainId:t,client:o}=U(),[s,n]=Cr(!1),[c,i]=Cr(null),h=yr(()=>i(null),[]);return{signIn:yr(async l=>{if(!e)throw new je("wallet_unavailable","No active session");let g=l?.chainId??t;if(!g)throw new je("invalid_chain","No chain to sign for. Connect a wallet or pass options.chainId.");let r=se(e,g);if(!r)throw new je("wallet_unavailable","No account found");let a=N(o);if(!a)throw new je("wallet_unavailable","Client not initialized");let{address:p}=r,d=typeof window>"u"?void 0:window.location,m=l?.domain??ki(d),C=l?.uri??vi(d);n(!0),i(null);try{let E=Ai();await Ri(E);let A=Ti(),y=l?.expirySeconds??Ii,w=new Date(Date.now()+y*1e3).toISOString(),R=xi({domain:m,address:p,uri:C,version:1,chainId:g,nonce:E,issuedAt:A,expirationTime:w,statement:l?.statement,resources:l?.resources,requestId:l?.requestId}),k=await a.signMessage(e,{message:R,address:p,chainId:g??void 0}),T={message:{raw:R,domain:m,address:p,statement:l?.statement??null,uri:C,version:1,chainId:g,nonce:E,issuedAt:A,blockchain:bi(g),expirationTime:w,notBefore:null,resources:l?.resources??[],requestId:l?.requestId??null},signature:k};return n(!1),T}catch(E){let A=E instanceof Error?E:new Error("SIWx sign-in failed");throw i(A),n(!1),A}},[e,t,o]),isSigningIn:s,error:c,clearError:h}}import{siwxResultToSession as Sr}from"@naculus/connect-appkit-core";import{logger as zt}from"@naculus/connect-core";import{checkSessionExpired as Er,createLocalStorageSiwxSessionStorage as Ui}from"@naculus/siwx";import{useCallback as $e,useEffect as wr,useRef as Pi,useState as Ge}from"react";function Wi(e){let{storagePrefix:t="naculus_",autoRestore:o=!0,defaultExpirySeconds:s=86400}=e??{},[n,c]=Ge(null),[i,h]=Ge(o),[u,l]=Ge(!1),[g,r]=Ge(null),{chainId:a}=U(),p=Vt(),d=Pi(Ui(`${t}siwx_session`)),m=$e(()=>r(null),[]);wr(()=>{if(!o){h(!1);return}let k=!1;return(async()=>{try{let v=await d.current.get();if(k)return;v?(zt.info("react/useSIWxSession","Restored persisted SIWx session"),c(v),r(null)):c(null)}catch(T){zt.warn("react/useSIWxSession","Failed to restore SIWx session:",T),c(null)}finally{k||h(!1)}})(),()=>{k=!0}},[o]),wr(()=>{if(!n?.expiresAt)return;let k=new Date(n.expiresAt).getTime()-Date.now();if(k<=0){c(null);return}let T=setTimeout(()=>{c(v=>v&&v.id===n.id?null:v)},k);return()=>clearTimeout(T)},[n?.id,n?.expiresAt]);let C=$e(async k=>{l(!0),r(null);try{let T={expirySeconds:s,chainId:a??void 0,...k},v=await p.signIn(T),b=Sr(v);return await d.current.set(b),c(b),l(!1),b}catch(T){let v=T instanceof Error?T:new Error("SIWx sign-in failed");throw r(v),l(!1),v}},[p,a,s]),E=$e(async()=>{try{await d.current.remove()}catch(k){zt.warn("react/useSIWxSession","Failed to clear session:",k)}c(null),r(null)},[]),A=$e(async()=>{if(!n)throw new Error("No active session to refresh");l(!0),r(null);try{let k=await p.signIn({domain:n.domain,statement:n.message.statement??void 0,uri:n.message.uri,chainId:n.chainId,expirySeconds:s,resources:n.message.resources.length>0?n.message.resources:void 0,requestId:n.message.requestId??void 0}),T={...Sr(k),id:n.id,refreshedAt:new Date().toISOString()};return await d.current.set(T),c(T),l(!1),T}catch(k){let T=k instanceof Error?k:new Error("Session refresh failed");throw r(T),l(!1),T}},[n,p,s]),y=n!==null&&!Er(n),w=Er(n),R=n?.expiresAt?Math.max(0,new Date(n.expiresAt).getTime()-Date.now()):null;return{session:y?n:null,isAuthenticated:y,isRestoring:i,isSigningIn:u,isExpired:w,timeUntilExpiry:R,signIn:C,signOut:E,refresh:A,error:g,clearError:m}}import{defaultSiwxDomain as Oi,defaultSiwxUri as Ni}from"@naculus/connect-appkit-core";import{WalletError as Xe}from"@naculus/connect-core";import{createSiwxMessage as _i,generateNonce as Di,getBlockchainName as Mi,issueNonce as Li,nowISO as Bi}from"@naculus/siwx";import{useCallback as kr,useState as jt}from"react";function be(){let{session:e,chainId:t,client:o}=U(),[s,n]=jt(!1),[c,i]=jt(null),[h,u]=jt(null),l=kr(()=>u(null),[]);return{signIn:kr(async r=>{if(!e)throw new Xe("wallet_unavailable","No active session");let a=r?.chainId??t;if(!a)throw new Xe("invalid_chain","No chain to sign for. Connect a wallet or pass options.chainId.");let p=se(e,a);if(!p)throw new Xe("wallet_unavailable","No account found");let d=N(o);if(!d)throw new Xe("wallet_unavailable","Client not initialized");let{address:m}=p,C=typeof window>"u"?void 0:window.location,E=r?.domain??Oi(C),A=r?.uri??Ni(C);n(!0),u(null);try{let y=Di();await Li(y);let w=Bi(),R=_i({domain:E,address:m,uri:A,version:1,chainId:a,nonce:y,issuedAt:w,statement:r?.statement,expirationTime:r?.expirySeconds?new Date(Date.now()+r.expirySeconds*1e3).toISOString():void 0,resources:r?.resources,requestId:r?.requestId}),k=await d.signMessage(e,{message:R,address:m,chainId:a??void 0}),T=r?.expirySeconds?new Date(Date.now()+r.expirySeconds*1e3).toISOString():null,v={message:{raw:R,domain:E,address:m,statement:r?.statement??null,uri:A,version:1,chainId:a,nonce:y,issuedAt:w,blockchain:Mi(a),expirationTime:T,notBefore:null,resources:r?.resources??[],requestId:r?.requestId??null},signature:k};return i(v),v}catch(y){let w=y instanceof Error?y:new Error("SIWx sign-in failed");throw u(w),w}finally{n(!1)}},[e,t,o]),isSigningIn:s,result:c,error:h,clearError:l}}import{WalletError as $t}from"@naculus/connect-core";import{useCallback as vr}from"react";function Fi(){let{session:e,chainId:t}=U();return vr(o=>{if(!e)throw new $t("wallet_unavailable","No active session");let s=o??t;if(s&&!s.startsWith("eip155:"))throw new $t("namespace_mismatch",`Ethereum SIWx requires an eip155 chain, received ${s}`);let n=e.namespaces.eip155;if(!n||n.accounts.length===0)throw new $t("namespace_mismatch","No EVM (eip155) accounts found in session")},[e,t])}function Ki(){let e=Fi(),t=be();return{signIn:vr(async s=>(e(s?.chainId),t.signIn(s)),[e,t.signIn]),isSigningIn:t.isSigningIn,result:t.result,error:t.error,clearError:t.clearError}}import{resolveSimulationEndpoint as Hi}from"@naculus/connect-appkit-core";import{SimulationManager as qi}from"@naculus/wallet-engine";import{useCallback as Gt,useRef as Vi,useState as Xt}from"react";function zi(e){let t=e?.rpcUrl,o=e?.chainId,s=Vi(null),n=Gt(()=>(s.current||(s.current=new qi({enabled:!0,rpcUrl:t,autoSimulate:!1})),s.current),[t]),[c,i]=Xt(null),[h,u]=Xt(!1),[l,g]=Xt(null),r=Gt(async(p,d,m,C,E)=>{u(!0),g(null);try{let A=n(),y=Hi(E?.chainId,o,E?.rpcUrl,t),w=await A.simulateERC20Transfer(p,d,m,C,y.chainId,E?.decimals,y.rpcUrl);return i(w),w}catch(A){let y=A instanceof Error?A:new Error(String(A));throw g(y),y}finally{u(!1)}},[t,o,n]),a=Gt(()=>{i(null),g(null),u(!1)},[]);return{result:c,loading:h,error:l,simulate:r,reset:a}}import{isSiwxExpired as ji,isSiwxNotBeforeValid as $i}from"@naculus/connect-appkit-core";import{LocalStorageAdapter as Gi,logger as Qe}from"@naculus/connect-core";import{useCallback as Qt,useEffect as Xi,useRef as Qi,useState as Ye}from"react";var Je="siwx_auth";function Yi(e){return new Gi(e)}function Ji(e){let{storagePrefix:t="naculus_",autoRestore:o=!0}=e??{},[s,n]=Ye(null),[c,i]=Ye(o),[h,u]=Ye(!1),[l,g]=Ye(null),r=be(),a=Qi(Yi(t)),p=Qt(()=>g(null),[]);Xi(()=>{if(!o){i(!1);return}let C=!1;return(async()=>{try{let E=a.current,A=await E.get(Je);if(C)return;A&&!ji(A,new Date)&&$i(A,new Date)?(Qe.info("react/useSiwxAuthSession","Restored persisted SIWx auth session"),n(A),g(null)):A&&(Qe.info("react/useSiwxAuthSession","Persisted SIWx auth expired, clearing"),await E.remove(Je))}catch(E){Qe.warn("react/useSiwxAuthSession","Failed to restore SIWx auth:",E)}finally{C||i(!1)}})(),()=>{C=!0}},[o]);let d=Qt(async C=>{u(!0),g(null);try{let E=await r.signIn(C);return await a.current.set(Je,E),n(E),u(!1),E}catch(E){let A=E instanceof Error?E:new Error("SIWx sign-in failed");throw g(A),u(!1),A}},[r]),m=Qt(async()=>{try{await a.current.remove(Je)}catch(C){Qe.warn("react/useSiwxAuthSession","Failed to clear SIWx auth:",C)}n(null),g(null)},[]);return{isSignedIn:s!==null,isRestoring:c,siwxResult:s,isSigningIn:h,error:l,signIn:d,signOut:m,clearError:p}}import{bareEvmAddress as Zi,buildSmartAccountConfig as el,resolveEvmChainId as xr}from"@naculus/connect-appkit-core";import{WalletError as Rr}from"@naculus/connect-core";import{useCallback as re,useEffect as Ar,useRef as Yt,useState as Re}from"react";function br(e){return new Rr("wallet_unavailable",e)}function tl(e){let{evmAccount:t}=B(),{session:o,chainId:s,client:n}=U(),[c,i]=Re(null),[h,u]=Re(!1),[l,g]=Re(null),[r,a]=Re(!1),[p,d]=Re(null),m=Yt(null),C=Yt(0),E=Yt(!1);Ar(()=>{if(m.current=null,!e?.rpcUrl)return;let b=!1;return import("@naculus/connect-core").then(({SmartAccountManager:I})=>{if(b)return;let W=xr(e.chainId,s);W&&(m.current=new I({rpcUrl:e.rpcUrl,chainId:W,bundlerClient:{url:e.bundlerUrl??""}}))}).catch(I=>{b||d(I instanceof Error?I:new Error("Failed to load account-abstraction module"))}),()=>{b=!0}},[s,e?.rpcUrl,e?.bundlerUrl,e?.chainId]),Ar(()=>{C.current+=1,E.current=!1,i(null),u(!1),g(null),a(!1),d(null)},[t,s,e?.rpcUrl,e?.bundlerUrl,e?.chainId,e?.entryPoint,e?.accountType,e?.salt]);let A=re(()=>{let b=Zi(t);if(!b||!m.current)return null;let I=xr(e?.chainId,s);return I?el(b,I,{accountType:e?.accountType,entryPoint:e?.entryPoint,salt:e?.salt}):null},[t,s,e?.accountType,e?.chainId,e?.entryPoint,e?.salt]),y=re(b=>(d(b),null),[]),w=re(()=>E.current?null:(E.current=!0,C.current),[]),R=re(b=>{C.current===b&&(E.current=!1)},[]),k=re(async()=>{let b=A();if(!b||!m.current)return y(new Error("Smart account not configured"));let I=w();if(I===null)return y(new Error("Smart account operation already in progress"));a(!0),d(null);try{let _=await m.current.createAccount(b);return C.current!==I?null:(i(_.address),u(_.isDeployed),g(_),_)}catch(W){if(C.current!==I)return null;let _=W instanceof Error?W:new Error("Failed to create smart account");return d(_),null}finally{C.current===I&&a(!1),R(I)}},[w,y,R,A]),T=re(async()=>{let b=A();if(!b||!m.current)return y(new Error("Smart account not configured"));if(!o)return y(br("No active session"));let I=N(n);if(!I)return y(br("Client not initialized"));if(s&&s!==b.chainId)return y(new Rr("chain_mismatch",`Connected chain ${s} does not match smart account chain ${b.chainId}.`));let W=w();if(W===null)return y(new Error("Smart account operation already in progress"));a(!0),d(null);try{let _=m.current,D=await _.createAccount(b);if(C.current!==W)return null;if(D.isDeployed)return i(D.address),u(!0),g(D),D.address;let f=await _.getDeployCallData(b),S=await I.sendTransaction(o,{transaction:{to:f.to,data:f.data,value:f.value.toString()},chainId:b.chainId});if(C.current!==W)return null;let x=await _.createAccount(b);return i(x.address),u(x.isDeployed),g(x),S}catch(_){if(C.current!==W)return null;let D=_ instanceof Error?_:new Error("Failed to deploy smart account");return d(D),null}finally{C.current===W&&a(!1),R(W)}},[n,s,w,y,R,A,o]),v=re(async()=>{let b=A();if(!b||!m.current)return null;let I=C.current;try{let W=await m.current.getAccountAddress(b);return C.current!==I?null:(i(W),W)}catch(W){return C.current!==I||d(W instanceof Error?W:new Error("Failed to get smart account address")),null}},[A]);return{address:c,isDeployed:h,accountInfo:l,isLoading:r,error:p,createWallet:k,deployWallet:T,getAddress:v}}import{useMemo as nl}from"react";function Jt(){let{accounts:e,isConnected:t}=U();return nl(()=>{if(!t)return{address:null,caip10:null,chainId:null,isConnected:!1};let o=e.find(i=>i.startsWith("solana:"))??null;if(!o)return{address:null,caip10:null,chainId:null,isConnected:t};let s=o.split(":"),n=s.length>=3?s[s.length-1]:null,c=s.length>=3?s.slice(0,-1).join(":"):null;return{address:n,caip10:o,chainId:c,isConnected:t}},[e,t])}import{useCallback as rl,useEffect as Tr,useRef as ol,useState as Zt}from"react";import{getSolanaBalance as sl}from"@naculus/connect-core";function al(e={}){let{client:t}=U(),{address:o}=Jt(),s=e.address??o,n=e.rpcUrl??N(t)?.solanaRpcUrl??null,[c,i]=Zt(null),[h,u]=Zt(!1),[l,g]=Zt(null),r=ol(0),a=rl(async()=>{if(!s||!n){i(null);return}let p=++r.current;u(!0),g(null);try{let d=await sl(n,s);if(p!==r.current)return;i(d)}catch(d){if(p!==r.current)return;i(null),g(d instanceof Error?d:new Error("Balance read failed"))}finally{p===r.current&&u(!1)}},[s,n]);return Tr(()=>{a()},[a]),Tr(()=>{if(!e.refreshInterval||e.refreshInterval<=0)return;let p=setInterval(()=>{a()},e.refreshInterval);return()=>clearInterval(p)},[e.refreshInterval,a]),{balance:c,isFetching:h,error:l,isConfigured:!!n,refetch:a}}import{readSolanaRoles as il}from"@naculus/connect-appkit-core";import{useMemo as ll}from"react";function cl(){let{client:e,session:t,accounts:o}=U();return ll(()=>{let s=N(e)?.solanaConnector,{roles:n,absence:c}=il(s,t);return{roles:n,absence:c,identity:n?.identity??null,signer:n?.signer??null,payer:n?.payer??null}},[e,t,o])}import{WalletError as Ir}from"@naculus/connect-core";import{useCallback as en,useState as tn}from"react";import{getSignatureStatus as ul}from"@naculus/connect-core";function pl(){let{client:e,session:t}=U(),[o,s]=tn(!1),[n,c]=tn(!1),[i,h]=tn(null),u=()=>{let a=N(e);if(!a||!t)throw new Ir("wallet_unavailable","No connected wallet.");return a},l=en(async a=>{s(!0),h(null);try{return await u().signTransaction(t,{transaction:a})}catch(p){let d=p instanceof Error?p:new Error("Signing failed");throw h(d),d}finally{s(!1)}},[e,t]),g=en(async a=>{c(!0),h(null);try{return await u().sendTransaction(t,{transaction:a})}catch(p){let d=p instanceof Error?p:new Error("Send failed");throw h(d),d}finally{c(!1)}},[e,t]),r=en(async a=>{let p=N(e)?.solanaRpcUrl;if(!p)throw new Ir("no_rpc","Set solanaRpcUrl on the client to read a signature's status.");return ul(p,a)},[e]);return{signTransaction:l,sendTransaction:g,getStatus:r,isSigning:o,isSending:n,error:i,reset:()=>h(null)}}import{useCallback as Ur,useState as Pr}from"react";import{toChainSwitchError as dl}from"@naculus/connect-appkit-core";function ml(){let{switchChain:e,chainId:t}=U(),[o,s]=Pr(!1),[n,c]=Pr(null),i=Ur(async u=>{s(!0),c(null);try{await e(u)}catch(l){let g=dl(l);throw c(g),g}finally{s(!1)}},[e]),h=Ur(()=>{c(null)},[]);return{switchChain:i,isSwitching:o,currentChainId:t,error:n,clearError:h}}import{chainNumber as fl,resolveChain as gl,toViemChain as hl}from"@naculus/connect-appkit-core";import{useState as Ze,useEffect as nn,useCallback as Wr,useMemo as rn,useRef as yl}from"react";import{createPublicClient as Cl,http as Sl,formatUnits as El}from"viem";var wl=[{name:"balanceOf",type:"function",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"balance",type:"uint256"}]}];function kl(e){let{evmAccount:t,isConnected:o}=B(),{chainId:s,chains:n}=U(),[c,i]=Ze([]),[h,u]=Ze(!1),[l,g]=Ze(null),{tokens:r,refreshInterval:a}=e,p=yl(null),d=rn(()=>r.map(k=>k.address.toLowerCase()+"|"+k.decimals+"|"+k.symbol).join(","),[r]),m=rn(()=>gl(n,s),[s,n]),C=m?fl(m):null,E=rn(()=>m?hl(m,C):null,[m,C]),[A,y]=Ze(null);nn(()=>{if(!E||!m?.rpcUrl){y(null);return}let k=Cl({transport:Sl(m.rpcUrl),chain:E});y(k)},[m,E]);let w=Wr(async()=>{if(!t||!A||r.length===0){i([]);return}u(!0),g(null);try{let k=t.includes(":")?t.split(":").pop():t,v=(await Promise.allSettled(r.map(async b=>{try{let I=await A.readContract({address:b.address,abi:wl,functionName:"balanceOf",args:[k]});return{address:b.address,symbol:b.symbol,decimals:b.decimals,name:b.name,balance:I.toString(),formatted:El(I,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});i(v)}catch(k){g(k instanceof Error?k:new Error("Failed to fetch token balances"))}finally{u(!1)}},[t,A,d]);nn(()=>{o&&t&&r.length>0&&w()},[o,t,d,w]),nn(()=>(a&&a>0&&o&&t&&r.length>0&&(p.current=setInterval(w,a)),()=>{p.current&&(clearInterval(p.current),p.current=null)}),[a,o,t,d,w]);let R=Wr(k=>c.find(T=>T.address.toLowerCase()===k.toLowerCase()),[c]);return{tokenBalances:c,isLoading:h,error:l,refetch:w,getTokenBalance:R,chain:m}}import{useState as on,useEffect as Or,useCallback as vl,useRef as xl}from"react";function Al(e,t,o){let s=xe(),n=o??s,[c,i]=on([]),[h,u]=on(!1),[l,g]=on(null),r=xl(0),a=vl(async()=>{if(n){u(!0),g(null),r.current++;try{let d=await n.getTxHistory(e,t);i(d)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{u(!1)}}},[n,e,t]);Or(()=>{a().catch(()=>{})},[a]),Or(()=>{if(!n)return;let d=()=>{a().catch(()=>{})};return n.on("statusChange",d),()=>{n.off("statusChange",d)}},[n,a]);let p={pending:c.filter(d=>d.status==="pending").length,confirmed:c.filter(d=>d.status==="confirmed").length,failed:c.filter(d=>d.status==="failed").length};return{entries:c,isLoading:h,error:l,refresh:a,summary:p}}import{fetchUserOperationReceipt as bl,InvalidUserOperationReceiptError as Rl}from"@naculus/connect-appkit-core";import{useCallback as Te,useEffect as Nr,useRef as pe,useState as oe}from"react";function Tl(e){let t=e?.bundlerUrl,o=e?.pollInterval??2e3,s=e?.maxRetries??30,[n,c]=oe("idle"),[i,h]=oe(null),[u,l]=oe(e?.userOpHash??null),[g,r]=oe(null),[a,p]=oe(!1),[d,m]=oe(0),C=pe(0),[E,A]=oe(0),y=pe(null),w=pe(null),R=pe(0),k=pe(0),T=pe(null),v=Te(()=>{y.current&&(clearInterval(y.current),y.current=null),w.current&&(clearTimeout(w.current),w.current=null)},[]),b=Te(async(S,x)=>{if(!t||x!==R.current)return;let P=k.current+1;k.current=P,m(P);let O=new AbortController;T.current=O;let F=V=>{x===R.current&&(c("not_found"),p(!1),v(),r(V))},ne=V=>{if(x===R.current){if(P<=s){w.current=setTimeout(()=>{b(S,x)},o);return}F(V)}};try{let V=await bl(t,S,O.signal);if(x!==R.current)return;if(V){h(V),c(V.success?"confirmed":"failed"),p(!1),v();return}c("pending"),ne(new Error("UserOperation not included after maximum retries"))}catch(V){if(x!==R.current||O.signal.aborted)return;let de=V instanceof Error?V:new Error("Unknown bundler response failure");if(de instanceof Rl){F(de);return}ne(new Error(`UserOperation status unavailable after ${P} attempt${P===1?"":"s"}: ${de.message}`))}finally{T.current===O&&(T.current=null)}},[t,o,s,v]),I=Te(S=>{R.current+=1;let x=R.current;if(T.current?.abort(),T.current=null,v(),l(S),h(null),r(null),k.current=0,m(0),A(0),C.current=Date.now(),!t){c("not_found"),p(!1),r(new Error("Bundler URL not configured"));return}c("pending"),p(!0),y.current=setInterval(()=>{A(Date.now()-C.current)},1e3),b(S,x)},[t,v,b]),W=Te(()=>{R.current+=1,T.current?.abort(),T.current=null,v(),p(!1)},[v]),_=Te(()=>{R.current+=1,T.current?.abort(),T.current=null,v(),l(null),c("idle"),h(null),r(null),p(!1),k.current=0,m(0),A(0)},[v]),D=e?.userOpHash??null,f=e?.autoStart!==!1;return Nr(()=>{D&&f&&I(D)},[D,f,I]),Nr(()=>()=>{R.current+=1,T.current?.abort(),T.current=null,v()},[v]),{status:n,receipt:i,userOpHash:u,error:g,isPolling:a,elapsedMs:E,attempts:d,start:I,stop:W,reset:_}}import{validateDestination as Ol}from"@naculus/connect-appkit-core";import{useMemo as Nl}from"react";var Il={"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."},Ul={"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"},_r={en:Il,zh:Ul},sn="en";function Pl(e){sn=e}function Wl(){return sn}function an(e){return _r[sn][e]??_r.en[e]??e}function Dr(e){let{isValid:t,level:o,issue:s}=Ol(e);return{isValid:t,level:o,warning:s?an(`address.${s}`):null}}function _l({address:e}){return{validation:Nl(()=>Dr(e),[e])}}function Dl(){let{status:e,session:t,accounts:o,chainId:s,error:n,connect:c,disconnect:i,reconnect:h,switchChain:u}=U(),l=e==="connected",g=e==="connecting",r=e==="reconnecting",a=o[0]??null;return{status:e,session:t,accounts:o,chainId:s,error:n,isConnected:l,isConnecting:g,isReconnecting:r,isDisconnected:e==="disconnected",currentAccount:a,connect:c,disconnect:i,reconnect:h,switchChain:u}}import{useCallback as cn,useMemo as Br}from"react";var Mr={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"},Lr={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."},Ie="Something went wrong",Ue="An unexpected error occurred. Please try again. If the problem persists, check your connection and wallet configuration.";function Pe(e){if(!e)return{title:Ie,description:Ue};let t=e;if(t.name==="WalletError"&&t.code){let o=t.code,s=Mr[o]??Ie,n=Lr[o]??t.message??Ue;return{title:s,description:n,code:o}}if(e instanceof Error){let o=e.message;return/user rejected/i.test(o)||/rejected/.test(o)?{title:"Request Rejected",description:"The request was declined.",code:"user_rejected"}:/timeout/i.test(o)||/timed? ?out/i.test(o)?{title:"Request Timed Out",description:"The request took too long. Please try again.",code:"deeplink_timeout"}:/insufficient funds/i.test(o)?{title:"Insufficient Funds",description:"You don't have enough funds to complete this transaction.",code:"tx_failed"}:/network/i.test(o)||/chain/i.test(o)?{title:"Network Error",description:o,code:"chain_unsupported"}:{title:Ie,description:o||Ue}}return typeof e=="string"?{title:Ie,description:e||Ue}:{title:Ie,description:Ue}}function ln(e){if(e===null||typeof e!="object")return!1;let t=e;return t.name!=="WalletError"||!t.code?!1:["deeplink_timeout","session_expired","intent_expired","tx_failed"].includes(t.code)}function Ml(){let{error:e,clearError:t}=U(),o=Br(()=>e?Pe(e):null,[e]),s=Br(()=>e?ln(e):!1,[e]),n=cn(()=>{t()},[t]),c=cn(h=>Pe(h),[]),i=cn(h=>async()=>{try{return await h()}catch(u){let l=Pe(u);if(u instanceof Error){let g=u;try{g.title=l.title,g.friendlyMessage=l.description,g.code===void 0&&l.code!==void 0&&(g.code=l.code)}catch{}throw g}throw Object.assign(new Error(l.description,{cause:u}),{title:l.title,code:l.code,friendlyMessage:l.description})}},[]);return{error:e,friendlyError:o,clearError:n,isRetryable:s,formatError:c,wrapAsync:i}}import{useState as et,useEffect as Ll,useCallback as Fr,useRef as Bl}from"react";import{TokenListManager as Fl}from"@naculus/connect-core";import{eip155ChainIdToNumber as Kr}from"@naculus/connect-appkit-core";function tt(e,t){let o=Bl(null),[s,n]=et([]),[c,i]=et(t?.autoLoad!==!1),[h,u]=et(!1),[l,g]=et(null);if(!o.current){let p={};t?.sources&&(p.sources=t.sources),o.current=new Fl(p)}let r=Fr(async()=>{let p=o.current;if(p){i(!0),g(null);try{await p.load();let d=e?Kr(e):void 0,m=p.getTokens(d!==void 0?{chainId:d}:void 0);n(m),u(!0)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{i(!1)}}},[e]),a=Fr(async()=>{let p=o.current;if(p){i(!0),g(null);try{await p.refresh();let d=e?Kr(e):void 0,m=p.getTokens(d!==void 0?{chainId:d}:void 0);n(m),u(!0)}catch(d){g(d instanceof Error?d:new Error(String(d)))}finally{i(!1)}}},[e]);return Ll(()=>{t?.autoLoad!==!1&&r()},[r,t?.autoLoad]),{tokens:s,isLoading:c,isLoaded:h,error:l,refetch:a}}import{useState as qr,useEffect as jl,useRef as $l}from"react";import{TokenListManager as Gl}from"@naculus/connect-core";import{ETHEREUM_MAINNET_TOKENS as Kl,POLYGON_TOKENS as Hl,OPTIMISM_TOKENS as ql,ARBITRUM_TOKENS as Vl,BASE_TOKENS as zl}from"@naculus/connect-core";function Hr(){return[{name:"built-in",tokens:[...Kl,...Hl,...ql,...Vl,...zl],enabled:!0},{name:"uniswap-default",url:"https://tokens.uniswap.org",enabled:!0,refreshInterval:1440*60*1e3}]}import{eip155ChainIdToNumber as Xl}from"@naculus/connect-appkit-core";var Ql=300,nt=null;function Yl(){return nt||(nt=new Gl({sources:Hr()}),nt.load().catch(()=>{})),nt}function rt(e,t){let[o,s]=qr({exact:[],fuzzy:[],hasMore:!1}),[n,c]=qr(!1),i=$l(null),h=e.trim();return jl(()=>{if(!h){s({exact:[],fuzzy:[],hasMore:!1}),c(!1);return}return i.current&&clearTimeout(i.current),c(!0),i.current=setTimeout(()=>{let u=Yl(),l=t?Xl(t):void 0,g=u.search(h,{chainId:l,limit:20});s(g),c(!1)},Ql),()=>{i.current&&clearTimeout(i.current)}},[h,t]),{results:o,isSearching:n}}import un,{useCallback as Jl}from"react";import{Fragment as Zl,jsx as $,jsxs as G}from"react/jsx-runtime";function Vr({chainId:e,onSelect:t,onClose:o,options:s}){let[n,c]=un.useState(""),{tokens:i,isLoading:h,error:u}=tt(e),{results:l,isSearching:g}=rt(n,n?e:void 0),r=s?.showRecommendations??!0,a=un.useMemo(()=>{if(n.trim()){let C=[...l.exact,...l.fuzzy].map(E=>E.token);return s?.filter?C.filter(s.filter):C}let m=i;return s?.filter?m.filter(s.filter):m},[n,l,i,s?.filter]),p=un.useMemo(()=>!r||n.trim()?[]:i.slice(0,6),[i,r,n]),d=Jl(m=>{t(m),o()},[t,o]);return G("div",{style:{background:"hsl(var(--background))",borderRadius:"12px",padding:"16px",color:"hsl(var(--foreground))",minWidth:"320px",maxWidth:"400px",fontFamily:"system-ui, sans-serif"},children:[G("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"12px"},children:[$("h3",{style:{margin:0,fontSize:"16px",fontWeight:600},children:"Select Token"}),$("button",{type:"button",onClick:o,style:{background:"none",border:"none",color:"hsl(var(--muted-foreground))",cursor:"pointer",fontSize:"18px",padding:"4px 8px"},children:"\u2715"})]}),$("input",{type:"text",placeholder:"Search token name or paste address",value:n,onChange:m=>c(m.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}),h&&!g&&$("div",{style:{textAlign:"center",padding:"20px",color:"hsl(var(--muted-foreground))"},children:"Loading tokens..."}),u&&G("div",{style:{textAlign:"center",padding:"12px",color:"hsl(var(--destructive))",fontSize:"13px"},children:["Error: ",u.message]}),r&&p.length>0&&!n.trim()&&G("div",{style:{marginBottom:"12px"},children:[$("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"8px"},children:"Popular"}),$("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap"},children:p.map(m=>G("button",{type:"button",onClick:()=>d(m),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:[m.logoURI?$("img",{src:m.logoURI,alt:"",style:{width:"16px",height:"16px",borderRadius:"50%"},onError:C=>{C.target.style.display="none"}}):null,m.symbol]},`${m.chainId}:${m.address}`))})]}),n.trim()&&!h&&$("div",{style:{fontSize:"11px",color:"hsl(var(--muted-foreground))",marginBottom:"8px"},children:a.length>0?G(Zl,{children:[l.exact.length," exact, ",l.fuzzy.length," fuzzy",l.hasMore?" (more available)":""]}):"No results found"}),$("div",{style:{maxHeight:"320px",overflowY:"auto",display:"flex",flexDirection:"column",gap:"2px"},children:a.map(m=>G("button",{type:"button",onClick:()=>d(m),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:C=>{C.target.style.background="hsl(var(--card))"},onMouseLeave:C=>{C.target.style.background="transparent"},children:[$("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:m.logoURI?$("img",{src:m.logoURI,alt:m.symbol,style:{width:"100%",height:"100%"},onError:C=>{let E=C.target;E.style.display="none",E.parentElement.textContent=m.symbol.slice(0,2)}}):m.symbol.slice(0,2)}),G("div",{style:{flex:1,minWidth:0},children:[$("div",{style:{fontWeight:600,fontSize:"14px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m.symbol}),$("div",{style:{fontSize:"12px",color:"hsl(var(--muted-foreground))",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:m.name})]}),G("div",{style:{fontSize:"11px",color:"#666",textAlign:"right",flexShrink:0},children:[G("div",{children:[m.decimals," decimals"]}),G("div",{children:["Chain ",m.chainId]})]})]},`${m.chainId}:${m.address}`))})]})}import{createComponent as M}from"@stencil/react-output-target/runtime";import L from"react";import{AppkitAccordion as ec,defineCustomElement as tc}from"@naculus/connect-appkit-wc/dist/components/appkit-accordion.js";import{AppkitAccountButton as nc,defineCustomElement as rc}from"@naculus/connect-appkit-wc/dist/components/appkit-account-button.js";import{AppkitAlertDialog as oc,defineCustomElement as sc}from"@naculus/connect-appkit-wc/dist/components/appkit-alert-dialog.js";import{AppkitAvatar as ac,defineCustomElement as ic}from"@naculus/connect-appkit-wc/dist/components/appkit-avatar.js";import{AppkitBadge as lc,defineCustomElement as cc}from"@naculus/connect-appkit-wc/dist/components/appkit-badge.js";import{AppkitButton as uc,defineCustomElement as pc}from"@naculus/connect-appkit-wc/dist/components/appkit-button.js";import{AppkitCardContent as dc,defineCustomElement as mc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-content.js";import{AppkitCardDescription as fc,defineCustomElement as gc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-description.js";import{AppkitCardFooter as hc,defineCustomElement as yc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-footer.js";import{AppkitCardHeader as Cc,defineCustomElement as Sc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-header.js";import{AppkitCardTitle as Ec,defineCustomElement as wc}from"@naculus/connect-appkit-wc/dist/components/appkit-card-title.js";import{AppkitCard as kc,defineCustomElement as vc}from"@naculus/connect-appkit-wc/dist/components/appkit-card.js";import{AppkitCheckbox as xc,defineCustomElement as Ac}from"@naculus/connect-appkit-wc/dist/components/appkit-checkbox.js";import{AppkitCollapsible as bc,defineCustomElement as Rc}from"@naculus/connect-appkit-wc/dist/components/appkit-collapsible.js";import{AppkitConnectButton as Tc,defineCustomElement as Ic}from"@naculus/connect-appkit-wc/dist/components/appkit-connect-button.js";import{AppkitDialog as Uc,defineCustomElement as Pc}from"@naculus/connect-appkit-wc/dist/components/appkit-dialog.js";import{AppkitDropdownMenu as Wc,defineCustomElement as Oc}from"@naculus/connect-appkit-wc/dist/components/appkit-dropdown-menu.js";import{AppkitInput as Nc,defineCustomElement as _c}from"@naculus/connect-appkit-wc/dist/components/appkit-input.js";import{AppkitPopover as Dc,defineCustomElement as Mc}from"@naculus/connect-appkit-wc/dist/components/appkit-popover.js";import{AppkitProgress as Lc,defineCustomElement as Bc}from"@naculus/connect-appkit-wc/dist/components/appkit-progress.js";import{AppkitScrollArea as Fc,defineCustomElement as Kc}from"@naculus/connect-appkit-wc/dist/components/appkit-scroll-area.js";import{AppkitSelect as Hc,defineCustomElement as qc}from"@naculus/connect-appkit-wc/dist/components/appkit-select.js";import{AppkitSeparator as Vc,defineCustomElement as zc}from"@naculus/connect-appkit-wc/dist/components/appkit-separator.js";import{AppkitSkeleton as jc,defineCustomElement as $c}from"@naculus/connect-appkit-wc/dist/components/appkit-skeleton.js";import{AppkitSwitch as Gc,defineCustomElement as Xc}from"@naculus/connect-appkit-wc/dist/components/appkit-switch.js";import{AppkitTabs as Qc,defineCustomElement as Yc}from"@naculus/connect-appkit-wc/dist/components/appkit-tabs.js";import{AppkitToggleGroup as Jc,defineCustomElement as Zc}from"@naculus/connect-appkit-wc/dist/components/appkit-toggle-group.js";import{AppkitTooltip as eu,defineCustomElement as tu}from"@naculus/connect-appkit-wc/dist/components/appkit-tooltip.js";var nu=M({tagName:"appkit-accordion",elementClass:ec,react:L,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:tc}),ru=M({tagName:"appkit-account-button",elementClass:nc,react:L,events:{},defineCustomElement:rc}),ou=M({tagName:"appkit-alert-dialog",elementClass:oc,react:L,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:sc}),su=M({tagName:"appkit-avatar",elementClass:ac,react:L,events:{},defineCustomElement:ic}),au=M({tagName:"appkit-badge",elementClass:lc,react:L,events:{},defineCustomElement:cc}),iu=M({tagName:"appkit-button",elementClass:uc,react:L,events:{},defineCustomElement:pc}),lu=M({tagName:"appkit-card",elementClass:kc,react:L,events:{},defineCustomElement:vc}),cu=M({tagName:"appkit-card-content",elementClass:dc,react:L,events:{},defineCustomElement:mc}),uu=M({tagName:"appkit-card-description",elementClass:fc,react:L,events:{},defineCustomElement:gc}),pu=M({tagName:"appkit-card-footer",elementClass:hc,react:L,events:{},defineCustomElement:yc}),du=M({tagName:"appkit-card-header",elementClass:Cc,react:L,events:{},defineCustomElement:Sc}),mu=M({tagName:"appkit-card-title",elementClass:Ec,react:L,events:{},defineCustomElement:wc}),fu=M({tagName:"appkit-checkbox",elementClass:xc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Ac}),gu=M({tagName:"appkit-collapsible",elementClass:bc,react:L,events:{onAppkitToggle:"appkitToggle"},defineCustomElement:Rc}),hu=M({tagName:"appkit-connect-button",elementClass:Tc,react:L,events:{onAppkitConnect:"appkitConnect",onAppkitDisconnect:"appkitDisconnect",onAppkitStartPairing:"appkitStartPairing",onAppkitRetry:"appkitRetry",onAppkitCancelPairing:"appkitCancelPairing",onAppkitMobileDeepLink:"appkitMobileDeepLink",onAppkitCopyAddress:"appkitCopyAddress"},defineCustomElement:Ic}),yu=M({tagName:"appkit-dialog",elementClass:Uc,react:L,events:{onAppkitClose:"appkitClose",onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:Pc}),Cu=M({tagName:"appkit-dropdown-menu",elementClass:Wc,react:L,events:{onAppkitSelect:"appkitSelect"},defineCustomElement:Oc}),Su=M({tagName:"appkit-input",elementClass:Nc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:_c}),Eu=M({tagName:"appkit-popover",elementClass:Dc,react:L,events:{onAppkitOpenChange:"appkitOpenChange"},defineCustomElement:Mc}),wu=M({tagName:"appkit-progress",elementClass:Lc,react:L,events:{},defineCustomElement:Bc}),ku=M({tagName:"appkit-scroll-area",elementClass:Fc,react:L,events:{},defineCustomElement:Kc}),vu=M({tagName:"appkit-select",elementClass:Hc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:qc}),xu=M({tagName:"appkit-separator",elementClass:Vc,react:L,events:{},defineCustomElement:zc}),Au=M({tagName:"appkit-skeleton",elementClass:jc,react:L,events:{},defineCustomElement:$c}),bu=M({tagName:"appkit-switch",elementClass:Gc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Xc}),Ru=M({tagName:"appkit-tabs",elementClass:Qc,react:L,events:{onAppkitTabChange:"appkitTabChange"},defineCustomElement:Yc}),Tu=M({tagName:"appkit-toggle-group",elementClass:Jc,react:L,events:{onAppkitChange:"appkitChange"},defineCustomElement:Zc}),Iu=M({tagName:"appkit-tooltip",elementClass:eu,react:L,events:{},defineCustomElement:tu});export{nu as AppkitAccordion,ru as AppkitAccountButton,ou as AppkitAlertDialog,su as AppkitAvatar,au as AppkitBadge,iu as AppkitButton,lu as AppkitCard,cu as AppkitCardContent,uu as AppkitCardDescription,pu as AppkitCardFooter,du as AppkitCardHeader,mu as AppkitCardTitle,fu as AppkitCheckbox,gu as AppkitCollapsible,hu as AppkitConnectButton,yu as AppkitDialog,Cu as AppkitDropdownMenu,Su as AppkitInput,Eu as AppkitPopover,wu as AppkitProgress,ku as AppkitScrollArea,vu as AppkitSelect,xu as AppkitSeparator,Au as AppkitSkeleton,bu as AppkitSwitch,Ru as AppkitTabs,Tu as AppkitToggleGroup,Iu as AppkitTooltip,kn as DEFAULT_EVM_CHAINS,Ry as LAMPORTS_PER_SOL,Ty as PassphraseCancelledError,Iy as PassphraseGate,Py as SolanaRpcError,Vr as TokenSelector,rr as TxMonitorContext,Lr as WALLET_ERROR_DESCRIPTIONS,Mr as WALLET_ERROR_TITLES,ko as Web3ConnectProvider,mt as Web3Context,Gs as buildDelegationPolicyMessage,Jr as clearClient,ut as createClient,vy as formatSol,uo as getChainById,pt as getClient,dt as getDefaultChains,xy as getLatestBlockhash,Wl as getLocale,Ay as getSignatureStatus,by as getSolanaBalance,Pe as getUserFriendlyError,ln as isRetryableError,Uy as parseSol,Bs as resetSessionKeyManager,Pl as setLocale,an as t,B as useAccount,To as useAuthorizations,Lo as useBalance,Ct as useCapabilities,z as useChain,fn as useCompareCosts,Qo as useConnect,Ds as useCreateSessionKey,ss as useDelegate,Se as useDelegation,$s as useDelegationPolicy,Ys as useDisconnect,da as useERC20Allowance,Sa as useERC20Approve,Ua as useERC20Transfer,La as useERC20TransferSimulation,Zs as useEmbeddedWallet,Tt as useExecuteCalls,yn as useExecuteRoute,za as useLastTx,Qa as useLookupAddress,hs as useMppSession,ai as useNotification,ci as usePassphraseGate,cs as usePaymentFetch,pi as useResolveName,Ms as useRevokeSession,En as useRouteQuote,Vt as useSIWxLogin,Wi as useSIWxSession,bt as useSendCalls,ke as useSendTransaction,hi as useSendUserOperation,Ls as useSendWithSession,wi as useSession,It as useSessionKeys,Ki as useSignInWithEthereum,be as useSignInWithX,Pt as useSignMessage,zi as useSimulateTransfer,Ji as useSiwxAuthSession,tl as useSmartAccount,Jt as useSolanaAccount,al as useSolanaBalance,cl as useSolanaRoles,ws as useSolanaSessionKey,pl as useSolanaTransaction,ml as useSwitchChain,kl as useTokenBalance,tt as useTokenList,rt as useTokenSearch,Dt as useTransactionSimulation,Al as useTxHistory,qa as useTxMonitor,Tl as useUserOpStatus,_l as useValidateDestination,j as useViemClient,Dl as useWallet,U as useWeb3,Ml as useWeb3ErrorHandler,fs as useX402Signer,Dr as validateDestination};
2
2
  //# sourceMappingURL=index.js.map