import { build, EthereumNetwork, Maybe, Ethereum } from '@dapp-stack/environment' import { Signale } from 'signale' import { Geth } from './strategies/geth' import { Infura } from './strategies/infura' import { Null } from './strategies/null' import { IEthereumStrategy } from './types' const signale = new Signale({ scope: 'Ethereum' }) const migrate = () => new Promise(resolve => resolve()) const strategy = (network: Maybe): IEthereumStrategy => { let ethereum: Maybe if (network) { ethereum = { network, migrate } } else { ethereum = build().ethereum } if (!ethereum || ethereum.network === 'external') return new Null() switch (ethereum.network) { case 'dev': return new Geth(ethereum, signale) default: return new Infura(ethereum, signale) } } export const console = (network: Maybe = false) => { let ethereum: Maybe if (network) { ethereum = { network, migrate } } else { ethereum = build().ethereum } if (!ethereum) { return signale.error( 'This command is only available when using the ethereum network' ) } new Geth(ethereum, signale).console() } export const start = ( network: Maybe = false ): Promise => { return strategy(network).start() } export const stop = ( network: Maybe = false ): Promise => { return strategy(network).stop() }