UNPKG

react-dapp-requirements

Version:

(https://github.com/centrifuge/react-dapp-requirements)

989 lines (875 loc) 30.8 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var PropTypes = _interopDefault(require('prop-types')); var promisify = function promisify(inner) { return new Promise(function (resolve, reject) { inner(function (error, result) { if (error) { reject(error); } resolve(result); }); }); }; var promiseWithTimeout = function promiseWithTimeout(millis, promise) { var timeout = new Promise(function (resolve, reject) { return setTimeout(function () { return reject('promise.timeout'); }, millis); }); return Promise.race([promise, timeout]); }; var centeredStyle = { height: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center' }; var asyncToGenerator = function (fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }; var classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; var createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var inherits = function (subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; var possibleConstructorReturn = function (self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }; var BrowserUnsupportedScreen = function (_Component) { inherits(BrowserUnsupportedScreen, _Component); function BrowserUnsupportedScreen() { classCallCheck(this, BrowserUnsupportedScreen); return possibleConstructorReturn(this, (BrowserUnsupportedScreen.__proto__ || Object.getPrototypeOf(BrowserUnsupportedScreen)).apply(this, arguments)); } createClass(BrowserUnsupportedScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, 'Your browser is not supported' ), React__default.createElement( 'p', null, 'To access the application you need to install Chrome, Firefox, Opera, or Brave' ) ); } }]); return BrowserUnsupportedScreen; }(React.Component); var CheckForBrowser = function (_Component2) { inherits(CheckForBrowser, _Component2); function CheckForBrowser() { classCallCheck(this, CheckForBrowser); return possibleConstructorReturn(this, (CheckForBrowser.__proto__ || Object.getPrototypeOf(CheckForBrowser)).apply(this, arguments)); } createClass(CheckForBrowser, [{ key: 'render', value: function render() { var _props = this.props, BrowserUnsupportedComponent = _props.BrowserUnsupportedComponent, isBrowserSupported = _props.isBrowserSupported; if (!isBrowserSupported()) { return React__default.createElement(BrowserUnsupportedComponent, null); } return this.props.children; } }]); return CheckForBrowser; }(React.Component); CheckForBrowser.propTypes = { isBrowserSupported: PropTypes.func.isRequired, BrowserUnsupportedComponent: PropTypes.func }; CheckForBrowser.defaultPros = { BrowserUnsupportedComponent: BrowserUnsupportedScreen }; var Web3UnavailableScreen = function (_Component) { inherits(Web3UnavailableScreen, _Component); function Web3UnavailableScreen() { classCallCheck(this, Web3UnavailableScreen); return possibleConstructorReturn(this, (Web3UnavailableScreen.__proto__ || Object.getPrototypeOf(Web3UnavailableScreen)).apply(this, arguments)); } createClass(Web3UnavailableScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, 'No connection to Ethereum' ), React__default.createElement( 'p', null, 'You will need a way to connect and interact with Ethereum through the browser. The easiest way is Metamask.' ), React__default.createElement( 'a', { href: 'https://metamask.io', rel: 'noopener noreferrer', target: '_blank' }, 'Install Metamask' ), React__default.createElement( 'p', null, 'or', ' ', React__default.createElement( 'a', { rel: 'noopener noreferrer', href: 'https://consensys.zendesk.com/hc/en-us/categories/360000441452-Using-MetaMask', target: '_blank' }, 'learn more' ), ' ', 'about Metamask' ) ); } }]); return Web3UnavailableScreen; }(React.Component); var CheckForWeb3 = function (_Component2) { inherits(CheckForWeb3, _Component2); function CheckForWeb3() { classCallCheck(this, CheckForWeb3); return possibleConstructorReturn(this, (CheckForWeb3.__proto__ || Object.getPrototypeOf(CheckForWeb3)).apply(this, arguments)); } createClass(CheckForWeb3, [{ key: 'render', value: function render() { var _props = this.props, Web3UnavailableComponent = _props.Web3UnavailableComponent, web3Provided = _props.web3Provided; if (!web3Provided()) { return React__default.createElement(Web3UnavailableComponent, null); } return this.props.children; } }]); return CheckForWeb3; }(React.Component); CheckForWeb3.propTypes = { web3Provided: PropTypes.func.isRequired, Web3UnavailableComponent: PropTypes.func }; CheckForWeb3.defaultProps = { Web3UnavailableComponent: Web3UnavailableScreen }; var ProviderUnavailableScreen = function (_Component) { inherits(ProviderUnavailableScreen, _Component); function ProviderUnavailableScreen() { classCallCheck(this, ProviderUnavailableScreen); return possibleConstructorReturn(this, (ProviderUnavailableScreen.__proto__ || Object.getPrototypeOf(ProviderUnavailableScreen)).apply(this, arguments)); } createClass(ProviderUnavailableScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, 'Dapp requires access to your Ethereum account' ), React__default.createElement( 'p', null, 'You must approve connection request in Metamask' ), React__default.createElement( 'a', { href: '#', onClick: this.props.onRetry }, 'Connect' ) ); } }]); return ProviderUnavailableScreen; }(React.Component); var LoadingScreen = function (_Component2) { inherits(LoadingScreen, _Component2); function LoadingScreen() { classCallCheck(this, LoadingScreen); return possibleConstructorReturn(this, (LoadingScreen.__proto__ || Object.getPrototypeOf(LoadingScreen)).apply(this, arguments)); } createClass(LoadingScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'p', null, 'Requesting account connection' ) ); } }]); return LoadingScreen; }(React.Component); var CheckForProvider = function (_Component3) { inherits(CheckForProvider, _Component3); function CheckForProvider(props) { classCallCheck(this, CheckForProvider); var _this3 = possibleConstructorReturn(this, (CheckForProvider.__proto__ || Object.getPrototypeOf(CheckForProvider)).call(this, props)); _this3.fetchData = function () { _this3.setState({ loading: true }); try { _this3.props.fetchProvider().then(function (result) { var selectedProvider = result; if (selectedProvider !== _this3.state.selectedProvider) { _this3.setState({ selectedProvider: selectedProvider, loading: false }); _this3.props.onProviderReceived(selectedProvider); } }).catch(function (e) { // ignore timeout. We only care about web3 errors if (e !== 'promise.timeout') { _this3.setState({ selectedProvider: null, loading: false }); _this3.props.onProviderReceived(null); } }); } catch (e) { throw new Error('this.props.fetchProvider does not return a promise!'); } }; _this3.state = { loading: true, selectedProvider: null }; return _this3; } createClass(CheckForProvider, [{ key: 'componentDidMount', value: function componentDidMount() { this.fetchData(); } }, { key: 'render', value: function render() { var _props = this.props, ProviderUnavailableComponent = _props.ProviderUnavailableComponent, LoadingComponent = _props.LoadingComponent; if (this.state.loading) { return React__default.createElement(LoadingComponent, null); } if (!this.state.selectedProvider) { return React__default.createElement(ProviderUnavailableComponent, { onRetry: this.fetchData }); } return this.props.children; } }]); return CheckForProvider; }(React.Component); CheckForProvider.propTypes = { fetchProvider: PropTypes.func.isRequired, onProviderReceived: PropTypes.func, ProviderUnavailableComponent: PropTypes.func, LoadingComponent: PropTypes.func }; CheckForProvider.defaultProps = { ProviderUnavailableComponent: ProviderUnavailableScreen, LoadingComponent: LoadingScreen, onProviderReceived: function onProviderReceived() {} }; var NetworkNotSupportedScreen = function (_Component) { inherits(NetworkNotSupportedScreen, _Component); function NetworkNotSupportedScreen() { classCallCheck(this, NetworkNotSupportedScreen); return possibleConstructorReturn(this, (NetworkNotSupportedScreen.__proto__ || Object.getPrototypeOf(NetworkNotSupportedScreen)).apply(this, arguments)); } createClass(NetworkNotSupportedScreen, [{ key: 'render', value: function render() { var _props = this.props, currentNetwork = _props.currentNetwork, supportedNetworks = _props.supportedNetworks; return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, currentNetwork, ' is not supported' ), React__default.createElement( 'p', null, 'You must switch to : ', supportedNetworks.join(',') ) ); } }]); return NetworkNotSupportedScreen; }(React.Component); var NetworkNotFoundScreen = function (_Component2) { inherits(NetworkNotFoundScreen, _Component2); function NetworkNotFoundScreen() { classCallCheck(this, NetworkNotFoundScreen); return possibleConstructorReturn(this, (NetworkNotFoundScreen.__proto__ || Object.getPrototypeOf(NetworkNotFoundScreen)).apply(this, arguments)); } createClass(NetworkNotFoundScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, 'Ethereum network not found' ), React__default.createElement( 'p', null, 'Check your internet connection and your Metamask and the reload the application' ) ); } }]); return NetworkNotFoundScreen; }(React.Component); var LoadingScreen$1 = function (_Component3) { inherits(LoadingScreen, _Component3); function LoadingScreen() { classCallCheck(this, LoadingScreen); return possibleConstructorReturn(this, (LoadingScreen.__proto__ || Object.getPrototypeOf(LoadingScreen)).apply(this, arguments)); } createClass(LoadingScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'p', null, 'Checking network information' ) ); } }]); return LoadingScreen; }(React.Component); var CheckForNetwork = function (_Component4) { inherits(CheckForNetwork, _Component4); function CheckForNetwork(props) { classCallCheck(this, CheckForNetwork); var _this4 = possibleConstructorReturn(this, (CheckForNetwork.__proto__ || Object.getPrototypeOf(CheckForNetwork)).call(this, props)); _initialiseProps.call(_this4); _this4.state = { loading: true, hasNetworkConnection: true, retries: 0, networkId: null }; return _this4; } createClass(CheckForNetwork, [{ key: 'componentWillMount', value: function componentWillMount() { this.fetchData(); } }, { key: 'render', value: function render() { var _this5 = this; var _props2 = this.props, NetworkNotSupportedComponent = _props2.NetworkNotSupportedComponent, NetworkNotFoundComponent = _props2.NetworkNotFoundComponent, LoadingComponent = _props2.LoadingComponent, supportedNetworks = _props2.supportedNetworks; var isSupportedNetwork = supportedNetworks.length === 0 || supportedNetworks.indexOf(this.state.networkId) >= 0; var labelsForSupportedNetworks = supportedNetworks.map(function (networkId) { return _this5.getNetworkById(networkId); }); if (this.state.loading) { return React__default.createElement(LoadingComponent, null); } if (!this.state.hasNetworkConnection) { return React__default.createElement(NetworkNotFoundComponent, null); } if (!isSupportedNetwork) { return React__default.createElement(NetworkNotSupportedComponent, { currentNetwork: this.getNetworkById(this.state.networkId), supportedNetworks: labelsForSupportedNetworks }); } return this.props.children; } }]); return CheckForNetwork; }(React.Component); CheckForNetwork.propTypes = { fetchNetwork: PropTypes.func.isRequired, networkMap: PropTypes.object.isRequired, supportedNetworks: function supportedNetworks(props, propName) { if (!Array.isArray(props.supportedNetworks) || !props.supportedNetworks.every(function (prop) { return typeof prop === 'string'; })) { return new Error(propName + ' needs to be an array and contain at least one ETH network id'); } return null; }, onNetworkIdReceived: PropTypes.func, NetworkNotSupportedComponent: PropTypes.func, LoadingComponent: PropTypes.func, NetworkNotFoundComponent: PropTypes.func }; CheckForNetwork.defaultProps = { NetworkNotSupportedComponent: NetworkNotSupportedScreen, LoadingComponent: LoadingScreen$1, NetworkNotFoundComponent: NetworkNotFoundScreen, onNetworkIdReceived: function onNetworkIdReceived() {}, numberOfRetries: 3 }; var _initialiseProps = function _initialiseProps() { var _this6 = this; this.getNetworkById = function (networkId) { if (!_this6.props.networkMap.hasOwnProperty(networkId)) return 'PRIVATE:' + networkId; return _this6.props.networkMap[networkId]; }; this.fetchData = function () { try { promiseWithTimeout(500, _this6.props.fetchNetwork()).then(function (result) { var networkId = result; _this6.setState({ loading: false, networkId: networkId }); _this6.props.onNetworkIdReceived(networkId); }).catch(function (e) { if (_this6.state.retries >= _this6.props.numberOfRetries) { _this6.setState({ loading: false, hasNetworkConnection: false }); _this6.props.onNetworkIdReceived(null); } else { console.log('retry'); _this6.setState({ retries: _this6.state.retries + 1 }); _this6.fetchData(); } }); } catch (e) { throw new Error('this.props.fetchNetwork does not return a promise!'); } }; }; var AccountUnavailableScreen = function (_Component) { inherits(AccountUnavailableScreen, _Component); function AccountUnavailableScreen() { classCallCheck(this, AccountUnavailableScreen); return possibleConstructorReturn(this, (AccountUnavailableScreen.__proto__ || Object.getPrototypeOf(AccountUnavailableScreen)).apply(this, arguments)); } createClass(AccountUnavailableScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'h1', null, 'Your Metamask is locked' ), React__default.createElement( 'p', null, 'Simply open Metamask and follow the instructions to unlock it.' ) ); } }]); return AccountUnavailableScreen; }(React.Component); var LoadingScreen$2 = function (_Component2) { inherits(LoadingScreen, _Component2); function LoadingScreen() { classCallCheck(this, LoadingScreen); return possibleConstructorReturn(this, (LoadingScreen.__proto__ || Object.getPrototypeOf(LoadingScreen)).apply(this, arguments)); } createClass(LoadingScreen, [{ key: 'render', value: function render() { return React__default.createElement( 'div', { style: centeredStyle }, React__default.createElement( 'p', null, 'Checking account information' ) ); } }]); return LoadingScreen; }(React.Component); var CheckForAccount = function (_Component3) { inherits(CheckForAccount, _Component3); function CheckForAccount(props) { classCallCheck(this, CheckForAccount); var _this3 = possibleConstructorReturn(this, (CheckForAccount.__proto__ || Object.getPrototypeOf(CheckForAccount)).call(this, props)); _this3.stopPulling = function () { clearInterval(_this3.interval); _this3.interval = null; }; _this3.startPulling = function () { if (_this3.interval) return; _this3.interval = setInterval(_this3.fetchData, _this3.props.pullInterval); }; _this3.fetchData = function () { try { promiseWithTimeout(_this3.props.pullInterval - 50, _this3.props.fetchAccount()).then(function (result) { var selectedAccount = result.shift(); if (selectedAccount !== _this3.state.selectedAccount) { _this3.setState({ selectedAccount: selectedAccount, loading: false }); _this3.props.onAccountChange(selectedAccount); } }).catch(function (e) { // ignore timeout. We only care about web3 errors if (e !== 'promise.timeout') { _this3.setState({ selectedAccount: null, loading: false }); _this3.props.onAccountChange(null); } }); } catch (e) { throw new Error('this.props.fetchAccount does not return a promise!'); } }; _this3.state = { loading: true, selectedAccount: null }; return _this3; } createClass(CheckForAccount, [{ key: 'componentDidMount', value: function componentDidMount() { this.fetchData(); this.startPulling(); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.stopPulling(); } }, { key: 'render', value: function render() { var _props = this.props, AccountUnavailableComponent = _props.AccountUnavailableComponent, LoadingComponent = _props.LoadingComponent; if (this.state.loading) { return React__default.createElement(LoadingComponent, null); } if (!this.state.selectedAccount) { return React__default.createElement(AccountUnavailableComponent, null); } return this.props.children; } }]); return CheckForAccount; }(React.Component); CheckForAccount.propTypes = { fetchAccount: PropTypes.func.isRequired, pullInterval: PropTypes.number, onAccountChange: PropTypes.func, AccountUnavailableComponent: PropTypes.func, LoadingComponent: PropTypes.func }; CheckForAccount.defaultProps = { AccountUnavailableComponent: AccountUnavailableScreen, LoadingComponent: LoadingScreen$2, onAccountChange: function onAccountChange() {}, pullInterval: 500 }; var _this2 = undefined; var _provider = void 0; var _networkId = void 0; var DappRequirements = function (_Component) { inherits(DappRequirements, _Component); function DappRequirements() { var _ref; var _temp, _this, _ret; classCallCheck(this, DappRequirements); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = possibleConstructorReturn(this, (_ref = DappRequirements.__proto__ || Object.getPrototypeOf(DappRequirements)).call.apply(_ref, [this].concat(args))), _this), _this.onProviderReceived = function (provider) { _provider = provider; if (_this.props.onProviderReceived) _this.props.onProviderReceived(provider); }, _this.onNetworkIdReceived = function (networkId) { _networkId = networkId; if (_this.props.onNetworkIdReceived) _this.props.onNetworkIdReceived(networkId); }, _this.onAccountChange = function (account) { if (_this.props.onAccountChange) _this.props.onAccountChange(account, _networkId, _provider); }, _temp), possibleConstructorReturn(_this, _ret); } createClass(DappRequirements, [{ key: 'render', value: function render() { //used to skip rendering of components in a test env var _window = window, bypassChecks = _window.bypassChecks; var _props = this.props, BrowserUnsupportedComponent = _props.BrowserUnsupportedComponent, isBrowserSupported = _props.isBrowserSupported, Web3UnavailableComponent = _props.Web3UnavailableComponent, web3Provided = _props.web3Provided, ProviderUnavailableComponent = _props.ProviderUnavailableComponent, ProviderLoadingComponent = _props.ProviderLoadingComponent, fetchProvider = _props.fetchProvider, supportedNetworks = _props.supportedNetworks, NetworkNotSupportedComponent = _props.NetworkNotSupportedComponent, NetworkLoadingComponent = _props.NetworkLoadingComponent, NetworkNotFoundComponent = _props.NetworkNotFoundComponent, fetchNetwork = _props.fetchNetwork, AccountUnavailableComponent = _props.AccountUnavailableComponent, AccountLoadingComponent = _props.AccountLoadingComponent, fetchAccount = _props.fetchAccount; return React__default.createElement( React__default.Fragment, null, !bypassChecks ? React__default.createElement( CheckForBrowser, { BrowserUnsupportedComponent: BrowserUnsupportedComponent, isBrowserSupported: isBrowserSupported }, React__default.createElement( CheckForWeb3, { Web3UnavailableComponent: Web3UnavailableComponent, web3Provided: web3Provided }, React__default.createElement( CheckForProvider, { fetchProvider: fetchProvider, ProviderUnavailableComponent: ProviderUnavailableComponent, LoadingComponent: ProviderLoadingComponent, onProviderReceived: this.onProviderReceived }, React__default.createElement( CheckForNetwork, { LoadingComponent: NetworkLoadingComponent, NetworkNotFoundComponent: NetworkNotFoundComponent, NetworkNotSupportedComponent: NetworkNotSupportedComponent, networkMap: this.props.networkMap, onNetworkIdReceived: this.onNetworkIdReceived, fetchNetwork: fetchNetwork, supportedNetworks: supportedNetworks }, React__default.createElement( CheckForAccount, { AccountUnavailableComponent: AccountUnavailableComponent, LoadingComponent: AccountLoadingComponent, fetchAccount: fetchAccount, onAccountChange: this.onAccountChange }, this.props.children ) ) ) ) ) : this.props.children ); } }]); return DappRequirements; }(React.Component); DappRequirements.propTypes = { // array of supported networks supportedNetworks: PropTypes.array.isRequired, // Map of labels for eth network ids networkMap: PropTypes.object, // method that checks if web3 is injected on the window obj. Is Metamask installed? web3Provided: PropTypes.func, // method that checks for the web3 provider. Connection access granted? fetchProvider: PropTypes.func, // polling method for current account fetchAccount: PropTypes.func, // method that retrieves the selected ETH network fetchNetwork: PropTypes.func, // method that checks for browser(chrome, firefox, opera) isBrowserSupported: PropTypes.func, // callback for connection access onProviderReceived: PropTypes.func, // callback for network change onNetworkIdReceived: PropTypes.func, // callback for account change onAccountChange: PropTypes.func, // Render when metamsk is not installed Web3UnavailableComponent: PropTypes.func, // Render if the user does not accept connection access ProviderUnavailableComponent: PropTypes.func, // Render while waiting for user connection input ProviderLoadingComponent: PropTypes.func, // Render if the current browser is not supported BrowserUnsupportedComponent: PropTypes.func, // Render if Metamask is locked AccountUnavailableComponent: PropTypes.func, // Render while waiting for account information AccountLoadingComponent: PropTypes.func, // Render if selected ETH network is not supported NetworkNotSupportedComponent: PropTypes.func, // Render while checking the selected network NetworkLoadingComponent: PropTypes.func, // Render in case of not Eth network(No internet connect) NetworkNotFoundComponent: PropTypes.func }; DappRequirements.defaultProps = { web3Provided: function web3Provided() { return window.ethereum || window.web3; }, supportedNetworks: [4, 99999], isBrowserSupported: function isBrowserSupported() { // Browsers that have the Metamask extension return navigator.userAgent.match(/(opera|chrome|firefox)\/?\s*(\.?\d+(\.\d+)*)/i); }, fetchProvider: function () { var _ref2 = asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!ethereum) { _context.next = 6; break; } _context.next = 3; return ethereum.enable(); case 3: return _context.abrupt('return', ethereum); case 6: if (!window.web3) { _context.next = 8; break; } return _context.abrupt('return', window.web3.currentProvider); case 8: case 'end': return _context.stop(); } } }, _callee, _this2); })); function fetchProvider() { return _ref2.apply(this, arguments); } return fetchProvider; }(), fetchAccount: function fetchAccount() { var _window2 = window, web3 = _window2.web3; return promisify(web3.eth.getAccounts); }, fetchNetwork: function fetchNetwork() { var _window3 = window, web3 = _window3.web3; if (typeof web3.version === 'string') { return web3.eth.net.getId(); } else if (web3.version.api) { return promisify(web3.version.getNetwork); } }, networkMap: { '1': 'MAINNET', '2': 'MORDEN', '3': 'ROPSTEN', '4': 'RINKEBY', '42': 'KOVAN' } }; exports.CheckForBrowser = CheckForBrowser; exports.CheckForWeb3 = CheckForWeb3; exports.CheckForProvider = CheckForProvider; exports.CheckForNetwork = CheckForNetwork; exports.CheckForAccount = CheckForAccount; exports.DappRequirements = DappRequirements; //# sourceMappingURL=index.cjs.js.map