@naculus/connect-appkit-react 0.2.4 → 0.2.5

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