@d13co/use-wallet-ui-react 1.0.19 → 1.0.20

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("@rainbow-me/rainbowkit"),w=require("wagmi/chains"),k=require("@rainbow-me/rainbowkit/wallets"),h=require("react"),E=require("wagmi"),y=require("@wagmi/core"),D=require("react/jsx-runtime"),q=require("@tanstack/react-query"),b="rainbowkit";function $(){return{openModal:null,connectInProgress:!1,cancelConnect:null}}function x(n,e){return()=>(e.connectInProgress=!0,new Promise((u,g)=>{let l=!1;const m=c=>{l||(l=!0,e.connectInProgress=!1,e.cancelConnect=null,u(c))},f=c=>{l||(l=!0,e.connectInProgress=!1,e.cancelConnect=null,g(c))};e.cancelConnect=()=>{f(new Error("User dismissed the connect modal"))};let s=null;const p=c=>{const o=c.addresses?[...c.addresses].filter(C=>C!=null):[c.address];setTimeout(()=>m(o),200)},d=()=>{s=y.watchAccount(n,{onChange(o){var C;console.log("[RainbowKitBridge] watchAccount onChange",{isConnected:o.isConnected,address:o.address,status:o.status,connector:(C=o.connector)==null?void 0:C.name}),o.isConnected&&o.address&&(s==null||s(),s=null,p(o))}});const c=y.getAccount(n);if(c.isConnected&&c.address){s==null||s(),s=null,p(c);return}setTimeout(()=>{s==null||s(),s=null,f(new Error("Wallet connection timed out"))},12e4)};let r=0;const t=()=>{e.openModal?(e.openModal(),d()):r++<50?setTimeout(t,50):f(new Error("RainbowKit modal not ready"))};y.getAccount(n).isConnected?y.disconnect(n).finally(t):t()}))}function M({walletManager:n,state:e}){const{openConnectModal:u,connectModalOpen:g}=v.useConnectModal();h.useEffect(()=>(e.openModal=u??null,()=>{e.openModal=null}),[u,e]);const l=h.useRef(!1);h.useEffect(()=>{const t=l.current;l.current=!!g,t&&!g&&e.connectInProgress&&setTimeout(()=>{e.connectInProgress&&e.cancelConnect&&e.cancelConnect()},300)},[g,e]);const{disconnect:m}=E.useDisconnect(),f=h.useRef(!1),s=h.useRef(null),p=()=>{f.current=!0,s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{f.current=!1},1500)};h.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]);const d=E.useAccount(),r=h.useRef(!1);return E.useAccountEffect({onConnect({address:t,connector:a,isReconnected:c}){var C;if(console.log("[RainbowKitBridge] onConnect",{address:t,connector:a==null?void 0:a.name,isReconnected:c,connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(C=n.wallets.find(R=>R.id===b))==null?void 0:C.isConnected}),e.connectInProgress||r.current){console.log("[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)");return}if(f.current){console.log("[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect"),m();return}const o=n.wallets.find(R=>R.id===b);o&&!o.isConnected&&t?(console.log("[RainbowKitBridge] onConnect: triggering rkWallet.connect()"),r.current=!0,o.connect().then(()=>console.log("[RainbowKitBridge] onConnect: rkWallet.connect() succeeded")).catch(R=>{console.warn("[RainbowKitBridge] auto-connect failed:",R.message)}).finally(()=>{r.current=!1})):console.log("[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)",o==null?void 0:o.isConnected,t)},onDisconnect(){var a,c;if(console.log("[RainbowKitBridge] onDisconnect",{connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(a=n.wallets.find(o=>o.id===b))==null?void 0:a.isConnected,rkWalletDisconnecting:(c=n.wallets.find(o=>o.id===b))==null?void 0:c.isDisconnecting}),e.connectInProgress||r.current){console.log("[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)");return}p();const t=n.wallets.find(o=>o.id===b);t&&t.isConnected&&!t.isDisconnecting?(console.log("[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()"),t.disconnect().catch(o=>{console.warn("[RainbowKitBridge] auto-disconnect failed:",o.message)})):console.log("[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)",t==null?void 0:t.isConnected,t==null?void 0:t.isDisconnecting)}}),h.useEffect(()=>{if(console.log("[RainbowKitBridge] account.status changed:",d.status,{connectInProgress:e.connectInProgress,connectingRef:r.current}),d.status==="disconnected"&&!e.connectInProgress&&!r.current){const t=n.wallets.find(a=>a.id===b);t!=null&&t.isConnected&&!t.isDisconnecting&&(console.log("[RainbowKitBridge] stale-disconnect safety net triggered"),t.disconnect().catch(a=>{console.warn("[RainbowKitBridge] stale-disconnect cleanup failed:",a.message)}))}},[d.status,n,e]),h.useEffect(()=>{var t,a;if(console.log("[RainbowKitBridge] mount/account effect",{isConnected:d.isConnected,address:d.address,connector:(t=d.connector)==null?void 0:t.name,connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(a=n.wallets.find(c=>c.id===b))==null?void 0:a.isConnected}),d.isConnected&&d.address){if(f.current){console.log("[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect"),m();return}const c=n.wallets.find(o=>o.id===b);c&&!r.current&&!e.connectInProgress?c.isConnected?(console.log("[RainbowKitBridge] mount effect: resuming session"),c.resumeSession().catch(()=>{})):(console.log("[RainbowKitBridge] mount effect: triggering rkWallet.connect()"),r.current=!0,c.connect().then(()=>console.log("[RainbowKitBridge] mount effect: rkWallet.connect() succeeded")).catch(o=>{console.warn("[RainbowKitBridge] mount auto-connect failed:",o.message)}).finally(()=>{r.current=!1})):console.log("[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)",e.connectInProgress,r.current,c==null?void 0:c.isConnected)}},[d.isConnected,d.address,n]),null}function U(n){const e=h.useRef(!1);h.useEffect(()=>{e.current||(e.current=!0,y.reconnect(n).finally(()=>{for(const u of n.connectors){const g=u.connect.bind(u);u.connect=async l=>{var m;return l!=null&&l.isReconnecting?(console.log(`[wagmi] suppressing reconnect for connector "${u.name}"`),{accounts:[],chainId:((m=n.chains[0])==null?void 0:m.id)??1}):g(l)}}}))},[n])}function G(n,e){return function({queryClient:g,resolvedTheme:l,walletManager:m,children:f}){return U(n),D.jsx(E.WagmiProvider,{config:n,reconnectOnMount:!1,children:D.jsx(q.QueryClientProvider,{client:g,children:D.jsxs(v.RainbowKitProvider,{theme:l==="dark"?v.darkTheme():v.lightTheme(),children:[D.jsx(M,{walletManager:m,state:e}),f]})})})}}const O=[w.mainnet,w.base,w.bsc,w.polygon,w.arbitrum,w.avalanche,w.optimism,w.celo,w.sonic,w.unichain,w.linea],N=[{groupName:"Popular",wallets:[k.safeWallet,k.rainbowWallet,k.metaMaskWallet,k.walletConnectWallet]}];function L(){try{for(const n of Object.keys(localStorage))/^wc@2:/.test(n)&&/(pairing|request|message)/.test(n)&&localStorage.removeItem(n)}catch{}}const Q=n=>{var C,R;L();const e=n,u=!!e.debug,g=e.appUrl??(typeof window<"u"?window.location.origin:void 0),l=e.chains??[],m=new Set(O.map(i=>i.id)),f=l.filter(i=>!m.has(i.id)),s=[...O,...f],p=typeof window<"u"?window.location.origin:void 0,d=((C=e.walletConnectParameters)==null?void 0:C.metadata)??{},r=["eth_call","eth_chainId","eth_blockNumber","eth_sendTransaction","eth_estimateGas","eth_getTransactionReceipt","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getCapabilities","wallet_sendCalls","wallet_getCallsStatus"],t=((R=e.walletConnectParameters)==null?void 0:R.optionalMethods)??[],a=[...new Set([...r,...t])],c={...e.walletConnectParameters,optionalMethods:a,...p?{metadata:{icons:[],...d,redirect:{universal:p,...d.redirect}}}:{}},o=v.getDefaultConfig({wallets:N,...n,chains:s,...g?{appUrl:g}:{},...c?{walletConnectParameters:c}:{}});if(u){o.subscribe(i=>({chainId:i.chainId,current:i.current,status:i.status,connections:i.connections.size}),(i,T)=>{console.log("[wagmi] state change",{prev:T,next:i})});for(const i of o.connectors){i.emitter.on("connect",P=>{console.log(`[wagmi] connector "${i.name}" connect`,P)}),i.emitter.on("disconnect",()=>{console.log(`[wagmi] connector "${i.name}" disconnect`)}),i.emitter.on("change",P=>{console.log(`[wagmi] connector "${i.name}" change`,P)});const T=i.getProvider.bind(i);let W=null,A=null;i.getProvider=async(...P)=>{const I=await T(...P);return I&&(A===I||(A=I,W=new Proxy(I,{get(_,S,j){return S==="request"?async K=>{console.log(`[wagmi:rpc] >> ${i.name} ${K.method}`,K.params??[]);try{const B=await _.request(K);return console.log(`[wagmi:rpc] << ${i.name} ${K.method}`,B),B}catch(B){throw console.error(`[wagmi:rpc] ERR ${i.name} ${K.method}`,B),B}}:Reflect.get(_,S,j)}})),W)}}}return o};function z(n){const e=$(),u=x(n.wagmiConfig,e);return{Provider:G(n.wagmiConfig,e),getEvmAccounts:u}}exports.RainbowKitBridge=M;exports.createGetEvmAccounts=x;exports.createRainbowKitBridgeState=$;exports.createRainbowKitConfig=z;exports.getDefaultConfig=Q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("@rainbow-me/rainbowkit"),f=require("wagmi/chains"),y=require("@rainbow-me/rainbowkit/wallets"),w=require("react"),W=require("wagmi"),k=require("@wagmi/core"),D=require("react/jsx-runtime"),M=require("@tanstack/react-query"),R="rainbowkit";function $(){return{openModal:null,connectInProgress:!1,cancelConnect:null}}function x(c,e){return()=>(e.connectInProgress=!0,new Promise((C,u)=>{let g=!1;const h=t=>{g||(g=!0,e.connectInProgress=!1,e.cancelConnect=null,C(t))},d=t=>{g||(g=!0,e.connectInProgress=!1,e.cancelConnect=null,u(t))};e.cancelConnect=()=>{d(new Error("User dismissed the connect modal"))};let s=null;const b=t=>{const n=t.addresses?[...t.addresses].filter(m=>m!=null):[t.address];setTimeout(()=>h(n),200)},a=()=>{s=k.watchAccount(c,{onChange(n){var m;console.log("[RainbowKitBridge] watchAccount onChange",{isConnected:n.isConnected,address:n.address,status:n.status,connector:(m=n.connector)==null?void 0:m.name}),n.isConnected&&n.address&&(s==null||s(),s=null,b(n))}});const t=k.getAccount(c);if(t.isConnected&&t.address){s==null||s(),s=null,b(t);return}setTimeout(()=>{s==null||s(),s=null,d(new Error("Wallet connection timed out"))},12e4)};let r=0;const o=()=>{e.openModal?(e.openModal(),a()):r++<50?setTimeout(o,50):d(new Error("RainbowKit modal not ready"))};k.getAccount(c).isConnected?k.disconnect(c).finally(o):o()}))}function j({walletManager:c,state:e}){const{openConnectModal:C,connectModalOpen:u}=v.useConnectModal();w.useEffect(()=>(e.openModal=C??null,()=>{e.openModal=null}),[C,e]);const g=w.useRef(!1);w.useEffect(()=>{const o=g.current;g.current=!!u,o&&!u&&e.connectInProgress&&setTimeout(()=>{e.connectInProgress&&e.cancelConnect&&e.cancelConnect()},300)},[u,e]);const{disconnect:h}=W.useDisconnect(),d=w.useRef(!1),s=w.useRef(null),b=()=>{d.current=!0,s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{d.current=!1},1500)};w.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]);const a=W.useAccount(),r=w.useRef(!1);return W.useAccountEffect({onConnect({address:o,connector:l,isReconnected:t}){var m;if(console.log("[RainbowKitBridge] onConnect",{address:o,connector:l==null?void 0:l.name,isReconnected:t,connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(m=c.wallets.find(p=>p.id===R))==null?void 0:m.isConnected}),e.connectInProgress||r.current){console.log("[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)");return}if(d.current){console.log("[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect"),h();return}const n=c.wallets.find(p=>p.id===R);n&&!n.isConnected&&o?(console.log("[RainbowKitBridge] onConnect: triggering rkWallet.connect()"),r.current=!0,n.connect().then(()=>console.log("[RainbowKitBridge] onConnect: rkWallet.connect() succeeded")).catch(p=>{console.warn("[RainbowKitBridge] auto-connect failed:",p.message)}).finally(()=>{r.current=!1})):console.log("[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)",n==null?void 0:n.isConnected,o)},onDisconnect(){var l,t;if(console.log("[RainbowKitBridge] onDisconnect",{connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(l=c.wallets.find(n=>n.id===R))==null?void 0:l.isConnected,rkWalletDisconnecting:(t=c.wallets.find(n=>n.id===R))==null?void 0:t.isDisconnecting}),e.connectInProgress||r.current){console.log("[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)");return}b();const o=c.wallets.find(n=>n.id===R);o&&o.isConnected&&!o.isDisconnecting?(console.log("[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()"),o.disconnect().catch(n=>{console.warn("[RainbowKitBridge] auto-disconnect failed:",n.message)})):console.log("[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)",o==null?void 0:o.isConnected,o==null?void 0:o.isDisconnecting)}}),w.useEffect(()=>{if(console.log("[RainbowKitBridge] account.status changed:",a.status,{connectInProgress:e.connectInProgress,connectingRef:r.current}),a.status==="disconnected"&&!e.connectInProgress&&!r.current){const o=c.wallets.find(l=>l.id===R);o!=null&&o.isConnected&&!o.isDisconnecting&&(console.log("[RainbowKitBridge] stale-disconnect safety net triggered"),o.disconnect().catch(l=>{console.warn("[RainbowKitBridge] stale-disconnect cleanup failed:",l.message)}))}},[a.status,c,e]),w.useEffect(()=>{var o,l;if(console.log("[RainbowKitBridge] mount/account effect",{isConnected:a.isConnected,address:a.address,connector:(o=a.connector)==null?void 0:o.name,connectInProgress:e.connectInProgress,connectingRef:r.current,rkWalletConnected:(l=c.wallets.find(t=>t.id===R))==null?void 0:l.isConnected}),a.isConnected&&a.address){if(d.current){console.log("[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect"),h();return}const t=c.wallets.find(n=>n.id===R);t&&!r.current&&!e.connectInProgress?t.isConnected?(console.log("[RainbowKitBridge] mount effect: resuming session"),t.resumeSession().catch(()=>{})):(console.log("[RainbowKitBridge] mount effect: triggering rkWallet.connect()"),r.current=!0,t.connect().then(()=>console.log("[RainbowKitBridge] mount effect: rkWallet.connect() succeeded")).catch(n=>{console.warn("[RainbowKitBridge] mount auto-connect failed:",n.message)}).finally(()=>{r.current=!1})):console.log("[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)",e.connectInProgress,r.current,t==null?void 0:t.isConnected)}},[a.isConnected,a.address,c]),null}function U(c,e){return w.memo(function({queryClient:u,resolvedTheme:g,walletManager:h,children:d}){return D.jsx(W.WagmiProvider,{config:c,children:D.jsx(M.QueryClientProvider,{client:u,children:D.jsxs(v.RainbowKitProvider,{theme:g==="dark"?v.darkTheme():v.lightTheme(),children:[D.jsx(j,{walletManager:h,state:e}),d]})})})})}const O=[f.mainnet,f.base,f.bsc,f.polygon,f.arbitrum,f.avalanche,f.optimism,f.celo,f.sonic,f.unichain,f.linea],G=[{groupName:"Popular",wallets:[y.safeWallet,y.rainbowWallet,y.metaMaskWallet,y.walletConnectWallet]}];function N(){try{for(const c of Object.keys(localStorage))/^wc@2:/.test(c)&&/(pairing|request|message)/.test(c)&&localStorage.removeItem(c)}catch{}}const L=c=>{var m,p;N();const e=c,C=!!e.debug,u=e.appUrl??(typeof window<"u"?window.location.origin:void 0),g=e.chains??[],h=new Set(O.map(i=>i.id)),d=g.filter(i=>!h.has(i.id)),s=[...O,...d],b=typeof window<"u"?window.location.origin:void 0,a=((m=e.walletConnectParameters)==null?void 0:m.metadata)??{},r=["eth_call","eth_chainId","eth_blockNumber","eth_sendTransaction","eth_estimateGas","eth_getTransactionReceipt","eth_signTypedData_v4","wallet_switchEthereumChain","wallet_addEthereumChain","wallet_getCapabilities","wallet_sendCalls","wallet_getCallsStatus"],o=((p=e.walletConnectParameters)==null?void 0:p.optionalMethods)??[],l=[...new Set([...r,...o])],t={...e.walletConnectParameters,optionalMethods:l,...b?{metadata:{icons:[],...a,redirect:{universal:b,...a.redirect}}}:{}},n=v.getDefaultConfig({wallets:G,...c,chains:s,...u?{appUrl:u}:{},...t?{walletConnectParameters:t}:{}});if(C){n.subscribe(i=>({chainId:i.chainId,current:i.current,status:i.status,connections:i.connections.size}),(i,E)=>{console.log("[wagmi] state change",{prev:E,next:i})});for(const i of n.connectors){i.emitter.on("connect",P=>{console.log(`[wagmi] connector "${i.name}" connect`,P)}),i.emitter.on("disconnect",()=>{console.log(`[wagmi] connector "${i.name}" disconnect`)}),i.emitter.on("change",P=>{console.log(`[wagmi] connector "${i.name}" change`,P)});const E=i.getProvider.bind(i);let T=null,A=null;i.getProvider=async(...P)=>{const K=await E(...P);return K&&(A===K||(A=K,T=new Proxy(K,{get(_,S,q){return S==="request"?async I=>{console.log(`[wagmi:rpc] >> ${i.name} ${I.method}`,I.params??[]);try{const B=await _.request(I);return console.log(`[wagmi:rpc] << ${i.name} ${I.method}`,B),B}catch(B){throw console.error(`[wagmi:rpc] ERR ${i.name} ${I.method}`,B),B}}:Reflect.get(_,S,q)}})),T)}}}return n};function Q(c){const e=$(),C=x(c.wagmiConfig,e);return{Provider:U(c.wagmiConfig,e),getEvmAccounts:C}}exports.RainbowKitBridge=j;exports.createGetEvmAccounts=x;exports.createRainbowKitBridgeState=$;exports.createRainbowKitConfig=Q;exports.getDefaultConfig=L;
2
2
  //# sourceMappingURL=rainbowkit.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rainbowkit.cjs","sources":["../../src/components/RainbowKitBridge.tsx","../../src/components/RainbowKitAutoProvider.tsx","../../src/rainbowkit.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useConnectModal } from '@rainbow-me/rainbowkit'\nimport { useAccount, useAccountEffect, useDisconnect } from 'wagmi'\nimport { watchAccount, disconnect as wagmiDisconnect, getAccount } from '@wagmi/core'\n\nconst RAINBOWKIT_ID = 'rainbowkit'\n\n// ---------------------------------------------------------------------------\n// Structural types — avoid importing exact types from @wagmi/core and\n// @txnlab/use-wallet-react so consumers don't hit version-mismatch errors\n// when different copies of viem / use-wallet are resolved across the monorepo.\n// ---------------------------------------------------------------------------\n\n/** Wagmi Config — derived from watchAccount so no direct @wagmi/core type import is needed. */\nexport type WagmiConfig = Parameters<typeof watchAccount>[0]\n\n/** Minimal wallet interface used by the bridge. */\ninterface WalletLike {\n id: string\n isConnected: boolean\n /** Set by RainbowKitWallet while its own disconnect() is running. Prevents re-entrancy. */\n isDisconnecting?: boolean\n connect: () => Promise<unknown>\n disconnect: () => Promise<void>\n resumeSession: () => Promise<void>\n}\n\n/** Minimal WalletManager interface used by the bridge. */\nexport interface WalletManagerLike {\n wallets: WalletLike[]\n}\n\n/**\n * Shared mutable state between the RainbowKitBridge component (which captures\n * the modal opener and watches modal close) and the getEvmAccounts callback.\n */\nexport interface RainbowKitBridgeState {\n openModal: (() => void) | null\n connectInProgress: boolean\n /** Called by the bridge component when the modal is dismissed without connecting. */\n cancelConnect: (() => void) | null\n}\n\n/** Create the shared state object. Call once at module level. */\nexport function createRainbowKitBridgeState(): RainbowKitBridgeState {\n return { openModal: null, connectInProgress: false, cancelConnect: null }\n}\n\n/**\n * Create a `getEvmAccounts` callback for RainbowKitWallet options.\n *\n * When called, it:\n * 1. Disconnects any existing wagmi session (to show fresh wallet selection)\n * 2. Opens the RainbowKit connect modal\n * 3. Watches wagmi state for a new connection\n * 4. Resolves with the connected EVM addresses\n *\n * If the user closes the modal without connecting, the bridge component\n * calls `state.cancelConnect()` which rejects the promise and clears the\n * in-progress flag so `connect()` can be called again.\n *\n * Must be used together with `<RainbowKitBridge />` in the component tree.\n */\nexport function createGetEvmAccounts(\n wagmiConfig: WagmiConfig,\n state: RainbowKitBridgeState,\n): () => Promise<string[]> {\n return () => {\n state.connectInProgress = true\n return new Promise<string[]>((resolve, reject) => {\n let settled = false\n\n const done = (result: string[]) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n resolve(result)\n }\n const fail = (err: Error) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n reject(err)\n }\n\n // Register cancellation handler — called by the bridge component\n // when the RainbowKit modal closes without a connection.\n state.cancelConnect = () => {\n fail(new Error('User dismissed the connect modal'))\n }\n\n let unwatchFn: (() => void) | null = null\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolveWithAccount = (account: any) => {\n const addrs: string[] = account.addresses\n ? [...account.addresses].filter((a: unknown): a is string => a != null)\n : [account.address as string]\n\n // Delay briefly so RainbowKit can detect the connection and\n // close its modal before our connect() flow continues.\n setTimeout(() => done(addrs), 200)\n }\n\n const startWatching = () => {\n unwatchFn = watchAccount(wagmiConfig, {\n onChange(account) {\n console.log('[RainbowKitBridge] watchAccount onChange', { isConnected: account.isConnected, address: account.address, status: account.status, connector: account.connector?.name })\n if (account.isConnected && account.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(account)\n }\n },\n })\n\n // Handle the race where the wallet connected between wagmiDisconnect\n // resolving and watchAccount being registered — watchAccount only fires\n // on changes, so a connection that already happened is invisible to it.\n const current = getAccount(wagmiConfig)\n if (current.isConnected && current.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(current)\n return\n }\n\n // Timeout after 2 minutes\n setTimeout(() => {\n unwatchFn?.()\n unwatchFn = null\n fail(new Error('Wallet connection timed out'))\n }, 120_000)\n }\n\n // Wait for the RainbowKit modal opener to become available.\n // RainbowKit only provides openConnectModal when disconnected,\n // so after wagmi disconnect we poll briefly for React to re-enable it.\n let attempts = 0\n const tryOpen = () => {\n if (state.openModal) {\n state.openModal()\n startWatching()\n } else if (attempts++ < 50) {\n setTimeout(tryOpen, 50)\n } else {\n fail(new Error('RainbowKit modal not ready'))\n }\n }\n\n // Disconnect existing session so modal shows wallet selection\n const currentAccount = getAccount(wagmiConfig)\n if (currentAccount.isConnected) {\n wagmiDisconnect(wagmiConfig).finally(tryOpen)\n } else {\n tryOpen()\n }\n })\n }\n}\n\nexport interface RainbowKitBridgeProps {\n walletManager: WalletManagerLike\n state: RainbowKitBridgeState\n}\n\n/**\n * Bridge component that syncs RainbowKit/wagmi wallet state with use-wallet.\n *\n * - Captures RainbowKit's `openConnectModal` into the shared state so the\n * `getEvmAccounts` callback can trigger it from outside React.\n * - Watches `connectModalOpen` to detect when the user dismisses the modal\n * without connecting, and cancels the pending connect promise.\n * - Auto-connects the use-wallet RainbowKit wallet when wagmi connects.\n * - Auto-disconnects when wagmi disconnects.\n * - On mount, resumes session if wagmi is already connected.\n *\n * Place inside `<RainbowKitProvider>`.\n */\nexport function RainbowKitBridge({ walletManager, state }: RainbowKitBridgeProps) {\n // Capture RainbowKit's openConnectModal and connectModalOpen\n const { openConnectModal, connectModalOpen } = useConnectModal()\n useEffect(() => {\n state.openModal = openConnectModal ?? null\n return () => {\n state.openModal = null\n }\n }, [openConnectModal, state])\n\n // Track previous modal state to detect close transitions\n const prevModalOpenRef = useRef(false)\n useEffect(() => {\n const wasOpen = prevModalOpenRef.current\n prevModalOpenRef.current = !!connectModalOpen\n\n // Modal just closed (true → false) while a connect is in progress\n // and no wallet connected = user dismissed without connecting\n if (wasOpen && !connectModalOpen && state.connectInProgress) {\n // Small delay to allow any in-flight connection to settle\n setTimeout(() => {\n if (state.connectInProgress && state.cancelConnect) {\n state.cancelConnect()\n }\n }, 300)\n }\n }, [connectModalOpen, state])\n\n // Suppress spurious wagmi reconnects after a user-initiated disconnect\n const { disconnect: disconnectWagmi } = useDisconnect()\n const suppressReconnectRef = useRef(false)\n const suppressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const suppressReconnect = () => {\n suppressReconnectRef.current = true\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n suppressTimerRef.current = setTimeout(() => {\n suppressReconnectRef.current = false\n }, 1_500)\n }\n\n useEffect(() => () => {\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n }, [])\n\n // Sync wagmi account changes with use-wallet\n const account = useAccount()\n const connectingRef = useRef(false)\n\n useAccountEffect({\n onConnect({ address, connector, isReconnected }) {\n console.log('[RainbowKitBridge] onConnect', { address, connector: connector?.name, isReconnected, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n // Ignore events during getEvmAccounts flow — the SDK handles the connect\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)')\n return\n }\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet && !rkWallet.isConnected && address) {\n console.log('[RainbowKitBridge] onConnect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] onConnect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n console.log('[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)', rkWallet?.isConnected, address)\n }\n },\n onDisconnect() {\n console.log('[RainbowKitBridge] onDisconnect', { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected, rkWalletDisconnecting: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isDisconnecting })\n // Ignore wagmi disconnect events during the connect flow (getEvmAccounts\n // disconnects the old session before showing the wallet selection modal)\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)')\n return\n }\n suppressReconnect()\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if RainbowKitWallet.disconnect() itself triggered this wagmi event —\n // it already handles its own cleanup. Only act on external disconnects\n // (e.g. user clicked Disconnect inside RainbowKit's AccountModal).\n if (rkWallet && rkWallet.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-disconnect failed:', err.message)\n })\n } else {\n console.log('[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)', rkWallet?.isConnected, rkWallet?.isDisconnecting)\n }\n },\n })\n\n // Safety net: catch wagmi reconnect failures that fired before onDisconnect was registered.\n // If wagmi lands in 'disconnected' while use-wallet still thinks the wallet is connected,\n // clean up so the user is prompted to reconnect instead of hitting a signing error later.\n useEffect(() => {\n console.log('[RainbowKitBridge] account.status changed:', account.status, { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current })\n if (account.status === 'disconnected' && !state.connectInProgress && !connectingRef.current) {\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet?.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] stale-disconnect safety net triggered')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] stale-disconnect cleanup failed:', err.message)\n })\n }\n }\n }, [account.status, walletManager, state])\n\n // On mount / when wagmi state changes, sync with use-wallet\n useEffect(() => {\n console.log('[RainbowKitBridge] mount/account effect', { isConnected: account.isConnected, address: account.address, connector: account.connector?.name, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n if (account.isConnected && account.address) {\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if getEvmAccounts flow is in progress — it handles its own connect\n if (rkWallet && !connectingRef.current && !state.connectInProgress) {\n if (!rkWallet.isConnected) {\n // Wallet not connected in store — do a full connect\n console.log('[RainbowKitBridge] mount effect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] mount effect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] mount auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n // Wallet connected in store but instance may need session resumed\n // (e.g., after WalletManager recreation on network switch)\n console.log('[RainbowKitBridge] mount effect: resuming session')\n rkWallet.resumeSession().catch(() => {})\n }\n } else {\n console.log('[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)', state.connectInProgress, connectingRef.current, rkWallet?.isConnected)\n }\n }\n }, [account.isConnected, account.address, walletManager])\n\n return null\n}\n","import { type ReactNode, useEffect, useRef } from 'react'\nimport { WagmiProvider } from 'wagmi'\nimport { reconnect } from '@wagmi/core'\nimport { type QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { RainbowKitProvider, lightTheme, darkTheme } from '@rainbow-me/rainbowkit'\nimport { RainbowKitBridge, type RainbowKitBridgeState, type WagmiConfig } from './RainbowKitBridge'\nimport type { ResolvedTheme } from '../hooks/useResolvedTheme'\n\n/**\n * Perform a one-time reconnect on mount then patch every connector so that\n * subsequent reconnecting-mode `connect()` calls (isReconnecting: true) are\n * no-ops. This prevents wagmi's internal reconnect cycles — triggered by\n * WalletConnect relay reconnections when switching apps on mobile — from\n * disrupting pending RPC calls like `eth_signTypedData_v4`.\n */\nfunction useOneTimeReconnect(wagmiConfig: WagmiConfig) {\n const patched = useRef(false)\n\n useEffect(() => {\n if (patched.current) return\n patched.current = true\n\n // Do the initial reconnect to restore persisted sessions, then lock\n // every connector so that future reconnecting-mode connect() calls are\n // swallowed. Normal (non-reconnecting) connect() calls are unaffected.\n reconnect(wagmiConfig).finally(() => {\n for (const connector of wagmiConfig.connectors) {\n const originalConnect = connector.connect.bind(connector)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connector.connect = async (params?: any) => {\n if (params?.isReconnecting) {\n console.log(`[wagmi] suppressing reconnect for connector \"${connector.name}\"`)\n // Return a minimal result so wagmi doesn't throw.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { accounts: [] as any, chainId: wagmiConfig.chains[0]?.id ?? 1 }\n }\n return originalConnect(params)\n }\n }\n })\n }, [wagmiConfig])\n}\n\n/**\n * Create a bound Provider component for use by WalletUIProvider.\n * Called once by `createRainbowKitConfig` — the returned component captures\n * `wagmiConfig` and `bridgeState` in closure so WalletUIProvider only needs\n * to pass `queryClient`, `resolvedTheme`, `walletManager`, and `children`.\n */\nexport function createBoundProvider(wagmiConfig: WagmiConfig, bridgeState: RainbowKitBridgeState) {\n return function RainbowKitAutoProvider({\n queryClient,\n resolvedTheme,\n walletManager,\n children,\n }: {\n queryClient: QueryClient\n resolvedTheme: ResolvedTheme\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletManager: any\n children: ReactNode\n }) {\n useOneTimeReconnect(wagmiConfig)\n\n return (\n <WagmiProvider config={wagmiConfig} reconnectOnMount={false}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider theme={resolvedTheme === 'dark' ? darkTheme() : lightTheme()}>\n <RainbowKitBridge walletManager={walletManager} state={bridgeState} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n )\n }\n}\n","import { getDefaultConfig as rkGetDefaultConfig } from '@rainbow-me/rainbowkit'\nimport {\n mainnet,\n base,\n bsc,\n polygon,\n arbitrum,\n avalanche,\n optimism,\n celo,\n sonic,\n unichain,\n linea,\n} from 'wagmi/chains'\n\nimport {\n safeWallet,\n rainbowWallet,\n metaMaskWallet,\n walletConnectWallet,\n} from '@rainbow-me/rainbowkit/wallets'\nimport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n type RainbowKitBridgeState,\n type RainbowKitBridgeProps,\n type WalletManagerLike,\n type WagmiConfig,\n} from './components/RainbowKitBridge'\nimport { createBoundProvider } from './components/RainbowKitAutoProvider'\nimport type { RainbowKitUIConfig } from './providers/WalletUIProvider'\n\n/**\n * EVM chains supported by the Allbridge bridge integration.\n * Registered in the wagmi config so that wallet operations (signTypedData,\n * getConnectorClient, etc.) work when MetaMask is on any of these networks.\n */\nconst BRIDGE_CHAINS = [mainnet, base, bsc, polygon, arbitrum, avalanche, optimism, celo, sonic, unichain, linea]\n\nconst DEFAULT_WALLETS = [\n {\n groupName: 'Popular',\n wallets: [safeWallet, rainbowWallet, metaMaskWallet, walletConnectWallet],\n },\n]\n\n/**\n * Clear stale WalletConnect v2 pairing data from localStorage.\n *\n * WC2 distinguishes between *pairings* (ephemeral, used only during the\n * session negotiation handshake) and *sessions* (persistent, used to\n * reconnect on page reload). Stale pairings left over from previous\n * connection attempts cause \"No matching key / session topic doesn't exist\"\n * relay errors on mobile wallets, which prevent the `session_settle` event\n * from being delivered and leave the frontend stuck after the user accepts\n * the connection on their phone.\n *\n * Clearing pairings at startup is safe: active sessions are stored under\n * separate keys and are not affected, so wallet reconnection on page reload\n * continues to work normally.\n */\nfunction clearStaleWcPairings(): void {\n try {\n for (const key of Object.keys(localStorage)) {\n // Match any WC2 key that belongs to the pairing or request subsystem.\n // Session keys (wc@2:client:*:session) are intentionally left intact.\n if (/^wc@2:/.test(key) && /(pairing|request|message)/.test(key)) {\n localStorage.removeItem(key)\n }\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing restrictions)\n }\n}\n\n/**\n * Like RainbowKit's `getDefaultConfig`, but with mobile WalletConnect fixes\n * applied by default:\n *\n * - Excludes the Base Account wallet from the default wallet list (pass an\n * explicit `wallets` array to override).\n * - Clears stale WalletConnect v2 pairing data to prevent \"No matching key\"\n * relay errors on mobile wallets.\n * - Registers Allbridge-compatible EVM chains (mainnet, Base, BNB, Polygon,\n * Arbitrum, Avalanche, Optimism, Celo, Sonic, Unichain, Linea) so that\n * wagmi operations work regardless of which network the wallet is on.\n * - Sets `walletConnectParameters.metadata.redirect.universal` to the current\n * origin so that MetaMask Mobile redirects back to the browser tab after\n * signing, allowing the WalletConnect relay response to be delivered.\n *\n * All defaults can be overridden by the caller.\n */\nexport const getDefaultConfig = (params: Parameters<typeof rkGetDefaultConfig>[0] & { debug?: boolean }) => {\n clearStaleWcPairings()\n\n const p = params as Record<string, any>\n const debug = !!p.debug\n const appUrl: string | undefined = p.appUrl ?? (typeof window !== 'undefined' ? window.location.origin : undefined)\n\n // Merge bridge-compatible chains with user chains so that wagmi operations\n // work regardless of which EVM network the wallet is currently on.\n // Bridge chains first (mainnet at index 0) so wagmi's auto-switch after\n // connect targets a real EVM chain, not a virtual one like algorandChain.\n const userChains: any[] = p.chains ?? []\n const bridgeChainIds = new Set(BRIDGE_CHAINS.map((c) => c.id))\n const extraUserChains = userChains.filter((c: any) => !bridgeChainIds.has(c.id))\n const chains = [...BRIDGE_CHAINS, ...extraUserChains]\n\n // Default mobile redirect so MetaMask Mobile returns to the browser tab.\n const redirectUrl: string | undefined = typeof window !== 'undefined' ? window.location.origin : undefined\n const userWcMeta = p.walletConnectParameters?.metadata ?? {}\n\n // Register all EVM methods used across use-wallet and use-wallet-ui as\n // optional WalletConnect session methods so the wallet routes them through\n // the WC channel instead of treating them as read-only RPC requests (which\n // can 403 on public RPCs like mainnet.base.org).\n const bridgeOptionalMethods = [\n 'eth_call',\n 'eth_chainId',\n 'eth_blockNumber',\n 'eth_sendTransaction',\n 'eth_estimateGas',\n 'eth_getTransactionReceipt',\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getCapabilities',\n 'wallet_sendCalls',\n 'wallet_getCallsStatus',\n ]\n const userOptionalMethods: string[] = p.walletConnectParameters?.optionalMethods ?? []\n const optionalMethods = [\n ...new Set([...bridgeOptionalMethods, ...userOptionalMethods]),\n ]\n\n const walletConnectParameters = {\n ...p.walletConnectParameters,\n optionalMethods,\n ...(redirectUrl\n ? {\n metadata: {\n icons: [],\n ...userWcMeta,\n redirect: {\n universal: redirectUrl,\n ...userWcMeta.redirect,\n },\n },\n }\n : {}),\n }\n\n const config = rkGetDefaultConfig({\n wallets: DEFAULT_WALLETS,\n ...params,\n chains: chains as any,\n ...(appUrl ? { appUrl } : {}),\n ...(walletConnectParameters ? { walletConnectParameters } : {}),\n })\n\n if (debug) {\n // Debug: log wagmi state transitions (connections, chain changes)\n config.subscribe(\n (state) => ({\n chainId: state.chainId,\n current: state.current,\n status: state.status,\n connections: state.connections.size,\n }),\n (next, prev) => {\n console.log('[wagmi] state change', { prev, next })\n },\n )\n\n // Debug: log connector events and wrap provider requests\n for (const connector of config.connectors) {\n connector.emitter.on('connect', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" connect`, data)\n })\n connector.emitter.on('disconnect', () => {\n console.log(`[wagmi] connector \"${connector.name}\" disconnect`)\n })\n connector.emitter.on('change', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" change`, data)\n })\n\n // Wrap getProvider to log all EIP-1193 request/response traffic.\n // We return a Proxy instead of mutating provider.request so that\n // MetaMask SDK's internal this.request calls stay on the untouched\n // original provider and don't recurse through our logging layer.\n const origGetProvider = connector.getProvider.bind(connector)\n let cachedProxy: any = null\n let cachedTarget: any = null\n connector.getProvider = async (...args: any[]) => {\n const provider = await origGetProvider(...args)\n if (!provider) return provider\n // Re-use the same Proxy for the same underlying provider\n if (cachedTarget === provider) return cachedProxy\n cachedTarget = provider\n cachedProxy = new Proxy(provider, {\n get(target, prop, receiver) {\n if (prop === 'request') {\n return async (req: { method: string; params?: unknown[] }) => {\n console.log(`[wagmi:rpc] >> ${connector.name} ${req.method}`, req.params ?? [])\n try {\n const result = await target.request(req)\n console.log(`[wagmi:rpc] << ${connector.name} ${req.method}`, result)\n return result\n } catch (err) {\n console.error(`[wagmi:rpc] ERR ${connector.name} ${req.method}`, err)\n throw err\n }\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n })\n return cachedProxy\n }\n }\n }\n\n return config\n}\n\n// Backward-compatible exports\nexport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n}\n\nexport type {\n RainbowKitBridgeState,\n RainbowKitBridgeProps,\n WalletManagerLike,\n}\n\nexport type { RainbowKitUIConfig }\n\n/**\n * Create a RainbowKit configuration for WalletUIProvider.\n *\n * Call once at module level (or in a useMemo) and pass the result to\n * `<WalletUIProvider rainbowkit={...}>`. The provider handles all\n * WagmiProvider/RainbowKitProvider/bridge wiring internally.\n */\nexport function createRainbowKitConfig(options: { wagmiConfig: WagmiConfig }): RainbowKitUIConfig {\n const bridgeState = createRainbowKitBridgeState()\n const getEvmAccounts = createGetEvmAccounts(options.wagmiConfig, bridgeState)\n const Provider = createBoundProvider(options.wagmiConfig, bridgeState)\n\n return { Provider, getEvmAccounts }\n}\n"],"names":["RAINBOWKIT_ID","createRainbowKitBridgeState","createGetEvmAccounts","wagmiConfig","state","resolve","reject","settled","done","result","fail","err","unwatchFn","resolveWithAccount","account","addrs","a","startWatching","watchAccount","_a","current","getAccount","attempts","tryOpen","wagmiDisconnect","RainbowKitBridge","walletManager","openConnectModal","connectModalOpen","useConnectModal","useEffect","prevModalOpenRef","useRef","wasOpen","disconnectWagmi","useDisconnect","suppressReconnectRef","suppressTimerRef","suppressReconnect","useAccount","connectingRef","useAccountEffect","address","connector","isReconnected","w","rkWallet","_b","useOneTimeReconnect","patched","reconnect","originalConnect","params","createBoundProvider","bridgeState","queryClient","resolvedTheme","children","WagmiProvider","QueryClientProvider","jsxs","RainbowKitProvider","darkTheme","lightTheme","jsx","BRIDGE_CHAINS","mainnet","base","bsc","polygon","arbitrum","avalanche","optimism","celo","sonic","unichain","linea","DEFAULT_WALLETS","safeWallet","rainbowWallet","metaMaskWallet","walletConnectWallet","clearStaleWcPairings","key","getDefaultConfig","p","debug","appUrl","userChains","bridgeChainIds","c","extraUserChains","chains","redirectUrl","userWcMeta","bridgeOptionalMethods","userOptionalMethods","optionalMethods","walletConnectParameters","config","rkGetDefaultConfig","next","prev","data","origGetProvider","cachedProxy","cachedTarget","args","provider","target","prop","receiver","req","createRainbowKitConfig","options","getEvmAccounts"],"mappings":"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"}
1
+ {"version":3,"file":"rainbowkit.cjs","sources":["../../src/components/RainbowKitBridge.tsx","../../src/components/RainbowKitAutoProvider.tsx","../../src/rainbowkit.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useConnectModal } from '@rainbow-me/rainbowkit'\nimport { useAccount, useAccountEffect, useDisconnect } from 'wagmi'\nimport { watchAccount, disconnect as wagmiDisconnect, getAccount } from '@wagmi/core'\n\nconst RAINBOWKIT_ID = 'rainbowkit'\n\n// ---------------------------------------------------------------------------\n// Structural types — avoid importing exact types from @wagmi/core and\n// @txnlab/use-wallet-react so consumers don't hit version-mismatch errors\n// when different copies of viem / use-wallet are resolved across the monorepo.\n// ---------------------------------------------------------------------------\n\n/** Wagmi Config — derived from watchAccount so no direct @wagmi/core type import is needed. */\nexport type WagmiConfig = Parameters<typeof watchAccount>[0]\n\n/** Minimal wallet interface used by the bridge. */\ninterface WalletLike {\n id: string\n isConnected: boolean\n /** Set by RainbowKitWallet while its own disconnect() is running. Prevents re-entrancy. */\n isDisconnecting?: boolean\n connect: () => Promise<unknown>\n disconnect: () => Promise<void>\n resumeSession: () => Promise<void>\n}\n\n/** Minimal WalletManager interface used by the bridge. */\nexport interface WalletManagerLike {\n wallets: WalletLike[]\n}\n\n/**\n * Shared mutable state between the RainbowKitBridge component (which captures\n * the modal opener and watches modal close) and the getEvmAccounts callback.\n */\nexport interface RainbowKitBridgeState {\n openModal: (() => void) | null\n connectInProgress: boolean\n /** Called by the bridge component when the modal is dismissed without connecting. */\n cancelConnect: (() => void) | null\n}\n\n/** Create the shared state object. Call once at module level. */\nexport function createRainbowKitBridgeState(): RainbowKitBridgeState {\n return { openModal: null, connectInProgress: false, cancelConnect: null }\n}\n\n/**\n * Create a `getEvmAccounts` callback for RainbowKitWallet options.\n *\n * When called, it:\n * 1. Disconnects any existing wagmi session (to show fresh wallet selection)\n * 2. Opens the RainbowKit connect modal\n * 3. Watches wagmi state for a new connection\n * 4. Resolves with the connected EVM addresses\n *\n * If the user closes the modal without connecting, the bridge component\n * calls `state.cancelConnect()` which rejects the promise and clears the\n * in-progress flag so `connect()` can be called again.\n *\n * Must be used together with `<RainbowKitBridge />` in the component tree.\n */\nexport function createGetEvmAccounts(\n wagmiConfig: WagmiConfig,\n state: RainbowKitBridgeState,\n): () => Promise<string[]> {\n return () => {\n state.connectInProgress = true\n return new Promise<string[]>((resolve, reject) => {\n let settled = false\n\n const done = (result: string[]) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n resolve(result)\n }\n const fail = (err: Error) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n reject(err)\n }\n\n // Register cancellation handler — called by the bridge component\n // when the RainbowKit modal closes without a connection.\n state.cancelConnect = () => {\n fail(new Error('User dismissed the connect modal'))\n }\n\n let unwatchFn: (() => void) | null = null\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolveWithAccount = (account: any) => {\n const addrs: string[] = account.addresses\n ? [...account.addresses].filter((a: unknown): a is string => a != null)\n : [account.address as string]\n\n // Delay briefly so RainbowKit can detect the connection and\n // close its modal before our connect() flow continues.\n setTimeout(() => done(addrs), 200)\n }\n\n const startWatching = () => {\n unwatchFn = watchAccount(wagmiConfig, {\n onChange(account) {\n console.log('[RainbowKitBridge] watchAccount onChange', { isConnected: account.isConnected, address: account.address, status: account.status, connector: account.connector?.name })\n if (account.isConnected && account.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(account)\n }\n },\n })\n\n // Handle the race where the wallet connected between wagmiDisconnect\n // resolving and watchAccount being registered — watchAccount only fires\n // on changes, so a connection that already happened is invisible to it.\n const current = getAccount(wagmiConfig)\n if (current.isConnected && current.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(current)\n return\n }\n\n // Timeout after 2 minutes\n setTimeout(() => {\n unwatchFn?.()\n unwatchFn = null\n fail(new Error('Wallet connection timed out'))\n }, 120_000)\n }\n\n // Wait for the RainbowKit modal opener to become available.\n // RainbowKit only provides openConnectModal when disconnected,\n // so after wagmi disconnect we poll briefly for React to re-enable it.\n let attempts = 0\n const tryOpen = () => {\n if (state.openModal) {\n state.openModal()\n startWatching()\n } else if (attempts++ < 50) {\n setTimeout(tryOpen, 50)\n } else {\n fail(new Error('RainbowKit modal not ready'))\n }\n }\n\n // Disconnect existing session so modal shows wallet selection\n const currentAccount = getAccount(wagmiConfig)\n if (currentAccount.isConnected) {\n wagmiDisconnect(wagmiConfig).finally(tryOpen)\n } else {\n tryOpen()\n }\n })\n }\n}\n\nexport interface RainbowKitBridgeProps {\n walletManager: WalletManagerLike\n state: RainbowKitBridgeState\n}\n\n/**\n * Bridge component that syncs RainbowKit/wagmi wallet state with use-wallet.\n *\n * - Captures RainbowKit's `openConnectModal` into the shared state so the\n * `getEvmAccounts` callback can trigger it from outside React.\n * - Watches `connectModalOpen` to detect when the user dismisses the modal\n * without connecting, and cancels the pending connect promise.\n * - Auto-connects the use-wallet RainbowKit wallet when wagmi connects.\n * - Auto-disconnects when wagmi disconnects.\n * - On mount, resumes session if wagmi is already connected.\n *\n * Place inside `<RainbowKitProvider>`.\n */\nexport function RainbowKitBridge({ walletManager, state }: RainbowKitBridgeProps) {\n // Capture RainbowKit's openConnectModal and connectModalOpen\n const { openConnectModal, connectModalOpen } = useConnectModal()\n useEffect(() => {\n state.openModal = openConnectModal ?? null\n return () => {\n state.openModal = null\n }\n }, [openConnectModal, state])\n\n // Track previous modal state to detect close transitions\n const prevModalOpenRef = useRef(false)\n useEffect(() => {\n const wasOpen = prevModalOpenRef.current\n prevModalOpenRef.current = !!connectModalOpen\n\n // Modal just closed (true → false) while a connect is in progress\n // and no wallet connected = user dismissed without connecting\n if (wasOpen && !connectModalOpen && state.connectInProgress) {\n // Small delay to allow any in-flight connection to settle\n setTimeout(() => {\n if (state.connectInProgress && state.cancelConnect) {\n state.cancelConnect()\n }\n }, 300)\n }\n }, [connectModalOpen, state])\n\n // Suppress spurious wagmi reconnects after a user-initiated disconnect\n const { disconnect: disconnectWagmi } = useDisconnect()\n const suppressReconnectRef = useRef(false)\n const suppressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const suppressReconnect = () => {\n suppressReconnectRef.current = true\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n suppressTimerRef.current = setTimeout(() => {\n suppressReconnectRef.current = false\n }, 1_500)\n }\n\n useEffect(() => () => {\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n }, [])\n\n // Sync wagmi account changes with use-wallet\n const account = useAccount()\n const connectingRef = useRef(false)\n\n useAccountEffect({\n onConnect({ address, connector, isReconnected }) {\n console.log('[RainbowKitBridge] onConnect', { address, connector: connector?.name, isReconnected, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n // Ignore events during getEvmAccounts flow — the SDK handles the connect\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)')\n return\n }\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet && !rkWallet.isConnected && address) {\n console.log('[RainbowKitBridge] onConnect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] onConnect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n console.log('[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)', rkWallet?.isConnected, address)\n }\n },\n onDisconnect() {\n console.log('[RainbowKitBridge] onDisconnect', { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected, rkWalletDisconnecting: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isDisconnecting })\n // Ignore wagmi disconnect events during the connect flow (getEvmAccounts\n // disconnects the old session before showing the wallet selection modal)\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)')\n return\n }\n suppressReconnect()\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if RainbowKitWallet.disconnect() itself triggered this wagmi event —\n // it already handles its own cleanup. Only act on external disconnects\n // (e.g. user clicked Disconnect inside RainbowKit's AccountModal).\n if (rkWallet && rkWallet.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-disconnect failed:', err.message)\n })\n } else {\n console.log('[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)', rkWallet?.isConnected, rkWallet?.isDisconnecting)\n }\n },\n })\n\n // Safety net: catch wagmi reconnect failures that fired before onDisconnect was registered.\n // If wagmi lands in 'disconnected' while use-wallet still thinks the wallet is connected,\n // clean up so the user is prompted to reconnect instead of hitting a signing error later.\n useEffect(() => {\n console.log('[RainbowKitBridge] account.status changed:', account.status, { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current })\n if (account.status === 'disconnected' && !state.connectInProgress && !connectingRef.current) {\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet?.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] stale-disconnect safety net triggered')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] stale-disconnect cleanup failed:', err.message)\n })\n }\n }\n }, [account.status, walletManager, state])\n\n // On mount / when wagmi state changes, sync with use-wallet\n useEffect(() => {\n console.log('[RainbowKitBridge] mount/account effect', { isConnected: account.isConnected, address: account.address, connector: account.connector?.name, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n if (account.isConnected && account.address) {\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if getEvmAccounts flow is in progress — it handles its own connect\n if (rkWallet && !connectingRef.current && !state.connectInProgress) {\n if (!rkWallet.isConnected) {\n // Wallet not connected in store — do a full connect\n console.log('[RainbowKitBridge] mount effect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] mount effect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] mount auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n // Wallet connected in store but instance may need session resumed\n // (e.g., after WalletManager recreation on network switch)\n console.log('[RainbowKitBridge] mount effect: resuming session')\n rkWallet.resumeSession().catch(() => {})\n }\n } else {\n console.log('[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)', state.connectInProgress, connectingRef.current, rkWallet?.isConnected)\n }\n }\n }, [account.isConnected, account.address, walletManager])\n\n return null\n}\n","import { type ReactNode, memo } from 'react'\nimport { WagmiProvider } from 'wagmi'\nimport { type QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { RainbowKitProvider, lightTheme, darkTheme } from '@rainbow-me/rainbowkit'\nimport { RainbowKitBridge, type RainbowKitBridgeState, type WagmiConfig } from './RainbowKitBridge'\nimport type { ResolvedTheme } from '../hooks/useResolvedTheme'\n\n/**\n * Create a bound Provider component for use by WalletUIProvider.\n * Called once by `createRainbowKitConfig` — the returned component captures\n * `wagmiConfig` and `bridgeState` in closure so WalletUIProvider only needs\n * to pass `queryClient`, `resolvedTheme`, `walletManager`, and `children`.\n */\nexport function createBoundProvider(wagmiConfig: WagmiConfig, bridgeState: RainbowKitBridgeState) {\n return memo(function RainbowKitAutoProvider({\n queryClient,\n resolvedTheme,\n walletManager,\n children,\n }: {\n queryClient: QueryClient\n resolvedTheme: ResolvedTheme\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletManager: any\n children: ReactNode\n }) {\n return (\n <WagmiProvider config={wagmiConfig}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider theme={resolvedTheme === 'dark' ? darkTheme() : lightTheme()}>\n <RainbowKitBridge walletManager={walletManager} state={bridgeState} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n )\n })\n}\n","import { getDefaultConfig as rkGetDefaultConfig } from '@rainbow-me/rainbowkit'\nimport {\n mainnet,\n base,\n bsc,\n polygon,\n arbitrum,\n avalanche,\n optimism,\n celo,\n sonic,\n unichain,\n linea,\n} from 'wagmi/chains'\n\nimport {\n safeWallet,\n rainbowWallet,\n metaMaskWallet,\n walletConnectWallet,\n} from '@rainbow-me/rainbowkit/wallets'\nimport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n type RainbowKitBridgeState,\n type RainbowKitBridgeProps,\n type WalletManagerLike,\n type WagmiConfig,\n} from './components/RainbowKitBridge'\nimport { createBoundProvider } from './components/RainbowKitAutoProvider'\nimport type { RainbowKitUIConfig } from './providers/WalletUIProvider'\n\n/**\n * EVM chains supported by the Allbridge bridge integration.\n * Registered in the wagmi config so that wallet operations (signTypedData,\n * getConnectorClient, etc.) work when MetaMask is on any of these networks.\n */\nconst BRIDGE_CHAINS = [mainnet, base, bsc, polygon, arbitrum, avalanche, optimism, celo, sonic, unichain, linea]\n\nconst DEFAULT_WALLETS = [\n {\n groupName: 'Popular',\n wallets: [safeWallet, rainbowWallet, metaMaskWallet, walletConnectWallet],\n },\n]\n\n/**\n * Clear stale WalletConnect v2 pairing data from localStorage.\n *\n * WC2 distinguishes between *pairings* (ephemeral, used only during the\n * session negotiation handshake) and *sessions* (persistent, used to\n * reconnect on page reload). Stale pairings left over from previous\n * connection attempts cause \"No matching key / session topic doesn't exist\"\n * relay errors on mobile wallets, which prevent the `session_settle` event\n * from being delivered and leave the frontend stuck after the user accepts\n * the connection on their phone.\n *\n * Clearing pairings at startup is safe: active sessions are stored under\n * separate keys and are not affected, so wallet reconnection on page reload\n * continues to work normally.\n */\nfunction clearStaleWcPairings(): void {\n try {\n for (const key of Object.keys(localStorage)) {\n // Match any WC2 key that belongs to the pairing or request subsystem.\n // Session keys (wc@2:client:*:session) are intentionally left intact.\n if (/^wc@2:/.test(key) && /(pairing|request|message)/.test(key)) {\n localStorage.removeItem(key)\n }\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing restrictions)\n }\n}\n\n/**\n * Like RainbowKit's `getDefaultConfig`, but with mobile WalletConnect fixes\n * applied by default:\n *\n * - Excludes the Base Account wallet from the default wallet list (pass an\n * explicit `wallets` array to override).\n * - Clears stale WalletConnect v2 pairing data to prevent \"No matching key\"\n * relay errors on mobile wallets.\n * - Registers Allbridge-compatible EVM chains (mainnet, Base, BNB, Polygon,\n * Arbitrum, Avalanche, Optimism, Celo, Sonic, Unichain, Linea) so that\n * wagmi operations work regardless of which network the wallet is on.\n * - Sets `walletConnectParameters.metadata.redirect.universal` to the current\n * origin so that MetaMask Mobile redirects back to the browser tab after\n * signing, allowing the WalletConnect relay response to be delivered.\n *\n * All defaults can be overridden by the caller.\n */\nexport const getDefaultConfig = (params: Parameters<typeof rkGetDefaultConfig>[0] & { debug?: boolean }) => {\n clearStaleWcPairings()\n\n const p = params as Record<string, any>\n const debug = !!p.debug\n const appUrl: string | undefined = p.appUrl ?? (typeof window !== 'undefined' ? window.location.origin : undefined)\n\n // Merge bridge-compatible chains with user chains so that wagmi operations\n // work regardless of which EVM network the wallet is currently on.\n // Bridge chains first (mainnet at index 0) so wagmi's auto-switch after\n // connect targets a real EVM chain, not a virtual one like algorandChain.\n const userChains: any[] = p.chains ?? []\n const bridgeChainIds = new Set(BRIDGE_CHAINS.map((c) => c.id))\n const extraUserChains = userChains.filter((c: any) => !bridgeChainIds.has(c.id))\n const chains = [...BRIDGE_CHAINS, ...extraUserChains]\n\n // Default mobile redirect so MetaMask Mobile returns to the browser tab.\n const redirectUrl: string | undefined = typeof window !== 'undefined' ? window.location.origin : undefined\n const userWcMeta = p.walletConnectParameters?.metadata ?? {}\n\n // Register all EVM methods used across use-wallet and use-wallet-ui as\n // optional WalletConnect session methods so the wallet routes them through\n // the WC channel instead of treating them as read-only RPC requests (which\n // can 403 on public RPCs like mainnet.base.org).\n const bridgeOptionalMethods = [\n 'eth_call',\n 'eth_chainId',\n 'eth_blockNumber',\n 'eth_sendTransaction',\n 'eth_estimateGas',\n 'eth_getTransactionReceipt',\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getCapabilities',\n 'wallet_sendCalls',\n 'wallet_getCallsStatus',\n ]\n const userOptionalMethods: string[] = p.walletConnectParameters?.optionalMethods ?? []\n const optionalMethods = [\n ...new Set([...bridgeOptionalMethods, ...userOptionalMethods]),\n ]\n\n const walletConnectParameters = {\n ...p.walletConnectParameters,\n optionalMethods,\n ...(redirectUrl\n ? {\n metadata: {\n icons: [],\n ...userWcMeta,\n redirect: {\n universal: redirectUrl,\n ...userWcMeta.redirect,\n },\n },\n }\n : {}),\n }\n\n const config = rkGetDefaultConfig({\n wallets: DEFAULT_WALLETS,\n ...params,\n chains: chains as any,\n ...(appUrl ? { appUrl } : {}),\n ...(walletConnectParameters ? { walletConnectParameters } : {}),\n })\n\n if (debug) {\n // Debug: log wagmi state transitions (connections, chain changes)\n config.subscribe(\n (state) => ({\n chainId: state.chainId,\n current: state.current,\n status: state.status,\n connections: state.connections.size,\n }),\n (next, prev) => {\n console.log('[wagmi] state change', { prev, next })\n },\n )\n\n // Debug: log connector events and wrap provider requests\n for (const connector of config.connectors) {\n connector.emitter.on('connect', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" connect`, data)\n })\n connector.emitter.on('disconnect', () => {\n console.log(`[wagmi] connector \"${connector.name}\" disconnect`)\n })\n connector.emitter.on('change', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" change`, data)\n })\n\n // Wrap getProvider to log all EIP-1193 request/response traffic.\n // We return a Proxy instead of mutating provider.request so that\n // MetaMask SDK's internal this.request calls stay on the untouched\n // original provider and don't recurse through our logging layer.\n const origGetProvider = connector.getProvider.bind(connector)\n let cachedProxy: any = null\n let cachedTarget: any = null\n connector.getProvider = async (...args: any[]) => {\n const provider = await origGetProvider(...args)\n if (!provider) return provider\n // Re-use the same Proxy for the same underlying provider\n if (cachedTarget === provider) return cachedProxy\n cachedTarget = provider\n cachedProxy = new Proxy(provider, {\n get(target, prop, receiver) {\n if (prop === 'request') {\n return async (req: { method: string; params?: unknown[] }) => {\n console.log(`[wagmi:rpc] >> ${connector.name} ${req.method}`, req.params ?? [])\n try {\n const result = await target.request(req)\n console.log(`[wagmi:rpc] << ${connector.name} ${req.method}`, result)\n return result\n } catch (err) {\n console.error(`[wagmi:rpc] ERR ${connector.name} ${req.method}`, err)\n throw err\n }\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n })\n return cachedProxy\n }\n }\n }\n\n return config\n}\n\n// Backward-compatible exports\nexport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n}\n\nexport type {\n RainbowKitBridgeState,\n RainbowKitBridgeProps,\n WalletManagerLike,\n}\n\nexport type { RainbowKitUIConfig }\n\n/**\n * Create a RainbowKit configuration for WalletUIProvider.\n *\n * Call once at module level (or in a useMemo) and pass the result to\n * `<WalletUIProvider rainbowkit={...}>`. The provider handles all\n * WagmiProvider/RainbowKitProvider/bridge wiring internally.\n */\nexport function createRainbowKitConfig(options: { wagmiConfig: WagmiConfig }): RainbowKitUIConfig {\n const bridgeState = createRainbowKitBridgeState()\n const getEvmAccounts = createGetEvmAccounts(options.wagmiConfig, bridgeState)\n const Provider = createBoundProvider(options.wagmiConfig, bridgeState)\n\n return { Provider, getEvmAccounts }\n}\n"],"names":["RAINBOWKIT_ID","createRainbowKitBridgeState","createGetEvmAccounts","wagmiConfig","state","resolve","reject","settled","done","result","fail","err","unwatchFn","resolveWithAccount","account","addrs","a","startWatching","watchAccount","_a","current","getAccount","attempts","tryOpen","wagmiDisconnect","RainbowKitBridge","walletManager","openConnectModal","connectModalOpen","useConnectModal","useEffect","prevModalOpenRef","useRef","wasOpen","disconnectWagmi","useDisconnect","suppressReconnectRef","suppressTimerRef","suppressReconnect","useAccount","connectingRef","useAccountEffect","address","connector","isReconnected","w","rkWallet","_b","createBoundProvider","bridgeState","memo","queryClient","resolvedTheme","children","WagmiProvider","jsx","QueryClientProvider","jsxs","RainbowKitProvider","darkTheme","lightTheme","BRIDGE_CHAINS","mainnet","base","bsc","polygon","arbitrum","avalanche","optimism","celo","sonic","unichain","linea","DEFAULT_WALLETS","safeWallet","rainbowWallet","metaMaskWallet","walletConnectWallet","clearStaleWcPairings","key","getDefaultConfig","params","p","debug","appUrl","userChains","bridgeChainIds","c","extraUserChains","chains","redirectUrl","userWcMeta","bridgeOptionalMethods","userOptionalMethods","optionalMethods","walletConnectParameters","config","rkGetDefaultConfig","next","prev","data","origGetProvider","cachedProxy","cachedTarget","args","provider","target","prop","receiver","req","createRainbowKitConfig","options","getEvmAccounts"],"mappings":"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"}
@@ -1,172 +1,158 @@
1
- import { useConnectModal as S, RainbowKitProvider as $, darkTheme as O, lightTheme as M, getDefaultConfig as x } from "@rainbow-me/rainbowkit";
1
+ import { useConnectModal as S, RainbowKitProvider as $, darkTheme as O, lightTheme as x, getDefaultConfig as M } from "@rainbow-me/rainbowkit";
2
2
  import { mainnet as U, base as G, bsc as N, polygon as j, arbitrum as L, avalanche as z, optimism as H, celo as Q, sonic as J, unichain as V, linea as X } from "wagmi/chains";
3
3
  import { safeWallet as Y, rainbowWallet as Z, metaMaskWallet as q, walletConnectWallet as F } from "@rainbow-me/rainbowkit/wallets";
4
- import { useEffect as R, useRef as B } from "react";
5
- import { useDisconnect as nn, useAccount as en, useAccountEffect as on, WagmiProvider as tn } from "wagmi";
6
- import { getAccount as _, disconnect as cn, watchAccount as rn, reconnect as sn } from "@wagmi/core";
4
+ import { useEffect as K, useRef as B, memo as nn } from "react";
5
+ import { useDisconnect as en, useAccount as on, useAccountEffect as tn, WagmiProvider as cn } from "wagmi";
6
+ import { getAccount as _, disconnect as rn, watchAccount as sn } from "@wagmi/core";
7
7
  import { jsx as D, jsxs as ln } from "react/jsx-runtime";
8
8
  import { QueryClientProvider as an } from "@tanstack/react-query";
9
- const h = "rainbowkit";
9
+ const C = "rainbowkit";
10
10
  function dn() {
11
11
  return { openModal: null, connectInProgress: !1, cancelConnect: null };
12
12
  }
13
- function un(e, n) {
14
- return () => (n.connectInProgress = !0, new Promise((u, g) => {
15
- let l = !1;
16
- const m = (c) => {
17
- l || (l = !0, n.connectInProgress = !1, n.cancelConnect = null, u(c));
18
- }, f = (c) => {
19
- l || (l = !0, n.connectInProgress = !1, n.cancelConnect = null, g(c));
13
+ function gn(c, n) {
14
+ return () => (n.connectInProgress = !0, new Promise((m, g) => {
15
+ let u = !1;
16
+ const w = (t) => {
17
+ u || (u = !0, n.connectInProgress = !1, n.cancelConnect = null, m(t));
18
+ }, d = (t) => {
19
+ u || (u = !0, n.connectInProgress = !1, n.cancelConnect = null, g(t));
20
20
  };
21
21
  n.cancelConnect = () => {
22
- f(new Error("User dismissed the connect modal"));
22
+ d(new Error("User dismissed the connect modal"));
23
23
  };
24
- let i = null;
25
- const C = (c) => {
26
- const o = c.addresses ? [...c.addresses].filter((w) => w != null) : [c.address];
27
- setTimeout(() => m(o), 200);
28
- }, d = () => {
29
- i = rn(e, {
30
- onChange(o) {
31
- var w;
32
- console.log("[RainbowKitBridge] watchAccount onChange", { isConnected: o.isConnected, address: o.address, status: o.status, connector: (w = o.connector) == null ? void 0 : w.name }), o.isConnected && o.address && (i == null || i(), i = null, C(o));
24
+ let r = null;
25
+ const h = (t) => {
26
+ const e = t.addresses ? [...t.addresses].filter((f) => f != null) : [t.address];
27
+ setTimeout(() => w(e), 200);
28
+ }, a = () => {
29
+ r = sn(c, {
30
+ onChange(e) {
31
+ var f;
32
+ console.log("[RainbowKitBridge] watchAccount onChange", { isConnected: e.isConnected, address: e.address, status: e.status, connector: (f = e.connector) == null ? void 0 : f.name }), e.isConnected && e.address && (r == null || r(), r = null, h(e));
33
33
  }
34
34
  });
35
- const c = _(e);
36
- if (c.isConnected && c.address) {
37
- i == null || i(), i = null, C(c);
35
+ const t = _(c);
36
+ if (t.isConnected && t.address) {
37
+ r == null || r(), r = null, h(t);
38
38
  return;
39
39
  }
40
40
  setTimeout(() => {
41
- i == null || i(), i = null, f(new Error("Wallet connection timed out"));
41
+ r == null || r(), r = null, d(new Error("Wallet connection timed out"));
42
42
  }, 12e4);
43
43
  };
44
44
  let s = 0;
45
- const t = () => {
46
- n.openModal ? (n.openModal(), d()) : s++ < 50 ? setTimeout(t, 50) : f(new Error("RainbowKit modal not ready"));
45
+ const o = () => {
46
+ n.openModal ? (n.openModal(), a()) : s++ < 50 ? setTimeout(o, 50) : d(new Error("RainbowKit modal not ready"));
47
47
  };
48
- _(e).isConnected ? cn(e).finally(t) : t();
48
+ _(c).isConnected ? rn(c).finally(o) : o();
49
49
  }));
50
50
  }
51
- function gn({ walletManager: e, state: n }) {
52
- const { openConnectModal: u, connectModalOpen: g } = S();
53
- R(() => (n.openModal = u ?? null, () => {
51
+ function un({ walletManager: c, state: n }) {
52
+ const { openConnectModal: m, connectModalOpen: g } = S();
53
+ K(() => (n.openModal = m ?? null, () => {
54
54
  n.openModal = null;
55
- }), [u, n]);
56
- const l = B(!1);
57
- R(() => {
58
- const t = l.current;
59
- l.current = !!g, t && !g && n.connectInProgress && setTimeout(() => {
55
+ }), [m, n]);
56
+ const u = B(!1);
57
+ K(() => {
58
+ const o = u.current;
59
+ u.current = !!g, o && !g && n.connectInProgress && setTimeout(() => {
60
60
  n.connectInProgress && n.cancelConnect && n.cancelConnect();
61
61
  }, 300);
62
62
  }, [g, n]);
63
- const { disconnect: m } = nn(), f = B(!1), i = B(null), C = () => {
64
- f.current = !0, i.current && clearTimeout(i.current), i.current = setTimeout(() => {
65
- f.current = !1;
63
+ const { disconnect: w } = en(), d = B(!1), r = B(null), h = () => {
64
+ d.current = !0, r.current && clearTimeout(r.current), r.current = setTimeout(() => {
65
+ d.current = !1;
66
66
  }, 1500);
67
67
  };
68
- R(() => () => {
69
- i.current && clearTimeout(i.current);
68
+ K(() => () => {
69
+ r.current && clearTimeout(r.current);
70
70
  }, []);
71
- const d = en(), s = B(!1);
72
- return on({
73
- onConnect({ address: t, connector: a, isReconnected: c }) {
74
- var w;
75
- if (console.log("[RainbowKitBridge] onConnect", { address: t, connector: a == null ? void 0 : a.name, isReconnected: c, connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (w = e.wallets.find((p) => p.id === h)) == null ? void 0 : w.isConnected }), n.connectInProgress || s.current) {
71
+ const a = on(), s = B(!1);
72
+ return tn({
73
+ onConnect({ address: o, connector: l, isReconnected: t }) {
74
+ var f;
75
+ if (console.log("[RainbowKitBridge] onConnect", { address: o, connector: l == null ? void 0 : l.name, isReconnected: t, connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (f = c.wallets.find((p) => p.id === C)) == null ? void 0 : f.isConnected }), n.connectInProgress || s.current) {
76
76
  console.log("[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)");
77
77
  return;
78
78
  }
79
- if (f.current) {
80
- console.log("[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect"), m();
79
+ if (d.current) {
80
+ console.log("[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect"), w();
81
81
  return;
82
82
  }
83
- const o = e.wallets.find((p) => p.id === h);
84
- o && !o.isConnected && t ? (console.log("[RainbowKitBridge] onConnect: triggering rkWallet.connect()"), s.current = !0, o.connect().then(() => console.log("[RainbowKitBridge] onConnect: rkWallet.connect() succeeded")).catch((p) => {
83
+ const e = c.wallets.find((p) => p.id === C);
84
+ e && !e.isConnected && o ? (console.log("[RainbowKitBridge] onConnect: triggering rkWallet.connect()"), s.current = !0, e.connect().then(() => console.log("[RainbowKitBridge] onConnect: rkWallet.connect() succeeded")).catch((p) => {
85
85
  console.warn("[RainbowKitBridge] auto-connect failed:", p.message);
86
86
  }).finally(() => {
87
87
  s.current = !1;
88
- })) : console.log("[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)", o == null ? void 0 : o.isConnected, t);
88
+ })) : console.log("[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)", e == null ? void 0 : e.isConnected, o);
89
89
  },
90
90
  onDisconnect() {
91
- var a, c;
92
- if (console.log("[RainbowKitBridge] onDisconnect", { connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (a = e.wallets.find((o) => o.id === h)) == null ? void 0 : a.isConnected, rkWalletDisconnecting: (c = e.wallets.find((o) => o.id === h)) == null ? void 0 : c.isDisconnecting }), n.connectInProgress || s.current) {
91
+ var l, t;
92
+ if (console.log("[RainbowKitBridge] onDisconnect", { connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (l = c.wallets.find((e) => e.id === C)) == null ? void 0 : l.isConnected, rkWalletDisconnecting: (t = c.wallets.find((e) => e.id === C)) == null ? void 0 : t.isDisconnecting }), n.connectInProgress || s.current) {
93
93
  console.log("[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)");
94
94
  return;
95
95
  }
96
- C();
97
- const t = e.wallets.find((o) => o.id === h);
98
- t && t.isConnected && !t.isDisconnecting ? (console.log("[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()"), t.disconnect().catch((o) => {
99
- console.warn("[RainbowKitBridge] auto-disconnect failed:", o.message);
100
- })) : console.log("[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)", t == null ? void 0 : t.isConnected, t == null ? void 0 : t.isDisconnecting);
96
+ h();
97
+ const o = c.wallets.find((e) => e.id === C);
98
+ o && o.isConnected && !o.isDisconnecting ? (console.log("[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()"), o.disconnect().catch((e) => {
99
+ console.warn("[RainbowKitBridge] auto-disconnect failed:", e.message);
100
+ })) : console.log("[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)", o == null ? void 0 : o.isConnected, o == null ? void 0 : o.isDisconnecting);
101
101
  }
102
- }), R(() => {
103
- if (console.log("[RainbowKitBridge] account.status changed:", d.status, { connectInProgress: n.connectInProgress, connectingRef: s.current }), d.status === "disconnected" && !n.connectInProgress && !s.current) {
104
- const t = e.wallets.find((a) => a.id === h);
105
- t != null && t.isConnected && !t.isDisconnecting && (console.log("[RainbowKitBridge] stale-disconnect safety net triggered"), t.disconnect().catch((a) => {
106
- console.warn("[RainbowKitBridge] stale-disconnect cleanup failed:", a.message);
102
+ }), K(() => {
103
+ if (console.log("[RainbowKitBridge] account.status changed:", a.status, { connectInProgress: n.connectInProgress, connectingRef: s.current }), a.status === "disconnected" && !n.connectInProgress && !s.current) {
104
+ const o = c.wallets.find((l) => l.id === C);
105
+ o != null && o.isConnected && !o.isDisconnecting && (console.log("[RainbowKitBridge] stale-disconnect safety net triggered"), o.disconnect().catch((l) => {
106
+ console.warn("[RainbowKitBridge] stale-disconnect cleanup failed:", l.message);
107
107
  }));
108
108
  }
109
- }, [d.status, e, n]), R(() => {
110
- var t, a;
111
- if (console.log("[RainbowKitBridge] mount/account effect", { isConnected: d.isConnected, address: d.address, connector: (t = d.connector) == null ? void 0 : t.name, connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (a = e.wallets.find((c) => c.id === h)) == null ? void 0 : a.isConnected }), d.isConnected && d.address) {
112
- if (f.current) {
113
- console.log("[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect"), m();
109
+ }, [a.status, c, n]), K(() => {
110
+ var o, l;
111
+ if (console.log("[RainbowKitBridge] mount/account effect", { isConnected: a.isConnected, address: a.address, connector: (o = a.connector) == null ? void 0 : o.name, connectInProgress: n.connectInProgress, connectingRef: s.current, rkWalletConnected: (l = c.wallets.find((t) => t.id === C)) == null ? void 0 : l.isConnected }), a.isConnected && a.address) {
112
+ if (d.current) {
113
+ console.log("[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect"), w();
114
114
  return;
115
115
  }
116
- const c = e.wallets.find((o) => o.id === h);
117
- c && !s.current && !n.connectInProgress ? c.isConnected ? (console.log("[RainbowKitBridge] mount effect: resuming session"), c.resumeSession().catch(() => {
118
- })) : (console.log("[RainbowKitBridge] mount effect: triggering rkWallet.connect()"), s.current = !0, c.connect().then(() => console.log("[RainbowKitBridge] mount effect: rkWallet.connect() succeeded")).catch((o) => {
119
- console.warn("[RainbowKitBridge] mount auto-connect failed:", o.message);
116
+ const t = c.wallets.find((e) => e.id === C);
117
+ t && !s.current && !n.connectInProgress ? t.isConnected ? (console.log("[RainbowKitBridge] mount effect: resuming session"), t.resumeSession().catch(() => {
118
+ })) : (console.log("[RainbowKitBridge] mount effect: triggering rkWallet.connect()"), s.current = !0, t.connect().then(() => console.log("[RainbowKitBridge] mount effect: rkWallet.connect() succeeded")).catch((e) => {
119
+ console.warn("[RainbowKitBridge] mount auto-connect failed:", e.message);
120
120
  }).finally(() => {
121
121
  s.current = !1;
122
- })) : console.log("[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)", n.connectInProgress, s.current, c == null ? void 0 : c.isConnected);
122
+ })) : console.log("[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)", n.connectInProgress, s.current, t == null ? void 0 : t.isConnected);
123
123
  }
124
- }, [d.isConnected, d.address, e]), null;
124
+ }, [a.isConnected, a.address, c]), null;
125
125
  }
126
- function fn(e) {
127
- const n = B(!1);
128
- R(() => {
129
- n.current || (n.current = !0, sn(e).finally(() => {
130
- for (const u of e.connectors) {
131
- const g = u.connect.bind(u);
132
- u.connect = async (l) => {
133
- var m;
134
- return l != null && l.isReconnecting ? (console.log(`[wagmi] suppressing reconnect for connector "${u.name}"`), { accounts: [], chainId: ((m = e.chains[0]) == null ? void 0 : m.id) ?? 1 }) : g(l);
135
- };
136
- }
137
- }));
138
- }, [e]);
139
- }
140
- function mn(e, n) {
141
- return function({
126
+ function fn(c, n) {
127
+ return nn(function({
142
128
  queryClient: g,
143
- resolvedTheme: l,
144
- walletManager: m,
145
- children: f
129
+ resolvedTheme: u,
130
+ walletManager: w,
131
+ children: d
146
132
  }) {
147
- return fn(e), /* @__PURE__ */ D(tn, { config: e, reconnectOnMount: !1, children: /* @__PURE__ */ D(an, { client: g, children: /* @__PURE__ */ ln($, { theme: l === "dark" ? O() : M(), children: [
148
- /* @__PURE__ */ D(gn, { walletManager: m, state: n }),
149
- f
133
+ return /* @__PURE__ */ D(cn, { config: c, children: /* @__PURE__ */ D(an, { client: g, children: /* @__PURE__ */ ln($, { theme: u === "dark" ? O() : x(), children: [
134
+ /* @__PURE__ */ D(un, { walletManager: w, state: n }),
135
+ d
150
136
  ] }) }) });
151
- };
137
+ });
152
138
  }
153
- const A = [U, G, N, j, L, z, H, Q, J, V, X], wn = [
139
+ const A = [U, G, N, j, L, z, H, Q, J, V, X], mn = [
154
140
  {
155
141
  groupName: "Popular",
156
142
  wallets: [Y, Z, q, F]
157
143
  }
158
144
  ];
159
- function pn() {
145
+ function wn() {
160
146
  try {
161
- for (const e of Object.keys(localStorage))
162
- /^wc@2:/.test(e) && /(pairing|request|message)/.test(e) && localStorage.removeItem(e);
147
+ for (const c of Object.keys(localStorage))
148
+ /^wc@2:/.test(c) && /(pairing|request|message)/.test(c) && localStorage.removeItem(c);
163
149
  } catch {
164
150
  }
165
151
  }
166
- const vn = (e) => {
167
- var w, p;
168
- pn();
169
- const n = e, u = !!n.debug, g = n.appUrl ?? (typeof window < "u" ? window.location.origin : void 0), l = n.chains ?? [], m = new Set(A.map((r) => r.id)), f = l.filter((r) => !m.has(r.id)), i = [...A, ...f], C = typeof window < "u" ? window.location.origin : void 0, d = ((w = n.walletConnectParameters) == null ? void 0 : w.metadata) ?? {}, s = [
152
+ const Bn = (c) => {
153
+ var f, p;
154
+ wn();
155
+ const n = c, m = !!n.debug, g = n.appUrl ?? (typeof window < "u" ? window.location.origin : void 0), u = n.chains ?? [], w = new Set(A.map((i) => i.id)), d = u.filter((i) => !w.has(i.id)), r = [...A, ...d], h = typeof window < "u" ? window.location.origin : void 0, a = ((f = n.walletConnectParameters) == null ? void 0 : f.metadata) ?? {}, s = [
170
156
  "eth_call",
171
157
  "eth_chainId",
172
158
  "eth_blockNumber",
@@ -179,61 +165,61 @@ const vn = (e) => {
179
165
  "wallet_getCapabilities",
180
166
  "wallet_sendCalls",
181
167
  "wallet_getCallsStatus"
182
- ], t = ((p = n.walletConnectParameters) == null ? void 0 : p.optionalMethods) ?? [], a = [
183
- .../* @__PURE__ */ new Set([...s, ...t])
184
- ], c = {
168
+ ], o = ((p = n.walletConnectParameters) == null ? void 0 : p.optionalMethods) ?? [], l = [
169
+ .../* @__PURE__ */ new Set([...s, ...o])
170
+ ], t = {
185
171
  ...n.walletConnectParameters,
186
- optionalMethods: a,
187
- ...C ? {
172
+ optionalMethods: l,
173
+ ...h ? {
188
174
  metadata: {
189
175
  icons: [],
190
- ...d,
176
+ ...a,
191
177
  redirect: {
192
- universal: C,
193
- ...d.redirect
178
+ universal: h,
179
+ ...a.redirect
194
180
  }
195
181
  }
196
182
  } : {}
197
- }, o = x({
198
- wallets: wn,
199
- ...e,
200
- chains: i,
183
+ }, e = M({
184
+ wallets: mn,
185
+ ...c,
186
+ chains: r,
201
187
  ...g ? { appUrl: g } : {},
202
- ...c ? { walletConnectParameters: c } : {}
188
+ ...t ? { walletConnectParameters: t } : {}
203
189
  });
204
- if (u) {
205
- o.subscribe(
206
- (r) => ({
207
- chainId: r.chainId,
208
- current: r.current,
209
- status: r.status,
210
- connections: r.connections.size
190
+ if (m) {
191
+ e.subscribe(
192
+ (i) => ({
193
+ chainId: i.chainId,
194
+ current: i.current,
195
+ status: i.status,
196
+ connections: i.connections.size
211
197
  }),
212
- (r, v) => {
213
- console.log("[wagmi] state change", { prev: v, next: r });
198
+ (i, v) => {
199
+ console.log("[wagmi] state change", { prev: v, next: i });
214
200
  }
215
201
  );
216
- for (const r of o.connectors) {
217
- r.emitter.on("connect", (b) => {
218
- console.log(`[wagmi] connector "${r.name}" connect`, b);
219
- }), r.emitter.on("disconnect", () => {
220
- console.log(`[wagmi] connector "${r.name}" disconnect`);
221
- }), r.emitter.on("change", (b) => {
222
- console.log(`[wagmi] connector "${r.name}" change`, b);
202
+ for (const i of e.connectors) {
203
+ i.emitter.on("connect", (R) => {
204
+ console.log(`[wagmi] connector "${i.name}" connect`, R);
205
+ }), i.emitter.on("disconnect", () => {
206
+ console.log(`[wagmi] connector "${i.name}" disconnect`);
207
+ }), i.emitter.on("change", (R) => {
208
+ console.log(`[wagmi] connector "${i.name}" change`, R);
223
209
  });
224
- const v = r.getProvider.bind(r);
210
+ const v = i.getProvider.bind(i);
225
211
  let y = null, W = null;
226
- r.getProvider = async (...b) => {
227
- const P = await v(...b);
228
- return P && (W === P || (W = P, y = new Proxy(P, {
212
+ i.getProvider = async (...R) => {
213
+ const b = await v(...R);
214
+ return b && (W === b || (W = b, y = new Proxy(b, {
229
215
  get(k, T, E) {
230
- return T === "request" ? async (I) => {
231
- console.log(`[wagmi:rpc] >> ${r.name} ${I.method}`, I.params ?? []);
216
+ return T === "request" ? async (P) => {
217
+ console.log(`[wagmi:rpc] >> ${i.name} ${P.method}`, P.params ?? []);
232
218
  try {
233
- const K = await k.request(I);
234
- return console.log(`[wagmi:rpc] << ${r.name} ${I.method}`, K), K;
235
- } catch (K) {
236
- throw console.error(`[wagmi:rpc] ERR ${r.name} ${I.method}`, K), K;
219
+ const I = await k.request(P);
220
+ return console.log(`[wagmi:rpc] << ${i.name} ${P.method}`, I), I;
221
+ } catch (I) {
222
+ throw console.error(`[wagmi:rpc] ERR ${i.name} ${P.method}`, I), I;
237
223
  }
238
224
  } : Reflect.get(k, T, E);
239
225
  }
@@ -241,17 +227,17 @@ const vn = (e) => {
241
227
  };
242
228
  }
243
229
  }
244
- return o;
230
+ return e;
245
231
  };
246
- function yn(e) {
247
- const n = dn(), u = un(e.wagmiConfig, n);
248
- return { Provider: mn(e.wagmiConfig, n), getEvmAccounts: u };
232
+ function vn(c) {
233
+ const n = dn(), m = gn(c.wagmiConfig, n);
234
+ return { Provider: fn(c.wagmiConfig, n), getEvmAccounts: m };
249
235
  }
250
236
  export {
251
- gn as RainbowKitBridge,
252
- un as createGetEvmAccounts,
237
+ un as RainbowKitBridge,
238
+ gn as createGetEvmAccounts,
253
239
  dn as createRainbowKitBridgeState,
254
- yn as createRainbowKitConfig,
255
- vn as getDefaultConfig
240
+ vn as createRainbowKitConfig,
241
+ Bn as getDefaultConfig
256
242
  };
257
243
  //# sourceMappingURL=rainbowkit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rainbowkit.js","sources":["../../src/components/RainbowKitBridge.tsx","../../src/components/RainbowKitAutoProvider.tsx","../../src/rainbowkit.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useConnectModal } from '@rainbow-me/rainbowkit'\nimport { useAccount, useAccountEffect, useDisconnect } from 'wagmi'\nimport { watchAccount, disconnect as wagmiDisconnect, getAccount } from '@wagmi/core'\n\nconst RAINBOWKIT_ID = 'rainbowkit'\n\n// ---------------------------------------------------------------------------\n// Structural types — avoid importing exact types from @wagmi/core and\n// @txnlab/use-wallet-react so consumers don't hit version-mismatch errors\n// when different copies of viem / use-wallet are resolved across the monorepo.\n// ---------------------------------------------------------------------------\n\n/** Wagmi Config — derived from watchAccount so no direct @wagmi/core type import is needed. */\nexport type WagmiConfig = Parameters<typeof watchAccount>[0]\n\n/** Minimal wallet interface used by the bridge. */\ninterface WalletLike {\n id: string\n isConnected: boolean\n /** Set by RainbowKitWallet while its own disconnect() is running. Prevents re-entrancy. */\n isDisconnecting?: boolean\n connect: () => Promise<unknown>\n disconnect: () => Promise<void>\n resumeSession: () => Promise<void>\n}\n\n/** Minimal WalletManager interface used by the bridge. */\nexport interface WalletManagerLike {\n wallets: WalletLike[]\n}\n\n/**\n * Shared mutable state between the RainbowKitBridge component (which captures\n * the modal opener and watches modal close) and the getEvmAccounts callback.\n */\nexport interface RainbowKitBridgeState {\n openModal: (() => void) | null\n connectInProgress: boolean\n /** Called by the bridge component when the modal is dismissed without connecting. */\n cancelConnect: (() => void) | null\n}\n\n/** Create the shared state object. Call once at module level. */\nexport function createRainbowKitBridgeState(): RainbowKitBridgeState {\n return { openModal: null, connectInProgress: false, cancelConnect: null }\n}\n\n/**\n * Create a `getEvmAccounts` callback for RainbowKitWallet options.\n *\n * When called, it:\n * 1. Disconnects any existing wagmi session (to show fresh wallet selection)\n * 2. Opens the RainbowKit connect modal\n * 3. Watches wagmi state for a new connection\n * 4. Resolves with the connected EVM addresses\n *\n * If the user closes the modal without connecting, the bridge component\n * calls `state.cancelConnect()` which rejects the promise and clears the\n * in-progress flag so `connect()` can be called again.\n *\n * Must be used together with `<RainbowKitBridge />` in the component tree.\n */\nexport function createGetEvmAccounts(\n wagmiConfig: WagmiConfig,\n state: RainbowKitBridgeState,\n): () => Promise<string[]> {\n return () => {\n state.connectInProgress = true\n return new Promise<string[]>((resolve, reject) => {\n let settled = false\n\n const done = (result: string[]) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n resolve(result)\n }\n const fail = (err: Error) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n reject(err)\n }\n\n // Register cancellation handler — called by the bridge component\n // when the RainbowKit modal closes without a connection.\n state.cancelConnect = () => {\n fail(new Error('User dismissed the connect modal'))\n }\n\n let unwatchFn: (() => void) | null = null\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolveWithAccount = (account: any) => {\n const addrs: string[] = account.addresses\n ? [...account.addresses].filter((a: unknown): a is string => a != null)\n : [account.address as string]\n\n // Delay briefly so RainbowKit can detect the connection and\n // close its modal before our connect() flow continues.\n setTimeout(() => done(addrs), 200)\n }\n\n const startWatching = () => {\n unwatchFn = watchAccount(wagmiConfig, {\n onChange(account) {\n console.log('[RainbowKitBridge] watchAccount onChange', { isConnected: account.isConnected, address: account.address, status: account.status, connector: account.connector?.name })\n if (account.isConnected && account.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(account)\n }\n },\n })\n\n // Handle the race where the wallet connected between wagmiDisconnect\n // resolving and watchAccount being registered — watchAccount only fires\n // on changes, so a connection that already happened is invisible to it.\n const current = getAccount(wagmiConfig)\n if (current.isConnected && current.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(current)\n return\n }\n\n // Timeout after 2 minutes\n setTimeout(() => {\n unwatchFn?.()\n unwatchFn = null\n fail(new Error('Wallet connection timed out'))\n }, 120_000)\n }\n\n // Wait for the RainbowKit modal opener to become available.\n // RainbowKit only provides openConnectModal when disconnected,\n // so after wagmi disconnect we poll briefly for React to re-enable it.\n let attempts = 0\n const tryOpen = () => {\n if (state.openModal) {\n state.openModal()\n startWatching()\n } else if (attempts++ < 50) {\n setTimeout(tryOpen, 50)\n } else {\n fail(new Error('RainbowKit modal not ready'))\n }\n }\n\n // Disconnect existing session so modal shows wallet selection\n const currentAccount = getAccount(wagmiConfig)\n if (currentAccount.isConnected) {\n wagmiDisconnect(wagmiConfig).finally(tryOpen)\n } else {\n tryOpen()\n }\n })\n }\n}\n\nexport interface RainbowKitBridgeProps {\n walletManager: WalletManagerLike\n state: RainbowKitBridgeState\n}\n\n/**\n * Bridge component that syncs RainbowKit/wagmi wallet state with use-wallet.\n *\n * - Captures RainbowKit's `openConnectModal` into the shared state so the\n * `getEvmAccounts` callback can trigger it from outside React.\n * - Watches `connectModalOpen` to detect when the user dismisses the modal\n * without connecting, and cancels the pending connect promise.\n * - Auto-connects the use-wallet RainbowKit wallet when wagmi connects.\n * - Auto-disconnects when wagmi disconnects.\n * - On mount, resumes session if wagmi is already connected.\n *\n * Place inside `<RainbowKitProvider>`.\n */\nexport function RainbowKitBridge({ walletManager, state }: RainbowKitBridgeProps) {\n // Capture RainbowKit's openConnectModal and connectModalOpen\n const { openConnectModal, connectModalOpen } = useConnectModal()\n useEffect(() => {\n state.openModal = openConnectModal ?? null\n return () => {\n state.openModal = null\n }\n }, [openConnectModal, state])\n\n // Track previous modal state to detect close transitions\n const prevModalOpenRef = useRef(false)\n useEffect(() => {\n const wasOpen = prevModalOpenRef.current\n prevModalOpenRef.current = !!connectModalOpen\n\n // Modal just closed (true → false) while a connect is in progress\n // and no wallet connected = user dismissed without connecting\n if (wasOpen && !connectModalOpen && state.connectInProgress) {\n // Small delay to allow any in-flight connection to settle\n setTimeout(() => {\n if (state.connectInProgress && state.cancelConnect) {\n state.cancelConnect()\n }\n }, 300)\n }\n }, [connectModalOpen, state])\n\n // Suppress spurious wagmi reconnects after a user-initiated disconnect\n const { disconnect: disconnectWagmi } = useDisconnect()\n const suppressReconnectRef = useRef(false)\n const suppressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const suppressReconnect = () => {\n suppressReconnectRef.current = true\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n suppressTimerRef.current = setTimeout(() => {\n suppressReconnectRef.current = false\n }, 1_500)\n }\n\n useEffect(() => () => {\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n }, [])\n\n // Sync wagmi account changes with use-wallet\n const account = useAccount()\n const connectingRef = useRef(false)\n\n useAccountEffect({\n onConnect({ address, connector, isReconnected }) {\n console.log('[RainbowKitBridge] onConnect', { address, connector: connector?.name, isReconnected, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n // Ignore events during getEvmAccounts flow — the SDK handles the connect\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)')\n return\n }\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet && !rkWallet.isConnected && address) {\n console.log('[RainbowKitBridge] onConnect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] onConnect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n console.log('[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)', rkWallet?.isConnected, address)\n }\n },\n onDisconnect() {\n console.log('[RainbowKitBridge] onDisconnect', { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected, rkWalletDisconnecting: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isDisconnecting })\n // Ignore wagmi disconnect events during the connect flow (getEvmAccounts\n // disconnects the old session before showing the wallet selection modal)\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)')\n return\n }\n suppressReconnect()\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if RainbowKitWallet.disconnect() itself triggered this wagmi event —\n // it already handles its own cleanup. Only act on external disconnects\n // (e.g. user clicked Disconnect inside RainbowKit's AccountModal).\n if (rkWallet && rkWallet.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-disconnect failed:', err.message)\n })\n } else {\n console.log('[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)', rkWallet?.isConnected, rkWallet?.isDisconnecting)\n }\n },\n })\n\n // Safety net: catch wagmi reconnect failures that fired before onDisconnect was registered.\n // If wagmi lands in 'disconnected' while use-wallet still thinks the wallet is connected,\n // clean up so the user is prompted to reconnect instead of hitting a signing error later.\n useEffect(() => {\n console.log('[RainbowKitBridge] account.status changed:', account.status, { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current })\n if (account.status === 'disconnected' && !state.connectInProgress && !connectingRef.current) {\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet?.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] stale-disconnect safety net triggered')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] stale-disconnect cleanup failed:', err.message)\n })\n }\n }\n }, [account.status, walletManager, state])\n\n // On mount / when wagmi state changes, sync with use-wallet\n useEffect(() => {\n console.log('[RainbowKitBridge] mount/account effect', { isConnected: account.isConnected, address: account.address, connector: account.connector?.name, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n if (account.isConnected && account.address) {\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if getEvmAccounts flow is in progress — it handles its own connect\n if (rkWallet && !connectingRef.current && !state.connectInProgress) {\n if (!rkWallet.isConnected) {\n // Wallet not connected in store — do a full connect\n console.log('[RainbowKitBridge] mount effect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] mount effect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] mount auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n // Wallet connected in store but instance may need session resumed\n // (e.g., after WalletManager recreation on network switch)\n console.log('[RainbowKitBridge] mount effect: resuming session')\n rkWallet.resumeSession().catch(() => {})\n }\n } else {\n console.log('[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)', state.connectInProgress, connectingRef.current, rkWallet?.isConnected)\n }\n }\n }, [account.isConnected, account.address, walletManager])\n\n return null\n}\n","import { type ReactNode, useEffect, useRef } from 'react'\nimport { WagmiProvider } from 'wagmi'\nimport { reconnect } from '@wagmi/core'\nimport { type QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { RainbowKitProvider, lightTheme, darkTheme } from '@rainbow-me/rainbowkit'\nimport { RainbowKitBridge, type RainbowKitBridgeState, type WagmiConfig } from './RainbowKitBridge'\nimport type { ResolvedTheme } from '../hooks/useResolvedTheme'\n\n/**\n * Perform a one-time reconnect on mount then patch every connector so that\n * subsequent reconnecting-mode `connect()` calls (isReconnecting: true) are\n * no-ops. This prevents wagmi's internal reconnect cycles — triggered by\n * WalletConnect relay reconnections when switching apps on mobile — from\n * disrupting pending RPC calls like `eth_signTypedData_v4`.\n */\nfunction useOneTimeReconnect(wagmiConfig: WagmiConfig) {\n const patched = useRef(false)\n\n useEffect(() => {\n if (patched.current) return\n patched.current = true\n\n // Do the initial reconnect to restore persisted sessions, then lock\n // every connector so that future reconnecting-mode connect() calls are\n // swallowed. Normal (non-reconnecting) connect() calls are unaffected.\n reconnect(wagmiConfig).finally(() => {\n for (const connector of wagmiConfig.connectors) {\n const originalConnect = connector.connect.bind(connector)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connector.connect = async (params?: any) => {\n if (params?.isReconnecting) {\n console.log(`[wagmi] suppressing reconnect for connector \"${connector.name}\"`)\n // Return a minimal result so wagmi doesn't throw.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { accounts: [] as any, chainId: wagmiConfig.chains[0]?.id ?? 1 }\n }\n return originalConnect(params)\n }\n }\n })\n }, [wagmiConfig])\n}\n\n/**\n * Create a bound Provider component for use by WalletUIProvider.\n * Called once by `createRainbowKitConfig` — the returned component captures\n * `wagmiConfig` and `bridgeState` in closure so WalletUIProvider only needs\n * to pass `queryClient`, `resolvedTheme`, `walletManager`, and `children`.\n */\nexport function createBoundProvider(wagmiConfig: WagmiConfig, bridgeState: RainbowKitBridgeState) {\n return function RainbowKitAutoProvider({\n queryClient,\n resolvedTheme,\n walletManager,\n children,\n }: {\n queryClient: QueryClient\n resolvedTheme: ResolvedTheme\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletManager: any\n children: ReactNode\n }) {\n useOneTimeReconnect(wagmiConfig)\n\n return (\n <WagmiProvider config={wagmiConfig} reconnectOnMount={false}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider theme={resolvedTheme === 'dark' ? darkTheme() : lightTheme()}>\n <RainbowKitBridge walletManager={walletManager} state={bridgeState} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n )\n }\n}\n","import { getDefaultConfig as rkGetDefaultConfig } from '@rainbow-me/rainbowkit'\nimport {\n mainnet,\n base,\n bsc,\n polygon,\n arbitrum,\n avalanche,\n optimism,\n celo,\n sonic,\n unichain,\n linea,\n} from 'wagmi/chains'\n\nimport {\n safeWallet,\n rainbowWallet,\n metaMaskWallet,\n walletConnectWallet,\n} from '@rainbow-me/rainbowkit/wallets'\nimport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n type RainbowKitBridgeState,\n type RainbowKitBridgeProps,\n type WalletManagerLike,\n type WagmiConfig,\n} from './components/RainbowKitBridge'\nimport { createBoundProvider } from './components/RainbowKitAutoProvider'\nimport type { RainbowKitUIConfig } from './providers/WalletUIProvider'\n\n/**\n * EVM chains supported by the Allbridge bridge integration.\n * Registered in the wagmi config so that wallet operations (signTypedData,\n * getConnectorClient, etc.) work when MetaMask is on any of these networks.\n */\nconst BRIDGE_CHAINS = [mainnet, base, bsc, polygon, arbitrum, avalanche, optimism, celo, sonic, unichain, linea]\n\nconst DEFAULT_WALLETS = [\n {\n groupName: 'Popular',\n wallets: [safeWallet, rainbowWallet, metaMaskWallet, walletConnectWallet],\n },\n]\n\n/**\n * Clear stale WalletConnect v2 pairing data from localStorage.\n *\n * WC2 distinguishes between *pairings* (ephemeral, used only during the\n * session negotiation handshake) and *sessions* (persistent, used to\n * reconnect on page reload). Stale pairings left over from previous\n * connection attempts cause \"No matching key / session topic doesn't exist\"\n * relay errors on mobile wallets, which prevent the `session_settle` event\n * from being delivered and leave the frontend stuck after the user accepts\n * the connection on their phone.\n *\n * Clearing pairings at startup is safe: active sessions are stored under\n * separate keys and are not affected, so wallet reconnection on page reload\n * continues to work normally.\n */\nfunction clearStaleWcPairings(): void {\n try {\n for (const key of Object.keys(localStorage)) {\n // Match any WC2 key that belongs to the pairing or request subsystem.\n // Session keys (wc@2:client:*:session) are intentionally left intact.\n if (/^wc@2:/.test(key) && /(pairing|request|message)/.test(key)) {\n localStorage.removeItem(key)\n }\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing restrictions)\n }\n}\n\n/**\n * Like RainbowKit's `getDefaultConfig`, but with mobile WalletConnect fixes\n * applied by default:\n *\n * - Excludes the Base Account wallet from the default wallet list (pass an\n * explicit `wallets` array to override).\n * - Clears stale WalletConnect v2 pairing data to prevent \"No matching key\"\n * relay errors on mobile wallets.\n * - Registers Allbridge-compatible EVM chains (mainnet, Base, BNB, Polygon,\n * Arbitrum, Avalanche, Optimism, Celo, Sonic, Unichain, Linea) so that\n * wagmi operations work regardless of which network the wallet is on.\n * - Sets `walletConnectParameters.metadata.redirect.universal` to the current\n * origin so that MetaMask Mobile redirects back to the browser tab after\n * signing, allowing the WalletConnect relay response to be delivered.\n *\n * All defaults can be overridden by the caller.\n */\nexport const getDefaultConfig = (params: Parameters<typeof rkGetDefaultConfig>[0] & { debug?: boolean }) => {\n clearStaleWcPairings()\n\n const p = params as Record<string, any>\n const debug = !!p.debug\n const appUrl: string | undefined = p.appUrl ?? (typeof window !== 'undefined' ? window.location.origin : undefined)\n\n // Merge bridge-compatible chains with user chains so that wagmi operations\n // work regardless of which EVM network the wallet is currently on.\n // Bridge chains first (mainnet at index 0) so wagmi's auto-switch after\n // connect targets a real EVM chain, not a virtual one like algorandChain.\n const userChains: any[] = p.chains ?? []\n const bridgeChainIds = new Set(BRIDGE_CHAINS.map((c) => c.id))\n const extraUserChains = userChains.filter((c: any) => !bridgeChainIds.has(c.id))\n const chains = [...BRIDGE_CHAINS, ...extraUserChains]\n\n // Default mobile redirect so MetaMask Mobile returns to the browser tab.\n const redirectUrl: string | undefined = typeof window !== 'undefined' ? window.location.origin : undefined\n const userWcMeta = p.walletConnectParameters?.metadata ?? {}\n\n // Register all EVM methods used across use-wallet and use-wallet-ui as\n // optional WalletConnect session methods so the wallet routes them through\n // the WC channel instead of treating them as read-only RPC requests (which\n // can 403 on public RPCs like mainnet.base.org).\n const bridgeOptionalMethods = [\n 'eth_call',\n 'eth_chainId',\n 'eth_blockNumber',\n 'eth_sendTransaction',\n 'eth_estimateGas',\n 'eth_getTransactionReceipt',\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getCapabilities',\n 'wallet_sendCalls',\n 'wallet_getCallsStatus',\n ]\n const userOptionalMethods: string[] = p.walletConnectParameters?.optionalMethods ?? []\n const optionalMethods = [\n ...new Set([...bridgeOptionalMethods, ...userOptionalMethods]),\n ]\n\n const walletConnectParameters = {\n ...p.walletConnectParameters,\n optionalMethods,\n ...(redirectUrl\n ? {\n metadata: {\n icons: [],\n ...userWcMeta,\n redirect: {\n universal: redirectUrl,\n ...userWcMeta.redirect,\n },\n },\n }\n : {}),\n }\n\n const config = rkGetDefaultConfig({\n wallets: DEFAULT_WALLETS,\n ...params,\n chains: chains as any,\n ...(appUrl ? { appUrl } : {}),\n ...(walletConnectParameters ? { walletConnectParameters } : {}),\n })\n\n if (debug) {\n // Debug: log wagmi state transitions (connections, chain changes)\n config.subscribe(\n (state) => ({\n chainId: state.chainId,\n current: state.current,\n status: state.status,\n connections: state.connections.size,\n }),\n (next, prev) => {\n console.log('[wagmi] state change', { prev, next })\n },\n )\n\n // Debug: log connector events and wrap provider requests\n for (const connector of config.connectors) {\n connector.emitter.on('connect', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" connect`, data)\n })\n connector.emitter.on('disconnect', () => {\n console.log(`[wagmi] connector \"${connector.name}\" disconnect`)\n })\n connector.emitter.on('change', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" change`, data)\n })\n\n // Wrap getProvider to log all EIP-1193 request/response traffic.\n // We return a Proxy instead of mutating provider.request so that\n // MetaMask SDK's internal this.request calls stay on the untouched\n // original provider and don't recurse through our logging layer.\n const origGetProvider = connector.getProvider.bind(connector)\n let cachedProxy: any = null\n let cachedTarget: any = null\n connector.getProvider = async (...args: any[]) => {\n const provider = await origGetProvider(...args)\n if (!provider) return provider\n // Re-use the same Proxy for the same underlying provider\n if (cachedTarget === provider) return cachedProxy\n cachedTarget = provider\n cachedProxy = new Proxy(provider, {\n get(target, prop, receiver) {\n if (prop === 'request') {\n return async (req: { method: string; params?: unknown[] }) => {\n console.log(`[wagmi:rpc] >> ${connector.name} ${req.method}`, req.params ?? [])\n try {\n const result = await target.request(req)\n console.log(`[wagmi:rpc] << ${connector.name} ${req.method}`, result)\n return result\n } catch (err) {\n console.error(`[wagmi:rpc] ERR ${connector.name} ${req.method}`, err)\n throw err\n }\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n })\n return cachedProxy\n }\n }\n }\n\n return config\n}\n\n// Backward-compatible exports\nexport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n}\n\nexport type {\n RainbowKitBridgeState,\n RainbowKitBridgeProps,\n WalletManagerLike,\n}\n\nexport type { RainbowKitUIConfig }\n\n/**\n * Create a RainbowKit configuration for WalletUIProvider.\n *\n * Call once at module level (or in a useMemo) and pass the result to\n * `<WalletUIProvider rainbowkit={...}>`. The provider handles all\n * WagmiProvider/RainbowKitProvider/bridge wiring internally.\n */\nexport function createRainbowKitConfig(options: { wagmiConfig: WagmiConfig }): RainbowKitUIConfig {\n const bridgeState = createRainbowKitBridgeState()\n const getEvmAccounts = createGetEvmAccounts(options.wagmiConfig, bridgeState)\n const Provider = createBoundProvider(options.wagmiConfig, bridgeState)\n\n return { Provider, getEvmAccounts }\n}\n"],"names":["RAINBOWKIT_ID","createRainbowKitBridgeState","createGetEvmAccounts","wagmiConfig","state","resolve","reject","settled","done","result","fail","err","unwatchFn","resolveWithAccount","account","addrs","a","startWatching","watchAccount","_a","current","getAccount","attempts","tryOpen","wagmiDisconnect","RainbowKitBridge","walletManager","openConnectModal","connectModalOpen","useConnectModal","useEffect","prevModalOpenRef","useRef","wasOpen","disconnectWagmi","useDisconnect","suppressReconnectRef","suppressTimerRef","suppressReconnect","useAccount","connectingRef","useAccountEffect","address","connector","isReconnected","w","rkWallet","_b","useOneTimeReconnect","patched","reconnect","originalConnect","params","createBoundProvider","bridgeState","queryClient","resolvedTheme","children","WagmiProvider","QueryClientProvider","jsxs","RainbowKitProvider","darkTheme","lightTheme","jsx","BRIDGE_CHAINS","mainnet","base","bsc","polygon","arbitrum","avalanche","optimism","celo","sonic","unichain","linea","DEFAULT_WALLETS","safeWallet","rainbowWallet","metaMaskWallet","walletConnectWallet","clearStaleWcPairings","key","getDefaultConfig","p","debug","appUrl","userChains","bridgeChainIds","c","extraUserChains","chains","redirectUrl","userWcMeta","bridgeOptionalMethods","userOptionalMethods","optionalMethods","walletConnectParameters","config","rkGetDefaultConfig","next","prev","data","origGetProvider","cachedProxy","cachedTarget","args","provider","target","prop","receiver","req","createRainbowKitConfig","options","getEvmAccounts"],"mappings":"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"}
1
+ {"version":3,"file":"rainbowkit.js","sources":["../../src/components/RainbowKitBridge.tsx","../../src/components/RainbowKitAutoProvider.tsx","../../src/rainbowkit.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\nimport { useConnectModal } from '@rainbow-me/rainbowkit'\nimport { useAccount, useAccountEffect, useDisconnect } from 'wagmi'\nimport { watchAccount, disconnect as wagmiDisconnect, getAccount } from '@wagmi/core'\n\nconst RAINBOWKIT_ID = 'rainbowkit'\n\n// ---------------------------------------------------------------------------\n// Structural types — avoid importing exact types from @wagmi/core and\n// @txnlab/use-wallet-react so consumers don't hit version-mismatch errors\n// when different copies of viem / use-wallet are resolved across the monorepo.\n// ---------------------------------------------------------------------------\n\n/** Wagmi Config — derived from watchAccount so no direct @wagmi/core type import is needed. */\nexport type WagmiConfig = Parameters<typeof watchAccount>[0]\n\n/** Minimal wallet interface used by the bridge. */\ninterface WalletLike {\n id: string\n isConnected: boolean\n /** Set by RainbowKitWallet while its own disconnect() is running. Prevents re-entrancy. */\n isDisconnecting?: boolean\n connect: () => Promise<unknown>\n disconnect: () => Promise<void>\n resumeSession: () => Promise<void>\n}\n\n/** Minimal WalletManager interface used by the bridge. */\nexport interface WalletManagerLike {\n wallets: WalletLike[]\n}\n\n/**\n * Shared mutable state between the RainbowKitBridge component (which captures\n * the modal opener and watches modal close) and the getEvmAccounts callback.\n */\nexport interface RainbowKitBridgeState {\n openModal: (() => void) | null\n connectInProgress: boolean\n /** Called by the bridge component when the modal is dismissed without connecting. */\n cancelConnect: (() => void) | null\n}\n\n/** Create the shared state object. Call once at module level. */\nexport function createRainbowKitBridgeState(): RainbowKitBridgeState {\n return { openModal: null, connectInProgress: false, cancelConnect: null }\n}\n\n/**\n * Create a `getEvmAccounts` callback for RainbowKitWallet options.\n *\n * When called, it:\n * 1. Disconnects any existing wagmi session (to show fresh wallet selection)\n * 2. Opens the RainbowKit connect modal\n * 3. Watches wagmi state for a new connection\n * 4. Resolves with the connected EVM addresses\n *\n * If the user closes the modal without connecting, the bridge component\n * calls `state.cancelConnect()` which rejects the promise and clears the\n * in-progress flag so `connect()` can be called again.\n *\n * Must be used together with `<RainbowKitBridge />` in the component tree.\n */\nexport function createGetEvmAccounts(\n wagmiConfig: WagmiConfig,\n state: RainbowKitBridgeState,\n): () => Promise<string[]> {\n return () => {\n state.connectInProgress = true\n return new Promise<string[]>((resolve, reject) => {\n let settled = false\n\n const done = (result: string[]) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n resolve(result)\n }\n const fail = (err: Error) => {\n if (settled) return\n settled = true\n state.connectInProgress = false\n state.cancelConnect = null\n reject(err)\n }\n\n // Register cancellation handler — called by the bridge component\n // when the RainbowKit modal closes without a connection.\n state.cancelConnect = () => {\n fail(new Error('User dismissed the connect modal'))\n }\n\n let unwatchFn: (() => void) | null = null\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolveWithAccount = (account: any) => {\n const addrs: string[] = account.addresses\n ? [...account.addresses].filter((a: unknown): a is string => a != null)\n : [account.address as string]\n\n // Delay briefly so RainbowKit can detect the connection and\n // close its modal before our connect() flow continues.\n setTimeout(() => done(addrs), 200)\n }\n\n const startWatching = () => {\n unwatchFn = watchAccount(wagmiConfig, {\n onChange(account) {\n console.log('[RainbowKitBridge] watchAccount onChange', { isConnected: account.isConnected, address: account.address, status: account.status, connector: account.connector?.name })\n if (account.isConnected && account.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(account)\n }\n },\n })\n\n // Handle the race where the wallet connected between wagmiDisconnect\n // resolving and watchAccount being registered — watchAccount only fires\n // on changes, so a connection that already happened is invisible to it.\n const current = getAccount(wagmiConfig)\n if (current.isConnected && current.address) {\n unwatchFn?.()\n unwatchFn = null\n resolveWithAccount(current)\n return\n }\n\n // Timeout after 2 minutes\n setTimeout(() => {\n unwatchFn?.()\n unwatchFn = null\n fail(new Error('Wallet connection timed out'))\n }, 120_000)\n }\n\n // Wait for the RainbowKit modal opener to become available.\n // RainbowKit only provides openConnectModal when disconnected,\n // so after wagmi disconnect we poll briefly for React to re-enable it.\n let attempts = 0\n const tryOpen = () => {\n if (state.openModal) {\n state.openModal()\n startWatching()\n } else if (attempts++ < 50) {\n setTimeout(tryOpen, 50)\n } else {\n fail(new Error('RainbowKit modal not ready'))\n }\n }\n\n // Disconnect existing session so modal shows wallet selection\n const currentAccount = getAccount(wagmiConfig)\n if (currentAccount.isConnected) {\n wagmiDisconnect(wagmiConfig).finally(tryOpen)\n } else {\n tryOpen()\n }\n })\n }\n}\n\nexport interface RainbowKitBridgeProps {\n walletManager: WalletManagerLike\n state: RainbowKitBridgeState\n}\n\n/**\n * Bridge component that syncs RainbowKit/wagmi wallet state with use-wallet.\n *\n * - Captures RainbowKit's `openConnectModal` into the shared state so the\n * `getEvmAccounts` callback can trigger it from outside React.\n * - Watches `connectModalOpen` to detect when the user dismisses the modal\n * without connecting, and cancels the pending connect promise.\n * - Auto-connects the use-wallet RainbowKit wallet when wagmi connects.\n * - Auto-disconnects when wagmi disconnects.\n * - On mount, resumes session if wagmi is already connected.\n *\n * Place inside `<RainbowKitProvider>`.\n */\nexport function RainbowKitBridge({ walletManager, state }: RainbowKitBridgeProps) {\n // Capture RainbowKit's openConnectModal and connectModalOpen\n const { openConnectModal, connectModalOpen } = useConnectModal()\n useEffect(() => {\n state.openModal = openConnectModal ?? null\n return () => {\n state.openModal = null\n }\n }, [openConnectModal, state])\n\n // Track previous modal state to detect close transitions\n const prevModalOpenRef = useRef(false)\n useEffect(() => {\n const wasOpen = prevModalOpenRef.current\n prevModalOpenRef.current = !!connectModalOpen\n\n // Modal just closed (true → false) while a connect is in progress\n // and no wallet connected = user dismissed without connecting\n if (wasOpen && !connectModalOpen && state.connectInProgress) {\n // Small delay to allow any in-flight connection to settle\n setTimeout(() => {\n if (state.connectInProgress && state.cancelConnect) {\n state.cancelConnect()\n }\n }, 300)\n }\n }, [connectModalOpen, state])\n\n // Suppress spurious wagmi reconnects after a user-initiated disconnect\n const { disconnect: disconnectWagmi } = useDisconnect()\n const suppressReconnectRef = useRef(false)\n const suppressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const suppressReconnect = () => {\n suppressReconnectRef.current = true\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n suppressTimerRef.current = setTimeout(() => {\n suppressReconnectRef.current = false\n }, 1_500)\n }\n\n useEffect(() => () => {\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current)\n }, [])\n\n // Sync wagmi account changes with use-wallet\n const account = useAccount()\n const connectingRef = useRef(false)\n\n useAccountEffect({\n onConnect({ address, connector, isReconnected }) {\n console.log('[RainbowKitBridge] onConnect', { address, connector: connector?.name, isReconnected, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n // Ignore events during getEvmAccounts flow — the SDK handles the connect\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onConnect: skipping (connectInProgress or connecting)')\n return\n }\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] onConnect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet && !rkWallet.isConnected && address) {\n console.log('[RainbowKitBridge] onConnect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] onConnect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n console.log('[RainbowKitBridge] onConnect: skipping connect (rkWallet.isConnected=%s, address=%s)', rkWallet?.isConnected, address)\n }\n },\n onDisconnect() {\n console.log('[RainbowKitBridge] onDisconnect', { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected, rkWalletDisconnecting: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isDisconnecting })\n // Ignore wagmi disconnect events during the connect flow (getEvmAccounts\n // disconnects the old session before showing the wallet selection modal)\n if (state.connectInProgress || connectingRef.current) {\n console.log('[RainbowKitBridge] onDisconnect: skipping (connectInProgress or connecting)')\n return\n }\n suppressReconnect()\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if RainbowKitWallet.disconnect() itself triggered this wagmi event —\n // it already handles its own cleanup. Only act on external disconnects\n // (e.g. user clicked Disconnect inside RainbowKit's AccountModal).\n if (rkWallet && rkWallet.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] onDisconnect: triggering rkWallet.disconnect()')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] auto-disconnect failed:', err.message)\n })\n } else {\n console.log('[RainbowKitBridge] onDisconnect: skipping (rkWallet.isConnected=%s, isDisconnecting=%s)', rkWallet?.isConnected, rkWallet?.isDisconnecting)\n }\n },\n })\n\n // Safety net: catch wagmi reconnect failures that fired before onDisconnect was registered.\n // If wagmi lands in 'disconnected' while use-wallet still thinks the wallet is connected,\n // clean up so the user is prompted to reconnect instead of hitting a signing error later.\n useEffect(() => {\n console.log('[RainbowKitBridge] account.status changed:', account.status, { connectInProgress: state.connectInProgress, connectingRef: connectingRef.current })\n if (account.status === 'disconnected' && !state.connectInProgress && !connectingRef.current) {\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n if (rkWallet?.isConnected && !rkWallet.isDisconnecting) {\n console.log('[RainbowKitBridge] stale-disconnect safety net triggered')\n rkWallet.disconnect().catch((err: Error) => {\n console.warn('[RainbowKitBridge] stale-disconnect cleanup failed:', err.message)\n })\n }\n }\n }, [account.status, walletManager, state])\n\n // On mount / when wagmi state changes, sync with use-wallet\n useEffect(() => {\n console.log('[RainbowKitBridge] mount/account effect', { isConnected: account.isConnected, address: account.address, connector: account.connector?.name, connectInProgress: state.connectInProgress, connectingRef: connectingRef.current, rkWalletConnected: walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)?.isConnected })\n if (account.isConnected && account.address) {\n if (suppressReconnectRef.current) {\n console.log('[RainbowKitBridge] mount effect: suppressing stale reconnect after disconnect')\n disconnectWagmi()\n return\n }\n const rkWallet = walletManager.wallets.find((w) => w.id === RAINBOWKIT_ID)\n // Skip if getEvmAccounts flow is in progress — it handles its own connect\n if (rkWallet && !connectingRef.current && !state.connectInProgress) {\n if (!rkWallet.isConnected) {\n // Wallet not connected in store — do a full connect\n console.log('[RainbowKitBridge] mount effect: triggering rkWallet.connect()')\n connectingRef.current = true\n rkWallet\n .connect()\n .then(() => console.log('[RainbowKitBridge] mount effect: rkWallet.connect() succeeded'))\n .catch((err: Error) => {\n console.warn('[RainbowKitBridge] mount auto-connect failed:', err.message)\n })\n .finally(() => {\n connectingRef.current = false\n })\n } else {\n // Wallet connected in store but instance may need session resumed\n // (e.g., after WalletManager recreation on network switch)\n console.log('[RainbowKitBridge] mount effect: resuming session')\n rkWallet.resumeSession().catch(() => {})\n }\n } else {\n console.log('[RainbowKitBridge] mount effect: skipping (connectInProgress=%s, connectingRef=%s, rkWalletConnected=%s)', state.connectInProgress, connectingRef.current, rkWallet?.isConnected)\n }\n }\n }, [account.isConnected, account.address, walletManager])\n\n return null\n}\n","import { type ReactNode, memo } from 'react'\nimport { WagmiProvider } from 'wagmi'\nimport { type QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { RainbowKitProvider, lightTheme, darkTheme } from '@rainbow-me/rainbowkit'\nimport { RainbowKitBridge, type RainbowKitBridgeState, type WagmiConfig } from './RainbowKitBridge'\nimport type { ResolvedTheme } from '../hooks/useResolvedTheme'\n\n/**\n * Create a bound Provider component for use by WalletUIProvider.\n * Called once by `createRainbowKitConfig` — the returned component captures\n * `wagmiConfig` and `bridgeState` in closure so WalletUIProvider only needs\n * to pass `queryClient`, `resolvedTheme`, `walletManager`, and `children`.\n */\nexport function createBoundProvider(wagmiConfig: WagmiConfig, bridgeState: RainbowKitBridgeState) {\n return memo(function RainbowKitAutoProvider({\n queryClient,\n resolvedTheme,\n walletManager,\n children,\n }: {\n queryClient: QueryClient\n resolvedTheme: ResolvedTheme\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n walletManager: any\n children: ReactNode\n }) {\n return (\n <WagmiProvider config={wagmiConfig}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider theme={resolvedTheme === 'dark' ? darkTheme() : lightTheme()}>\n <RainbowKitBridge walletManager={walletManager} state={bridgeState} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n )\n })\n}\n","import { getDefaultConfig as rkGetDefaultConfig } from '@rainbow-me/rainbowkit'\nimport {\n mainnet,\n base,\n bsc,\n polygon,\n arbitrum,\n avalanche,\n optimism,\n celo,\n sonic,\n unichain,\n linea,\n} from 'wagmi/chains'\n\nimport {\n safeWallet,\n rainbowWallet,\n metaMaskWallet,\n walletConnectWallet,\n} from '@rainbow-me/rainbowkit/wallets'\nimport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n type RainbowKitBridgeState,\n type RainbowKitBridgeProps,\n type WalletManagerLike,\n type WagmiConfig,\n} from './components/RainbowKitBridge'\nimport { createBoundProvider } from './components/RainbowKitAutoProvider'\nimport type { RainbowKitUIConfig } from './providers/WalletUIProvider'\n\n/**\n * EVM chains supported by the Allbridge bridge integration.\n * Registered in the wagmi config so that wallet operations (signTypedData,\n * getConnectorClient, etc.) work when MetaMask is on any of these networks.\n */\nconst BRIDGE_CHAINS = [mainnet, base, bsc, polygon, arbitrum, avalanche, optimism, celo, sonic, unichain, linea]\n\nconst DEFAULT_WALLETS = [\n {\n groupName: 'Popular',\n wallets: [safeWallet, rainbowWallet, metaMaskWallet, walletConnectWallet],\n },\n]\n\n/**\n * Clear stale WalletConnect v2 pairing data from localStorage.\n *\n * WC2 distinguishes between *pairings* (ephemeral, used only during the\n * session negotiation handshake) and *sessions* (persistent, used to\n * reconnect on page reload). Stale pairings left over from previous\n * connection attempts cause \"No matching key / session topic doesn't exist\"\n * relay errors on mobile wallets, which prevent the `session_settle` event\n * from being delivered and leave the frontend stuck after the user accepts\n * the connection on their phone.\n *\n * Clearing pairings at startup is safe: active sessions are stored under\n * separate keys and are not affected, so wallet reconnection on page reload\n * continues to work normally.\n */\nfunction clearStaleWcPairings(): void {\n try {\n for (const key of Object.keys(localStorage)) {\n // Match any WC2 key that belongs to the pairing or request subsystem.\n // Session keys (wc@2:client:*:session) are intentionally left intact.\n if (/^wc@2:/.test(key) && /(pairing|request|message)/.test(key)) {\n localStorage.removeItem(key)\n }\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing restrictions)\n }\n}\n\n/**\n * Like RainbowKit's `getDefaultConfig`, but with mobile WalletConnect fixes\n * applied by default:\n *\n * - Excludes the Base Account wallet from the default wallet list (pass an\n * explicit `wallets` array to override).\n * - Clears stale WalletConnect v2 pairing data to prevent \"No matching key\"\n * relay errors on mobile wallets.\n * - Registers Allbridge-compatible EVM chains (mainnet, Base, BNB, Polygon,\n * Arbitrum, Avalanche, Optimism, Celo, Sonic, Unichain, Linea) so that\n * wagmi operations work regardless of which network the wallet is on.\n * - Sets `walletConnectParameters.metadata.redirect.universal` to the current\n * origin so that MetaMask Mobile redirects back to the browser tab after\n * signing, allowing the WalletConnect relay response to be delivered.\n *\n * All defaults can be overridden by the caller.\n */\nexport const getDefaultConfig = (params: Parameters<typeof rkGetDefaultConfig>[0] & { debug?: boolean }) => {\n clearStaleWcPairings()\n\n const p = params as Record<string, any>\n const debug = !!p.debug\n const appUrl: string | undefined = p.appUrl ?? (typeof window !== 'undefined' ? window.location.origin : undefined)\n\n // Merge bridge-compatible chains with user chains so that wagmi operations\n // work regardless of which EVM network the wallet is currently on.\n // Bridge chains first (mainnet at index 0) so wagmi's auto-switch after\n // connect targets a real EVM chain, not a virtual one like algorandChain.\n const userChains: any[] = p.chains ?? []\n const bridgeChainIds = new Set(BRIDGE_CHAINS.map((c) => c.id))\n const extraUserChains = userChains.filter((c: any) => !bridgeChainIds.has(c.id))\n const chains = [...BRIDGE_CHAINS, ...extraUserChains]\n\n // Default mobile redirect so MetaMask Mobile returns to the browser tab.\n const redirectUrl: string | undefined = typeof window !== 'undefined' ? window.location.origin : undefined\n const userWcMeta = p.walletConnectParameters?.metadata ?? {}\n\n // Register all EVM methods used across use-wallet and use-wallet-ui as\n // optional WalletConnect session methods so the wallet routes them through\n // the WC channel instead of treating them as read-only RPC requests (which\n // can 403 on public RPCs like mainnet.base.org).\n const bridgeOptionalMethods = [\n 'eth_call',\n 'eth_chainId',\n 'eth_blockNumber',\n 'eth_sendTransaction',\n 'eth_estimateGas',\n 'eth_getTransactionReceipt',\n 'eth_signTypedData_v4',\n 'wallet_switchEthereumChain',\n 'wallet_addEthereumChain',\n 'wallet_getCapabilities',\n 'wallet_sendCalls',\n 'wallet_getCallsStatus',\n ]\n const userOptionalMethods: string[] = p.walletConnectParameters?.optionalMethods ?? []\n const optionalMethods = [\n ...new Set([...bridgeOptionalMethods, ...userOptionalMethods]),\n ]\n\n const walletConnectParameters = {\n ...p.walletConnectParameters,\n optionalMethods,\n ...(redirectUrl\n ? {\n metadata: {\n icons: [],\n ...userWcMeta,\n redirect: {\n universal: redirectUrl,\n ...userWcMeta.redirect,\n },\n },\n }\n : {}),\n }\n\n const config = rkGetDefaultConfig({\n wallets: DEFAULT_WALLETS,\n ...params,\n chains: chains as any,\n ...(appUrl ? { appUrl } : {}),\n ...(walletConnectParameters ? { walletConnectParameters } : {}),\n })\n\n if (debug) {\n // Debug: log wagmi state transitions (connections, chain changes)\n config.subscribe(\n (state) => ({\n chainId: state.chainId,\n current: state.current,\n status: state.status,\n connections: state.connections.size,\n }),\n (next, prev) => {\n console.log('[wagmi] state change', { prev, next })\n },\n )\n\n // Debug: log connector events and wrap provider requests\n for (const connector of config.connectors) {\n connector.emitter.on('connect', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" connect`, data)\n })\n connector.emitter.on('disconnect', () => {\n console.log(`[wagmi] connector \"${connector.name}\" disconnect`)\n })\n connector.emitter.on('change', (data: any) => {\n console.log(`[wagmi] connector \"${connector.name}\" change`, data)\n })\n\n // Wrap getProvider to log all EIP-1193 request/response traffic.\n // We return a Proxy instead of mutating provider.request so that\n // MetaMask SDK's internal this.request calls stay on the untouched\n // original provider and don't recurse through our logging layer.\n const origGetProvider = connector.getProvider.bind(connector)\n let cachedProxy: any = null\n let cachedTarget: any = null\n connector.getProvider = async (...args: any[]) => {\n const provider = await origGetProvider(...args)\n if (!provider) return provider\n // Re-use the same Proxy for the same underlying provider\n if (cachedTarget === provider) return cachedProxy\n cachedTarget = provider\n cachedProxy = new Proxy(provider, {\n get(target, prop, receiver) {\n if (prop === 'request') {\n return async (req: { method: string; params?: unknown[] }) => {\n console.log(`[wagmi:rpc] >> ${connector.name} ${req.method}`, req.params ?? [])\n try {\n const result = await target.request(req)\n console.log(`[wagmi:rpc] << ${connector.name} ${req.method}`, result)\n return result\n } catch (err) {\n console.error(`[wagmi:rpc] ERR ${connector.name} ${req.method}`, err)\n throw err\n }\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n })\n return cachedProxy\n }\n }\n }\n\n return config\n}\n\n// Backward-compatible exports\nexport {\n RainbowKitBridge,\n createRainbowKitBridgeState,\n createGetEvmAccounts,\n}\n\nexport type {\n RainbowKitBridgeState,\n RainbowKitBridgeProps,\n WalletManagerLike,\n}\n\nexport type { RainbowKitUIConfig }\n\n/**\n * Create a RainbowKit configuration for WalletUIProvider.\n *\n * Call once at module level (or in a useMemo) and pass the result to\n * `<WalletUIProvider rainbowkit={...}>`. The provider handles all\n * WagmiProvider/RainbowKitProvider/bridge wiring internally.\n */\nexport function createRainbowKitConfig(options: { wagmiConfig: WagmiConfig }): RainbowKitUIConfig {\n const bridgeState = createRainbowKitBridgeState()\n const getEvmAccounts = createGetEvmAccounts(options.wagmiConfig, bridgeState)\n const Provider = createBoundProvider(options.wagmiConfig, bridgeState)\n\n return { Provider, getEvmAccounts }\n}\n"],"names":["RAINBOWKIT_ID","createRainbowKitBridgeState","createGetEvmAccounts","wagmiConfig","state","resolve","reject","settled","done","result","fail","err","unwatchFn","resolveWithAccount","account","addrs","a","startWatching","watchAccount","_a","current","getAccount","attempts","tryOpen","wagmiDisconnect","RainbowKitBridge","walletManager","openConnectModal","connectModalOpen","useConnectModal","useEffect","prevModalOpenRef","useRef","wasOpen","disconnectWagmi","useDisconnect","suppressReconnectRef","suppressTimerRef","suppressReconnect","useAccount","connectingRef","useAccountEffect","address","connector","isReconnected","w","rkWallet","_b","createBoundProvider","bridgeState","memo","queryClient","resolvedTheme","children","WagmiProvider","jsx","QueryClientProvider","jsxs","RainbowKitProvider","darkTheme","lightTheme","BRIDGE_CHAINS","mainnet","base","bsc","polygon","arbitrum","avalanche","optimism","celo","sonic","unichain","linea","DEFAULT_WALLETS","safeWallet","rainbowWallet","metaMaskWallet","walletConnectWallet","clearStaleWcPairings","key","getDefaultConfig","params","p","debug","appUrl","userChains","bridgeChainIds","c","extraUserChains","chains","redirectUrl","userWcMeta","bridgeOptionalMethods","userOptionalMethods","optionalMethods","walletConnectParameters","config","rkGetDefaultConfig","next","prev","data","origGetProvider","cachedProxy","cachedTarget","args","provider","target","prop","receiver","req","createRainbowKitConfig","options","getEvmAccounts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d13co/use-wallet-ui-react",
3
- "version": "1.0.19",
3
+ "version": "1.0.20",
4
4
  "description": "React components for use-wallet UI",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.cjs",
@@ -64,7 +64,7 @@
64
64
  },
65
65
  "peerDependencies": {
66
66
  "@allbridge/bridge-core-sdk": ">=3.0.0",
67
- "@d13co/algo-x-evm-ui": "^0.0.6",
67
+ "@d13co/algo-x-evm-ui": "^0.0.7",
68
68
  "@rainbow-me/rainbowkit": ">=2.0.0",
69
69
  "@tanstack/react-query": ">=5.0.0",
70
70
  "@d13co/use-wallet-react": "^4.0.1",