UNPKG

@privy-io/cross-app-connect

Version:

Privy cross app wallet connectors for wagmi and RainbowKit

2 lines 3.58 kB
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./provider-B1HdA1aS.js");let t=require("viem"),n=require("@wagmi/core");function r(r,i){let a=null,o,s,c,l;return(0,n.createConnector)(u=>({id:r.id,name:r.name,icon:r.iconUrl,type:`privy`,...i,isWalletConnectModalConnector:!1,async setup(){let e=await this.getProvider();e&&(c||(c=this.onConnect.bind(this),e.on(`connect`,c)),o||(o=this.onAccountsChanged.bind(this),e.on(`accountsChanged`,o)))},async connect(e){let t=await this.getProvider();if(t&&await this.isAuthorized()){let[e,t]=await Promise.all([this.getAccounts(),this.getChainId()]);return{accounts:e,chainId:t}}if(e?.isReconnecting)return{accounts:[],chainId:1};await t.request({method:`eth_requestAccounts`}),c&&=(t.removeListener(`connect`,c),void 0),o||(o=this.onAccountsChanged.bind(this),t.on(`accountsChanged`,o)),s||(s=this.onChainChanged.bind(this),t.on(`chainChanged`,s)),l||(l=this.onDisconnect.bind(this),t.on(`disconnect`,l)),e?.chainId&&await this.switchChain({chainId:e.chainId});let[n,r]=await Promise.all([this.getAccounts(),this.getChainId()]);return{accounts:n,chainId:r}},async disconnect(){let e=await this.getProvider();s&&=(e.removeListener(`chainChanged`,s),void 0),l&&=(e.removeListener(`disconnect`,l),void 0),c||(c=this.onConnect.bind(this),e.on(`connect`,c)),await e.request({method:`wallet_revokePermissions`,params:[{eth_accounts:{}}]}),this.onDisconnect()},async getAccounts(){let e=await this.getProvider();if(!e)throw new n.ProviderNotFoundError;return(await e.request({method:`eth_accounts`})).map(e=>(0,t.getAddress)(e))},async getChainId(){let e=await this.getProvider();if(!e)throw new n.ProviderNotFoundError;let t=await e.request({method:`eth_chainId`});return Number(t)},async getProvider(){if(a||=e.t({chains:u.chains,transports:u.transports,providerAppId:r.id,apiUrl:r.apiUrl,smartWalletMode:r.smartWalletMode,defaultPopupTimeout:r.defaultPopupTimeout,overrideConnectUrl:r.overrideConnectUrl,overrideTransactUrl:r.overrideTransactUrl}),!a)throw new n.ProviderNotFoundError;return a},async isAuthorized(){try{return!!(await this.getAccounts()).length}catch{return!1}},async switchChain({chainId:e}){let r=await this.getProvider();if(!r)throw new n.ProviderNotFoundError;let i=u.chains.find(t=>t.id===e);if(!i)throw new t.SwitchChainError(new n.ChainNotConfiguredError);return e===Number(await r.request({method:`eth_chainId`}))?i:(await r.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]}),u.emitter.emit(`change`,{chainId:e}),i)},async onAccountsChanged(e){if(e.length===0){this.onDisconnect();return}if(u.emitter.listenerCount(`connect`)){let e=(await this.getChainId()).toString();this.onConnect?.({chainId:e});return}u.emitter.emit(`change`,{accounts:e.map(e=>(0,t.getAddress)(e))})},onChainChanged(e){let t=Number(e);u.emitter.emit(`change`,{chainId:t})},async onConnect(e){let t=await this.getAccounts();if(t.length===0)return;let n=Number(e.chainId);u.emitter.emit(`connect`,{accounts:t,chainId:n});let r=await this.getProvider();r&&(c&&=(r.removeListener(`connect`,c),void 0),o||(o=this.onAccountsChanged.bind(this),r.on(`accountsChanged`,o)),s||(s=this.onChainChanged.bind(this),r.on(`chainChanged`,s)),l||(l=this.onDisconnect.bind(this),r.on(`disconnect`,l)))},async onDisconnect(){u.emitter.emit(`disconnect`)}}))}const i=e=>()=>({id:e.id,name:e.name,iconUrl:e.iconUrl,iconBackground:e.iconBackground??`#000000`,installed:!0,createConnector:t=>r(e,t)});exports.toPrivyWallet=i,exports.toPrivyWalletConnector=r; //# sourceMappingURL=rainbow-kit.js.map