@nexus-cross/connect-kit-react 1.3.3 → 1.3.4-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,144 @@
1
+ var at="1.3.4";var gt="__nexusCrossAppLauncherRuntime";function tr(){if(typeof window>"u")return null;let e=window;return e[gt]??(e[gt]={mode:"dapp-ui"}),e[gt]}function nr(e){if(e.scheduled)return;e.scheduled=!0;let t=()=>{if(e.scheduled=!1,e.loggedMode!==e.mode){if(e.mode==="connect-kit-react"){let n=e.connectKitVersion??at;console.info(`[CROSSx App Launcher] connect-kit-react v${n} \uCD08\uAE30\uD654 \uC644\uB8CC (dapp-ui v${at}, \uC0AC\uC6A9 \uBAA8\uB4DC: connect-kit)`)}else console.info(`[CROSSx App Launcher] dapp-ui v${at} \uCD08\uAE30\uD654 \uC644\uB8CC (\uC0AC\uC6A9 \uBAA8\uB4DC: dapp-ui only)`);e.loggedMode=e.mode}};typeof queueMicrotask=="function"?queueMicrotask(t):Promise.resolve().then(t)}function Qt(){let e=tr();e&&(e.mode="connect-kit-react",e.connectKitVersion=at,nr(e))}import{useCallback as Ae,useEffect as de,useMemo as Oe,useRef as Ge,useState as Ue}from"react";import{WagmiProvider as dr,useAccount as lr,useChainId as ur,useConnect as mr,useDisconnect as pr,useSwitchChain as fr}from"wagmi";import{QueryClient as gr,QueryClientProvider as br}from"@tanstack/react-query";import{clearWalletSessionStorage as Jt,onOpenOtherWallets as yr,pickInitialState as hr,resolveCurrentWallet as wr}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as Cr}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as kr}from"@nexus-cross/crossx-design-system";import{OnRampProvider as xr}from"@nexus-cross/onramp/react";import{KycProvider as Tr}from"@nexus-cross/kyc/react";import{createContext as rr,useContext as or}from"react";var St=rr(null);function Ee(){let e=or(St);if(!e)throw new Error("useCrossConnectKit must be used within <CrossConnectKitProvider>");return e}import{createContext as sr,useContext as jt}from"react";var bt=sr(null);function ir(){let e=jt(bt);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function ct(){return jt(bt)}import{useCallback as ar,useMemo as Xt}from"react";import{WalletConnectModal as Yt}from"@nexus-cross/dapp-ui";import{jsx as Zt}from"react/jsx-runtime";var cr=new Set(["cross_wallet","cross_extension","metamask","binance"]);function vt({open:e,onOpenChange:t}){let{connect:n,availableWallets:a,oauth:o,extraWallets:r,walletAllowlist:m,kitConfig:f}=Ee(),u=ct()?.mode??"dark",w=Xt(()=>{let p=m?new Set(m):null,k={};for(let A of a){if(!cr.has(A.walletId)||p&&!p.has(A.walletId))continue;let v=A.walletId;k[v]=()=>{n(A.walletId)}}for(let[A,v]of Object.entries(r))v&&(p&&!p.has(A)||(k[A]=v));return k},[a,n,r,m]),S=Xt(()=>{if(o)return{apple:()=>{o.signIn("apple")},google:()=>{o.signIn("google")}}},[o]),T=ar(p=>t(p),[t]);return Zt(Yt,{wallets:w,socialProviders:S,termsUrl:f.legal?.termsUrl,privacyUrl:f.legal?.privacyUrl,theme:u,open:e,onOpenChange:T,children:Zt(Yt.Content,{})})}import{jsx as je,jsxs as nn}from"react/jsx-runtime";var Ir=new gr,Pt="crossx-kit:last-wallet-intent",Sr=15e3;function en(e,t){return Promise.race([e.then(()=>{},()=>{}),new Promise(n=>setTimeout(n,t))])}function vr(e){let t=[],n=e,a=0;for(;n&&a<5;){let o=n;typeof o.message=="string"&&t.push(o.message),n=o.cause,a+=1}return t.some(o=>/external wallet connection/i.test(o))}function Pr(){if(typeof window>"u")return null;try{return window.localStorage.getItem(Pt)??null}catch{return null}}function tn(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(Pt,e):window.localStorage.removeItem(Pt)}catch{}}function Ar(e,t){if(typeof window>"u")return t;try{let n=window.localStorage.getItem(e);return n==="cross"||n==="reown"?n:t}catch{return t}}function Rr(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function Br({children:e,config:t,activeProvider:n,onRequestProviderSwap:a,pendingConnectWalletId:o,clearPending:r,themeMode:m,themeTokens:f,extraWallets:y,walletAllowlist:u}){let[w,S]=Ue(!1),[T,p]=Ue(()=>Pr()),[k,A]=Ue(null),{address:v,isConnected:h,isConnecting:B,isReconnecting:G,connector:D}=lr(),{connectors:re,connectAsync:j}=mr(),{disconnectAsync:V}=pr(),{kitConfig:W,connectorRegistry:U,crossProvider:he,reownProvider:F}=t,O=n==="cross"?he:F,N=Oe(()=>!h||!D?null:wr(U,D.id,T),[h,D,U,T]),xe=Oe(()=>U.entries.filter(d=>d.type!=="embedded"),[U]),Je=Ge(v);Je.current=v;let se=W.embeddedProjectId?.trim()||W.crossProjectId?.trim(),X=!!W.onRampEnabled&&!!se,fe=Oe(()=>!X||!se?null:{projectId:se,walletState:{getAddress:()=>Je.current}},[X,se]),me=Ge(D);me.current=D;let Te=W.embeddedProjectId?.trim()||W.crossProjectId?.trim(),Se=!!W.kycEnabled&&!!Te,De=Oe(()=>!Se||!Te?null:{projectId:Te,getAccessToken:async()=>{let d=me.current;if(!(!d||typeof d.getProvider!="function"))try{return(await(await d.getProvider())?.sdk?.getUserInfo?.())?.data?.accessToken||void 0}catch{return}}},[Se,Te]);de(()=>yr(()=>S(!0)),[]),de(()=>{if(!w||typeof document>"u")return;let d=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(g=>g.remove())},50);return()=>clearTimeout(d)},[w]);let ve=Ge(h),we=Ge(h);ve.current=h;let He=Ge(!1);de(()=>{console.debug("[crossx-kit] state",{activeProvider:n,isConnected:h,isConnecting:B,isReconnecting:G,activeConnectorId:D?.id,currentWallet:N,lastIntent:T})},[n,h,B,G,D?.id,N,T]),de(()=>{h&&!we.current&&O?.closeModal?.({kitConfig:W}),we.current=h},[h,O,W]),de(()=>{h&&A(null)},[h]);let et=ur(),{switchChainAsync:We}=fr(),Le=Ge(null);de(()=>{if(!W.enforceDefaultNetworkOnConnect)return;let d=W.defaultNetwork?.id;if(!d)return;if(!h||!v||!D){Le.current=null;return}let g=`${D.id}:${v}`;Le.current!==g&&(Le.current=g,et!==d&&We({chainId:d}).catch(()=>{}))},[W.enforceDefaultNetworkOnConnect,W.defaultNetwork,h,v,D,et,We]);let ie=Ae(d=>re.find(g=>g.id===d),[re]);de(()=>{let d=U.getEntry("cross_embedded");if(!d)return;let g=ie(d.connectorId);if(!g)return;let I=!1;return(async()=>{try{let C=await g.getProvider();if(I)return;C?.sdk?.applyTheme?.(m,f??void 0)}catch(C){console.debug("[crossx-kit] applyTheme skipped:",C)}})(),()=>{I=!0}},[U,ie,m,f]);let Pe=Ae(d=>{p(d),tn(d)},[]),s=Ae(()=>{p(null),tn(null),A(null)},[]);de(()=>{if(!O?.subscribeModalState)return;let d=!1;return O.subscribeModalState({kitConfig:W},g=>{if(He.current=g,g){d=!0;return}d&&(d=!1,setTimeout(()=>{ve.current||(async()=>{try{await V()}catch{}s()})()},250))})},[O,W,V,s]),de(()=>{if(!k||h||typeof window>"u"||k==="cross_embedded")return;let d=typeof document<"u"&&!document.hasFocus(),g=null,I=()=>{d=!0},C=()=>{d&&(g&&clearTimeout(g),g=setTimeout(()=>{ve.current||He.current||(async()=>{try{await V()}catch{}s()})()},1e3))};return window.addEventListener("blur",I),window.addEventListener("focus",C),()=>{window.removeEventListener("blur",I),window.removeEventListener("focus",C),g&&clearTimeout(g)}},[k,h,V,s]);let i=Ae(async d=>{console.debug("[crossx-kit] runConnect enter",{walletId:d,activeProvider:n,isConnected:h,activeConnectorId:D?.id});let g=U.getEntry(d);if(!g){if((d==="metamask"||d==="binance")&&!F){console.error(`[crossx-kit] "${d}" requires the Reown adapter, but it is not configured. Pass \`reownProjectId\` (and ensure \`reown\` is not set to \`false\`) when calling createConnectKitConfig() or createCrossxConfig() to enable WalletConnect-based wallets.`);return}console.error(`[crossx-kit] Unknown walletId: "${d}"`);return}if(A(d),g.providerKind!==n){console.debug("[crossx-kit] provider swap needed",{from:n,to:g.providerKind,walletId:d}),Pe(d);try{await V()}catch{}await new Promise(C=>setTimeout(C,0)),a(g.providerKind,d);return}if(Pe(d),O?.beforeConnect)try{let C=await O.beforeConnect({kitConfig:W,themeMode:m},d);if(console.debug("[crossx-kit] beforeConnect result",{walletId:d,result:C}),C==="handled")return}catch(C){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',d,C)}let I=ie(g.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:g.connectorId,found:I?.id,availableIds:re.map(C=>C.id)}),!I){console.error(`[crossx-kit] Connector "${g.connectorId}" not found on provider "${g.providerKind}". Available: ${re.map(C=>C.id).join(", ")}`),s();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:I.id});let C=await j({connector:I});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:C.accounts.length,chainId:C.chainId});return}catch(C){if(!vr(C)){console.error('[crossx-kit] connectAsync error for "%s":',d,C);try{await V()}catch{}}if(!g.fallbackConnectorId){s();return}}if(g.fallbackConnectorId){let C=ie(g.fallbackConnectorId);if(C)try{await j({connector:C})}catch(K){console.error('[crossx-kit] Fallback connect failed for "%s":',d,K);try{await V()}catch{}s()}else s()}},[U,re,ie,j,V,Pe,s,O,n,W,a,m]);de(()=>{if(!o)return;let d=o;r(),i(d)},[o,n]);let c=Ae(async()=>{S(!0)},[]),l=Ae(async()=>{try{await V()}catch(d){console.error("[crossx-kit] wagmi disconnect error:",d)}if(O?.teardown)try{await O.teardown({kitConfig:W})}catch(d){console.error("[crossx-kit] adapter teardown error:",d)}Jt(),s()},[V,O,W,s]),b=Ae(async()=>{await en(V(),3e3);try{let d=U.getEntry("cross_embedded"),g=d&&ie(d.connectorId);if(g?.getProvider){let I=await Promise.race([g.getProvider(),new Promise(K=>setTimeout(K,3e3))]),C=I?.sdk?.signOut;typeof C=="function"&&await en(C.call(I.sdk),3e3)}}catch{}Jt()},[U,ie,V]),P=Ae(async()=>{let d=U.getEntry("cross_embedded");if(!d)return null;let g=ie(d.connectorId);if(!g)return null;try{let I=await g.getProvider(),C=I?.sdk;if(!C?.selectWallet)return null;let K=await C.selectWallet(C.currentAddress??void 0);return K?.address&&I.notifyAccountsChanged&&I.notifyAccountsChanged([K.address]),K}catch{return null}},[U,ie]),E=Oe(()=>{let d=t.oauth;return d?{signIn:async g=>{A("cross_embedded");try{await d.signIn(g)}catch(I){throw A(null),I}}}:null},[t.oauth]),R=Ge(!1);de(()=>{if(n!=="cross"||h||B||G||k!=null||R.current)return;let d=U.getEntry("cross_embedded");if(!d)return;let g=ie(d.connectorId);if(!g)return;R.current=!0;let I=!1;return(async()=>{try{let C=await g.isAuthorized?.();if(I||!C)return;await j({connector:g})}catch{}})(),()=>{I=!0}},[n,h,B,G,k,U,ie,j]),de(()=>{if(k!=="cross_embedded"||h||typeof window>"u")return;let d=!document.hasFocus(),g=()=>{d=!0};window.addEventListener("blur",g);let I=setTimeout(()=>{ve.current||d||(console.warn("[crossx-kit] embedded sign-in stalled before the OAuth popup opened \u2014 clearing the stale session so a retry starts clean"),s(),b())},Sr);return()=>{window.removeEventListener("blur",g),clearTimeout(I)}},[k,h,s,b]);let L=k!=null&&!h,H=Oe(()=>({kitConfig:W,connectorRegistry:U,availableWallets:xe,connect:i,connectWallet:c,disconnect:l,selectWallet:P,currentWallet:N,lastIntent:T,isConnecting:L,connectingWalletId:k,openOtherWallets:()=>S(!0),closeOtherWallets:()=>S(!1),otherWalletsOpen:w,oauth:E,extraWallets:y,walletAllowlist:u,onRampEnabled:X}),[W,U,xe,i,c,l,P,N,T,L,k,w,E,y,u,X]),_=nn(St.Provider,{value:H,children:[e,je(vt,{open:w,onOpenChange:S})]});return De&&(_=je(Tr,{config:De,children:_})),fe&&(_=je(xr,{config:fe,children:_})),_}var _r=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function Er(e){let t=e?.message;return typeof t!="string"?!1:_r.some(n=>n.test(t))}var Or={};function Nr(e){return e&&{...e,connections:new Map,current:null}}function Fr({children:e,config:t,initialState:n,extraWallets:a=Or,walletAllowlist:o}){let[r,m]=Ue(()=>Ar(t.activeProviderStorageKey,t.defaultProvider)),[f,y]=Ue(null),u=Ge(!1),{kitConfig:w}=t,[S,T]=Ue(null),[p,k]=Ue(null),[A,v]=Ue(0),h=Oe(()=>Cr(w.theme,w.autoDetectTheme),[w.theme,w.autoDetectTheme,A]),B=S??h,G=p??w.themeTokens;de(()=>{if(!w.autoDetectTheme||S||typeof window>"u"||!window.matchMedia)return;let F=window.matchMedia("(prefers-color-scheme: dark)"),O=()=>v(N=>N+1);try{return F.addEventListener("change",O),()=>F.removeEventListener("change",O)}catch{return F.addListener(O),()=>F.removeListener(O)}},[w.autoDetectTheme,S]),de(()=>{if(typeof document>"u")return;let F=document.documentElement,O=F.getAttribute("data-ds-theme"),N=F.getAttribute("data-theme");return F.setAttribute("data-ds-theme",B),N||F.setAttribute("data-theme",B),()=>{O==null?F.removeAttribute("data-ds-theme"):F.setAttribute("data-ds-theme",O),N==null&&F.removeAttribute("data-theme")}},[B]);let D=Oe(()=>kr(t.designSystem),[t.designSystem]),re=Oe(()=>({mode:B,tokens:G,setThemeMode:F=>T(F),setThemeTokens:F=>k(F)}),[B,G]);de(()=>{if(typeof window>"u")return;let F=O=>{Er(O.reason)&&O.preventDefault()};return window.addEventListener("unhandledrejection",F),()=>window.removeEventListener("unhandledrejection",F)},[]);let j=Ae((F,O)=>{u.current||(u.current=!0,y(O),m(F),Rr(t.activeProviderStorageKey,F),queueMicrotask(()=>{u.current=!1}))},[t.activeProviderStorageKey]),V=Ae(()=>y(null),[]),W=r==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,U=Nr(hr(n,r));if(!W){if(!(r==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let O=r==="cross"?"reown":"cross";queueMicrotask(()=>m(O))}let he=W??(r==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return nn(bt.Provider,{value:re,children:[je("style",{"data-crossx-design-system":"",children:D}),je(dr,{config:he,initialState:U,children:je(br,{client:Ir,children:je(Br,{config:t,activeProvider:r,onRequestProviderSwap:j,pendingConnectWalletId:f,clearPending:V,themeMode:B,themeTokens:G,extraWallets:a,walletAllowlist:o??t.kitConfig.wallets??null,children:e})})},r)]})}import{useCallback as qe,useEffect as Oo,useMemo as mt}from"react";import{useQueryClient as No}from"@tanstack/react-query";import{useAccount as Fo,useChainId as Do,useConfig as Wo,useSendTransaction as Lo,useSwitchChain as Mo}from"wagmi";import{getPublicClient as Dt,readContracts as An}from"wagmi/actions";import{WalletInfo as Wt,ConnectorId as Ve,resolveEnvironment as Go}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as Uo,useOptionalOnRampEligibility as Ko}from"@nexus-cross/onramp/react";import{APPLE_ICON as Ut,BINANCE_ICON as _n,CROSSX_ICON as Gt,EXTENSION_ICON as $o,GOOGLE_ICON as En,METAMASK_ICON as On}from"@nexus-cross/connect-kit-wagmi";import{useCallback as ee,useMemo as Re,useRef as Dr}from"react";import{useQueries as rn,useQuery as ot}from"@tanstack/react-query";import{encodeFunctionData as dt,formatUnits as kt,parseSignature as Wr,parseUnits as Lr}from"viem";import{getChainId as At,getPublicClient as hn,readContract as Ie,signTypedData as Mr,switchChain as on,waitForTransactionReceipt as Gr,writeContract as sn}from"wagmi/actions";import{useConfig as Ur}from"wagmi";async function yt(e,t,n){if(!(!n||t===void 0))try{if(e.getChainId()===t)return;await e.switchChain(t)}catch{}}function Kr(e){return e!=="bridge"}var wn="0x0000000000000000000000000000000000000000",ke=100,it=18,$r=180000n,qr=250000n,Cn=new Set([56,97]),Vr=130n,Hr=100n,zr={dev:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},stage:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},production:{bridgeApi:"https://bridge-api.crosstoken.io/bridge",walletApi:"https://wallet-server.crosstoken.io/api",chainIds:{cross:612055,bsc:56},contracts:{BSC_CROSS:"0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",W_CROSS:"0x731a104a4461ae45bfef520468b43c262d35e682",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x1c37d4f44ed3ec86d96868001cfa89e97112a85c",CROSSD:"0xff42c13d927a6b9265236619161accb227b6d452",USDTB:"0x55d398326f99059ff775485246999027b3197955",SWAP_BRIDGE_ROUTER:"0xB298C340816fee45cfB39B1e6EE4DB4D5739e357"},hiddenPairs:[{fromKey:"56-0x55d398326f99059ff775485246999027b3197955",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"56-0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",toKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452"}]}},Xe=[{type:"function",name:"quoter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"swapRouter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"getAmountSwapBridgeOut",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"swapAmountOut",type:"uint256"},{name:"bridgeValue",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"getAmountSwapBridgeIn",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"bridgeValue",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"amountIn",type:"uint256"},{name:"swapAmountOut",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"swapBridgeExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"swapBridgeExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountOut",type:"uint256"},{name:"amountInMaximum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountIn",type:"uint256"}]}],Rt=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]}],an=[{type:"function",name:"name",stateMutability:"view",inputs:[],outputs:[{name:"",type:"string"}]},{type:"function",name:"nonces",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"",type:"uint256"}]}],cn=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amountIn",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amount",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]}],Qr=[{type:"function",name:"slot0",stateMutability:"view",inputs:[],outputs:[{name:"sqrtPriceX96",type:"uint160"},{name:"tick",type:"int24"},{name:"observationIndex",type:"uint16"},{name:"observationCardinality",type:"uint16"},{name:"observationCardinalityNext",type:"uint16"},{name:"feeProtocol",type:"uint8"},{name:"unlocked",type:"bool"}]}],Ne=[{type:"function",name:"exactInputSingle",stateMutability:"payable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"recipient",type:"address"},{name:"deadline",type:"uint256"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"unwrapWETH9",stateMutability:"payable",inputs:[{name:"amountMinimum",type:"uint256"},{name:"recipient",type:"address"}],outputs:[]},{type:"function",name:"refundETH",stateMutability:"payable",inputs:[],outputs:[]}],jr=[{type:"function",name:"bridgeToken",stateMutability:"payable",inputs:[{name:"toChainID",type:"uint256"},{name:"fromToken",type:"address"},{name:"to",type:"address"},{name:"value",type:"uint256"},{name:"gasFee",type:"uint256"},{name:"exFee",type:"uint256"},{name:"extraData",type:"bytes"}],outputs:[{name:"",type:"bool"}]}];async function kn(e){let t="";try{t=await e.text()}catch{}if(t){try{let n=JSON.parse(t),a=typeof n.data=="string"&&n.data||typeof n.message=="string"&&n.message||"";if(a)return`${a} (status ${e.status})`}catch{}return`${t.slice(0,300)} (status ${e.status})`}return`status ${e.status}`}async function Ke(e,t){let n=await fetch(e,{cache:"no-store",signal:t});if(!n.ok)throw new Error(`CrossD bridge adapter request failed: ${await kn(n)}`);let a=await n.json();if(a&&typeof a=="object"&&"code"in a&&typeof a.code=="number"&&a.code!==200)throw new Error(a.message||`CrossD bridge adapter API error: ${a.code}`);return a&&typeof a=="object"&&"data"in a?a.data:a}async function dn(e,t,n){let a=await fetch(e,{method:"POST",cache:"no-store",signal:n,headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!a.ok)throw new Error(`CrossD bridge adapter request failed: ${await kn(a)}`);let o=await a.json();if(o&&typeof o=="object"&&"code"in o&&typeof o.code=="number"&&o.code!==200)throw new Error(o.message||`CrossD bridge adapter API error: ${o.code}`);return o&&typeof o=="object"&&"data"in o?o.data:o}function Xr(e){return new Promise(t=>setTimeout(t,e))}async function Yr(e,t,{attempts:n=60,intervalMs:a=2e3}={}){for(let o=0;o<n;o+=1){try{let r=await Ke(`${e}/permit-hash/${t}`);if(Ot(r))return r}catch{}await Xr(a)}return null}function ne(e,t){return`${e}-${t.toLowerCase()}`}function le(e){return ne(e.chainId,e.address)}function Be(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function Zr(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"",n=t.toLowerCase();return n.includes("quoteexactinputsingle")||n.includes("quoteexactoutputsingle")||n.includes("getamountswapbridgeout")||n.includes("getamountswapbridgein")||n.includes("execution reverted")?"Amount is too large for this route.":t.split(`
2
+ `)[0]?.trim()||"Failed to quote bridge."}function ln(e){return e===56||e===97?"BSC":e===612044||e===612055?"CROSS":`Chain ${e}`}function te(e,t){return t?t.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()?e.contracts.W_CROSS:t:wn}function Ye(e){let t=kt(e,it);return t.includes(".")?t.replace(/\.?0+$/,""):t}function ut(e){return Lr(e||"0",it)}function pe(e){try{return ut(e||"0")}catch{return 0n}}function $e(e){if(typeof e=="bigint")return e;if(typeof e=="number")return BigInt(Math.trunc(e));if(!e)return 0n;try{return BigInt(e)}catch{return 0n}}function Bt(e){let t=kt(e,9);return(t.includes(".")?t.replace(/\.?0+$/,""):t)||"0"}function ht(e){return e==="bridge"?$r:qr}function un(e,t){if(!e||!t)return"0";let n=e*e;if(n===0n)return"0";let a=t*t,o=a>n?a-n:n-a;if(o===0n)return"0";let r=(o*100000000n+n/2n)/n;if(r>=100000000n)return"100";let m=r/1000000n,f=(r%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return f?`${m}.${f}`:`${m}`}function Jr(e){if(!e||Number(e)===0)return"0%";let[t,n=""]=e.split("."),a=n.length>4?n.slice(0,4):n;return a?`${t}.${a}%`:`${t}%`}async function mn(e,t,n,a,o,r=!1){let m=hn(e,{chainId:t}),f=n;try{let u=await m?.estimateContractGas?.({account:o.account,address:o.address,abi:o.abi,functionName:o.functionName,args:o.args,value:o.value});typeof u=="bigint"&&u>0n&&(f=a?u*Vr/Hr:u)}catch{}let y={gas:f};if(Cn.has(t))try{let u=await m?.getGasPrice?.();typeof u=="bigint"&&u>0n&&(y.gasPrice=u)}catch{}else if(r)try{let u=await m?.estimateFeesPerGas?.();typeof u?.maxFeePerGas=="bigint"&&(y.maxFeePerGas=u.maxFeePerGas),typeof u?.maxPriorityFeePerGas=="bigint"&&(y.maxPriorityFeePerGas=u.maxPriorityFeePerGas)}catch{}return y}function xn(e){let t=e==="auto"?1:Number(e||"1");return!Number.isFinite(t)||t<0?100n:BigInt(Math.min(1e4,Math.floor(t*100)))}function _t(e,t){let n=xn(t);return n>=10000n?0n:e*(10000n-n)/10000n}function eo(e,t){let n=xn(t);return(e*(10000n+n)+9999n)/10000n}function lt(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var to={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function no(e){return to[e]??`${e/1e4}%`}function ro(e,t){let n=Number(e||"0");return!Number.isFinite(n)||n<=0?"0":(n*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function pn(e){return Ye(e)}function fn(e,t){let n=Number(t??"0");return!Number.isFinite(n)||n<=0?0n:e*BigInt(Math.floor(n))/1000n}function wt(e,t){if(!e)return!1;let n=e.toLowerCase();return t.some(a=>a.toLowerCase()===n)}function oo(e,t,n){return[{from:[e.contracts.USDTX],to:[e.contracts.CROSSD]},{from:[e.contracts.BSC_CROSS],to:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS]},{from:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS],to:[e.contracts.CROSSD]}].some(o=>wt(t,o.from)&&wt(n,o.to)||wt(t,o.to)&&wt(n,o.from))}function so(e){if(Be(e.type))return null;if(e.type==="swap-bridge"){let t=e.steps.find(n=>n.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}if(e.type==="bridge-swap"){let t=e.steps.find(n=>n.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}return{from:e.from.chainId,to:e.to.chainId,token:e.from.address}}function io({input:e,path:t,config:n}){if(!n||Be(t.type))return"";let a=$e(n.minimumValue),o=$e(n.gasFee??n.gas_fee),r=t.type==="swap-bridge"?a+o*12n/10n:a;return r<=0n?"":e.fromAmount&&pe(e.fromAmount)<r&&t.type!=="swap"?`Minimum ${pn(r)}`:t.type==="swap-bridge"&&e.toAmount&&pe(e.toAmount)<r?`Available ${pn(r)} or more.`:""}function ao({input:e,path:t,config:n}){if(!n||t.type!=="bridge"&&t.type!=="bridge-swap")return"";let a=$e(n.gasFee??n.gas_fee);if(a<=0n||!e.fromAmount)return"";let o=pe(e.fromToken.balance||"0"),r=pe(e.fromAmount);return o-a<r?`Insufficient network fee(${e.fromToken.symbol})`:""}function co(e,t){let n=new Set;return e?.list?.forEach(a=>{let o=a.localChain??a.local_chain;o&&Object.entries(a.pairs||{}).forEach(([r,m])=>{m.forEach(f=>{f.localToken&&n.add(ne(o,f.localToken)),f.remoteToken&&n.add(ne(Number(r),f.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([a,o])=>{o.forEach(r=>{r.token0&&n.add(ne(Number(a),r.token0)),r.token1&&n.add(ne(Number(a),r.token1))})}),n}function lo(e,t){return!e||!t?null:ne(e,t)}function uo({envConfig:e,bridgePairList:t,swapPools:n,tokenInfo:a,tokenStats:o}){let r=co(t,n),m=new Map;o?.forEach(y=>{let u=lo(Number(y.chainId??y.chain_id),y.address);u&&m.set(u,y)});let f={};return r.forEach(y=>{let[u,w]=y.split("-"),S=Number(u),T=a?.find(k=>Number(k.chainId??k.chain_id)===S&&k.address?.toLowerCase()===w);if(!T?.symbol||!T.name)return;let p=m.get(y);f[y]={key:y,chainId:S,address:w,symbol:T.symbol,name:T.name,decimals:T.decimals||it,image:T.image||T.icon_url,price:p?.price?Number(p.price):void 0,isNativeToken:w.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),f}function Tn(e,t){return t?.list?.find(n=>(n.localChain??n.local_chain)===e)?.bridge||""}function In(e,t,n){let[a,o]=e.split("-"),[r,m]=t.split("-"),f=Number(a),y=Number(r);for(let u of n?.list||[]){if((u.localChain??u.local_chain)!==f)continue;let w=u.pairs?.[r];if(w){for(let S of w)if(S.localToken?.toLowerCase()===o&&S.remoteToken?.toLowerCase()===m)return{type:"bridge",fromChain:f,fromToken:o,toChain:y,toToken:m,bridgeAddress:Tn(f,n)}}}return null}function Sn(e,t,n,a){let[o,r]=e.split("-"),[m,f]=t.split("-");if(o!==m)return null;let y=Number(o),u=(n?.swapPools||n?.swap_pools)?.[o];if(!u)return null;let w=a.contracts.W_CROSS.toLowerCase(),S=a.contracts.NATIVE_CROSS.toLowerCase(),T=p=>p?.toLowerCase()===w?S:p?.toLowerCase();for(let p of u){let k=T(p.token0),A=T(p.token1);if(k===r&&A===f||A===r&&k===f){let v="swap";return y===a.chainIds.cross&&(r===S&&(v="deposit-swap"),f===S&&(v="swap-withdraw")),{pathType:v,step:{type:"swap",chain:y,fromToken:r,toToken:f,fee:p.fee||ke,poolAddress:p.poolAddress||p.pool_address||""}}}}return null}function mo(e,t,n,a){let[o,r]=e.split("-"),[m]=t.split("-");if(o===m)return null;for(let f of(n?.swapPools||n?.swap_pools)?.[o]||[]){let y=f.token0?.toLowerCase(),u=f.token1?.toLowerCase(),w=y===r?u:u===r?y:null;if(!w)continue;let S=In(ne(Number(o),w),t,a);if(S)return[{type:"swap",chain:Number(o),fromToken:r,toToken:w,fee:f.fee||ke,poolAddress:f.poolAddress||f.pool_address||""},S]}return null}function po(e,t,n,a,o){let[r,m]=e.split("-"),[f]=t.split("-");if(r===f)return null;for(let y of n?.list||[])if((y.localChain??y.local_chain)===Number(r))for(let u of y.pairs?.[f]||[]){if(u.localToken?.toLowerCase()!==m)continue;let w=u.remoteToken?.toLowerCase();if(!w)continue;let S=Sn(ne(Number(f),w),t,a,o);if(S)return[{type:"bridge",fromChain:Number(r),fromToken:m,toChain:Number(f),toToken:w,bridgeAddress:Tn(Number(r),n)},S.step]}return null}function fo({envConfig:e,bridgePairList:t,swapPools:n,enrichedTokens:a}){return(o,r)=>{let m=a[o],f=a[r];if(!m||!f||o===r)return null;let y=In(o,r,t);if(y)return{type:"bridge",steps:[y],from:m,to:f};let u=Sn(o,r,n,e);if(u)return{type:u.pathType,steps:[u.step],from:m,to:f};let w=mo(o,r,n,t);if(w)return{type:"swap-bridge",steps:w,from:m,to:f};let S=po(o,r,t,n,e);return S?{type:"bridge-swap",steps:S,from:m,to:f}:null}}function gn(e,t){return{name:e.name,symbol:e.symbol,chainId:e.chainId,address:e.address,decimals:e.decimals,balance:t.get(e.key)||"0",iconUrl:e.image,priceUsd:e.price}}function go(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function bo(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function yo(e,t){let n=e.startsWith("-"),a=n?e.slice(1):e,[o,r=""]=a.split("."),m=r.slice(0,t).replace(/0+$/,""),f=m?`${o}.${m}`:o;return n?`-${f}`:f}function ho(e){let t=e.startsWith("-"),n=t?e.slice(1):e,[a,o]=n.split("."),r=a.replace(/\B(?=(\d{3})+(?!\d))/g,","),m=o?`${r}.${o}`:r;return t?`-${m}`:m}function Et(e){if(e==null||e==="")return"0";let t=String(e),n=Number(t);return!Number.isFinite(n)||n===0?"0":ho(yo(t,4))}function bn(e,t){if(e==null||e==="")return"0";try{return bo(kt(BigInt(String(e)),t.decimals))}catch{return"0"}}function Ot(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function wo(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function Co(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function ko(e,t){let n=go(t);return{name:n,symbol:n,chainId:e,address:t,decimals:it,balance:"0"}}function yn({envConfig:e,tokenByBridgeKey:t,chainId:n,address:a}){if(!a)return null;let o=Co(e,a);return t.get(ne(n,o))||t.get(ne(n,a))||ko(n,o)}function Ct(e){return e?.toLowerCase()||""}function xo(e){if(e.source==="swap")return"swap";let t=Ct(e.fromToken??e.from_token),n=Ct(e.toToken??e.to_token),a=Ct(e.swapTokenIn??e.swap_token_in),o=Ct(e.swapTokenOut??e.swap_token_out);return n&&a&&n===a?"bridge-swap":t&&o&&t===o?"swap-bridge":"bridge"}function To(e,t){let n=e.status??0,a=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&n===1&&!a?"failed":n===1?"success":"pending"}function Io({envConfig:e,item:t,tokenByBridgeKey:n}){let a=Number(t.fromChainID??t.from_chain_id??0),o=Number(t.toChainID??t.to_chain_id??0);if(!a||!o)return null;let r=xo(t),m=t.swapTokenIn??t.swap_token_in,f=t.swapTokenOut??t.swap_token_out,y=t.swapAmountIn??t.swap_amount_in,u=t.swapAmountOut??t.swap_amount_out,w=t.fromToken??t.from_token,S=t.toToken??t.to_token,T=t.value,p=t.value;r==="swap"?(w=m,S=f,T=y,p=u):r==="swap-bridge"?(w=m,T=y,p=t.value):r==="bridge-swap"&&(S=f,T=y,p=u);let k=yn({envConfig:e,tokenByBridgeKey:n,chainId:a,address:w}),A=yn({envConfig:e,tokenByBridgeKey:n,chainId:o,address:S}),v=t.initiatedTxHash??t.initiated_tx_hash;return!k||!A||!Ot(v)?null:{id:`${v}-${t.index??""}`,timestamp:wo(t.initiatedTime??t.initiated_time),txHash:v,fromToken:k,toToken:A,fromAmount:bn(T,k),toAmount:bn(p,A),summary:{pathType:r},status:To(t,r)}}function So(e){let t=new Map;return e.flat().forEach(n=>{let a=Number(n.chainId??n.chain_id),o=n.address?.toLowerCase();if(!a||!o)return;let r=n.quantity?.numeric??n.balance??"0",m=n.quantity?.decimals??n.decimals??it;try{t.set(ne(a,o),kt(BigInt(r||"0"),m))}catch{t.set(ne(a,o),"0")}}),t}function Fe(e,t="first"){let n=e.steps.filter(a=>a.type==="swap");return t==="last"?n[n.length-1]:n[0]}function vo(e,t){let n=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!n?.length)return"";let a=t.contracts.CROSSD.toLowerCase(),o=t.contracts.USDTX.toLowerCase(),r=n.find(m=>{let f=m.token0?.toLowerCase(),y=m.token1?.toLowerCase();return f===a&&y===o||f===o&&y===a});return r?.poolAddress||r?.pool_address||""}function Po(e,t){return e.from.chainId===t.chainIds.cross&&e.from.address.toLowerCase()===t.contracts.CROSSD.toLowerCase()&&e.to.chainId===t.chainIds.bsc&&e.to.address.toLowerCase()===t.contracts.USDTB.toLowerCase()}function Ao(e){if(e===void 0)return;let t=10n**BigInt(it),n=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",a=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:n,percentage:Math.min(a,100)}}function st(e,t,n,a){let o=[e.from,e.to].find(r=>r.chainId===t&&r.address.toLowerCase()===n.toLowerCase())??a?.[ne(t,n)];return{symbol:o?.symbol||n.slice(0,6),iconUrl:o?.image}}function Ro(e,t){let n=[];for(let o of e.steps)o.type==="swap"?(n.push({chain:o.chain,address:o.fromToken}),n.push({chain:o.chain,address:o.toToken})):(n.push({chain:o.fromChain,address:o.fromToken}),n.push({chain:o.toChain,address:o.toToken}));let a=n.filter((o,r)=>r===0||!(o.chain===n[r-1].chain&&o.address.toLowerCase()===n[r-1].address.toLowerCase()));return a.length===0?[{symbol:e.from.symbol,iconUrl:e.from.image},{symbol:e.to.symbol,iconUrl:e.to.image}]:a.map(o=>st(e,o.chain,o.address,t))}function Bo({input:e,path:t,amountData:n,gasInfo:a,liquidity:o,enrichedTokens:r,priceImpact:m}){let f=e.fromAmount||"0",y=e.toAmount||"0",u=Fe(t),w=t.steps.find(G=>G.type==="bridge"),S=t.type!=="bridge",T=!Be(t.type),p=u?ro(f,u.fee):"0",k=Number(f)>0||Number(y)>0,A=u?st(t,u.chain,u.fromToken,r):{symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},v=u?st(t,u.chain,u.toToken,r):{symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},h=w?st(t,w.fromChain,w.fromToken,r):void 0,B=(G,D,re)=>k?D&&D>0n?{label:G,value:Ye(D),tone:"default",valueToken:re}:{label:G,value:"Free",tone:"accent"}:{label:G,value:"0"};return{pathType:t.type,priceImpact:m,liquidity:o,bridgeInfo:T&&w?[{label:"Route",value:`${ln(w.fromChain)} \u2192 ${ln(w.toChain)}`},B("Validator Fee",n?.exFee,h),B("Network Fee",n?.networkFee,h)]:void 0,swapInfo:S&&u?[{label:"Route",value:"",routeTokens:[st(t,u.chain,u.fromToken,r),st(t,u.chain,u.toToken,r)]},{label:"Price Impact",value:Jr(m)},{label:"In Amount",value:Et(f),valueToken:A},{label:u&&Be(t.type)?`Swap Fee (${no(u.fee||ke)})`:"Swap Fee",value:Et(p),valueToken:A},{label:"Out Amount",value:Et(y),valueToken:v}]:void 0,txFee:[...a?.gasPrice?[{label:"Gas Price",value:`${a.gasPrice} Gwei`}]:[{label:"Priority Fee Per Gas",value:`${a?.priorityFeePerGas||"0"} Gwei`},{label:"Max Fee Per Gas",value:`${a?.maxFeePerGas||"0"} Gwei`}],{label:"Gas Limit",value:a?.gasLimit||"0"}],txFeeInfo:a?{estTxFee:a.estTxFee,isDelegateFee:a.isDelegateFee,tokenIconUrl:a.gasCurrencyIconUrl,tokenSymbol:a.gasCurrencySymbol}:{estTxFee:"0",isDelegateFee:!1}}}function Nt({env:e,walletAddress:t,enabled:n=!0,restoreChainAfterSwitch:a=!0}){let o=Ur(),r=zr[e],m=n,f=Dr(new Map),y=ot({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:s})=>Ke(`${r.bridgeApi}/pairs`,s),enabled:m,staleTime:3e4}),u=ot({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:s})=>Ke(`${r.bridgeApi}/swap-pools`,s),enabled:m,staleTime:3e4}),w=Re(()=>vo(u.data,r),[r,u.data]),S=ot({queryKey:["crossd-bridge-adapter",e,"available-liquidity",w],queryFn:async()=>await Ie(o,{address:r.contracts.USDTX,abi:Rt,functionName:"balanceOf",args:[w],chainId:r.chainIds.cross}),enabled:m&&!!w,staleTime:3e4}),T=ot({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:s})=>Ke(`${r.walletApi}/v1/public/token/info`,s),enabled:m,staleTime:3e4}),p=ot({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:s})=>Ke(`${r.walletApi}/v1/public/token/stats`,s),enabled:m,staleTime:3e4}),k=rn({queries:[r.chainIds.cross,r.chainIds.bsc].map(s=>({queryKey:["crossd-bridge-adapter",e,"balance",t,s],queryFn:({signal:i})=>{let c=new URLSearchParams({networkId:`eip155:${s}`,account:t||""});return Ke(`${r.walletApi}/v1/public/token/balance?${c}`,i)},enabled:m&&!!t,staleTime:0,refetchInterval:m&&t?5e3:!1}))}),A=rn({queries:[r.chainIds.cross,r.chainIds.bsc].map(s=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",s],queryFn:async({signal:i})=>{try{let b=await hn(o,{chainId:s})?.estimateFeesPerGas?.();if(b?.maxFeePerGas||b?.gasPrice)return{fast:{maxFee:b.maxFeePerGas?.toString()||b.gasPrice?.toString(),maxPriorityFee:b.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let c=new URLSearchParams({chain_id:String(s),without_gas_limit:"false"});return Ke(`${r.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${c}`,i)},enabled:m,staleTime:1e4,retry:1}))}),v=r.hiddenPairs,h=Re(()=>uo({envConfig:r,bridgePairList:y.data,swapPools:u.data,tokenInfo:T.data,tokenStats:p.data}),[y.data,r,u.data,T.data,p.data]),B=Re(()=>fo({envConfig:r,bridgePairList:y.data,swapPools:u.data,enrichedTokens:h}),[y.data,h,r,u.data]),G=Re(()=>So(k.map(s=>s.data).filter(s=>Array.isArray(s))),[k]),D=Re(()=>{let s=new Map;return Object.values(h).forEach(i=>{let c=gn(i,G);s.set(i.key,c)}),s},[G,h]),re=Re(()=>{let s=new Map,i=D.get(ne(r.chainIds.cross,r.contracts.NATIVE_CROSS));i&&s.set(r.chainIds.cross,{symbol:i.symbol,iconUrl:i.iconUrl});let c=T.data?.find(l=>Number(l.chainId??l.chain_id)===r.chainIds.bsc&&(l.symbol??"").toUpperCase()==="BNB");return c&&s.set(r.chainIds.bsc,{symbol:c.symbol??"BNB",iconUrl:c.image??c.icon_url}),s},[r,D,T.data]),j=ot({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:s})=>dn(`${r.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},s),enabled:m&&!!t,staleTime:0,refetchInterval:m&&t?5e3:!1}),V=Re(()=>(j.data?.histories||[]).map(s=>Io({envConfig:r,item:s,tokenByBridgeKey:D})).filter(s=>!!s),[j.data?.histories,r,D]),W=Re(()=>Ao(S.data),[S.data]),U=A[0]?.data,he=A[1]?.data,F=Re(()=>{let s=new Map;return U&&s.set(r.chainIds.cross,U),he&&s.set(r.chainIds.bsc,he),s},[he,U,r.chainIds.bsc,r.chainIds.cross]),O=ee((s,i,c)=>{let l=F.get(s.from.chainId)?.fast,b=i?c?.gasLimit??ht(s.type):0n,P=c?.gasPrice&&c.gasPrice>0n?c.gasPrice:0n,E=c?.maxFeePerGas&&c.maxFeePerGas>0n?c.maxFeePerGas:0n,R=c?.maxPriorityFeePerGas&&c.maxPriorityFeePerGas>0n?c.maxPriorityFeePerGas:0n,L=$e(l?.maxFee??l?.max_fee),H=$e(l?.maxPriorityFee??l?.max_priority_fee),x=E>0n?E:L>0n?L:P,_=R>0n?R:H>0n?H:x,d=P>0n?P:x,g=Cn.has(s.from.chainId)&&d>0n,C=b*(g?d:x),K=D.get(ne(s.from.chainId,r.contracts.NATIVE_CROSS)),q=s.type!=="swap-bridge",Z=re.get(s.from.chainId);return{estTxFee:i?Ye(C):"0",priorityFeePerGas:i&&!g?Bt(_):"0",maxFeePerGas:i&&!g?Bt(x):"0",gasLimit:i?b.toString():"0",gasPrice:i&&g?Bt(d):void 0,isDelegateFee:s.type==="swap-bridge"?!1:oo(r,s.from.address,s.to.address),tokenIconUrl:q?K?.iconUrl:void 0,tokenSymbol:q?K?.symbol:void 0,gasCurrencyIconUrl:Z?.iconUrl,gasCurrencySymbol:Z?.symbol}},[r,F,re,D]),N=ee(async s=>{let i=so(s);if(!i)return null;let c=`${e}:${i.from}:${i.to}:${i.token.toLowerCase()}`,l=f.current.get(c);if(l)return l;let b=(async()=>{let P=new URLSearchParams({from:String(i.from),to:String(i.to),token:i.token});try{return(await Ke(`${r.bridgeApi}/token-config?${P}`)).config??null}catch{return null}})();return f.current.set(c,b),b},[e,r.bridgeApi]),xe=Re(()=>{let s=Object.values(h).map(c=>gn(c,G)),i=ne(r.chainIds.cross,r.contracts.CROSSD);return s.sort((c,l)=>{let b=le(c).toLowerCase()===i.toLowerCase(),P=le(l).toLowerCase()===i.toLowerCase();return b!==P?b?-1:1:le(c).localeCompare(le(l))})},[G,h,r]),Je=ee(s=>{let i=le(s),c=i.toLowerCase(),l=[];Object.keys(h).forEach(E=>{let R=E.toLowerCase();if(c===R||v.some(x=>x.fromKey===c&&x.toKey===R))return;let L=B(i,E);if(!L)return;let H=D.get(E);H&&l.push({token:H,path:L})});let b=ne(r.chainIds.cross,r.contracts.CROSSD),P=ne(r.chainIds.cross,r.contracts.NATIVE_CROSS);return l.sort((E,R)=>{if(c===b.toLowerCase()){let d=le(E.token).toLowerCase()===P.toLowerCase(),g=le(R.token).toLowerCase()===P.toLowerCase();if(d!==g)return d?-1:1}let L=Be(E.path.type),H=Be(R.path.type);if(L!==H)return L?-1:1;let x=E.token.chainId===s.chainId,_=R.token.chainId===s.chainId;return x!==_?x?-1:1:le(E.token).localeCompare(le(R.token))}),l.map(E=>E.token)},[h,r,B,v,D]),se=ee(async s=>await Ie(o,{address:r.contracts.SWAP_BRIDGE_ROUTER,abi:Xe,functionName:"quoter",chainId:s}),[r.contracts.SWAP_BRIDGE_ROUTER,o]),X=ee(async s=>{At(o)!==s&&await on(o,{chainId:s})},[o]),fe=ee(s=>yt({getChainId:()=>At(o),switchChain:i=>on(o,{chainId:i})},s,a),[a,o]),me=ee(async s=>await Ie(o,{address:r.contracts.SWAP_BRIDGE_ROUTER,abi:Xe,functionName:"swapRouter",chainId:s}),[r.contracts.SWAP_BRIDGE_ROUTER,o]),Te=ee(async({path:s,step:i,amount:c,source:l})=>{let b=await se(i.chain),P=i.poolAddress?Ie(o,{address:i.poolAddress,abi:Qr,functionName:"slot0",chainId:i.chain}).then(L=>L?.[0]).catch(()=>{}):Promise.resolve(void 0);if(l==="from"){let L=await Ie(o,{address:b,abi:cn,functionName:"quoteExactInputSingle",args:[{tokenIn:te(r,i.fromToken),tokenOut:te(r,i.toToken),amountIn:ut(c),fee:i.fee||ke,sqrtPriceLimitX96:0n}],chainId:i.chain}),H=un(await P,L[1]);return{amount:Ye(L[0]),path:s,priceImpact:H}}let E=await Ie(o,{address:b,abi:cn,functionName:"quoteExactOutputSingle",args:[{tokenIn:te(r,i.fromToken),tokenOut:te(r,i.toToken),amount:ut(c),fee:i.fee||ke,sqrtPriceLimitX96:0n}],chainId:i.chain}),R=un(await P,E[1]);return{amount:Ye(E[0]),path:s,priceImpact:R}},[r,se,o]),Se=ee(async(s,i)=>{if(!t)throw new Error("Wallet is not connected.");let c=ht(i.type);if(Be(i.type)){let x=Fe(i,"first");if(!x)throw new Error("Swap route is not available.");let _=pe(s.fromAmount),d=pe(s.toAmount);if(_<=0n)throw new Error("Bridge amount is empty.");if(d<=0n)throw new Error("Bridge quote is not ready.");let g=await me(x.chain),I=_t(d,s.slippage),C=i.type==="swap-withdraw"?wn:t,K={tokenIn:te(r,x.fromToken),tokenOut:te(r,x.toToken),fee:x.fee||ke,recipient:C,deadline:lt(),amountIn:_,amountOutMinimum:I,sqrtPriceLimitX96:0n};if(i.type==="swap-withdraw"){let q=dt({abi:Ne,functionName:"exactInputSingle",args:[K]}),Z=dt({abi:Ne,functionName:"unwrapWETH9",args:[I,t]});return{address:g,abi:Ne,functionName:"multicall",args:[[q,Z]],chainId:x.chain,fallbackGasLimit:c}}if(i.type==="deposit-swap"){let q=dt({abi:Ne,functionName:"exactInputSingle",args:[K]}),Z=dt({abi:Ne,functionName:"refundETH",args:[]});return{address:g,abi:Ne,functionName:"multicall",args:[[q,Z]],value:_,chainId:x.chain,fallbackGasLimit:c}}return{address:g,abi:Ne,functionName:"exactInputSingle",args:[K],chainId:x.chain,fallbackGasLimit:c}}if(i.type==="swap-bridge"){let x=Fe(i,"first");if(!x)throw new Error("Swap bridge route is not available.");let _=pe(s.fromAmount),d=pe(s.toAmount);if(_<=0n)throw new Error("Bridge amount is empty.");if(d<=0n)throw new Error("Bridge quote is not ready.");let g=r.contracts.SWAP_BRIDGE_ROUTER,I=lt(),C={toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},K={tokenIn:te(r,i.from.address),tokenOut:te(r,x.toToken),fee:x.fee||ke,sqrtPriceLimitX96:0n,bridgeParams:C};if(s.lastChangedBy==="to"){let Z={...K,amountOut:d,amountInMaximum:eo(_,s.slippage)};return{address:g,abi:Xe,functionName:"swapBridgeExactOutputSingle",args:[Z,I],value:i.from.isNativeToken?Z.amountInMaximum:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let q={...K,amountIn:_,amountOutMinimum:_t(_,s.slippage)};return{address:g,abi:Xe,functionName:"swapBridgeExactInputSingle",args:[q,I],value:i.from.isNativeToken?_:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let l=i.steps.find(x=>x.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let b=pe(s.fromAmount);if(b<=0n)throw new Error("Bridge amount is empty.");let P=await N(i),E=$e(P?.gasFee??P?.gas_fee),R=fn(b,P?.exFeeRate??P?.ex_fee_rate),L="0x";if(i.type==="bridge-swap"){let x=Fe(i,"last");if(!x)throw new Error("Bridge swap route is not available.");let _=pe(s.toAmount);if(_<=0n)throw new Error("Bridge quote is not ready.");let d=await me(i.to.chainId),g=_t(_,s.slippage),I=dt({abi:Ne,functionName:"exactInputSingle",args:[{tokenIn:te(r,x.fromToken),tokenOut:te(r,x.toToken),fee:x.fee||ke,recipient:t,deadline:lt(),amountIn:b,amountOutMinimum:g,sqrtPriceLimitX96:0n}]});L=`${d}${I.slice(2)}`}let H=[BigInt(i.to.chainId),i.from.address,t,b,E,R,L];return{address:l.bridgeAddress,abi:jr,functionName:"bridgeToken",args:H,value:i.from.isNativeToken?b+R+E:void 0,chainId:i.from.chainId,fallbackGasLimit:c}},[r,N,me,t]),De=ee(async(s,i)=>{if(i.type==="bridge"||i.type==="bridge-swap")return Se(s,i);if(!t)throw new Error("Wallet is not connected.");let c=pe(s.fromAmount);if(c<=0n)throw new Error("Bridge amount is empty.");if(i.type==="swap-bridge"){let E=Fe(i,"first");if(!E)throw new Error("Swap bridge route is not available.");let R=r.contracts.SWAP_BRIDGE_ROUTER,L={tokenIn:te(r,i.from.address),tokenOut:te(r,E.toToken),fee:E.fee||ke,sqrtPriceLimitX96:0n,bridgeParams:{toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},amountIn:c,amountOutMinimum:0n};return{address:R,abi:Xe,functionName:"swapBridgeExactInputSingle",args:[L,lt()],value:i.from.isNativeToken?c:void 0,chainId:i.from.chainId,fallbackGasLimit:ht(i.type)}}let l=Fe(i,"first");if(!l)throw new Error("Swap route is not available.");let b=await me(l.chain),P={tokenIn:te(r,l.fromToken),tokenOut:te(r,l.toToken),fee:l.fee||ke,recipient:t,deadline:lt(),amountIn:c,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:b,abi:Ne,functionName:"exactInputSingle",args:[P],value:i.from.isNativeToken?c:void 0,chainId:l.chain,fallbackGasLimit:ht(i.type)}},[Se,r,me,t]),ve=ee(async(s,i)=>{if(!t)return null;try{let c=await De(s,i),l=Be(i.type)||i.type==="swap-bridge",b=await mn(o,c.chainId,c.fallbackGasLimit,l,{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value},!0);return{gasLimit:b.gas,gasPrice:b.gasPrice,maxFeePerGas:b.maxFeePerGas,maxPriorityFeePerGas:b.maxPriorityFeePerGas}}catch{return null}},[De,o,t]),we=ee(async s=>{let i=le(s.fromToken),c=le(s.toToken),l=B(i,c);if(!l)return{error:"Route is not available."};let b=s.lastChangedBy==="to"?s.toAmount:s.fromAmount,P=!!b&&Number(b)>0,E=Po(l,r)?W:void 0,R=async(I,C,K)=>{let q=P?await ve(I,l):null,Z=O(l,P,q);return Bo({input:I,path:l,gasInfo:Z,amountData:C,liquidity:E,enrichedTokens:h,priceImpact:K})};if(!b||Number(b)<=0)return{fromAmount:s.fromAmount,toAmount:s.toAmount,summary:await R(s)};let L=await N(l),H=$e(L?.gasFee??L?.gas_fee),x=l.type==="bridge"||l.type==="bridge-swap"?{networkFee:H}:void 0,_=l.type==="bridge"?s.lastChangedBy==="to"?{...s,fromAmount:s.toAmount}:{...s,toAmount:s.fromAmount}:s,d=io({input:_,path:l,config:L});if(d)return{fromAmount:_.fromAmount,toAmount:_.toAmount,summary:await R(_,x),error:d};let g=ao({input:_,path:l,config:L});if(g)return{fromAmount:_.fromAmount,toAmount:_.toAmount,summary:await R(_,x),error:g};if(l.type==="bridge")return{fromAmount:_.fromAmount,toAmount:_.toAmount,summary:await R(_,x)};try{if(l.type==="swap-bridge"){let q=Fe(l,"first"),Z=r.contracts.SWAP_BRIDGE_ROUTER;if(!q)return{error:"Swap bridge route is not ready."};let tt=ge=>Te({path:l,step:q,amount:ge,source:"from"}).then(Me=>Me.priceImpact).catch(()=>{});if(s.lastChangedBy==="from"){let ge=await Ie(o,{address:Z,abi:Xe,functionName:"getAmountSwapBridgeOut",args:[BigInt(l.to.chainId),te(r,l.from.address),te(r,q.toToken),q.fee||ke,ut(s.fromAmount)],chainId:l.from.chainId}),Me=Ye(ge[1]),pt={...s,toAmount:Me};return{toAmount:Me,summary:await R(pt,{networkFee:ge[3],exFee:ge[4]},await tt(s.fromAmount))}}let ze=await Ie(o,{address:Z,abi:Xe,functionName:"getAmountSwapBridgeIn",args:[BigInt(l.to.chainId),te(r,l.from.address),te(r,q.toToken),q.fee||ke,ut(s.toAmount)],chainId:l.from.chainId}),ae=Ye(ze[1]),nt={...s,fromAmount:ae};return{fromAmount:ae,summary:await R(nt,{networkFee:ze[3],exFee:ze[4]},await tt(ae))}}let I=l.type==="bridge-swap"?Fe(l,"last"):Fe(l,"first");if(!I)return{error:"Swap route is not available."};let C=await Te({path:l,step:I,amount:b,source:s.lastChangedBy});if(s.lastChangedBy==="from"){let q={...s,toAmount:C.amount};return{toAmount:C.amount,summary:await R(q,x,C.priceImpact)}}let K={...s,fromAmount:C.amount};return{fromAmount:C.amount,summary:await R(K,x,C.priceImpact)}}catch(I){return{fromAmount:s.fromAmount,toAmount:s.toAmount,summary:await R(s,x),error:Zr(I)}}},[W,O,h,r,ve,B,N,Te,o]),He=ee(async s=>{if(s.from.isNativeToken)return null;if(s.type==="swap"||s.type==="deposit-swap"||s.type==="swap-withdraw")return me(s.from.chainId);if(s.type==="swap-bridge")return r.contracts.SWAP_BRIDGE_ROUTER;let i=s.steps.find(c=>c.type==="bridge");return i?.bridgeAddress?i.bridgeAddress:null},[r.contracts.SWAP_BRIDGE_ROUTER,me]),et=ee(async s=>{if(!t)throw new Error("Wallet is not connected.");let i=le(s.fromToken),c=le(s.toToken),l=B(i,c);if(!l)throw new Error("Route is not available.");if(!Be(l.type)&&l.type!=="swap-bridge"||l.from.isNativeToken)return null;let b=pe(s.fromAmount);if(b<=0n)return null;let P=await He(l);return!P||await Ie(o,{address:l.from.address,abi:Rt,functionName:"allowance",args:[t,P],chainId:l.from.chainId})>=b?null:{token:s.fromToken,tokenAddress:l.from.address,spenderAddress:P,amount:s.fromAmount}},[B,He,o,t]),We=ee(async(s,i)=>{let c=pe(i.amount||s.fromAmount);if(c<=0n)throw new Error("Approval amount is empty.");await X(i.token.chainId);let l=await sn(o,{address:i.tokenAddress,abi:Rt,functionName:"approve",args:[i.spenderAddress,c],chainId:i.token.chainId});await Gr(o,{hash:l,chainId:i.token.chainId})},[X,o]),Le=ee(async(s,i)=>{let c=await Se(s,i);await X(c.chainId);let l=await mn(o,c.chainId,c.fallbackGasLimit,Kr(i.type),{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value});return{txHash:await sn(o,{address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value,chainId:c.chainId,...l}),fromToken:s.fromToken,toToken:s.toToken,fromAmount:s.fromAmount,toAmount:s.toAmount}},[Se,X,o,t]),ie=ee(async(s,i)=>{let c=t;if(!c)throw new Error("Wallet is not connected.");let l=i.steps.find(Me=>Me.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let b=i.from.address,P=i.from.chainId,E=pe(s.fromAmount);if(E<=0n)throw new Error("Bridge amount is empty.");let R=await N(i),L=$e(R?.gasFee??R?.gas_fee),H=fn(E,R?.exFeeRate??R?.ex_fee_rate),x=E+H+L,[_,d]=await Promise.all([Ie(o,{address:b,abi:an,functionName:"name",chainId:P}),Ie(o,{address:b,abi:an,functionName:"nonces",args:[c],chainId:P})]),g=BigInt(Math.floor(Date.now()/1e3)+300),I=await Mr(o,{domain:{name:_,version:"1",chainId:P,verifyingContract:b},types:{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},primaryType:"Permit",message:{owner:c,spender:l.bridgeAddress,value:x,nonce:d,deadline:g}}),{r:C,s:K,v:q,yParity:Z}=Wr(I),tt=q!==void 0?Number(q):Z+27,ze={exFee:H.toString(),from:P,fromToken:b,nonce:Number(d),gasFee:L.toString(),permitArgs:{account:c,deadline:g.toString(),r:C,s:K,token:b,v:tt,value:x.toString()},to:c,toChainID:String(i.to.chainId),value:x.toString()},ae=await dn(`${r.bridgeApi}/permit`,ze),nt=ae?.requestId??ae?.request_id;if(!nt)throw new Error("Bridge permit request failed.");let ge=await Yr(r.bridgeApi,nt);if(!Ot(ge))throw new Error("Bridge submitted, but confirmation timed out. Check History shortly.");return{txHash:ge,fromToken:s.fromToken,toToken:s.toToken,fromAmount:s.fromAmount,toAmount:s.toAmount}},[r,N,o,t]),Pe=ee(async s=>{let i=At(o),c=le(s.fromToken),l=le(s.toToken),b=B(c,l);if(!b)throw new Error("Route is not available.");if(!(Be(b.type)||b.type==="swap-bridge"||b.type==="bridge-swap"||b.type==="bridge"))throw new Error("This bridge route is not supported yet.");let R=b.type==="bridge"&&b.from.chainId===r.chainIds.bsc&&b.from.address.toLowerCase()===r.contracts.BSC_CROSS.toLowerCase()?await ie(s,b):await Le(s,b);return await fe(i),{...R,pathType:b.type,routeTokens:Ro(b,h)}},[h,r,B,fe,ie,Le,o]);return{bridgeTokens:xe,bridgeHistory:V,getBridgeApproval:et,approveBridge:We,getBridgeQuote:we,getBridgeToTokens:Je,submitBridge:Pe,isLoading:y.isLoading||u.isLoading||T.isLoading||p.isLoading||k.some(s=>s.isLoading)}}import{useEffect as vn,useRef as _o,useState as Pn}from"react";import{useAccount as Eo}from"wagmi";function Ft(e){let{address:t,connector:n}=Eo(),{currentWallet:a}=Ee(),o=e?.walletId!==void 0?e.walletId:a,r=e?.connector!==void 0?e.connector:n,m=e?.address!==void 0?e.address:t,[f,y]=Pn({loginType:null,accountName:null,accounts:[],isResolved:!1}),u=_o(new Map),[w,S]=Pn(0);return vn(()=>{let T=!1;if(o!=="cross_embedded")return y({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{T=!0};if(!r)return y({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{T=!0};y(v=>({...v,isResolved:!1}));let p=20,k=300,A=async()=>{if(typeof r.getProvider!="function")return"retry";let v;try{v=await r.getProvider()}catch{return"retry"}let h=v?.sdk;if(!h)return"giveup";try{let N=h.getRNBridgeActiveWallet?.(),xe=N?.walletName?.trim();N&&xe&&u.current.set(N.address.toLowerCase(),xe)}catch{}let[B,G]=await Promise.all([h.getUserInfo?.().catch(()=>null)??null,h.getAddresses?.().catch(()=>null)??null]);if(T)return"done";let D=B?.loginType,re=D==="google"||D==="apple"?D:null;if(!re)return"retry";let j=m?.toLowerCase(),V=j&&Array.isArray(G)?G.find(N=>N.address.toLowerCase()===j):null,W=Array.isArray(G)?G.filter(N=>/^0x[a-fA-F0-9]{40}$/.test(N.address)).map(N=>({address:N.address.toLowerCase(),...Number.isFinite(N.index)?{index:N.index}:{},...N.name?.trim()?{name:N.name.trim()}:{}})):[],U=j?u.current.get(j)?.trim():void 0,he=!V&&j&&/^0x[a-fA-F0-9]{40}$/.test(j)?[...W,{address:j,index:W.length,...U?{name:U}:{}}]:W,O=U||V?.name?.trim()||(typeof V?.index=="number"?`Account ${V.index+1}`:m?`${m.slice(0,6)}\u2026${m.slice(-4)}`:null);return y({loginType:re,accountName:O,accounts:he,isResolved:!0}),"done"};return(async()=>{for(let v=0;v<p;v++){if(T)return;let h=await A();if(h==="done")return;if(h==="giveup"){T||y({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(B=>setTimeout(B,k))}T||y({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{T=!0}},[o,r,m,w]),vn(()=>{if(o!=="cross_embedded"||!r||typeof r.getProvider!="function")return;let T=!1,p;return(async()=>{let k;try{k=await r.getProvider()}catch{return}if(T)return;let A=k?.sdk;A?.on&&(p=A.on("addressChanged",({address:v,walletName:h})=>{let B=h?.trim();B&&(u.current.set(v.toLowerCase(),B),S(G=>G+1))}))})(),()=>{T=!0,p?.()}},[o,r]),f}import{Fragment as Bn,jsx as ue,jsxs as Ze}from"react/jsx-runtime";var qo=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalSupply",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}],Vo=[{type:"function",name:"earned",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"posaActive",stateMutability:"view",inputs:[],outputs:[{name:"",type:"bool"}]},{type:"function",name:"lastRewardBlock",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalStaked",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]}],Ho={dev:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},stage:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},production:{poolAddress:"0x000000068122d9bB43B4BCF5497A10EdfA9F5E93",crossChainId:612055,networkStatsUrl:"https://posa-api.crosstoken.io/api/v1/network/stats"}},Lt=10n**18n,zo={google:{name:"Google",iconUrl:En,connectorId:Ve.CROSSx},apple:{name:"Apple",iconUrl:Ut,connectorId:Ve.CROSSx},cross:{name:"CROSSx",iconUrl:Gt,connectorId:Ve.CROSSx},metamask:{name:"MetaMask",iconUrl:On,connectorId:Ve.MetaMask},binance:{name:"Binance Wallet",iconUrl:_n,connectorId:Ve.Binance}};function Qo(e){switch(e){case"cross_embedded":return Ve.CROSSx;case"metamask":return Ve.MetaMask;case"binance":return Ve.Binance;default:return}}function jo(e,t){switch(e){case"cross_embedded":return t==="google"?{name:"Google",iconUrl:En}:t==="apple"?{name:"Apple",iconUrl:Ut}:{name:"CROSSx",iconUrl:Gt};case"cross_wallet":return{name:"CROSSx Wallet",iconUrl:Gt};case"cross_extension":return{name:"CROSSx Extension",iconUrl:$o};case"metamask":return{name:"MetaMask",iconUrl:On};case"binance":return{name:"Binance Wallet",iconUrl:_n};default:return null}}var Xo="Bridge is available only with the CROSSx 2.0 wallet.",Yo="Send is available only with the CROSSx 2.0 wallet.";function Zo({label:e="Connect Wallet",className:t,style:n,walletInfoStyle:a,user:o,enablePortfolio:r,portfolio:m,theme:f,accountName:y,connectorId:u,showPortfolio:w,sendAccounts:S,getTransactionReceipt:T,sendTransaction:p,estimateGas:k,onDisconnect:A,onSelectWallet:v,onBuy:h,onRampRedirectUrl:B,bridgeTokens:G,bridgeHistory:D,getBridgeQuote:re,getBridgeToTokens:j,getBridgeApproval:V,approveBridge:W,submitBridge:U,showBalance:he=!0,env:F,...O}){let{address:N,isConnected:xe,connector:Je,chain:se}=Fo(),X=Wo(),fe=Do(),{switchChainAsync:me}=Mo(),{sendTransactionAsync:Te}=Lo(),{connectWallet:Se,disconnect:De,selectWallet:ve,currentWallet:we,isConnecting:He,kitConfig:et}=Ee(),We=et?.restoreChainAfterSwitch!==!1,Le=ct(),ie=f??Le?.mode??"dark",Pe=mt(()=>Go(F),[F]),s=o?.address??N,i=o?zo[o.provider]:null,{loginType:c,accountName:l,accounts:b}=Ft({walletId:we,connector:Je,address:s}),P=mt(()=>i?{name:i.name,iconUrl:i.iconUrl}:jo(we,c),[i,we,c]),E=y??o?.name??l??void 0,R=i?i.connectorId:Qo(we),L=u??R,H=m??w??!!r,x=Nt({env:Pe,walletAddress:s,enabled:xe&&!!s&&he,restoreChainAfterSwitch:We}),_=G??x.bridgeTokens,d=D??x.bridgeHistory,g=re??x.getBridgeQuote,I=j??x.getBridgeToTokens,C=V??x.getBridgeApproval,K=W??x.approveBridge,q=U??x.submitBridge,Z=qe(()=>{Se().catch(M=>{console.error("[crossx-kit] connectWallet error:",M)})},[Se]),tt=qe(()=>{De()},[De]),ze=A??tt,ae=Uo(),{eligibility:nt}=Ko({network:se?String(se.id):void 0}),ge=nt?.allowed===!0,Me=mt(()=>{if(h)return h;if(!(!ae||!se||!ge))return()=>ae.open({crypto:se.nativeCurrency?.symbol??"USDT",network:String(se.id),...B?{redirectUrl:B}:{}}).then(()=>{}).catch(M=>{throw console.warn("[crossx-kit] onramp open failed:",M),M})},[h,ae,se,ge,B]),pt=No();Oo(()=>{if(ae?.onStatus)return ae.onStatus(()=>{pt.invalidateQueries()})},[ae,pt]);let Ln=mt(()=>{if(!h&&!(!ae||!se)&&!ge)return"On-ramp is not available in your region."},[h,ae,se,ge]),Kt=mt(()=>o?o.provider==="google"||o.provider==="apple":we==="cross_embedded",[o,we]),Mn=O.onBridgeDisabledMessage??(Kt?void 0:Xo),Gn=O.onSendDisabledMessage??(Kt?void 0:Yo),Un=o?o.provider==="google"||o.provider==="apple":we==="cross_embedded",Kn=qe(()=>{ve().catch(M=>{console.error("[crossx-kit] selectWallet error:",M)})},[ve]),$t=v??(Un?Kn:void 0),$n=qe(async({hash:M,chainId:Y})=>{let J=Dt(X,Y?{chainId:Y}:void 0);if(!J)return null;try{return await J.getTransactionReceipt({hash:M})}catch{return null}},[X]),qn=qe(async M=>{let Y=fe,J=!1;M.chainId!==void 0&&M.chainId!==fe&&(await me({chainId:M.chainId}),J=!0);let ce=M.chainId===56||M.chainId===97?{...M,type:"legacy"}:M,z=await(p??Te)(ce);return await yt({getChainId:()=>J?M.chainId:Y,switchChain:ye=>me({chainId:ye})},Y,We),z},[p,Te,fe,me,We]),Vn=H||p?qn:void 0,Hn=qe(async M=>{let Y=M.chainId??fe,J=Dt(X,Y?{chainId:Y}:void 0);if(!J)throw new Error(`publicClient for chainId ${Y??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let be=Y===56||Y===97,[ce,Ce]=await Promise.all([J.estimateGas({account:M.from,to:M.to,value:M.value,data:M.data}),(async()=>{if(be)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await J.getGasPrice()};try{let z=await J.estimateFeesPerGas();return{maxFeePerGas:z.maxFeePerGas,maxPriorityFeePerGas:z.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await J.getGasPrice()}}})()]);return{gasLimit:ce,maxFeePerGas:Ce.maxFeePerGas,maxPriorityFeePerGas:Ce.maxPriorityFeePerGas,gasPrice:Ce.gasPrice}},[X,fe]),zn=k??Hn,Qn=qe(async M=>{let Y={};if(!N||M.length===0)return Y;let J=M.flatMap(ce=>{let z={address:ce,abi:qo,chainId:fe};return[{...z,functionName:"balanceOf",args:[N]},{...z,functionName:"totalSupply"},{...z,functionName:"decimals"}]}),be;try{be=await An(X,{contracts:J,allowFailure:!0})}catch{return Y}return M.forEach((ce,Ce)=>{let z=Ce*3,ye=be[z],ft=be[z+1],rt=be[z+2];!ye||ye.status!=="success"||(Y[ce.toLowerCase()]={balance:ye.result,totalSupply:ft&&ft.status==="success"?ft.result:void 0,decimals:rt&&rt.status==="success"?Number(rt.result):void 0})}),Y},[X,N,fe]),jn=qe(async M=>{let Y={earnedWei:0n,stakedWei:0n};if(!M)return Y;let J=Ho[Pe],be={address:J.poolAddress,abi:Vo,chainId:J.crossChainId},ce;try{ce=await An(X,{allowFailure:!0,contracts:[{...be,functionName:"earned",args:[M]},{...be,functionName:"balanceOf",args:[M]},{...be,functionName:"posaActive"},{...be,functionName:"lastRewardBlock"},{...be,functionName:"totalStaked"}]})}catch{return Y}let Ce=Qe=>ce[Qe]&&ce[Qe].status==="success"?ce[Qe].result:0n,z=Ce(0),ye=Ce(1);if(ce[2]&&ce[2].status==="success"?ce[2].result:!1)return{earnedWei:z,stakedWei:ye};let rt=Ce(3),Ht=Ce(4);if(Ht===0n)return{earnedWei:z,stakedWei:ye};let xt=0n;try{xt=await Dt(X,{chainId:J.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:z,stakedWei:ye}}if(xt<=rt)return{earnedWei:z,stakedWei:ye};let Tt=0n;try{let Qe=await fetch(J.networkStatsUrl).then(It=>It.json()),zt=Qe?.data?.block_reward??Qe?.block_reward;if(zt){let[It,Jn=""]=String(zt).split("."),er=(Jn+"0".repeat(18)).slice(0,18);Tt=BigInt(It||"0")*Lt+BigInt(er||"0")}}catch{}if(Tt===0n)return{earnedWei:z,stakedWei:ye};let Yn=(xt-rt)*Tt*Lt/Ht,Zn=ye*Yn/Lt;return{earnedWei:z+Zn,stakedWei:ye}},[X,Pe]),qt=!$t,Vt=t?`cb-button ${t}`:"cb-button",Xn=t?`cb-pill ${t}`:"cb-pill";return He&&!xe?Ze(Bn,{children:[ue("style",{children:Mt}),Ze("button",{type:"button",disabled:!0,className:Vt,style:n,"aria-busy":"true",children:[ue("span",{className:"cb-spinner","aria-hidden":"true"}),ue("span",{className:"cb-button-label",children:"Connecting..."})]})]}):xe&&s?Ze("span",{"data-crossx-wallet-info":qt?"external":"embedded",children:[ue("style",{children:Mt}),qt&&ue("style",{children:es}),Ze(Wt,{...O,env:Pe,theme:ie,showBalance:he,walletAddress:s,accountName:E,sendAccounts:S??b,connectorId:L,showPortfolio:H,onDisconnect:ze,onSelectWallet:$t,onBuy:Me,onBuyDisabledMessage:Ln,onBridgeDisabledMessage:Mn,onSendDisabledMessage:Gn,sendTransaction:Vn,getTransactionReceipt:T??$n,estimateGas:zn,lpBalanceReader:Qn,stakingRewardsReader:jn,bridgeTokens:_,bridgeHistory:d,getBridgeQuote:g,getBridgeToTokens:I,getBridgeApproval:C,approveBridge:K,submitBridge:q,style:a,children:[ue(Wt.Trigger,{asChild:!0,children:Ze("button",{type:"button",className:Xn,style:n,"aria-label":`Connected with ${P?.name??"wallet"}: ${Rn(s)}`,children:[P?.iconUrl?ue("img",{src:P.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":P.iconUrl===Ut?"apple":void 0}):ue("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),ue("span",{className:"cb-pill-address",children:Rn(s)})]})}),ue(Wt.Content,{align:"end",sideOffset:8})]})]}):Ze(Bn,{children:[ue("style",{children:Mt}),Ze("button",{type:"button",onClick:Z,className:Vt,style:n,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[ue(Jo,{}),ue("span",{className:"cb-button-label",children:e})]})]})}function Jo(){return ue("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:ue("path",{d:"M11.4368 10.5007C11.4368 9.9538 11.6544 9.42855 12.041 9.04175C12.4278 8.65492 12.9529 8.4375 13.5 8.4375H15.1875V6.00073L15.1732 5.92822C15.1639 5.90585 15.15 5.88528 15.1326 5.8678C15.0973 5.83263 15.0494 5.81287 14.9996 5.81287H3.74963C3.4787 5.81287 3.21001 5.75949 2.95972 5.65576C2.90937 5.63488 2.86089 5.61017 2.8125 5.58545V14.2504C2.8125 14.4989 2.91141 14.7371 3.08716 14.9128C3.2629 15.0886 3.50109 15.1875 3.74963 15.1875H15.0007C15.0252 15.1875 15.0495 15.1826 15.0721 15.1732C15.0948 15.1638 15.1152 15.1499 15.1326 15.1326C15.1499 15.1152 15.1638 15.0948 15.1732 15.0721C15.1826 15.0495 15.1875 15.0252 15.1875 15.0007V12.5629H13.5C12.9529 12.5629 12.4278 12.3454 12.041 11.9586C11.6545 11.5719 11.4369 11.0475 11.4368 10.5007ZM12.5618 10.5007C12.5619 10.7491 12.6609 10.9875 12.8364 11.1632C13.0123 11.3391 13.2513 11.4379 13.5 11.4379H15.75C15.7998 11.4379 15.8477 11.4182 15.8829 11.3829C15.9182 11.3477 15.9379 11.2998 15.9379 11.25V9.75037C15.9379 9.70054 15.9182 9.65266 15.8829 9.61743C15.8477 9.5822 15.7998 9.5625 15.75 9.5625H13.5C13.2513 9.5625 13.0123 9.66131 12.8364 9.83716C12.6607 10.013 12.5618 10.2522 12.5618 10.5007ZM13.6879 3.00037C13.6879 2.95054 13.6682 2.90266 13.6329 2.86743C13.5977 2.8322 13.5498 2.8125 13.5 2.8125H3.74963C3.50109 2.8125 3.2629 2.91141 3.08716 3.08716C2.91141 3.2629 2.8125 3.50109 2.8125 3.74963L2.81689 3.84192C2.82585 3.93354 2.8486 4.02351 2.88391 4.10889C2.93096 4.22263 3.00015 4.32614 3.08716 4.41321C3.17403 4.50009 3.2769 4.56936 3.39038 4.61646C3.50412 4.66359 3.62651 4.68787 3.74963 4.68787H13.6879V3.00037ZM14.8129 4.68787H14.9996C15.3473 4.68787 15.6808 4.82576 15.9269 5.07129C16.173 5.31702 16.3119 5.65077 16.3125 5.99854V8.56494C16.4469 8.62873 16.5711 8.7148 16.6783 8.82202C16.9246 9.06823 17.0629 9.40217 17.0629 9.75037V11.25C17.0629 11.5982 16.9246 11.9321 16.6783 12.1783C16.5712 12.2855 16.4468 12.3706 16.3125 12.4343V14.9985L16.3059 15.1282C16.2934 15.2564 16.2619 15.3822 16.2125 15.5017C16.1466 15.6612 16.05 15.806 15.928 15.928C15.806 16.05 15.6612 16.1466 15.5017 16.2125C15.3425 16.2783 15.1719 16.3126 14.9996 16.3125H3.74963C3.20272 16.3125 2.67847 16.095 2.29175 15.7083C1.90502 15.3215 1.6875 14.7973 1.6875 14.2504V3.74963C1.6875 3.20272 1.90502 2.67847 2.29175 2.29175C2.67847 1.90502 3.20272 1.6875 3.74963 1.6875H13.5C13.8482 1.6875 14.1821 1.82581 14.4283 2.07202C14.6746 2.31823 14.8129 2.65217 14.8129 3.00037V4.68787Z",fill:"currentColor"})})}var es=`
3
+ [data-crossx-wallet-info="external"] .wi-select-wallet-btn {
4
+ display: none !important;
5
+ }
6
+ `;function Rn(e){return`${e.slice(0,6)}...${e.slice(-4)}`}var Mt=`
7
+ .cb-button {
8
+ -webkit-font-smoothing: antialiased;
9
+ --cb-bg: var(--ds-accent-primary-default, #00D5AA);
10
+ --cb-bg-hover: var(--ds-accent-primary-high, #00a0a2);
11
+ --cb-color: var(--ds-accent-primary-on, #000);
12
+ --cb-border: none;
13
+ --cb-radius: 8px;
14
+ --cb-height: 36px;
15
+ --cb-padding: 0 16px;
16
+ --cb-font-family: Inter, system-ui, -apple-system, sans-serif;
17
+ --cb-font-size: 14px;
18
+ --cb-font-weight: 500;
19
+ --cb-gap: 8px;
20
+ --cb-transition: background-color 0.15s ease, transform 0.1s ease;
21
+ --cb-loading-opacity: 0.7;
22
+ --cb-press-scale: 0.95;
23
+ --cb-spinner-size: 14px;
24
+ --cb-spinner-thumb: currentColor;
25
+ --cb-spinner-track: color-mix(in srgb, currentColor 20%, transparent);
26
+ --cb-icon-size: 18px;
27
+
28
+ display: inline-flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ box-sizing: border-box;
32
+ height: var(--cb-height);
33
+ gap: var(--cb-gap);
34
+ padding: var(--cb-padding);
35
+ border-radius: var(--cb-radius);
36
+ border: var(--cb-border);
37
+ background: var(--cb-bg);
38
+ color: var(--cb-color);
39
+ font-family: var(--cb-font-family);
40
+ font-size: var(--cb-font-size);
41
+ font-weight: var(--cb-font-weight);
42
+ cursor: pointer;
43
+ transition: var(--cb-transition);
44
+ }
45
+ .cb-button:hover:not(:disabled) { background: var(--cb-bg-hover); }
46
+ .cb-button:active:not(:disabled) { transform: scale(var(--cb-press-scale)); }
47
+ .cb-button:disabled, .cb-button[aria-busy="true"] {
48
+ cursor: default;
49
+ opacity: var(--cb-loading-opacity);
50
+ }
51
+ .cb-spinner {
52
+ display: inline-block;
53
+ width: var(--cb-spinner-size);
54
+ height: var(--cb-spinner-size);
55
+ border: 2px solid var(--cb-spinner-track);
56
+ border-top-color: var(--cb-spinner-thumb);
57
+ border-radius: 50%;
58
+ animation: cck-cb-spin 0.6s linear infinite;
59
+ flex-shrink: 0;
60
+ }
61
+ .cb-button-icon {
62
+ width: var(--cb-icon-size);
63
+ height: var(--cb-icon-size);
64
+ flex-shrink: 0;
65
+ }
66
+ .cb-button-label { white-space: nowrap; }
67
+ .cb-pill {
68
+ --cb-pill-bg: var(--ds-surface-default, #1e232e);
69
+ --cb-pill-bg-hover: var(--ds-surface-medium, #252b39);
70
+ --cb-pill-color: var(--ds-content-high, #ffffffd9);
71
+ --cb-pill-border: 1px solid var(--ds-border-default, #ffffff12);
72
+ --cb-pill-border-hover: 1px solid var(--ds-border-medium, #ffffff2e);
73
+ --cb-pill-radius: 8px;
74
+ --cb-pill-height: 36px;
75
+ --cb-pill-padding: 0 12px;
76
+ --cb-pill-press-scale: 0.95;
77
+ --cb-pill-font-family: Inter, system-ui, -apple-system, sans-serif;
78
+ --cb-pill-font-size: 14px;
79
+ --cb-pill-font-weight: 500;
80
+ --cb-pill-gap: 8px;
81
+ --cb-pill-icon-size: 20px;
82
+ --cb-pill-icon-placeholder-bg: var(--ds-surface-high, #2a2d3a);
83
+ --cb-pill-address-font: Inter, system-ui, -apple-system, sans-serif;
84
+ --cb-pill-address-font-size: 14px;
85
+ --cb-pill-address-letter-spacing: -0.01em;
86
+
87
+ display: inline-flex;
88
+ align-items: center;
89
+ box-sizing: border-box;
90
+ height: var(--cb-pill-height);
91
+ gap: var(--cb-pill-gap);
92
+ padding: var(--cb-pill-padding);
93
+ border-radius: var(--cb-pill-radius);
94
+ border: var(--cb-pill-border);
95
+ background: var(--cb-pill-bg);
96
+ color: var(--cb-pill-color);
97
+ font-family: var(--cb-pill-font-family);
98
+ font-size: var(--cb-pill-font-size);
99
+ font-weight: var(--cb-pill-font-weight);
100
+ cursor: pointer;
101
+ }
102
+ .cb-pill:hover,
103
+ .cb-pill[data-state="open"] { background: var(--cb-pill-bg-hover); border: var(--cb-pill-border-hover, 1px solid var(--ds-border-medium, #ffffff2e)); }
104
+ .cb-pill:active:not(:disabled) { transform: scale(var(--cb-pill-press-scale)); }
105
+ .cb-pill-icon {
106
+ width: var(--cb-pill-icon-size);
107
+ height: var(--cb-pill-icon-size);
108
+ border-radius: 50%;
109
+ object-fit: contain;
110
+ flex-shrink: 0;
111
+ background: transparent;
112
+ }
113
+ /* Apple is a monochrome black logomark in an <img> data URI (can't follow
114
+ theme via currentColor). Flip it to white in dark mode so it stays
115
+ visible on the dark pill; multicolor marks (Google/MetaMask/Binance/
116
+ CROSSx) are untouched. */
117
+ [data-theme="dark"] .cb-pill-icon[data-provider="apple"] {
118
+ filter: invert(1);
119
+ }
120
+ .cb-pill-icon-placeholder {
121
+ display: inline-block;
122
+ width: var(--cb-pill-icon-size);
123
+ height: var(--cb-pill-icon-size);
124
+ border-radius: 50%;
125
+ background: var(--cb-pill-icon-placeholder-bg);
126
+ flex-shrink: 0;
127
+ }
128
+ .cb-pill-address {
129
+ font-family: var(--cb-pill-address-font);
130
+ font-size: var(--cb-pill-address-font-size);
131
+ letter-spacing: var(--cb-pill-address-letter-spacing);
132
+ }
133
+ @media (max-width: 767.98px) {
134
+ .cb-button, .cb-pill {
135
+ width: 36px;
136
+ min-width: 36px;
137
+ padding: 0;
138
+ }
139
+ .cb-button-label, .cb-pill-address { display: none; }
140
+ }
141
+ @keyframes cck-cb-spin {
142
+ to { transform: rotate(360deg); }
143
+ }
144
+ `;import{useCallback as Nn,useEffect as ts,useMemo as Fn,useState as ns}from"react";import{detectWallets as Dn,DEFAULT_WALLET_REGISTRY as Wn}from"@nexus-cross/connect-kit-wagmi";import{jsx as oe,jsxs as _e}from"react/jsx-runtime";var rs=["Ensure your wallet extension is installed and unlocked","Try refreshing the page","Some wallets may require you to first open the extension","You can try clicking the wallet anyway"],os="Connect with one of our available wallet providers to continue.";function ss({open:e,onClose:t,onSelect:n,title:a="Connect Wallet",description:o=os,troubleshootingTips:r=rs}){let{availableWallets:m}=Ee(),[f,y]=ns({});ts(()=>{if(!e)return;let p=Dn(Wn),k={};for(let v of p)v.installed!==void 0&&(k[v.id]=v.installed);y(k);let A=setTimeout(()=>{let v=Dn(Wn),h={};for(let B of v)B.installed!==void 0&&(h[B.id]=B.installed);y(h)},1e3);return()=>clearTimeout(A)},[e]);let u=Fn(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),w=Fn(()=>u?m.filter(p=>p.type!=="extension"):m,[m,u]),S=Nn(p=>{if(!f[p.walletId]&&p.installUrl&&p.type==="extension"){window.open(p.installUrl,"_blank");return}t(),n(p.walletId)},[t,n,f]),T=Nn((p,k)=>{p.stopPropagation(),t(),window.open(k,"_blank")},[t]);return e?oe("div",{style:$.overlay,onClick:t,children:_e("div",{style:$.modal,onClick:p=>p.stopPropagation(),children:[_e("div",{style:$.header,children:[oe("h2",{style:$.title,children:a}),oe("button",{type:"button",onClick:t,style:$.closeBtn,"aria-label":"Close",children:_e("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[oe("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),oe("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),oe("p",{style:$.desc,children:o}),oe("div",{style:$.walletList,children:w.map(p=>{let k=f[p.walletId],A=k===!1&&p.type==="extension"&&!!p.installUrl;return _e("div",{style:$.walletGroup,children:[_e("button",{type:"button",onClick:()=>S(p),style:{...$.walletItem,...p.walletId==="cross_wallet"?$.walletItemAccent:{}},"aria-label":`Connect with ${p.name}`,children:[p.iconUrl?oe("img",{src:p.iconUrl,alt:"",style:$.walletIcon}):oe("div",{style:$.walletIconPlaceholder}),_e("div",{style:$.walletInfo,children:[_e("div",{style:$.walletNameRow,children:[oe("span",{style:$.walletName,children:p.name}),k!==void 0&&oe("span",{style:{...$.badge,...k?$.badgeInstalled:$.badgeNotInstalled},children:k?"Installed":"Not Installed"})]}),oe("span",{style:$.walletDesc,children:A?"Extension not detected \u2014 click to install":p.type==="extension"?"Browser extension approval is required":p.walletId==="cross_wallet"?"App approval is required":p.walletId==="binance"?"Mobile app only \u2014 Add CROSS network first":k?"Connect with browser extension":"Scan QR code with app"})]})]}),p.guideUrl&&_e("button",{type:"button",onClick:v=>T(v,p.guideUrl),style:$.guideBtn,children:[oe("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),p.guideLabel??"Required Settings"]})]},p.walletId)})}),_e("div",{style:$.troubleshoot,children:[oe("h3",{style:$.troubleshootTitle,children:"Wallet not detected?"}),oe("ul",{style:$.troubleshootList,children:r.map(p=>_e("li",{style:$.troubleshootItem,children:[oe("span",{style:$.troubleshootDot,"aria-hidden":"true"}),oe("span",{children:p})]},p))})]})]})}):null}var Q={surfaceBg:"var(--wi-surface-bg, #121212)",surfaceDefault:"var(--wi-surface-default, rgba(255,255,255,0.05))",surfaceSubtle:"var(--wi-surface-subtle, rgba(255,255,255,0.1))",borderDefault:"var(--wi-border-default, rgba(255,255,255,0.05))",textPrimary:"var(--wi-texticon-primary, #ffffff)",textSecondary:"var(--wi-texticon-secondary, rgba(255,255,255,0.7))",textTertiary:"var(--wi-texticon-tertiary, rgba(255,255,255,0.5))",primary:"var(--wi-primary, #019d92)",primarySoft:"var(--crossx-kit-primary-soft, rgba(1,157,146,0.15))",accentGradient:"var(--crossx-kit-accent-gradient, linear-gradient(113deg, rgba(255,255,255,0.05) 0%, rgba(1,157,146,0.12) 70%, rgba(255,255,255,0.05) 70%, rgba(1,157,146,0.12) 80%, rgba(255,255,255,0.05) 80%))",warningBg:"var(--crossx-kit-warning-bg, rgba(245,158,11,0.1))",warningBorder:"var(--crossx-kit-warning-border, rgba(245,158,11,0.25))",warningText:"var(--crossx-kit-warning-text, #fbbf24)"},$={overlay:{position:"fixed",inset:0,zIndex:1e4,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",backdropFilter:"blur(4px)"},modal:{width:"100%",maxWidth:"420px",margin:"16px",background:Q.surfaceBg,border:`1px solid ${Q.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:Q.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:Q.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:Q.textTertiary,margin:0,lineHeight:1.5},walletList:{display:"flex",flexDirection:"column",gap:"6px",padding:"0 12px 12px"},walletGroup:{display:"flex",flexDirection:"column",borderRadius:"12px",overflow:"hidden",background:Q.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:Q.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:Q.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:Q.surfaceSubtle,flexShrink:0},walletInfo:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"3px"},walletNameRow:{display:"flex",alignItems:"center",gap:"8px"},walletName:{fontSize:"15px",fontWeight:700,lineHeight:1.3,color:Q.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:Q.primarySoft,color:Q.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:Q.textTertiary},walletDesc:{fontSize:"11px",color:Q.textSecondary,lineHeight:1.3},guideBtn:{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px",margin:"0 14px 14px",padding:"10px 12px",borderRadius:"10px",border:`1px solid ${Q.warningBorder}`,background:Q.warningBg,color:Q.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:Q.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:Q.textPrimary,margin:"0 0 8px"},troubleshootList:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"8px"},troubleshootItem:{display:"flex",alignItems:"flex-start",gap:"8px",fontSize:"11px",color:Q.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:Q.textSecondary}};import{useOnRamp as ki,useOnRampEligibility as xi,OnRampProvider as Ti}from"@nexus-cross/onramp/react";import{useKyc as Si,useOptionalKyc as vi,KycProvider as Pi,KycError as Ai,launchKycVerification as Ri}from"@nexus-cross/kyc/react";import{WalletInfo as _i,ConnectorId as Ei}from"@nexus-cross/dapp-ui";import{AppLauncher as Ni,AppLauncherTrigger as Fi,AppLauncherContent as Di,useGlobalMenu as Wi}from"@nexus-cross/dapp-ui";import{SkillsButton as Mi}from"@nexus-cross/dapp-ui";import{OnRampError as Ui}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as $i,formatBalance as qi,formatWei as Vi}from"@nexus-cross/connect-kit-core";Qt();export{Ee as a,ir as b,ct as c,vt as d,Fr as e,Nt as f,Ft as g,Zo as h,ss as i,ki as j,xi as k,Ti as l,Si as m,vi as n,Pi as o,Ai as p,Ri as q,_i as r,Ei as s,Ni as t,Fi as u,Di as v,Wi as w,Mi as x,Ui as y,$i as z,qi as A,Vi as B};
package/dist/client.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { ConnectButton, ConnectButtonProps, CrossConnectKitContextValue, CrossConnectKitProvider, CrossConnectKitProviderProps, CrossConnectKitThemeContextValue, CrossConnectModal, CrossConnectModalProps, CrossxEmbeddedInfo, OtherWalletsModal, OtherWalletsModalProps, WalletProvider, WalletUser, useCrossConnectKit, useCrossConnectKitTheme, useCrossdBridgeAdapter, useCrossxEmbeddedInfo, useOptionalCrossConnectKitTheme } from './index.js';
2
2
  export { OnRampProvider, OnRampProviderProps, UseOnRampEligibilityOptions, UseOnRampEligibilityResult, UseOnRampOptions, UseOnRampResult, useOnRamp, useOnRampEligibility } from '@nexus-cross/onramp/react';
3
+ export { KycError, KycErrorCode, KycIdentity, KycLaunchTarget, KycLoginType, KycProvider, KycProviderProps, KycRejectType, KycStatus, KycVerificationHandle, KycVerificationMode, LaunchKycVerificationOptions, UseKycOptions, UseKycResult, launchKycVerification, useKyc, useOptionalKyc } from '@nexus-cross/kyc/react';
3
4
  export { AppLauncher, AppLauncherContent, AppLauncherContentProps, AppLauncherProps, AppLauncherTrigger, AppLauncherTriggerProps, AppLauncherTriggerStyle, ConnectButtonStyle, ConnectorId, GlobalMenu, GlobalMenuItem, GlobalMenuItemUrl, SendTransactionArgs, SendTransactionFn, SkillsButton, SkillsButtonProps, SkillsButtonStyle, WalletInfo, WalletInfoContentProps, WalletInfoProps, WalletInfoStyle, WalletInfoTriggerProps, useGlobalMenu } from '@nexus-cross/dapp-ui';
4
5
  import { AppMetadata, NetworkConfig, WalletId } from '@nexus-cross/connect-kit-core';
5
6
  export { Account, ChainBalance, ColorOverrides, ConnectionStatus, ConnectorType, CrossConnectKitConfig, ModalView, OnRampDisallowReason, OnRampEligibility, OnRampError, OnRampErrorCode, OnRampOpenParams, OnRampProviderId, OnRampSession, OnRampStatus, OnRampStatusEvent, Theme, ThemeMode, ThemeTokens, WalletDescriptor, WalletId, WalletState, formatBalance, formatWei } from '@nexus-cross/connect-kit-core';
package/dist/client.js CHANGED
@@ -1 +1 @@
1
- import{a as S,b as _,c as V,d as X,e as W,f as h,g as j,h as F,i as L,j as B,k as U,l as q,m as z,n as D,o as G,p as H,q as J,r as Q,s as Y,t as Z,u as $,v as ee,w as ne}from"./chunk-AGBUWVJ2.js";import{bscMainnetNetwork as v,bscTestnetNetwork as x,createCrossxConfig as E,crossMainnetNetwork as O,crossTestnetNetwork as k}from"@nexus-cross/connect-kit-wagmi";import{toNexusAdapter as M}from"@nexus-cross/connect-kit-wagmi/to-nexus";import{reownAdapter as P}from"@nexus-cross/connect-kit-wagmi/reown";import{embeddedConnectorFactory as A}from"@nexus-cross/connect-kit-wagmi/embedded";function d(e){try{return import.meta.env?.[e]}catch{return}}function p(e){if(!(typeof process>"u"))return process.env?.[e]}function I(){return d("VITE_CROSSX_ENVIRONMENT")??d("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("CROSSX_ENVIRONMENT")}function K(e){switch(e?.toLowerCase()){case"dev":case"development":return"development";case"stage":case"staging":case"stg":return"staging";default:return"production"}}function R(e){return e==="production"?[O,v]:[k,x]}function T(){return{name:"CROSSx DApp",url:typeof window<"u"&&window.location?.origin?window.location.origin:"https://example.com"}}function b(e){let{app:c,appMetadata:l,networks:u,defaultNetwork:f,wallets:n,embedded:C=!0,environment:w,toNexus:t,reown:o,...r}=e,g=K(w??I()),i=u??R(g),a=Array.isArray(n)?null:n??"all",s=a!=="external-only"&&t!==!1,m=a!=="cross-only"&&o!==!1&&!!r.reownProjectId,y=t===!1?void 0:t,N=o===!1?void 0:o;if(a==="external-only"&&!r.reownProjectId)throw new Error('[crossx-kit] createConnectKitConfig({ wallets: "external-only" }) requires `reownProjectId`.');return E({...r,appMetadata:l??c??T(),networks:i,defaultNetwork:f??i[0],...Array.isArray(n)?{wallets:n}:{},...s?{crossProvider:M(y)}:{},...m?{reownProvider:P(N)}:{},...s&&C?{embeddedConnectorFactory:A}:{}})}export{G as AppLauncher,J as AppLauncherContent,H as AppLauncherTrigger,F as ConnectButton,$ as ConnectionStatus,D as ConnectorId,W as CrossConnectKitProvider,X as CrossConnectModal,Z as OnRampError,q as OnRampProvider,L as OtherWalletsModal,Y as SkillsButton,z as WalletInfo,b as createConnectKitConfig,ee as formatBalance,ne as formatWei,S as useCrossConnectKit,_ as useCrossConnectKitTheme,h as useCrossdBridgeAdapter,j as useCrossxEmbeddedInfo,Q as useGlobalMenu,B as useOnRamp,U as useOnRampEligibility,V as useOptionalCrossConnectKitTheme};
1
+ import{A as ae,B as ie,a as S,b as _,c as V,d as X,e as W,f as h,g as j,h as F,i as L,j as B,k as U,l as q,m as z,n as D,o as G,p as H,q as J,r as Q,s as Y,t as Z,u as $,v as ee,w as ne,x as te,y as oe,z as re}from"./chunk-I37NNU7G.js";import{bscMainnetNetwork as v,bscTestnetNetwork as x,createCrossxConfig as E,crossMainnetNetwork as O,crossTestnetNetwork as k}from"@nexus-cross/connect-kit-wagmi";import{toNexusAdapter as M}from"@nexus-cross/connect-kit-wagmi/to-nexus";import{reownAdapter as P}from"@nexus-cross/connect-kit-wagmi/reown";import{embeddedConnectorFactory as A}from"@nexus-cross/connect-kit-wagmi/embedded";function d(e){try{return import.meta.env?.[e]}catch{return}}function p(e){if(!(typeof process>"u"))return process.env?.[e]}function I(){return d("VITE_CROSSX_ENVIRONMENT")??d("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("CROSSX_ENVIRONMENT")}function K(e){switch(e?.toLowerCase()){case"dev":case"development":return"development";case"stage":case"staging":case"stg":return"staging";default:return"production"}}function R(e){return e==="production"?[O,v]:[k,x]}function T(){return{name:"CROSSx DApp",url:typeof window<"u"&&window.location?.origin?window.location.origin:"https://example.com"}}function b(e){let{app:c,appMetadata:l,networks:u,defaultNetwork:f,wallets:n,embedded:C=!0,environment:w,toNexus:t,reown:o,...r}=e,g=K(w??I()),i=u??R(g),a=Array.isArray(n)?null:n??"all",s=a!=="external-only"&&t!==!1,m=a!=="cross-only"&&o!==!1&&!!r.reownProjectId,y=t===!1?void 0:t,N=o===!1?void 0:o;if(a==="external-only"&&!r.reownProjectId)throw new Error('[crossx-kit] createConnectKitConfig({ wallets: "external-only" }) requires `reownProjectId`.');return E({...r,appMetadata:l??c??T(),networks:i,defaultNetwork:f??i[0],...Array.isArray(n)?{wallets:n}:{},...s?{crossProvider:M(y)}:{},...m?{reownProvider:P(N)}:{},...s&&C?{embeddedConnectorFactory:A}:{}})}export{Z as AppLauncher,ee as AppLauncherContent,$ as AppLauncherTrigger,F as ConnectButton,re as ConnectionStatus,Y as ConnectorId,W as CrossConnectKitProvider,X as CrossConnectModal,H as KycError,G as KycProvider,oe as OnRampError,q as OnRampProvider,L as OtherWalletsModal,te as SkillsButton,Q as WalletInfo,b as createConnectKitConfig,ae as formatBalance,ie as formatWei,J as launchKycVerification,S as useCrossConnectKit,_ as useCrossConnectKitTheme,h as useCrossdBridgeAdapter,j as useCrossxEmbeddedInfo,ne as useGlobalMenu,z as useKyc,B as useOnRamp,U as useOnRampEligibility,V as useOptionalCrossConnectKitTheme,D as useOptionalKyc};
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ import { WalletInfoProps, ConnectButtonStyle, WalletInfoStyle, Environment, Brid
8
8
  export { AppLauncher, AppLauncherContent, AppLauncherContentProps, AppLauncherProps, AppLauncherTrigger, AppLauncherTriggerProps, AppLauncherTriggerStyle, ConnectButtonStyle, ConnectorId, GlobalMenu, GlobalMenuItem, GlobalMenuItemUrl, SendTransactionArgs, SendTransactionFn, SkillsButton, SkillsButtonProps, SkillsButtonStyle, WalletInfo, WalletInfoContentProps, WalletInfoProps, WalletInfoStyle, WalletInfoTriggerProps, useGlobalMenu } from '@nexus-cross/dapp-ui';
9
9
  import { Connector } from 'wagmi';
10
10
  export { OnRampProvider, OnRampProviderProps, UseOnRampEligibilityOptions, UseOnRampEligibilityResult, UseOnRampOptions, UseOnRampResult, useOnRamp, useOnRampEligibility } from '@nexus-cross/onramp/react';
11
+ export { KycError, KycErrorCode, KycIdentity, KycLaunchTarget, KycLoginType, KycProvider, KycProviderProps, KycRejectType, KycStatus, KycVerificationHandle, KycVerificationMode, LaunchKycVerificationOptions, UseKycOptions, UseKycResult, launchKycVerification, useKyc, useOptionalKyc } from '@nexus-cross/kyc/react';
11
12
 
12
13
  interface CrossConnectKitProviderProps {
13
14
  children: ReactNode;
@@ -348,6 +349,7 @@ type CrossdBridgeAdapterOptions = {
348
349
  env: Environment;
349
350
  walletAddress?: string;
350
351
  enabled?: boolean;
352
+ restoreChainAfterSwitch?: boolean;
351
353
  };
352
354
  type CrossdBridgeAdapter = {
353
355
  bridgeTokens: BridgeToken[];
@@ -359,6 +361,6 @@ type CrossdBridgeAdapter = {
359
361
  submitBridge: BridgeSubmitFn;
360
362
  isLoading: boolean;
361
363
  };
362
- declare function useCrossdBridgeAdapter({ env, walletAddress, enabled, }: CrossdBridgeAdapterOptions): CrossdBridgeAdapter;
364
+ declare function useCrossdBridgeAdapter({ env, walletAddress, enabled, restoreChainAfterSwitch, }: CrossdBridgeAdapterOptions): CrossdBridgeAdapter;
363
365
 
364
366
  export { ConnectButton, type ConnectButtonProps, type CrossConnectKitContextValue, CrossConnectKitProvider, type CrossConnectKitProviderProps, type CrossConnectKitThemeContextValue, CrossConnectModal, type CrossConnectModalProps, type CrossxEmbeddedInfo, OtherWalletsModal, type OtherWalletsModalProps, type WalletProvider, type WalletUser, useCrossConnectKit, useCrossConnectKitTheme, useCrossdBridgeAdapter, useCrossxEmbeddedInfo, useOptionalCrossConnectKitTheme };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w}from"./chunk-AGBUWVJ2.js";export{o as AppLauncher,q as AppLauncherContent,p as AppLauncherTrigger,h as ConnectButton,u as ConnectionStatus,n as ConnectorId,e as CrossConnectKitProvider,d as CrossConnectModal,t as OnRampError,l as OnRampProvider,i as OtherWalletsModal,s as SkillsButton,m as WalletInfo,v as formatBalance,w as formatWei,a as useCrossConnectKit,b as useCrossConnectKitTheme,f as useCrossdBridgeAdapter,g as useCrossxEmbeddedInfo,r as useGlobalMenu,j as useOnRamp,k as useOnRampEligibility,c as useOptionalCrossConnectKitTheme};
1
+ import{A,B,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}from"./chunk-I37NNU7G.js";export{t as AppLauncher,v as AppLauncherContent,u as AppLauncherTrigger,h as ConnectButton,z as ConnectionStatus,s as ConnectorId,e as CrossConnectKitProvider,d as CrossConnectModal,p as KycError,o as KycProvider,y as OnRampError,l as OnRampProvider,i as OtherWalletsModal,x as SkillsButton,r as WalletInfo,A as formatBalance,B as formatWei,q as launchKycVerification,a as useCrossConnectKit,b as useCrossConnectKitTheme,f as useCrossdBridgeAdapter,g as useCrossxEmbeddedInfo,w as useGlobalMenu,m as useKyc,j as useOnRamp,k as useOnRampEligibility,c as useOptionalCrossConnectKitTheme,n as useOptionalKyc};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus-cross/connect-kit-react",
3
- "version": "1.3.3",
3
+ "version": "1.3.4-beta.1",
4
4
  "description": "React components and hooks for @nexus-cross/connect-kit wallet connection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,11 +24,12 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@nexus-cross/connect-kit-core": "1.3.3",
28
- "@nexus-cross/connect-kit-wagmi": "1.3.3",
29
- "@nexus-cross/dapp-ui": "1.3.3",
30
- "@nexus-cross/crossx-design-system": "1.3.3",
31
- "@nexus-cross/onramp": "1.3.3"
27
+ "@nexus-cross/connect-kit-core": "1.3.4-beta.1",
28
+ "@nexus-cross/connect-kit-wagmi": "1.3.4-beta.1",
29
+ "@nexus-cross/crossx-design-system": "1.3.4-beta.1",
30
+ "@nexus-cross/dapp-ui": "1.3.4-beta.1",
31
+ "@nexus-cross/kyc": "1.3.4",
32
+ "@nexus-cross/onramp": "1.3.4-beta.1"
32
33
  },
33
34
  "devDependencies": {
34
35
  "@tanstack/react-query": "^5.60.0",
@@ -51,7 +52,8 @@
51
52
  "scripts": {
52
53
  "build": "tsup",
53
54
  "dev": "tsup --watch",
54
- "test": "echo 'no tests yet'",
55
+ "test": "vitest run",
56
+ "test:watch": "vitest",
55
57
  "typecheck": "tsc --noEmit"
56
58
  }
57
59
  }
@@ -1,144 +0,0 @@
1
- var st="1.3.3";var pt="__nexusCrossAppLauncherRuntime";function Xn(){if(typeof window>"u")return null;let e=window;return e[pt]??(e[pt]={mode:"dapp-ui"}),e[pt]}function Yn(e){if(e.scheduled)return;e.scheduled=!0;let t=()=>{if(e.scheduled=!1,e.loggedMode!==e.mode){if(e.mode==="connect-kit-react"){let o=e.connectKitVersion??st;console.info(`[CROSSx App Launcher] connect-kit-react v${o} \uCD08\uAE30\uD654 \uC644\uB8CC (dapp-ui v${st}, \uC0AC\uC6A9 \uBAA8\uB4DC: connect-kit)`)}else console.info(`[CROSSx App Launcher] dapp-ui v${st} \uCD08\uAE30\uD654 \uC644\uB8CC (\uC0AC\uC6A9 \uBAA8\uB4DC: dapp-ui only)`);e.loggedMode=e.mode}};typeof queueMicrotask=="function"?queueMicrotask(t):Promise.resolve().then(t)}function qt(){let e=Xn();e&&(e.mode="connect-kit-react",e.connectKitVersion=st,Yn(e))}import{useCallback as ve,useEffect as de,useMemo as Le,useRef as Qe,useState as Me}from"react";import{WagmiProvider as ro,useAccount as so,useChainId as io,useConnect as ao,useDisconnect as co,useSwitchChain as lo}from"wagmi";import{QueryClient as uo,QueryClientProvider as mo}from"@tanstack/react-query";import{clearWalletSessionStorage as jt,onOpenOtherWallets as po,pickInitialState as fo,resolveCurrentWallet as go}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as bo}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as yo}from"@nexus-cross/crossx-design-system";import{OnRampProvider as wo}from"@nexus-cross/onramp/react";import{createContext as Zn,useContext as Jn}from"react";var xt=Zn(null);function Be(){let e=Jn(xt);if(!e)throw new Error("useCrossConnectKit must be used within <CrossConnectKitProvider>");return e}import{createContext as eo,useContext as Ht}from"react";var ft=eo(null);function to(){let e=Ht(ft);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function it(){return Ht(ft)}import{useCallback as no,useMemo as Vt}from"react";import{WalletConnectModal as zt}from"@nexus-cross/dapp-ui";import{jsx as Qt}from"react/jsx-runtime";var oo=new Set(["cross_wallet","cross_extension","metamask","binance"]);function Tt({open:e,onOpenChange:t}){let{connect:o,availableWallets:s,oauth:n,extraWallets:a,walletAllowlist:g,kitConfig:f}=Be(),p=it()?.mode??"dark",h=Vt(()=>{let m=g?new Set(g):null,T={};for(let P of s){if(!oo.has(P.walletId)||m&&!m.has(P.walletId))continue;let C=P.walletId;T[C]=()=>{o(P.walletId)}}for(let[P,C]of Object.entries(a))C&&(m&&!m.has(P)||(T[P]=C));return T},[s,o,a,g]),I=Vt(()=>{if(n)return{apple:()=>{n.signIn("apple")},google:()=>{n.signIn("google")}}},[n]),S=no(m=>t(m),[t]);return Qt(zt,{wallets:h,socialProviders:I,termsUrl:f.legal?.termsUrl,privacyUrl:f.legal?.privacyUrl,theme:p,open:e,onOpenChange:S,children:Qt(zt.Content,{})})}import{jsx as tt,jsxs as Zt}from"react/jsx-runtime";var ho=new uo,It="crossx-kit:last-wallet-intent",Co=15e3;function Xt(e,t){return Promise.race([e.then(()=>{},()=>{}),new Promise(o=>setTimeout(o,t))])}function ko(e){let t=[],o=e,s=0;for(;o&&s<5;){let n=o;typeof n.message=="string"&&t.push(n.message),o=n.cause,s+=1}return t.some(n=>/external wallet connection/i.test(n))}function xo(){if(typeof window>"u")return null;try{return window.localStorage.getItem(It)??null}catch{return null}}function Yt(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(It,e):window.localStorage.removeItem(It)}catch{}}function To(e,t){if(typeof window>"u")return t;try{let o=window.localStorage.getItem(e);return o==="cross"||o==="reown"?o:t}catch{return t}}function Io(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function So({children:e,config:t,activeProvider:o,onRequestProviderSwap:s,pendingConnectWalletId:n,clearPending:a,themeMode:g,themeTokens:f,extraWallets:b,walletAllowlist:p}){let[h,I]=Me(!1),[S,m]=Me(()=>xo()),[T,P]=Me(null),{address:C,isConnected:k,isConnecting:_,isReconnecting:O,connector:U}=so(),{connectors:te,connectAsync:z}=ao(),{disconnectAsync:K}=co(),{kitConfig:D,connectorRegistry:M,crossProvider:Ce,reownProvider:E}=t,A=o==="cross"?Ce:E,W=Le(()=>!k||!U?null:go(M,U.id,S),[k,U,M,S]),ke=Le(()=>M.entries.filter(u=>u.type!=="embedded"),[M]),qe=Qe(C);qe.current=C;let j=D.embeddedProjectId?.trim()||D.crossProjectId?.trim(),q=!!D.onRampEnabled&&!!j,pe=Le(()=>!q||!j?null:{projectId:j,walletState:{getAddress:()=>qe.current}},[q,j]);de(()=>po(()=>I(!0)),[]),de(()=>{if(!h||typeof document>"u")return;let u=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(d=>d.remove())},50);return()=>clearTimeout(u)},[h]);let we=Qe(k),Oe=Qe(k);we.current=k;let Ne=Qe(!1);de(()=>{console.debug("[crossx-kit] state",{activeProvider:o,isConnected:k,isConnecting:_,isReconnecting:O,activeConnectorId:U?.id,currentWallet:W,lastIntent:S})},[o,k,_,O,U?.id,W,S]),de(()=>{k&&!Oe.current&&A?.closeModal?.({kitConfig:D}),Oe.current=k},[k,A,D]),de(()=>{k&&P(null)},[k]);let He=io(),{switchChainAsync:Fe}=lo(),fe=Qe(null);de(()=>{if(!D.enforceDefaultNetworkOnConnect)return;let u=D.defaultNetwork?.id;if(!u)return;if(!k||!C||!U){fe.current=null;return}let d=`${U.id}:${C}`;fe.current!==d&&(fe.current=d,He!==u&&Fe({chainId:u}).catch(()=>{}))},[D.enforceDefaultNetworkOnConnect,D.defaultNetwork,k,C,U,He,Fe]);let ae=ve(u=>te.find(d=>d.id===u),[te]);de(()=>{let u=M.getEntry("cross_embedded");if(!u)return;let d=ae(u.connectorId);if(!d)return;let w=!1;return(async()=>{try{let y=await d.getProvider();if(w)return;y?.sdk?.applyTheme?.(g,f??void 0)}catch(y){console.debug("[crossx-kit] applyTheme skipped:",y)}})(),()=>{w=!0}},[M,ae,g,f]);let De=ve(u=>{m(u),Yt(u)},[]),X=ve(()=>{m(null),Yt(null),P(null)},[]);de(()=>{if(!A?.subscribeModalState)return;let u=!1;return A.subscribeModalState({kitConfig:D},d=>{if(Ne.current=d,d){u=!0;return}u&&(u=!1,setTimeout(()=>{we.current||(async()=>{try{await K()}catch{}X()})()},250))})},[A,D,K,X]),de(()=>{if(!T||k||typeof window>"u"||T==="cross_embedded")return;let u=typeof document<"u"&&!document.hasFocus(),d=null,w=()=>{u=!0},y=()=>{u&&(d&&clearTimeout(d),d=setTimeout(()=>{we.current||Ne.current||(async()=>{try{await K()}catch{}X()})()},1e3))};return window.addEventListener("blur",w),window.addEventListener("focus",y),()=>{window.removeEventListener("blur",w),window.removeEventListener("focus",y),d&&clearTimeout(d)}},[T,k,K,X]);let Se=ve(async u=>{console.debug("[crossx-kit] runConnect enter",{walletId:u,activeProvider:o,isConnected:k,activeConnectorId:U?.id});let d=M.getEntry(u);if(!d){if((u==="metamask"||u==="binance")&&!E){console.error(`[crossx-kit] "${u}" requires the Reown adapter, but it is not configured. Pass \`reownProjectId\` (and ensure \`reown\` is not set to \`false\`) when calling createConnectKitConfig() or createCrossxConfig() to enable WalletConnect-based wallets.`);return}console.error(`[crossx-kit] Unknown walletId: "${u}"`);return}if(P(u),d.providerKind!==o){console.debug("[crossx-kit] provider swap needed",{from:o,to:d.providerKind,walletId:u}),De(u);try{await K()}catch{}await new Promise(y=>setTimeout(y,0)),s(d.providerKind,u);return}if(De(u),A?.beforeConnect)try{let y=await A.beforeConnect({kitConfig:D,themeMode:g},u);if(console.debug("[crossx-kit] beforeConnect result",{walletId:u,result:y}),y==="handled")return}catch(y){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',u,y)}let w=ae(d.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:d.connectorId,found:w?.id,availableIds:te.map(y=>y.id)}),!w){console.error(`[crossx-kit] Connector "${d.connectorId}" not found on provider "${d.providerKind}". Available: ${te.map(y=>y.id).join(", ")}`),X();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:w.id});let y=await z({connector:w});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:y.accounts.length,chainId:y.chainId});return}catch(y){if(!ko(y)){console.error('[crossx-kit] connectAsync error for "%s":',u,y);try{await K()}catch{}}if(!d.fallbackConnectorId){X();return}}if(d.fallbackConnectorId){let y=ae(d.fallbackConnectorId);if(y)try{await z({connector:y})}catch(N){console.error('[crossx-kit] Fallback connect failed for "%s":',u,N);try{await K()}catch{}X()}else X()}},[M,te,ae,z,K,De,X,A,o,D,s,g]);de(()=>{if(!n)return;let u=n;a(),Se(u)},[n,o]);let r=ve(async()=>{I(!0)},[]),i=ve(async()=>{try{await K()}catch(u){console.error("[crossx-kit] wagmi disconnect error:",u)}if(A?.teardown)try{await A.teardown({kitConfig:D})}catch(u){console.error("[crossx-kit] adapter teardown error:",u)}jt(),X()},[K,A,D,X]),c=ve(async()=>{await Xt(K(),3e3);try{let u=M.getEntry("cross_embedded"),d=u&&ae(u.connectorId);if(d?.getProvider){let w=await Promise.race([d.getProvider(),new Promise(N=>setTimeout(N,3e3))]),y=w?.sdk?.signOut;typeof y=="function"&&await Xt(y.call(w.sdk),3e3)}}catch{}jt()},[M,ae,K]),l=ve(async()=>{let u=M.getEntry("cross_embedded");if(!u)return null;let d=ae(u.connectorId);if(!d)return null;try{let w=await d.getProvider(),y=w?.sdk;if(!y?.selectWallet)return null;let N=await y.selectWallet(y.currentAddress??void 0);return N?.address&&w.notifyAccountsChanged&&w.notifyAccountsChanged([N.address]),N}catch{return null}},[M,ae]),x=Le(()=>{let u=t.oauth;return u?{signIn:async d=>{P("cross_embedded");try{await u.signIn(d)}catch(w){throw P(null),w}}}:null},[t.oauth]),v=Qe(!1);de(()=>{if(o!=="cross"||k||_||O||T!=null||v.current)return;let u=M.getEntry("cross_embedded");if(!u)return;let d=ae(u.connectorId);if(!d)return;v.current=!0;let w=!1;return(async()=>{try{let y=await d.isAuthorized?.();if(w||!y)return;await z({connector:d})}catch{}})(),()=>{w=!0}},[o,k,_,O,T,M,ae,z]),de(()=>{if(T!=="cross_embedded"||k||typeof window>"u")return;let u=!document.hasFocus(),d=()=>{u=!0};window.addEventListener("blur",d);let w=setTimeout(()=>{we.current||u||(console.warn("[crossx-kit] embedded sign-in stalled before the OAuth popup opened \u2014 clearing the stale session so a retry starts clean"),X(),c())},Co);return()=>{window.removeEventListener("blur",d),clearTimeout(w)}},[T,k,X,c]);let R=T!=null&&!k,B=Le(()=>({kitConfig:D,connectorRegistry:M,availableWallets:ke,connect:Se,connectWallet:r,disconnect:i,selectWallet:l,currentWallet:W,lastIntent:S,isConnecting:R,connectingWalletId:T,openOtherWallets:()=>I(!0),closeOtherWallets:()=>I(!1),otherWalletsOpen:h,oauth:x,extraWallets:b,walletAllowlist:p,onRampEnabled:q}),[D,M,ke,Se,r,i,l,W,S,R,T,h,x,b,p,q]),F=Zt(xt.Provider,{value:B,children:[e,tt(Tt,{open:h,onOpenChange:I})]});return pe?tt(wo,{config:pe,children:F}):F}var vo=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function Po(e){let t=e?.message;return typeof t!="string"?!1:vo.some(o=>o.test(t))}var Ao={};function Ro(e){return e&&{...e,connections:new Map,current:null}}function Bo({children:e,config:t,initialState:o,extraWallets:s=Ao,walletAllowlist:n}){let[a,g]=Me(()=>To(t.activeProviderStorageKey,t.defaultProvider)),[f,b]=Me(null),p=Qe(!1),{kitConfig:h}=t,[I,S]=Me(null),[m,T]=Me(null),[P,C]=Me(0),k=Le(()=>bo(h.theme,h.autoDetectTheme),[h.theme,h.autoDetectTheme,P]),_=I??k,O=m??h.themeTokens;de(()=>{if(!h.autoDetectTheme||I||typeof window>"u"||!window.matchMedia)return;let E=window.matchMedia("(prefers-color-scheme: dark)"),A=()=>C(W=>W+1);try{return E.addEventListener("change",A),()=>E.removeEventListener("change",A)}catch{return E.addListener(A),()=>E.removeListener(A)}},[h.autoDetectTheme,I]),de(()=>{if(typeof document>"u")return;let E=document.documentElement,A=E.getAttribute("data-ds-theme"),W=E.getAttribute("data-theme");return E.setAttribute("data-ds-theme",_),W||E.setAttribute("data-theme",_),()=>{A==null?E.removeAttribute("data-ds-theme"):E.setAttribute("data-ds-theme",A),W==null&&E.removeAttribute("data-theme")}},[_]);let U=Le(()=>yo(t.designSystem),[t.designSystem]),te=Le(()=>({mode:_,tokens:O,setThemeMode:E=>S(E),setThemeTokens:E=>T(E)}),[_,O]);de(()=>{if(typeof window>"u")return;let E=A=>{Po(A.reason)&&A.preventDefault()};return window.addEventListener("unhandledrejection",E),()=>window.removeEventListener("unhandledrejection",E)},[]);let z=ve((E,A)=>{p.current||(p.current=!0,b(A),g(E),Io(t.activeProviderStorageKey,E),queueMicrotask(()=>{p.current=!1}))},[t.activeProviderStorageKey]),K=ve(()=>b(null),[]),D=a==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,M=Ro(fo(o,a));if(!D){if(!(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let A=a==="cross"?"reown":"cross";queueMicrotask(()=>g(A))}let Ce=D??(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return Zt(ft.Provider,{value:te,children:[tt("style",{"data-crossx-design-system":"",children:U}),tt(ro,{config:Ce,initialState:M,children:tt(mo,{client:ho,children:tt(So,{config:t,activeProvider:a,onRequestProviderSwap:z,pendingConnectWalletId:f,clearPending:K,themeMode:_,themeTokens:O,extraWallets:s,walletAllowlist:n??t.kitConfig.wallets??null,children:e})})},a)]})}import{useCallback as Ke,useEffect as Rr,useMemo as lt}from"react";import{useQueryClient as Br}from"@tanstack/react-query";import{useAccount as _r,useChainId as Er,useConfig as Or,useSendTransaction as Nr,useSwitchChain as Fr}from"wagmi";import{getPublicClient as Et,readContracts as Tn}from"wagmi/actions";import{WalletInfo as Ot,ConnectorId as $e,resolveEnvironment as Dr}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as Wr,useOptionalOnRampEligibility as Lr}from"@nexus-cross/onramp/react";import{APPLE_ICON as Wt,BINANCE_ICON as vn,CROSSX_ICON as Dt,EXTENSION_ICON as Mr,GOOGLE_ICON as Pn,METAMASK_ICON as An}from"@nexus-cross/connect-kit-wagmi";import{useCallback as se,useMemo as Pe,useRef as _o}from"react";import{useQueries as Jt,useQuery as nt}from"@tanstack/react-query";import{encodeFunctionData as at,formatUnits as wt,parseSignature as Eo,parseUnits as Oo}from"viem";import{getChainId as No,getPublicClient as pn,readContract as Ie,signTypedData as Fo,switchChain as Do,waitForTransactionReceipt as Wo,writeContract as en}from"wagmi/actions";import{useConfig as Lo}from"wagmi";function Mo(e){return e!=="bridge"}var fn="0x0000000000000000000000000000000000000000",he=100,rt=18,Go=180000n,Uo=250000n,gn=new Set([56,97]),Ko=130n,$o=100n,qo={dev:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},stage:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97},contracts:{BSC_CROSS:"0x26ca2a92ea9659e073621bb85b9117dc5944cff1",W_CROSS:"0xda37a3B60E6b97E8CB44b460130d40331efc566b",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x9f85c7b5d7637e18f946cc8af9c131318c6833d9",CROSSD:"0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",USDTB:"0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",SWAP_BRIDGE_ROUTER:"0x337071C06416f13b568eE644c1D714edd65509eB"},hiddenPairs:[{fromKey:"97-0xbb188503c32fa7f61e019c3b3ae61ae6b0b3b492",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb",toKey:"612044-0x9f85c7b5d7637e18f946cc8af9c131318c6833d9"},{fromKey:"97-0x26ca2a92ea9659e073621bb85b9117dc5944cff1",toKey:"612044-0x9364ea6790f6e0ecfaa5164085f2a7de34ec55fb"}]},production:{bridgeApi:"https://bridge-api.crosstoken.io/bridge",walletApi:"https://wallet-server.crosstoken.io/api",chainIds:{cross:612055,bsc:56},contracts:{BSC_CROSS:"0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",W_CROSS:"0x731a104a4461ae45bfef520468b43c262d35e682",NATIVE_CROSS:"0x0000000000000000000000000000000000000001",USDTX:"0x1c37d4f44ed3ec86d96868001cfa89e97112a85c",CROSSD:"0xff42c13d927a6b9265236619161accb227b6d452",USDTB:"0x55d398326f99059ff775485246999027b3197955",SWAP_BRIDGE_ROUTER:"0xB298C340816fee45cfB39B1e6EE4DB4D5739e357"},hiddenPairs:[{fromKey:"56-0x55d398326f99059ff775485246999027b3197955",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452",toKey:"612055-0x1c37d4f44ed3ec86d96868001cfa89e97112a85c"},{fromKey:"56-0x6bf62ca91e397b5a7d1d6bce97d9092065d7a510",toKey:"612055-0xff42c13d927a6b9265236619161accb227b6d452"}]}},je=[{type:"function",name:"quoter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"swapRouter",stateMutability:"view",inputs:[],outputs:[{name:"",type:"address"}]},{type:"function",name:"getAmountSwapBridgeOut",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"swapAmountOut",type:"uint256"},{name:"bridgeValue",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"getAmountSwapBridgeIn",stateMutability:"view",inputs:[{name:"toChainID",type:"uint256"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"bridgeValue",type:"uint256"}],outputs:[{name:"ok",type:"bool"},{name:"amountIn",type:"uint256"},{name:"swapAmountOut",type:"uint256"},{name:"networkFee",type:"uint256"},{name:"exFee",type:"uint256"}]},{type:"function",name:"swapBridgeExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"swapBridgeExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"amountOut",type:"uint256"},{name:"amountInMaximum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"},{name:"bridgeParams",type:"tuple",components:[{name:"toChainID",type:"uint256"},{name:"recipient",type:"address"},{name:"extraData",type:"bytes"}]}]},{name:"deadline",type:"uint256"}],outputs:[{name:"amountIn",type:"uint256"}]}],St=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"allowance",stateMutability:"view",inputs:[{name:"owner",type:"address"},{name:"spender",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"approve",stateMutability:"nonpayable",inputs:[{name:"spender",type:"address"},{name:"amount",type:"uint256"}],outputs:[{name:"",type:"bool"}]}],tn=[{type:"function",name:"name",stateMutability:"view",inputs:[],outputs:[{name:"",type:"string"}]},{type:"function",name:"nonces",stateMutability:"view",inputs:[{name:"owner",type:"address"}],outputs:[{name:"",type:"uint256"}]}],nn=[{type:"function",name:"quoteExactInputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amountIn",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]},{type:"function",name:"quoteExactOutputSingle",stateMutability:"nonpayable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"amount",type:"uint256"},{name:"fee",type:"uint24"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountIn",type:"uint256"},{name:"sqrtPriceX96After",type:"uint160"},{name:"initializedTicksCrossed",type:"uint32"},{name:"gasEstimate",type:"uint256"}]}],Ho=[{type:"function",name:"slot0",stateMutability:"view",inputs:[],outputs:[{name:"sqrtPriceX96",type:"uint160"},{name:"tick",type:"int24"},{name:"observationIndex",type:"uint16"},{name:"observationCardinality",type:"uint16"},{name:"observationCardinalityNext",type:"uint16"},{name:"feeProtocol",type:"uint8"},{name:"unlocked",type:"bool"}]}],_e=[{type:"function",name:"exactInputSingle",stateMutability:"payable",inputs:[{name:"params",type:"tuple",components:[{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"fee",type:"uint24"},{name:"recipient",type:"address"},{name:"deadline",type:"uint256"},{name:"amountIn",type:"uint256"},{name:"amountOutMinimum",type:"uint256"},{name:"sqrtPriceLimitX96",type:"uint160"}]}],outputs:[{name:"amountOut",type:"uint256"}]},{type:"function",name:"multicall",stateMutability:"payable",inputs:[{name:"data",type:"bytes[]"}],outputs:[{name:"results",type:"bytes[]"}]},{type:"function",name:"unwrapWETH9",stateMutability:"payable",inputs:[{name:"amountMinimum",type:"uint256"},{name:"recipient",type:"address"}],outputs:[]},{type:"function",name:"refundETH",stateMutability:"payable",inputs:[],outputs:[]}],Vo=[{type:"function",name:"bridgeToken",stateMutability:"payable",inputs:[{name:"toChainID",type:"uint256"},{name:"fromToken",type:"address"},{name:"to",type:"address"},{name:"value",type:"uint256"},{name:"gasFee",type:"uint256"},{name:"exFee",type:"uint256"},{name:"extraData",type:"bytes"}],outputs:[{name:"",type:"bool"}]}];async function bn(e){let t="";try{t=await e.text()}catch{}if(t){try{let o=JSON.parse(t),s=typeof o.data=="string"&&o.data||typeof o.message=="string"&&o.message||"";if(s)return`${s} (status ${e.status})`}catch{}return`${t.slice(0,300)} (status ${e.status})`}return`status ${e.status}`}async function Ge(e,t){let o=await fetch(e,{cache:"no-store",signal:t});if(!o.ok)throw new Error(`CrossD bridge adapter request failed: ${await bn(o)}`);let s=await o.json();if(s&&typeof s=="object"&&"code"in s&&typeof s.code=="number"&&s.code!==200)throw new Error(s.message||`CrossD bridge adapter API error: ${s.code}`);return s&&typeof s=="object"&&"data"in s?s.data:s}async function on(e,t,o){let s=await fetch(e,{method:"POST",cache:"no-store",signal:o,headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!s.ok)throw new Error(`CrossD bridge adapter request failed: ${await bn(s)}`);let n=await s.json();if(n&&typeof n=="object"&&"code"in n&&typeof n.code=="number"&&n.code!==200)throw new Error(n.message||`CrossD bridge adapter API error: ${n.code}`);return n&&typeof n=="object"&&"data"in n?n.data:n}function zo(e){return new Promise(t=>setTimeout(t,e))}async function Qo(e,t,{attempts:o=60,intervalMs:s=2e3}={}){for(let n=0;n<o;n+=1){try{let a=await Ge(`${e}/permit-hash/${t}`);if(Rt(a))return a}catch{}await zo(s)}return null}function ee(e,t){return`${e}-${t.toLowerCase()}`}function le(e){return ee(e.chainId,e.address)}function Ae(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function jo(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"",o=t.toLowerCase();return o.includes("quoteexactinputsingle")||o.includes("quoteexactoutputsingle")||o.includes("getamountswapbridgeout")||o.includes("getamountswapbridgein")||o.includes("execution reverted")?"Amount is too large for this route.":t.split(`
2
- `)[0]?.trim()||"Failed to quote bridge."}function rn(e){return e===56||e===97?"BSC":e===612044||e===612055?"CROSS":`Chain ${e}`}function J(e,t){return t?t.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()?e.contracts.W_CROSS:t:fn}function Xe(e){let t=wt(e,rt);return t.includes(".")?t.replace(/\.?0+$/,""):t}function dt(e){return Oo(e||"0",rt)}function me(e){try{return dt(e||"0")}catch{return 0n}}function Ue(e){if(typeof e=="bigint")return e;if(typeof e=="number")return BigInt(Math.trunc(e));if(!e)return 0n;try{return BigInt(e)}catch{return 0n}}function vt(e){let t=wt(e,9);return(t.includes(".")?t.replace(/\.?0+$/,""):t)||"0"}function gt(e){return e==="bridge"?Go:Uo}function sn(e,t){if(!e||!t)return"0";let o=e*e;if(o===0n)return"0";let s=t*t,n=s>o?s-o:o-s;if(n===0n)return"0";let a=(n*100000000n+o/2n)/o;if(a>=100000000n)return"100";let g=a/1000000n,f=(a%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return f?`${g}.${f}`:`${g}`}function Xo(e){if(!e||Number(e)===0)return"0%";let[t,o=""]=e.split("."),s=o.length>4?o.slice(0,4):o;return s?`${t}.${s}%`:`${t}%`}async function an(e,t,o,s,n,a=!1){let g=pn(e,{chainId:t}),f=o;try{let p=await g?.estimateContractGas?.({account:n.account,address:n.address,abi:n.abi,functionName:n.functionName,args:n.args,value:n.value});typeof p=="bigint"&&p>0n&&(f=s?p*Ko/$o:p)}catch{}let b={gas:f};if(gn.has(t))try{let p=await g?.getGasPrice?.();typeof p=="bigint"&&p>0n&&(b.gasPrice=p)}catch{}else if(a)try{let p=await g?.estimateFeesPerGas?.();typeof p?.maxFeePerGas=="bigint"&&(b.maxFeePerGas=p.maxFeePerGas),typeof p?.maxPriorityFeePerGas=="bigint"&&(b.maxPriorityFeePerGas=p.maxPriorityFeePerGas)}catch{}return b}function yn(e){let t=e==="auto"?1:Number(e||"1");return!Number.isFinite(t)||t<0?100n:BigInt(Math.min(1e4,Math.floor(t*100)))}function Pt(e,t){let o=yn(t);return o>=10000n?0n:e*(10000n-o)/10000n}function Yo(e,t){let o=yn(t);return(e*(10000n+o)+9999n)/10000n}function ct(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var Zo={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function Jo(e){return Zo[e]??`${e/1e4}%`}function er(e,t){let o=Number(e||"0");return!Number.isFinite(o)||o<=0?"0":(o*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function cn(e){return Xe(e)}function dn(e,t){let o=Number(t??"0");return!Number.isFinite(o)||o<=0?0n:e*BigInt(Math.floor(o))/1000n}function bt(e,t){if(!e)return!1;let o=e.toLowerCase();return t.some(s=>s.toLowerCase()===o)}function tr(e,t,o){return[{from:[e.contracts.USDTX],to:[e.contracts.CROSSD]},{from:[e.contracts.BSC_CROSS],to:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS]},{from:[e.contracts.NATIVE_CROSS,e.contracts.W_CROSS],to:[e.contracts.CROSSD]}].some(n=>bt(t,n.from)&&bt(o,n.to)||bt(t,n.to)&&bt(o,n.from))}function nr(e){if(Ae(e.type))return null;if(e.type==="swap-bridge"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}if(e.type==="bridge-swap"){let t=e.steps.find(o=>o.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}return{from:e.from.chainId,to:e.to.chainId,token:e.from.address}}function or({input:e,path:t,config:o}){if(!o||Ae(t.type))return"";let s=Ue(o.minimumValue),n=Ue(o.gasFee??o.gas_fee),a=t.type==="swap-bridge"?s+n*12n/10n:s;return a<=0n?"":e.fromAmount&&me(e.fromAmount)<a&&t.type!=="swap"?`Minimum ${cn(a)}`:t.type==="swap-bridge"&&e.toAmount&&me(e.toAmount)<a?`Available ${cn(a)} or more.`:""}function rr({input:e,path:t,config:o}){if(!o||t.type!=="bridge"&&t.type!=="bridge-swap")return"";let s=Ue(o.gasFee??o.gas_fee);if(s<=0n||!e.fromAmount)return"";let n=me(e.fromToken.balance||"0"),a=me(e.fromAmount);return n-s<a?`Insufficient network fee(${e.fromToken.symbol})`:""}function sr(e,t){let o=new Set;return e?.list?.forEach(s=>{let n=s.localChain??s.local_chain;n&&Object.entries(s.pairs||{}).forEach(([a,g])=>{g.forEach(f=>{f.localToken&&o.add(ee(n,f.localToken)),f.remoteToken&&o.add(ee(Number(a),f.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([s,n])=>{n.forEach(a=>{a.token0&&o.add(ee(Number(s),a.token0)),a.token1&&o.add(ee(Number(s),a.token1))})}),o}function ir(e,t){return!e||!t?null:ee(e,t)}function ar({envConfig:e,bridgePairList:t,swapPools:o,tokenInfo:s,tokenStats:n}){let a=sr(t,o),g=new Map;n?.forEach(b=>{let p=ir(Number(b.chainId??b.chain_id),b.address);p&&g.set(p,b)});let f={};return a.forEach(b=>{let[p,h]=b.split("-"),I=Number(p),S=s?.find(T=>Number(T.chainId??T.chain_id)===I&&T.address?.toLowerCase()===h);if(!S?.symbol||!S.name)return;let m=g.get(b);f[b]={key:b,chainId:I,address:h,symbol:S.symbol,name:S.name,decimals:S.decimals||rt,image:S.image||S.icon_url,price:m?.price?Number(m.price):void 0,isNativeToken:h.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),f}function wn(e,t){return t?.list?.find(o=>(o.localChain??o.local_chain)===e)?.bridge||""}function hn(e,t,o){let[s,n]=e.split("-"),[a,g]=t.split("-"),f=Number(s),b=Number(a);for(let p of o?.list||[]){if((p.localChain??p.local_chain)!==f)continue;let h=p.pairs?.[a];if(h){for(let I of h)if(I.localToken?.toLowerCase()===n&&I.remoteToken?.toLowerCase()===g)return{type:"bridge",fromChain:f,fromToken:n,toChain:b,toToken:g,bridgeAddress:wn(f,o)}}}return null}function Cn(e,t,o,s){let[n,a]=e.split("-"),[g,f]=t.split("-");if(n!==g)return null;let b=Number(n),p=(o?.swapPools||o?.swap_pools)?.[n];if(!p)return null;let h=s.contracts.W_CROSS.toLowerCase(),I=s.contracts.NATIVE_CROSS.toLowerCase(),S=m=>m?.toLowerCase()===h?I:m?.toLowerCase();for(let m of p){let T=S(m.token0),P=S(m.token1);if(T===a&&P===f||P===a&&T===f){let C="swap";return b===s.chainIds.cross&&(a===I&&(C="deposit-swap"),f===I&&(C="swap-withdraw")),{pathType:C,step:{type:"swap",chain:b,fromToken:a,toToken:f,fee:m.fee||he,poolAddress:m.poolAddress||m.pool_address||""}}}}return null}function cr(e,t,o,s){let[n,a]=e.split("-"),[g]=t.split("-");if(n===g)return null;for(let f of(o?.swapPools||o?.swap_pools)?.[n]||[]){let b=f.token0?.toLowerCase(),p=f.token1?.toLowerCase(),h=b===a?p:p===a?b:null;if(!h)continue;let I=hn(ee(Number(n),h),t,s);if(I)return[{type:"swap",chain:Number(n),fromToken:a,toToken:h,fee:f.fee||he,poolAddress:f.poolAddress||f.pool_address||""},I]}return null}function dr(e,t,o,s,n){let[a,g]=e.split("-"),[f]=t.split("-");if(a===f)return null;for(let b of o?.list||[])if((b.localChain??b.local_chain)===Number(a))for(let p of b.pairs?.[f]||[]){if(p.localToken?.toLowerCase()!==g)continue;let h=p.remoteToken?.toLowerCase();if(!h)continue;let I=Cn(ee(Number(f),h),t,s,n);if(I)return[{type:"bridge",fromChain:Number(a),fromToken:g,toChain:Number(f),toToken:h,bridgeAddress:wn(Number(a),o)},I.step]}return null}function lr({envConfig:e,bridgePairList:t,swapPools:o,enrichedTokens:s}){return(n,a)=>{let g=s[n],f=s[a];if(!g||!f||n===a)return null;let b=hn(n,a,t);if(b)return{type:"bridge",steps:[b],from:g,to:f};let p=Cn(n,a,o,e);if(p)return{type:p.pathType,steps:[p.step],from:g,to:f};let h=cr(n,a,o,t);if(h)return{type:"swap-bridge",steps:h,from:g,to:f};let I=dr(n,a,t,o,e);return I?{type:"bridge-swap",steps:I,from:g,to:f}:null}}function ln(e,t){return{name:e.name,symbol:e.symbol,chainId:e.chainId,address:e.address,decimals:e.decimals,balance:t.get(e.key)||"0",iconUrl:e.image,priceUsd:e.price}}function ur(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function mr(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function pr(e,t){let o=e.startsWith("-"),s=o?e.slice(1):e,[n,a=""]=s.split("."),g=a.slice(0,t).replace(/0+$/,""),f=g?`${n}.${g}`:n;return o?`-${f}`:f}function fr(e){let t=e.startsWith("-"),o=t?e.slice(1):e,[s,n]=o.split("."),a=s.replace(/\B(?=(\d{3})+(?!\d))/g,","),g=n?`${a}.${n}`:a;return t?`-${g}`:g}function At(e){if(e==null||e==="")return"0";let t=String(e),o=Number(t);return!Number.isFinite(o)||o===0?"0":fr(pr(t,4))}function un(e,t){if(e==null||e==="")return"0";try{return mr(wt(BigInt(String(e)),t.decimals))}catch{return"0"}}function Rt(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function gr(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function br(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function yr(e,t){let o=ur(t);return{name:o,symbol:o,chainId:e,address:t,decimals:rt,balance:"0"}}function mn({envConfig:e,tokenByBridgeKey:t,chainId:o,address:s}){if(!s)return null;let n=br(e,s);return t.get(ee(o,n))||t.get(ee(o,s))||yr(o,n)}function yt(e){return e?.toLowerCase()||""}function wr(e){if(e.source==="swap")return"swap";let t=yt(e.fromToken??e.from_token),o=yt(e.toToken??e.to_token),s=yt(e.swapTokenIn??e.swap_token_in),n=yt(e.swapTokenOut??e.swap_token_out);return o&&s&&o===s?"bridge-swap":t&&n&&t===n?"swap-bridge":"bridge"}function hr(e,t){let o=e.status??0,s=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&o===1&&!s?"failed":o===1?"success":"pending"}function Cr({envConfig:e,item:t,tokenByBridgeKey:o}){let s=Number(t.fromChainID??t.from_chain_id??0),n=Number(t.toChainID??t.to_chain_id??0);if(!s||!n)return null;let a=wr(t),g=t.swapTokenIn??t.swap_token_in,f=t.swapTokenOut??t.swap_token_out,b=t.swapAmountIn??t.swap_amount_in,p=t.swapAmountOut??t.swap_amount_out,h=t.fromToken??t.from_token,I=t.toToken??t.to_token,S=t.value,m=t.value;a==="swap"?(h=g,I=f,S=b,m=p):a==="swap-bridge"?(h=g,S=b,m=t.value):a==="bridge-swap"&&(I=f,S=b,m=p);let T=mn({envConfig:e,tokenByBridgeKey:o,chainId:s,address:h}),P=mn({envConfig:e,tokenByBridgeKey:o,chainId:n,address:I}),C=t.initiatedTxHash??t.initiated_tx_hash;return!T||!P||!Rt(C)?null:{id:`${C}-${t.index??""}`,timestamp:gr(t.initiatedTime??t.initiated_time),txHash:C,fromToken:T,toToken:P,fromAmount:un(S,T),toAmount:un(m,P),summary:{pathType:a},status:hr(t,a)}}function kr(e){let t=new Map;return e.flat().forEach(o=>{let s=Number(o.chainId??o.chain_id),n=o.address?.toLowerCase();if(!s||!n)return;let a=o.quantity?.numeric??o.balance??"0",g=o.quantity?.decimals??o.decimals??rt;try{t.set(ee(s,n),wt(BigInt(a||"0"),g))}catch{t.set(ee(s,n),"0")}}),t}function Ee(e,t="first"){let o=e.steps.filter(s=>s.type==="swap");return t==="last"?o[o.length-1]:o[0]}function xr(e,t){let o=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!o?.length)return"";let s=t.contracts.CROSSD.toLowerCase(),n=t.contracts.USDTX.toLowerCase(),a=o.find(g=>{let f=g.token0?.toLowerCase(),b=g.token1?.toLowerCase();return f===s&&b===n||f===n&&b===s});return a?.poolAddress||a?.pool_address||""}function Tr(e,t){return e.from.chainId===t.chainIds.cross&&e.from.address.toLowerCase()===t.contracts.CROSSD.toLowerCase()&&e.to.chainId===t.chainIds.bsc&&e.to.address.toLowerCase()===t.contracts.USDTB.toLowerCase()}function Ir(e){if(e===void 0)return;let t=10n**BigInt(rt),o=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",s=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:o,percentage:Math.min(s,100)}}function ot(e,t,o,s){let n=[e.from,e.to].find(a=>a.chainId===t&&a.address.toLowerCase()===o.toLowerCase())??s?.[ee(t,o)];return{symbol:n?.symbol||o.slice(0,6),iconUrl:n?.image}}function Sr(e,t){let o=[];for(let n of e.steps)n.type==="swap"?(o.push({chain:n.chain,address:n.fromToken}),o.push({chain:n.chain,address:n.toToken})):(o.push({chain:n.fromChain,address:n.fromToken}),o.push({chain:n.toChain,address:n.toToken}));let s=o.filter((n,a)=>a===0||!(n.chain===o[a-1].chain&&n.address.toLowerCase()===o[a-1].address.toLowerCase()));return s.length===0?[{symbol:e.from.symbol,iconUrl:e.from.image},{symbol:e.to.symbol,iconUrl:e.to.image}]:s.map(n=>ot(e,n.chain,n.address,t))}function vr({input:e,path:t,amountData:o,gasInfo:s,liquidity:n,enrichedTokens:a,priceImpact:g}){let f=e.fromAmount||"0",b=e.toAmount||"0",p=Ee(t),h=t.steps.find(O=>O.type==="bridge"),I=t.type!=="bridge",S=!Ae(t.type),m=p?er(f,p.fee):"0",T=Number(f)>0||Number(b)>0,P=p?ot(t,p.chain,p.fromToken,a):{symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},C=p?ot(t,p.chain,p.toToken,a):{symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},k=h?ot(t,h.fromChain,h.fromToken,a):void 0,_=(O,U,te)=>T?U&&U>0n?{label:O,value:Xe(U),tone:"default",valueToken:te}:{label:O,value:"Free",tone:"accent"}:{label:O,value:"0"};return{pathType:t.type,priceImpact:g,liquidity:n,bridgeInfo:S&&h?[{label:"Route",value:`${rn(h.fromChain)} \u2192 ${rn(h.toChain)}`},_("Validator Fee",o?.exFee,k),_("Network Fee",o?.networkFee,k)]:void 0,swapInfo:I&&p?[{label:"Route",value:"",routeTokens:[ot(t,p.chain,p.fromToken,a),ot(t,p.chain,p.toToken,a)]},{label:"Price Impact",value:Xo(g)},{label:"In Amount",value:At(f),valueToken:P},{label:p&&Ae(t.type)?`Swap Fee (${Jo(p.fee||he)})`:"Swap Fee",value:At(m),valueToken:P},{label:"Out Amount",value:At(b),valueToken:C}]:void 0,txFee:[...s?.gasPrice?[{label:"Gas Price",value:`${s.gasPrice} Gwei`}]:[{label:"Priority Fee Per Gas",value:`${s?.priorityFeePerGas||"0"} Gwei`},{label:"Max Fee Per Gas",value:`${s?.maxFeePerGas||"0"} Gwei`}],{label:"Gas Limit",value:s?.gasLimit||"0"}],txFeeInfo:s?{estTxFee:s.estTxFee,isDelegateFee:s.isDelegateFee,tokenIconUrl:s.gasCurrencyIconUrl,tokenSymbol:s.gasCurrencySymbol}:{estTxFee:"0",isDelegateFee:!1}}}function Bt({env:e,walletAddress:t,enabled:o=!0}){let s=Lo(),n=qo[e],a=o,g=_o(new Map),f=nt({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:r})=>Ge(`${n.bridgeApi}/pairs`,r),enabled:a,staleTime:3e4}),b=nt({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:r})=>Ge(`${n.bridgeApi}/swap-pools`,r),enabled:a,staleTime:3e4}),p=Pe(()=>xr(b.data,n),[n,b.data]),h=nt({queryKey:["crossd-bridge-adapter",e,"available-liquidity",p],queryFn:async()=>await Ie(s,{address:n.contracts.USDTX,abi:St,functionName:"balanceOf",args:[p],chainId:n.chainIds.cross}),enabled:a&&!!p,staleTime:3e4}),I=nt({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:r})=>Ge(`${n.walletApi}/v1/public/token/info`,r),enabled:a,staleTime:3e4}),S=nt({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:r})=>Ge(`${n.walletApi}/v1/public/token/stats`,r),enabled:a,staleTime:3e4}),m=Jt({queries:[n.chainIds.cross,n.chainIds.bsc].map(r=>({queryKey:["crossd-bridge-adapter",e,"balance",t,r],queryFn:({signal:i})=>{let c=new URLSearchParams({networkId:`eip155:${r}`,account:t||""});return Ge(`${n.walletApi}/v1/public/token/balance?${c}`,i)},enabled:a&&!!t,staleTime:0,refetchInterval:a&&t?5e3:!1}))}),T=Jt({queries:[n.chainIds.cross,n.chainIds.bsc].map(r=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",r],queryFn:async({signal:i})=>{try{let x=await pn(s,{chainId:r})?.estimateFeesPerGas?.();if(x?.maxFeePerGas||x?.gasPrice)return{fast:{maxFee:x.maxFeePerGas?.toString()||x.gasPrice?.toString(),maxPriorityFee:x.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let c=new URLSearchParams({chain_id:String(r),without_gas_limit:"false"});return Ge(`${n.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${c}`,i)},enabled:a,staleTime:1e4,retry:1}))}),P=n.hiddenPairs,C=Pe(()=>ar({envConfig:n,bridgePairList:f.data,swapPools:b.data,tokenInfo:I.data,tokenStats:S.data}),[f.data,n,b.data,I.data,S.data]),k=Pe(()=>lr({envConfig:n,bridgePairList:f.data,swapPools:b.data,enrichedTokens:C}),[f.data,C,n,b.data]),_=Pe(()=>kr(m.map(r=>r.data).filter(r=>Array.isArray(r))),[m]),O=Pe(()=>{let r=new Map;return Object.values(C).forEach(i=>{let c=ln(i,_);r.set(i.key,c)}),r},[_,C]),U=Pe(()=>{let r=new Map,i=O.get(ee(n.chainIds.cross,n.contracts.NATIVE_CROSS));i&&r.set(n.chainIds.cross,{symbol:i.symbol,iconUrl:i.iconUrl});let c=I.data?.find(l=>Number(l.chainId??l.chain_id)===n.chainIds.bsc&&(l.symbol??"").toUpperCase()==="BNB");return c&&r.set(n.chainIds.bsc,{symbol:c.symbol??"BNB",iconUrl:c.image??c.icon_url}),r},[n,O,I.data]),te=nt({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:r})=>on(`${n.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},r),enabled:a&&!!t,staleTime:0,refetchInterval:a&&t?5e3:!1}),z=Pe(()=>(te.data?.histories||[]).map(r=>Cr({envConfig:n,item:r,tokenByBridgeKey:O})).filter(r=>!!r),[te.data?.histories,n,O]),K=Pe(()=>Ir(h.data),[h.data]),D=T[0]?.data,M=T[1]?.data,Ce=Pe(()=>{let r=new Map;return D&&r.set(n.chainIds.cross,D),M&&r.set(n.chainIds.bsc,M),r},[M,D,n.chainIds.bsc,n.chainIds.cross]),E=se((r,i,c)=>{let l=Ce.get(r.from.chainId)?.fast,x=i?c?.gasLimit??gt(r.type):0n,v=c?.gasPrice&&c.gasPrice>0n?c.gasPrice:0n,R=c?.maxFeePerGas&&c.maxFeePerGas>0n?c.maxFeePerGas:0n,B=c?.maxPriorityFeePerGas&&c.maxPriorityFeePerGas>0n?c.maxPriorityFeePerGas:0n,F=Ue(l?.maxFee??l?.max_fee),u=Ue(l?.maxPriorityFee??l?.max_priority_fee),d=R>0n?R:F>0n?F:v,w=B>0n?B:u>0n?u:d,y=v>0n?v:d,N=gn.has(r.from.chainId)&&y>0n,Y=x*(N?y:d),ne=O.get(ee(r.from.chainId,n.contracts.NATIVE_CROSS)),$=r.type!=="swap-bridge",Z=U.get(r.from.chainId);return{estTxFee:i?Xe(Y):"0",priorityFeePerGas:i&&!N?vt(w):"0",maxFeePerGas:i&&!N?vt(d):"0",gasLimit:i?x.toString():"0",gasPrice:i&&N?vt(y):void 0,isDelegateFee:r.type==="swap-bridge"?!1:tr(n,r.from.address,r.to.address),tokenIconUrl:$?ne?.iconUrl:void 0,tokenSymbol:$?ne?.symbol:void 0,gasCurrencyIconUrl:Z?.iconUrl,gasCurrencySymbol:Z?.symbol}},[n,Ce,U,O]),A=se(async r=>{let i=nr(r);if(!i)return null;let c=`${e}:${i.from}:${i.to}:${i.token.toLowerCase()}`,l=g.current.get(c);if(l)return l;let x=(async()=>{let v=new URLSearchParams({from:String(i.from),to:String(i.to),token:i.token});try{return(await Ge(`${n.bridgeApi}/token-config?${v}`)).config??null}catch{return null}})();return g.current.set(c,x),x},[e,n.bridgeApi]),W=Pe(()=>{let r=Object.values(C).map(c=>ln(c,_)),i=ee(n.chainIds.cross,n.contracts.CROSSD);return r.sort((c,l)=>{let x=le(c).toLowerCase()===i.toLowerCase(),v=le(l).toLowerCase()===i.toLowerCase();return x!==v?x?-1:1:le(c).localeCompare(le(l))})},[_,C,n]),ke=se(r=>{let i=le(r),c=i.toLowerCase(),l=[];Object.keys(C).forEach(R=>{let B=R.toLowerCase();if(c===B||P.some(d=>d.fromKey===c&&d.toKey===B))return;let F=k(i,R);if(!F)return;let u=O.get(R);u&&l.push({token:u,path:F})});let x=ee(n.chainIds.cross,n.contracts.CROSSD),v=ee(n.chainIds.cross,n.contracts.NATIVE_CROSS);return l.sort((R,B)=>{if(c===x.toLowerCase()){let y=le(R.token).toLowerCase()===v.toLowerCase(),N=le(B.token).toLowerCase()===v.toLowerCase();if(y!==N)return y?-1:1}let F=Ae(R.path.type),u=Ae(B.path.type);if(F!==u)return F?-1:1;let d=R.token.chainId===r.chainId,w=B.token.chainId===r.chainId;return d!==w?d?-1:1:le(R.token).localeCompare(le(B.token))}),l.map(R=>R.token)},[C,n,k,P,O]),qe=se(async r=>await Ie(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:je,functionName:"quoter",chainId:r}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),j=se(async r=>{No(s)!==r&&await Do(s,{chainId:r})},[s]),q=se(async r=>await Ie(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:je,functionName:"swapRouter",chainId:r}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),pe=se(async({path:r,step:i,amount:c,source:l})=>{let x=await qe(i.chain),v=i.poolAddress?Ie(s,{address:i.poolAddress,abi:Ho,functionName:"slot0",chainId:i.chain}).then(F=>F?.[0]).catch(()=>{}):Promise.resolve(void 0);if(l==="from"){let F=await Ie(s,{address:x,abi:nn,functionName:"quoteExactInputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amountIn:dt(c),fee:i.fee||he,sqrtPriceLimitX96:0n}],chainId:i.chain}),u=sn(await v,F[1]);return{amount:Xe(F[0]),path:r,priceImpact:u}}let R=await Ie(s,{address:x,abi:nn,functionName:"quoteExactOutputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amount:dt(c),fee:i.fee||he,sqrtPriceLimitX96:0n}],chainId:i.chain}),B=sn(await v,R[1]);return{amount:Xe(R[0]),path:r,priceImpact:B}},[n,qe,s]),we=se(async(r,i)=>{if(!t)throw new Error("Wallet is not connected.");let c=gt(i.type);if(Ae(i.type)){let d=Ee(i,"first");if(!d)throw new Error("Swap route is not available.");let w=me(r.fromAmount),y=me(r.toAmount);if(w<=0n)throw new Error("Bridge amount is empty.");if(y<=0n)throw new Error("Bridge quote is not ready.");let N=await q(d.chain),V=Pt(y,r.slippage),Y=i.type==="swap-withdraw"?fn:t,ne={tokenIn:J(n,d.fromToken),tokenOut:J(n,d.toToken),fee:d.fee||he,recipient:Y,deadline:ct(),amountIn:w,amountOutMinimum:V,sqrtPriceLimitX96:0n};if(i.type==="swap-withdraw"){let $=at({abi:_e,functionName:"exactInputSingle",args:[ne]}),Z=at({abi:_e,functionName:"unwrapWETH9",args:[V,t]});return{address:N,abi:_e,functionName:"multicall",args:[[$,Z]],chainId:d.chain,fallbackGasLimit:c}}if(i.type==="deposit-swap"){let $=at({abi:_e,functionName:"exactInputSingle",args:[ne]}),Z=at({abi:_e,functionName:"refundETH",args:[]});return{address:N,abi:_e,functionName:"multicall",args:[[$,Z]],value:w,chainId:d.chain,fallbackGasLimit:c}}return{address:N,abi:_e,functionName:"exactInputSingle",args:[ne],chainId:d.chain,fallbackGasLimit:c}}if(i.type==="swap-bridge"){let d=Ee(i,"first");if(!d)throw new Error("Swap bridge route is not available.");let w=me(r.fromAmount),y=me(r.toAmount);if(w<=0n)throw new Error("Bridge amount is empty.");if(y<=0n)throw new Error("Bridge quote is not ready.");let N=n.contracts.SWAP_BRIDGE_ROUTER,V=ct(),Y={toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},ne={tokenIn:J(n,i.from.address),tokenOut:J(n,d.toToken),fee:d.fee||he,sqrtPriceLimitX96:0n,bridgeParams:Y};if(r.lastChangedBy==="to"){let Z={...ne,amountOut:y,amountInMaximum:Yo(w,r.slippage)};return{address:N,abi:je,functionName:"swapBridgeExactOutputSingle",args:[Z,V],value:i.from.isNativeToken?Z.amountInMaximum:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let $={...ne,amountIn:w,amountOutMinimum:Pt(w,r.slippage)};return{address:N,abi:je,functionName:"swapBridgeExactInputSingle",args:[$,V],value:i.from.isNativeToken?w:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let l=i.steps.find(d=>d.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let x=me(r.fromAmount);if(x<=0n)throw new Error("Bridge amount is empty.");let v=await A(i),R=Ue(v?.gasFee??v?.gas_fee),B=dn(x,v?.exFeeRate??v?.ex_fee_rate),F="0x";if(i.type==="bridge-swap"){let d=Ee(i,"last");if(!d)throw new Error("Bridge swap route is not available.");let w=me(r.toAmount);if(w<=0n)throw new Error("Bridge quote is not ready.");let y=await q(i.to.chainId),N=Pt(w,r.slippage),V=at({abi:_e,functionName:"exactInputSingle",args:[{tokenIn:J(n,d.fromToken),tokenOut:J(n,d.toToken),fee:d.fee||he,recipient:t,deadline:ct(),amountIn:x,amountOutMinimum:N,sqrtPriceLimitX96:0n}]});F=`${y}${V.slice(2)}`}let u=[BigInt(i.to.chainId),i.from.address,t,x,R,B,F];return{address:l.bridgeAddress,abi:Vo,functionName:"bridgeToken",args:u,value:i.from.isNativeToken?x+B+R:void 0,chainId:i.from.chainId,fallbackGasLimit:c}},[n,A,q,t]),Oe=se(async(r,i)=>{if(i.type==="bridge"||i.type==="bridge-swap")return we(r,i);if(!t)throw new Error("Wallet is not connected.");let c=me(r.fromAmount);if(c<=0n)throw new Error("Bridge amount is empty.");if(i.type==="swap-bridge"){let R=Ee(i,"first");if(!R)throw new Error("Swap bridge route is not available.");let B=n.contracts.SWAP_BRIDGE_ROUTER,F={tokenIn:J(n,i.from.address),tokenOut:J(n,R.toToken),fee:R.fee||he,sqrtPriceLimitX96:0n,bridgeParams:{toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},amountIn:c,amountOutMinimum:0n};return{address:B,abi:je,functionName:"swapBridgeExactInputSingle",args:[F,ct()],value:i.from.isNativeToken?c:void 0,chainId:i.from.chainId,fallbackGasLimit:gt(i.type)}}let l=Ee(i,"first");if(!l)throw new Error("Swap route is not available.");let x=await q(l.chain),v={tokenIn:J(n,l.fromToken),tokenOut:J(n,l.toToken),fee:l.fee||he,recipient:t,deadline:ct(),amountIn:c,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:x,abi:_e,functionName:"exactInputSingle",args:[v],value:i.from.isNativeToken?c:void 0,chainId:l.chain,fallbackGasLimit:gt(i.type)}},[we,n,q,t]),Ne=se(async(r,i)=>{if(!t)return null;try{let c=await Oe(r,i),l=Ae(i.type)||i.type==="swap-bridge",x=await an(s,c.chainId,c.fallbackGasLimit,l,{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value},!0);return{gasLimit:x.gas,gasPrice:x.gasPrice,maxFeePerGas:x.maxFeePerGas,maxPriorityFeePerGas:x.maxPriorityFeePerGas}}catch{return null}},[Oe,s,t]),He=se(async r=>{let i=le(r.fromToken),c=le(r.toToken),l=k(i,c);if(!l)return{error:"Route is not available."};let x=r.lastChangedBy==="to"?r.toAmount:r.fromAmount,v=!!x&&Number(x)>0,R=Tr(l,n)?K:void 0,B=async(V,Y,ne)=>{let $=v?await Ne(V,l):null,Z=E(l,v,$);return vr({input:V,path:l,gasInfo:Z,amountData:Y,liquidity:R,enrichedTokens:C,priceImpact:ne})};if(!x||Number(x)<=0)return{fromAmount:r.fromAmount,toAmount:r.toAmount,summary:await B(r)};let F=await A(l),u=Ue(F?.gasFee??F?.gas_fee),d=l.type==="bridge"||l.type==="bridge-swap"?{networkFee:u}:void 0,w=l.type==="bridge"?r.lastChangedBy==="to"?{...r,fromAmount:r.toAmount}:{...r,toAmount:r.fromAmount}:r,y=or({input:w,path:l,config:F});if(y)return{fromAmount:w.fromAmount,toAmount:w.toAmount,summary:await B(w,d),error:y};let N=rr({input:w,path:l,config:F});if(N)return{fromAmount:w.fromAmount,toAmount:w.toAmount,summary:await B(w,d),error:N};if(l.type==="bridge")return{fromAmount:w.fromAmount,toAmount:w.toAmount,summary:await B(w,d)};try{if(l.type==="swap-bridge"){let $=Ee(l,"first"),Z=n.contracts.SWAP_BRIDGE_ROUTER;if(!$)return{error:"Swap bridge route is not ready."};let Ze=ge=>pe({path:l,step:$,amount:ge,source:"from"}).then(We=>We.priceImpact).catch(()=>{});if(r.lastChangedBy==="from"){let ge=await Ie(s,{address:Z,abi:je,functionName:"getAmountSwapBridgeOut",args:[BigInt(l.to.chainId),J(n,l.from.address),J(n,$.toToken),$.fee||he,dt(r.fromAmount)],chainId:l.from.chainId}),We=Xe(ge[1]),ut={...r,toAmount:We};return{toAmount:We,summary:await B(ut,{networkFee:ge[3],exFee:ge[4]},await Ze(r.fromAmount))}}let Ve=await Ie(s,{address:Z,abi:je,functionName:"getAmountSwapBridgeIn",args:[BigInt(l.to.chainId),J(n,l.from.address),J(n,$.toToken),$.fee||he,dt(r.toAmount)],chainId:l.from.chainId}),ce=Xe(Ve[1]),Je={...r,fromAmount:ce};return{fromAmount:ce,summary:await B(Je,{networkFee:Ve[3],exFee:Ve[4]},await Ze(ce))}}let V=l.type==="bridge-swap"?Ee(l,"last"):Ee(l,"first");if(!V)return{error:"Swap route is not available."};let Y=await pe({path:l,step:V,amount:x,source:r.lastChangedBy});if(r.lastChangedBy==="from"){let $={...r,toAmount:Y.amount};return{toAmount:Y.amount,summary:await B($,d,Y.priceImpact)}}let ne={...r,fromAmount:Y.amount};return{fromAmount:Y.amount,summary:await B(ne,d,Y.priceImpact)}}catch(V){return{fromAmount:r.fromAmount,toAmount:r.toAmount,summary:await B(r,d),error:jo(V)}}},[K,E,C,n,Ne,k,A,pe,s]),Fe=se(async r=>{if(r.from.isNativeToken)return null;if(r.type==="swap"||r.type==="deposit-swap"||r.type==="swap-withdraw")return q(r.from.chainId);if(r.type==="swap-bridge")return n.contracts.SWAP_BRIDGE_ROUTER;let i=r.steps.find(c=>c.type==="bridge");return i?.bridgeAddress?i.bridgeAddress:null},[n.contracts.SWAP_BRIDGE_ROUTER,q]),fe=se(async r=>{if(!t)throw new Error("Wallet is not connected.");let i=le(r.fromToken),c=le(r.toToken),l=k(i,c);if(!l)throw new Error("Route is not available.");if(!Ae(l.type)&&l.type!=="swap-bridge"||l.from.isNativeToken)return null;let x=me(r.fromAmount);if(x<=0n)return null;let v=await Fe(l);return!v||await Ie(s,{address:l.from.address,abi:St,functionName:"allowance",args:[t,v],chainId:l.from.chainId})>=x?null:{token:r.fromToken,tokenAddress:l.from.address,spenderAddress:v,amount:r.fromAmount}},[k,Fe,s,t]),ae=se(async(r,i)=>{let c=me(i.amount||r.fromAmount);if(c<=0n)throw new Error("Approval amount is empty.");await j(i.token.chainId);let l=await en(s,{address:i.tokenAddress,abi:St,functionName:"approve",args:[i.spenderAddress,c],chainId:i.token.chainId});await Wo(s,{hash:l,chainId:i.token.chainId})},[j,s]),De=se(async(r,i)=>{let c=await we(r,i);await j(c.chainId);let l=await an(s,c.chainId,c.fallbackGasLimit,Mo(i.type),{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value});return{txHash:await en(s,{address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value,chainId:c.chainId,...l}),fromToken:r.fromToken,toToken:r.toToken,fromAmount:r.fromAmount,toAmount:r.toAmount}},[we,j,s,t]),X=se(async(r,i)=>{let c=t;if(!c)throw new Error("Wallet is not connected.");let l=i.steps.find(We=>We.type==="bridge");if(!l?.bridgeAddress)throw new Error("Bridge route is not available.");let x=i.from.address,v=i.from.chainId,R=me(r.fromAmount);if(R<=0n)throw new Error("Bridge amount is empty.");let B=await A(i),F=Ue(B?.gasFee??B?.gas_fee),u=dn(R,B?.exFeeRate??B?.ex_fee_rate),d=R+u+F,[w,y]=await Promise.all([Ie(s,{address:x,abi:tn,functionName:"name",chainId:v}),Ie(s,{address:x,abi:tn,functionName:"nonces",args:[c],chainId:v})]),N=BigInt(Math.floor(Date.now()/1e3)+300),V=await Fo(s,{domain:{name:w,version:"1",chainId:v,verifyingContract:x},types:{Permit:[{name:"owner",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]},primaryType:"Permit",message:{owner:c,spender:l.bridgeAddress,value:d,nonce:y,deadline:N}}),{r:Y,s:ne,v:$,yParity:Z}=Eo(V),Ze=$!==void 0?Number($):Z+27,Ve={exFee:u.toString(),from:v,fromToken:x,nonce:Number(y),gasFee:F.toString(),permitArgs:{account:c,deadline:N.toString(),r:Y,s:ne,token:x,v:Ze,value:d.toString()},to:c,toChainID:String(i.to.chainId),value:d.toString()},ce=await on(`${n.bridgeApi}/permit`,Ve),Je=ce?.requestId??ce?.request_id;if(!Je)throw new Error("Bridge permit request failed.");let ge=await Qo(n.bridgeApi,Je);if(!Rt(ge))throw new Error("Bridge submitted, but confirmation timed out. Check History shortly.");return{txHash:ge,fromToken:r.fromToken,toToken:r.toToken,fromAmount:r.fromAmount,toAmount:r.toAmount}},[n,A,s,t]),Se=se(async r=>{let i=le(r.fromToken),c=le(r.toToken),l=k(i,c);if(!l)throw new Error("Route is not available.");if(!(Ae(l.type)||l.type==="swap-bridge"||l.type==="bridge-swap"||l.type==="bridge"))throw new Error("This bridge route is not supported yet.");return{...l.type==="bridge"&&l.from.chainId===n.chainIds.bsc&&l.from.address.toLowerCase()===n.contracts.BSC_CROSS.toLowerCase()?await X(r,l):await De(r,l),pathType:l.type,routeTokens:Sr(l,C)}},[C,n,k,X,De]);return{bridgeTokens:W,bridgeHistory:z,getBridgeApproval:fe,approveBridge:ae,getBridgeQuote:He,getBridgeToTokens:ke,submitBridge:Se,isLoading:f.isLoading||b.isLoading||I.isLoading||S.isLoading||m.some(r=>r.isLoading)}}import{useEffect as kn,useRef as Pr,useState as xn}from"react";import{useAccount as Ar}from"wagmi";function _t(e){let{address:t,connector:o}=Ar(),{currentWallet:s}=Be(),n=e?.walletId!==void 0?e.walletId:s,a=e?.connector!==void 0?e.connector:o,g=e?.address!==void 0?e.address:t,[f,b]=xn({loginType:null,accountName:null,accounts:[],isResolved:!1}),p=Pr(new Map),[h,I]=xn(0);return kn(()=>{let S=!1;if(n!=="cross_embedded")return b({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{S=!0};if(!a)return b({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{S=!0};b(C=>({...C,isResolved:!1}));let m=20,T=300,P=async()=>{if(typeof a.getProvider!="function")return"retry";let C;try{C=await a.getProvider()}catch{return"retry"}let k=C?.sdk;if(!k)return"giveup";try{let W=k.getRNBridgeActiveWallet?.(),ke=W?.walletName?.trim();W&&ke&&p.current.set(W.address.toLowerCase(),ke)}catch{}let[_,O]=await Promise.all([k.getUserInfo?.().catch(()=>null)??null,k.getAddresses?.().catch(()=>null)??null]);if(S)return"done";let U=_?.loginType,te=U==="google"||U==="apple"?U:null;if(!te)return"retry";let z=g?.toLowerCase(),K=z&&Array.isArray(O)?O.find(W=>W.address.toLowerCase()===z):null,D=Array.isArray(O)?O.filter(W=>/^0x[a-fA-F0-9]{40}$/.test(W.address)).map(W=>({address:W.address.toLowerCase(),...Number.isFinite(W.index)?{index:W.index}:{},...W.name?.trim()?{name:W.name.trim()}:{}})):[],M=z?p.current.get(z)?.trim():void 0,Ce=!K&&z&&/^0x[a-fA-F0-9]{40}$/.test(z)?[...D,{address:z,index:D.length,...M?{name:M}:{}}]:D,A=M||K?.name?.trim()||(typeof K?.index=="number"?`Account ${K.index+1}`:g?`${g.slice(0,6)}\u2026${g.slice(-4)}`:null);return b({loginType:te,accountName:A,accounts:Ce,isResolved:!0}),"done"};return(async()=>{for(let C=0;C<m;C++){if(S)return;let k=await P();if(k==="done")return;if(k==="giveup"){S||b({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(_=>setTimeout(_,T))}S||b({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{S=!0}},[n,a,g,h]),kn(()=>{if(n!=="cross_embedded"||!a||typeof a.getProvider!="function")return;let S=!1,m;return(async()=>{let T;try{T=await a.getProvider()}catch{return}if(S)return;let P=T?.sdk;P?.on&&(m=P.on("addressChanged",({address:C,walletName:k})=>{let _=k?.trim();_&&(p.current.set(C.toLowerCase(),_),I(O=>O+1))}))})(),()=>{S=!0,m?.()}},[n,a]),f}import{Fragment as Sn,jsx as ue,jsxs as Ye}from"react/jsx-runtime";var Gr=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalSupply",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]}],Ur=[{type:"function",name:"earned",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"posaActive",stateMutability:"view",inputs:[],outputs:[{name:"",type:"bool"}]},{type:"function",name:"lastRewardBlock",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"totalStaked",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint256"}]}],Kr={dev:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},stage:{poolAddress:"0x0000000c5BB5C7B081237B5efaFC753D61201b94",crossChainId:612044,networkStatsUrl:"https://stg-posa-api.crosstoken.io/api/v1/network/stats"},production:{poolAddress:"0x000000068122d9bB43B4BCF5497A10EdfA9F5E93",crossChainId:612055,networkStatsUrl:"https://posa-api.crosstoken.io/api/v1/network/stats"}},Nt=10n**18n,$r={google:{name:"Google",iconUrl:Pn,connectorId:$e.CROSSx},apple:{name:"Apple",iconUrl:Wt,connectorId:$e.CROSSx},cross:{name:"CROSSx",iconUrl:Dt,connectorId:$e.CROSSx},metamask:{name:"MetaMask",iconUrl:An,connectorId:$e.MetaMask},binance:{name:"Binance Wallet",iconUrl:vn,connectorId:$e.Binance}};function qr(e){switch(e){case"cross_embedded":return $e.CROSSx;case"metamask":return $e.MetaMask;case"binance":return $e.Binance;default:return}}function Hr(e,t){switch(e){case"cross_embedded":return t==="google"?{name:"Google",iconUrl:Pn}:t==="apple"?{name:"Apple",iconUrl:Wt}:{name:"CROSSx",iconUrl:Dt};case"cross_wallet":return{name:"CROSSx Wallet",iconUrl:Dt};case"cross_extension":return{name:"CROSSx Extension",iconUrl:Mr};case"metamask":return{name:"MetaMask",iconUrl:An};case"binance":return{name:"Binance Wallet",iconUrl:vn};default:return null}}var Vr="Bridge is available only with the CROSSx 2.0 wallet.",zr="Send is available only with the CROSSx 2.0 wallet.";function Qr({label:e="Connect Wallet",className:t,style:o,walletInfoStyle:s,user:n,enablePortfolio:a,portfolio:g,theme:f,accountName:b,connectorId:p,showPortfolio:h,sendAccounts:I,getTransactionReceipt:S,sendTransaction:m,estimateGas:T,onDisconnect:P,onSelectWallet:C,onBuy:k,onRampRedirectUrl:_,bridgeTokens:O,bridgeHistory:U,getBridgeQuote:te,getBridgeToTokens:z,getBridgeApproval:K,approveBridge:D,submitBridge:M,showBalance:Ce=!0,env:E,...A}){let{address:W,isConnected:ke,connector:qe,chain:j}=_r(),q=Or(),pe=Er(),{switchChainAsync:we}=Fr(),{sendTransactionAsync:Oe}=Nr(),{connectWallet:Ne,disconnect:He,selectWallet:Fe,currentWallet:fe,isConnecting:ae}=Be(),De=it(),X=f??De?.mode??"dark",Se=lt(()=>Dr(E),[E]),r=n?.address??W,i=n?$r[n.provider]:null,{loginType:c,accountName:l,accounts:x}=_t({walletId:fe,connector:qe,address:r}),v=lt(()=>i?{name:i.name,iconUrl:i.iconUrl}:Hr(fe,c),[i,fe,c]),R=b??n?.name??l??void 0,B=i?i.connectorId:qr(fe),F=p??B,u=g??h??!!a,d=Bt({env:Se,walletAddress:r,enabled:ke&&!!r&&Ce}),w=O??d.bridgeTokens,y=U??d.bridgeHistory,N=te??d.getBridgeQuote,V=z??d.getBridgeToTokens,Y=K??d.getBridgeApproval,ne=D??d.approveBridge,$=M??d.submitBridge,Z=Ke(()=>{Ne().catch(L=>{console.error("[crossx-kit] connectWallet error:",L)})},[Ne]),Ze=Ke(()=>{He()},[He]),Ve=P??Ze,ce=Wr(),{eligibility:Je}=Lr({network:j?String(j.id):void 0}),ge=Je?.allowed===!0,We=lt(()=>{if(k)return k;if(!(!ce||!j||!ge))return()=>ce.open({crypto:j.nativeCurrency?.symbol??"USDT",network:String(j.id),..._?{redirectUrl:_}:{}}).then(()=>{}).catch(L=>{throw console.warn("[crossx-kit] onramp open failed:",L),L})},[k,ce,j,ge,_]),ut=Br();Rr(()=>{if(ce?.onStatus)return ce.onStatus(()=>{ut.invalidateQueries()})},[ce,ut]);let On=lt(()=>{if(!k&&!(!ce||!j)&&!ge)return"On-ramp is not available in your region."},[k,ce,j,ge]),Lt=lt(()=>n?n.provider==="google"||n.provider==="apple":fe==="cross_embedded",[n,fe]),Nn=A.onBridgeDisabledMessage??(Lt?void 0:Vr),Fn=A.onSendDisabledMessage??(Lt?void 0:zr),Dn=n?n.provider==="google"||n.provider==="apple":fe==="cross_embedded",Wn=Ke(()=>{Fe().catch(L=>{console.error("[crossx-kit] selectWallet error:",L)})},[Fe]),Mt=C??(Dn?Wn:void 0),Ln=Ke(async({hash:L,chainId:oe})=>{let re=Et(q,oe?{chainId:oe}:void 0);if(!re)return null;try{return await re.getTransactionReceipt({hash:L})}catch{return null}},[q]),Mn=Ke(async L=>{L.chainId!==void 0&&L.chainId!==pe&&await we({chainId:L.chainId});let re=L.chainId===56||L.chainId===97?{...L,type:"legacy"}:L;return(m??Oe)(re)},[m,Oe,pe,we]),Gn=u?Mn:m,Un=Ke(async L=>{let oe=L.chainId??pe,re=Et(q,oe?{chainId:oe}:void 0);if(!re)throw new Error(`publicClient for chainId ${oe??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let be=oe===56||oe===97,[ye,xe]=await Promise.all([re.estimateGas({account:L.from,to:L.to,value:L.value,data:L.data}),(async()=>{if(be)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await re.getGasPrice()};try{let Q=await re.estimateFeesPerGas();return{maxFeePerGas:Q.maxFeePerGas,maxPriorityFeePerGas:Q.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await re.getGasPrice()}}})()]);return{gasLimit:ye,maxFeePerGas:xe.maxFeePerGas,maxPriorityFeePerGas:xe.maxPriorityFeePerGas,gasPrice:xe.gasPrice}},[q,pe]),Kn=T??Un,$n=Ke(async L=>{let oe={};if(!W||L.length===0)return oe;let re=L.flatMap(ye=>{let Q={address:ye,abi:Gr,chainId:pe};return[{...Q,functionName:"balanceOf",args:[W]},{...Q,functionName:"totalSupply"},{...Q,functionName:"decimals"}]}),be;try{be=await Tn(q,{contracts:re,allowFailure:!0})}catch{return oe}return L.forEach((ye,xe)=>{let Q=xe*3,Te=be[Q],mt=be[Q+1],et=be[Q+2];!Te||Te.status!=="success"||(oe[ye.toLowerCase()]={balance:Te.result,totalSupply:mt&&mt.status==="success"?mt.result:void 0,decimals:et&&et.status==="success"?Number(et.result):void 0})}),oe},[q,W,pe]),qn=Ke(async L=>{let oe={earnedWei:0n,stakedWei:0n};if(!L)return oe;let re=Kr[Se],be={address:re.poolAddress,abi:Ur,chainId:re.crossChainId},ye;try{ye=await Tn(q,{allowFailure:!0,contracts:[{...be,functionName:"earned",args:[L]},{...be,functionName:"balanceOf",args:[L]},{...be,functionName:"posaActive"},{...be,functionName:"lastRewardBlock"},{...be,functionName:"totalStaked"}]})}catch{return oe}let xe=ze=>ye[ze]&&ye[ze].status==="success"?ye[ze].result:0n,Q=xe(0),Te=xe(1);if(ye[2]&&ye[2].status==="success"?ye[2].result:!1)return{earnedWei:Q,stakedWei:Te};let et=xe(3),Kt=xe(4);if(Kt===0n)return{earnedWei:Q,stakedWei:Te};let ht=0n;try{ht=await Et(q,{chainId:re.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:Q,stakedWei:Te}}if(ht<=et)return{earnedWei:Q,stakedWei:Te};let Ct=0n;try{let ze=await fetch(re.networkStatsUrl).then(kt=>kt.json()),$t=ze?.data?.block_reward??ze?.block_reward;if($t){let[kt,Qn=""]=String($t).split("."),jn=(Qn+"0".repeat(18)).slice(0,18);Ct=BigInt(kt||"0")*Nt+BigInt(jn||"0")}}catch{}if(Ct===0n)return{earnedWei:Q,stakedWei:Te};let Vn=(ht-et)*Ct*Nt/Kt,zn=Te*Vn/Nt;return{earnedWei:Q+zn,stakedWei:Te}},[q,Se]),Gt=!Mt,Ut=t?`cb-button ${t}`:"cb-button",Hn=t?`cb-pill ${t}`:"cb-pill";return ae&&!ke?Ye(Sn,{children:[ue("style",{children:Ft}),Ye("button",{type:"button",disabled:!0,className:Ut,style:o,"aria-busy":"true",children:[ue("span",{className:"cb-spinner","aria-hidden":"true"}),ue("span",{className:"cb-button-label",children:"Connecting..."})]})]}):ke&&r?Ye("span",{"data-crossx-wallet-info":Gt?"external":"embedded",children:[ue("style",{children:Ft}),Gt&&ue("style",{children:Xr}),Ye(Ot,{...A,env:Se,theme:X,showBalance:Ce,walletAddress:r,accountName:R,sendAccounts:I??x,connectorId:F,showPortfolio:u,onDisconnect:Ve,onSelectWallet:Mt,onBuy:We,onBuyDisabledMessage:On,onBridgeDisabledMessage:Nn,onSendDisabledMessage:Fn,sendTransaction:Gn,getTransactionReceipt:S??Ln,estimateGas:Kn,lpBalanceReader:$n,stakingRewardsReader:qn,bridgeTokens:w,bridgeHistory:y,getBridgeQuote:N,getBridgeToTokens:V,getBridgeApproval:Y,approveBridge:ne,submitBridge:$,style:s,children:[ue(Ot.Trigger,{asChild:!0,children:Ye("button",{type:"button",className:Hn,style:o,"aria-label":`Connected with ${v?.name??"wallet"}: ${In(r)}`,children:[v?.iconUrl?ue("img",{src:v.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":v.iconUrl===Wt?"apple":void 0}):ue("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),ue("span",{className:"cb-pill-address",children:In(r)})]})}),ue(Ot.Content,{align:"end",sideOffset:8})]})]}):Ye(Sn,{children:[ue("style",{children:Ft}),Ye("button",{type:"button",onClick:Z,className:Ut,style:o,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[ue(jr,{}),ue("span",{className:"cb-button-label",children:e})]})]})}function jr(){return ue("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:ue("path",{d:"M11.4368 10.5007C11.4368 9.9538 11.6544 9.42855 12.041 9.04175C12.4278 8.65492 12.9529 8.4375 13.5 8.4375H15.1875V6.00073L15.1732 5.92822C15.1639 5.90585 15.15 5.88528 15.1326 5.8678C15.0973 5.83263 15.0494 5.81287 14.9996 5.81287H3.74963C3.4787 5.81287 3.21001 5.75949 2.95972 5.65576C2.90937 5.63488 2.86089 5.61017 2.8125 5.58545V14.2504C2.8125 14.4989 2.91141 14.7371 3.08716 14.9128C3.2629 15.0886 3.50109 15.1875 3.74963 15.1875H15.0007C15.0252 15.1875 15.0495 15.1826 15.0721 15.1732C15.0948 15.1638 15.1152 15.1499 15.1326 15.1326C15.1499 15.1152 15.1638 15.0948 15.1732 15.0721C15.1826 15.0495 15.1875 15.0252 15.1875 15.0007V12.5629H13.5C12.9529 12.5629 12.4278 12.3454 12.041 11.9586C11.6545 11.5719 11.4369 11.0475 11.4368 10.5007ZM12.5618 10.5007C12.5619 10.7491 12.6609 10.9875 12.8364 11.1632C13.0123 11.3391 13.2513 11.4379 13.5 11.4379H15.75C15.7998 11.4379 15.8477 11.4182 15.8829 11.3829C15.9182 11.3477 15.9379 11.2998 15.9379 11.25V9.75037C15.9379 9.70054 15.9182 9.65266 15.8829 9.61743C15.8477 9.5822 15.7998 9.5625 15.75 9.5625H13.5C13.2513 9.5625 13.0123 9.66131 12.8364 9.83716C12.6607 10.013 12.5618 10.2522 12.5618 10.5007ZM13.6879 3.00037C13.6879 2.95054 13.6682 2.90266 13.6329 2.86743C13.5977 2.8322 13.5498 2.8125 13.5 2.8125H3.74963C3.50109 2.8125 3.2629 2.91141 3.08716 3.08716C2.91141 3.2629 2.8125 3.50109 2.8125 3.74963L2.81689 3.84192C2.82585 3.93354 2.8486 4.02351 2.88391 4.10889C2.93096 4.22263 3.00015 4.32614 3.08716 4.41321C3.17403 4.50009 3.2769 4.56936 3.39038 4.61646C3.50412 4.66359 3.62651 4.68787 3.74963 4.68787H13.6879V3.00037ZM14.8129 4.68787H14.9996C15.3473 4.68787 15.6808 4.82576 15.9269 5.07129C16.173 5.31702 16.3119 5.65077 16.3125 5.99854V8.56494C16.4469 8.62873 16.5711 8.7148 16.6783 8.82202C16.9246 9.06823 17.0629 9.40217 17.0629 9.75037V11.25C17.0629 11.5982 16.9246 11.9321 16.6783 12.1783C16.5712 12.2855 16.4468 12.3706 16.3125 12.4343V14.9985L16.3059 15.1282C16.2934 15.2564 16.2619 15.3822 16.2125 15.5017C16.1466 15.6612 16.05 15.806 15.928 15.928C15.806 16.05 15.6612 16.1466 15.5017 16.2125C15.3425 16.2783 15.1719 16.3126 14.9996 16.3125H3.74963C3.20272 16.3125 2.67847 16.095 2.29175 15.7083C1.90502 15.3215 1.6875 14.7973 1.6875 14.2504V3.74963C1.6875 3.20272 1.90502 2.67847 2.29175 2.29175C2.67847 1.90502 3.20272 1.6875 3.74963 1.6875H13.5C13.8482 1.6875 14.1821 1.82581 14.4283 2.07202C14.6746 2.31823 14.8129 2.65217 14.8129 3.00037V4.68787Z",fill:"currentColor"})})}var Xr=`
3
- [data-crossx-wallet-info="external"] .wi-select-wallet-btn {
4
- display: none !important;
5
- }
6
- `;function In(e){return`${e.slice(0,6)}...${e.slice(-4)}`}var Ft=`
7
- .cb-button {
8
- -webkit-font-smoothing: antialiased;
9
- --cb-bg: var(--ds-accent-primary-default, #00D5AA);
10
- --cb-bg-hover: var(--ds-accent-primary-high, #00a0a2);
11
- --cb-color: var(--ds-accent-primary-on, #000);
12
- --cb-border: none;
13
- --cb-radius: 8px;
14
- --cb-height: 36px;
15
- --cb-padding: 0 16px;
16
- --cb-font-family: Inter, system-ui, -apple-system, sans-serif;
17
- --cb-font-size: 14px;
18
- --cb-font-weight: 500;
19
- --cb-gap: 8px;
20
- --cb-transition: background-color 0.15s ease, transform 0.1s ease;
21
- --cb-loading-opacity: 0.7;
22
- --cb-press-scale: 0.95;
23
- --cb-spinner-size: 14px;
24
- --cb-spinner-thumb: currentColor;
25
- --cb-spinner-track: color-mix(in srgb, currentColor 20%, transparent);
26
- --cb-icon-size: 18px;
27
-
28
- display: inline-flex;
29
- align-items: center;
30
- justify-content: center;
31
- box-sizing: border-box;
32
- height: var(--cb-height);
33
- gap: var(--cb-gap);
34
- padding: var(--cb-padding);
35
- border-radius: var(--cb-radius);
36
- border: var(--cb-border);
37
- background: var(--cb-bg);
38
- color: var(--cb-color);
39
- font-family: var(--cb-font-family);
40
- font-size: var(--cb-font-size);
41
- font-weight: var(--cb-font-weight);
42
- cursor: pointer;
43
- transition: var(--cb-transition);
44
- }
45
- .cb-button:hover:not(:disabled) { background: var(--cb-bg-hover); }
46
- .cb-button:active:not(:disabled) { transform: scale(var(--cb-press-scale)); }
47
- .cb-button:disabled, .cb-button[aria-busy="true"] {
48
- cursor: default;
49
- opacity: var(--cb-loading-opacity);
50
- }
51
- .cb-spinner {
52
- display: inline-block;
53
- width: var(--cb-spinner-size);
54
- height: var(--cb-spinner-size);
55
- border: 2px solid var(--cb-spinner-track);
56
- border-top-color: var(--cb-spinner-thumb);
57
- border-radius: 50%;
58
- animation: cck-cb-spin 0.6s linear infinite;
59
- flex-shrink: 0;
60
- }
61
- .cb-button-icon {
62
- width: var(--cb-icon-size);
63
- height: var(--cb-icon-size);
64
- flex-shrink: 0;
65
- }
66
- .cb-button-label { white-space: nowrap; }
67
- .cb-pill {
68
- --cb-pill-bg: var(--ds-surface-default, #1e232e);
69
- --cb-pill-bg-hover: var(--ds-surface-medium, #252b39);
70
- --cb-pill-color: var(--ds-content-high, #ffffffd9);
71
- --cb-pill-border: 1px solid var(--ds-border-default, #ffffff12);
72
- --cb-pill-border-hover: 1px solid var(--ds-border-medium, #ffffff2e);
73
- --cb-pill-radius: 8px;
74
- --cb-pill-height: 36px;
75
- --cb-pill-padding: 0 12px;
76
- --cb-pill-press-scale: 0.95;
77
- --cb-pill-font-family: Inter, system-ui, -apple-system, sans-serif;
78
- --cb-pill-font-size: 14px;
79
- --cb-pill-font-weight: 500;
80
- --cb-pill-gap: 8px;
81
- --cb-pill-icon-size: 20px;
82
- --cb-pill-icon-placeholder-bg: var(--ds-surface-high, #2a2d3a);
83
- --cb-pill-address-font: Inter, system-ui, -apple-system, sans-serif;
84
- --cb-pill-address-font-size: 14px;
85
- --cb-pill-address-letter-spacing: -0.01em;
86
-
87
- display: inline-flex;
88
- align-items: center;
89
- box-sizing: border-box;
90
- height: var(--cb-pill-height);
91
- gap: var(--cb-pill-gap);
92
- padding: var(--cb-pill-padding);
93
- border-radius: var(--cb-pill-radius);
94
- border: var(--cb-pill-border);
95
- background: var(--cb-pill-bg);
96
- color: var(--cb-pill-color);
97
- font-family: var(--cb-pill-font-family);
98
- font-size: var(--cb-pill-font-size);
99
- font-weight: var(--cb-pill-font-weight);
100
- cursor: pointer;
101
- }
102
- .cb-pill:hover,
103
- .cb-pill[data-state="open"] { background: var(--cb-pill-bg-hover); border: var(--cb-pill-border-hover, 1px solid var(--ds-border-medium, #ffffff2e)); }
104
- .cb-pill:active:not(:disabled) { transform: scale(var(--cb-pill-press-scale)); }
105
- .cb-pill-icon {
106
- width: var(--cb-pill-icon-size);
107
- height: var(--cb-pill-icon-size);
108
- border-radius: 50%;
109
- object-fit: contain;
110
- flex-shrink: 0;
111
- background: transparent;
112
- }
113
- /* Apple is a monochrome black logomark in an <img> data URI (can't follow
114
- theme via currentColor). Flip it to white in dark mode so it stays
115
- visible on the dark pill; multicolor marks (Google/MetaMask/Binance/
116
- CROSSx) are untouched. */
117
- [data-theme="dark"] .cb-pill-icon[data-provider="apple"] {
118
- filter: invert(1);
119
- }
120
- .cb-pill-icon-placeholder {
121
- display: inline-block;
122
- width: var(--cb-pill-icon-size);
123
- height: var(--cb-pill-icon-size);
124
- border-radius: 50%;
125
- background: var(--cb-pill-icon-placeholder-bg);
126
- flex-shrink: 0;
127
- }
128
- .cb-pill-address {
129
- font-family: var(--cb-pill-address-font);
130
- font-size: var(--cb-pill-address-font-size);
131
- letter-spacing: var(--cb-pill-address-letter-spacing);
132
- }
133
- @media (max-width: 767.98px) {
134
- .cb-button, .cb-pill {
135
- width: 36px;
136
- min-width: 36px;
137
- padding: 0;
138
- }
139
- .cb-button-label, .cb-pill-address { display: none; }
140
- }
141
- @keyframes cck-cb-spin {
142
- to { transform: rotate(360deg); }
143
- }
144
- `;import{useCallback as Rn,useEffect as Yr,useMemo as Bn,useState as Zr}from"react";import{detectWallets as _n,DEFAULT_WALLET_REGISTRY as En}from"@nexus-cross/connect-kit-wagmi";import{jsx as ie,jsxs as Re}from"react/jsx-runtime";var Jr=["Ensure your wallet extension is installed and unlocked","Try refreshing the page","Some wallets may require you to first open the extension","You can try clicking the wallet anyway"],es="Connect with one of our available wallet providers to continue.";function ts({open:e,onClose:t,onSelect:o,title:s="Connect Wallet",description:n=es,troubleshootingTips:a=Jr}){let{availableWallets:g}=Be(),[f,b]=Zr({});Yr(()=>{if(!e)return;let m=_n(En),T={};for(let C of m)C.installed!==void 0&&(T[C.id]=C.installed);b(T);let P=setTimeout(()=>{let C=_n(En),k={};for(let _ of C)_.installed!==void 0&&(k[_.id]=_.installed);b(k)},1e3);return()=>clearTimeout(P)},[e]);let p=Bn(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),h=Bn(()=>p?g.filter(m=>m.type!=="extension"):g,[g,p]),I=Rn(m=>{if(!f[m.walletId]&&m.installUrl&&m.type==="extension"){window.open(m.installUrl,"_blank");return}t(),o(m.walletId)},[t,o,f]),S=Rn((m,T)=>{m.stopPropagation(),t(),window.open(T,"_blank")},[t]);return e?ie("div",{style:G.overlay,onClick:t,children:Re("div",{style:G.modal,onClick:m=>m.stopPropagation(),children:[Re("div",{style:G.header,children:[ie("h2",{style:G.title,children:s}),ie("button",{type:"button",onClick:t,style:G.closeBtn,"aria-label":"Close",children:Re("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[ie("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ie("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),ie("p",{style:G.desc,children:n}),ie("div",{style:G.walletList,children:h.map(m=>{let T=f[m.walletId],P=T===!1&&m.type==="extension"&&!!m.installUrl;return Re("div",{style:G.walletGroup,children:[Re("button",{type:"button",onClick:()=>I(m),style:{...G.walletItem,...m.walletId==="cross_wallet"?G.walletItemAccent:{}},"aria-label":`Connect with ${m.name}`,children:[m.iconUrl?ie("img",{src:m.iconUrl,alt:"",style:G.walletIcon}):ie("div",{style:G.walletIconPlaceholder}),Re("div",{style:G.walletInfo,children:[Re("div",{style:G.walletNameRow,children:[ie("span",{style:G.walletName,children:m.name}),T!==void 0&&ie("span",{style:{...G.badge,...T?G.badgeInstalled:G.badgeNotInstalled},children:T?"Installed":"Not Installed"})]}),ie("span",{style:G.walletDesc,children:P?"Extension not detected \u2014 click to install":m.type==="extension"?"Browser extension approval is required":m.walletId==="cross_wallet"?"App approval is required":m.walletId==="binance"?"Mobile app only \u2014 Add CROSS network first":T?"Connect with browser extension":"Scan QR code with app"})]})]}),m.guideUrl&&Re("button",{type:"button",onClick:C=>S(C,m.guideUrl),style:G.guideBtn,children:[ie("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),m.guideLabel??"Required Settings"]})]},m.walletId)})}),Re("div",{style:G.troubleshoot,children:[ie("h3",{style:G.troubleshootTitle,children:"Wallet not detected?"}),ie("ul",{style:G.troubleshootList,children:a.map(m=>Re("li",{style:G.troubleshootItem,children:[ie("span",{style:G.troubleshootDot,"aria-hidden":"true"}),ie("span",{children:m})]},m))})]})]})}):null}var H={surfaceBg:"var(--wi-surface-bg, #121212)",surfaceDefault:"var(--wi-surface-default, rgba(255,255,255,0.05))",surfaceSubtle:"var(--wi-surface-subtle, rgba(255,255,255,0.1))",borderDefault:"var(--wi-border-default, rgba(255,255,255,0.05))",textPrimary:"var(--wi-texticon-primary, #ffffff)",textSecondary:"var(--wi-texticon-secondary, rgba(255,255,255,0.7))",textTertiary:"var(--wi-texticon-tertiary, rgba(255,255,255,0.5))",primary:"var(--wi-primary, #019d92)",primarySoft:"var(--crossx-kit-primary-soft, rgba(1,157,146,0.15))",accentGradient:"var(--crossx-kit-accent-gradient, linear-gradient(113deg, rgba(255,255,255,0.05) 0%, rgba(1,157,146,0.12) 70%, rgba(255,255,255,0.05) 70%, rgba(1,157,146,0.12) 80%, rgba(255,255,255,0.05) 80%))",warningBg:"var(--crossx-kit-warning-bg, rgba(245,158,11,0.1))",warningBorder:"var(--crossx-kit-warning-border, rgba(245,158,11,0.25))",warningText:"var(--crossx-kit-warning-text, #fbbf24)"},G={overlay:{position:"fixed",inset:0,zIndex:1e4,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.6)",backdropFilter:"blur(4px)"},modal:{width:"100%",maxWidth:"420px",margin:"16px",background:H.surfaceBg,border:`1px solid ${H.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:H.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:H.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:H.textTertiary,margin:0,lineHeight:1.5},walletList:{display:"flex",flexDirection:"column",gap:"6px",padding:"0 12px 12px"},walletGroup:{display:"flex",flexDirection:"column",borderRadius:"12px",overflow:"hidden",background:H.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:H.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:H.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:H.surfaceSubtle,flexShrink:0},walletInfo:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"3px"},walletNameRow:{display:"flex",alignItems:"center",gap:"8px"},walletName:{fontSize:"15px",fontWeight:700,lineHeight:1.3,color:H.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:H.primarySoft,color:H.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:H.textTertiary},walletDesc:{fontSize:"11px",color:H.textSecondary,lineHeight:1.3},guideBtn:{display:"flex",alignItems:"center",justifyContent:"center",gap:"6px",margin:"0 14px 14px",padding:"10px 12px",borderRadius:"10px",border:`1px solid ${H.warningBorder}`,background:H.warningBg,color:H.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:H.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:H.textPrimary,margin:"0 0 8px"},troubleshootList:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"8px"},troubleshootItem:{display:"flex",alignItems:"flex-start",gap:"8px",fontSize:"11px",color:H.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:H.textSecondary}};import{useOnRamp as pi,useOnRampEligibility as fi,OnRampProvider as gi}from"@nexus-cross/onramp/react";import{WalletInfo as yi,ConnectorId as wi}from"@nexus-cross/dapp-ui";import{AppLauncher as Ci,AppLauncherTrigger as ki,AppLauncherContent as xi,useGlobalMenu as Ti}from"@nexus-cross/dapp-ui";import{SkillsButton as Si}from"@nexus-cross/dapp-ui";import{OnRampError as Pi}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as Ri,formatBalance as Bi,formatWei as _i}from"@nexus-cross/connect-kit-core";qt();export{Be as a,to as b,it as c,Tt as d,Bo as e,Bt as f,_t as g,Qr as h,ts as i,pi as j,fi as k,gi as l,yi as m,wi as n,Ci as o,ki as p,xi as q,Ti as r,Si as s,Pi as t,Ri as u,Bi as v,_i as w};