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