@rango-dev/wallets-core 0.22.1-next.1 → 0.22.1-next.3
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 +1 -1
- package/dist/index.js.map +3 -3
- package/dist/wallet.d.ts +7 -3
- package/dist/wallet.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/wallet.ts +43 -18
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var S=Object.defineProperty;var
|
|
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 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 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 public provider: InstanceType | null;\n private actions: WalletActions;\n private state: State;\n private options: Options;\n private meta: BlockchainMeta[];\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 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.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 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.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 // 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.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": "+EAoBO,IAAKA,OACVA,EAAA,UAAY,YACZA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,UAAY,YACZA,EAAA,SAAW,WACXA,EAAA,QAAU,UANAA,OAAA,ICdL,IAAMC,EAAN,KAAgD,CACrD,QAAQC,EAAc,CACpB,IAAMC,EAAO,aAAa,QAAQD,CAAI,EAEtC,OADmBC,EAAQ,KAAK,MAAMA,CAAI,EAAU,IAEtD,CACA,QAAQD,EAAcE,EAAU,CAC9B,aAAa,QAAQF,EAAM,KAAK,UAAUE,CAAK,CAAC,CAClD,CACA,WAAWF,EAAc,CACvB,aAAa,WAAWA,CAAI,CAC9B,CACF,EAZaG,EAAAJ,EAAA,aCHN,SAASK,EACdC,EACAC,EACA,CACA,MAAO,GAAGA,GAAW,MAAMD,GAC7B,CALgBE,EAAAH,EAAA,4BAOT,SAASI,EACdC,EACAH,EACA,CACA,OAAKG,EAEEA,EAAU,IAAKJ,GACbD,EAAyBC,EAASC,CAAO,CACjD,EAJsB,CAAC,CAK1B,CATgBC,EAAAC,EAAA,+BAWT,SAASE,EAAmBC,EAGjC,CACA,GAAM,CAACL,EAASD,CAAO,EAAIM,EAAmB,MAAM,GAAG,EAEvD,MAAO,CACL,QAAAL,EACA,QAAAD,CACF,CACF,CAVgBE,EAAAG,EAAA,sBAYT,SAASE,EAAuBC,EAAkB,CACvD,GAAM,CAAE,kBAAAC,EAAoB,EAAK,EAAID,EAAQ,OAC7C,OAAOC,CACT,CAHgBP,EAAAK,EAAA,0BC7BhB,OAAS,2BAAAG,EAAyB,YAAAC,MAAgB,
|
|
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/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,
|
|
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;
|
|
@@ -20,7 +24,7 @@ declare class Wallet<InstanceType = any> {
|
|
|
20
24
|
private actions;
|
|
21
25
|
private state;
|
|
22
26
|
private options;
|
|
23
|
-
private
|
|
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
|
-
|
|
50
|
+
setInfo(info: Partial<EventInfo>): void;
|
|
47
51
|
setHandler(handler: EventHandler): void;
|
|
48
52
|
getState(): State;
|
|
49
53
|
updateState(states: Partial<State>): void;
|
package/dist/wallet.d.ts.map
CHANGED
|
@@ -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,
|
|
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.
|
|
3
|
+
"version": "0.22.1-next.3",
|
|
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.
|
|
28
|
+
"@rango-dev/wallets-shared": "^0.21.1-next.3",
|
|
29
29
|
"rango-types": "^0.1.46"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
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
|
-
|
|
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;
|
|
@@ -34,13 +39,16 @@ class Wallet<InstanceType = any> {
|
|
|
34
39
|
private actions: WalletActions;
|
|
35
40
|
private state: State;
|
|
36
41
|
private options: Options;
|
|
37
|
-
private
|
|
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.
|
|
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.
|
|
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.
|
|
107
|
+
meta: this.info.supportedBlockchains,
|
|
99
108
|
network: requestedNetwork || '',
|
|
100
109
|
});
|
|
101
110
|
}
|
|
@@ -103,7 +112,7 @@ 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.
|
|
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
|
|
@@ -153,7 +162,7 @@ class Wallet<InstanceType = any> {
|
|
|
153
162
|
var connectResult = await this.actions.connect({
|
|
154
163
|
instance,
|
|
155
164
|
network: requestedNetwork || undefined,
|
|
156
|
-
meta: this.
|
|
165
|
+
meta: this.info.supportedBlockchains || [],
|
|
157
166
|
});
|
|
158
167
|
} catch (e) {
|
|
159
168
|
this.resetState();
|
|
@@ -176,7 +185,8 @@ class Wallet<InstanceType = any> {
|
|
|
176
185
|
const chainId = blockchain.chainId || Networks.Unknown;
|
|
177
186
|
// Try to map chainId with a Network, if not found, we use chainId directly.
|
|
178
187
|
const network =
|
|
179
|
-
getBlockChainNameFromId(chainId, this.
|
|
188
|
+
getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||
|
|
189
|
+
Networks.Unknown;
|
|
180
190
|
// TODO: second parameter should be `string` when we decided to open source the package.
|
|
181
191
|
return accountAddressesWithNetwork(blockchain.accounts, network);
|
|
182
192
|
});
|
|
@@ -186,7 +196,9 @@ class Wallet<InstanceType = any> {
|
|
|
186
196
|
} else {
|
|
187
197
|
const chainId = connectResult.chainId || Networks.Unknown;
|
|
188
198
|
const network =
|
|
189
|
-
getBlockChainNameFromId(chainId, this.
|
|
199
|
+
getBlockChainNameFromId(chainId, this.info.supportedBlockchains) ||
|
|
200
|
+
Networks.Unknown;
|
|
201
|
+
|
|
190
202
|
// We fallback to current active network if `chainId` not provided.
|
|
191
203
|
nextAccounts = accountAddressesWithNetwork(
|
|
192
204
|
connectResult.accounts,
|
|
@@ -233,7 +245,7 @@ class Wallet<InstanceType = any> {
|
|
|
233
245
|
// Check if we can eagerly connect to the wallet
|
|
234
246
|
const eagerConnection = await canEagerConnect({
|
|
235
247
|
instance: instance,
|
|
236
|
-
meta: this.
|
|
248
|
+
meta: this.info.supportedBlockchains,
|
|
237
249
|
});
|
|
238
250
|
|
|
239
251
|
if (eagerConnection) {
|
|
@@ -260,7 +272,7 @@ class Wallet<InstanceType = any> {
|
|
|
260
272
|
|
|
261
273
|
return switchTo({
|
|
262
274
|
network,
|
|
263
|
-
meta: this.
|
|
275
|
+
meta: this.info.supportedBlockchains,
|
|
264
276
|
provider,
|
|
265
277
|
});
|
|
266
278
|
}
|
|
@@ -286,14 +298,17 @@ class Wallet<InstanceType = any> {
|
|
|
286
298
|
this.actions.subscribe({
|
|
287
299
|
instance: value,
|
|
288
300
|
state: this.state,
|
|
289
|
-
meta: this.
|
|
301
|
+
meta: this.info.supportedBlockchains,
|
|
290
302
|
connect: this.connect.bind(this),
|
|
291
303
|
disconnect: this.disconnect.bind(this),
|
|
292
304
|
updateAccounts: (accounts, chainId) => {
|
|
293
305
|
let network = this.state.network;
|
|
294
306
|
if (chainId) {
|
|
295
307
|
network =
|
|
296
|
-
getBlockChainNameFromId(
|
|
308
|
+
getBlockChainNameFromId(
|
|
309
|
+
chainId,
|
|
310
|
+
this.info.supportedBlockchains
|
|
311
|
+
) || Networks.Unknown;
|
|
297
312
|
}
|
|
298
313
|
|
|
299
314
|
const nextAccounts = accountAddressesWithNetwork(accounts, network);
|
|
@@ -308,8 +323,13 @@ class Wallet<InstanceType = any> {
|
|
|
308
323
|
}
|
|
309
324
|
}
|
|
310
325
|
|
|
311
|
-
|
|
312
|
-
|
|
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
|
+
}
|
|
313
333
|
}
|
|
314
334
|
|
|
315
335
|
setHandler(handler: EventHandler) {
|
|
@@ -319,6 +339,7 @@ class Wallet<InstanceType = any> {
|
|
|
319
339
|
getState(): State {
|
|
320
340
|
return this.state;
|
|
321
341
|
}
|
|
342
|
+
|
|
322
343
|
updateState(states: Partial<State>) {
|
|
323
344
|
/*
|
|
324
345
|
* We will notify handler after updating all the states.
|
|
@@ -353,12 +374,16 @@ class Wallet<InstanceType = any> {
|
|
|
353
374
|
|
|
354
375
|
const state = this.getState();
|
|
355
376
|
updates.forEach(([name, value]) => {
|
|
377
|
+
const eventInfo: EventInfo = {
|
|
378
|
+
supportedBlockchains: this.info.supportedBlockchains,
|
|
379
|
+
isContractWallet: this.info.isContractWallet,
|
|
380
|
+
};
|
|
356
381
|
this.options.handler(
|
|
357
382
|
this.options.config.type,
|
|
358
383
|
name,
|
|
359
384
|
value,
|
|
360
385
|
state,
|
|
361
|
-
|
|
386
|
+
eventInfo
|
|
362
387
|
);
|
|
363
388
|
});
|
|
364
389
|
}
|
|
@@ -394,7 +419,7 @@ class Wallet<InstanceType = any> {
|
|
|
394
419
|
|
|
395
420
|
private updateChainId(chainId: string | number) {
|
|
396
421
|
const network = chainId
|
|
397
|
-
? getBlockChainNameFromId(chainId, this.
|
|
422
|
+
? getBlockChainNameFromId(chainId, this.info.supportedBlockchains)
|
|
398
423
|
: Networks.Unknown;
|
|
399
424
|
|
|
400
425
|
this.updateState({
|
|
@@ -430,7 +455,7 @@ class Wallet<InstanceType = any> {
|
|
|
430
455
|
// Trying to connect
|
|
431
456
|
const instanceOptions: GetInstanceOptions = {
|
|
432
457
|
currentProvider: this.provider,
|
|
433
|
-
meta: this.
|
|
458
|
+
meta: this.info.supportedBlockchains,
|
|
434
459
|
force: force || false,
|
|
435
460
|
updateChainId: this.updateChainId.bind(this),
|
|
436
461
|
getState: this.getState.bind(this),
|