@rango-dev/wallets-core 0.22.1-next.0 → 0.22.1-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var S=Object.defineProperty;var s=(i,t)=>S(i,"name",{value:t,configurable:!0});var m=(a=>(a.CONNECTED="connected",a.CONNECTING="connecting",a.REACHABLE="reachable",a.INSTALLED="installed",a.ACCOUNTS="accounts",a.NETWORK="network",a))(m||{});var d=class{getItem(t){let e=localStorage.getItem(t);return e?JSON.parse(e):null}setItem(t,e){localStorage.setItem(t,JSON.stringify(e))}removeItem(t){localStorage.removeItem(t)}};s(d,"Persistor");function N(i,t){return`${t||""}:${i}`}s(N,"formatAddressWithNetwork");function u(i,t){return i?i.map(e=>N(e,t)):[]}s(u,"accountAddressesWithNetwork");function T(i){let[t,e]=i.split(":");return{network:t,address:e}}s(T,"readAccountAddress");function f(i){let{checkInstallation:t=!0}=i.config;return t}s(f,"needsCheckInstallation");import{getBlockChainNameFromId as w,Networks as h}from"@rango-dev/wallets-shared";var g=class{constructor(t,e){this.actions=e,this.options=t,this.provider=null,this.meta=[],this.state={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null},f(t)||this.setInstalledAs(!0)}async suggestAndConnect(t){return this.actions.suggest&&await this.actions.suggest({instance:this.provider,meta:this.meta,network:t}),await this.connect(t)}async connect(t){if(this.state.connecting)throw new Error("Connecting...");let e=await this.getConnectionFromState(),n=this.state.network,o=t||n||this.options.config.defaultNetwork;if(e){let l=n!==o&&!!o;if(n===o)return e;let r=!0;if(this.actions.canSwitchNetworkTo&&(r=this.actions.canSwitchNetworkTo({provider:this.provider,meta:this.meta,network:o||""})),l&&r&&this.actions.switchNetwork)return await this.actions.switchNetwork({instance:this.provider,meta:this.meta,network:o,newInstance:this.tryGetInstance.bind(this)}),o!==this.state.network&&this.updateState({network:t}),{accounts:e.accounts,network:o,provider:this.provider}}let c=await this.tryGetInstance({network:t});this.updateState({connecting:!0}),this.setInstalledAs(!0);try{var a=await this.actions.connect({instance:c,network:o||void 0,meta:this.meta||[]})}catch(l){throw this.resetState(),l}this.updateState({connected:!0,reachable:!0,connecting:!1});let p=[],k=null;if(Array.isArray(a))p=a.flatMap(r=>{let y=r.chainId||h.Unknown,I=w(y,this.meta)||h.Unknown;return u(r.accounts,I)}).filter(Boolean),k=o||this.options.config.defaultNetwork;else{let l=a.chainId||h.Unknown,r=w(l,this.meta)||h.Unknown;p=u(a.accounts,r),k=r}return p.length>0&&this.updateState({accounts:p,network:k}),{accounts:this.state.accounts,network:this.state.network,provider:this.provider}}async disconnect(){this.resetState(),this.actions.disconnect&&this.actions.disconnect({instance:this.provider,destroyInstance:()=>{this.setProvider(null)}})}async eagerConnect(){let t=await this.tryGetInstance({network:void 0}),{canEagerConnect:e}=this.actions,n=`can't restore connection for ${this.options.config.type} .`;if(e){if(await e({instance:t,meta:this.meta}))return this.connect();throw new Error(n)}else throw new Error(n)}getSigners(t){return this.actions.getSigners(t)}getWalletInfo(t){return this.actions.getWalletInfo(t)}canSwitchNetworkTo(t,e){let n=this.actions.canSwitchNetworkTo;return n?n({network:t,meta:this.meta,provider:e}):!1}onInit(){this.options.config.isAsyncInstance?f(this.options)&&this.actions.getInstance().then(t=>{t&&this.setInstalledAs(!0)}):this.actions.getInstance()&&!this.state.installed&&this.setInstalledAs(!0)}setProvider(t){this.provider=t,t&&this.actions.subscribe&&this.actions.subscribe({instance:t,state:this.state,meta:this.meta,connect:this.connect.bind(this),disconnect:this.disconnect.bind(this),updateAccounts:(e,n)=>{let o=this.state.network;n&&(o=w(n,this.meta)||h.Unknown);let c=u(e,o);c.length>0&&this.updateState({accounts:c})},updateChainId:this.updateChainId.bind(this)})}setMeta(t){this.meta=t}setHandler(t){this.options.handler=t}getState(){return this.state}updateState(t){let e=[];typeof t.connected<"u"&&(this.state.connected=t.connected,e.push(["connected",t.connected])),typeof t.connecting<"u"&&(this.state.connecting=t.connecting,e.push(["connecting",t.connecting])),typeof t.reachable<"u"&&(this.state.reachable=t.reachable,e.push(["reachable",t.reachable])),typeof t.installed<"u"&&(this.state.installed=t.installed,e.push(["installed",t.installed])),typeof t.accounts<"u"&&(this.state.accounts=t.accounts,e.push(["accounts",t.accounts])),typeof t.network<"u"&&(this.state.network=t.network,e.push(["network",t.network]));let n=this.getState();e.forEach(([o,c])=>{this.options.handler(this.options.config.type,o,c,n,this.meta)})}resetState(){this.updateState({connected:!1,connecting:!1,reachable:!1,accounts:null,network:null})}async getConnectionFromState(){return this.state.connected&&this.provider?{accounts:this.state.accounts,network:this.state.network,provider:this.provider}:null}updateChainId(t){let e=t?w(t,this.meta):h.Unknown;this.updateState({network:e})}setInstalledAs(t){!f(this.options)&&t===!1||this.updateState({installed:t})}async tryGetInstance({network:t,force:e}){let n=null;if(this.setProvider(null),this.options.config.isAsyncInstance){let o={currentProvider:this.provider,meta:this.meta,force:e||!1,updateChainId:this.updateChainId.bind(this),getState:this.getState.bind(this)};t&&(o.network=t),n=await this.actions.getInstance(o)}else n=this.actions.getInstance();if(!n){this.setInstalledAs(!1),this.resetState();let o=`It seems your selected wallet (${this.options.config.type}) isn't installed.`;throw new Error(o)}return this.setProvider(n),n}};s(g,"Wallet");var v=g;export{m as Events,d as Persistor,u as accountAddressesWithNetwork,v as default,N as formatAddressWithNetwork,f as needsCheckInstallation,T as readAccountAddress};
1
+ var S=Object.defineProperty;var a=(s,t)=>S(s,"name",{value:t,configurable:!0});var y=(i=>(i.CONNECTED="connected",i.CONNECTING="connecting",i.REACHABLE="reachable",i.INSTALLED="installed",i.ACCOUNTS="accounts",i.NETWORK="network",i))(y||{});var d=class{getItem(t){let e=localStorage.getItem(t);return e?JSON.parse(e):null}setItem(t,e){localStorage.setItem(t,JSON.stringify(e))}removeItem(t){localStorage.removeItem(t)}};a(d,"Persistor");function v(s,t){return`${t||""}:${s}`}a(v,"formatAddressWithNetwork");function u(s,t){return s?s.map(e=>v(e,t)):[]}a(u,"accountAddressesWithNetwork");function A(s){let[t,e]=s.split(":");return{network:t,address:e}}a(A,"readAccountAddress");function f(s){let{checkInstallation:t=!0}=s.config;return t}a(f,"needsCheckInstallation");import{getBlockChainNameFromId as w,Networks as p}from"@rango-dev/wallets-shared";var k=class{constructor(t,e){this.actions=e,this.options=t,this.provider=null,this.info={supportedBlockchains:[],isContractWallet:!1},this.state={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null},f(t)||this.setInstalledAs(!0)}async suggestAndConnect(t){return this.actions.suggest&&await this.actions.suggest({instance:this.provider,meta:this.info.supportedBlockchains,network:t}),await this.connect(t)}async connect(t){if(this.state.connecting)throw new Error("Connecting...");let e=await this.getConnectionFromState(),n=this.state.network,o=t||n||this.options.config.defaultNetwork;if(e){let l=n!==o&&!!o;if(n===o)return e;let r=!0;if(this.actions.canSwitchNetworkTo&&(r=this.actions.canSwitchNetworkTo({provider:this.provider,meta:this.info.supportedBlockchains,network:o||""})),l&&r&&this.actions.switchNetwork)return await this.actions.switchNetwork({instance:this.provider,meta:this.info.supportedBlockchains,network:o,newInstance:this.tryGetInstance.bind(this),getState:this.getState.bind(this)}),o!==this.state.network&&!this.options.config.isAsyncSwitchNetwork&&this.updateState({network:t}),{accounts:e.accounts,network:o,provider:this.provider}}let c=await this.tryGetInstance({network:t});this.updateState({connecting:!0}),this.setInstalledAs(!0);try{var i=await this.actions.connect({instance:c,network:o||void 0,meta:this.info.supportedBlockchains||[]})}catch(l){throw this.resetState(),l}this.updateState({connected:!0,reachable:!0,connecting:!1});let h=[],g=null;if(Array.isArray(i))h=i.flatMap(r=>{let m=r.chainId||p.Unknown,I=w(m,this.info.supportedBlockchains)||p.Unknown;return u(r.accounts,I)}).filter(Boolean),g=o||this.options.config.defaultNetwork;else{let l=i.chainId||p.Unknown,r=w(l,this.info.supportedBlockchains)||p.Unknown;h=u(i.accounts,r),g=r}return h.length>0&&this.updateState({accounts:h,network:g}),{accounts:this.state.accounts,network:this.state.network,provider:this.provider}}async disconnect(){this.resetState(),this.actions.disconnect&&this.actions.disconnect({instance:this.provider,destroyInstance:()=>{this.setProvider(null)}})}async eagerConnect(){let t=await this.tryGetInstance({network:void 0}),{canEagerConnect:e}=this.actions,n=`can't restore connection for ${this.options.config.type} .`;if(e){if(await e({instance:t,meta:this.info.supportedBlockchains}))return this.connect();throw new Error(n)}else throw new Error(n)}getSigners(t){return this.actions.getSigners(t)}getWalletInfo(t){return this.actions.getWalletInfo(t)}canSwitchNetworkTo(t,e){let n=this.actions.canSwitchNetworkTo;return n?n({network:t,meta:this.info.supportedBlockchains,provider:e}):!1}onInit(){this.options.config.isAsyncInstance?f(this.options)&&this.actions.getInstance().then(t=>{t&&this.setInstalledAs(!0)}):this.actions.getInstance()&&!this.state.installed&&this.setInstalledAs(!0)}setProvider(t){this.provider=t,t&&this.actions.subscribe&&this.actions.subscribe({instance:t,state:this.state,meta:this.info.supportedBlockchains,connect:this.connect.bind(this),disconnect:this.disconnect.bind(this),updateAccounts:(e,n)=>{let o=this.state.network;n&&(o=w(n,this.info.supportedBlockchains)||p.Unknown);let c=u(e,o);c.length>0&&this.updateState({accounts:c})},updateChainId:this.updateChainId.bind(this)})}setInfo(t){typeof t.supportedBlockchains<"u"&&(this.info.supportedBlockchains=t.supportedBlockchains),typeof t.isContractWallet<"u"&&(this.info.isContractWallet=t.isContractWallet)}setHandler(t){this.options.handler=t}getState(){return this.state}updateState(t){let e=[];typeof t.connected<"u"&&(this.state.connected=t.connected,e.push(["connected",t.connected])),typeof t.connecting<"u"&&(this.state.connecting=t.connecting,e.push(["connecting",t.connecting])),typeof t.reachable<"u"&&(this.state.reachable=t.reachable,e.push(["reachable",t.reachable])),typeof t.installed<"u"&&(this.state.installed=t.installed,e.push(["installed",t.installed])),typeof t.accounts<"u"&&(this.state.accounts=t.accounts,e.push(["accounts",t.accounts])),typeof t.network<"u"&&(this.state.network=t.network,e.push(["network",t.network]));let n=this.getState();e.forEach(([o,c])=>{let i={supportedBlockchains:this.info.supportedBlockchains,isContractWallet:this.info.isContractWallet};this.options.handler(this.options.config.type,o,c,n,i)})}resetState(){this.updateState({connected:!1,connecting:!1,reachable:!1,accounts:null,network:null})}async getConnectionFromState(){return this.state.connected&&this.provider?{accounts:this.state.accounts,network:this.state.network,provider:this.provider}:null}updateChainId(t){let e=t?w(t,this.info.supportedBlockchains):p.Unknown;this.updateState({network:e})}setInstalledAs(t){!f(this.options)&&t===!1||this.updateState({installed:t})}async tryGetInstance({network:t,force:e}){let n=null;if(this.setProvider(null),this.options.config.isAsyncInstance){let o={currentProvider:this.provider,meta:this.info.supportedBlockchains,force:e||!1,updateChainId:this.updateChainId.bind(this),getState:this.getState.bind(this)};t&&(o.network=t),n=await this.actions.getInstance(o)}else n=this.actions.getInstance();if(!n){this.setInstalledAs(!1),this.resetState();let o=`It seems your selected wallet (${this.options.config.type}) isn't installed.`;throw new Error(o)}return this.setProvider(n),n}};a(k,"Wallet");var N=k;export{y as Events,d as Persistor,u as accountAddressesWithNetwork,N as default,v as formatAddressWithNetwork,f as needsCheckInstallation,A as readAccountAddress};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/types.ts", "../src/persistor.ts", "../src/helpers.ts", "../src/wallet.ts"],
4
- "sourcesContent": ["import type { State as WalletState } from './wallet';\nimport type {\n Network,\n WalletInfo,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nexport type State = {\n [key: string]: WalletState | undefined;\n};\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n provider: any;\n};\n\nexport type Providers = { [type in WalletType]?: any };\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n}\n\nexport type ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n};\n\nexport type GetInstanceOptions = {\n network?: Network;\n currentProvider: any;\n meta: BlockchainMeta[];\n getState: () => WalletState;\n /**\n * We always get the instance once and reuse it whenever we needs. By using this option\n * We can force the library to get a new instance and replace it with the old one.\n *\n * Originally, we used this option for wallet connect 1 and its switching network challenge.\n */\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\nexport type GetInstance =\n | (() => any)\n | ((options: GetInstanceOptions) => Promise<any>);\n\nexport type TryGetInstance =\n | (() => any)\n | ((options: Pick<GetInstanceOptions, 'force' | 'network'>) => Promise<any>);\n\nexport type Connect = (options: {\n instance: any;\n network?: Network;\n meta: BlockchainMeta[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\nexport type Disconnect = (options: {\n instance: any;\n destroyInstance: () => void;\n}) => Promise<void>;\n\nexport type Subscribe = (options: {\n instance: any;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => void;\n\nexport type SwitchNetwork = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n}) => Promise<void>;\n\nexport type Suggest = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n}) => Promise<void>;\n\nexport type CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: any;\n}) => boolean;\n\nexport type CanEagerConnect = (options: {\n instance: any;\n meta: BlockchainMeta[];\n}) => Promise<boolean>;\n\nexport interface WalletActions {\n connect: Connect;\n getInstance: any;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n suggest?: Suggest;\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: any) => SignerFactory;\n canSwitchNetworkTo?: CanSwitchNetwork;\n canEagerConnect?: CanEagerConnect;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\nexport interface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n}\n\nexport type WalletProviders = Map<\n WalletType,\n {\n actions: WalletActions;\n config: WalletConfig;\n }\n>;\n\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "import { Network } from '@rango-dev/wallets-shared';\nimport { Options } from './wallet';\n\nexport function formatAddressWithNetwork(\n address: string,\n network?: Network | null\n) {\n return `${network || ''}:${address}`;\n}\n\nexport function accountAddressesWithNetwork(\n addresses: string[] | null,\n network?: Network | null\n) {\n if (!addresses) return [];\n\n return addresses.map((address) => {\n return formatAddressWithNetwork(address, network);\n });\n}\n\nexport function readAccountAddress(addressWithNetwork: string): {\n address: string;\n network: Network;\n} {\n const [network, address] = addressWithNetwork.split(':');\n\n return {\n network,\n address,\n };\n}\n\nexport function needsCheckInstallation(options: Options) {\n const { checkInstallation = true } = options.config;\n return checkInstallation;\n}\n", "import type { GetInstanceOptions, WalletActions, WalletConfig } from './types';\nimport type { Network, WalletType } from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta } from 'rango-types';\n\nimport { getBlockChainNameFromId, Networks } from '@rango-dev/wallets-shared';\n\nimport { accountAddressesWithNetwork, needsCheckInstallation } from './helpers';\nimport { Events } from './types';\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n value: any,\n coreState: State,\n supportedChains: BlockchainMeta[]\n) => void;\n\nexport interface State {\n connected: boolean;\n connecting: boolean;\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n}\n\nexport interface Options {\n config: WalletConfig;\n handler: EventHandler;\n}\n\nclass Wallet<InstanceType = any> {\n private actions: WalletActions;\n private state: State;\n private options: Options;\n private meta: BlockchainMeta[];\n public provider: InstanceType | null;\n\n constructor(options: Options, actions: WalletActions) {\n this.actions = actions;\n this.options = options;\n this.provider = null;\n this.meta = [];\n this.state = {\n connected: false,\n connecting: false,\n // TODO: Remove\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n };\n\n if (!needsCheckInstallation(options)) {\n this.setInstalledAs(true);\n }\n }\n async suggestAndConnect(network: Network) {\n if (this.actions.suggest) {\n await this.actions.suggest({\n instance: this.provider,\n meta: this.meta,\n network,\n });\n }\n return await this.connect(network);\n }\n\n async connect(network?: Network) {\n // If it's connecting, nothing do.\n if (this.state.connecting) {\n throw new Error('Connecting...');\n }\n\n const connectionFromState = await this.getConnectionFromState();\n const currentNetwork = this.state.network;\n /*\n * If a network hasn't been provided and also we have `lastNetwork`\n * We will use lastNetwork to make sure we will not\n * Ask the user to switch his network wrongly.\n */\n const requestedNetwork =\n network || currentNetwork || this.options.config.defaultNetwork;\n\n if (connectionFromState) {\n const networkChanged =\n currentNetwork !== requestedNetwork && !!requestedNetwork;\n\n // Reuse current connection if nothing has changed and we already have the connection in memory.\n if (currentNetwork === requestedNetwork) {\n return connectionFromState;\n }\n\n let canSwitch = true;\n if (this.actions.canSwitchNetworkTo) {\n canSwitch = this.actions.canSwitchNetworkTo({\n provider: this.provider,\n meta: this.meta,\n network: requestedNetwork || '',\n });\n }\n\n if (networkChanged && canSwitch && !!this.actions.switchNetwork) {\n await this.actions.switchNetwork({\n instance: this.provider,\n meta: this.meta,\n // TODO: Fix type error\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n network: requestedNetwork,\n newInstance: this.tryGetInstance.bind(this),\n });\n\n // We assume if we reach here (`switchNetwork` not throwing error), Switch successfully has been done.\n if (requestedNetwork !== this.state.network) {\n this.updateState({\n network,\n });\n }\n\n return {\n // Only network has been changed, so we reuse accounts from what we have already.\n accounts: connectionFromState.accounts,\n network: requestedNetwork,\n provider: this.provider,\n };\n }\n\n // If none of the above conditions didn't match, continute to connect.\n }\n\n // We are connecting to wallet for the first time\n\n // Trying to get wallet's instance, if it's not available, raise an error.\n const instance = await this.tryGetInstance({ network });\n\n // Instance exists, trying to connect\n this.updateState({\n connecting: true,\n });\n this.setInstalledAs(true);\n\n try {\n // eslint-disable-next-line no-var\n var connectResult = await this.actions.connect({\n instance,\n network: requestedNetwork || undefined,\n meta: this.meta || [],\n });\n } catch (e) {\n this.resetState();\n throw e;\n }\n\n this.updateState({\n connected: true,\n reachable: true,\n connecting: false,\n });\n\n // TODO: Handle accounts.length > 0\n\n // Inserting accounts into our state.\n let nextAccounts: string[] = [];\n let nextNetwork: Network | null | undefined = null;\n if (Array.isArray(connectResult)) {\n const accounts = connectResult.flatMap((blockchain) => {\n const chainId = blockchain.chainId || Networks.Unknown;\n // Try to map chainId with a Network, if not found, we use chainId directly.\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // TODO: second parameter should be `string` when we decided to open source the package.\n return accountAddressesWithNetwork(blockchain.accounts, network);\n });\n // Typescript can not detect we are filtering out null values:(\n nextAccounts = accounts.filter(Boolean);\n nextNetwork = requestedNetwork || this.options.config.defaultNetwork;\n } else {\n const chainId = connectResult.chainId || Networks.Unknown;\n const network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n // We fallback to current active network if `chainId` not provided.\n nextAccounts = accountAddressesWithNetwork(\n connectResult.accounts,\n network\n );\n nextNetwork = network;\n }\n\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n network: nextNetwork,\n });\n }\n\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n async disconnect() {\n this.resetState();\n\n if (this.actions.disconnect) {\n this.actions.disconnect({\n instance: this.provider,\n // On wallet connect, we need to destory the instance and get a whole new instance when we are going to connect\n destroyInstance: () => {\n this.setProvider(null);\n },\n });\n }\n }\n\n // This method is only used for auto connection\n async eagerConnect() {\n const instance = await this.tryGetInstance({ network: undefined });\n const { canEagerConnect } = this.actions;\n const error_message = `can't restore connection for ${this.options.config.type} .`;\n\n if (canEagerConnect) {\n // Check if we can eagerly connect to the wallet\n const eagerConnection = await canEagerConnect({\n instance: instance,\n meta: this.meta,\n });\n\n if (eagerConnection) {\n // Connect to wallet as usual\n return this.connect();\n }\n throw new Error(error_message);\n } else {\n throw new Error(error_message);\n }\n }\n\n getSigners(provider: any) {\n return this.actions.getSigners(provider);\n }\n getWalletInfo(allBlockChains: BlockchainMeta[]) {\n return this.actions.getWalletInfo(allBlockChains);\n }\n canSwitchNetworkTo(network: Network, provider: any) {\n const switchTo = this.actions.canSwitchNetworkTo;\n if (!switchTo) {\n return false;\n }\n\n return switchTo({\n network,\n meta: this.meta,\n provider,\n });\n }\n\n onInit() {\n if (!this.options.config.isAsyncInstance) {\n const instance = this.actions.getInstance();\n if (!!instance && !this.state.installed) {\n this.setInstalledAs(true);\n }\n } else if (needsCheckInstallation(this.options)) {\n this.actions.getInstance().then((data: any) => {\n if (data) {\n this.setInstalledAs(true);\n }\n });\n }\n }\n\n setProvider(value: any) {\n this.provider = value;\n if (!!value && !!this.actions.subscribe) {\n this.actions.subscribe({\n instance: value,\n state: this.state,\n meta: this.meta,\n connect: this.connect.bind(this),\n disconnect: this.disconnect.bind(this),\n updateAccounts: (accounts, chainId) => {\n let network = this.state.network;\n if (chainId) {\n network =\n getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;\n }\n\n const nextAccounts = accountAddressesWithNetwork(accounts, network);\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n });\n }\n },\n updateChainId: this.updateChainId.bind(this),\n });\n }\n }\n\n setMeta(value: BlockchainMeta[]) {\n this.meta = value;\n }\n\n setHandler(handler: EventHandler) {\n this.options.handler = handler;\n }\n\n getState(): State {\n return this.state;\n }\n updateState(states: Partial<State>) {\n /*\n * We will notify handler after updating all the states.\n * Because when we call `handler` it will has latest states.\n */\n const updates: [Events, any][] = [];\n\n if (typeof states.connected !== 'undefined') {\n this.state.connected = states.connected;\n updates.push([Events.CONNECTED, states.connected]);\n }\n if (typeof states.connecting !== 'undefined') {\n this.state.connecting = states.connecting;\n updates.push([Events.CONNECTING, states.connecting]);\n }\n if (typeof states.reachable !== 'undefined') {\n this.state.reachable = states.reachable;\n updates.push([Events.REACHABLE, states.reachable]);\n }\n if (typeof states.installed !== 'undefined') {\n this.state.installed = states.installed;\n updates.push([Events.INSTALLED, states.installed]);\n }\n if (typeof states.accounts !== 'undefined') {\n this.state.accounts = states.accounts;\n updates.push([Events.ACCOUNTS, states.accounts]);\n }\n if (typeof states.network !== 'undefined') {\n this.state.network = states.network;\n updates.push([Events.NETWORK, states.network]);\n }\n\n const state = this.getState();\n updates.forEach(([name, value]) => {\n this.options.handler(\n this.options.config.type,\n name,\n value,\n state,\n this.meta\n );\n });\n }\n\n resetState() {\n this.updateState({\n connected: false,\n connecting: false,\n reachable: false,\n accounts: null,\n network: null,\n });\n }\n\n private async getConnectionFromState() {\n // Already connected, so we return provider that we have in memory.\n\n /*\n * For switching network on Trust Wallet (WalletConnect),\n * We only kill the session (and not restting the whole state)\n * So we are relying on this.provider for achieving this functionality.\n */\n if (this.state.connected && !!this.provider) {\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n return null;\n }\n\n private updateChainId(chainId: string | number) {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.meta)\n : Networks.Unknown;\n\n this.updateState({\n network,\n });\n }\n\n private setInstalledAs(value: boolean) {\n if (!needsCheckInstallation(this.options) && value === false) {\n return;\n }\n\n this.updateState({\n installed: value,\n });\n }\n private async tryGetInstance({\n network,\n force,\n }: {\n network?: Network;\n force?: boolean;\n }) {\n let instance = null;\n /*\n * For switching network on Trust Wallet (WalletConnect),\n * We only kill the session (and not restting the whole state)\n * So we are relying on this.provider for achieving this functionality.\n */\n this.setProvider(null);\n if (this.options.config.isAsyncInstance) {\n // Trying to connect\n const instanceOptions: GetInstanceOptions = {\n currentProvider: this.provider,\n meta: this.meta,\n force: force || false,\n updateChainId: this.updateChainId.bind(this),\n getState: this.getState.bind(this),\n };\n\n if (network) {\n instanceOptions.network = network;\n }\n instance = await this.actions.getInstance(instanceOptions);\n } else {\n instance = this.actions.getInstance();\n }\n\n if (!instance) {\n this.setInstalledAs(false);\n this.resetState();\n\n const error_message = `It seems your selected wallet (${this.options.config.type}) isn't installed.`;\n throw new Error(error_message);\n }\n\n this.setProvider(instance);\n return instance;\n }\n}\n\nexport default Wallet;\n"],
5
- "mappings": "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",
6
- "names": ["Events", "Persistor", "name", "item", "value", "__name", "formatAddressWithNetwork", "address", "network", "__name", "accountAddressesWithNetwork", "addresses", "readAccountAddress", "addressWithNetwork", "needsCheckInstallation", "options", "checkInstallation", "getBlockChainNameFromId", "Networks", "Wallet", "options", "actions", "needsCheckInstallation", "network", "connectionFromState", "currentNetwork", "requestedNetwork", "networkChanged", "canSwitch", "instance", "connectResult", "e", "nextAccounts", "nextNetwork", "blockchain", "chainId", "Networks", "getBlockChainNameFromId", "accountAddressesWithNetwork", "canEagerConnect", "error_message", "provider", "allBlockChains", "switchTo", "data", "value", "accounts", "handler", "states", "updates", "state", "name", "force", "instanceOptions", "__name", "wallet_default"]
4
+ "sourcesContent": ["import type { State as WalletState } from './wallet';\nimport type {\n Network,\n WalletInfo,\n WalletType,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nexport type State = {\n [key: string]: WalletState | undefined;\n};\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n provider: any;\n};\n\nexport type Providers = { [type in WalletType]?: any };\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n}\n\nexport type ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n};\n\nexport type GetInstanceOptions = {\n network?: Network;\n currentProvider: any;\n meta: BlockchainMeta[];\n getState: () => WalletState;\n /**\n * We always get the instance once and reuse it whenever we needs. By using this option\n * We can force the library to get a new instance and replace it with the old one.\n *\n * Originally, we used this option for wallet connect 1 and its switching network challenge.\n */\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\nexport type GetInstance =\n | (() => any)\n | ((options: GetInstanceOptions) => Promise<any>);\n\nexport type TryGetInstance =\n | (() => any)\n | ((options: Pick<GetInstanceOptions, 'force' | 'network'>) => Promise<any>);\n\nexport type Connect = (options: {\n instance: any;\n network?: Network;\n meta: BlockchainMeta[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\nexport type Disconnect = (options: {\n instance: any;\n destroyInstance: () => void;\n}) => Promise<void>;\n\nexport type Subscribe = (options: {\n instance: any;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => void;\n\nexport type SwitchNetwork = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n getState?: () => WalletState;\n}) => Promise<void>;\n\nexport type Suggest = (options: {\n instance: any;\n network: Network;\n meta: BlockchainMeta[];\n}) => Promise<void>;\n\nexport type CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: any;\n}) => boolean;\n\nexport type CanEagerConnect = (options: {\n instance: any;\n meta: BlockchainMeta[];\n}) => Promise<boolean>;\n\nexport interface WalletActions {\n connect: Connect;\n getInstance: any;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n suggest?: Suggest;\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: any) => SignerFactory;\n canSwitchNetworkTo?: CanSwitchNetwork;\n canEagerConnect?: CanEagerConnect;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\nexport interface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n isAsyncSwitchNetwork?: boolean;\n}\n\nexport type WalletProviders = Map<\n WalletType,\n {\n actions: WalletActions;\n config: WalletConfig;\n }\n>;\n\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "import { Network } from '@rango-dev/wallets-shared';\nimport { Options } from './wallet';\n\nexport function formatAddressWithNetwork(\n address: string,\n network?: Network | null\n) {\n return `${network || ''}:${address}`;\n}\n\nexport function accountAddressesWithNetwork(\n addresses: string[] | null,\n network?: Network | null\n) {\n if (!addresses) return [];\n\n return addresses.map((address) => {\n return formatAddressWithNetwork(address, network);\n });\n}\n\nexport function readAccountAddress(addressWithNetwork: string): {\n address: string;\n network: Network;\n} {\n const [network, address] = addressWithNetwork.split(':');\n\n return {\n network,\n address,\n };\n}\n\nexport function needsCheckInstallation(options: Options) {\n const { checkInstallation = true } = options.config;\n return checkInstallation;\n}\n", "import type { GetInstanceOptions, WalletActions, WalletConfig } from './types';\nimport type { Network, WalletType } from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta } from 'rango-types';\n\nimport { getBlockChainNameFromId, Networks } from '@rango-dev/wallets-shared';\n\nimport { accountAddressesWithNetwork, needsCheckInstallation } from './helpers';\nimport { Events } from './types';\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n value: any,\n coreState: State,\n info: EventInfo\n) => void;\n\nexport type EventInfo = {\n supportedBlockchains: BlockchainMeta[];\n isContractWallet: boolean;\n};\n\nexport interface State {\n connected: boolean;\n connecting: boolean;\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n}\n\nexport interface Options {\n config: WalletConfig;\n handler: EventHandler;\n}\n\nclass Wallet<InstanceType = any> {\n public provider: InstanceType | null;\n private actions: WalletActions;\n private state: State;\n private options: Options;\n private info: EventInfo;\n\n constructor(options: Options, actions: WalletActions) {\n this.actions = actions;\n this.options = options;\n this.provider = null;\n this.info = {\n supportedBlockchains: [],\n isContractWallet: false,\n };\n this.state = {\n connected: false,\n connecting: false,\n // TODO: Remove\n reachable: false,\n installed: false,\n accounts: null,\n network: null,\n };\n\n if (!needsCheckInstallation(options)) {\n this.setInstalledAs(true);\n }\n }\n\n async suggestAndConnect(network: Network) {\n if (this.actions.suggest) {\n await this.actions.suggest({\n instance: this.provider,\n meta: this.info.supportedBlockchains,\n network,\n });\n }\n return await this.connect(network);\n }\n\n async connect(network?: Network) {\n // If it's connecting, nothing do.\n if (this.state.connecting) {\n throw new Error('Connecting...');\n }\n\n const connectionFromState = await this.getConnectionFromState();\n const currentNetwork = this.state.network;\n /*\n * If a network hasn't been provided and also we have `lastNetwork`\n * We will use lastNetwork to make sure we will not\n * Ask the user to switch his network wrongly.\n */\n const requestedNetwork =\n network || currentNetwork || this.options.config.defaultNetwork;\n\n if (connectionFromState) {\n const networkChanged =\n currentNetwork !== requestedNetwork && !!requestedNetwork;\n\n // Reuse current connection if nothing has changed and we already have the connection in memory.\n if (currentNetwork === requestedNetwork) {\n return connectionFromState;\n }\n\n let canSwitch = true;\n if (this.actions.canSwitchNetworkTo) {\n canSwitch = this.actions.canSwitchNetworkTo({\n provider: this.provider,\n meta: this.info.supportedBlockchains,\n network: requestedNetwork || '',\n });\n }\n\n if (networkChanged && canSwitch && !!this.actions.switchNetwork) {\n await this.actions.switchNetwork({\n instance: this.provider,\n meta: this.info.supportedBlockchains,\n // TODO: Fix type error\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n network: requestedNetwork,\n newInstance: this.tryGetInstance.bind(this),\n getState: this.getState.bind(this),\n });\n\n /*\n * We assume if we reach here (`switchNetwork` not throwing error), Switch successfully has been done.\n * But for providers with async switch network like wallet-connect, we need to wait for chain change\n * event before changing network.\n */\n if (\n requestedNetwork !== this.state.network &&\n !this.options.config.isAsyncSwitchNetwork\n ) {\n this.updateState({\n network,\n });\n }\n\n return {\n // Only network has been changed, so we reuse accounts from what we have already.\n accounts: connectionFromState.accounts,\n network: requestedNetwork,\n provider: this.provider,\n };\n }\n\n // If none of the above conditions didn't match, continute to connect.\n }\n\n // We are connecting to wallet for the first time\n\n // Trying to get wallet's instance, if it's not available, raise an error.\n const instance = await this.tryGetInstance({ network });\n\n // Instance exists, trying to connect\n this.updateState({\n connecting: true,\n });\n this.setInstalledAs(true);\n\n try {\n // eslint-disable-next-line no-var\n var connectResult = await this.actions.connect({\n instance,\n network: requestedNetwork || undefined,\n meta: this.info.supportedBlockchains || [],\n });\n } catch (e) {\n this.resetState();\n throw e;\n }\n\n this.updateState({\n connected: true,\n reachable: true,\n connecting: false,\n });\n\n // TODO: Handle accounts.length > 0\n\n // Inserting accounts into our state.\n let nextAccounts: string[] = [];\n let nextNetwork: Network | null | undefined = null;\n if (Array.isArray(connectResult)) {\n const accounts = connectResult.flatMap((blockchain) => {\n const chainId = blockchain.chainId || Networks.Unknown;\n // Try to map chainId with a Network, if not found, we use chainId directly.\n const network =\n getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||\n Networks.Unknown;\n // TODO: second parameter should be `string` when we decided to open source the package.\n return accountAddressesWithNetwork(blockchain.accounts, network);\n });\n // Typescript can not detect we are filtering out null values:(\n nextAccounts = accounts.filter(Boolean);\n nextNetwork = requestedNetwork || this.options.config.defaultNetwork;\n } else {\n const chainId = connectResult.chainId || Networks.Unknown;\n const network =\n getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||\n Networks.Unknown;\n\n // We fallback to current active network if `chainId` not provided.\n nextAccounts = accountAddressesWithNetwork(\n connectResult.accounts,\n network\n );\n nextNetwork = network;\n }\n\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n network: nextNetwork,\n });\n }\n\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n async disconnect() {\n this.resetState();\n\n if (this.actions.disconnect) {\n void this.actions.disconnect({\n instance: this.provider,\n // On wallet connect, we need to destory the instance and get a whole new instance when we are going to connect\n destroyInstance: () => {\n this.setProvider(null);\n },\n });\n }\n }\n\n // This method is only used for auto connection\n async eagerConnect() {\n const instance = await this.tryGetInstance({ network: undefined });\n const { canEagerConnect } = this.actions;\n const error_message = `can't restore connection for ${this.options.config.type} .`;\n\n if (canEagerConnect) {\n // Check if we can eagerly connect to the wallet\n const eagerConnection = await canEagerConnect({\n instance: instance,\n meta: this.info.supportedBlockchains,\n });\n\n if (eagerConnection) {\n // Connect to wallet as usual\n return this.connect();\n }\n throw new Error(error_message);\n } else {\n throw new Error(error_message);\n }\n }\n\n getSigners(provider: any) {\n return this.actions.getSigners(provider);\n }\n getWalletInfo(allBlockChains: BlockchainMeta[]) {\n return this.actions.getWalletInfo(allBlockChains);\n }\n canSwitchNetworkTo(network: Network, provider: any) {\n const switchTo = this.actions.canSwitchNetworkTo;\n if (!switchTo) {\n return false;\n }\n\n return switchTo({\n network,\n meta: this.info.supportedBlockchains,\n provider,\n });\n }\n\n onInit() {\n if (!this.options.config.isAsyncInstance) {\n const instance = this.actions.getInstance();\n if (!!instance && !this.state.installed) {\n this.setInstalledAs(true);\n }\n } else if (needsCheckInstallation(this.options)) {\n this.actions.getInstance().then((data: any) => {\n if (data) {\n this.setInstalledAs(true);\n }\n });\n }\n }\n\n setProvider(value: any) {\n this.provider = value;\n if (!!value && !!this.actions.subscribe) {\n this.actions.subscribe({\n instance: value,\n state: this.state,\n meta: this.info.supportedBlockchains,\n connect: this.connect.bind(this),\n disconnect: this.disconnect.bind(this),\n updateAccounts: (accounts, chainId) => {\n let network = this.state.network;\n if (chainId) {\n network =\n getBlockChainNameFromId(\n chainId,\n this.info.supportedBlockchains\n ) || Networks.Unknown;\n }\n\n const nextAccounts = accountAddressesWithNetwork(accounts, network);\n if (nextAccounts.length > 0) {\n this.updateState({\n accounts: nextAccounts,\n });\n }\n },\n updateChainId: this.updateChainId.bind(this),\n });\n }\n }\n\n setInfo(info: Partial<EventInfo>) {\n if (typeof info.supportedBlockchains !== 'undefined') {\n this.info.supportedBlockchains = info.supportedBlockchains;\n }\n if (typeof info.isContractWallet !== 'undefined') {\n this.info.isContractWallet = info.isContractWallet;\n }\n }\n\n setHandler(handler: EventHandler) {\n this.options.handler = handler;\n }\n\n getState(): State {\n return this.state;\n }\n\n updateState(states: Partial<State>) {\n /*\n * We will notify handler after updating all the states.\n * Because when we call `handler` it will has latest states.\n */\n const updates: [Events, any][] = [];\n\n if (typeof states.connected !== 'undefined') {\n this.state.connected = states.connected;\n updates.push([Events.CONNECTED, states.connected]);\n }\n if (typeof states.connecting !== 'undefined') {\n this.state.connecting = states.connecting;\n updates.push([Events.CONNECTING, states.connecting]);\n }\n if (typeof states.reachable !== 'undefined') {\n this.state.reachable = states.reachable;\n updates.push([Events.REACHABLE, states.reachable]);\n }\n if (typeof states.installed !== 'undefined') {\n this.state.installed = states.installed;\n updates.push([Events.INSTALLED, states.installed]);\n }\n if (typeof states.accounts !== 'undefined') {\n this.state.accounts = states.accounts;\n updates.push([Events.ACCOUNTS, states.accounts]);\n }\n if (typeof states.network !== 'undefined') {\n this.state.network = states.network;\n updates.push([Events.NETWORK, states.network]);\n }\n\n const state = this.getState();\n updates.forEach(([name, value]) => {\n const eventInfo: EventInfo = {\n supportedBlockchains: this.info.supportedBlockchains,\n isContractWallet: this.info.isContractWallet,\n };\n this.options.handler(\n this.options.config.type,\n name,\n value,\n state,\n eventInfo\n );\n });\n }\n\n resetState() {\n this.updateState({\n connected: false,\n connecting: false,\n reachable: false,\n accounts: null,\n network: null,\n });\n }\n\n private async getConnectionFromState() {\n // Already connected, so we return provider that we have in memory.\n\n /*\n * For switching network on Trust Wallet (WalletConnect),\n * We only kill the session (and not restting the whole state)\n * So we are relying on this.provider for achieving this functionality.\n */\n if (this.state.connected && !!this.provider) {\n return {\n accounts: this.state.accounts,\n network: this.state.network,\n provider: this.provider,\n };\n }\n\n return null;\n }\n\n private updateChainId(chainId: string | number) {\n const network = chainId\n ? getBlockChainNameFromId(chainId, this.info.supportedBlockchains)\n : Networks.Unknown;\n\n this.updateState({\n network,\n });\n }\n\n private setInstalledAs(value: boolean) {\n if (!needsCheckInstallation(this.options) && value === false) {\n return;\n }\n\n this.updateState({\n installed: value,\n });\n }\n // eslint-disable-next-line destructuring/in-methods-params\n private async tryGetInstance({\n network,\n force,\n }: {\n network?: Network;\n force?: boolean;\n }) {\n let instance = null;\n /*\n * For switching network on Trust Wallet (WalletConnect),\n * We only kill the session (and not restting the whole state)\n * So we are relying on this.provider for achieving this functionality.\n */\n this.setProvider(null);\n if (this.options.config.isAsyncInstance) {\n // Trying to connect\n const instanceOptions: GetInstanceOptions = {\n currentProvider: this.provider,\n meta: this.info.supportedBlockchains,\n force: force || false,\n updateChainId: this.updateChainId.bind(this),\n getState: this.getState.bind(this),\n };\n\n if (network) {\n instanceOptions.network = network;\n }\n instance = await this.actions.getInstance(instanceOptions);\n } else {\n instance = this.actions.getInstance();\n }\n\n if (!instance) {\n this.setInstalledAs(false);\n this.resetState();\n\n const error_message = `It seems your selected wallet (${this.options.config.type}) isn't installed.`;\n throw new Error(error_message);\n }\n\n this.setProvider(instance);\n return instance;\n }\n}\n\nexport default Wallet;\n"],
5
+ "mappings": "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",
6
+ "names": ["Events", "Persistor", "name", "item", "value", "__name", "formatAddressWithNetwork", "address", "network", "__name", "accountAddressesWithNetwork", "addresses", "readAccountAddress", "addressWithNetwork", "needsCheckInstallation", "options", "checkInstallation", "getBlockChainNameFromId", "Networks", "Wallet", "options", "actions", "needsCheckInstallation", "network", "connectionFromState", "currentNetwork", "requestedNetwork", "networkChanged", "canSwitch", "instance", "connectResult", "e", "nextAccounts", "nextNetwork", "blockchain", "chainId", "Networks", "getBlockChainNameFromId", "accountAddressesWithNetwork", "canEagerConnect", "error_message", "provider", "allBlockChains", "switchTo", "data", "value", "accounts", "info", "handler", "states", "updates", "state", "name", "eventInfo", "force", "instanceOptions", "__name", "wallet_default"]
7
7
  }
package/dist/types.d.ts CHANGED
@@ -63,6 +63,7 @@ export type SwitchNetwork = (options: {
63
63
  network: Network;
64
64
  meta: BlockchainMeta[];
65
65
  newInstance?: TryGetInstance;
66
+ getState?: () => WalletState;
66
67
  }) => Promise<void>;
67
68
  export type Suggest = (options: {
68
69
  instance: any;
@@ -95,6 +96,7 @@ export interface WalletConfig {
95
96
  defaultNetwork?: Network;
96
97
  checkInstallation?: boolean;
97
98
  isAsyncInstance?: boolean;
99
+ isAsyncSwitchNetwork?: boolean;
98
100
  }
99
101
  export type WalletProviders = Map<WalletType, {
100
102
  actions: WalletActions;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,KAAK,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;KAAG,IAAI,IAAI,UAAU,CAAC,CAAC,EAAE,GAAG;CAAE,CAAC;AAEvD,oBAAY,MAAM;IAChB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,WAAW,CAAC;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB,CAAC,MAAM,GAAG,CAAC,GACX,CAAC,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpD,MAAM,MAAM,cAAc,GACtB,CAAC,MAAM,GAAG,CAAC,GACX,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/E,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE;IAC9B,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB,KAAK,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,EAAE,CAAC,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE;IACjC,QAAQ,EAAE,GAAG,CAAC;IACd,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,KAAK,IAAI,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE;IACpC,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,WAAW,CAAC;CAC9B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE;IAC9B,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,QAAQ,EAAE,GAAG,CAAC;CACf,KAAK,OAAO,CAAC;AAEd,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE;IACtC,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEvB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,GAAG,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IAItB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,aAAa,CAAC;IAC7C,kBAAkB,CAAC,EAAE,gBAAgB,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;CAC7D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,GAAG,CAC/B,UAAU,EACV;IACE,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB,CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,aAAa,CAAC"}
package/dist/wallet.d.ts CHANGED
@@ -2,7 +2,11 @@ import type { WalletActions, WalletConfig } from './types';
2
2
  import type { Network, WalletType } from '@rango-dev/wallets-shared';
3
3
  import type { BlockchainMeta } from 'rango-types';
4
4
  import { Events } from './types';
5
- export type EventHandler = (type: WalletType, event: Events, value: any, coreState: State, supportedChains: BlockchainMeta[]) => void;
5
+ export type EventHandler = (type: WalletType, event: Events, value: any, coreState: State, info: EventInfo) => void;
6
+ export type EventInfo = {
7
+ supportedBlockchains: BlockchainMeta[];
8
+ isContractWallet: boolean;
9
+ };
6
10
  export interface State {
7
11
  connected: boolean;
8
12
  connecting: boolean;
@@ -16,11 +20,11 @@ export interface Options {
16
20
  handler: EventHandler;
17
21
  }
18
22
  declare class Wallet<InstanceType = any> {
23
+ provider: InstanceType | null;
19
24
  private actions;
20
25
  private state;
21
26
  private options;
22
- private meta;
23
- provider: InstanceType | null;
27
+ private info;
24
28
  constructor(options: Options, actions: WalletActions);
25
29
  suggestAndConnect(network: Network): Promise<{
26
30
  accounts: string[] | null;
@@ -43,7 +47,7 @@ declare class Wallet<InstanceType = any> {
43
47
  canSwitchNetworkTo(network: Network, provider: any): boolean;
44
48
  onInit(): void;
45
49
  setProvider(value: any): void;
46
- setMeta(value: BlockchainMeta[]): void;
50
+ setInfo(info: Partial<EventInfo>): void;
47
51
  setHandler(handler: EventHandler): void;
48
52
  getState(): State;
49
53
  updateState(states: Partial<State>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,eAAe,EAAE,cAAc,EAAE,KAC9B,IAAI,CAAC;AAEV,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,cAAM,MAAM,CAAC,YAAY,GAAG,GAAG;IAC7B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAAmB;IACxB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;gBAEzB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;IAmB9C,iBAAiB,CAAC,OAAO,EAAE,OAAO;;;;;IAWlC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO;;;;;IAuIzB,UAAU;IAeV,YAAY;;;;;IAsBlB,UAAU,CAAC,QAAQ,EAAE,GAAG;IAGxB,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE;IAG9C,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;IAalD,MAAM;IAeN,WAAW,CAAC,KAAK,EAAE,GAAG;IA4BtB,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE;IAI/B,UAAU,CAAC,OAAO,EAAE,YAAY;IAIhC,QAAQ,IAAI,KAAK;IAGjB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IA4ClC,UAAU;YAUI,sBAAsB;IAmBpC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;YASR,cAAc;CA2C7B;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,SAAS,KACZ,IAAI,CAAC;AAEV,MAAM,MAAM,SAAS,GAAG;IACtB,oBAAoB,EAAE,cAAc,EAAE,CAAC;IACvC,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,cAAM,MAAM,CAAC,YAAY,GAAG,GAAG;IACtB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IACrC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAAY;gBAEZ,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;IAuB9C,iBAAiB,CAAC,OAAO,EAAE,OAAO;;;;;IAWlC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO;;;;;IAkJzB,UAAU;IAeV,YAAY;;;;;IAsBlB,UAAU,CAAC,QAAQ,EAAE,GAAG;IAGxB,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE;IAG9C,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG;IAalD,MAAM;IAeN,WAAW,CAAC,KAAK,EAAE,GAAG;IA+BtB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC;IAShC,UAAU,CAAC,OAAO,EAAE,YAAY;IAIhC,QAAQ,IAAI,KAAK;IAIjB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IAgDlC,UAAU;YAUI,sBAAsB;IAmBpC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc;YAUR,cAAc;CA2C7B;AAED,eAAe,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/wallets-core",
3
- "version": "0.22.1-next.0",
3
+ "version": "0.22.1-next.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "module": "./dist/index.js",
@@ -25,7 +25,7 @@
25
25
  "react-dom": "^17.0.0 || ^18.0.0"
26
26
  },
27
27
  "dependencies": {
28
- "@rango-dev/wallets-shared": "^0.21.1-next.0",
28
+ "@rango-dev/wallets-shared": "^0.21.1-next.2",
29
29
  "rango-types": "^0.1.46"
30
30
  },
31
31
  "publishConfig": {
package/src/types.ts CHANGED
@@ -81,6 +81,7 @@ export type SwitchNetwork = (options: {
81
81
  network: Network;
82
82
  meta: BlockchainMeta[];
83
83
  newInstance?: TryGetInstance;
84
+ getState?: () => WalletState;
84
85
  }) => Promise<void>;
85
86
 
86
87
  export type Suggest = (options: {
@@ -121,6 +122,7 @@ export interface WalletConfig {
121
122
  defaultNetwork?: Network;
122
123
  checkInstallation?: boolean;
123
124
  isAsyncInstance?: boolean;
125
+ isAsyncSwitchNetwork?: boolean;
124
126
  }
125
127
 
126
128
  export type WalletProviders = Map<
package/src/wallet.ts CHANGED
@@ -12,9 +12,14 @@ export type EventHandler = (
12
12
  event: Events,
13
13
  value: any,
14
14
  coreState: State,
15
- supportedChains: BlockchainMeta[]
15
+ info: EventInfo
16
16
  ) => void;
17
17
 
18
+ export type EventInfo = {
19
+ supportedBlockchains: BlockchainMeta[];
20
+ isContractWallet: boolean;
21
+ };
22
+
18
23
  export interface State {
19
24
  connected: boolean;
20
25
  connecting: boolean;
@@ -30,17 +35,20 @@ export interface Options {
30
35
  }
31
36
 
32
37
  class Wallet<InstanceType = any> {
38
+ public provider: InstanceType | null;
33
39
  private actions: WalletActions;
34
40
  private state: State;
35
41
  private options: Options;
36
- private meta: BlockchainMeta[];
37
- public provider: InstanceType | null;
42
+ private info: EventInfo;
38
43
 
39
44
  constructor(options: Options, actions: WalletActions) {
40
45
  this.actions = actions;
41
46
  this.options = options;
42
47
  this.provider = null;
43
- this.meta = [];
48
+ this.info = {
49
+ supportedBlockchains: [],
50
+ isContractWallet: false,
51
+ };
44
52
  this.state = {
45
53
  connected: false,
46
54
  connecting: false,
@@ -55,11 +63,12 @@ class Wallet<InstanceType = any> {
55
63
  this.setInstalledAs(true);
56
64
  }
57
65
  }
66
+
58
67
  async suggestAndConnect(network: Network) {
59
68
  if (this.actions.suggest) {
60
69
  await this.actions.suggest({
61
70
  instance: this.provider,
62
- meta: this.meta,
71
+ meta: this.info.supportedBlockchains,
63
72
  network,
64
73
  });
65
74
  }
@@ -95,7 +104,7 @@ class Wallet<InstanceType = any> {
95
104
  if (this.actions.canSwitchNetworkTo) {
96
105
  canSwitch = this.actions.canSwitchNetworkTo({
97
106
  provider: this.provider,
98
- meta: this.meta,
107
+ meta: this.info.supportedBlockchains,
99
108
  network: requestedNetwork || '',
100
109
  });
101
110
  }
@@ -103,16 +112,24 @@ class Wallet<InstanceType = any> {
103
112
  if (networkChanged && canSwitch && !!this.actions.switchNetwork) {
104
113
  await this.actions.switchNetwork({
105
114
  instance: this.provider,
106
- meta: this.meta,
115
+ meta: this.info.supportedBlockchains,
107
116
  // TODO: Fix type error
108
117
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
109
118
  // @ts-ignore
110
119
  network: requestedNetwork,
111
120
  newInstance: this.tryGetInstance.bind(this),
121
+ getState: this.getState.bind(this),
112
122
  });
113
123
 
114
- // We assume if we reach here (`switchNetwork` not throwing error), Switch successfully has been done.
115
- if (requestedNetwork !== this.state.network) {
124
+ /*
125
+ * We assume if we reach here (`switchNetwork` not throwing error), Switch successfully has been done.
126
+ * But for providers with async switch network like wallet-connect, we need to wait for chain change
127
+ * event before changing network.
128
+ */
129
+ if (
130
+ requestedNetwork !== this.state.network &&
131
+ !this.options.config.isAsyncSwitchNetwork
132
+ ) {
116
133
  this.updateState({
117
134
  network,
118
135
  });
@@ -145,7 +162,7 @@ class Wallet<InstanceType = any> {
145
162
  var connectResult = await this.actions.connect({
146
163
  instance,
147
164
  network: requestedNetwork || undefined,
148
- meta: this.meta || [],
165
+ meta: this.info.supportedBlockchains || [],
149
166
  });
150
167
  } catch (e) {
151
168
  this.resetState();
@@ -168,7 +185,8 @@ class Wallet<InstanceType = any> {
168
185
  const chainId = blockchain.chainId || Networks.Unknown;
169
186
  // Try to map chainId with a Network, if not found, we use chainId directly.
170
187
  const network =
171
- getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;
188
+ getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||
189
+ Networks.Unknown;
172
190
  // TODO: second parameter should be `string` when we decided to open source the package.
173
191
  return accountAddressesWithNetwork(blockchain.accounts, network);
174
192
  });
@@ -178,7 +196,9 @@ class Wallet<InstanceType = any> {
178
196
  } else {
179
197
  const chainId = connectResult.chainId || Networks.Unknown;
180
198
  const network =
181
- getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;
199
+ getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||
200
+ Networks.Unknown;
201
+
182
202
  // We fallback to current active network if `chainId` not provided.
183
203
  nextAccounts = accountAddressesWithNetwork(
184
204
  connectResult.accounts,
@@ -205,7 +225,7 @@ class Wallet<InstanceType = any> {
205
225
  this.resetState();
206
226
 
207
227
  if (this.actions.disconnect) {
208
- this.actions.disconnect({
228
+ void this.actions.disconnect({
209
229
  instance: this.provider,
210
230
  // On wallet connect, we need to destory the instance and get a whole new instance when we are going to connect
211
231
  destroyInstance: () => {
@@ -225,7 +245,7 @@ class Wallet<InstanceType = any> {
225
245
  // Check if we can eagerly connect to the wallet
226
246
  const eagerConnection = await canEagerConnect({
227
247
  instance: instance,
228
- meta: this.meta,
248
+ meta: this.info.supportedBlockchains,
229
249
  });
230
250
 
231
251
  if (eagerConnection) {
@@ -252,7 +272,7 @@ class Wallet<InstanceType = any> {
252
272
 
253
273
  return switchTo({
254
274
  network,
255
- meta: this.meta,
275
+ meta: this.info.supportedBlockchains,
256
276
  provider,
257
277
  });
258
278
  }
@@ -278,14 +298,17 @@ class Wallet<InstanceType = any> {
278
298
  this.actions.subscribe({
279
299
  instance: value,
280
300
  state: this.state,
281
- meta: this.meta,
301
+ meta: this.info.supportedBlockchains,
282
302
  connect: this.connect.bind(this),
283
303
  disconnect: this.disconnect.bind(this),
284
304
  updateAccounts: (accounts, chainId) => {
285
305
  let network = this.state.network;
286
306
  if (chainId) {
287
307
  network =
288
- getBlockChainNameFromId(chainId, this.meta) || Networks.Unknown;
308
+ getBlockChainNameFromId(
309
+ chainId,
310
+ this.info.supportedBlockchains
311
+ ) || Networks.Unknown;
289
312
  }
290
313
 
291
314
  const nextAccounts = accountAddressesWithNetwork(accounts, network);
@@ -300,8 +323,13 @@ class Wallet<InstanceType = any> {
300
323
  }
301
324
  }
302
325
 
303
- setMeta(value: BlockchainMeta[]) {
304
- this.meta = value;
326
+ setInfo(info: Partial<EventInfo>) {
327
+ if (typeof info.supportedBlockchains !== 'undefined') {
328
+ this.info.supportedBlockchains = info.supportedBlockchains;
329
+ }
330
+ if (typeof info.isContractWallet !== 'undefined') {
331
+ this.info.isContractWallet = info.isContractWallet;
332
+ }
305
333
  }
306
334
 
307
335
  setHandler(handler: EventHandler) {
@@ -311,6 +339,7 @@ class Wallet<InstanceType = any> {
311
339
  getState(): State {
312
340
  return this.state;
313
341
  }
342
+
314
343
  updateState(states: Partial<State>) {
315
344
  /*
316
345
  * We will notify handler after updating all the states.
@@ -345,12 +374,16 @@ class Wallet<InstanceType = any> {
345
374
 
346
375
  const state = this.getState();
347
376
  updates.forEach(([name, value]) => {
377
+ const eventInfo: EventInfo = {
378
+ supportedBlockchains: this.info.supportedBlockchains,
379
+ isContractWallet: this.info.isContractWallet,
380
+ };
348
381
  this.options.handler(
349
382
  this.options.config.type,
350
383
  name,
351
384
  value,
352
385
  state,
353
- this.meta
386
+ eventInfo
354
387
  );
355
388
  });
356
389
  }
@@ -386,7 +419,7 @@ class Wallet<InstanceType = any> {
386
419
 
387
420
  private updateChainId(chainId: string | number) {
388
421
  const network = chainId
389
- ? getBlockChainNameFromId(chainId, this.meta)
422
+ ? getBlockChainNameFromId(chainId, this.info.supportedBlockchains)
390
423
  : Networks.Unknown;
391
424
 
392
425
  this.updateState({
@@ -403,6 +436,7 @@ class Wallet<InstanceType = any> {
403
436
  installed: value,
404
437
  });
405
438
  }
439
+ // eslint-disable-next-line destructuring/in-methods-params
406
440
  private async tryGetInstance({
407
441
  network,
408
442
  force,
@@ -421,7 +455,7 @@ class Wallet<InstanceType = any> {
421
455
  // Trying to connect
422
456
  const instanceOptions: GetInstanceOptions = {
423
457
  currentProvider: this.provider,
424
- meta: this.meta,
458
+ meta: this.info.supportedBlockchains,
425
459
  force: force || false,
426
460
  updateChainId: this.updateChainId.bind(this),
427
461
  getState: this.getState.bind(this),