UNPKG

essefuga

Version:

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

66 lines (51 loc) 1.79 kB
import { ConnectorUpdate } from '@web3-react/types' import { AbstractConnector } from '@web3-react/abstract-connector' const CHAIN_ID = 1 interface WalletLinkConnectorArguments { url: string appName: string appLogoUrl?: string darkMode?: boolean } export class WalletLinkConnector extends AbstractConnector { private readonly url: string private readonly appName: string private readonly appLogoUrl?: string private readonly darkMode: boolean public walletLink: any private provider: any constructor({ url, appName, appLogoUrl, darkMode }: WalletLinkConnectorArguments) { super({ supportedChainIds: [CHAIN_ID] }) this.url = url this.appName = appName this.appLogoUrl = appLogoUrl this.darkMode = darkMode || false } public async activate(): Promise<ConnectorUpdate> { if (!this.walletLink) { const { default: WalletLink } = await import('walletlink') this.walletLink = new WalletLink({ appName: this.appName, darkMode: this.darkMode, ...(this.appLogoUrl ? { appLogoUrl: this.appLogoUrl } : {}) }) this.provider = this.walletLink.makeWeb3Provider(this.url, CHAIN_ID) } const account = await this.provider.send('eth_requestAccounts').then((accounts: string[]): string => accounts[0]) return { provider: this.provider, chainId: CHAIN_ID, account: account } } public async getProvider(): Promise<any> { return this.provider } public async getChainId(): Promise<number> { return CHAIN_ID } public async getAccount(): Promise<null | string> { return this.provider.send('eth_accounts').then((accounts: string[]): string => accounts[0]) } public deactivate() {} public async close() { this.provider.close() this.emitDeactivate() } }