UNPKG

exeos

Version:

A simple, maximally extensible, dependency minimized framework for building modern Ethereum dApps

81 lines (68 loc) 2.64 kB
import { ConnectorUpdate } from '@web3-react/types' import { AbstractConnector } from '@web3-react/abstract-connector' import Web3ProviderEngine from 'web3-provider-engine' import { RPCSubprovider } from '@0x/subproviders/lib/src/subproviders/rpc_subprovider' // https://github.com/0xProject/0x-monorepo/issues/1400 import { ledgerEthereumBrowserClientFactoryAsync } from '@0x/subproviders/lib/src' // https://github.com/0xProject/0x-monorepo/issues/1400 import { LedgerSubprovider } from '@0x/subproviders/lib/src/subproviders/ledger' // https://github.com/0xProject/0x-monorepo/issues/1400 interface LedgerConnectorArguments { chainId: number url: string pollingInterval?: number requestTimeoutMs?: number accountFetchingConfigs?: any baseDerivationPath?: string } export class LedgerConnector extends AbstractConnector { private readonly chainId: number private readonly url: string private readonly pollingInterval?: number private readonly requestTimeoutMs?: number private readonly accountFetchingConfigs?: any private readonly baseDerivationPath?: string private provider: any constructor({ chainId, url, pollingInterval, requestTimeoutMs, accountFetchingConfigs, baseDerivationPath }: LedgerConnectorArguments) { super({ supportedChainIds: [chainId] }) this.chainId = chainId this.url = url this.pollingInterval = pollingInterval this.requestTimeoutMs = requestTimeoutMs this.accountFetchingConfigs = accountFetchingConfigs this.baseDerivationPath = baseDerivationPath } public async activate(): Promise<ConnectorUpdate> { if (!this.provider) { const engine = new Web3ProviderEngine({ pollingInterval: this.pollingInterval }) engine.addProvider( new LedgerSubprovider({ networkId: this.chainId, ledgerEthereumClientFactoryAsync: ledgerEthereumBrowserClientFactoryAsync, accountFetchingConfigs: this.accountFetchingConfigs, baseDerivationPath: this.baseDerivationPath }) ) engine.addProvider(new RPCSubprovider(this.url, this.requestTimeoutMs)) this.provider = engine } this.provider.start() return { provider: this.provider, chainId: this.chainId } } public async getProvider(): Promise<Web3ProviderEngine> { return this.provider } public async getChainId(): Promise<number> { return this.chainId } public async getAccount(): Promise<null> { return this.provider._providers[0].getAccountsAsync(1).then((accounts: string[]): string => accounts[0]) } public deactivate() { this.provider.stop() } }