From 4d57fb67a0034d89758cf487862a1a77636df22d Mon Sep 17 00:00:00 2001 From: Erik Marks Date: Mon, 9 Nov 2020 08:23:10 -0800 Subject: [PATCH] Delete network status controller --- README.md | 18 +--- src/index.ts | 1 - src/network/NetworkStatusController.ts | 122 ------------------------- tests/NetworkStatusController.test.ts | 71 -------------- 4 files changed, 5 insertions(+), 207 deletions(-) delete mode 100644 src/network/NetworkStatusController.ts delete mode 100644 tests/NetworkStatusController.test.ts diff --git a/README.md b/README.md index 71dcdd29097..89d12dc9232 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,12 @@ yarn add @metamask/controllers ```js import { ComposableController, - NetworkStatusController, - TokenRatesController + NetworkController, + TokenRatesController, } from '@metamask/controllers'; const datamodel = new ComposableController([ - new NetworkStatusController(), + new NetworkController(), new TokenRatesController() ]); @@ -93,14 +93,6 @@ import NetworkController from '@metamask/controllers'; The NetworkController is responsible for creating an underlying provider and for refreshing its configuration. -### NetworkStatusController - -```ts -import NetworkStatusController from '@metamask/controllers'; -``` - -The NetworkStatusController passively polls for the status of available provider networks. The Infura network is supported by default. - ### PhishingController ```ts @@ -230,12 +222,12 @@ The ComposableController is initialized by passing an array of controller instan ```ts import { ComposableController, - NetworkStatusController, + NetworkController, TokenRatesController } from '@metamask/controllers'; const datamodel = new ComposableController([ - new NetworkStatusController(), + new NetworkController(), new TokenRatesController() ]); ``` diff --git a/src/index.ts b/src/index.ts index 6e208904ffd..0a06206555c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,6 @@ export * from './assets/CurrencyRateController'; export * from './keyring/KeyringController'; export * from './message-manager/MessageManager'; export * from './network/NetworkController'; -export * from './network/NetworkStatusController'; export * from './third-party/PhishingController'; export * from './user/PreferencesController'; export * from './assets/TokenBalancesController'; diff --git a/src/network/NetworkStatusController.ts b/src/network/NetworkStatusController.ts deleted file mode 100644 index 4e5822f30e6..00000000000 --- a/src/network/NetworkStatusController.ts +++ /dev/null @@ -1,122 +0,0 @@ -import BaseController, { BaseConfig, BaseState } from '../BaseController'; -import { safelyExecute, handleFetch } from '../util'; - -/** - * Network status code string - */ -export type Status = 'ok' | 'down' | 'degraded'; - -/** - * Network status object - */ -export interface NetworkStatus { - kovan: Status; - mainnet: Status; - rinkeby: Status; - ropsten: Status; -} - -/** - * @type NetworkStatusConfig - * - * Network status controller configuration - * - * @property interval - Polling interval used to fetch network status - */ -export interface NetworkStatusConfig extends BaseConfig { - interval: number; -} - -/** - * @type NetworkStatusState - * - * Network status controller state - * - * @property networkStatus - Providers mapped to network status objects - */ -export interface NetworkStatusState extends BaseState { - networkStatus: { - infura: NetworkStatus; - }; -} - -const DOWN_NETWORK_STATUS: NetworkStatus = { - kovan: 'down', - mainnet: 'down', - rinkeby: 'down', - ropsten: 'down', -}; - -/** - * Controller that passively polls on a set interval for network status of providers - */ -export class NetworkStatusController extends BaseController { - private handle?: NodeJS.Timer; - - /** - * Name of this controller used during composition - */ - name = 'NetworkStatusController'; - - /** - * Creates a NetworkStatusController instance - * - * @param config - Initial options used to configure this controller - * @param state - Initial state to set on this controller - */ - constructor(config?: Partial, state?: Partial) { - super(config, state); - this.defaultConfig = { interval: 180000 }; - this.defaultState = { - networkStatus: { - infura: DOWN_NETWORK_STATUS, - }, - }; - this.initialize(); - this.poll(); - } - - /** - * Starts a new polling interval - * - * @param interval - Polling interval used to fetch network status - */ - async poll(interval?: number): Promise { - interval && this.configure({ interval }, false, false); - this.handle && clearTimeout(this.handle); - await safelyExecute(() => this.updateNetworkStatuses()); - this.handle = setTimeout(() => { - this.poll(this.config.interval); - }, this.config.interval); - } - - /** - * Fetches infura network status - * - * @returns - Promise resolving to an infura network status object - */ - async updateInfuraStatus(): Promise { - try { - const json = await handleFetch('https://api.infura.io/v1/status/metamask'); - return json && json.mainnet ? json : /* istanbul ignore next */ DOWN_NETWORK_STATUS; - } catch (error) { - /* istanbul ignore next */ - return DOWN_NETWORK_STATUS; - } - } - - /** - * Updates network status for all providers - * - * @returns - Promise resolving when this operation completes - */ - async updateNetworkStatuses() { - if (this.disabled) { - return; - } - const infura = await this.updateInfuraStatus(); - this.update({ networkStatus: { infura } }); - } -} - -export default NetworkStatusController; diff --git a/tests/NetworkStatusController.test.ts b/tests/NetworkStatusController.test.ts deleted file mode 100644 index 507274dd31d..00000000000 --- a/tests/NetworkStatusController.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { stub } from 'sinon'; -import NetworkStatusController from '../src/network/NetworkStatusController'; - -const DOWN_NETWORK_STATUS = { - kovan: 'down', - mainnet: 'down', - rinkeby: 'down', - ropsten: 'down', -}; - -describe('NetworkStatusController', () => { - it('should set default state', () => { - const controller = new NetworkStatusController(); - expect(controller.state).toEqual({ - networkStatus: { - infura: DOWN_NETWORK_STATUS, - }, - }); - }); - - it('should set default config', () => { - const controller = new NetworkStatusController(); - expect(controller.config).toEqual({ interval: 180000 }); - }); - - it('should update all the statuses', async () => { - const controller = new NetworkStatusController(); - expect(controller.state.networkStatus).toEqual({ infura: DOWN_NETWORK_STATUS }); - await controller.updateNetworkStatuses(); - expect(controller.state.networkStatus.infura.mainnet).toBeDefined(); - const status = controller.state.networkStatus.infura.mainnet; - expect(status === 'ok' || status === 'degraded').toBe(true); - }); - - it('should poll and update statuses in the right interval', () => { - return new Promise((resolve) => { - const mock = stub(NetworkStatusController.prototype, 'updateNetworkStatuses'); - new NetworkStatusController({ interval: 10 }); - expect(mock.called).toBe(true); - expect(mock.calledTwice).toBe(false); - setTimeout(() => { - expect(mock.calledTwice).toBe(true); - mock.restore(); - resolve(); - }, 15); - }); - }); - - it('should not update statuses if disabled', async () => { - const controller = new NetworkStatusController({ - interval: 10, - }); - controller.updateInfuraStatus = stub(); - controller.disabled = true; - await controller.updateNetworkStatuses(); - expect((controller.updateInfuraStatus as any).called).toBe(false); - }); - - it('should clear previous interval', () => { - const mock = stub(global, 'clearTimeout'); - const controller = new NetworkStatusController({ interval: 1337 }); - return new Promise((resolve) => { - setTimeout(() => { - controller.poll(1338); - expect(mock.called).toBe(true); - mock.restore(); - resolve(); - }, 100); - }); - }); -});