@nexus-cross/connect-kit-react 2.3.4-beta.1 → 2.4.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -2
- package/dist/chunk-FT6U2QDQ.js +144 -0
- package/dist/client.d.ts +4 -3
- package/dist/client.js +1 -1
- package/dist/index.d.ts +234 -7
- package/dist/index.js +1 -1
- package/package.json +10 -8
- package/dist/chunk-KY6Y4KXG.js +0 -144
package/README.md
CHANGED
|
@@ -67,6 +67,24 @@ section.
|
|
|
67
67
|
|
|
68
68
|
## Components
|
|
69
69
|
|
|
70
|
+
### `<CrossGetOneUsd>`
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
// Mount once in a persistent app/root layout, not inside a route page.
|
|
74
|
+
<CrossGetOneUsd env="production" theme="dark" />
|
|
75
|
+
<CrossGetOneUsd env="production" theme="dark" mode="button" />
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`floating` FAB 또는 레이아웃 안의 `button`에서 Swap, Bridge, Relay 입금을
|
|
79
|
+
선택하고 같은 화면에서 실행한다. 트랜잭션 상태는 두 모드 모두 우측 하단에
|
|
80
|
+
플로팅된다. `CrossConnectKitProvider` 아래에서 사용하면 원격 컨트랙트 페어,
|
|
81
|
+
CrossD transaction adapter, Relay wallet 함수가 자동으로 연결된다. Swap/Bridge
|
|
82
|
+
제출 뒤 FAB가 진행 상태로 전환되고, wagmi 영수증 확인이 끝날 때까지 중복 제출을
|
|
83
|
+
막은 뒤 완료 문구를 4초간 표시한다. 자세한 API는
|
|
84
|
+
[`docs/dapp-ui/get-one-usd.md`](../../docs/dapp-ui/get-one-usd.md)를 참고한다.
|
|
85
|
+
같은 SPA 안에서 페이지를 이동해도 플로팅 트랜잭션 상태를 유지하려면
|
|
86
|
+
`CrossGetOneUsd`를 라우터가 교체하지 않는 공통 App Layout에 한 번만 마운트한다.
|
|
87
|
+
|
|
70
88
|
### `<CrossConnectKitProvider>`
|
|
71
89
|
|
|
72
90
|
```tsx
|
|
@@ -226,6 +244,32 @@ For address, chain, balance, and signing use **wagmi's own hooks**
|
|
|
226
244
|
(`useAccount`, `useBalance`, `useSignMessage`, …). This package doesn't
|
|
227
245
|
reinvent them.
|
|
228
246
|
|
|
247
|
+
### `useOnePopSummary()`
|
|
248
|
+
|
|
249
|
+
Fetches the state shown on WalletInfo's **ONEpop** screen (pending claims,
|
|
250
|
+
recent activity) via `@nexus-cross/pop` and shapes it into dapp-ui's
|
|
251
|
+
`OnePopSummary`. dapp-ui can't do this itself — it may not depend on viem, and
|
|
252
|
+
one-pop-api's `/drops` / `/histories` require a cross-auth SIWE JWT.
|
|
253
|
+
|
|
254
|
+
Set `onePopEnabled: true` on the kit config and `<ConnectButton>` wires it for
|
|
255
|
+
you; call the hook directly only if you render the data elsewhere.
|
|
256
|
+
|
|
257
|
+
```ts
|
|
258
|
+
const { summary, isLoading, error, refetch } = useOnePopSummary({
|
|
259
|
+
enabled: userOpenedTheOnePopScreen, // gates the SIWE signature prompt
|
|
260
|
+
repliesWaitingCount: 0, // no backend contract yet — you supply it
|
|
261
|
+
});
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
SIWE pops a wallet dialog, so `enabled` must stay `false` until the user
|
|
265
|
+
actually opens the screen (`ConnectButton` flips it on `onOnePopOpen`). The
|
|
266
|
+
issued token is cached per address in memory for the session; a declined
|
|
267
|
+
signature is not retried. Use `clearOnePopJwtCache()` to drop it.
|
|
268
|
+
|
|
269
|
+
Executing drops (deposit / withdraw / refund) is **not** wrapped here — use
|
|
270
|
+
`@nexus-cross/pop` directly and pass the destinations to `WalletInfo` via
|
|
271
|
+
`onOnePopSend` / `onOnePopClaim` / `onOnePopActivity`.
|
|
272
|
+
|
|
229
273
|
## Re-exports
|
|
230
274
|
|
|
231
275
|
For convenience, `@nexus-cross/connect-kit-react` re-exports the types and the
|
|
@@ -305,8 +349,11 @@ createCrossxConfig({
|
|
|
305
349
|
## Allowed dependencies
|
|
306
350
|
|
|
307
351
|
This package may depend on: `@nexus-cross/connect-kit-core`,
|
|
308
|
-
`@nexus-cross/connect-kit-wagmi`,
|
|
309
|
-
|
|
352
|
+
`@nexus-cross/connect-kit-wagmi`, `@nexus-cross/dapp-ui`, and
|
|
353
|
+
`@nexus-cross/pop` — **`/api` subpath only** (read-only ONEpop wiring behind
|
|
354
|
+
`onePopEnabled`; `/api` is fetch-only, so this package stays viem-free —
|
|
355
|
+
`/adapters` would pull viem in). React, wagmi, and TanStack Query stay peer
|
|
356
|
+
dependencies of the consuming app.
|
|
310
357
|
|
|
311
358
|
It must not own low-level wallet transport logic. External SDK access belongs in
|
|
312
359
|
the wagmi layer; this package composes providers, React context, hooks, and
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
var gt="2.4.0-beta.2";var It="__nexusCrossAppLauncherRuntime";function Bo(){if(typeof window>"u")return null;let e=window;return e[It]??(e[It]={mode:"dapp-ui"}),e[It]}function No(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??gt;console.info(`[CROSSx App Launcher] connect-kit-react v${n} \uCD08\uAE30\uD654 \uC644\uB8CC (dapp-ui v${gt}, \uC0AC\uC6A9 \uBAA8\uB4DC: connect-kit)`)}else console.info(`[CROSSx App Launcher] dapp-ui v${gt} \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 un(){let e=Bo();e&&(e.mode="connect-kit-react",e.connectKitVersion=gt,No(e))}import{useCallback as Re,useEffect as oe,useMemo as Fe,useRef as fe,useState as Ye}from"react";import{WagmiProvider as Ko,useAccount as $o,useChainId as qo,useConnect as Ho,useDisconnect as Vo,useSwitchChain as jo}from"wagmi";import{QueryClient as Qo,QueryClientProvider as zo}from"@tanstack/react-query";import{clearWalletSessionStorage as bn,onOpenOtherWallets as Xo,pickInitialState as Yo,resolveCurrentWallet as Jo}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as Zo}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as er}from"@nexus-cross/crossx-design-system";import{OnRampProvider as tr}from"@nexus-cross/onramp/react";import{KycProvider as nr}from"@nexus-cross/kyc/react";import{createContext as Wo,useContext as Do}from"react";var Lt=Wo(null);function Ae(){let e=Do(Lt);if(!e)throw new Error("useCrossConnectKit must be used within <CrossConnectKitProvider>");return e}import{createContext as Fo,useContext as pn}from"react";var xt=Fo(null);function Lo(){let e=pn(xt);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function yt(){return pn(xt)}import{createContext as Uo}from"react";var Pt=Uo(null);function mn(){let e=new Set,t=n=>{for(let s of[...e])try{s(n)}catch(o){console.debug("[crossx-kit] analytics handler threw",o)}};return{track:t,emit:n=>t({...n,timestamp:Date.now()}),subscribe:n=>(e.add(n),()=>{e.delete(n)})}}import{useCallback as Mo,useMemo as fn}from"react";import{WalletConnectModal as gn}from"@nexus-cross/dapp-ui";import{jsx as yn}from"react/jsx-runtime";var Go=new Set(["cross_wallet","cross_extension","metamask","binance"]);function Ut({open:e,onOpenChange:t}){let{connect:n,availableWallets:s,oauth:o,extraWallets:c,walletAllowlist:f,kitConfig:y}=Ae(),r=yt()?.mode??"dark",m=fn(()=>{let p=f?new Set(f):null,k={};for(let T of s){if(!Go.has(T.walletId)||p&&!p.has(T.walletId))continue;let x=T.walletId;k[x]=()=>{n(T.walletId)}}for(let[T,x]of Object.entries(c))x&&(p&&!p.has(T)||(k[T]=x));return k},[s,n,c,f]),b=fn(()=>{if(o)return{apple:()=>{o.signIn("apple")},google:()=>{o.signIn("google")}}},[o]),C=Mo(p=>t(p),[t]);return yn(gn,{wallets:m,socialProviders:b,termsUrl:y.legal?.termsUrl,privacyUrl:y.legal?.privacyUrl,theme:r,open:e,onOpenChange:C,children:yn(gn.Content,{})})}import{jsx as Je,jsxs as Cn}from"react/jsx-runtime";var or=new Qo,Mt="crossx-kit:last-wallet-intent",rr=15e3,sr=1500,ir=3;function hn(e,t){return Promise.race([e.then(()=>{},()=>{}),new Promise(n=>setTimeout(n,t))])}function ar(e){let t=[],n=e,s=0;for(;n&&s<5;){let o=n;typeof o.message=="string"&&t.push(o.message),n=o.cause,s+=1}return t.some(o=>/external wallet connection/i.test(o))}function cr(){if(typeof window>"u")return null;try{return window.localStorage.getItem(Mt)??null}catch{return null}}function wn(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(Mt,e):window.localStorage.removeItem(Mt)}catch{}}function dr(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 lr(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function ur({children:e,config:t,activeProvider:n,onRequestProviderSwap:s,pendingConnectWalletId:o,clearPending:c,themeMode:f,themeTokens:y,extraWallets:u,walletAllowlist:r,emit:m}){let[b,C]=Ye(!1),[p,k]=Ye(()=>cr()),[T,x]=Ye(null),{address:P,isConnected:v,isConnecting:D,isReconnecting:A,connector:W}=$o(),{connectors:$,connectAsync:U}=Ho(),{disconnectAsync:z}=Vo(),{kitConfig:M,connectorRegistry:q,crossProvider:Ee,reownProvider:Te}=t,L=n==="cross"?Ee:Te,_=Fe(()=>!v||!W?null:Jo(q,W.id,p),[v,W,q,p]),V=Fe(()=>q.entries.filter(l=>l.type!=="embedded"),[q]),Y=Re(l=>q.getEntry(l)?.type??"external",[q]),_e=fe(null);_e.current=T;let ct=fe(_);ct.current=_;let ye=fe(P);ye.current=P;let ae=M.embeddedProjectId?.trim()||M.crossProjectId?.trim(),ce=!!M.onRampEnabled&&!!ae,Ge=Fe(()=>!ce||!ae?null:{projectId:ae,walletState:{getAddress:()=>ye.current}},[ce,ae]),be=fe(W);be.current=W;let Pe=M.embeddedProjectId?.trim()||M.crossProjectId?.trim(),Be=!!M.kycEnabled&&!!Pe,Ve=Fe(()=>!Be||!Pe?null:{projectId:Pe,getAccessToken:async()=>{let l=be.current;if(!(!l||typeof l.getProvider!="function"))try{return(await(await l.getProvider())?.sdk?.getUserInfo?.())?.data?.accessToken||void 0}catch{return}}},[Be,Pe]);oe(()=>Xo(()=>C(!0)),[]),oe(()=>{if(!b||typeof document>"u")return;let l=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(h=>h.remove())},50);return()=>clearTimeout(l)},[b]);let de=fe(v),dt=fe(v);de.current=v;let je=fe(!1);oe(()=>{console.debug("[crossx-kit] state",{activeProvider:n,isConnected:v,isConnecting:D,isReconnecting:A,activeConnectorId:W?.id,currentWallet:_,lastIntent:p})},[n,v,D,A,W?.id,_,p]),oe(()=>{v&&!dt.current&&L?.closeModal?.({kitConfig:M}),dt.current=v},[v,L,M]),oe(()=>{v&&x(null)},[v]);let Ne=qo(),{switchChainAsync:nt}=jo(),Qe=fe(null);oe(()=>{if(!M.enforceDefaultNetworkOnConnect)return;let l=M.defaultNetwork?.id;if(!l)return;if(!v||!P||!W){Qe.current=null;return}let h=`${W.id}:${P}`;Qe.current!==h&&(Qe.current=h,Ne!==l&&nt({chainId:l}).catch(()=>{}))},[M.enforceDefaultNetworkOnConnect,M.defaultNetwork,v,P,W,Ne,nt]);let ze=fe(b);oe(()=>{b&&!ze.current?m({name:"connect_modal_opened"}):!b&&ze.current&&m({name:"connect_modal_closed",completed:de.current}),ze.current=b},[b,m]);let We=fe(v);oe(()=>{if(v&&!We.current){let l=_e.current;l&&m({name:"connect_succeeded",walletId:l,walletType:Y(l),chainId:Ne})}We.current=v},[v,Ne,m,Y]);let i=Re(l=>$.find(h=>h.id===l),[$]);oe(()=>{let l=q.getEntry("cross_embedded");if(!l)return;let h=i(l.connectorId);if(!h)return;let I=!1;return(async()=>{try{let O=await h.getProvider();if(I)return;O?.sdk?.applyTheme?.(f,y??void 0)}catch(O){console.debug("[crossx-kit] applyTheme skipped:",O)}})(),()=>{I=!0}},[q,i,f,y]);let a=Re(l=>{k(l),wn(l)},[]),d=Re(()=>{k(null),wn(null),x(null)},[]);oe(()=>{if(!L?.subscribeModalState)return;let l=!1;return L.subscribeModalState({kitConfig:M},h=>{if(je.current=h,h){l=!0;return}l&&(l=!1,setTimeout(()=>{if(de.current)return;let I=_e.current;I&&m({name:"connect_cancelled",walletId:I,stage:"popup"}),(async()=>{try{await z()}catch{}d()})()},250))})},[L,M,z,d,m]),oe(()=>{if(!T||v||typeof window>"u"||T==="cross_embedded")return;let l=typeof document<"u"&&!document.hasFocus(),h=null,I=()=>{l=!0},O=()=>{l&&(h&&clearTimeout(h),h=setTimeout(()=>{if(de.current||je.current)return;let N=_e.current;N&&m({name:"connect_cancelled",walletId:N,stage:"popup"}),(async()=>{try{await z()}catch{}d()})()},1e3))};return window.addEventListener("blur",I),window.addEventListener("focus",O),()=>{window.removeEventListener("blur",I),window.removeEventListener("focus",O),h&&clearTimeout(h)}},[T,v,z,d,m]);let g=Re(async l=>{console.debug("[crossx-kit] runConnect enter",{walletId:l,activeProvider:n,isConnected:v,activeConnectorId:W?.id});let h=q.getEntry(l);if(!h){if((l==="metamask"||l==="binance")&&!Te){console.error(`[crossx-kit] "${l}" 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: "${l}"`);return}if(x(l),h.providerKind!==n){console.debug("[crossx-kit] provider swap needed",{from:n,to:h.providerKind,walletId:l}),a(l);try{await z()}catch{}await new Promise(N=>setTimeout(N,0)),s(h.providerKind,l);return}let I=Y(l);if(m({name:"wallet_selected",walletId:l,walletType:I}),m({name:"connect_started",walletId:l,walletType:I}),a(l),L?.beforeConnect)try{let N=await L.beforeConnect({kitConfig:M,themeMode:f},l);if(console.debug("[crossx-kit] beforeConnect result",{walletId:l,result:N}),N==="handled")return}catch(N){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',l,N)}let O=i(h.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:h.connectorId,found:O?.id,availableIds:$.map(N=>N.id)}),!O){console.error(`[crossx-kit] Connector "${h.connectorId}" not found on provider "${h.providerKind}". Available: ${$.map(N=>N.id).join(", ")}`),m({name:"connect_failed",walletId:l,reason:"connector_not_found"}),d();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:O.id});let N=await U({connector:O});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:N.accounts.length,chainId:N.chainId});return}catch(N){let ve=ar(N);if(!ve){console.error('[crossx-kit] connectAsync error for "%s":',l,N);try{await z()}catch{}}if(!h.fallbackConnectorId){ve||m({name:"connect_failed",walletId:l,reason:"connector_error"}),d();return}}if(h.fallbackConnectorId){let N=i(h.fallbackConnectorId);if(N)try{await U({connector:N})}catch(ve){console.error('[crossx-kit] Fallback connect failed for "%s":',l,ve);try{await z()}catch{}m({name:"connect_failed",walletId:l,reason:"fallback_failed"}),d()}else m({name:"connect_failed",walletId:l,reason:"fallback_failed"}),d()}},[q,$,i,U,z,a,d,L,n,M,s,f,m,Y]);oe(()=>{if(!o)return;let l=o;c(),g(l)},[o,n]);let w=Re(async()=>{C(!0)},[]),R=Re(async()=>{m({name:"disconnected",walletId:ct.current});try{await z()}catch(l){console.error("[crossx-kit] wagmi disconnect error:",l)}if(L?.teardown)try{await L.teardown({kitConfig:M})}catch(l){console.error("[crossx-kit] adapter teardown error:",l)}bn(),d()},[z,L,M,d,m]),F=Re(async()=>{await hn(z(),3e3);try{let l=q.getEntry("cross_embedded"),h=l&&i(l.connectorId);if(h?.getProvider){let I=await Promise.race([h.getProvider(),new Promise(N=>setTimeout(N,3e3))]),O=I?.sdk?.signOut;typeof O=="function"&&await hn(O.call(I.sdk),3e3)}}catch{}bn()},[q,i,z]),B=Re(async()=>{let l=q.getEntry("cross_embedded");if(!l)return null;let h=i(l.connectorId);if(!h)return null;try{let I=await h.getProvider(),O=I?.sdk;if(!O?.selectWallet)return null;let N=await O.selectWallet(O.currentAddress??void 0);return N?.address&&I.notifyAccountsChanged&&I.notifyAccountsChanged([N.address]),N&&m({name:"wallet_switched",index:N.index}),N}catch{return null}},[q,i,m]),G=Fe(()=>{let l=t.oauth;return l?{signIn:async h=>{x("cross_embedded"),m({name:"wallet_selected",walletId:"cross_embedded",walletType:"embedded"}),m({name:"connect_started",walletId:"cross_embedded",walletType:"embedded"});try{await l.signIn(h)}catch(I){throw m({name:"connect_cancelled",walletId:"cross_embedded",stage:"popup"}),x(null),I}}}:null},[t.oauth,m]),J=fe(!1);oe(()=>{if(n!=="cross"||v||D||A||T!=null||J.current)return;let l=q.getEntry("cross_embedded");if(!l)return;let h=i(l.connectorId);if(!h)return;J.current=!0;let I=!1;return(async()=>{try{let O=await h.isAuthorized?.();if(I||!O)return;await U({connector:h})}catch{}})(),()=>{I=!0}},[n,v,D,A,T,q,i,U]);let S=fe(0);oe(()=>{if(n!=="cross"||v||!D&&!A||S.current>=ir)return;let l=q.getEntry("cross_embedded");if(!l)return;let h=i(l.connectorId);if(!h)return;let I=!1,O=setInterval(()=>{(async()=>{if(I||de.current)return;let N=await Promise.resolve(h.isAuthorized?.()).catch(()=>!1);if(!(I||!N||de.current)){S.current+=1,console.warn("[crossx-kit] wagmi reconnect stalled while the SDK holds a session \u2014 forcing an explicit connect to realign");try{await U({connector:h})}catch{}}})()},sr);return()=>{I=!0,clearInterval(O)}},[n,v,D,A,q,i,U]),oe(()=>{if(T!=="cross_embedded"||v||typeof window>"u")return;let l=!document.hasFocus(),h=()=>{l=!0};window.addEventListener("blur",h);let I=setTimeout(()=>{de.current||l||(console.warn("[crossx-kit] embedded sign-in stalled before the OAuth popup opened \u2014 clearing the stale session so a retry starts clean"),m({name:"connect_cancelled",walletId:"cross_embedded",stage:"stalled"}),d(),F())},rr);return()=>{window.removeEventListener("blur",h),clearTimeout(I)}},[T,v,d,F,m]);let E=T!=null&&!v,j=Fe(()=>({kitConfig:M,connectorRegistry:q,availableWallets:V,connect:g,connectWallet:w,disconnect:R,selectWallet:B,currentWallet:_,lastIntent:p,isConnecting:E,connectingWalletId:T,openOtherWallets:()=>C(!0),closeOtherWallets:()=>C(!1),otherWalletsOpen:b,oauth:G,extraWallets:u,walletAllowlist:r,onRampEnabled:ce}),[M,q,V,g,w,R,B,_,p,E,T,b,G,u,r,ce]),H=Cn(Lt.Provider,{value:j,children:[e,Je(Ut,{open:b,onOpenChange:C})]});return Ve&&(H=Je(nr,{config:Ve,children:H})),Ge&&(H=Je(tr,{config:Ge,children:H})),H}var pr=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function mr(e){let t=e?.message;return typeof t!="string"?!1:pr.some(n=>n.test(t))}var fr={};function gr(e){return e&&{...e,connections:new Map,current:null}}function yr({children:e,config:t,initialState:n,extraWallets:s=fr,walletAllowlist:o}){let[c,f]=Ye(()=>dr(t.activeProviderStorageKey,t.defaultProvider)),[y,u]=Ye(null),r=fe(!1),m=fe(null);m.current||(m.current=mn());let b=m.current,C=Fe(()=>({subscribe:b.subscribe}),[b]),{kitConfig:p}=t,[k,T]=Ye(null),[x,P]=Ye(null),[v,D]=Ye(0),A=Fe(()=>Zo(p.theme,p.autoDetectTheme),[p.theme,p.autoDetectTheme,v]),W=k??A,$=x??p.themeTokens;oe(()=>{if(!p.autoDetectTheme||k||typeof window>"u"||!window.matchMedia)return;let _=window.matchMedia("(prefers-color-scheme: dark)"),V=()=>D(Y=>Y+1);try{return _.addEventListener("change",V),()=>_.removeEventListener("change",V)}catch{return _.addListener(V),()=>_.removeListener(V)}},[p.autoDetectTheme,k]),oe(()=>{if(typeof document>"u")return;let _=document.documentElement,V=_.getAttribute("data-ds-theme"),Y=_.getAttribute("data-theme");return _.setAttribute("data-ds-theme",W),Y||_.setAttribute("data-theme",W),()=>{V==null?_.removeAttribute("data-ds-theme"):_.setAttribute("data-ds-theme",V),Y==null&&_.removeAttribute("data-theme")}},[W]);let U=Fe(()=>er(t.designSystem),[t.designSystem]),z=Fe(()=>({mode:W,tokens:$,setThemeMode:_=>T(_),setThemeTokens:_=>P(_)}),[W,$]);oe(()=>{if(typeof window>"u")return;let _=V=>{mr(V.reason)&&V.preventDefault()};return window.addEventListener("unhandledrejection",_),()=>window.removeEventListener("unhandledrejection",_)},[]);let M=Re((_,V)=>{r.current||(r.current=!0,u(V),f(_),lr(t.activeProviderStorageKey,_),queueMicrotask(()=>{r.current=!1}))},[t.activeProviderStorageKey]),q=Re(()=>u(null),[]),Ee=c==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,Te=gr(Yo(n,c));if(!Ee){if(!(c==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let V=c==="cross"?"reown":"cross";queueMicrotask(()=>f(V))}let L=Ee??(c==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return Je(Pt.Provider,{value:C,children:Cn(xt.Provider,{value:z,children:[Je("style",{"data-crossx-design-system":"",children:U}),Je(Ko,{config:L,initialState:Te,children:Je(zo,{client:or,children:Je(ur,{config:t,activeProvider:c,onRequestProviderSwap:M,pendingConnectWalletId:y,clearPending:q,themeMode:W,themeTokens:$,extraWallets:s,walletAllowlist:o??t.kitConfig.wallets??null,emit:b.emit,children:e})})},c)]})})}import{useCallback as He,useEffect as Es,useMemo as Bt,useState as _s}from"react";import{useQueryClient as Bs}from"@tanstack/react-query";import{useAccount as Ns,useChainId as Ws,useConfig as Ds,useSendTransaction as Fs,useSwitchChain as Ls}from"wagmi";import{getPublicClient as zt,readContracts as Xn}from"wagmi/actions";import{WalletInfo as Xt,ConnectorId as tt,resolveEnvironment as Us,WALLET_REGISTRY as Ms}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as Gs,useOptionalOnRampEligibility as Ks}from"@nexus-cross/onramp/react";import{APPLE_ICON as en,BINANCE_ICON as Zn,CROSSX_ICON as Zt,EXTENSION_ICON as $s,GOOGLE_ICON as eo,METAMASK_ICON as to}from"@nexus-cross/connect-kit-wagmi";import{WALLET_LABELS as Tt}from"@nexus-cross/crossx-design-system";import{useCallback as re,useMemo as ke,useRef as br}from"react";import{useQueries as vn,useQuery as Ze}from"@tanstack/react-query";import{encodeFunctionData as bt,formatUnits as _t,parseSignature as hr,parseUnits as wr}from"viem";import{getChainId as Gt,getPublicClient as Fn,readContract as Oe,signTypedData as Cr,switchChain as In,waitForTransactionReceipt as kr,writeContract as xn}from"wagmi/actions";import{useConfig as Tr}from"wagmi";async function St(e,t,n){if(!(!n||t===void 0))try{if(e.getChainId()===t)return;await e.switchChain(t)}catch{}}var ut=10000n;function kn(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 At(e,t){let n=kn(t);return n>=ut?0n:e*(ut-n)/ut}function Tn(e,t){let n=kn(t);return(e*(ut+n)+(ut-1n))/ut}function vr(e){return e!=="bridge"}var qe="0x0000000000000000000000000000000000000000",xe=100,mt=18,Ir=180000n,xr=500000n,Ln=new Set([56,97]),Pr=130n,Sr=100n,Ar={dev:"https://stg-contents.crosstoken.io/frontend/game-token/json/hidden-path.json",stage:"https://stg-contents.crosstoken.io/frontend/game-token/json/hidden-path.json",production:"https://contents.crosstoken.io/frontend/game-token/json/hidden-path.json"},Rr={dev:"dev",stage:"stg",production:"prod"};function Or(e,t){let n=e?.[Rr[t]]?.hiddenPairs;if(!Array.isArray(n))return null;let s=n.filter(o=>!!o&&typeof o=="object"&&typeof o.fromKey=="string"&&typeof o.toKey=="string");return s.length>0?s:null}var Er={dev:"https://stg-contents.crosstoken.io/frontend/common/app-launcher/contracts.json",stage:"https://stg-contents.crosstoken.io/frontend/common/app-launcher/contracts.json",production:"https://contents.crosstoken.io/frontend/common/app-launcher/contracts.json"},_r=["BSC_CROSS","W_CROSS","NATIVE_CROSS","USDTX","CROSSD","USDTB","SWAP_BRIDGE_ROUTER"],Br={BSC_CROSS:qe,W_CROSS:qe,NATIVE_CROSS:qe,USDTX:qe,CROSSD:qe,USDTB:qe,SWAP_BRIDGE_ROUTER:qe},Nr=/^0x[0-9a-fA-F]{40}$/;function Wr(e,t){let n=typeof e=="string"?e:e?.[t];return typeof n=="string"&&Nr.test(n)?n:null}function Dr(e,t){if(!e?.bridge)return null;let n=e.envToNetwork?.[t]??(t==="production"?"mainnet":"testnet"),s={};for(let o of _r){let c=Wr(e.bridge[o],n);if(!c)return null;s[o]=c}return s}var Fr={dev:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97}},stage:{bridgeApi:"https://stg-bridge-api.crosstoken.io/bridge",walletApi:"https://stg-wallet-server.crosstoken.io/api",chainIds:{cross:612044,bsc:97}},production:{bridgeApi:"https://bridge-api.crosstoken.io/bridge",walletApi:"https://wallet-server.crosstoken.io/api",chainIds:{cross:612055,bsc:56}}},rt=[{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"}]}],Kt=[{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"}]}],Pn=[{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"}]}],Sn=[{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"}]}],Lr=[{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"}]}],Ke=[{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:[]}],Ur=[{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 Un(e){let t="";try{t=await e.text()}catch{}if(t){try{let n=JSON.parse(t),s=typeof n.data=="string"&&n.data||typeof n.message=="string"&&n.message||"";if(s)return`${s} (status ${e.status})`}catch{}return`${t.slice(0,300)} (status ${e.status})`}return`status ${e.status}`}async function Le(e,t){let n=await fetch(e,{cache:"no-store",signal:t});if(!n.ok)throw new Error(`CrossD bridge adapter request failed: ${await Un(n)}`);let s=await n.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 An(e,t,n){let s=await fetch(e,{method:"POST",cache:"no-store",signal:n,headers:{"content-type":"application/json"},body:JSON.stringify(t)});if(!s.ok)throw new Error(`CrossD bridge adapter request failed: ${await Un(s)}`);let o=await s.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 Mr(e){return new Promise(t=>setTimeout(t,e))}async function Gr(e,t,{attempts:n=60,intervalMs:s=2e3}={}){for(let o=0;o<n;o+=1){try{let c=await Le(`${e}/permit-hash/${t}`);if(Ht(c))return c}catch{}await Mr(s)}return null}function ie(e,t){return`${e}-${t.toLowerCase()}`}function pe(e){return ie(e.chainId,e.address)}function Ue(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function Kr(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 Rn(e){return e===56||e===97?"BSC":e===612044||e===612055?"ONEchain":`Chain ${e}`}function se(e,t){return t?t.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()?e.contracts.W_CROSS:t:qe}function st(e){let t=_t(e,mt);return t.includes(".")?t.replace(/\.?0+$/,""):t}function wt(e){return wr(e||"0",mt)}function ge(e){try{return wt(e||"0")}catch{return 0n}}function et(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 $t(e){let t=_t(e,9);return(t.includes(".")?t.replace(/\.?0+$/,""):t)||"0"}function Rt(e){return e==="bridge"?Ir:xr}function On(e,t){if(!e||!t)return"0";let n=e*e;if(n===0n)return"0";let s=t*t,o=s>n?s-n:n-s;if(o===0n)return"0";let c=(o*100000000n+n/2n)/n;if(c>=100000000n)return"100";let f=c/1000000n,y=(c%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return y?`${f}.${y}`:`${f}`}function $r(e){if(!e||Number(e)===0)return"0%";let[t,n=""]=e.split("."),s=n.length>4?n.slice(0,4):n;return s?`${t}.${s}%`:`${t}%`}async function En(e,t,n,s,o,c=!1){let f=Fn(e,{chainId:t}),y=n;try{let r=await f?.estimateContractGas?.({account:o.account,address:o.address,abi:o.abi,functionName:o.functionName,args:o.args,value:o.value});typeof r=="bigint"&&r>0n&&(y=s?r*Pr/Sr:r)}catch{}let u={gas:y};if(Ln.has(t))try{let r=await f?.getGasPrice?.();typeof r=="bigint"&&r>0n&&(u.gasPrice=r)}catch{}else if(c)try{let r=await f?.estimateFeesPerGas?.();typeof r?.maxFeePerGas=="bigint"&&(u.maxFeePerGas=r.maxFeePerGas),typeof r?.maxPriorityFeePerGas=="bigint"&&(u.maxPriorityFeePerGas=r.maxPriorityFeePerGas)}catch{}return u}function ht(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var qr={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function Hr(e){return qr[e]??`${e/1e4}%`}function Vr(e,t){let n=Number(e||"0");return!Number.isFinite(n)||n<=0?"0":(n*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function _n(e){return st(e)}function Bn(e,t){let n=Number(t??"0");return!Number.isFinite(n)||n<=0?0n:e*BigInt(Math.floor(n))/1000n}function Ot(e,t){if(!e)return!1;let n=e.toLowerCase();return t.some(s=>s.toLowerCase()===n)}function jr(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=>Ot(t,o.from)&&Ot(n,o.to)||Ot(t,o.to)&&Ot(n,o.from))}function Qr(e){if(Ue(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 zr({input:e,path:t,config:n}){if(!n||Ue(t.type))return"";let s=et(n.minimumValue),o=et(n.gasFee??n.gas_fee),c=t.type==="swap-bridge"?s+o*12n/10n:s;return c<=0n?"":e.fromAmount&&ge(e.fromAmount)<c&&t.type!=="swap"?`Minimum ${_n(c)}`:t.type==="swap-bridge"&&e.toAmount&&ge(e.toAmount)<c?`Available ${_n(c)} or more.`:""}function Xr({input:e,path:t,config:n}){if(!n||t.type!=="bridge"&&t.type!=="bridge-swap")return"";let s=et(n.gasFee??n.gas_fee);if(s<=0n||!e.fromAmount)return"";let o=ge(e.fromToken.balance||"0"),c=ge(e.fromAmount);return o-s<c?`Insufficient network fee(${e.fromToken.symbol})`:""}function Yr(e,t){let n=new Set;return e?.list?.forEach(s=>{let o=s.localChain??s.local_chain;o&&Object.entries(s.pairs||{}).forEach(([c,f])=>{f.forEach(y=>{y.localToken&&n.add(ie(o,y.localToken)),y.remoteToken&&n.add(ie(Number(c),y.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([s,o])=>{o.forEach(c=>{c.token0&&n.add(ie(Number(s),c.token0)),c.token1&&n.add(ie(Number(s),c.token1))})}),n}function Jr(e,t){return!e||!t?null:ie(e,t)}function Zr({envConfig:e,bridgePairList:t,swapPools:n,tokenInfo:s,tokenStats:o}){let c=Yr(t,n),f=new Map;o?.forEach(u=>{let r=Jr(Number(u.chainId??u.chain_id),u.address);r&&f.set(r,u)});let y={};return c.forEach(u=>{let[r,m]=u.split("-"),b=Number(r),C=s?.find(k=>Number(k.chainId??k.chain_id)===b&&k.address?.toLowerCase()===m);if(!C?.symbol||!C.name)return;let p=f.get(u);y[u]={key:u,chainId:b,address:m,symbol:C.symbol,name:C.name,decimals:C.decimals||mt,image:C.image||C.icon_url,price:p?.price?Number(p.price):void 0,isNativeToken:m.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),y}function Mn(e,t){return t?.list?.find(n=>(n.localChain??n.local_chain)===e)?.bridge||""}function Gn(e,t,n){let[s,o]=e.split("-"),[c,f]=t.split("-"),y=Number(s),u=Number(c);for(let r of n?.list||[]){if((r.localChain??r.local_chain)!==y)continue;let m=r.pairs?.[c];if(m){for(let b of m)if(b.localToken?.toLowerCase()===o&&b.remoteToken?.toLowerCase()===f)return{type:"bridge",fromChain:y,fromToken:o,toChain:u,toToken:f,bridgeAddress:Mn(y,n)}}}return null}function Kn(e,t,n,s){let o,c=1/0;for(let f of e||[]){let y=s(f.token0),u=s(f.token1);if(y===t&&u===n||u===t&&y===n){let r=f.fee??xe;r<c&&(o=f,c=r)}}return o?{fee:c,poolAddress:o.poolAddress||o.pool_address||""}:null}function $n(e,t,n,s){let[o,c]=e.split("-"),[f,y]=t.split("-");if(o!==f)return null;let u=Number(o),r=(n?.swapPools||n?.swap_pools)?.[o];if(!r)return null;let m=s.contracts.W_CROSS.toLowerCase(),b=s.contracts.NATIVE_CROSS.toLowerCase(),p=Kn(r,c,y,T=>T?.toLowerCase()===m?b:T?.toLowerCase());if(!p)return null;let k="swap";return u===s.chainIds.cross&&(c===b&&(k="deposit-swap"),y===b&&(k="swap-withdraw")),{pathType:k,step:{type:"swap",chain:u,fromToken:c,toToken:y,fee:p.fee,poolAddress:p.poolAddress}}}function es(e,t,n,s){let[o,c]=e.split("-"),[f]=t.split("-");if(o===f)return null;let y=(n?.swapPools||n?.swap_pools)?.[o]||[],u=r=>r?.toLowerCase();for(let r of y){let m=u(r.token0),b=u(r.token1),C=m===c?b:b===c?m:null;if(!C)continue;let p=Gn(ie(Number(o),C),t,s);if(!p)continue;let k=Kn(y,c,C,u);return[{type:"swap",chain:Number(o),fromToken:c,toToken:C,fee:k?.fee??xe,poolAddress:k?.poolAddress??""},p]}return null}function ts(e,t,n,s,o){let[c,f]=e.split("-"),[y]=t.split("-");if(c===y)return null;for(let u of n?.list||[])if((u.localChain??u.local_chain)===Number(c))for(let r of u.pairs?.[y]||[]){if(r.localToken?.toLowerCase()!==f)continue;let m=r.remoteToken?.toLowerCase();if(!m)continue;let b=$n(ie(Number(y),m),t,s,o);if(b)return[{type:"bridge",fromChain:Number(c),fromToken:f,toChain:Number(y),toToken:m,bridgeAddress:Mn(Number(c),n)},b.step]}return null}function ns({envConfig:e,bridgePairList:t,swapPools:n,enrichedTokens:s}){return(o,c)=>{let f=s[o],y=s[c];if(!f||!y||o===c)return null;let u=Gn(o,c,t);if(u)return{type:"bridge",steps:[u],from:f,to:y};let r=$n(o,c,n,e);if(r)return{type:r.pathType,steps:[r.step],from:f,to:y};let m=es(o,c,n,t);if(m)return{type:"swap-bridge",steps:m,from:f,to:y};let b=ts(o,c,t,n,e);return b?{type:"bridge-swap",steps:b,from:f,to:y}:null}}function Nn(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 os(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function rs(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function ss(e,t){let n=e.startsWith("-"),s=n?e.slice(1):e,[o,c=""]=s.split("."),f=c.slice(0,t).replace(/0+$/,""),y=f?`${o}.${f}`:o;return n?`-${y}`:y}function is(e){let t=e.startsWith("-"),n=t?e.slice(1):e,[s,o]=n.split("."),c=s.replace(/\B(?=(\d{3})+(?!\d))/g,","),f=o?`${c}.${o}`:c;return t?`-${f}`:f}function qt(e){if(e==null||e==="")return"0";let t=String(e),n=Number(t);return!Number.isFinite(n)||n===0?"0":is(ss(t,4))}function Wn(e,t){if(e==null||e==="")return"0";try{return rs(_t(BigInt(String(e)),t.decimals))}catch{return"0"}}function Ht(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function as(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function cs(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function ds(e,t){let n=os(t);return{name:n,symbol:n,chainId:e,address:t,decimals:mt,balance:"0"}}function Dn({envConfig:e,tokenByBridgeKey:t,chainId:n,address:s}){if(!s)return null;let o=cs(e,s);return t.get(ie(n,o))||t.get(ie(n,s))||ds(n,o)}function Et(e){return e?.toLowerCase()||""}function ls(e){if(e.source==="swap")return"swap";let t=Et(e.fromToken??e.from_token),n=Et(e.toToken??e.to_token),s=Et(e.swapTokenIn??e.swap_token_in),o=Et(e.swapTokenOut??e.swap_token_out);return n&&s&&n===s?"bridge-swap":t&&o&&t===o?"swap-bridge":"bridge"}function us(e,t){let n=e.status??0,s=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&n===1&&!s?"failed":n===1?"success":"pending"}function ps({envConfig:e,item:t,tokenByBridgeKey:n}){let s=Number(t.fromChainID??t.from_chain_id??0),o=Number(t.toChainID??t.to_chain_id??0);if(!s||!o)return null;let c=ls(t),f=t.swapTokenIn??t.swap_token_in,y=t.swapTokenOut??t.swap_token_out,u=t.swapAmountIn??t.swap_amount_in,r=t.swapAmountOut??t.swap_amount_out,m=t.fromToken??t.from_token,b=t.toToken??t.to_token,C=t.value,p=t.value;c==="swap"?(m=f,b=y,C=u,p=r):c==="swap-bridge"?(m=f,C=u,p=t.value):c==="bridge-swap"&&(b=y,C=u,p=r);let k=Dn({envConfig:e,tokenByBridgeKey:n,chainId:s,address:m}),T=Dn({envConfig:e,tokenByBridgeKey:n,chainId:o,address:b}),x=t.initiatedTxHash??t.initiated_tx_hash;return!k||!T||!Ht(x)?null:{id:`${x}-${t.index??""}`,timestamp:as(t.initiatedTime??t.initiated_time),txHash:x,fromToken:k,toToken:T,fromAmount:Wn(C,k),toAmount:Wn(p,T),summary:{pathType:c},status:us(t,c)}}function ms(e){let t=new Map;return e.flat().forEach(n=>{let s=Number(n.chainId??n.chain_id),o=n.address?.toLowerCase();if(!s||!o)return;let c=n.quantity?.numeric??n.balance??"0",f=n.quantity?.decimals??n.decimals??mt;try{t.set(ie(s,o),_t(BigInt(c||"0"),f))}catch{t.set(ie(s,o),"0")}}),t}function $e(e,t="first"){let n=e.steps.filter(s=>s.type==="swap");return t==="last"?n[n.length-1]:n[0]}function fs(e,t){let n=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!n?.length)return"";let s=t.contracts.CROSSD.toLowerCase(),o=t.contracts.USDTX.toLowerCase(),c=n.find(f=>{let y=f.token0?.toLowerCase(),u=f.token1?.toLowerCase();return y===s&&u===o||y===o&&u===s});return c?.poolAddress||c?.pool_address||""}function gs(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 ys(e){if(e===void 0)return;let t=10n**BigInt(mt),n=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",s=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:n,percentage:Math.min(s,100)}}function pt(e,t,n,s){let o=[e.from,e.to].find(c=>c.chainId===t&&c.address.toLowerCase()===n.toLowerCase())??s?.[ie(t,n)];return{symbol:o?.symbol||n.slice(0,6),iconUrl:o?.image}}function bs(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 s=n.filter((o,c)=>c===0||!(o.chain===n[c-1].chain&&o.address.toLowerCase()===n[c-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(o=>pt(e,o.chain,o.address,t))}function hs({input:e,path:t,amountData:n,gasInfo:s,liquidity:o,enrichedTokens:c,priceImpact:f}){let y=e.fromAmount||"0",u=e.toAmount||"0",r=$e(t),m=t.steps.find(D=>D.type==="bridge"),b=t.type!=="bridge",C=!Ue(t.type),p=r?Vr(y,r.fee):"0",k=Number(y)>0||Number(u)>0,T=r?pt(t,r.chain,r.fromToken,c):{symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},x=r?pt(t,r.chain,r.toToken,c):{symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},P=m?pt(t,m.fromChain,m.fromToken,c):void 0,v=(D,A,W)=>k?A&&A>0n?{label:D,value:st(A),tone:"default",valueToken:W}:{label:D,value:"Free",tone:"accent"}:{label:D,value:"0"};return{pathType:t.type,priceImpact:f,liquidity:o,bridgeInfo:C&&m?[{label:"Route",value:`${Rn(m.fromChain)} \u2192 ${Rn(m.toChain)}`},v("Validator Fee",n?.exFee,P),v("Network Fee",n?.networkFee,P)]:void 0,swapInfo:b&&r?[{label:"Route",value:"",routeTokens:[pt(t,r.chain,r.fromToken,c),pt(t,r.chain,r.toToken,c)]},{label:"Price Impact",value:$r(f)},{label:"In Amount",value:qt(y),valueToken:T},{label:r&&Ue(t.type)?`Swap Fee (${Hr(r.fee??xe)})`:"Swap Fee",value:qt(p),valueToken:T},{label:"Out Amount",value:qt(u),valueToken:x}]: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 Ct({env:e,walletAddress:t,enabled:n=!0,restoreChainAfterSwitch:s=!0}){let o=Tr(),c=br(new Map),y=Ze({queryKey:["crossd-bridge-adapter",e,"remote-contracts"],queryFn:async({signal:i})=>{let a=Dr(await Le(Er[e],i),e);if(!a)throw new Error("CrossD bridge adapter: invalid contracts.json");return a},enabled:n,staleTime:5*6e4}).data??null,u=n&&!!y,r=ke(()=>({...Fr[e],contracts:y??Br}),[e,y]),m=Ze({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:i})=>Le(`${r.bridgeApi}/pairs`,i),enabled:u,staleTime:3e4}),b=Ze({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:i})=>Le(`${r.bridgeApi}/swap-pools`,i),enabled:u,staleTime:3e4}),C=ke(()=>fs(b.data,r),[r,b.data]),p=Ze({queryKey:["crossd-bridge-adapter",e,"available-liquidity",C],queryFn:async()=>await Oe(o,{address:r.contracts.USDTX,abi:Kt,functionName:"balanceOf",args:[C],chainId:r.chainIds.cross}),enabled:u&&!!C,staleTime:3e4}),k=Ze({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:i})=>Le(`${r.walletApi}/v1/public/token/info`,i),enabled:u,staleTime:3e4}),T=Ze({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:i})=>Le(`${r.walletApi}/v1/public/token/stats`,i),enabled:u,staleTime:3e4}),x=vn({queries:[r.chainIds.cross,r.chainIds.bsc].map(i=>({queryKey:["crossd-bridge-adapter",e,"balance",t,i],queryFn:({signal:a})=>{let d=new URLSearchParams({networkId:`eip155:${i}`,account:t||""});return Le(`${r.walletApi}/v1/public/token/balance?${d}`,a)},enabled:u&&!!t,staleTime:0,refetchInterval:u&&t?5e3:!1}))}),P=vn({queries:[r.chainIds.cross,r.chainIds.bsc].map(i=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",i],queryFn:async({signal:a})=>{try{let w=await Fn(o,{chainId:i})?.estimateFeesPerGas?.();if(w?.maxFeePerGas||w?.gasPrice)return{fast:{maxFee:w.maxFeePerGas?.toString()||w.gasPrice?.toString(),maxPriorityFee:w.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let d=new URLSearchParams({chain_id:String(i),without_gas_limit:"false"});return Le(`${r.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${d}`,a)},enabled:u,staleTime:1e4,retry:1}))}),v=Ze({queryKey:["crossd-bridge-adapter",e,"hidden-pairs"],queryFn:async({signal:i})=>Or(await Le(Ar[e],i),e),enabled:u,staleTime:5*6e4,retry:1}),D=ke(()=>v.data??[],[v.data]),A=ke(()=>Zr({envConfig:r,bridgePairList:m.data,swapPools:b.data,tokenInfo:k.data,tokenStats:T.data}),[m.data,r,b.data,k.data,T.data]),W=ke(()=>ns({envConfig:r,bridgePairList:m.data,swapPools:b.data,enrichedTokens:A}),[m.data,A,r,b.data]),$=ke(()=>ms(x.map(i=>i.data).filter(i=>Array.isArray(i))),[x]),U=ke(()=>{let i=new Map;return Object.values(A).forEach(a=>{let d=Nn(a,$);i.set(a.key,d)}),i},[$,A]),z=ke(()=>{let i=new Map,a=U.get(ie(r.chainIds.cross,r.contracts.NATIVE_CROSS));a&&i.set(r.chainIds.cross,{symbol:a.symbol,iconUrl:a.iconUrl});let d=k.data?.find(g=>Number(g.chainId??g.chain_id)===r.chainIds.bsc&&(g.symbol??"").toUpperCase()==="BNB");return d&&i.set(r.chainIds.bsc,{symbol:d.symbol??"BNB",iconUrl:d.image??d.icon_url}),i},[r,U,k.data]),M=Ze({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:i})=>An(`${r.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},i),enabled:u&&!!t,staleTime:0,refetchInterval:u&&t?5e3:!1}),q=ke(()=>(M.data?.histories||[]).map(i=>ps({envConfig:r,item:i,tokenByBridgeKey:U})).filter(i=>!!i),[M.data?.histories,r,U]),Ee=ke(()=>ys(p.data),[p.data]),Te=P[0]?.data,L=P[1]?.data,_=ke(()=>{let i=new Map;return Te&&i.set(r.chainIds.cross,Te),L&&i.set(r.chainIds.bsc,L),i},[L,Te,r.chainIds.bsc,r.chainIds.cross]),V=re((i,a,d)=>{let g=_.get(i.from.chainId)?.fast,w=a?d?.gasLimit??Rt(i.type):0n,R=d?.gasPrice&&d.gasPrice>0n?d.gasPrice:0n,F=d?.maxFeePerGas&&d.maxFeePerGas>0n?d.maxFeePerGas:0n,B=d?.maxPriorityFeePerGas&&d.maxPriorityFeePerGas>0n?d.maxPriorityFeePerGas:0n,G=et(g?.maxFee??g?.max_fee),J=et(g?.maxPriorityFee??g?.max_priority_fee),S=F>0n?F:G>0n?G:R,E=B>0n?B:J>0n?J:S,j=R>0n?R:S,X=Ln.has(i.from.chainId)&&j>0n,l=w*(X?j:S),h=U.get(ie(i.from.chainId,r.contracts.NATIVE_CROSS)),I=i.type!=="swap-bridge",O=z.get(i.from.chainId);return{estTxFee:a?st(l):"0",priorityFeePerGas:a&&!X?$t(E):"0",maxFeePerGas:a&&!X?$t(S):"0",gasLimit:a?w.toString():"0",gasPrice:a&&X?$t(j):void 0,isDelegateFee:i.type==="swap-bridge"?!1:jr(r,i.from.address,i.to.address),tokenIconUrl:I?h?.iconUrl:void 0,tokenSymbol:I?h?.symbol:void 0,gasCurrencyIconUrl:O?.iconUrl,gasCurrencySymbol:O?.symbol}},[r,_,z,U]),Y=re(async i=>{let a=Qr(i);if(!a)return null;let d=`${e}:${a.from}:${a.to}:${a.token.toLowerCase()}`,g=c.current.get(d);if(g)return g;let w=(async()=>{let R=new URLSearchParams({from:String(a.from),to:String(a.to),token:a.token});try{return(await Le(`${r.bridgeApi}/token-config?${R}`)).config??null}catch{return null}})();return c.current.set(d,w),w},[e,r.bridgeApi]),_e=ke(()=>{let i=Object.values(A).map(d=>Nn(d,$)),a=ie(r.chainIds.cross,r.contracts.CROSSD);return i.sort((d,g)=>{let w=pe(d).toLowerCase()===a.toLowerCase(),R=pe(g).toLowerCase()===a.toLowerCase();return w!==R?w?-1:1:pe(d).localeCompare(pe(g))})},[$,A,r]),ct=ke(()=>{if(y)return{target:{chainId:r.chainIds.cross,address:r.contracts.CROSSD},swap:{from:{chainId:r.chainIds.cross,address:r.contracts.NATIVE_CROSS},feeDelegated:!0},bridge:{from:[{chainId:r.chainIds.bsc,address:r.contracts.USDTB},{chainId:r.chainIds.cross,address:r.contracts.USDTX}]}}},[r,y]),ye=re(i=>{let a=pe(i),d=a.toLowerCase(),g=[];Object.keys(A).forEach(F=>{let B=F.toLowerCase();if(d===B||D.some(S=>S.fromKey===d&&S.toKey===B))return;let G=W(a,F);if(!G)return;let J=U.get(F);J&&g.push({token:J,path:G})});let w=ie(r.chainIds.cross,r.contracts.CROSSD),R=ie(r.chainIds.cross,r.contracts.NATIVE_CROSS);return g.sort((F,B)=>{if(d===w.toLowerCase()){let j=pe(F.token).toLowerCase()===R.toLowerCase(),X=pe(B.token).toLowerCase()===R.toLowerCase();if(j!==X)return j?-1:1}let G=Ue(F.path.type),J=Ue(B.path.type);if(G!==J)return G?-1:1;let S=F.token.chainId===i.chainId,E=B.token.chainId===i.chainId;return S!==E?S?-1:1:pe(F.token).localeCompare(pe(B.token))}),g.map(F=>F.token)},[A,r,W,D,U]),ae=re(async i=>await Oe(o,{address:r.contracts.SWAP_BRIDGE_ROUTER,abi:rt,functionName:"quoter",chainId:i}),[r.contracts.SWAP_BRIDGE_ROUTER,o]),ce=re(async i=>{Gt(o)!==i&&await In(o,{chainId:i})},[o]),Ge=re(i=>St({getChainId:()=>Gt(o),switchChain:a=>In(o,{chainId:a})},i,s),[s,o]),be=re(async i=>await Oe(o,{address:r.contracts.SWAP_BRIDGE_ROUTER,abi:rt,functionName:"swapRouter",chainId:i}),[r.contracts.SWAP_BRIDGE_ROUTER,o]),Pe=re(async({path:i,step:a,amount:d,source:g})=>{let w=await ae(a.chain),R=a.poolAddress?Oe(o,{address:a.poolAddress,abi:Lr,functionName:"slot0",chainId:a.chain}).then(G=>G?.[0]).catch(()=>{}):Promise.resolve(void 0);if(g==="from"){let G=await Oe(o,{address:w,abi:Sn,functionName:"quoteExactInputSingle",args:[{tokenIn:se(r,a.fromToken),tokenOut:se(r,a.toToken),amountIn:wt(d),fee:a.fee??xe,sqrtPriceLimitX96:0n}],chainId:a.chain}),J=On(await R,G[1]);return{amount:st(G[0]),path:i,priceImpact:J}}let F=await Oe(o,{address:w,abi:Sn,functionName:"quoteExactOutputSingle",args:[{tokenIn:se(r,a.fromToken),tokenOut:se(r,a.toToken),amount:wt(d),fee:a.fee??xe,sqrtPriceLimitX96:0n}],chainId:a.chain}),B=On(await R,F[1]);return{amount:st(F[0]),path:i,priceImpact:B}},[r,ae,o]),Be=re(async(i,a)=>{if(!t)throw new Error("Wallet is not connected.");let d=Rt(a.type);if(Ue(a.type)){let S=$e(a,"first");if(!S)throw new Error("Swap route is not available.");let E=ge(i.fromAmount),j=ge(i.toAmount);if(E<=0n)throw new Error("Bridge amount is empty.");if(j<=0n)throw new Error("Bridge quote is not ready.");let X=await be(S.chain),H=At(j,i.slippage),l=a.type==="swap-withdraw"?qe:t,h={tokenIn:se(r,S.fromToken),tokenOut:se(r,S.toToken),fee:S.fee??xe,recipient:l,deadline:ht(),amountIn:E,amountOutMinimum:H,sqrtPriceLimitX96:0n};if(a.type==="swap-withdraw"){let I=bt({abi:Ke,functionName:"exactInputSingle",args:[h]}),O=bt({abi:Ke,functionName:"unwrapWETH9",args:[H,t]});return{address:X,abi:Ke,functionName:"multicall",args:[[I,O]],chainId:S.chain,fallbackGasLimit:d}}if(a.type==="deposit-swap"){let I=bt({abi:Ke,functionName:"exactInputSingle",args:[h]}),O=bt({abi:Ke,functionName:"refundETH",args:[]});return{address:X,abi:Ke,functionName:"multicall",args:[[I,O]],value:E,chainId:S.chain,fallbackGasLimit:d}}return{address:X,abi:Ke,functionName:"exactInputSingle",args:[h],chainId:S.chain,fallbackGasLimit:d}}if(a.type==="swap-bridge"){let S=$e(a,"first");if(!S)throw new Error("Swap bridge route is not available.");let E=ge(i.fromAmount),j=ge(i.toAmount);if(E<=0n)throw new Error("Bridge amount is empty.");if(j<=0n)throw new Error("Bridge quote is not ready.");let X=r.contracts.SWAP_BRIDGE_ROUTER,H=ht(),l={toChainID:BigInt(a.to.chainId),recipient:t,extraData:"0x"},h={tokenIn:se(r,a.from.address),tokenOut:se(r,S.toToken),fee:S.fee??xe,sqrtPriceLimitX96:0n,bridgeParams:l};if(i.lastChangedBy==="to"){let O={...h,amountOut:j,amountInMaximum:Tn(E,i.slippage)};return{address:X,abi:rt,functionName:"swapBridgeExactOutputSingle",args:[O,H],value:a.from.isNativeToken?O.amountInMaximum:void 0,chainId:a.from.chainId,fallbackGasLimit:d}}let I={...h,amountIn:E,amountOutMinimum:At(j,i.slippage)};return{address:X,abi:rt,functionName:"swapBridgeExactInputSingle",args:[I,H],value:a.from.isNativeToken?E:void 0,chainId:a.from.chainId,fallbackGasLimit:d}}let g=a.steps.find(S=>S.type==="bridge");if(!g?.bridgeAddress)throw new Error("Bridge route is not available.");let w=ge(i.fromAmount);if(w<=0n)throw new Error("Bridge amount is empty.");let R=await Y(a),F=et(R?.gasFee??R?.gas_fee),B=Bn(w,R?.exFeeRate??R?.ex_fee_rate),G="0x";if(a.type==="bridge-swap"){let S=$e(a,"last");if(!S)throw new Error("Bridge swap route is not available.");let E=ge(i.toAmount);if(E<=0n)throw new Error("Bridge quote is not ready.");let j=await be(a.to.chainId),X=At(E,i.slippage),H=bt({abi:Ke,functionName:"exactInputSingle",args:[{tokenIn:se(r,S.fromToken),tokenOut:se(r,S.toToken),fee:S.fee??xe,recipient:t,deadline:ht(),amountIn:w,amountOutMinimum:X,sqrtPriceLimitX96:0n}]});G=`${j}${H.slice(2)}`}let J=[BigInt(a.to.chainId),a.from.address,t,w,F,B,G];return{address:g.bridgeAddress,abi:Ur,functionName:"bridgeToken",args:J,value:a.from.isNativeToken?w+B+F:void 0,chainId:a.from.chainId,fallbackGasLimit:d}},[r,Y,be,t]),Ve=re(async(i,a)=>{if(a.type==="bridge"||a.type==="bridge-swap")return Be(i,a);if(!t)throw new Error("Wallet is not connected.");let d=ge(i.fromAmount);if(d<=0n)throw new Error("Bridge amount is empty.");if(a.type==="swap-bridge"){let F=$e(a,"first");if(!F)throw new Error("Swap bridge route is not available.");let B=r.contracts.SWAP_BRIDGE_ROUTER,G={tokenIn:se(r,a.from.address),tokenOut:se(r,F.toToken),fee:F.fee??xe,sqrtPriceLimitX96:0n,bridgeParams:{toChainID:BigInt(a.to.chainId),recipient:t,extraData:"0x"},amountIn:d,amountOutMinimum:0n};return{address:B,abi:rt,functionName:"swapBridgeExactInputSingle",args:[G,ht()],value:a.from.isNativeToken?d:void 0,chainId:a.from.chainId,fallbackGasLimit:Rt(a.type)}}let g=$e(a,"first");if(!g)throw new Error("Swap route is not available.");let w=await be(g.chain),R={tokenIn:se(r,g.fromToken),tokenOut:se(r,g.toToken),fee:g.fee??xe,recipient:t,deadline:ht(),amountIn:d,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:w,abi:Ke,functionName:"exactInputSingle",args:[R],value:a.from.isNativeToken?d:void 0,chainId:g.chain,fallbackGasLimit:Rt(a.type)}},[Be,r,be,t]),de=re(async(i,a)=>{if(!t)return null;try{let d=await Ve(i,a),g=Ue(a.type)||a.type==="swap-bridge",w=await En(o,d.chainId,d.fallbackGasLimit,g,{account:t,address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value},!0);return{gasLimit:w.gas,gasPrice:w.gasPrice,maxFeePerGas:w.maxFeePerGas,maxPriorityFeePerGas:w.maxPriorityFeePerGas}}catch{return null}},[Ve,o,t]),dt=re(async i=>{let a=pe(i.fromToken),d=pe(i.toToken),g=W(a,d);if(!g)return{error:"Route is not available."};let w=i.lastChangedBy==="to"?i.toAmount:i.fromAmount,R=!!w&&Number(w)>0,F=gs(g,r)?Ee:void 0,B=async(H,l,h)=>{let I=R?await de(H,g):null,O=V(g,R,I);return hs({input:H,path:g,gasInfo:O,amountData:l,liquidity:F,enrichedTokens:A,priceImpact:h})};if(!w||Number(w)<=0)return{fromAmount:i.fromAmount,toAmount:i.toAmount,summary:await B(i)};let G=await Y(g),J=et(G?.gasFee??G?.gas_fee),S=g.type==="bridge"||g.type==="bridge-swap"?{networkFee:J}:void 0,E=g.type==="bridge"?i.lastChangedBy==="to"?{...i,fromAmount:i.toAmount}:{...i,toAmount:i.fromAmount}:i,j=zr({input:E,path:g,config:G});if(j)return{fromAmount:E.fromAmount,toAmount:E.toAmount,summary:await B(E,S),error:j};let X=Xr({input:E,path:g,config:G});if(X)return{fromAmount:E.fromAmount,toAmount:E.toAmount,summary:await B(E,S),error:X};if(g.type==="bridge")return{fromAmount:E.fromAmount,toAmount:E.toAmount,summary:await B(E,S)};try{if(g.type==="swap-bridge"){let I=$e(g,"first"),O=r.contracts.SWAP_BRIDGE_ROUTER;if(!I)return{error:"Swap bridge route is not ready."};let N=De=>Pe({path:g,step:I,amount:De,source:"from"}).then(Se=>Se.priceImpact).catch(()=>{});if(i.lastChangedBy==="from"){let De=await Oe(o,{address:O,abi:rt,functionName:"getAmountSwapBridgeOut",args:[BigInt(g.to.chainId),se(r,g.from.address),se(r,I.toToken),I.fee??xe,wt(i.fromAmount)],chainId:g.from.chainId}),Se=st(De[1]),Nt={...i,toAmount:Se};return{toAmount:Se,summary:await B(Nt,{networkFee:De[3],exFee:De[4]},await N(i.fromAmount))}}let ve=await Oe(o,{address:O,abi:rt,functionName:"getAmountSwapBridgeIn",args:[BigInt(g.to.chainId),se(r,g.from.address),se(r,I.toToken),I.fee??xe,wt(i.toAmount)],chainId:g.from.chainId}),Xe=st(ve[1]),he={...i,fromAmount:Xe};return{fromAmount:Xe,summary:await B(he,{networkFee:ve[3],exFee:ve[4]},await N(Xe))}}let H=g.type==="bridge-swap"?$e(g,"last"):$e(g,"first");if(!H)return{error:"Swap route is not available."};let l=await Pe({path:g,step:H,amount:w,source:i.lastChangedBy});if(i.lastChangedBy==="from"){let I={...i,toAmount:l.amount};return{toAmount:l.amount,summary:await B(I,S,l.priceImpact)}}let h={...i,fromAmount:l.amount};return{fromAmount:l.amount,summary:await B(h,S,l.priceImpact)}}catch(H){return{fromAmount:i.fromAmount,toAmount:i.toAmount,summary:await B(i,S),error:Kr(H)}}},[Ee,V,A,r,de,W,Y,Pe,o]),je=re(async i=>{if(i.from.isNativeToken)return null;if(i.type==="swap"||i.type==="deposit-swap"||i.type==="swap-withdraw")return be(i.from.chainId);if(i.type==="swap-bridge")return r.contracts.SWAP_BRIDGE_ROUTER;let a=i.steps.find(d=>d.type==="bridge");return a?.bridgeAddress?a.bridgeAddress:null},[r.contracts.SWAP_BRIDGE_ROUTER,be]),Ne=re(async i=>{if(!t)throw new Error("Wallet is not connected.");let a=pe(i.fromToken),d=pe(i.toToken),g=W(a,d);if(!g)throw new Error("Route is not available.");if(!Ue(g.type)&&g.type!=="swap-bridge"||g.from.isNativeToken)return null;let w=ge(i.fromAmount);if(w<=0n)return null;let R=await je(g);return!R||await Oe(o,{address:g.from.address,abi:Kt,functionName:"allowance",args:[t,R],chainId:g.from.chainId})>=w?null:{token:i.fromToken,tokenAddress:g.from.address,spenderAddress:R,amount:i.fromAmount}},[W,je,o,t]),nt=re(async(i,a)=>{let d=ge(a.amount||i.fromAmount);if(d<=0n)throw new Error("Approval amount is empty.");await ce(a.token.chainId);let g=await xn(o,{address:a.tokenAddress,abi:Kt,functionName:"approve",args:[a.spenderAddress,d],chainId:a.token.chainId});await kr(o,{hash:g,chainId:a.token.chainId})},[ce,o]),Qe=re(async(i,a)=>{let d=await Be(i,a);await ce(d.chainId);let g=await En(o,d.chainId,d.fallbackGasLimit,vr(a.type),{account:t,address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value});return{txHash:await xn(o,{address:d.address,abi:d.abi,functionName:d.functionName,args:d.args,value:d.value,chainId:d.chainId,...g}),fromToken:i.fromToken,toToken:i.toToken,fromAmount:i.fromAmount,toAmount:i.toAmount}},[Be,ce,o,t]),ze=re(async(i,a)=>{let d=t;if(!d)throw new Error("Wallet is not connected.");let g=a.steps.find(Se=>Se.type==="bridge");if(!g?.bridgeAddress)throw new Error("Bridge route is not available.");let w=a.from.address,R=a.from.chainId,F=ge(i.fromAmount);if(F<=0n)throw new Error("Bridge amount is empty.");let B=await Y(a),G=et(B?.gasFee??B?.gas_fee),J=Bn(F,B?.exFeeRate??B?.ex_fee_rate),S=F+J+G,[E,j]=await Promise.all([Oe(o,{address:w,abi:Pn,functionName:"name",chainId:R}),Oe(o,{address:w,abi:Pn,functionName:"nonces",args:[d],chainId:R})]),X=BigInt(Math.floor(Date.now()/1e3)+300),H=await Cr(o,{domain:{name:E,version:"1",chainId:R,verifyingContract:w},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:d,spender:g.bridgeAddress,value:S,nonce:j,deadline:X}}),{r:l,s:h,v:I,yParity:O}=hr(H),N=I!==void 0?Number(I):O+27,ve={exFee:J.toString(),from:R,fromToken:w,nonce:Number(j),gasFee:G.toString(),permitArgs:{account:d,deadline:X.toString(),r:l,s:h,token:w,v:N,value:S.toString()},to:d,toChainID:String(a.to.chainId),value:S.toString()},Xe=await An(`${r.bridgeApi}/permit`,ve),he=Xe?.requestId??Xe?.request_id;if(!he)throw new Error("Bridge permit request failed.");let De=await Gr(r.bridgeApi,he);if(!Ht(De))throw new Error("Bridge submitted, but confirmation timed out. Check History shortly.");return{txHash:De,fromToken:i.fromToken,toToken:i.toToken,fromAmount:i.fromAmount,toAmount:i.toAmount}},[r,Y,o,t]),We=re(async i=>{let a=Gt(o),d=pe(i.fromToken),g=pe(i.toToken),w=W(d,g);if(!w)throw new Error("Route is not available.");if(!(Ue(w.type)||w.type==="swap-bridge"||w.type==="bridge-swap"||w.type==="bridge"))throw new Error("This bridge route is not supported yet.");let B=w.type==="bridge"&&w.from.chainId===r.chainIds.bsc&&w.from.address.toLowerCase()===r.contracts.BSC_CROSS.toLowerCase()?await ze(i,w):await Qe(i,w);return await Ge(a),{...B,pathType:w.type,routeTokens:bs(w,A)}},[A,r,W,Ge,ze,Qe,o]);return{bridgeTokens:_e,bridgeHistory:q,getBridgeApproval:Ne,approveBridge:nt,getBridgeQuote:dt,getBridgeToTokens:ye,submitBridge:We,oneUsdPairs:ct,isLoading:m.isLoading||b.isLoading||k.isLoading||T.isLoading||x.some(i=>i.isLoading)}}import{useEffect as qn,useRef as ws,useState as Hn}from"react";import{useAccount as Cs}from"wagmi";function Vt(e){let{address:t,connector:n}=Cs(),{currentWallet:s}=Ae(),o=e?.walletId!==void 0?e.walletId:s,c=e?.connector!==void 0?e.connector:n,f=e?.address!==void 0?e.address:t,[y,u]=Hn({loginType:null,accountName:null,accounts:[],isResolved:!1}),r=ws(new Map),[m,b]=Hn(0);return qn(()=>{let C=!1;if(o!=="cross_embedded")return u({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{C=!0};if(!c)return u({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{C=!0};u(x=>({...x,isResolved:!1}));let p=20,k=300,T=async()=>{if(typeof c.getProvider!="function")return"retry";let x;try{x=await c.getProvider()}catch{return"retry"}let P=x?.sdk;if(!P)return"giveup";try{let L=P.getRNBridgeActiveWallet?.(),_=L?.walletName?.trim();L&&_&&r.current.set(L.address.toLowerCase(),_)}catch{}let[v,D]=await Promise.all([P.getUserInfo?.().catch(()=>null)??null,P.getAddresses?.().catch(()=>null)??null]);if(C)return"done";let A=v?.loginType,W=A==="google"||A==="apple"?A:null;if(!W)return"retry";let $=f?.toLowerCase(),U=$&&Array.isArray(D)?D.find(L=>L.address.toLowerCase()===$):null,z=Array.isArray(D)?D.filter(L=>/^0x[a-fA-F0-9]{40}$/.test(L.address)).map(L=>({address:L.address.toLowerCase(),...Number.isFinite(L.index)?{index:L.index}:{},...L.name?.trim()?{name:L.name.trim()}:{}})):[],M=$?r.current.get($)?.trim():void 0,q=!U&&$&&/^0x[a-fA-F0-9]{40}$/.test($)?[...z,{address:$,index:z.length,...M?{name:M}:{}}]:z,Te=M||U?.name?.trim()||(typeof U?.index=="number"?`Account ${U.index+1}`:f?`${f.slice(0,6)}\u2026${f.slice(-4)}`:null);return u({loginType:W,accountName:Te,accounts:q,isResolved:!0}),"done"};return(async()=>{for(let x=0;x<p;x++){if(C)return;let P=await T();if(P==="done")return;if(P==="giveup"){C||u({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(v=>setTimeout(v,k))}C||u({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{C=!0}},[o,c,f,m]),qn(()=>{if(o!=="cross_embedded"||!c||typeof c.getProvider!="function")return;let C=!1,p;return(async()=>{let k;try{k=await c.getProvider()}catch{return}if(C)return;let T=k?.sdk;T?.on&&(p=T.on("addressChanged",({address:x,walletName:P})=>{let v=P?.trim();v&&(r.current.set(x.toLowerCase(),v),b(D=>D+1))}))})(),()=>{C=!0,p?.()}},[o,c]),y}import{useCallback as ks,useMemo as jt,useRef as Ts}from"react";import{useQuery as vs}from"@tanstack/react-query";import{useAccount as Is,useSignMessage as xs}from"wagmi";import{CrossAuthClient as Ps,HttpSafeDropApiAdapter as Ss,ONE_POP_DEPLOYMENTS as As,resolvePopEnvironment as Rs}from"@nexus-cross/pop/api";function Vn(e,t){let n=[];for(let s of t)s.rejected||n.push({id:`pending-${s.claimAddress}`,direction:"received",handle:s.sender.handle||s.sender.address,...s.sender.profileImageUrl?{avatarUrl:s.sender.profileImageUrl}:{},amountRaw:s.amount.toString(),decimals:18,timestamp:Date.parse(s.depositedAt)||0,status:"ready"});for(let s of e){let o=s.status.toLowerCase(),c=(s.resolvedAt?Date.parse(s.resolvedAt):0)||Date.parse(s.depositedAt)||0,f={id:`${s.type}-${s.id}`,amountRaw:s.amount.toString(),decimals:18,timestamp:c};if(s.type==="sent"){n.push({...f,direction:"sent",handle:s.receiver.handle||s.receiver.address||"",...s.receiver.profileImageUrl?{avatarUrl:s.receiver.profileImageUrl}:{},status:o==="claimed"?"claimed":o==="refunded"?"refunded":"waiting"});continue}o==="claimed"&&n.push({...f,direction:"received",handle:s.sender.handle||s.sender.address,...s.sender.profileImageUrl?{avatarUrl:s.sender.profileImageUrl}:{},status:"claimed"})}return n.sort((s,o)=>o.timestamp-s.timestamp),n}var zn="one-pop-summary",Qn=20,kt=new Map;function Os(e){e?kt.delete(e.toLowerCase()):kt.clear()}function Qt(e={}){let{enabled:t=!1,environment:n,token:s,apiBaseUrl:o,authBaseUrl:c,getJwt:f,repliesWaitingCount:y=0}=e,u=jt(()=>{if(s)return s;let P=Rs(n);return As[P]?.contracts?.permitErc20},[s,n]),{address:r,chainId:m}=Is(),{signMessageAsync:b}=xs(),C=Ts(null),p=ks(async()=>{if(f)return f();if(!r||!m)return;let P=r.toLowerCase(),v=kt.get(P);if(v)return v;if(C.current)return C.current;let D=(async()=>{let A=new Ps(c?{baseUrl:c}:{}),{message:W}=await A.unsignedHash(m,r),$=await b({message:W}),{token:U}=await A.siweToken(r,$);return kt.set(P,U),U})();C.current=D;try{return await D}catch(A){throw kt.delete(P),A}finally{C.current=null}},[f,r,m,c,b]),k=jt(()=>new Ss({...o?{baseUrl:o}:{},getJwt:p}),[o,p]),T=vs({queryKey:[zn,r?.toLowerCase()??null,u?.toLowerCase()??null],enabled:t&&!!r,retry:!1,refetchOnWindowFocus:!1,staleTime:6e4,queryFn:async()=>{let[P,v,D,A]=await Promise.all([u?k.listDrops({token:u}).catch(()=>null):Promise.resolve(null),k.listHistories({type:"sent",page:1,pageSize:Qn}).catch(()=>null),k.listHistories({type:"received",page:1,pageSize:Qn}).catch(()=>null),k.getXConnection().catch(()=>null)]);return{drops:P,items:[...v?.items??[],...D?.items??[]],xConnected:!!A}}});return{summary:jt(()=>{if(!t||!r)return;if(!T.data)return T.isLoading?{claimableCount:0,claimableTotalRaw:"0",claimableDecimals:18,repliesWaitingCount:y,activity:[],xConnected:!1,isLoading:!0}:void 0;let{drops:P,items:v,xConnected:D}=T.data;return{claimableCount:P?.count??0,claimableTotalRaw:(P?.totalAmount??0n).toString(),claimableDecimals:18,repliesWaitingCount:y,activity:Vn(v,P?.items??[]),xConnected:D,isLoading:!1}},[t,r,T.data,T.isLoading,y]),isLoading:T.isLoading,error:T.error??null,refetch:T.refetch}}import{Fragment as Jn,jsx as me,jsxs as it}from"react/jsx-runtime";var qs=[{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"}]}],Hs=[{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"}]}],Vs={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"}},Yt=10n**18n,js={google:{name:"Google",iconUrl:eo,connectorId:tt.CROSSx},apple:{name:"Apple",iconUrl:en,connectorId:tt.CROSSx},cross:{name:Tt.default,iconUrl:Zt,connectorId:tt.CROSSx},metamask:{name:"MetaMask",iconUrl:to,connectorId:tt.MetaMask},binance:{name:"Binance Wallet",iconUrl:Zn,connectorId:tt.Binance}};function Qs(e){switch(e){case"cross_embedded":return tt.CROSSx;case"metamask":return tt.MetaMask;case"binance":return tt.Binance;default:return}}function zs(e,t){switch(e){case"cross_embedded":return t==="google"?{name:"Google",iconUrl:eo}:t==="apple"?{name:"Apple",iconUrl:en}:{name:Tt.default,iconUrl:Zt};case"cross_wallet":return{name:Tt.default,iconUrl:Zt};case"cross_extension":return{name:Tt.extension,iconUrl:$s};case"metamask":return{name:"MetaMask",iconUrl:to};case"binance":return{name:"Binance Wallet",iconUrl:Zn};default:return null}}function Xs(e){if(e)return e==="cross_embedded"?Tt.default:Ms[e]?.name}function Ys({label:e="Connect Wallet",className:t,style:n,walletInfoStyle:s,user:o,enablePortfolio:c,portfolio:f,theme:y,accountName:u,connectorId:r,showPortfolio:m,sendAccounts:b,getTransactionReceipt:C,sendTransaction:p,estimateGas:k,onDisconnect:T,onSelectWallet:x,onBuy:P,onRampRedirectUrl:v,onePopSummary:D,onOnePopOpen:A,showOnePop:W,bridgeTokens:$,bridgeHistory:U,getBridgeQuote:z,getBridgeToTokens:M,getBridgeApproval:q,approveBridge:Ee,submitBridge:Te,showBalance:L=!0,env:_,...V}){let{address:Y,isConnected:_e,connector:ct,chain:ye}=Ns(),ae=Ds(),ce=Ws(),{switchChainAsync:Ge}=Ls(),{sendTransactionAsync:be}=Fs(),{connectWallet:Pe,disconnect:Be,selectWallet:Ve,currentWallet:de,isConnecting:dt,kitConfig:je}=Ae(),Ne=je?.restoreChainAfterSwitch!==!1,nt=!!je?.onePopEnabled,Qe=yt(),ze=y??Qe?.mode??"dark",We=Bt(()=>Us(_),[_]),i=o?.address??Y,a=o?js[o.provider]:null,{loginType:d,accountName:g,accounts:w}=Vt({walletId:de,connector:ct,address:i}),R=Bt(()=>a?{name:a.name,iconUrl:a.iconUrl}:zs(de,d),[a,de,d]),F=u??o?.name??g??void 0,B=V.connectorName??(a?a.name:Xs(de)),G=a?a.connectorId:Qs(de),J=r??G,S=f??m??!!c,E=Ct({env:We,walletAddress:i,enabled:_e&&!!i&&L,restoreChainAfterSwitch:Ne}),j=$??E.bridgeTokens,X=U??E.bridgeHistory,H=z??E.getBridgeQuote,l=M??E.getBridgeToTokens,h=q??E.getBridgeApproval,I=Ee??E.approveBridge,O=Te??E.submitBridge,N=He(()=>{Pe().catch(K=>{console.error("[crossx-kit] connectWallet error:",K)})},[Pe]),ve=He(()=>{Be()},[Be]),Xe=T??ve,he=Gs(),{eligibility:De}=Ks({network:ye?String(ye.id):void 0}),Se=De?.allowed===!0,Nt=Bt(()=>{if(P)return P;if(!(!he||!ye||!Se))return()=>he.open({crypto:ye.nativeCurrency?.symbol??"USDT",network:String(ye.id),...v?{redirectUrl:v}:{}}).then(()=>{}).catch(K=>{throw console.warn("[crossx-kit] onramp open failed:",K),K})},[P,he,ye,Se,v]),rn=Bs();Es(()=>{if(he?.onStatus)return he.onStatus(()=>{rn.invalidateQueries()})},[he,rn]);let lo=Bt(()=>{if(!P&&!(!he||!ye)&&!Se)return"On-ramp is not available in your region."},[P,he,ye,Se]),[uo,po]=_s(!1),mo=He(()=>{po(!0),A?.()},[A]),{summary:fo}=Qt({enabled:nt&&!D&&uo,environment:We}),go=D??fo,yo=W??nt,bo=V.onBridgeDisabledMessage,ho=V.onSendDisabledMessage,wo=o?o.provider==="google"||o.provider==="apple":de==="cross_embedded",Co=He(()=>{Ve().catch(K=>{console.error("[crossx-kit] selectWallet error:",K)})},[Ve]),sn=x??(wo?Co:void 0),ko=He(async({hash:K,chainId:te})=>{let ne=zt(ae,te?{chainId:te}:void 0);if(!ne)return null;try{return await ne.getTransactionReceipt({hash:K})}catch{return null}},[ae]),To=He(async K=>{let te=ce,ne=!1;K.chainId!==void 0&&K.chainId!==ce&&(await Ge({chainId:K.chainId}),ne=!0);let ue=K.chainId===56||K.chainId===97?{...K,type:"legacy"}:K,Z=await(p??be)(ue);return await St({getChainId:()=>ne?K.chainId:te,switchChain:Ce=>Ge({chainId:Ce})},te,Ne),Z},[p,be,ce,Ge,Ne]),vo=S||p?To:void 0,Io=He(async K=>{let te=K.chainId??ce,ne=zt(ae,te?{chainId:te}:void 0);if(!ne)throw new Error(`publicClient for chainId ${te??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let we=te===56||te===97,[ue,Ie]=await Promise.all([ne.estimateGas({account:K.from,to:K.to,value:K.value,data:K.data}),(async()=>{if(we)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await ne.getGasPrice()};try{let Z=await ne.estimateFeesPerGas();return{maxFeePerGas:Z.maxFeePerGas,maxPriorityFeePerGas:Z.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await ne.getGasPrice()}}})()]);return{gasLimit:ue,maxFeePerGas:Ie.maxFeePerGas,maxPriorityFeePerGas:Ie.maxPriorityFeePerGas,gasPrice:Ie.gasPrice}},[ae,ce]),xo=k??Io,Po=He(async K=>{let te={};if(!Y||K.length===0)return te;let ne=K.flatMap(ue=>{let Z={address:ue,abi:qs,chainId:ce};return[{...Z,functionName:"balanceOf",args:[Y]},{...Z,functionName:"totalSupply"},{...Z,functionName:"decimals"}]}),we;try{we=await Xn(ae,{contracts:ne,allowFailure:!0})}catch{return te}return K.forEach((ue,Ie)=>{let Z=Ie*3,Ce=we[Z],vt=we[Z+1],lt=we[Z+2];!Ce||Ce.status!=="success"||(te[ue.toLowerCase()]={balance:Ce.result,totalSupply:vt&&vt.status==="success"?vt.result:void 0,decimals:lt&<.status==="success"?Number(lt.result):void 0})}),te},[ae,Y,ce]),So=He(async K=>{let te={earnedWei:0n,stakedWei:0n};if(!K)return te;let ne=Vs[We],we={address:ne.poolAddress,abi:Hs,chainId:ne.crossChainId},ue;try{ue=await Xn(ae,{allowFailure:!0,contracts:[{...we,functionName:"earned",args:[K]},{...we,functionName:"balanceOf",args:[K]},{...we,functionName:"posaActive"},{...we,functionName:"lastRewardBlock"},{...we,functionName:"totalStaked"}]})}catch{return te}let Ie=ot=>ue[ot]&&ue[ot].status==="success"?ue[ot].result:0n,Z=Ie(0),Ce=Ie(1);if(ue[2]&&ue[2].status==="success"?ue[2].result:!1)return{earnedWei:Z,stakedWei:Ce};let lt=Ie(3),dn=Ie(4);if(dn===0n)return{earnedWei:Z,stakedWei:Ce};let Wt=0n;try{Wt=await zt(ae,{chainId:ne.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:Z,stakedWei:Ce}}if(Wt<=lt)return{earnedWei:Z,stakedWei:Ce};let Dt=0n;try{let ot=await fetch(ne.networkStatsUrl).then(Ft=>Ft.json()),ln=ot?.data?.block_reward??ot?.block_reward;if(ln){let[Ft,Eo=""]=String(ln).split("."),_o=(Eo+"0".repeat(18)).slice(0,18);Dt=BigInt(Ft||"0")*Yt+BigInt(_o||"0")}}catch{}if(Dt===0n)return{earnedWei:Z,stakedWei:Ce};let Ro=(Wt-lt)*Dt*Yt/dn,Oo=Ce*Ro/Yt;return{earnedWei:Z+Oo,stakedWei:Ce}},[ae,We]),an=!sn,cn=t?`cb-button ${t}`:"cb-button",Ao=t?`cb-pill ${t}`:"cb-pill";return dt&&!_e?it(Jn,{children:[me("style",{children:Jt}),it("button",{type:"button",disabled:!0,className:cn,style:n,"aria-busy":"true",children:[me("span",{className:"cb-spinner","aria-hidden":"true"}),me("span",{className:"cb-button-label",children:"Connecting..."})]})]}):_e&&i?it("span",{"data-crossx-wallet-info":an?"external":"embedded",children:[me("style",{children:Jt}),an&&me("style",{children:Zs}),it(Xt,{...V,env:We,theme:ze,showBalance:L,walletAddress:i,accountName:F,sendAccounts:b??w,connectorName:B,connectorId:J,showPortfolio:S,showOnePop:yo,onePopSummary:go,onOnePopOpen:mo,onDisconnect:Xe,onSelectWallet:sn,onBuy:Nt,onBuyDisabledMessage:lo,onBridgeDisabledMessage:bo,onSendDisabledMessage:ho,sendTransaction:vo,getTransactionReceipt:C??ko,estimateGas:xo,lpBalanceReader:Po,stakingRewardsReader:So,bridgeTokens:j,bridgeHistory:X,getBridgeQuote:H,getBridgeToTokens:l,getBridgeApproval:h,approveBridge:I,submitBridge:O,style:s,children:[me(Xt.Trigger,{asChild:!0,children:it("button",{type:"button",className:Ao,style:n,"aria-label":`Connected with ${R?.name??"wallet"}: ${Yn(i)}`,children:[R?.iconUrl?me("img",{src:R.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":R.iconUrl===en?"apple":void 0}):me("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),me("span",{className:"cb-pill-address",children:Yn(i)})]})}),me(Xt.Content,{align:"end",sideOffset:8})]})]}):it(Jn,{children:[me("style",{children:Jt}),it("button",{type:"button",onClick:N,className:cn,style:n,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[me(Js,{}),me("span",{className:"cb-button-label",children:e})]})]})}function Js(){return me("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:me("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 Zs=`
|
|
3
|
+
[data-crossx-wallet-info="external"] .wi-select-wallet-btn {
|
|
4
|
+
display: none !important;
|
|
5
|
+
}
|
|
6
|
+
`;function Yn(e){return`${e.slice(0,6)}...${e.slice(-4)}`}var Jt=`
|
|
7
|
+
.cb-button {
|
|
8
|
+
-webkit-font-smoothing: antialiased;
|
|
9
|
+
--cb-bg: var(--ds-accent-primary-default, #F0640D);
|
|
10
|
+
--cb-bg-hover: var(--ds-accent-primary-high, #f0640d);
|
|
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 no,useEffect as ei,useMemo as oo,useState as ti}from"react";import{detectWallets as ro,DEFAULT_WALLET_REGISTRY as so}from"@nexus-cross/connect-kit-wagmi";import{jsx as le,jsxs as Me}from"react/jsx-runtime";var ni=["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"],oi="Connect with one of our available wallet providers to continue.";function ri({open:e,onClose:t,onSelect:n,title:s="Connect Wallet",description:o=oi,troubleshootingTips:c=ni}){let{availableWallets:f}=Ae(),[y,u]=ti({});ei(()=>{if(!e)return;let p=ro(so),k={};for(let x of p)x.installed!==void 0&&(k[x.id]=x.installed);u(k);let T=setTimeout(()=>{let x=ro(so),P={};for(let v of x)v.installed!==void 0&&(P[v.id]=v.installed);u(P)},1e3);return()=>clearTimeout(T)},[e]);let r=oo(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),m=oo(()=>r?f.filter(p=>p.type!=="extension"):f,[f,r]),b=no(p=>{if(!y[p.walletId]&&p.installUrl&&p.type==="extension"){window.open(p.installUrl,"_blank");return}t(),n(p.walletId)},[t,n,y]),C=no((p,k)=>{p.stopPropagation(),t(),window.open(k,"_blank")},[t]);return e?le("div",{style:Q.overlay,onClick:t,children:Me("div",{style:Q.modal,onClick:p=>p.stopPropagation(),children:[Me("div",{style:Q.header,children:[le("h2",{style:Q.title,children:s}),le("button",{type:"button",onClick:t,style:Q.closeBtn,"aria-label":"Close",children:Me("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",children:[le("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),le("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),le("p",{style:Q.desc,children:o}),le("div",{style:Q.walletList,children:m.map(p=>{let k=y[p.walletId],T=k===!1&&p.type==="extension"&&!!p.installUrl;return Me("div",{style:Q.walletGroup,children:[Me("button",{type:"button",onClick:()=>b(p),style:{...Q.walletItem,...p.walletId==="cross_wallet"?Q.walletItemAccent:{}},"aria-label":`Connect with ${p.name}`,children:[p.iconUrl?le("img",{src:p.iconUrl,alt:"",style:Q.walletIcon}):le("div",{style:Q.walletIconPlaceholder}),Me("div",{style:Q.walletInfo,children:[Me("div",{style:Q.walletNameRow,children:[le("span",{style:Q.walletName,children:p.name}),k!==void 0&&le("span",{style:{...Q.badge,...k?Q.badgeInstalled:Q.badgeNotInstalled},children:k?"Installed":"Not Installed"})]}),le("span",{style:Q.walletDesc,children:T?"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&&Me("button",{type:"button",onClick:x=>C(x,p.guideUrl),style:Q.guideBtn,children:[le("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),p.guideLabel??"Required Settings"]})]},p.walletId)})}),Me("div",{style:Q.troubleshoot,children:[le("h3",{style:Q.troubleshootTitle,children:"Wallet not detected?"}),le("ul",{style:Q.troubleshootList,children:c.map(p=>Me("li",{style:Q.troubleshootItem,children:[le("span",{style:Q.troubleshootDot,"aria-hidden":"true"}),le("span",{children:p})]},p))})]})]})}):null}var ee={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)"},Q={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:ee.surfaceBg,border:`1px solid ${ee.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:ee.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:ee.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:ee.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:ee.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:ee.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:ee.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:ee.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:ee.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:ee.primarySoft,color:ee.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:ee.textTertiary},walletDesc:{fontSize:"11px",color:ee.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 ${ee.warningBorder}`,background:ee.warningBg,color:ee.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:ee.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:ee.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:ee.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:ee.textSecondary}};import{useEffect as si,useMemo as io}from"react";import{useAccount as ii,useConfig as ai,useSendTransaction as ci,useSwitchChain as di,useWriteContract as li}from"wagmi";import{getBalance as ui,readContract as pi,readContracts as mi,waitForTransactionReceipt as fi}from"wagmi/actions";import{RelayDeposit as tn}from"@nexus-cross/dapp-ui";import{jsx as wi}from"react/jsx-runtime";var gi=56,yi=[{type:"function",name:"balanceOf",stateMutability:"view",inputs:[{name:"account",type:"address"}],outputs:[{name:"",type:"uint256"}]},{type:"function",name:"decimals",stateMutability:"view",inputs:[],outputs:[{name:"",type:"uint8"}]},{type:"function",name:"symbol",stateMutability:"view",inputs:[],outputs:[{name:"",type:"string"}]}],at=e=>e,ao=!1;function ft(){let{address:e,chainId:t}=ii(),n=ai(),{sendTransactionAsync:s}=ci(),{writeContractAsync:o}=li(),{switchChainAsync:c}=di(),f=n.chains.some(u=>u.id===gi);si(()=>{f||ao||(ao=!0,console.warn("[connect-kit] CrossRelayDeposit: BNB Smart Chain (56) is not in the wagmi config \u2014 one-click deposit verification and fund recovery are disabled. Add `bsc` to `createCrossxConfig({ networks })` to enable them."))},[f]);let y=io(()=>({sendTransaction:async({chainId:u,to:r,value:m,data:b})=>s({chainId:at(u),to:r,value:m,data:b}),writeContract:async({chainId:u,address:r,abi:m,functionName:b,args:C})=>o({chainId:at(u),address:r,abi:m,functionName:b,args:C}),readContract:f?async({chainId:u,address:r,abi:m,functionName:b,args:C})=>pi(n,{chainId:at(u),address:r,abi:m,functionName:b,args:C}):void 0,switchChain:async u=>{await c({chainId:at(u)})},waitForReceipt:async({chainId:u,hash:r})=>({status:(await fi(n,{chainId:at(u),hash:r})).status==="success"?"success":"reverted"}),getBalance:async({chainId:u,address:r,token:m})=>{if(!m){let x=await ui(n,{chainId:at(u),address:r});return{value:x.value,decimals:x.decimals,symbol:x.symbol}}let b={address:m,abi:yi,chainId:at(u)},C=await mi(n,{contracts:[{...b,functionName:"balanceOf",args:[r]},{...b,functionName:"decimals"},{...b,functionName:"symbol"}],allowFailure:!1}),[p,k,T]=C;return{value:p,decimals:k,symbol:T}}}),[n,f,s,o,c]);return io(()=>({walletAddress:e,walletChainId:t,...y}),[e,t,y])}function bi(e){let t=ft();return wi(tn,{...t,...e,requireWalletConnection:!0})}var hi=Object.assign(bi,{Trigger:tn.Trigger,Content:tn.Content});import{useCallback as Ci,useMemo as co}from"react";import{useAccount as ki,useConfig as Ti}from"wagmi";import{waitForTransactionReceipt as vi}from"wagmi/actions";import{GetOneUsd as Ii,resolveEnvironment as xi}from"@nexus-cross/dapp-ui";import{jsx as Si}from"react/jsx-runtime";function Pi({env:e,pairs:t,bridgeOptions:n,relay:s,restoreChainAfterSwitch:o=!0,waitForTransaction:c,onRequestConnect:f,...y}){let u=xi(e),{address:r}=ki(),m=Ti(),{connectWallet:b}=Ae(),C=ft(),p=Ct({env:u,walletAddress:r,enabled:!0,restoreChainAfterSwitch:o}),{bridgeHistory:k,getBridgeQuote:T,getBridgeToTokens:x,getBridgeApproval:P,approveBridge:v,submitBridge:D}=p,A=co(()=>({...n,history:k,getQuote:T,getToTokens:x,getApproval:P,approveBridge:v,submitBridge:D}),[v,k,n,P,T,x,D]),W=co(()=>({...s,...C}),[s,C]),$=Ci(async U=>{if((await vi(m,{hash:U.txHash,chainId:U.fromToken.chainId})).status!=="success")throw new Error("Transaction reverted.")},[m]);return Si(Ii,{...y,env:u,walletAddress:r,tokens:p.bridgeTokens,pairs:t??p.oneUsdPairs,loading:p.isLoading,bridge:A,relay:W,waitForTransaction:c??$,onRequestConnect:f??b})}import{useAccount as Ai}from"wagmi";import{RelayHistory as nn}from"@nexus-cross/dapp-ui";import{jsx as Ei}from"react/jsx-runtime";function Ri(e){let{address:t}=Ai();return Ei(nn,{walletAddress:t,...e})}var Oi=Object.assign(Ri,{Trigger:nn.Trigger,Content:nn.Content});import{RelayRecovery as on}from"@nexus-cross/dapp-ui";import{jsx as Ni}from"react/jsx-runtime";function _i(e){let t=ft();return Ni(on,{...t,...e})}var Bi=Object.assign(_i,{Trigger:on.Trigger,Content:on.Content});import{useContext as Wi,useEffect as Di,useRef as Fi}from"react";function Li(e){let t=Wi(Pt);if(!t)throw new Error("useConnectKitAnalytics must be used within <CrossConnectKitProvider>");let n=Fi(e);n.current=e;let{subscribe:s}=t;Di(()=>s(c=>n.current(c)),[s])}import{useOnRamp as Qc,useOnRampEligibility as zc,OnRampProvider as Xc}from"@nexus-cross/onramp/react";import{useKyc as Jc,useOptionalKyc as Zc,KycProvider as ed,KycError as td,launchKycVerification as nd}from"@nexus-cross/kyc/react";import{WalletInfo as rd,ConnectorId as sd}from"@nexus-cross/dapp-ui";import{AppLauncher as ad,AppLauncherTrigger as cd,AppLauncherContent as dd,useGlobalMenu as ld}from"@nexus-cross/dapp-ui";import{SkillsButton as pd}from"@nexus-cross/dapp-ui";import{createRelayClient as fd,RelayApiError as gd,DEFAULT_TRUSTED_FACTORIES as yd,useRelayConfig as bd,useRelayOrders as hd,useRelayRecovery as wd}from"@nexus-cross/dapp-ui";import{OnRampError as kd}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as vd,formatBalance as Id,formatWei as xd}from"@nexus-cross/connect-kit-core";un();export{Ae as a,Lo as b,yt as c,Ut as d,yr as e,Ct as f,Vt as g,zn as h,Os as i,Qt as j,Ys as k,ri as l,ft as m,hi as n,Pi as o,Oi as p,Bi as q,Li as r,Qc as s,zc as t,Xc as u,Jc as v,Zc as w,ed as x,td as y,nd as z,rd as A,sd as B,ad as C,cd as D,dd as E,ld as F,pd as G,fd as H,gd as I,yd as J,bd as K,hd as L,wd as M,kd as N,vd as O,Id as P,xd as Q};
|
package/dist/client.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ConnectButton, ConnectButtonProps, CrossConnectKitContextValue, CrossConnectKitProvider, CrossConnectKitProviderProps, CrossConnectKitThemeContextValue, CrossConnectModal, CrossConnectModalProps, CrossxEmbeddedInfo, OtherWalletsModal, OtherWalletsModalProps, WalletProvider, WalletUser, useCrossConnectKit, useCrossConnectKitTheme, useCrossdBridgeAdapter, useCrossxEmbeddedInfo, useOptionalCrossConnectKitTheme } from './index.js';
|
|
1
|
+
export { ConnectButton, ConnectButtonProps, CrossConnectKitContextValue, CrossConnectKitProvider, CrossConnectKitProviderProps, CrossConnectKitThemeContextValue, CrossConnectModal, CrossConnectModalProps, CrossGetOneUsd, CrossGetOneUsdBridgeOptions, CrossGetOneUsdProps, CrossGetOneUsdRelayProps, CrossRelayDeposit, CrossRelayDepositProps, CrossRelayHistory, CrossRelayHistoryProps, CrossRelayRecovery, CrossRelayRecoveryProps, CrossxEmbeddedInfo, ONE_POP_SUMMARY_QUERY_KEY, OtherWalletsModal, OtherWalletsModalProps, UseOnePopSummaryOptions, UseOnePopSummaryResult, WalletProvider, WalletUser, clearOnePopJwtCache, useConnectKitAnalytics, useCrossConnectKit, useCrossConnectKitTheme, useCrossdBridgeAdapter, useCrossxEmbeddedInfo, useOnePopSummary, useOptionalCrossConnectKitTheme, useRelayWalletProps } from './index.js';
|
|
2
2
|
export { OnRampProvider, OnRampProviderProps, UseOnRampEligibilityOptions, UseOnRampEligibilityResult, UseOnRampOptions, UseOnRampResult, useOnRamp, useOnRampEligibility } from '@nexus-cross/onramp/react';
|
|
3
3
|
export { KycError, KycErrorCode, KycIdentity, KycLaunchTarget, KycLoginType, KycProvider, KycProviderProps, KycRejectType, KycStatus, KycVerificationHandle, KycVerificationMode, LaunchKycVerificationOptions, UseKycOptions, UseKycResult, launchKycVerification, useKyc, useOptionalKyc } from '@nexus-cross/kyc/react';
|
|
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
|
+
export { AppLauncher, AppLauncherContent, AppLauncherContentProps, AppLauncherProps, AppLauncherTrigger, AppLauncherTriggerProps, AppLauncherTriggerStyle, Catalog, ConnectButtonStyle, ConnectorId, DEFAULT_TRUSTED_FACTORIES, DepositAddressResult, GetOneUsdActionId, GetOneUsdEvent, GetOneUsdMode, GetOneUsdPairs, GetOneUsdTokenRef, GlobalMenu, GlobalMenuItem, GlobalMenuItemUrl, OrderSummary, OriginOption, QuoteResult, RecoveryInfo, RecoverySuccessResult, RelayApiError, RelayBalance, RelayClient, RelayClientOptions, RelayContractCall, RelayDrawerDirection, RelayHex, RelayRecoveryAction, RelayRecoveryQueryKey, RelayRecoveryQueryOptions, RelayRecoveryState, RelayRecoveryStep, RelayTheme, RelayTxRequest, RelayWalletProps, SendTransactionArgs, SendTransactionFn, SkillsButton, SkillsButtonProps, SkillsButtonStyle, UseRelayConfigOptions, UseRelayConfigResult, UseRelayOrdersOptions, UseRelayOrdersResult, UseRelayRecoveryOptions, UseRelayRecoveryResult, WalletInfo, WalletInfoContentProps, WalletInfoProps, WalletInfoStyle, WalletInfoTriggerProps, createRelayClient, useGlobalMenu, useRelayConfig, useRelayOrders, useRelayRecovery } from '@nexus-cross/dapp-ui';
|
|
5
5
|
import { AppMetadata, NetworkConfig, WalletId } from '@nexus-cross/connect-kit-core';
|
|
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';
|
|
6
|
+
export { Account, ChainBalance, ColorOverrides, ConnectCancelStage, ConnectFailReason, ConnectKitEvent, ConnectKitEventName, 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';
|
|
7
7
|
import { CreateCrossxConfigOptions, CrossxConfig } from '@nexus-cross/connect-kit-wagmi';
|
|
8
8
|
export { ConnectorEntry, ConnectorRegistry } from '@nexus-cross/connect-kit-wagmi';
|
|
9
9
|
import { ToNexusAdapterOptions } from '@nexus-cross/connect-kit-wagmi/to-nexus';
|
|
@@ -11,6 +11,7 @@ import { ReownAdapterOptions } from '@nexus-cross/connect-kit-wagmi/reown';
|
|
|
11
11
|
import 'react/jsx-runtime';
|
|
12
12
|
import 'react';
|
|
13
13
|
import 'wagmi';
|
|
14
|
+
import '@nexus-cross/pop/api';
|
|
14
15
|
|
|
15
16
|
type ConnectKitWalletPreset = 'all' | 'cross-only' | 'external-only';
|
|
16
17
|
type ConnectKitEnvironmentInput = 'development' | 'dev' | 'staging' | 'stage' | 'stg' | 'production' | 'prod' | 'prd';
|
package/dist/client.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as
|
|
1
|
+
import{A as ie,B as se,C as de,D as pe,E as ce,F as le,G as ue,H as fe,I as Ce,J as we,K as me,L as ge,M as ye,N as Ne,O as ve,P as xe,Q as Ee,a as S,b as V,c as W,d as X,e as L,f as h,g as j,h as B,i as F,j as D,k as U,l as q,m as z,n as $,o as G,p as H,q as J,r as Q,s as Y,t as Z,u as ee,v as ne,w as te,x as oe,y as re,z as ae}from"./chunk-FT6U2QDQ.js";import{bscMainnetNetwork as v,bscTestnetNetwork as x,createCrossxConfig as E,crossMainnetNetwork as k,crossTestnetNetwork as O}from"@nexus-cross/connect-kit-wagmi";import{toNexusAdapter as A}from"@nexus-cross/connect-kit-wagmi/to-nexus";import{reownAdapter as M}from"@nexus-cross/connect-kit-wagmi/reown";import{embeddedConnectorFactory as P}from"@nexus-cross/connect-kit-wagmi/embedded";import{WALLET_BRAND_NAME as I}from"@nexus-cross/crossx-design-system";function d(e){try{return import.meta.env?.[e]}catch{return}}function p(e){if(!(typeof process>"u"))return process.env?.[e]}function K(){return d("VITE_CROSSX_ENVIRONMENT")??d("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("NEXT_PUBLIC_CROSSX_ENVIRONMENT")??p("CROSSX_ENVIRONMENT")}function R(e){switch(e?.toLowerCase()){case"dev":case"development":return"development";case"stage":case"staging":case"stg":return"staging";default:return"production"}}function T(e){return e==="production"?[k,v]:[O,x]}function b(){let e=typeof window<"u"&&window.location?.origin?window.location.origin:"https://example.com";return{name:`${I} DApp`,url:e}}function _(e){let{app:c,appMetadata:l,networks:u,defaultNetwork:f,wallets:n,embedded:C=!0,environment:w,toNexus:t,reown:o,...r}=e,m=R(w??K()),i=u??T(m),a=Array.isArray(n)?null:n??"all",s=a!=="external-only"&&t!==!1,g=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??b(),networks:i,defaultNetwork:f??i[0],...Array.isArray(n)?{wallets:n}:{},...s?{crossProvider:A(y)}:{},...g?{reownProvider:M(N)}:{},...s&&C?{embeddedConnectorFactory:P}:{}})}export{de as AppLauncher,ce as AppLauncherContent,pe as AppLauncherTrigger,U as ConnectButton,ve as ConnectionStatus,se as ConnectorId,L as CrossConnectKitProvider,X as CrossConnectModal,G as CrossGetOneUsd,$ as CrossRelayDeposit,H as CrossRelayHistory,J as CrossRelayRecovery,we as DEFAULT_TRUSTED_FACTORIES,re as KycError,oe as KycProvider,B as ONE_POP_SUMMARY_QUERY_KEY,Ne as OnRampError,ee as OnRampProvider,q as OtherWalletsModal,Ce as RelayApiError,ue as SkillsButton,ie as WalletInfo,F as clearOnePopJwtCache,_ as createConnectKitConfig,fe as createRelayClient,xe as formatBalance,Ee as formatWei,ae as launchKycVerification,Q as useConnectKitAnalytics,S as useCrossConnectKit,V as useCrossConnectKitTheme,h as useCrossdBridgeAdapter,j as useCrossxEmbeddedInfo,le as useGlobalMenu,ne as useKyc,Y as useOnRamp,Z as useOnRampEligibility,D as useOnePopSummary,W as useOptionalCrossConnectKitTheme,te as useOptionalKyc,me as useRelayConfig,ge as useRelayOrders,ye as useRelayRecovery,z as useRelayWalletProps};
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,12 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { CrossxConfig, CrossConnectKitInitialState, ConnectorRegistry, ConnectorEntry } from '@nexus-cross/connect-kit-wagmi';
|
|
4
4
|
export { ConnectorEntry, ConnectorRegistry } from '@nexus-cross/connect-kit-wagmi';
|
|
5
|
-
import { WalletId, CrossConnectKitConfig, OAuthPort, ThemeMode, ThemeTokens } from '@nexus-cross/connect-kit-core';
|
|
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';
|
|
7
|
-
import { WalletInfoProps, ConnectButtonStyle, WalletInfoStyle, Environment, BridgeToken, BridgeHistoryItem, BridgeGetApprovalFn, BridgeApproveFn, BridgeQuoteFn, BridgeGetToTokensFn, BridgeSubmitFn } from '@nexus-cross/dapp-ui';
|
|
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';
|
|
5
|
+
import { WalletId, CrossConnectKitConfig, OAuthPort, ThemeMode, ThemeTokens, ConnectKitEvent } from '@nexus-cross/connect-kit-core';
|
|
6
|
+
export { Account, ChainBalance, ColorOverrides, ConnectCancelStage, ConnectFailReason, ConnectKitEvent, ConnectKitEventName, 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';
|
|
7
|
+
import { WalletInfoProps, ConnectButtonStyle, WalletInfoStyle, RelayDepositProps, RelayWalletProps, RelayDeposit, GetOneUsdProps, GetOneUsdPairs, GetOneUsdBridgeProps, GetOneUsdRelayProps, RelayHistoryProps, RelayHistory, RelayRecoveryProps, RelayRecovery, Environment, BridgeToken, BridgeHistoryItem, BridgeGetApprovalFn, BridgeApproveFn, BridgeQuoteFn, BridgeGetToTokensFn, BridgeSubmitFn, OnePopSummary } from '@nexus-cross/dapp-ui';
|
|
8
|
+
export { AppLauncher, AppLauncherContent, AppLauncherContentProps, AppLauncherProps, AppLauncherTrigger, AppLauncherTriggerProps, AppLauncherTriggerStyle, Catalog, ConnectButtonStyle, ConnectorId, DEFAULT_TRUSTED_FACTORIES, DepositAddressResult, GetOneUsdActionId, GetOneUsdEvent, GetOneUsdMode, GetOneUsdPairs, GetOneUsdTokenRef, GlobalMenu, GlobalMenuItem, GlobalMenuItemUrl, OrderSummary, OriginOption, QuoteResult, RecoveryInfo, RecoverySuccessResult, RelayApiError, RelayBalance, RelayClient, RelayClientOptions, RelayContractCall, RelayDrawerDirection, RelayHex, RelayRecoveryAction, RelayRecoveryQueryKey, RelayRecoveryQueryOptions, RelayRecoveryState, RelayRecoveryStep, RelayTheme, RelayTxRequest, RelayWalletProps, SendTransactionArgs, SendTransactionFn, SkillsButton, SkillsButtonProps, SkillsButtonStyle, UseRelayConfigOptions, UseRelayConfigResult, UseRelayOrdersOptions, UseRelayOrdersResult, UseRelayRecoveryOptions, UseRelayRecoveryResult, WalletInfo, WalletInfoContentProps, WalletInfoProps, WalletInfoStyle, WalletInfoTriggerProps, createRelayClient, useGlobalMenu, useRelayConfig, useRelayOrders, useRelayRecovery } from '@nexus-cross/dapp-ui';
|
|
9
9
|
import { Connector } from 'wagmi';
|
|
10
|
+
import { PopEnvironment } from '@nexus-cross/pop/api';
|
|
10
11
|
export { OnRampProvider, OnRampProviderProps, UseOnRampEligibilityOptions, UseOnRampEligibilityResult, UseOnRampOptions, UseOnRampResult, useOnRamp, useOnRampEligibility } from '@nexus-cross/onramp/react';
|
|
11
12
|
export { KycError, KycErrorCode, KycIdentity, KycLaunchTarget, KycLoginType, KycProvider, KycProviderProps, KycRejectType, KycStatus, KycVerificationHandle, KycVerificationMode, LaunchKycVerificationOptions, UseKycOptions, UseKycResult, launchKycVerification, useKyc, useOptionalKyc } from '@nexus-cross/kyc/react';
|
|
12
13
|
|
|
@@ -128,7 +129,26 @@ interface ConnectButtonProps extends ForwardedWalletInfoProps {
|
|
|
128
129
|
*/
|
|
129
130
|
onRampRedirectUrl?: string;
|
|
130
131
|
}
|
|
131
|
-
|
|
132
|
+
/**
|
|
133
|
+
* `ConnectButton`은 내부에서 `WalletInfo`를 조립하지만, 호출측은 그 사실을
|
|
134
|
+
* 몰라도 되도록 `WalletInfoProps`를 전부 pass-through 한다
|
|
135
|
+
* (`walletAddress` / `children` 만 제외).
|
|
136
|
+
*
|
|
137
|
+
* 자동 계산 규칙 (명시적으로 주면 덮어쓰기):
|
|
138
|
+
* - `walletAddress` ← `user.address` ?? wagmi `address`
|
|
139
|
+
* - `connectorId` ← `user.provider` ?? `currentWallet` 매핑
|
|
140
|
+
* - `accountName` ← `user.name` ?? crossy-sdk getAddresses name
|
|
141
|
+
* - `onDisconnect` ← kit `disconnect()`
|
|
142
|
+
* - `onSelectWallet` ← OAuth embedded 세션일 때만 kit `selectWallet()`
|
|
143
|
+
* (외부 지갑은 기본 alert을 막기 위해 CSS로 숨김)
|
|
144
|
+
* - `showPortfolio` ← `portfolio` ?? `showPortfolio` ?? legacy `enablePortfolio`
|
|
145
|
+
* - `theme` ← kit provider의 `themeMode`
|
|
146
|
+
* - `env` ← `NEXT_PUBLIC_CROSSX_ENVIRONMENT`, or `"production"`
|
|
147
|
+
*
|
|
148
|
+
* Trigger 버튼(주소 옆 pill)은 호출측이 건드릴 수 없다 — 플랫폼 아이콘 + 축약
|
|
149
|
+
* 주소의 통일된 UX를 강제한다.
|
|
150
|
+
*/
|
|
151
|
+
declare function ConnectButton({ label, className, style, walletInfoStyle, user, enablePortfolio, portfolio, theme: themeProp, accountName: accountNameProp, connectorId: connectorIdProp, showPortfolio: showPortfolioProp, sendAccounts: sendAccountsProp, getTransactionReceipt: getTransactionReceiptProp, sendTransaction: sendTransactionProp, estimateGas: estimateGasProp, onDisconnect: onDisconnectProp, onSelectWallet: onSelectWalletProp, onBuy: onBuyProp, onRampRedirectUrl, onePopSummary: onePopSummaryProp, onOnePopOpen: onOnePopOpenProp, showOnePop: showOnePopProp, bridgeTokens: bridgeTokensProp, bridgeHistory: bridgeHistoryProp, getBridgeQuote: getBridgeQuoteProp, getBridgeToTokens: getBridgeToTokensProp, getBridgeApproval: getBridgeApprovalProp, approveBridge: approveBridgeProp, submitBridge: submitBridgeProp, showBalance, env, ...walletInfoRest }: ConnectButtonProps): react_jsx_runtime.JSX.Element;
|
|
132
152
|
|
|
133
153
|
interface OtherWalletsModalProps {
|
|
134
154
|
open: boolean;
|
|
@@ -169,6 +189,140 @@ interface CrossConnectModalProps {
|
|
|
169
189
|
*/
|
|
170
190
|
declare function CrossConnectModal({ open, onOpenChange, }: CrossConnectModalProps): react_jsx_runtime.JSX.Element;
|
|
171
191
|
|
|
192
|
+
/**
|
|
193
|
+
* Derives the `RelayWalletProps` bundle that `<RelayDeposit>` consumes from the
|
|
194
|
+
* host's wagmi config + connected account.
|
|
195
|
+
*
|
|
196
|
+
* Every function on the returned object is stable across renders. This is
|
|
197
|
+
* load-bearing, not a micro-optimisation: `useDepositAddress` keys its
|
|
198
|
+
* balance-fetch and receipt-wait effects off the *identity* of
|
|
199
|
+
* `getBalance` / `waitForReceipt` (deps `[getBalance, address, origin, …]` and
|
|
200
|
+
* `[txHash, waitForReceipt]`), so an inline object literal here would re-fire
|
|
201
|
+
* those effects on every render — a request loop.
|
|
202
|
+
*
|
|
203
|
+
* Deliberately TWO memos. The functions are keyed only on what they actually
|
|
204
|
+
* close over (`config`, `hasBsc`, and the hooks' `*Async` mutate fns, all of
|
|
205
|
+
* which wagmi keeps referentially stable); `address`/`chainId` are merged in
|
|
206
|
+
* afterwards. None of the six functions reads either value — each call carries
|
|
207
|
+
* its own `chainId`/`address` argument — so folding them into the function memo
|
|
208
|
+
* would re-identify all six on every wallet account/chain change for no reason,
|
|
209
|
+
* with two real consequences:
|
|
210
|
+
*
|
|
211
|
+
* 1. `getBalance` re-identifies → the balance effect refetches (3 RPC reads)
|
|
212
|
+
* on every chain switch, i.e. on every one-click deposit, which switches
|
|
213
|
+
* chain as its first step.
|
|
214
|
+
* 2. `waitForReceipt` re-identifies mid-wait → the receipt effect re-runs with
|
|
215
|
+
* the OLD `txHash` against the NEW `origin.chainId`, reporting a landed
|
|
216
|
+
* deposit as failed. This is precisely the retarget hazard those narrow
|
|
217
|
+
* effect deps exist to avoid.
|
|
218
|
+
*
|
|
219
|
+
* Splitting is safe because dapp-ui keys its effects on the individual function
|
|
220
|
+
* props, never on the bundle's own identity.
|
|
221
|
+
*/
|
|
222
|
+
declare function useRelayWalletProps(): RelayWalletProps;
|
|
223
|
+
/**
|
|
224
|
+
* Everything `<RelayDeposit>` accepts except the wallet capabilities — those are
|
|
225
|
+
* derived from wagmi. Passing them explicitly is intentionally not allowed:
|
|
226
|
+
* this wrapper exists so the DApp never has to.
|
|
227
|
+
*/
|
|
228
|
+
type CrossRelayDepositProps = Omit<RelayDepositProps, keyof RelayWalletProps | 'requireWalletConnection'>;
|
|
229
|
+
declare function CrossRelayDepositRoot(props: CrossRelayDepositProps): react_jsx_runtime.JSX.Element;
|
|
230
|
+
/**
|
|
231
|
+
* wagmi-wired `<RelayDeposit>`: the cross-chain deposit modal with
|
|
232
|
+
* `sendTransaction` / `writeContract` / balance reads / chain switching already
|
|
233
|
+
* bound to the host's wagmi config. The recipient is always pinned to the
|
|
234
|
+
* valid connected account; disconnect clears the address/quote/live reads.
|
|
235
|
+
*
|
|
236
|
+
* ```tsx
|
|
237
|
+
* <CrossRelayDeposit apiBaseUrl="https://relay.example.com">
|
|
238
|
+
* <CrossRelayDeposit.Trigger><button>Deposit</button></CrossRelayDeposit.Trigger>
|
|
239
|
+
* <CrossRelayDeposit.Content />
|
|
240
|
+
* </CrossRelayDeposit>
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
243
|
+
* `.Trigger` / `.Content` are dapp-ui's own subcomponents, re-exposed unchanged
|
|
244
|
+
* so hosts don't need a second import (and so `<CrossRelayDeposit.Content>`
|
|
245
|
+
* still reads the same `RelayDepositContext` the root provides).
|
|
246
|
+
*
|
|
247
|
+
* The annotation is kept explicit even though dapp-ui's barrel now exports
|
|
248
|
+
* `RelayDepositTriggerProps` / `RelayDepositContentProps` (so TS4023 no longer
|
|
249
|
+
* applies): `Pick<typeof RelayDeposit, …>` states the compound shape by
|
|
250
|
+
* referring to the imported value, which stays correct without this file having
|
|
251
|
+
* to track those prop types by name.
|
|
252
|
+
*/
|
|
253
|
+
declare const CrossRelayDeposit: typeof CrossRelayDepositRoot & Pick<typeof RelayDeposit, 'Trigger' | 'Content'>;
|
|
254
|
+
|
|
255
|
+
type ManagedBridgeKey = "history" | "getQuote" | "getToTokens" | "getApproval" | "approveBridge" | "submitBridge";
|
|
256
|
+
type CrossGetOneUsdBridgeOptions = Omit<GetOneUsdBridgeProps, ManagedBridgeKey>;
|
|
257
|
+
type CrossGetOneUsdRelayProps = Omit<GetOneUsdRelayProps, keyof RelayWalletProps>;
|
|
258
|
+
interface CrossGetOneUsdProps extends Omit<GetOneUsdProps, "walletAddress" | "tokens" | "pairs" | "loading" | "bridge" | "relay"> {
|
|
259
|
+
/** Override the standard pairs resolved from remote contracts.json. */
|
|
260
|
+
pairs?: GetOneUsdPairs;
|
|
261
|
+
bridgeOptions?: CrossGetOneUsdBridgeOptions;
|
|
262
|
+
relay?: CrossGetOneUsdRelayProps;
|
|
263
|
+
restoreChainAfterSwitch?: boolean;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Turn-key Get ONEUSD widget. CrossD quote/submit ports and Relay wallet
|
|
267
|
+
* capabilities are derived from the surrounding CrossConnectKitProvider.
|
|
268
|
+
*/
|
|
269
|
+
declare function CrossGetOneUsd({ env, pairs, bridgeOptions, relay, restoreChainAfterSwitch, waitForTransaction, onRequestConnect, ...props }: CrossGetOneUsdProps): react_jsx_runtime.JSX.Element;
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Everything `<RelayHistory>` accepts except `walletAddress`, which comes from
|
|
273
|
+
* wagmi. `recipient` is still accepted and still wins — the history subject can
|
|
274
|
+
* legitimately be an address other than the connected one.
|
|
275
|
+
*/
|
|
276
|
+
type CrossRelayHistoryProps = Omit<RelayHistoryProps, 'walletAddress'>;
|
|
277
|
+
declare function CrossRelayHistoryRoot(props: CrossRelayHistoryProps): react_jsx_runtime.JSX.Element;
|
|
278
|
+
/**
|
|
279
|
+
* wagmi-wired `<RelayHistory>`: the transfer-history modal, defaulted to the
|
|
280
|
+
* connected account.
|
|
281
|
+
*
|
|
282
|
+
* ```tsx
|
|
283
|
+
* <CrossRelayHistory apiBaseUrl="https://relay.example.com">
|
|
284
|
+
* <CrossRelayHistory.Trigger><button>History</button></CrossRelayHistory.Trigger>
|
|
285
|
+
* <CrossRelayHistory.Content />
|
|
286
|
+
* </CrossRelayHistory>
|
|
287
|
+
* ```
|
|
288
|
+
*
|
|
289
|
+
* Explicitly annotated for the same reason as `CrossRelayDeposit`: dapp-ui's
|
|
290
|
+
* barrel does export `RelayHistoryTriggerProps` / `RelayHistoryContentProps`
|
|
291
|
+
* now, but naming the compound shape via `Pick<typeof RelayHistory, …>` keeps
|
|
292
|
+
* the emitted `.d.ts` correct without tracking those prop types here.
|
|
293
|
+
*/
|
|
294
|
+
declare const CrossRelayHistory: typeof CrossRelayHistoryRoot & Pick<typeof RelayHistory, 'Trigger' | 'Content'>;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Everything `<RelayRecovery>` accepts except the wallet capabilities — those are
|
|
298
|
+
* derived from wagmi. Passing them explicitly is intentionally not allowed:
|
|
299
|
+
* this wrapper exists so the DApp never has to. Recovery is pinned to the
|
|
300
|
+
* connected address; a supplied `recipient` may only assert the same address.
|
|
301
|
+
*/
|
|
302
|
+
type CrossRelayRecoveryProps = Omit<RelayRecoveryProps, keyof RelayWalletProps>;
|
|
303
|
+
declare function CrossRelayRecoveryRoot(props: CrossRelayRecoveryProps): react_jsx_runtime.JSX.Element;
|
|
304
|
+
/**
|
|
305
|
+
* wagmi-wired `<RelayRecovery>`: the standalone "Recover stuck funds" modal,
|
|
306
|
+
* defaulted to the connected account, with `writeContract` / `readContract` /
|
|
307
|
+
* `waitForReceipt` / chain switching already bound to the host's wagmi config.
|
|
308
|
+
*
|
|
309
|
+
* ```tsx
|
|
310
|
+
* <CrossRelayRecovery apiBaseUrl="https://relay.example.com">
|
|
311
|
+
* <CrossRelayRecovery.Trigger><button>Recover funds</button></CrossRelayRecovery.Trigger>
|
|
312
|
+
* <CrossRelayRecovery.Content />
|
|
313
|
+
* </CrossRelayRecovery>
|
|
314
|
+
* ```
|
|
315
|
+
*
|
|
316
|
+
* Independent of `<CrossRelayDeposit>`'s own `showRecovery` gear — a host may
|
|
317
|
+
* offer either, both, or neither.
|
|
318
|
+
*
|
|
319
|
+
* `.Trigger` / `.Content` are dapp-ui's own subcomponents, re-exposed unchanged
|
|
320
|
+
* so hosts don't need a second import (and so `<CrossRelayRecovery.Content>`
|
|
321
|
+
* still reads the same `RelayRecoveryContext` the root provides). Explicitly
|
|
322
|
+
* annotated for the same reason as `CrossRelayDeposit`.
|
|
323
|
+
*/
|
|
324
|
+
declare const CrossRelayRecovery: typeof CrossRelayRecoveryRoot & Pick<typeof RelayRecovery, 'Trigger' | 'Content'>;
|
|
325
|
+
|
|
172
326
|
interface CrossConnectKitContextValue {
|
|
173
327
|
kitConfig: CrossConnectKitConfig;
|
|
174
328
|
connectorRegistry: ConnectorRegistry;
|
|
@@ -345,10 +499,38 @@ declare function useCrossxEmbeddedInfo(args?: {
|
|
|
345
499
|
address?: string;
|
|
346
500
|
}): CrossxEmbeddedInfo;
|
|
347
501
|
|
|
502
|
+
/**
|
|
503
|
+
* Subscribe to connect-kit user-flow events.
|
|
504
|
+
*
|
|
505
|
+
* connect-kit EMITS events; it never collects them. The DApp is the
|
|
506
|
+
* collection owner — route the events wherever it wants (GA, Amplitude,
|
|
507
|
+
* a backend, …). Nothing leaves the page unless something subscribes.
|
|
508
|
+
*
|
|
509
|
+
* Multiple subscribers are allowed (e.g. a global analytics bridge plus a
|
|
510
|
+
* screen-local counter). The handler is held by ref, so passing a fresh
|
|
511
|
+
* closure each render does NOT re-subscribe — the latest closure is always
|
|
512
|
+
* the one invoked.
|
|
513
|
+
*
|
|
514
|
+
* PRIVACY: event payloads never contain an address, PIN, token, email,
|
|
515
|
+
* balance, or signature — only categorical values (walletId, walletType,
|
|
516
|
+
* chainId, reason, stage). See `docs/connect-kit/09-analytics-events.md`.
|
|
517
|
+
*
|
|
518
|
+
* @example
|
|
519
|
+
* useConnectKitAnalytics((e) => {
|
|
520
|
+
* if (e.name === 'connect_succeeded') {
|
|
521
|
+
* window.gtag?.('event', 'wallet_connected', {
|
|
522
|
+
* wallet: e.walletId, chain: e.chainId,
|
|
523
|
+
* });
|
|
524
|
+
* }
|
|
525
|
+
* });
|
|
526
|
+
*/
|
|
527
|
+
declare function useConnectKitAnalytics(handler: (event: ConnectKitEvent) => void): void;
|
|
528
|
+
|
|
348
529
|
type CrossdBridgeAdapterOptions = {
|
|
349
530
|
env: Environment;
|
|
350
531
|
walletAddress?: string;
|
|
351
532
|
enabled?: boolean;
|
|
533
|
+
restoreChainAfterSwitch?: boolean;
|
|
352
534
|
};
|
|
353
535
|
type CrossdBridgeAdapter = {
|
|
354
536
|
bridgeTokens: BridgeToken[];
|
|
@@ -358,8 +540,53 @@ type CrossdBridgeAdapter = {
|
|
|
358
540
|
getBridgeQuote: BridgeQuoteFn;
|
|
359
541
|
getBridgeToTokens: BridgeGetToTokensFn;
|
|
360
542
|
submitBridge: BridgeSubmitFn;
|
|
543
|
+
oneUsdPairs?: GetOneUsdPairs;
|
|
361
544
|
isLoading: boolean;
|
|
362
545
|
};
|
|
363
|
-
declare function useCrossdBridgeAdapter({ env, walletAddress, enabled, }: CrossdBridgeAdapterOptions): CrossdBridgeAdapter;
|
|
546
|
+
declare function useCrossdBridgeAdapter({ env, walletAddress, enabled, restoreChainAfterSwitch, }: CrossdBridgeAdapterOptions): CrossdBridgeAdapter;
|
|
547
|
+
|
|
548
|
+
declare const ONE_POP_SUMMARY_QUERY_KEY = "one-pop-summary";
|
|
549
|
+
/** 테스트/로그아웃 시 세션 토큰 폐기. */
|
|
550
|
+
declare function clearOnePopJwtCache(address?: string): void;
|
|
551
|
+
interface UseOnePopSummaryOptions {
|
|
552
|
+
/**
|
|
553
|
+
* true 가 되는 순간 조회를 시작한다(= SIWE 서명 요청). ONEpop 화면 진입
|
|
554
|
+
* 전에는 false 로 두어야 지갑 팝업이 뜨지 않는다.
|
|
555
|
+
*/
|
|
556
|
+
enabled?: boolean;
|
|
557
|
+
/**
|
|
558
|
+
* ONEpop 배포 환경. `/drops` 는 ERC20 token 필터가 **필수**라, 여기서 환경별
|
|
559
|
+
* 배포 프로필의 ONEUSD(permitErc20) 주소를 고른다. 미지정 시 pop 의
|
|
560
|
+
* 환경변수 규칙(`resolvePopEnvironment`).
|
|
561
|
+
*/
|
|
562
|
+
environment?: PopEnvironment;
|
|
563
|
+
/**
|
|
564
|
+
* `/drops` 에 넘길 ERC20 token 주소 override. 지정하면 `environment` 기반
|
|
565
|
+
* 프로필 조회를 건너뛴다. 주소를 결정할 수 없으면(예: production 프로필
|
|
566
|
+
* 미공개) drops 조회를 생략하고 히스토리만으로 화면을 구성한다.
|
|
567
|
+
*/
|
|
568
|
+
token?: string;
|
|
569
|
+
/** one-pop-api base URL override. 미지정 시 pop 의 환경변수 규칙. */
|
|
570
|
+
apiBaseUrl?: string;
|
|
571
|
+
/** cross-auth base URL override. */
|
|
572
|
+
authBaseUrl?: string;
|
|
573
|
+
/**
|
|
574
|
+
* SIWE JWT 공급자 override. 지정하면 내장 서명 플로우를 쓰지 않는다 —
|
|
575
|
+
* 이미 플랫폼 토큰을 들고 있는 DApp 용.
|
|
576
|
+
*/
|
|
577
|
+
getJwt?: () => string | undefined | Promise<string | undefined>;
|
|
578
|
+
/**
|
|
579
|
+
* "N replies waiting" 배너 카운트. one-pop-api 에 대응 개념이 없어
|
|
580
|
+
* 조회하지 않는다 — 값을 아는 DApp 만 넘긴다. 기본 0(배너 미표기).
|
|
581
|
+
*/
|
|
582
|
+
repliesWaitingCount?: number;
|
|
583
|
+
}
|
|
584
|
+
interface UseOnePopSummaryResult {
|
|
585
|
+
summary: OnePopSummary | undefined;
|
|
586
|
+
isLoading: boolean;
|
|
587
|
+
error: Error | null;
|
|
588
|
+
refetch: () => void;
|
|
589
|
+
}
|
|
590
|
+
declare function useOnePopSummary(options?: UseOnePopSummaryOptions): UseOnePopSummaryResult;
|
|
364
591
|
|
|
365
|
-
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 };
|
|
592
|
+
export { ConnectButton, type ConnectButtonProps, type CrossConnectKitContextValue, CrossConnectKitProvider, type CrossConnectKitProviderProps, type CrossConnectKitThemeContextValue, CrossConnectModal, type CrossConnectModalProps, CrossGetOneUsd, type CrossGetOneUsdBridgeOptions, type CrossGetOneUsdProps, type CrossGetOneUsdRelayProps, CrossRelayDeposit, type CrossRelayDepositProps, CrossRelayHistory, type CrossRelayHistoryProps, CrossRelayRecovery, type CrossRelayRecoveryProps, type CrossxEmbeddedInfo, ONE_POP_SUMMARY_QUERY_KEY, OtherWalletsModal, type OtherWalletsModalProps, type UseOnePopSummaryOptions, type UseOnePopSummaryResult, type WalletProvider, type WalletUser, clearOnePopJwtCache, useConnectKitAnalytics, useCrossConnectKit, useCrossConnectKitTheme, useCrossdBridgeAdapter, useCrossxEmbeddedInfo, useOnePopSummary, useOptionalCrossConnectKitTheme, useRelayWalletProps };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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-
|
|
1
|
+
import{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,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-FT6U2QDQ.js";export{C as AppLauncher,E as AppLauncherContent,D as AppLauncherTrigger,k as ConnectButton,O as ConnectionStatus,B as ConnectorId,e as CrossConnectKitProvider,d as CrossConnectModal,o as CrossGetOneUsd,n as CrossRelayDeposit,p as CrossRelayHistory,q as CrossRelayRecovery,J as DEFAULT_TRUSTED_FACTORIES,y as KycError,x as KycProvider,h as ONE_POP_SUMMARY_QUERY_KEY,N as OnRampError,u as OnRampProvider,l as OtherWalletsModal,I as RelayApiError,G as SkillsButton,A as WalletInfo,i as clearOnePopJwtCache,H as createRelayClient,P as formatBalance,Q as formatWei,z as launchKycVerification,r as useConnectKitAnalytics,a as useCrossConnectKit,b as useCrossConnectKitTheme,f as useCrossdBridgeAdapter,g as useCrossxEmbeddedInfo,F as useGlobalMenu,v as useKyc,s as useOnRamp,t as useOnRampEligibility,j as useOnePopSummary,c as useOptionalCrossConnectKitTheme,w as useOptionalKyc,K as useRelayConfig,L as useRelayOrders,M as useRelayRecovery,m as useRelayWalletProps};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexus-cross/connect-kit-react",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0-beta.2",
|
|
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,12 +24,13 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@nexus-cross/connect-kit-core": "2.
|
|
28
|
-
"@nexus-cross/connect-kit-wagmi": "2.
|
|
29
|
-
"@nexus-cross/crossx-design-system": "2.
|
|
30
|
-
"@nexus-cross/dapp-ui": "2.
|
|
31
|
-
"@nexus-cross/kyc": "
|
|
32
|
-
"@nexus-cross/onramp": "2.
|
|
27
|
+
"@nexus-cross/connect-kit-core": "2.4.0-beta.2",
|
|
28
|
+
"@nexus-cross/connect-kit-wagmi": "2.4.0-beta.2",
|
|
29
|
+
"@nexus-cross/crossx-design-system": "2.4.0-beta.2",
|
|
30
|
+
"@nexus-cross/dapp-ui": "2.4.0-beta.2",
|
|
31
|
+
"@nexus-cross/kyc": "2.4.0-beta.2",
|
|
32
|
+
"@nexus-cross/onramp": "2.4.0-beta.2",
|
|
33
|
+
"@nexus-cross/pop": "2.4.0-beta.2"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@tanstack/react-query": "^5.60.0",
|
|
@@ -52,7 +53,8 @@
|
|
|
52
53
|
"scripts": {
|
|
53
54
|
"build": "tsup",
|
|
54
55
|
"dev": "tsup --watch",
|
|
55
|
-
"test": "
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"test:watch": "vitest",
|
|
56
58
|
"typecheck": "tsc --noEmit"
|
|
57
59
|
}
|
|
58
60
|
}
|
package/dist/chunk-KY6Y4KXG.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
var st="1.3.4";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 r=e.connectKitVersion??st;console.info(`[CROSSx App Launcher] connect-kit-react v${r} \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 ae,useMemo as _e,useRef as De,useState as We}from"react";import{WagmiProvider as or,useAccount as sr,useChainId as ir,useConnect as ar,useDisconnect as cr,useSwitchChain as dr}from"wagmi";import{QueryClient as lr,QueryClientProvider as ur}from"@tanstack/react-query";import{clearWalletSessionStorage as jt,onOpenOtherWallets as mr,pickInitialState as pr,resolveCurrentWallet as fr}from"@nexus-cross/connect-kit-wagmi";import{resolveThemeMode as gr}from"@nexus-cross/connect-kit-core";import{buildDesignSystemCss as br}from"@nexus-cross/crossx-design-system";import{OnRampProvider as yr}from"@nexus-cross/onramp/react";import{KycProvider as wr}from"@nexus-cross/kyc/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 er,useContext as Vt}from"react";var ft=er(null);function tr(){let e=Vt(ft);if(!e)throw new Error("useCrossConnectKitTheme must be used within <CrossConnectKitProvider>");return e}function it(){return Vt(ft)}import{useCallback as nr,useMemo as Ht}from"react";import{WalletConnectModal as zt}from"@nexus-cross/dapp-ui";import{jsx as Qt}from"react/jsx-runtime";var rr=new Set(["cross_wallet","cross_extension","metamask","binance"]);function Tt({open:e,onOpenChange:t}){let{connect:r,availableWallets:s,oauth:n,extraWallets:a,walletAllowlist:f,kitConfig:p}=Be(),m=it()?.mode??"dark",w=Ht(()=>{let u=f?new Set(f):null,T={};for(let A of s){if(!rr.has(A.walletId)||u&&!u.has(A.walletId))continue;let h=A.walletId;T[h]=()=>{r(A.walletId)}}for(let[A,h]of Object.entries(a))h&&(u&&!u.has(A)||(T[A]=h));return T},[s,r,a,f]),I=Ht(()=>{if(n)return{apple:()=>{n.signIn("apple")},google:()=>{n.signIn("google")}}},[n]),S=nr(u=>t(u),[t]);return Qt(zt,{wallets:w,socialProviders:I,termsUrl:p.legal?.termsUrl,privacyUrl:p.legal?.privacyUrl,theme:m,open:e,onOpenChange:S,children:Qt(zt.Content,{})})}import{jsx as Qe,jsxs as Zt}from"react/jsx-runtime";var hr=new lr,It="crossx-kit:last-wallet-intent",Cr=15e3;function Xt(e,t){return Promise.race([e.then(()=>{},()=>{}),new Promise(r=>setTimeout(r,t))])}function kr(e){let t=[],r=e,s=0;for(;r&&s<5;){let n=r;typeof n.message=="string"&&t.push(n.message),r=n.cause,s+=1}return t.some(n=>/external wallet connection/i.test(n))}function xr(){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 Tr(e,t){if(typeof window>"u")return t;try{let r=window.localStorage.getItem(e);return r==="cross"||r==="reown"?r:t}catch{return t}}function Ir(e,t){if(!(typeof window>"u"))try{window.localStorage.setItem(e,t)}catch{}}function Sr({children:e,config:t,activeProvider:r,onRequestProviderSwap:s,pendingConnectWalletId:n,clearPending:a,themeMode:f,themeTokens:p,extraWallets:g,walletAllowlist:m}){let[w,I]=We(!1),[S,u]=We(()=>xr()),[T,A]=We(null),{address:h,isConnected:C,isConnecting:E,isReconnecting:D,connector:$}=sr(),{connectors:te,connectAsync:X}=ar(),{disconnectAsync:V}=cr(),{kitConfig:N,connectorRegistry:U,crossProvider:ye,reownProvider:F}=t,R=r==="cross"?ye:F,L=_e(()=>!C||!$?null:fr(U,$.id,S),[C,$,U,S]),we=_e(()=>U.entries.filter(l=>l.type!=="embedded"),[U]),Ke=De(h);Ke.current=h;let Z=N.embeddedProjectId?.trim()||N.crossProjectId?.trim(),z=!!N.onRampEnabled&&!!Z,ue=_e(()=>!z||!Z?null:{projectId:Z,walletState:{getAddress:()=>Ke.current}},[z,Z]),xe=De($);xe.current=$;let Te=N.embeddedProjectId?.trim()||N.crossProjectId?.trim(),Ne=!!N.kycEnabled&&!!Te,$e=_e(()=>!Ne||!Te?null:{projectId:Te,getAccessToken:async()=>{let l=xe.current;if(!(!l||typeof l.getProvider!="function"))try{return(await(await l.getProvider())?.sdk?.getUserInfo?.())?.data?.accessToken||void 0}catch{return}}},[Ne,Te]);ae(()=>mr(()=>I(!0)),[]),ae(()=>{if(!w||typeof document>"u")return;let l=setTimeout(()=>{document.querySelectorAll("#__crossx-confirm-overlay").forEach(b=>b.remove())},50);return()=>clearTimeout(l)},[w]);let Ie=De(C),ge=De(C);Ie.current=C;let Ze=De(!1);ae(()=>{console.debug("[crossx-kit] state",{activeProvider:r,isConnected:C,isConnecting:E,isReconnecting:D,activeConnectorId:$?.id,currentWallet:L,lastIntent:S})},[r,C,E,D,$?.id,L,S]),ae(()=>{C&&!ge.current&&R?.closeModal?.({kitConfig:N}),ge.current=C},[C,R,N]),ae(()=>{C&&A(null)},[C]);let qe=ir(),{switchChainAsync:Ve}=dr(),Se=De(null);ae(()=>{if(!N.enforceDefaultNetworkOnConnect)return;let l=N.defaultNetwork?.id;if(!l)return;if(!C||!h||!$){Se.current=null;return}let b=`${$.id}:${h}`;Se.current!==b&&(Se.current=b,qe!==l&&Ve({chainId:l}).catch(()=>{}))},[N.enforceDefaultNetworkOnConnect,N.defaultNetwork,C,h,$,qe,Ve]);let o=ve(l=>te.find(b=>b.id===l),[te]);ae(()=>{let l=U.getEntry("cross_embedded");if(!l)return;let b=o(l.connectorId);if(!b)return;let v=!1;return(async()=>{try{let y=await b.getProvider();if(v)return;y?.sdk?.applyTheme?.(f,p??void 0)}catch(y){console.debug("[crossx-kit] applyTheme skipped:",y)}})(),()=>{v=!0}},[U,o,f,p]);let i=ve(l=>{u(l),Yt(l)},[]),c=ve(()=>{u(null),Yt(null),A(null)},[]);ae(()=>{if(!R?.subscribeModalState)return;let l=!1;return R.subscribeModalState({kitConfig:N},b=>{if(Ze.current=b,b){l=!0;return}l&&(l=!1,setTimeout(()=>{Ie.current||(async()=>{try{await V()}catch{}c()})()},250))})},[R,N,V,c]),ae(()=>{if(!T||C||typeof window>"u"||T==="cross_embedded")return;let l=typeof document<"u"&&!document.hasFocus(),b=null,v=()=>{l=!0},y=()=>{l&&(b&&clearTimeout(b),b=setTimeout(()=>{Ie.current||Ze.current||(async()=>{try{await V()}catch{}c()})()},1e3))};return window.addEventListener("blur",v),window.addEventListener("focus",y),()=>{window.removeEventListener("blur",v),window.removeEventListener("focus",y),b&&clearTimeout(b)}},[T,C,V,c]);let d=ve(async l=>{console.debug("[crossx-kit] runConnect enter",{walletId:l,activeProvider:r,isConnected:C,activeConnectorId:$?.id});let b=U.getEntry(l);if(!b){if((l==="metamask"||l==="binance")&&!F){console.error(`[crossx-kit] "${l}" 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: "${l}"`);return}if(A(l),b.providerKind!==r){console.debug("[crossx-kit] provider swap needed",{from:r,to:b.providerKind,walletId:l}),i(l);try{await V()}catch{}await new Promise(y=>setTimeout(y,0)),s(b.providerKind,l);return}if(i(l),R?.beforeConnect)try{let y=await R.beforeConnect({kitConfig:N,themeMode:f},l);if(console.debug("[crossx-kit] beforeConnect result",{walletId:l,result:y}),y==="handled")return}catch(y){console.warn('[crossx-kit] adapter.beforeConnect threw for "%s":',l,y)}let v=o(b.connectorId);if(console.debug("[crossx-kit] findConnector",{lookupId:b.connectorId,found:v?.id,availableIds:te.map(y=>y.id)}),!v){console.error(`[crossx-kit] Connector "${b.connectorId}" not found on provider "${b.providerKind}". Available: ${te.map(y=>y.id).join(", ")}`),c();return}try{console.debug("[crossx-kit] connectAsync start",{connectorId:v.id});let y=await X({connector:v});console.debug("[crossx-kit] connectAsync resolved",{accountsLen:y.accounts.length,chainId:y.chainId});return}catch(y){if(!kr(y)){console.error('[crossx-kit] connectAsync error for "%s":',l,y);try{await V()}catch{}}if(!b.fallbackConnectorId){c();return}}if(b.fallbackConnectorId){let y=o(b.fallbackConnectorId);if(y)try{await X({connector:y})}catch(K){console.error('[crossx-kit] Fallback connect failed for "%s":',l,K);try{await V()}catch{}c()}else c()}},[U,te,o,X,V,i,c,R,r,N,s,f]);ae(()=>{if(!n)return;let l=n;a(),d(l)},[n,r]);let k=ve(async()=>{I(!0)},[]),P=ve(async()=>{try{await V()}catch(l){console.error("[crossx-kit] wagmi disconnect error:",l)}if(R?.teardown)try{await R.teardown({kitConfig:N})}catch(l){console.error("[crossx-kit] adapter teardown error:",l)}jt(),c()},[V,R,N,c]),B=ve(async()=>{await Xt(V(),3e3);try{let l=U.getEntry("cross_embedded"),b=l&&o(l.connectorId);if(b?.getProvider){let v=await Promise.race([b.getProvider(),new Promise(K=>setTimeout(K,3e3))]),y=v?.sdk?.signOut;typeof y=="function"&&await Xt(y.call(v.sdk),3e3)}}catch{}jt()},[U,o,V]),_=ve(async()=>{let l=U.getEntry("cross_embedded");if(!l)return null;let b=o(l.connectorId);if(!b)return null;try{let v=await b.getProvider(),y=v?.sdk;if(!y?.selectWallet)return null;let K=await y.selectWallet(y.currentAddress??void 0);return K?.address&&v.notifyAccountsChanged&&v.notifyAccountsChanged([K.address]),K}catch{return null}},[U,o]),W=_e(()=>{let l=t.oauth;return l?{signIn:async b=>{A("cross_embedded");try{await l.signIn(b)}catch(v){throw A(null),v}}}:null},[t.oauth]),Q=De(!1);ae(()=>{if(r!=="cross"||C||E||D||T!=null||Q.current)return;let l=U.getEntry("cross_embedded");if(!l)return;let b=o(l.connectorId);if(!b)return;Q.current=!0;let v=!1;return(async()=>{try{let y=await b.isAuthorized?.();if(v||!y)return;await X({connector:b})}catch{}})(),()=>{v=!0}},[r,C,E,D,T,U,o,X]),ae(()=>{if(T!=="cross_embedded"||C||typeof window>"u")return;let l=!document.hasFocus(),b=()=>{l=!0};window.addEventListener("blur",b);let v=setTimeout(()=>{Ie.current||l||(console.warn("[crossx-kit] embedded sign-in stalled before the OAuth popup opened \u2014 clearing the stale session so a retry starts clean"),c(),B())},Cr);return()=>{window.removeEventListener("blur",b),clearTimeout(v)}},[T,C,c,B]);let x=T!=null&&!C,O=_e(()=>({kitConfig:N,connectorRegistry:U,availableWallets:we,connect:d,connectWallet:k,disconnect:P,selectWallet:_,currentWallet:L,lastIntent:S,isConnecting:x,connectingWalletId:T,openOtherWallets:()=>I(!0),closeOtherWallets:()=>I(!1),otherWalletsOpen:w,oauth:W,extraWallets:g,walletAllowlist:m,onRampEnabled:z}),[N,U,we,d,k,P,_,L,S,x,T,w,W,g,m,z]),G=Zt(xt.Provider,{value:O,children:[e,Qe(Tt,{open:w,onOpenChange:I})]});return $e&&(G=Qe(wr,{config:$e,children:G})),ue&&(G=Qe(yr,{config:ue,children:G})),G}var vr=[/Connection interrupted while trying to subscribe/i,/No matching key\. subscription:/i,/Proposal expired/i];function Pr(e){let t=e?.message;return typeof t!="string"?!1:vr.some(r=>r.test(t))}var Ar={};function Rr(e){return e&&{...e,connections:new Map,current:null}}function Br({children:e,config:t,initialState:r,extraWallets:s=Ar,walletAllowlist:n}){let[a,f]=We(()=>Tr(t.activeProviderStorageKey,t.defaultProvider)),[p,g]=We(null),m=De(!1),{kitConfig:w}=t,[I,S]=We(null),[u,T]=We(null),[A,h]=We(0),C=_e(()=>gr(w.theme,w.autoDetectTheme),[w.theme,w.autoDetectTheme,A]),E=I??C,D=u??w.themeTokens;ae(()=>{if(!w.autoDetectTheme||I||typeof window>"u"||!window.matchMedia)return;let F=window.matchMedia("(prefers-color-scheme: dark)"),R=()=>h(L=>L+1);try{return F.addEventListener("change",R),()=>F.removeEventListener("change",R)}catch{return F.addListener(R),()=>F.removeListener(R)}},[w.autoDetectTheme,I]),ae(()=>{if(typeof document>"u")return;let F=document.documentElement,R=F.getAttribute("data-ds-theme"),L=F.getAttribute("data-theme");return F.setAttribute("data-ds-theme",E),L||F.setAttribute("data-theme",E),()=>{R==null?F.removeAttribute("data-ds-theme"):F.setAttribute("data-ds-theme",R),L==null&&F.removeAttribute("data-theme")}},[E]);let $=_e(()=>br(t.designSystem),[t.designSystem]),te=_e(()=>({mode:E,tokens:D,setThemeMode:F=>S(F),setThemeTokens:F=>T(F)}),[E,D]);ae(()=>{if(typeof window>"u")return;let F=R=>{Pr(R.reason)&&R.preventDefault()};return window.addEventListener("unhandledrejection",F),()=>window.removeEventListener("unhandledrejection",F)},[]);let X=ve((F,R)=>{m.current||(m.current=!0,g(R),f(F),Ir(t.activeProviderStorageKey,F),queueMicrotask(()=>{m.current=!1}))},[t.activeProviderStorageKey]),V=ve(()=>g(null),[]),N=a==="cross"?t.crossWagmiConfig:t.reownWagmiConfig,U=Rr(pr(r,a));if(!N){if(!(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig))throw new Error("[crossx-kit] createCrossxConfig returned no wagmi Config for either side");let R=a==="cross"?"reown":"cross";queueMicrotask(()=>f(R))}let ye=N??(a==="cross"?t.reownWagmiConfig:t.crossWagmiConfig);return Zt(ft.Provider,{value:te,children:[Qe("style",{"data-crossx-design-system":"",children:$}),Qe(or,{config:ye,initialState:U,children:Qe(ur,{client:hr,children:Qe(Sr,{config:t,activeProvider:a,onRequestProviderSwap:X,pendingConnectWalletId:p,clearPending:V,themeMode:E,themeTokens:D,extraWallets:s,walletAllowlist:n??t.kitConfig.wallets??null,children:e})})},a)]})}import{useCallback as Ge,useEffect as Bo,useMemo as lt}from"react";import{useQueryClient as _o}from"@tanstack/react-query";import{useAccount as Eo,useChainId as Oo,useConfig as No,useSendTransaction as Fo,useSwitchChain as Do}from"wagmi";import{getPublicClient as Et,readContracts as Tn}from"wagmi/actions";import{WalletInfo as Ot,ConnectorId as Ue,resolveEnvironment as Wo}from"@nexus-cross/dapp-ui";import{useOptionalOnRamp as Lo,useOptionalOnRampEligibility as Mo}from"@nexus-cross/onramp/react";import{APPLE_ICON as Wt,BINANCE_ICON as vn,CROSSX_ICON as Dt,EXTENSION_ICON as Go,GOOGLE_ICON as Pn,METAMASK_ICON as An}from"@nexus-cross/connect-kit-wagmi";import{useCallback as oe,useMemo as Pe,useRef as _r}from"react";import{useQueries as Jt,useQuery as nt}from"@tanstack/react-query";import{encodeFunctionData as at,formatUnits as wt,parseSignature as Er,parseUnits as Or}from"viem";import{getChainId as Nr,getPublicClient as pn,readContract as ke,signTypedData as Fr,switchChain as Dr,waitForTransactionReceipt as Wr,writeContract as en}from"wagmi/actions";import{useConfig as Lr}from"wagmi";function Mr(e){return e!=="bridge"}var fn="0x0000000000000000000000000000000000000000",be=100,ot=18,Gr=180000n,Ur=250000n,gn=new Set([56,97]),Kr=130n,$r=100n,qr={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"}]}],Vr=[{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"}]}],Ee=[{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:[]}],Hr=[{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 r=JSON.parse(t),s=typeof r.data=="string"&&r.data||typeof r.message=="string"&&r.message||"";if(s)return`${s} (status ${e.status})`}catch{}return`${t.slice(0,300)} (status ${e.status})`}return`status ${e.status}`}async function Le(e,t){let r=await fetch(e,{cache:"no-store",signal:t});if(!r.ok)throw new Error(`CrossD bridge adapter request failed: ${await bn(r)}`);let s=await r.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 rn(e,t,r){let s=await fetch(e,{method:"POST",cache:"no-store",signal:r,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 zr(e){return new Promise(t=>setTimeout(t,e))}async function Qr(e,t,{attempts:r=60,intervalMs:s=2e3}={}){for(let n=0;n<r;n+=1){try{let a=await Le(`${e}/permit-hash/${t}`);if(Rt(a))return a}catch{}await zr(s)}return null}function ee(e,t){return`${e}-${t.toLowerCase()}`}function ce(e){return ee(e.chainId,e.address)}function Ae(e){return e==="swap"||e==="deposit-swap"||e==="swap-withdraw"}function jr(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"",r=t.toLowerCase();return r.includes("quoteexactinputsingle")||r.includes("quoteexactoutputsingle")||r.includes("getamountswapbridgeout")||r.includes("getamountswapbridgein")||r.includes("execution reverted")?"Amount is too large for this route.":t.split(`
|
|
2
|
-
`)[0]?.trim()||"Failed to quote bridge."}function on(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,ot);return t.includes(".")?t.replace(/\.?0+$/,""):t}function dt(e){return Or(e||"0",ot)}function le(e){try{return dt(e||"0")}catch{return 0n}}function Me(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"?Gr:Ur}function sn(e,t){if(!e||!t)return"0";let r=e*e;if(r===0n)return"0";let s=t*t,n=s>r?s-r:r-s;if(n===0n)return"0";let a=(n*100000000n+r/2n)/r;if(a>=100000000n)return"100";let f=a/1000000n,p=(a%1000000n).toString().padStart(6,"0").replace(/0+$/,"");return p?`${f}.${p}`:`${f}`}function Xr(e){if(!e||Number(e)===0)return"0%";let[t,r=""]=e.split("."),s=r.length>4?r.slice(0,4):r;return s?`${t}.${s}%`:`${t}%`}async function an(e,t,r,s,n,a=!1){let f=pn(e,{chainId:t}),p=r;try{let m=await f?.estimateContractGas?.({account:n.account,address:n.address,abi:n.abi,functionName:n.functionName,args:n.args,value:n.value});typeof m=="bigint"&&m>0n&&(p=s?m*Kr/$r:m)}catch{}let g={gas:p};if(gn.has(t))try{let m=await f?.getGasPrice?.();typeof m=="bigint"&&m>0n&&(g.gasPrice=m)}catch{}else if(a)try{let m=await f?.estimateFeesPerGas?.();typeof m?.maxFeePerGas=="bigint"&&(g.maxFeePerGas=m.maxFeePerGas),typeof m?.maxPriorityFeePerGas=="bigint"&&(g.maxPriorityFeePerGas=m.maxPriorityFeePerGas)}catch{}return g}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 r=yn(t);return r>=10000n?0n:e*(10000n-r)/10000n}function Yr(e,t){let r=yn(t);return(e*(10000n+r)+9999n)/10000n}function ct(){return BigInt(Math.floor(Date.now()/1e3)+1800)}var Zr={100:"0.01%",500:"0.05%",3e3:"0.3%",1e4:"1%"};function Jr(e){return Zr[e]??`${e/1e4}%`}function eo(e,t){let r=Number(e||"0");return!Number.isFinite(r)||r<=0?"0":(r*t/1e6).toFixed(8).replace(/\.?0+$/,"")}function cn(e){return Xe(e)}function dn(e,t){let r=Number(t??"0");return!Number.isFinite(r)||r<=0?0n:e*BigInt(Math.floor(r))/1000n}function bt(e,t){if(!e)return!1;let r=e.toLowerCase();return t.some(s=>s.toLowerCase()===r)}function to(e,t,r){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(r,n.to)||bt(t,n.to)&&bt(r,n.from))}function no(e){if(Ae(e.type))return null;if(e.type==="swap-bridge"){let t=e.steps.find(r=>r.type==="bridge");return t?{from:t.fromChain,to:t.toChain,token:t.fromToken}:null}if(e.type==="bridge-swap"){let t=e.steps.find(r=>r.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 ro({input:e,path:t,config:r}){if(!r||Ae(t.type))return"";let s=Me(r.minimumValue),n=Me(r.gasFee??r.gas_fee),a=t.type==="swap-bridge"?s+n*12n/10n:s;return a<=0n?"":e.fromAmount&&le(e.fromAmount)<a&&t.type!=="swap"?`Minimum ${cn(a)}`:t.type==="swap-bridge"&&e.toAmount&&le(e.toAmount)<a?`Available ${cn(a)} or more.`:""}function oo({input:e,path:t,config:r}){if(!r||t.type!=="bridge"&&t.type!=="bridge-swap")return"";let s=Me(r.gasFee??r.gas_fee);if(s<=0n||!e.fromAmount)return"";let n=le(e.fromToken.balance||"0"),a=le(e.fromAmount);return n-s<a?`Insufficient network fee(${e.fromToken.symbol})`:""}function so(e,t){let r=new Set;return e?.list?.forEach(s=>{let n=s.localChain??s.local_chain;n&&Object.entries(s.pairs||{}).forEach(([a,f])=>{f.forEach(p=>{p.localToken&&r.add(ee(n,p.localToken)),p.remoteToken&&r.add(ee(Number(a),p.remoteToken))})})}),Object.entries(t?.swapPools||t?.swap_pools||{}).forEach(([s,n])=>{n.forEach(a=>{a.token0&&r.add(ee(Number(s),a.token0)),a.token1&&r.add(ee(Number(s),a.token1))})}),r}function io(e,t){return!e||!t?null:ee(e,t)}function ao({envConfig:e,bridgePairList:t,swapPools:r,tokenInfo:s,tokenStats:n}){let a=so(t,r),f=new Map;n?.forEach(g=>{let m=io(Number(g.chainId??g.chain_id),g.address);m&&f.set(m,g)});let p={};return a.forEach(g=>{let[m,w]=g.split("-"),I=Number(m),S=s?.find(T=>Number(T.chainId??T.chain_id)===I&&T.address?.toLowerCase()===w);if(!S?.symbol||!S.name)return;let u=f.get(g);p[g]={key:g,chainId:I,address:w,symbol:S.symbol,name:S.name,decimals:S.decimals||ot,image:S.image||S.icon_url,price:u?.price?Number(u.price):void 0,isNativeToken:w.toLowerCase()===e.contracts.NATIVE_CROSS.toLowerCase()}}),p}function wn(e,t){return t?.list?.find(r=>(r.localChain??r.local_chain)===e)?.bridge||""}function hn(e,t,r){let[s,n]=e.split("-"),[a,f]=t.split("-"),p=Number(s),g=Number(a);for(let m of r?.list||[]){if((m.localChain??m.local_chain)!==p)continue;let w=m.pairs?.[a];if(w){for(let I of w)if(I.localToken?.toLowerCase()===n&&I.remoteToken?.toLowerCase()===f)return{type:"bridge",fromChain:p,fromToken:n,toChain:g,toToken:f,bridgeAddress:wn(p,r)}}}return null}function Cn(e,t,r,s){let[n,a]=e.split("-"),[f,p]=t.split("-");if(n!==f)return null;let g=Number(n),m=(r?.swapPools||r?.swap_pools)?.[n];if(!m)return null;let w=s.contracts.W_CROSS.toLowerCase(),I=s.contracts.NATIVE_CROSS.toLowerCase(),S=u=>u?.toLowerCase()===w?I:u?.toLowerCase();for(let u of m){let T=S(u.token0),A=S(u.token1);if(T===a&&A===p||A===a&&T===p){let h="swap";return g===s.chainIds.cross&&(a===I&&(h="deposit-swap"),p===I&&(h="swap-withdraw")),{pathType:h,step:{type:"swap",chain:g,fromToken:a,toToken:p,fee:u.fee||be,poolAddress:u.poolAddress||u.pool_address||""}}}}return null}function co(e,t,r,s){let[n,a]=e.split("-"),[f]=t.split("-");if(n===f)return null;for(let p of(r?.swapPools||r?.swap_pools)?.[n]||[]){let g=p.token0?.toLowerCase(),m=p.token1?.toLowerCase(),w=g===a?m:m===a?g:null;if(!w)continue;let I=hn(ee(Number(n),w),t,s);if(I)return[{type:"swap",chain:Number(n),fromToken:a,toToken:w,fee:p.fee||be,poolAddress:p.poolAddress||p.pool_address||""},I]}return null}function lo(e,t,r,s,n){let[a,f]=e.split("-"),[p]=t.split("-");if(a===p)return null;for(let g of r?.list||[])if((g.localChain??g.local_chain)===Number(a))for(let m of g.pairs?.[p]||[]){if(m.localToken?.toLowerCase()!==f)continue;let w=m.remoteToken?.toLowerCase();if(!w)continue;let I=Cn(ee(Number(p),w),t,s,n);if(I)return[{type:"bridge",fromChain:Number(a),fromToken:f,toChain:Number(p),toToken:w,bridgeAddress:wn(Number(a),r)},I.step]}return null}function uo({envConfig:e,bridgePairList:t,swapPools:r,enrichedTokens:s}){return(n,a)=>{let f=s[n],p=s[a];if(!f||!p||n===a)return null;let g=hn(n,a,t);if(g)return{type:"bridge",steps:[g],from:f,to:p};let m=Cn(n,a,r,e);if(m)return{type:m.pathType,steps:[m.step],from:f,to:p};let w=co(n,a,r,t);if(w)return{type:"swap-bridge",steps:w,from:f,to:p};let I=lo(n,a,t,r,e);return I?{type:"bridge-swap",steps:I,from:f,to:p}: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 mo(e){return e.length<=10?e:`${e.slice(0,6)}...${e.slice(-4)}`}function po(e){return e.includes(".")?e.replace(/\.?0+$/,"")||"0":e}function fo(e,t){let r=e.startsWith("-"),s=r?e.slice(1):e,[n,a=""]=s.split("."),f=a.slice(0,t).replace(/0+$/,""),p=f?`${n}.${f}`:n;return r?`-${p}`:p}function go(e){let t=e.startsWith("-"),r=t?e.slice(1):e,[s,n]=r.split("."),a=s.replace(/\B(?=(\d{3})+(?!\d))/g,","),f=n?`${a}.${n}`:a;return t?`-${f}`:f}function At(e){if(e==null||e==="")return"0";let t=String(e),r=Number(t);return!Number.isFinite(r)||r===0?"0":go(fo(t,4))}function un(e,t){if(e==null||e==="")return"0";try{return po(wt(BigInt(String(e)),t.decimals))}catch{return"0"}}function Rt(e){return!!(e&&/^0x[0-9a-fA-F]+$/.test(e))}function bo(e){return e?new Date(e*1e3).toISOString():new Date().toISOString()}function yo(e,t){return t.toLowerCase()===e.contracts.W_CROSS.toLowerCase()?e.contracts.NATIVE_CROSS:t}function wo(e,t){let r=mo(t);return{name:r,symbol:r,chainId:e,address:t,decimals:ot,balance:"0"}}function mn({envConfig:e,tokenByBridgeKey:t,chainId:r,address:s}){if(!s)return null;let n=yo(e,s);return t.get(ee(r,n))||t.get(ee(r,s))||wo(r,n)}function yt(e){return e?.toLowerCase()||""}function ho(e){if(e.source==="swap")return"swap";let t=yt(e.fromToken??e.from_token),r=yt(e.toToken??e.to_token),s=yt(e.swapTokenIn??e.swap_token_in),n=yt(e.swapTokenOut??e.swap_token_out);return r&&s&&r===s?"bridge-swap":t&&n&&t===n?"swap-bridge":"bridge"}function Co(e,t){let r=e.status??0,s=e.extracallSuccess??e.extracall_success??!1;return t==="bridge-swap"&&r===1&&!s?"failed":r===1?"success":"pending"}function ko({envConfig:e,item:t,tokenByBridgeKey:r}){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=ho(t),f=t.swapTokenIn??t.swap_token_in,p=t.swapTokenOut??t.swap_token_out,g=t.swapAmountIn??t.swap_amount_in,m=t.swapAmountOut??t.swap_amount_out,w=t.fromToken??t.from_token,I=t.toToken??t.to_token,S=t.value,u=t.value;a==="swap"?(w=f,I=p,S=g,u=m):a==="swap-bridge"?(w=f,S=g,u=t.value):a==="bridge-swap"&&(I=p,S=g,u=m);let T=mn({envConfig:e,tokenByBridgeKey:r,chainId:s,address:w}),A=mn({envConfig:e,tokenByBridgeKey:r,chainId:n,address:I}),h=t.initiatedTxHash??t.initiated_tx_hash;return!T||!A||!Rt(h)?null:{id:`${h}-${t.index??""}`,timestamp:bo(t.initiatedTime??t.initiated_time),txHash:h,fromToken:T,toToken:A,fromAmount:un(S,T),toAmount:un(u,A),summary:{pathType:a},status:Co(t,a)}}function xo(e){let t=new Map;return e.flat().forEach(r=>{let s=Number(r.chainId??r.chain_id),n=r.address?.toLowerCase();if(!s||!n)return;let a=r.quantity?.numeric??r.balance??"0",f=r.quantity?.decimals??r.decimals??ot;try{t.set(ee(s,n),wt(BigInt(a||"0"),f))}catch{t.set(ee(s,n),"0")}}),t}function Oe(e,t="first"){let r=e.steps.filter(s=>s.type==="swap");return t==="last"?r[r.length-1]:r[0]}function To(e,t){let r=(e?.swapPools||e?.swap_pools)?.[String(t.chainIds.cross)];if(!r?.length)return"";let s=t.contracts.CROSSD.toLowerCase(),n=t.contracts.USDTX.toLowerCase(),a=r.find(f=>{let p=f.token0?.toLowerCase(),g=f.token1?.toLowerCase();return p===s&&g===n||p===n&&g===s});return a?.poolAddress||a?.pool_address||""}function Io(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 So(e){if(e===void 0)return;let t=10n**BigInt(ot),r=e>=50000n*t?"normal":e>10000n*t?"low":"rebalancing",s=Number(e>0n?e*100n/(100000n*t):0n);return{label:"Available Liquidity",status:r,percentage:Math.min(s,100)}}function rt(e,t,r,s){let n=[e.from,e.to].find(a=>a.chainId===t&&a.address.toLowerCase()===r.toLowerCase())??s?.[ee(t,r)];return{symbol:n?.symbol||r.slice(0,6),iconUrl:n?.image}}function vo(e,t){let r=[];for(let n of e.steps)n.type==="swap"?(r.push({chain:n.chain,address:n.fromToken}),r.push({chain:n.chain,address:n.toToken})):(r.push({chain:n.fromChain,address:n.fromToken}),r.push({chain:n.toChain,address:n.toToken}));let s=r.filter((n,a)=>a===0||!(n.chain===r[a-1].chain&&n.address.toLowerCase()===r[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=>rt(e,n.chain,n.address,t))}function Po({input:e,path:t,amountData:r,gasInfo:s,liquidity:n,enrichedTokens:a,priceImpact:f}){let p=e.fromAmount||"0",g=e.toAmount||"0",m=Oe(t),w=t.steps.find(D=>D.type==="bridge"),I=t.type!=="bridge",S=!Ae(t.type),u=m?eo(p,m.fee):"0",T=Number(p)>0||Number(g)>0,A=m?rt(t,m.chain,m.fromToken,a):{symbol:e.fromToken.symbol,iconUrl:e.fromToken.iconUrl},h=m?rt(t,m.chain,m.toToken,a):{symbol:e.toToken.symbol,iconUrl:e.toToken.iconUrl},C=w?rt(t,w.fromChain,w.fromToken,a):void 0,E=(D,$,te)=>T?$&&$>0n?{label:D,value:Xe($),tone:"default",valueToken:te}:{label:D,value:"Free",tone:"accent"}:{label:D,value:"0"};return{pathType:t.type,priceImpact:f,liquidity:n,bridgeInfo:S&&w?[{label:"Route",value:`${on(w.fromChain)} \u2192 ${on(w.toChain)}`},E("Validator Fee",r?.exFee,C),E("Network Fee",r?.networkFee,C)]:void 0,swapInfo:I&&m?[{label:"Route",value:"",routeTokens:[rt(t,m.chain,m.fromToken,a),rt(t,m.chain,m.toToken,a)]},{label:"Price Impact",value:Xr(f)},{label:"In Amount",value:At(p),valueToken:A},{label:m&&Ae(t.type)?`Swap Fee (${Jr(m.fee||be)})`:"Swap Fee",value:At(u),valueToken:A},{label:"Out Amount",value:At(g),valueToken:h}]: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:r=!0}){let s=Lr(),n=qr[e],a=r,f=_r(new Map),p=nt({queryKey:["crossd-bridge-adapter",e,"pairs"],queryFn:({signal:o})=>Le(`${n.bridgeApi}/pairs`,o),enabled:a,staleTime:3e4}),g=nt({queryKey:["crossd-bridge-adapter",e,"swap-pools"],queryFn:({signal:o})=>Le(`${n.bridgeApi}/swap-pools`,o),enabled:a,staleTime:3e4}),m=Pe(()=>To(g.data,n),[n,g.data]),w=nt({queryKey:["crossd-bridge-adapter",e,"available-liquidity",m],queryFn:async()=>await ke(s,{address:n.contracts.USDTX,abi:St,functionName:"balanceOf",args:[m],chainId:n.chainIds.cross}),enabled:a&&!!m,staleTime:3e4}),I=nt({queryKey:["crossd-bridge-adapter",e,"token-info"],queryFn:({signal:o})=>Le(`${n.walletApi}/v1/public/token/info`,o),enabled:a,staleTime:3e4}),S=nt({queryKey:["crossd-bridge-adapter",e,"token-stats"],queryFn:({signal:o})=>Le(`${n.walletApi}/v1/public/token/stats`,o),enabled:a,staleTime:3e4}),u=Jt({queries:[n.chainIds.cross,n.chainIds.bsc].map(o=>({queryKey:["crossd-bridge-adapter",e,"balance",t,o],queryFn:({signal:i})=>{let c=new URLSearchParams({networkId:`eip155:${o}`,account:t||""});return Le(`${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(o=>({queryKey:["crossd-bridge-adapter",e,"gas-suggestion",o],queryFn:async({signal:i})=>{try{let k=await pn(s,{chainId:o})?.estimateFeesPerGas?.();if(k?.maxFeePerGas||k?.gasPrice)return{fast:{maxFee:k.maxFeePerGas?.toString()||k.gasPrice?.toString(),maxPriorityFee:k.maxPriorityFeePerGas?.toString()||"0"}}}catch{}let c=new URLSearchParams({chain_id:String(o),without_gas_limit:"false"});return Le(`${n.walletApi}/v1/public/transaction/gas-suggestion/dynamic?${c}`,i)},enabled:a,staleTime:1e4,retry:1}))}),A=n.hiddenPairs,h=Pe(()=>ao({envConfig:n,bridgePairList:p.data,swapPools:g.data,tokenInfo:I.data,tokenStats:S.data}),[p.data,n,g.data,I.data,S.data]),C=Pe(()=>uo({envConfig:n,bridgePairList:p.data,swapPools:g.data,enrichedTokens:h}),[p.data,h,n,g.data]),E=Pe(()=>xo(u.map(o=>o.data).filter(o=>Array.isArray(o))),[u]),D=Pe(()=>{let o=new Map;return Object.values(h).forEach(i=>{let c=ln(i,E);o.set(i.key,c)}),o},[E,h]),$=Pe(()=>{let o=new Map,i=D.get(ee(n.chainIds.cross,n.contracts.NATIVE_CROSS));i&&o.set(n.chainIds.cross,{symbol:i.symbol,iconUrl:i.iconUrl});let c=I.data?.find(d=>Number(d.chainId??d.chain_id)===n.chainIds.bsc&&(d.symbol??"").toUpperCase()==="BNB");return c&&o.set(n.chainIds.bsc,{symbol:c.symbol??"BNB",iconUrl:c.image??c.icon_url}),o},[n,D,I.data]),te=nt({queryKey:["crossd-bridge-adapter",e,"history",t],queryFn:({signal:o})=>rn(`${n.bridgeApi}/history`,{owner:t,page:1,size:20,sort:"desc",status:"all"},o),enabled:a&&!!t,staleTime:0,refetchInterval:a&&t?5e3:!1}),X=Pe(()=>(te.data?.histories||[]).map(o=>ko({envConfig:n,item:o,tokenByBridgeKey:D})).filter(o=>!!o),[te.data?.histories,n,D]),V=Pe(()=>So(w.data),[w.data]),N=T[0]?.data,U=T[1]?.data,ye=Pe(()=>{let o=new Map;return N&&o.set(n.chainIds.cross,N),U&&o.set(n.chainIds.bsc,U),o},[U,N,n.chainIds.bsc,n.chainIds.cross]),F=oe((o,i,c)=>{let d=ye.get(o.from.chainId)?.fast,k=i?c?.gasLimit??gt(o.type):0n,P=c?.gasPrice&&c.gasPrice>0n?c.gasPrice:0n,B=c?.maxFeePerGas&&c.maxFeePerGas>0n?c.maxFeePerGas:0n,_=c?.maxPriorityFeePerGas&&c.maxPriorityFeePerGas>0n?c.maxPriorityFeePerGas:0n,W=Me(d?.maxFee??d?.max_fee),Q=Me(d?.maxPriorityFee??d?.max_priority_fee),x=B>0n?B:W>0n?W:P,O=_>0n?_:Q>0n?Q:x,H=P>0n?P:x,G=gn.has(o.from.chainId)&&H>0n,b=k*(G?H:x),v=D.get(ee(o.from.chainId,n.contracts.NATIVE_CROSS)),y=o.type!=="swap-bridge",K=$.get(o.from.chainId);return{estTxFee:i?Xe(b):"0",priorityFeePerGas:i&&!G?vt(O):"0",maxFeePerGas:i&&!G?vt(x):"0",gasLimit:i?k.toString():"0",gasPrice:i&&G?vt(H):void 0,isDelegateFee:o.type==="swap-bridge"?!1:to(n,o.from.address,o.to.address),tokenIconUrl:y?v?.iconUrl:void 0,tokenSymbol:y?v?.symbol:void 0,gasCurrencyIconUrl:K?.iconUrl,gasCurrencySymbol:K?.symbol}},[n,ye,$,D]),R=oe(async o=>{let i=no(o);if(!i)return null;let c=`${e}:${i.from}:${i.to}:${i.token.toLowerCase()}`,d=f.current.get(c);if(d)return d;let k=(async()=>{let P=new URLSearchParams({from:String(i.from),to:String(i.to),token:i.token});try{return(await Le(`${n.bridgeApi}/token-config?${P}`)).config??null}catch{return null}})();return f.current.set(c,k),k},[e,n.bridgeApi]),L=Pe(()=>{let o=Object.values(h).map(c=>ln(c,E)),i=ee(n.chainIds.cross,n.contracts.CROSSD);return o.sort((c,d)=>{let k=ce(c).toLowerCase()===i.toLowerCase(),P=ce(d).toLowerCase()===i.toLowerCase();return k!==P?k?-1:1:ce(c).localeCompare(ce(d))})},[E,h,n]),we=oe(o=>{let i=ce(o),c=i.toLowerCase(),d=[];Object.keys(h).forEach(B=>{let _=B.toLowerCase();if(c===_||A.some(x=>x.fromKey===c&&x.toKey===_))return;let W=C(i,B);if(!W)return;let Q=D.get(B);Q&&d.push({token:Q,path:W})});let k=ee(n.chainIds.cross,n.contracts.CROSSD),P=ee(n.chainIds.cross,n.contracts.NATIVE_CROSS);return d.sort((B,_)=>{if(c===k.toLowerCase()){let H=ce(B.token).toLowerCase()===P.toLowerCase(),G=ce(_.token).toLowerCase()===P.toLowerCase();if(H!==G)return H?-1:1}let W=Ae(B.path.type),Q=Ae(_.path.type);if(W!==Q)return W?-1:1;let x=B.token.chainId===o.chainId,O=_.token.chainId===o.chainId;return x!==O?x?-1:1:ce(B.token).localeCompare(ce(_.token))}),d.map(B=>B.token)},[h,n,C,A,D]),Ke=oe(async o=>await ke(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:je,functionName:"quoter",chainId:o}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),Z=oe(async o=>{Nr(s)!==o&&await Dr(s,{chainId:o})},[s]),z=oe(async o=>await ke(s,{address:n.contracts.SWAP_BRIDGE_ROUTER,abi:je,functionName:"swapRouter",chainId:o}),[n.contracts.SWAP_BRIDGE_ROUTER,s]),ue=oe(async({path:o,step:i,amount:c,source:d})=>{let k=await Ke(i.chain),P=i.poolAddress?ke(s,{address:i.poolAddress,abi:Vr,functionName:"slot0",chainId:i.chain}).then(W=>W?.[0]).catch(()=>{}):Promise.resolve(void 0);if(d==="from"){let W=await ke(s,{address:k,abi:nn,functionName:"quoteExactInputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amountIn:dt(c),fee:i.fee||be,sqrtPriceLimitX96:0n}],chainId:i.chain}),Q=sn(await P,W[1]);return{amount:Xe(W[0]),path:o,priceImpact:Q}}let B=await ke(s,{address:k,abi:nn,functionName:"quoteExactOutputSingle",args:[{tokenIn:J(n,i.fromToken),tokenOut:J(n,i.toToken),amount:dt(c),fee:i.fee||be,sqrtPriceLimitX96:0n}],chainId:i.chain}),_=sn(await P,B[1]);return{amount:Xe(B[0]),path:o,priceImpact:_}},[n,Ke,s]),xe=oe(async(o,i)=>{if(!t)throw new Error("Wallet is not connected.");let c=gt(i.type);if(Ae(i.type)){let x=Oe(i,"first");if(!x)throw new Error("Swap route is not available.");let O=le(o.fromAmount),H=le(o.toAmount);if(O<=0n)throw new Error("Bridge amount is empty.");if(H<=0n)throw new Error("Bridge quote is not ready.");let G=await z(x.chain),l=Pt(H,o.slippage),b=i.type==="swap-withdraw"?fn:t,v={tokenIn:J(n,x.fromToken),tokenOut:J(n,x.toToken),fee:x.fee||be,recipient:b,deadline:ct(),amountIn:O,amountOutMinimum:l,sqrtPriceLimitX96:0n};if(i.type==="swap-withdraw"){let y=at({abi:Ee,functionName:"exactInputSingle",args:[v]}),K=at({abi:Ee,functionName:"unwrapWETH9",args:[l,t]});return{address:G,abi:Ee,functionName:"multicall",args:[[y,K]],chainId:x.chain,fallbackGasLimit:c}}if(i.type==="deposit-swap"){let y=at({abi:Ee,functionName:"exactInputSingle",args:[v]}),K=at({abi:Ee,functionName:"refundETH",args:[]});return{address:G,abi:Ee,functionName:"multicall",args:[[y,K]],value:O,chainId:x.chain,fallbackGasLimit:c}}return{address:G,abi:Ee,functionName:"exactInputSingle",args:[v],chainId:x.chain,fallbackGasLimit:c}}if(i.type==="swap-bridge"){let x=Oe(i,"first");if(!x)throw new Error("Swap bridge route is not available.");let O=le(o.fromAmount),H=le(o.toAmount);if(O<=0n)throw new Error("Bridge amount is empty.");if(H<=0n)throw new Error("Bridge quote is not ready.");let G=n.contracts.SWAP_BRIDGE_ROUTER,l=ct(),b={toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},v={tokenIn:J(n,i.from.address),tokenOut:J(n,x.toToken),fee:x.fee||be,sqrtPriceLimitX96:0n,bridgeParams:b};if(o.lastChangedBy==="to"){let K={...v,amountOut:H,amountInMaximum:Yr(O,o.slippage)};return{address:G,abi:je,functionName:"swapBridgeExactOutputSingle",args:[K,l],value:i.from.isNativeToken?K.amountInMaximum:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let y={...v,amountIn:O,amountOutMinimum:Pt(O,o.slippage)};return{address:G,abi:je,functionName:"swapBridgeExactInputSingle",args:[y,l],value:i.from.isNativeToken?O:void 0,chainId:i.from.chainId,fallbackGasLimit:c}}let d=i.steps.find(x=>x.type==="bridge");if(!d?.bridgeAddress)throw new Error("Bridge route is not available.");let k=le(o.fromAmount);if(k<=0n)throw new Error("Bridge amount is empty.");let P=await R(i),B=Me(P?.gasFee??P?.gas_fee),_=dn(k,P?.exFeeRate??P?.ex_fee_rate),W="0x";if(i.type==="bridge-swap"){let x=Oe(i,"last");if(!x)throw new Error("Bridge swap route is not available.");let O=le(o.toAmount);if(O<=0n)throw new Error("Bridge quote is not ready.");let H=await z(i.to.chainId),G=Pt(O,o.slippage),l=at({abi:Ee,functionName:"exactInputSingle",args:[{tokenIn:J(n,x.fromToken),tokenOut:J(n,x.toToken),fee:x.fee||be,recipient:t,deadline:ct(),amountIn:k,amountOutMinimum:G,sqrtPriceLimitX96:0n}]});W=`${H}${l.slice(2)}`}let Q=[BigInt(i.to.chainId),i.from.address,t,k,B,_,W];return{address:d.bridgeAddress,abi:Hr,functionName:"bridgeToken",args:Q,value:i.from.isNativeToken?k+_+B:void 0,chainId:i.from.chainId,fallbackGasLimit:c}},[n,R,z,t]),Te=oe(async(o,i)=>{if(i.type==="bridge"||i.type==="bridge-swap")return xe(o,i);if(!t)throw new Error("Wallet is not connected.");let c=le(o.fromAmount);if(c<=0n)throw new Error("Bridge amount is empty.");if(i.type==="swap-bridge"){let B=Oe(i,"first");if(!B)throw new Error("Swap bridge route is not available.");let _=n.contracts.SWAP_BRIDGE_ROUTER,W={tokenIn:J(n,i.from.address),tokenOut:J(n,B.toToken),fee:B.fee||be,sqrtPriceLimitX96:0n,bridgeParams:{toChainID:BigInt(i.to.chainId),recipient:t,extraData:"0x"},amountIn:c,amountOutMinimum:0n};return{address:_,abi:je,functionName:"swapBridgeExactInputSingle",args:[W,ct()],value:i.from.isNativeToken?c:void 0,chainId:i.from.chainId,fallbackGasLimit:gt(i.type)}}let d=Oe(i,"first");if(!d)throw new Error("Swap route is not available.");let k=await z(d.chain),P={tokenIn:J(n,d.fromToken),tokenOut:J(n,d.toToken),fee:d.fee||be,recipient:t,deadline:ct(),amountIn:c,amountOutMinimum:0n,sqrtPriceLimitX96:0n};return{address:k,abi:Ee,functionName:"exactInputSingle",args:[P],value:i.from.isNativeToken?c:void 0,chainId:d.chain,fallbackGasLimit:gt(i.type)}},[xe,n,z,t]),Ne=oe(async(o,i)=>{if(!t)return null;try{let c=await Te(o,i),d=Ae(i.type)||i.type==="swap-bridge",k=await an(s,c.chainId,c.fallbackGasLimit,d,{account:t,address:c.address,abi:c.abi,functionName:c.functionName,args:c.args,value:c.value},!0);return{gasLimit:k.gas,gasPrice:k.gasPrice,maxFeePerGas:k.maxFeePerGas,maxPriorityFeePerGas:k.maxPriorityFeePerGas}}catch{return null}},[Te,s,t]),$e=oe(async o=>{let i=ce(o.fromToken),c=ce(o.toToken),d=C(i,c);if(!d)return{error:"Route is not available."};let k=o.lastChangedBy==="to"?o.toAmount:o.fromAmount,P=!!k&&Number(k)>0,B=Io(d,n)?V:void 0,_=async(l,b,v)=>{let y=P?await Ne(l,d):null,K=F(d,P,y);return Po({input:l,path:d,gasInfo:K,amountData:b,liquidity:B,enrichedTokens:h,priceImpact:v})};if(!k||Number(k)<=0)return{fromAmount:o.fromAmount,toAmount:o.toAmount,summary:await _(o)};let W=await R(d),Q=Me(W?.gasFee??W?.gas_fee),x=d.type==="bridge"||d.type==="bridge-swap"?{networkFee:Q}:void 0,O=d.type==="bridge"?o.lastChangedBy==="to"?{...o,fromAmount:o.toAmount}:{...o,toAmount:o.fromAmount}:o,H=ro({input:O,path:d,config:W});if(H)return{fromAmount:O.fromAmount,toAmount:O.toAmount,summary:await _(O,x),error:H};let G=oo({input:O,path:d,config:W});if(G)return{fromAmount:O.fromAmount,toAmount:O.toAmount,summary:await _(O,x),error:G};if(d.type==="bridge")return{fromAmount:O.fromAmount,toAmount:O.toAmount,summary:await _(O,x)};try{if(d.type==="swap-bridge"){let y=Oe(d,"first"),K=n.contracts.SWAP_BRIDGE_ROUTER;if(!y)return{error:"Swap bridge route is not ready."};let Je=me=>ue({path:d,step:y,amount:me,source:"from"}).then(Fe=>Fe.priceImpact).catch(()=>{});if(o.lastChangedBy==="from"){let me=await ke(s,{address:K,abi:je,functionName:"getAmountSwapBridgeOut",args:[BigInt(d.to.chainId),J(n,d.from.address),J(n,y.toToken),y.fee||be,dt(o.fromAmount)],chainId:d.from.chainId}),Fe=Xe(me[1]),ut={...o,toAmount:Fe};return{toAmount:Fe,summary:await _(ut,{networkFee:me[3],exFee:me[4]},await Je(o.fromAmount))}}let He=await ke(s,{address:K,abi:je,functionName:"getAmountSwapBridgeIn",args:[BigInt(d.to.chainId),J(n,d.from.address),J(n,y.toToken),y.fee||be,dt(o.toAmount)],chainId:d.from.chainId}),ie=Xe(He[1]),et={...o,fromAmount:ie};return{fromAmount:ie,summary:await _(et,{networkFee:He[3],exFee:He[4]},await Je(ie))}}let l=d.type==="bridge-swap"?Oe(d,"last"):Oe(d,"first");if(!l)return{error:"Swap route is not available."};let b=await ue({path:d,step:l,amount:k,source:o.lastChangedBy});if(o.lastChangedBy==="from"){let y={...o,toAmount:b.amount};return{toAmount:b.amount,summary:await _(y,x,b.priceImpact)}}let v={...o,fromAmount:b.amount};return{fromAmount:b.amount,summary:await _(v,x,b.priceImpact)}}catch(l){return{fromAmount:o.fromAmount,toAmount:o.toAmount,summary:await _(o,x),error:jr(l)}}},[V,F,h,n,Ne,C,R,ue,s]),Ie=oe(async o=>{if(o.from.isNativeToken)return null;if(o.type==="swap"||o.type==="deposit-swap"||o.type==="swap-withdraw")return z(o.from.chainId);if(o.type==="swap-bridge")return n.contracts.SWAP_BRIDGE_ROUTER;let i=o.steps.find(c=>c.type==="bridge");return i?.bridgeAddress?i.bridgeAddress:null},[n.contracts.SWAP_BRIDGE_ROUTER,z]),ge=oe(async o=>{if(!t)throw new Error("Wallet is not connected.");let i=ce(o.fromToken),c=ce(o.toToken),d=C(i,c);if(!d)throw new Error("Route is not available.");if(!Ae(d.type)&&d.type!=="swap-bridge"||d.from.isNativeToken)return null;let k=le(o.fromAmount);if(k<=0n)return null;let P=await Ie(d);return!P||await ke(s,{address:d.from.address,abi:St,functionName:"allowance",args:[t,P],chainId:d.from.chainId})>=k?null:{token:o.fromToken,tokenAddress:d.from.address,spenderAddress:P,amount:o.fromAmount}},[C,Ie,s,t]),Ze=oe(async(o,i)=>{let c=le(i.amount||o.fromAmount);if(c<=0n)throw new Error("Approval amount is empty.");await Z(i.token.chainId);let d=await en(s,{address:i.tokenAddress,abi:St,functionName:"approve",args:[i.spenderAddress,c],chainId:i.token.chainId});await Wr(s,{hash:d,chainId:i.token.chainId})},[Z,s]),qe=oe(async(o,i)=>{let c=await xe(o,i);await Z(c.chainId);let d=await an(s,c.chainId,c.fallbackGasLimit,Mr(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,...d}),fromToken:o.fromToken,toToken:o.toToken,fromAmount:o.fromAmount,toAmount:o.toAmount}},[xe,Z,s,t]),Ve=oe(async(o,i)=>{let c=t;if(!c)throw new Error("Wallet is not connected.");let d=i.steps.find(Fe=>Fe.type==="bridge");if(!d?.bridgeAddress)throw new Error("Bridge route is not available.");let k=i.from.address,P=i.from.chainId,B=le(o.fromAmount);if(B<=0n)throw new Error("Bridge amount is empty.");let _=await R(i),W=Me(_?.gasFee??_?.gas_fee),Q=dn(B,_?.exFeeRate??_?.ex_fee_rate),x=B+Q+W,[O,H]=await Promise.all([ke(s,{address:k,abi:tn,functionName:"name",chainId:P}),ke(s,{address:k,abi:tn,functionName:"nonces",args:[c],chainId:P})]),G=BigInt(Math.floor(Date.now()/1e3)+300),l=await Fr(s,{domain:{name:O,version:"1",chainId:P,verifyingContract:k},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:d.bridgeAddress,value:x,nonce:H,deadline:G}}),{r:b,s:v,v:y,yParity:K}=Er(l),Je=y!==void 0?Number(y):K+27,He={exFee:Q.toString(),from:P,fromToken:k,nonce:Number(H),gasFee:W.toString(),permitArgs:{account:c,deadline:G.toString(),r:b,s:v,token:k,v:Je,value:x.toString()},to:c,toChainID:String(i.to.chainId),value:x.toString()},ie=await rn(`${n.bridgeApi}/permit`,He),et=ie?.requestId??ie?.request_id;if(!et)throw new Error("Bridge permit request failed.");let me=await Qr(n.bridgeApi,et);if(!Rt(me))throw new Error("Bridge submitted, but confirmation timed out. Check History shortly.");return{txHash:me,fromToken:o.fromToken,toToken:o.toToken,fromAmount:o.fromAmount,toAmount:o.toAmount}},[n,R,s,t]),Se=oe(async o=>{let i=ce(o.fromToken),c=ce(o.toToken),d=C(i,c);if(!d)throw new Error("Route is not available.");if(!(Ae(d.type)||d.type==="swap-bridge"||d.type==="bridge-swap"||d.type==="bridge"))throw new Error("This bridge route is not supported yet.");return{...d.type==="bridge"&&d.from.chainId===n.chainIds.bsc&&d.from.address.toLowerCase()===n.contracts.BSC_CROSS.toLowerCase()?await Ve(o,d):await qe(o,d),pathType:d.type,routeTokens:vo(d,h)}},[h,n,C,Ve,qe]);return{bridgeTokens:L,bridgeHistory:X,getBridgeApproval:ge,approveBridge:Ze,getBridgeQuote:$e,getBridgeToTokens:we,submitBridge:Se,isLoading:p.isLoading||g.isLoading||I.isLoading||S.isLoading||u.some(o=>o.isLoading)}}import{useEffect as kn,useRef as Ao,useState as xn}from"react";import{useAccount as Ro}from"wagmi";function _t(e){let{address:t,connector:r}=Ro(),{currentWallet:s}=Be(),n=e?.walletId!==void 0?e.walletId:s,a=e?.connector!==void 0?e.connector:r,f=e?.address!==void 0?e.address:t,[p,g]=xn({loginType:null,accountName:null,accounts:[],isResolved:!1}),m=Ao(new Map),[w,I]=xn(0);return kn(()=>{let S=!1;if(n!=="cross_embedded")return g({loginType:null,accountName:null,accounts:[],isResolved:!0}),()=>{S=!0};if(!a)return g({loginType:null,accountName:null,accounts:[],isResolved:!1}),()=>{S=!0};g(h=>({...h,isResolved:!1}));let u=20,T=300,A=async()=>{if(typeof a.getProvider!="function")return"retry";let h;try{h=await a.getProvider()}catch{return"retry"}let C=h?.sdk;if(!C)return"giveup";try{let L=C.getRNBridgeActiveWallet?.(),we=L?.walletName?.trim();L&&we&&m.current.set(L.address.toLowerCase(),we)}catch{}let[E,D]=await Promise.all([C.getUserInfo?.().catch(()=>null)??null,C.getAddresses?.().catch(()=>null)??null]);if(S)return"done";let $=E?.loginType,te=$==="google"||$==="apple"?$:null;if(!te)return"retry";let X=f?.toLowerCase(),V=X&&Array.isArray(D)?D.find(L=>L.address.toLowerCase()===X):null,N=Array.isArray(D)?D.filter(L=>/^0x[a-fA-F0-9]{40}$/.test(L.address)).map(L=>({address:L.address.toLowerCase(),...Number.isFinite(L.index)?{index:L.index}:{},...L.name?.trim()?{name:L.name.trim()}:{}})):[],U=X?m.current.get(X)?.trim():void 0,ye=!V&&X&&/^0x[a-fA-F0-9]{40}$/.test(X)?[...N,{address:X,index:N.length,...U?{name:U}:{}}]:N,R=U||V?.name?.trim()||(typeof V?.index=="number"?`Account ${V.index+1}`:f?`${f.slice(0,6)}\u2026${f.slice(-4)}`:null);return g({loginType:te,accountName:R,accounts:ye,isResolved:!0}),"done"};return(async()=>{for(let h=0;h<u;h++){if(S)return;let C=await A();if(C==="done")return;if(C==="giveup"){S||g({loginType:null,accountName:null,accounts:[],isResolved:!0});return}await new Promise(E=>setTimeout(E,T))}S||g({loginType:null,accountName:null,accounts:[],isResolved:!0})})(),()=>{S=!0}},[n,a,f,w]),kn(()=>{if(n!=="cross_embedded"||!a||typeof a.getProvider!="function")return;let S=!1,u;return(async()=>{let T;try{T=await a.getProvider()}catch{return}if(S)return;let A=T?.sdk;A?.on&&(u=A.on("addressChanged",({address:h,walletName:C})=>{let E=C?.trim();E&&(m.current.set(h.toLowerCase(),E),I(D=>D+1))}))})(),()=>{S=!0,u?.()}},[n,a]),p}import{Fragment as Sn,jsx as de,jsxs as Ye}from"react/jsx-runtime";var Uo=[{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"}]}],Ko=[{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"}]}],$o={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,qo={google:{name:"Google",iconUrl:Pn,connectorId:Ue.CROSSx},apple:{name:"Apple",iconUrl:Wt,connectorId:Ue.CROSSx},cross:{name:"CROSSx",iconUrl:Dt,connectorId:Ue.CROSSx},metamask:{name:"MetaMask",iconUrl:An,connectorId:Ue.MetaMask},binance:{name:"Binance Wallet",iconUrl:vn,connectorId:Ue.Binance}};function Vo(e){switch(e){case"cross_embedded":return Ue.CROSSx;case"metamask":return Ue.MetaMask;case"binance":return Ue.Binance;default:return}}function Ho(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:Go};case"metamask":return{name:"MetaMask",iconUrl:An};case"binance":return{name:"Binance Wallet",iconUrl:vn};default:return null}}var zo="Bridge is available only with the CROSSx 2.0 wallet.",Qo="Send is available only with the CROSSx 2.0 wallet.";function jo({label:e="Connect Wallet",className:t,style:r,walletInfoStyle:s,user:n,enablePortfolio:a,portfolio:f,theme:p,accountName:g,connectorId:m,showPortfolio:w,sendAccounts:I,getTransactionReceipt:S,sendTransaction:u,estimateGas:T,onDisconnect:A,onSelectWallet:h,onBuy:C,onRampRedirectUrl:E,bridgeTokens:D,bridgeHistory:$,getBridgeQuote:te,getBridgeToTokens:X,getBridgeApproval:V,approveBridge:N,submitBridge:U,showBalance:ye=!0,env:F,...R}){let{address:L,isConnected:we,connector:Ke,chain:Z}=Eo(),z=No(),ue=Oo(),{switchChainAsync:xe}=Do(),{sendTransactionAsync:Te}=Fo(),{connectWallet:Ne,disconnect:$e,selectWallet:Ie,currentWallet:ge,isConnecting:Ze}=Be(),qe=it(),Ve=p??qe?.mode??"dark",Se=lt(()=>Wo(F),[F]),o=n?.address??L,i=n?qo[n.provider]:null,{loginType:c,accountName:d,accounts:k}=_t({walletId:ge,connector:Ke,address:o}),P=lt(()=>i?{name:i.name,iconUrl:i.iconUrl}:Ho(ge,c),[i,ge,c]),B=g??n?.name??d??void 0,_=i?i.connectorId:Vo(ge),W=m??_,Q=f??w??!!a,x=Bt({env:Se,walletAddress:o,enabled:we&&!!o&&ye}),O=D??x.bridgeTokens,H=$??x.bridgeHistory,G=te??x.getBridgeQuote,l=X??x.getBridgeToTokens,b=V??x.getBridgeApproval,v=N??x.approveBridge,y=U??x.submitBridge,K=Ge(()=>{Ne().catch(M=>{console.error("[crossx-kit] connectWallet error:",M)})},[Ne]),Je=Ge(()=>{$e()},[$e]),He=A??Je,ie=Lo(),{eligibility:et}=Mo({network:Z?String(Z.id):void 0}),me=et?.allowed===!0,Fe=lt(()=>{if(C)return C;if(!(!ie||!Z||!me))return()=>ie.open({crypto:Z.nativeCurrency?.symbol??"USDT",network:String(Z.id),...E?{redirectUrl:E}:{}}).then(()=>{}).catch(M=>{throw console.warn("[crossx-kit] onramp open failed:",M),M})},[C,ie,Z,me,E]),ut=_o();Bo(()=>{if(ie?.onStatus)return ie.onStatus(()=>{ut.invalidateQueries()})},[ie,ut]);let On=lt(()=>{if(!C&&!(!ie||!Z)&&!me)return"On-ramp is not available in your region."},[C,ie,Z,me]),Lt=lt(()=>n?n.provider==="google"||n.provider==="apple":ge==="cross_embedded",[n,ge]),Nn=R.onBridgeDisabledMessage??(Lt?void 0:zo),Fn=R.onSendDisabledMessage??(Lt?void 0:Qo),Dn=n?n.provider==="google"||n.provider==="apple":ge==="cross_embedded",Wn=Ge(()=>{Ie().catch(M=>{console.error("[crossx-kit] selectWallet error:",M)})},[Ie]),Mt=h??(Dn?Wn:void 0),Ln=Ge(async({hash:M,chainId:ne})=>{let re=Et(z,ne?{chainId:ne}:void 0);if(!re)return null;try{return await re.getTransactionReceipt({hash:M})}catch{return null}},[z]),Mn=Ge(async M=>{M.chainId!==void 0&&M.chainId!==ue&&await xe({chainId:M.chainId});let re=M.chainId===56||M.chainId===97?{...M,type:"legacy"}:M;return(u??Te)(re)},[u,Te,ue,xe]),Gn=Q?Mn:u,Un=Ge(async M=>{let ne=M.chainId??ue,re=Et(z,ne?{chainId:ne}:void 0);if(!re)throw new Error(`publicClient for chainId ${ne??"unknown"} is not available \u2014 register the chain in createCrossxConfig({ networks }).`);let pe=ne===56||ne===97,[fe,he]=await Promise.all([re.estimateGas({account:M.from,to:M.to,value:M.value,data:M.data}),(async()=>{if(pe)return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await re.getGasPrice()};try{let Y=await re.estimateFeesPerGas();return{maxFeePerGas:Y.maxFeePerGas,maxPriorityFeePerGas:Y.maxPriorityFeePerGas,gasPrice:void 0}}catch{return{maxFeePerGas:void 0,maxPriorityFeePerGas:void 0,gasPrice:await re.getGasPrice()}}})()]);return{gasLimit:fe,maxFeePerGas:he.maxFeePerGas,maxPriorityFeePerGas:he.maxPriorityFeePerGas,gasPrice:he.gasPrice}},[z,ue]),Kn=T??Un,$n=Ge(async M=>{let ne={};if(!L||M.length===0)return ne;let re=M.flatMap(fe=>{let Y={address:fe,abi:Uo,chainId:ue};return[{...Y,functionName:"balanceOf",args:[L]},{...Y,functionName:"totalSupply"},{...Y,functionName:"decimals"}]}),pe;try{pe=await Tn(z,{contracts:re,allowFailure:!0})}catch{return ne}return M.forEach((fe,he)=>{let Y=he*3,Ce=pe[Y],mt=pe[Y+1],tt=pe[Y+2];!Ce||Ce.status!=="success"||(ne[fe.toLowerCase()]={balance:Ce.result,totalSupply:mt&&mt.status==="success"?mt.result:void 0,decimals:tt&&tt.status==="success"?Number(tt.result):void 0})}),ne},[z,L,ue]),qn=Ge(async M=>{let ne={earnedWei:0n,stakedWei:0n};if(!M)return ne;let re=$o[Se],pe={address:re.poolAddress,abi:Ko,chainId:re.crossChainId},fe;try{fe=await Tn(z,{allowFailure:!0,contracts:[{...pe,functionName:"earned",args:[M]},{...pe,functionName:"balanceOf",args:[M]},{...pe,functionName:"posaActive"},{...pe,functionName:"lastRewardBlock"},{...pe,functionName:"totalStaked"}]})}catch{return ne}let he=ze=>fe[ze]&&fe[ze].status==="success"?fe[ze].result:0n,Y=he(0),Ce=he(1);if(fe[2]&&fe[2].status==="success"?fe[2].result:!1)return{earnedWei:Y,stakedWei:Ce};let tt=he(3),Kt=he(4);if(Kt===0n)return{earnedWei:Y,stakedWei:Ce};let ht=0n;try{ht=await Et(z,{chainId:re.crossChainId})?.getBlockNumber?.()??0n}catch{return{earnedWei:Y,stakedWei:Ce}}if(ht<=tt)return{earnedWei:Y,stakedWei:Ce};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:Y,stakedWei:Ce};let Hn=(ht-tt)*Ct*Nt/Kt,zn=Ce*Hn/Nt;return{earnedWei:Y+zn,stakedWei:Ce}},[z,Se]),Gt=!Mt,Ut=t?`cb-button ${t}`:"cb-button",Vn=t?`cb-pill ${t}`:"cb-pill";return Ze&&!we?Ye(Sn,{children:[de("style",{children:Ft}),Ye("button",{type:"button",disabled:!0,className:Ut,style:r,"aria-busy":"true",children:[de("span",{className:"cb-spinner","aria-hidden":"true"}),de("span",{className:"cb-button-label",children:"Connecting..."})]})]}):we&&o?Ye("span",{"data-crossx-wallet-info":Gt?"external":"embedded",children:[de("style",{children:Ft}),Gt&&de("style",{children:Yo}),Ye(Ot,{...R,env:Se,theme:Ve,showBalance:ye,walletAddress:o,accountName:B,sendAccounts:I??k,connectorId:W,showPortfolio:Q,onDisconnect:He,onSelectWallet:Mt,onBuy:Fe,onBuyDisabledMessage:On,onBridgeDisabledMessage:Nn,onSendDisabledMessage:Fn,sendTransaction:Gn,getTransactionReceipt:S??Ln,estimateGas:Kn,lpBalanceReader:$n,stakingRewardsReader:qn,bridgeTokens:O,bridgeHistory:H,getBridgeQuote:G,getBridgeToTokens:l,getBridgeApproval:b,approveBridge:v,submitBridge:y,style:s,children:[de(Ot.Trigger,{asChild:!0,children:Ye("button",{type:"button",className:Vn,style:r,"aria-label":`Connected with ${P?.name??"wallet"}: ${In(o)}`,children:[P?.iconUrl?de("img",{src:P.iconUrl,alt:"",width:20,height:20,className:"cb-pill-icon","data-provider":P.iconUrl===Wt?"apple":void 0}):de("span",{className:"cb-pill-icon-placeholder","aria-hidden":"true"}),de("span",{className:"cb-pill-address",children:In(o)})]})}),de(Ot.Content,{align:"end",sideOffset:8})]})]}):Ye(Sn,{children:[de("style",{children:Ft}),Ye("button",{type:"button",onClick:K,className:Ut,style:r,"aria-label":typeof e=="string"?e:"Connect Wallet",children:[de(Xo,{}),de("span",{className:"cb-button-label",children:e})]})]})}function Xo(){return de("svg",{className:"cb-button-icon",viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:de("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 Yo=`
|
|
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 Zo,useMemo as Bn,useState as Jo}from"react";import{detectWallets as _n,DEFAULT_WALLET_REGISTRY as En}from"@nexus-cross/connect-kit-wagmi";import{jsx as se,jsxs as Re}from"react/jsx-runtime";var es=["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"],ts="Connect with one of our available wallet providers to continue.";function ns({open:e,onClose:t,onSelect:r,title:s="Connect Wallet",description:n=ts,troubleshootingTips:a=es}){let{availableWallets:f}=Be(),[p,g]=Jo({});Zo(()=>{if(!e)return;let u=_n(En),T={};for(let h of u)h.installed!==void 0&&(T[h.id]=h.installed);g(T);let A=setTimeout(()=>{let h=_n(En),C={};for(let E of h)E.installed!==void 0&&(C[E.id]=E.installed);g(C)},1e3);return()=>clearTimeout(A)},[e]);let m=Bn(()=>typeof navigator>"u"?!1:/Mobi|Android/i.test(navigator.userAgent),[]),w=Bn(()=>m?f.filter(u=>u.type!=="extension"):f,[f,m]),I=Rn(u=>{if(!p[u.walletId]&&u.installUrl&&u.type==="extension"){window.open(u.installUrl,"_blank");return}t(),r(u.walletId)},[t,r,p]),S=Rn((u,T)=>{u.stopPropagation(),t(),window.open(T,"_blank")},[t]);return e?se("div",{style:q.overlay,onClick:t,children:Re("div",{style:q.modal,onClick:u=>u.stopPropagation(),children:[Re("div",{style:q.header,children:[se("h2",{style:q.title,children:s}),se("button",{type:"button",onClick:t,style:q.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:[se("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),se("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})})]}),se("p",{style:q.desc,children:n}),se("div",{style:q.walletList,children:w.map(u=>{let T=p[u.walletId],A=T===!1&&u.type==="extension"&&!!u.installUrl;return Re("div",{style:q.walletGroup,children:[Re("button",{type:"button",onClick:()=>I(u),style:{...q.walletItem,...u.walletId==="cross_wallet"?q.walletItemAccent:{}},"aria-label":`Connect with ${u.name}`,children:[u.iconUrl?se("img",{src:u.iconUrl,alt:"",style:q.walletIcon}):se("div",{style:q.walletIconPlaceholder}),Re("div",{style:q.walletInfo,children:[Re("div",{style:q.walletNameRow,children:[se("span",{style:q.walletName,children:u.name}),T!==void 0&&se("span",{style:{...q.badge,...T?q.badgeInstalled:q.badgeNotInstalled},children:T?"Installed":"Not Installed"})]}),se("span",{style:q.walletDesc,children:A?"Extension not detected \u2014 click to install":u.type==="extension"?"Browser extension approval is required":u.walletId==="cross_wallet"?"App approval is required":u.walletId==="binance"?"Mobile app only \u2014 Add CROSS network first":T?"Connect with browser extension":"Scan QR code with app"})]})]}),u.guideUrl&&Re("button",{type:"button",onClick:h=>S(h,u.guideUrl),style:q.guideBtn,children:[se("span",{"aria-hidden":"true",children:"\u26A0\uFE0F"}),u.guideLabel??"Required Settings"]})]},u.walletId)})}),Re("div",{style:q.troubleshoot,children:[se("h3",{style:q.troubleshootTitle,children:"Wallet not detected?"}),se("ul",{style:q.troubleshootList,children:a.map(u=>Re("li",{style:q.troubleshootItem,children:[se("span",{style:q.troubleshootDot,"aria-hidden":"true"}),se("span",{children:u})]},u))})]})]})}):null}var j={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)"},q={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:j.surfaceBg,border:`1px solid ${j.borderDefault}`,borderRadius:"20px",overflow:"hidden"},header:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"20px 24px 0"},title:{fontSize:"18px",fontWeight:700,color:j.textPrimary,margin:0},closeBtn:{background:"none",border:"none",color:j.textTertiary,cursor:"pointer",padding:"4px",borderRadius:"8px",display:"flex",alignItems:"center",justifyContent:"center"},desc:{padding:"8px 24px 16px",fontSize:"13px",color:j.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:j.surfaceDefault},walletItem:{display:"flex",alignItems:"center",gap:"14px",width:"100%",padding:"14px",background:"transparent",border:"none",color:j.textPrimary,cursor:"pointer",textAlign:"left"},walletItemAccent:{background:j.accentGradient},walletIcon:{width:"40px",height:"40px",borderRadius:"10px",flexShrink:0},walletIconPlaceholder:{width:"40px",height:"40px",borderRadius:"10px",background:j.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:j.textPrimary},badge:{fontSize:"10px",fontWeight:600,padding:"2px 7px",borderRadius:"99px",lineHeight:1},badgeInstalled:{background:j.primarySoft,color:j.primary},badgeNotInstalled:{background:"rgba(255,255,255,0.05)",color:j.textTertiary},walletDesc:{fontSize:"11px",color:j.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 ${j.warningBorder}`,background:j.warningBg,color:j.warningText,fontWeight:600,fontSize:"13px",cursor:"pointer"},troubleshoot:{margin:"0 12px 16px",background:j.surfaceDefault,borderRadius:"12px",padding:"14px 16px"},troubleshootTitle:{fontSize:"12px",fontWeight:700,color:j.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:j.textSecondary,lineHeight:1.5},troubleshootDot:{flexShrink:0,width:"4px",height:"4px",marginTop:"6px",borderRadius:"50%",background:j.textSecondary}};import{useOnRamp as gi,useOnRampEligibility as bi,OnRampProvider as yi}from"@nexus-cross/onramp/react";import{useKyc as hi,useOptionalKyc as Ci,KycProvider as ki,KycError as xi,launchKycVerification as Ti}from"@nexus-cross/kyc/react";import{WalletInfo as Si,ConnectorId as vi}from"@nexus-cross/dapp-ui";import{AppLauncher as Ai,AppLauncherTrigger as Ri,AppLauncherContent as Bi,useGlobalMenu as _i}from"@nexus-cross/dapp-ui";import{SkillsButton as Oi}from"@nexus-cross/dapp-ui";import{OnRampError as Fi}from"@nexus-cross/connect-kit-core";import{ConnectionStatus as Wi,formatBalance as Li,formatWei as Mi}from"@nexus-cross/connect-kit-core";qt();export{Be as a,tr as b,it as c,Tt as d,Br as e,Bt as f,_t as g,jo as h,ns as i,gi as j,bi as k,yi as l,hi as m,Ci as n,ki as o,xi as p,Ti as q,Si as r,vi as s,Ai as t,Ri as u,Bi as v,_i as w,Oi as x,Fi as y,Wi as z,Li as A,Mi as B};
|