From adf52ceb77302d5a7ebe4e866766cc540f51a778 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Tue, 21 May 2019 12:12:02 +0200 Subject: [PATCH 01/39] allow login to wallets --- client/package-lock.json | 54 ++++++ client/package.json | 2 + client/src/components/organisms/Header.tsx | 2 + client/src/context/MetamaskProvider.ts | 42 +++++ client/src/context/UserProvider.tsx | 188 ++++++++++----------- client/src/context/ZeroWalletProvider.ts | 44 +++++ client/src/context/index.tsx | 6 + client/src/ocean.ts | 6 +- 8 files changed, 247 insertions(+), 97 deletions(-) create mode 100644 client/src/context/MetamaskProvider.ts create mode 100644 client/src/context/ZeroWalletProvider.ts diff --git a/client/package-lock.json b/client/package-lock.json index 8fee2ce..2e30db7 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2986,6 +2986,32 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip39": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.2.tgz", + "integrity": "sha512-J4E1r2N0tUylTKt07ibXvhpT2c5pyAFgvuA5q1H9uDy6dEGpjV8jmymh3MTYJDLCNbIVClSB9FbND49I6N24MQ==", + "requires": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + }, + "dependencies": { + "@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + } + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -6515,6 +6541,11 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "filesize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz", @@ -15531,6 +15562,29 @@ "glob": "^7.1.2" } }, + "truffle-hdwallet-provider": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.5.tgz", + "integrity": "sha512-T9qNm7b6MD0UPWVmmJEhgzW1DdR6mkMDijGBSbdJqYaaBLufoycE+qH3dsV+m1mLTE+ebM5RcJ4gF4oXgDW67w==", + "requires": { + "any-promise": "^1.3.0", + "bindings": "^1.3.1", + "websocket": "^1.0.28" + }, + "dependencies": { + "websocket": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.28.tgz", + "integrity": "sha512-00y/20/80P7H4bCYkzuuvvfDvh+dgtXi5kzDf3UcZwN6boTYaKvsrtZ5lIYm1Gsg48siMErd9M4zjSYfYFHTrA==", + "requires": { + "debug": "^2.2.0", + "nan": "^2.11.0", + "typedarray-to-buffer": "^3.1.5", + "yaeti": "^0.0.6" + } + } + } + }, "ts-pnp": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz", diff --git a/client/package.json b/client/package.json index 98a7d89..22dfcf1 100644 --- a/client/package.json +++ b/client/package.json @@ -16,6 +16,7 @@ "@oceanprotocol/squid": "0.6.2", "@oceanprotocol/typographies": "^0.1.0", "@sindresorhus/slugify": "^0.9.1", + "bip39": "^3.0.2", "axios": "^0.19.0", "classnames": "^2.2.6", "ethereum-blockies": "github:MyEtherWallet/blockies", @@ -38,6 +39,7 @@ "react-popper": "^1.3.3", "react-router-dom": "^5.0.1", "react-transition-group": "^4.1.1", + "truffle-hdwallet-provider": "1.0.5", "web3": "1.0.0-beta.37" }, "devDependencies": { diff --git a/client/src/components/organisms/Header.tsx b/client/src/components/organisms/Header.tsx index 26d5b01..59e0384 100644 --- a/client/src/components/organisms/Header.tsx +++ b/client/src/components/organisms/Header.tsx @@ -33,6 +33,8 @@ export default class Header extends PureComponent { {menu.map(item => ( ))} + + diff --git a/client/src/context/MetamaskProvider.ts b/client/src/context/MetamaskProvider.ts new file mode 100644 index 0000000..c85b6d9 --- /dev/null +++ b/client/src/context/MetamaskProvider.ts @@ -0,0 +1,42 @@ +import Web3 from 'web3' + +export class MetamaskProvider { + web3: Web3 + + constructor() { + // Default + this.web3 = null as any + // Modern dapp browsers + if (window.ethereum) { + this.web3 = new Web3(window.ethereum) + } + // Legacy dapp browsers + else if (window.web3) { + this.web3 = new Web3(window.web3.currentProvider) + } + } + + async isAvaliable() { + return this.web3 !== null + } + + async isLogged() { + if(this.web3 === null) return false + if((await this.web3.eth.getAccounts()).length > 0) { + return true + } + return false + } + + async startLogin() { + try { + await window.ethereum.enable() + } catch (error) { + return false + } + } + + getProvider() { + return this.web3 + } + } diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 60d5c03..0079c96 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -1,10 +1,12 @@ import React, { PureComponent } from 'react' import Web3 from 'web3' -import { Logger, Ocean, Account } from '@oceanprotocol/squid' +import { Ocean, Account } from '@oceanprotocol/squid' import { User } from '.' import { provideOcean, requestFromFaucet, FaucetResponse } from '../ocean' import { nodeUri } from '../config' import MarketProvider from './MarketProvider' +import { MetamaskProvider } from './MetamaskProvider' +import { ZeroWalletProvider } from './ZeroWalletProvider' const POLL_ACCOUNTS = 1000 // every 1s const POLL_NETWORK = POLL_ACCOUNTS * 60 // every 1 min @@ -58,23 +60,57 @@ interface UserProviderState { ocean: Ocean requestFromFaucet(account: string): Promise unlockAccounts(): Promise + loginMetamask(): Promise + loginZeroWallet(): Promise message: string } export default class UserProvider extends PureComponent<{}, UserProviderState> { private unlockAccounts = async () => { try { - await window.ethereum.enable() + window.ethereum.enable() } catch (error) { // User denied account access... return null } } + private loginMetamask = async () => { + const metamaskProvider = new MetamaskProvider() + await metamaskProvider.startLogin() + localStorage.setItem('logType', 'Metamask') + const web3 = metamaskProvider.getProvider() + this.setState( + { + isLogged: true, + web3 + }, + () => { + this.loadOcean() + } + ) + } + + private loginZeroWallet = async () => { + const zerowalletProvider = new ZeroWalletProvider() + await zerowalletProvider.createLogin() + localStorage.setItem('logType', 'ZeroWallet') + const web3 = zerowalletProvider.getProvider() + this.setState( + { + isLogged: true, + web3 + }, + () => { + this.loadOcean() + } + ) + } + public state = { isLogged: false, isLoading: true, - isWeb3: false, + isWeb3: true, isOceanNetwork: false, balance: { eth: 0, @@ -86,6 +122,8 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { ocean: {} as any, requestFromFaucet: () => requestFromFaucet(''), unlockAccounts: () => this.unlockAccounts(), + loginMetamask: () => this.loginMetamask(), + loginZeroWallet: () => this.loginZeroWallet(), message: 'Connecting to Ocean...' } @@ -94,9 +132,6 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { public async componentDidMount() { await this.bootstrap() - - this.initAccountsPoll() - this.initNetworkPoll() } private initAccountsPoll() { @@ -114,105 +149,66 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } } - private getWeb3 = () => { - // Modern dapp browsers - if (window.ethereum) { - window.web3 = new Web3(window.ethereum) - return window.web3 - } - // Legacy dapp browsers - else if (window.web3) { - window.web3 = new Web3(window.web3.currentProvider) - return window.web3 - } - // Non-dapp browsers - else { - return null - } + private loadOcean = async () => { + const { ocean } = await provideOcean(this.state.web3) + this.setState({ ocean, isLoading: false }, () => { + this.initNetworkPoll() + this.initAccountsPoll() + this.fetchNetwork() + this.fetchAccounts() + }) } private bootstrap = async () => { - try { - // - // Start with Web3 detection only - // - this.setState({ message: 'Setting up Web3...' }) - let web3 = await this.getWeb3() - - web3 - ? this.setState({ isWeb3: true }) - : this.setState({ isWeb3: false }) - - // Modern & legacy dapp browsers - if (web3 && this.state.isWeb3) { - // - // Detecting network with window.web3 - // - let isOceanNetwork - - await window.web3.eth.net.getId((err, netId) => { - if (err) return - - const isPacific = netId === 0xcea11 - const isNile = netId === 8995 - const isDuero = netId === 2199 - const isSpree = netId === 8996 - - isOceanNetwork = isPacific || isNile || isDuero || isSpree - - const network = isPacific - ? 'Pacific' - : isNile - ? 'Nile' - : isDuero - ? 'Duero' - : netId.toString() - - if ( - isOceanNetwork !== this.state.isOceanNetwork || - network !== this.state.network - ) { - this.setState({ isOceanNetwork, network }) - } - }) - - if (!isOceanNetwork) { - web3 = this.state.web3 // eslint-disable-line + const logType = localStorage.getItem('logType') + switch (logType) { + case 'Metamask': + const metamaskProvider = new MetamaskProvider() + if ( + (await metamaskProvider.isAvaliable()) && + (await metamaskProvider.isLogged()) + ) { + const web3 = metamaskProvider.getProvider() + this.setState( + { + isLogged: true, + web3 + }, + () => { + this.loadOcean() + } + ) + } else { + this.loadOcean() } - - // - // Provide the Ocean - // - this.setState({ message: 'Connecting to Ocean...' }) - - const { ocean } = await provideOcean(web3) - this.setState({ ocean, message: 'Getting accounts...' }) - - // Get accounts - await this.fetchAccounts() - - this.setState({ isLoading: false, message: '' }) - } - // Non-dapp browsers - else { - this.setState({ message: 'Connecting to Ocean...' }) - const { ocean } = await provideOcean(this.state.web3) - this.setState({ ocean, isLoading: false }) - - this.fetchNetwork() - } - } catch (e) { - // error in bootstrap process - // show error connecting to ocean - Logger.error('web3 error', e.message) - this.setState({ isLoading: false }) + break + case 'ZeroWallet': + const zerowalletProvider = new ZeroWalletProvider() + if (await zerowalletProvider.isLogged()) { + await zerowalletProvider.restoreStoredLogin() + this.setState( + { + isLogged: true, + web3: zerowalletProvider.getProvider() + }, + () => { + this.loadOcean() + } + ) + } else { + this.loadOcean() + } + break + default: + this.loadOcean() + break } } private fetchAccounts = async () => { - const { ocean, isWeb3, isLogged, isOceanNetwork } = this.state + const { ocean, isLogged, isOceanNetwork } = this.state - if (isWeb3) { + if (isLogged) { let accounts // Modern dapp browsers diff --git a/client/src/context/ZeroWalletProvider.ts b/client/src/context/ZeroWalletProvider.ts new file mode 100644 index 0000000..6a6816c --- /dev/null +++ b/client/src/context/ZeroWalletProvider.ts @@ -0,0 +1,44 @@ +import Web3 from 'web3' +import { nodeHost, nodePort, nodeScheme } from '../config' +import bip39 from 'bip39' +const HDWalletProvider = require('truffle-hdwallet-provider') + +export class ZeroWalletProvider { + web3: Web3 + + constructor() { + // Default + this.web3 = null as any + } + + async isLogged() { + if (localStorage.getItem('seedphrase') !== null) { + return true + } + return false + } + + async restoreStoredLogin() { + const mnemonic = localStorage.getItem('seedphrase') as string + localStorage.setItem('seedphrase', mnemonic) + const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); + this.web3 = new Web3(provider) + } + + async createLogin() { + const mnemonic = bip39.generateMnemonic() + localStorage.setItem('seedphrase', mnemonic) + const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); + this.web3 = new Web3(provider) + } + + async restoreLogin(mnemonic: string) { + localStorage.setItem('seedphrase', mnemonic) + const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); + this.web3 = new Web3(provider) + } + + getProvider() { + return this.web3 + } + } diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index b2fc2c6..8a1d156 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -19,6 +19,12 @@ export const User = React.createContext({ unlockAccounts: () => { /* empty */ }, + loginMetamask: () => { + /* empty */ + }, + loginZeroWallet: () => { + /* empty */ + }, message: '' }) diff --git a/client/src/ocean.ts b/client/src/ocean.ts index 9c02691..e77c94a 100644 --- a/client/src/ocean.ts +++ b/client/src/ocean.ts @@ -22,7 +22,11 @@ export async function provideOcean(web3provider: Web3) { verbose } - const ocean: Ocean = await Ocean.getInstance(config) + console.log('accs web3:', (await web3provider.eth.getAccounts())[0]) + + const ocean: any = await Ocean.getInstance(config) + + console.log('accs ocean:', (await ocean.accounts.list())[0].id) return { ocean } } From cce2a7fad3ee81a4c274c910cc096ad154aa3d11 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Tue, 9 Jul 2019 12:22:40 +0200 Subject: [PATCH 02/39] select wallet modal --- client/package-lock.json | 8 +-- client/package.json | 3 +- .../molecules/AccountStatus/Indicator.tsx | 4 +- .../molecules/AccountStatus/Popover.tsx | 10 +--- client/src/components/organisms/Header.tsx | 7 +-- .../organisms/WalletSelector.module.scss | 49 ++++++++++++++++ .../components/organisms/WalletSelector.tsx | 58 +++++++++++++++++++ .../src/components/organisms/Web3message.tsx | 5 +- client/src/context/BurnerWalletProvider.ts | 48 +++++++++++++++ client/src/context/MetamaskProvider.ts | 6 ++ client/src/context/UserProvider.tsx | 53 ++++++----------- client/src/context/index.tsx | 6 +- 12 files changed, 190 insertions(+), 67 deletions(-) create mode 100644 client/src/components/organisms/WalletSelector.module.scss create mode 100644 client/src/components/organisms/WalletSelector.tsx create mode 100644 client/src/context/BurnerWalletProvider.ts diff --git a/client/package-lock.json b/client/package-lock.json index 2e30db7..ea58962 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1684,8 +1684,7 @@ "@types/prop-types": { "version": "15.7.1", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", - "dev": true + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" }, "@types/q": { "version": "1.5.2", @@ -1697,7 +1696,6 @@ "version": "16.8.22", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.22.tgz", "integrity": "sha512-C3O1yVqk4sUXqWyx0wlys76eQfhrQhiDhDlHBrjER76lR2S2Agiid/KpOU9oCqj1dISStscz7xXz1Cg8+sCQeA==", - "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -1744,7 +1742,6 @@ "version": "3.8.2", "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.8.2.tgz", "integrity": "sha512-/Drs+XfHg9M60fy2Q63UUlhECXSNknDu3tnwFnbOhcdDjq03VD3hLCfv3X+BBzRqgu4TOu+TwEwBhgI8qdVAAQ==", - "dev": true, "requires": { "@types/react": "*" } @@ -4886,8 +4883,7 @@ "csstype": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", - "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==", - "dev": true + "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" }, "currently-unhandled": { "version": "0.4.1", diff --git a/client/package.json b/client/package.json index 22dfcf1..cabdcc7 100644 --- a/client/package.json +++ b/client/package.json @@ -16,8 +16,9 @@ "@oceanprotocol/squid": "0.6.2", "@oceanprotocol/typographies": "^0.1.0", "@sindresorhus/slugify": "^0.9.1", - "bip39": "^3.0.2", + "@types/react-modal": "^3.8.2", "axios": "^0.19.0", + "bip39": "^3.0.2", "classnames": "^2.2.6", "ethereum-blockies": "github:MyEtherWallet/blockies", "filesize": "^4.1.2", diff --git a/client/src/components/molecules/AccountStatus/Indicator.tsx b/client/src/components/molecules/AccountStatus/Indicator.tsx index 866922e..ee81513 100644 --- a/client/src/components/molecules/AccountStatus/Indicator.tsx +++ b/client/src/components/molecules/AccountStatus/Indicator.tsx @@ -20,9 +20,7 @@ const Indicator = ({ > {states => - !states.isWeb3 ? ( - - ) : !states.isLogged || !states.isOceanNetwork ? ( + !states.isLogged || !states.isOceanNetwork ? ( ) : states.isLogged ? ( diff --git a/client/src/components/molecules/AccountStatus/Popover.tsx b/client/src/components/molecules/AccountStatus/Popover.tsx index 49dcd96..f16d327 100644 --- a/client/src/components/molecules/AccountStatus/Popover.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.tsx @@ -12,7 +12,6 @@ export default class Popover extends PureComponent<{ account, balance, network, - isWeb3, isOceanNetwork } = this.context @@ -22,12 +21,7 @@ export default class Popover extends PureComponent<{ ref={this.props.forwardedRef} style={this.props.style} > - {!isWeb3 ? ( -
- No Web3 detected. Use a browser with MetaMask installed - to publish assets. -
- ) : ( + { <>
@@ -58,7 +52,7 @@ export default class Popover extends PureComponent<{ : network && `Connected to ${network} network`}
- )} + } ) } diff --git a/client/src/components/organisms/Header.tsx b/client/src/components/organisms/Header.tsx index 59e0384..4fc6833 100644 --- a/client/src/components/organisms/Header.tsx +++ b/client/src/components/organisms/Header.tsx @@ -1,8 +1,8 @@ import React, { PureComponent } from 'react' import { NavLink } from 'react-router-dom' import { ReactComponent as Logo } from '@oceanprotocol/art/logo/logo.svg' -import { User } from '../../context' import AccountStatus from '../molecules/AccountStatus' +import WalletSelector from './WalletSelector' import styles from './Header.module.scss' import menu from '../../data/menu.json' @@ -33,8 +33,7 @@ export default class Header extends PureComponent { {menu.map(item => ( ))} - - + @@ -42,5 +41,3 @@ export default class Header extends PureComponent { ) } } - -Header.contextType = User diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss new file mode 100644 index 0000000..d79ea81 --- /dev/null +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -0,0 +1,49 @@ +@import '../../styles/variables'; + +.actions { + text-align: right; + margin-top: $spacer; +} + +.openLink { + margin: 0; + font-size: $font-size-small; +} + +.info { + background: $brand-white; + padding: $spacer; + border: 1px solid $brand-grey-lighter; + border-radius: $border-radius; + + h3 { + font-size: $font-size-base; + margin-top: 0; + margin-bottom: $spacer / 8; + } + + p { + border-bottom: 1px solid $brand-grey-lighter; + padding-bottom: $spacer / 2; + } + + code { + padding: 0; + color: $brand-grey-light; + } +} + +.error { + background: $red; + padding: $spacer / 2; + text-align: center; + color: $brand-white; + border-radius: $border-radius; + font-weight: $font-weight-bold; + font-size: $font-size-small; +} + +.success { + composes: error; + background: $green; +} diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx new file mode 100644 index 0000000..dfa039b --- /dev/null +++ b/client/src/components/organisms/WalletSelector.tsx @@ -0,0 +1,58 @@ +import React, { PureComponent } from 'react' +import Modal from '../atoms/Modal' +import { User } from '../../context' +import styles from './WalletSelector.module.scss' +import Button from '../atoms/Button' + +export default class WalletSelector extends PureComponent< + {}, + { + isModalOpen: boolean + } +> { + public state = { + isModalOpen: false + } + + private toggleModal = () => { + this.setState({ isModalOpen: !this.state.isModalOpen }) + } + + private loginBurnerWallet = () => { + this.context.loginBurnerWallet() + this.toggleModal() + } + + private loginMetamask = () => { + this.context.loginMetamask() + this.toggleModal() + } + + + public render() { + return ( +
+ + +
+ + +
+
+
+ ) + } +} + +WalletSelector.contextType = User diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index e726ae8..db59316 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -31,16 +31,13 @@ export default class Web3message extends PureComponent { public render() { const { - isWeb3, isOceanNetwork, isLogged, account, unlockAccounts } = this.context - return !isWeb3 - ? this.message(content.noweb3) - : !isOceanNetwork + return !isOceanNetwork ? this.message(content.wrongNetwork) : !isLogged ? this.message(content.noAccount, '', unlockAccounts) diff --git a/client/src/context/BurnerWalletProvider.ts b/client/src/context/BurnerWalletProvider.ts new file mode 100644 index 0000000..a1b0854 --- /dev/null +++ b/client/src/context/BurnerWalletProvider.ts @@ -0,0 +1,48 @@ +import Web3 from 'web3' +import { nodeUri } from '../config' +const bip39 = require('bip39') +const HDWalletProvider = require('truffle-hdwallet-provider') + +export class BurnerWalletProvider { + web3: Web3 + + constructor() { + // Default + this.web3 = null as any + } + + async isAvaliable() { + return true + } + + async isLogged() { + if (localStorage.getItem('seedphrase') !== null) { + return true + } + return false + } + + async startLogin() { + if (await this.isLogged()) { + const mnemonic = localStorage.getItem('seedphrase') as string + localStorage.setItem('logType', 'BurnerWallet') + const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1); + this.web3 = new Web3(provider) + } else { + const mnemonic = bip39.generateMnemonic() + localStorage.setItem('seedphrase', mnemonic) + localStorage.setItem('logType', 'BurnerWallet') + const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1); + this.web3 = new Web3(provider) + } + } + + async logout() { + localStorage.removeItem('seedphrase') + localStorage.removeItem('logType') + } + + getProvider() { + return this.web3 + } + } diff --git a/client/src/context/MetamaskProvider.ts b/client/src/context/MetamaskProvider.ts index c85b6d9..d5ff6d3 100644 --- a/client/src/context/MetamaskProvider.ts +++ b/client/src/context/MetamaskProvider.ts @@ -31,11 +31,17 @@ export class MetamaskProvider { async startLogin() { try { await window.ethereum.enable() + localStorage.setItem('logType', 'Metamask') } catch (error) { return false } } + async logout() { + localStorage.removeItem('logType') + // reload page? + } + getProvider() { return this.web3 } diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 0079c96..b55ea88 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -6,7 +6,7 @@ import { provideOcean, requestFromFaucet, FaucetResponse } from '../ocean' import { nodeUri } from '../config' import MarketProvider from './MarketProvider' import { MetamaskProvider } from './MetamaskProvider' -import { ZeroWalletProvider } from './ZeroWalletProvider' +import { BurnerWalletProvider } from './BurnerWalletProvider' const POLL_ACCOUNTS = 1000 // every 1s const POLL_NETWORK = POLL_ACCOUNTS * 60 // every 1 min @@ -48,7 +48,6 @@ declare global { interface UserProviderState { isLogged: boolean isLoading: boolean - isWeb3: boolean isOceanNetwork: boolean account: string balance: { @@ -59,26 +58,15 @@ interface UserProviderState { web3: Web3 ocean: Ocean requestFromFaucet(account: string): Promise - unlockAccounts(): Promise loginMetamask(): Promise - loginZeroWallet(): Promise + loginBurnerWallet(): Promise message: string } export default class UserProvider extends PureComponent<{}, UserProviderState> { - private unlockAccounts = async () => { - try { - window.ethereum.enable() - } catch (error) { - // User denied account access... - return null - } - } - private loginMetamask = async () => { const metamaskProvider = new MetamaskProvider() await metamaskProvider.startLogin() - localStorage.setItem('logType', 'Metamask') const web3 = metamaskProvider.getProvider() this.setState( { @@ -91,11 +79,10 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { ) } - private loginZeroWallet = async () => { - const zerowalletProvider = new ZeroWalletProvider() - await zerowalletProvider.createLogin() - localStorage.setItem('logType', 'ZeroWallet') - const web3 = zerowalletProvider.getProvider() + private loginBurnerWallet = async () => { + const burnerwalletProvider = new BurnerWalletProvider() + await burnerwalletProvider.startLogin() + const web3 = burnerwalletProvider.getProvider() this.setState( { isLogged: true, @@ -110,7 +97,6 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { public state = { isLogged: false, isLoading: true, - isWeb3: true, isOceanNetwork: false, balance: { eth: 0, @@ -121,9 +107,8 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { account: '', ocean: {} as any, requestFromFaucet: () => requestFromFaucet(''), - unlockAccounts: () => this.unlockAccounts(), loginMetamask: () => this.loginMetamask(), - loginZeroWallet: () => this.loginZeroWallet(), + loginBurnerWallet: () => this.loginBurnerWallet(), message: 'Connecting to Ocean...' } @@ -182,10 +167,10 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { this.loadOcean() } break - case 'ZeroWallet': - const zerowalletProvider = new ZeroWalletProvider() + case 'BurnerWallet': + const zerowalletProvider = new BurnerWalletProvider() if (await zerowalletProvider.isLogged()) { - await zerowalletProvider.restoreStoredLogin() + await zerowalletProvider.startLogin() this.setState( { isLogged: true, @@ -250,19 +235,17 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } private fetchNetwork = async () => { - const { ocean, isWeb3 } = this.state + const { ocean } = this.state - if (isWeb3) { - const network = await ocean.keeper.getNetworkName() - const isPacific = network === 'Pacific' - const isNile = network === 'Nile' - const isDuero = network === 'Duero' - const isSpree = network === 'Spree' - const isOceanNetwork = isPacific || isNile || isDuero || isSpree + const network = await ocean.keeper.getNetworkName() + const isPacific = network === 'Pacific' + const isNile = network === 'Nile' + const isDuero = network === 'Duero' + const isSpree = network === 'Spree' + const isOceanNetwork = isPacific || isNile || isDuero || isSpree - network !== this.state.network && + network !== this.state.network && this.setState({ isOceanNetwork, network }) - } } public render() { diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index 8a1d156..1ca6b5b 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -3,7 +3,6 @@ import React from 'react' export const User = React.createContext({ isLogged: false, isLoading: false, - isWeb3: false, isOceanNetwork: false, account: '', web3: {}, @@ -16,13 +15,10 @@ export const User = React.createContext({ requestFromFaucet: () => { /* empty */ }, - unlockAccounts: () => { - /* empty */ - }, loginMetamask: () => { /* empty */ }, - loginZeroWallet: () => { + loginBurnerWallet: () => { /* empty */ }, message: '' From 85304c2d090ef0427771101e19c0a77343adaec1 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Tue, 9 Jul 2019 16:02:23 +0200 Subject: [PATCH 03/39] burner as default, web3 message --- .../src/components/organisms/Web3message.tsx | 15 ++++++-------- client/src/context/UserProvider.tsx | 20 ++++++++++++------- client/src/data/web3message.json | 4 ++-- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index db59316..6d0ff1c 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -1,16 +1,15 @@ import React, { PureComponent } from 'react' import Account from '../atoms/Account' -import Button from '../atoms/Button' import AccountStatus from '../molecules/AccountStatus' import styles from './Web3message.module.scss' import { User } from '../../context' +import WalletSelector from './WalletSelector' import content from '../../data/web3message.json' export default class Web3message extends PureComponent { private message = ( message: string, account?: string, - unlockAccounts?: () => any ) => (
{account ? ( @@ -19,11 +18,7 @@ export default class Web3message extends PureComponent {
{' '} - {unlockAccounts && ( - - )} +
)}
@@ -33,14 +28,16 @@ export default class Web3message extends PureComponent { const { isOceanNetwork, isLogged, + isBurner, account, - unlockAccounts } = this.context return !isOceanNetwork ? this.message(content.wrongNetwork) : !isLogged - ? this.message(content.noAccount, '', unlockAccounts) + ? this.message(content.noAccount) + : isBurner + ? this.message(content.burnerWallet) : isLogged ? this.message(content.hasAccount, account) : null diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index b55ea88..f92fd01 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -10,6 +10,7 @@ import { BurnerWalletProvider } from './BurnerWalletProvider' const POLL_ACCOUNTS = 1000 // every 1s const POLL_NETWORK = POLL_ACCOUNTS * 60 // every 1 min +const DEFAULT_WEB3 = new Web3(new Web3.providers.HttpProvider(nodeUri)) // default web3 // taken from // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/web3/providers.d.ts @@ -47,6 +48,7 @@ declare global { interface UserProviderState { isLogged: boolean + isBurner: boolean isLoading: boolean isOceanNetwork: boolean account: string @@ -71,6 +73,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { this.setState( { isLogged: true, + isBurner: false, web3 }, () => { @@ -86,6 +89,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { this.setState( { isLogged: true, + isBurner: true, web3 }, () => { @@ -96,6 +100,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { public state = { isLogged: false, + isBurner: false, isLoading: true, isOceanNetwork: false, balance: { @@ -103,7 +108,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { ocn: 0 }, network: '', - web3: new Web3(new Web3.providers.HttpProvider(nodeUri)), + web3: DEFAULT_WEB3, account: '', ocean: {} as any, requestFromFaucet: () => requestFromFaucet(''), @@ -168,24 +173,25 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } break case 'BurnerWallet': - const zerowalletProvider = new BurnerWalletProvider() - if (await zerowalletProvider.isLogged()) { - await zerowalletProvider.startLogin() + const burnerWalletProvider = new BurnerWalletProvider() + if (await burnerWalletProvider.isLogged()) { + await burnerWalletProvider.startLogin() this.setState( { isLogged: true, - web3: zerowalletProvider.getProvider() + isBurner: true, + web3: burnerWalletProvider.getProvider() }, () => { this.loadOcean() } ) } else { - this.loadOcean() + this.loginBurnerWallet() } break default: - this.loadOcean() + this.loginBurnerWallet() break } } diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index e651770..59c12f0 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -1,6 +1,6 @@ { - "noweb3": "Not a Web3 Browser. For publishing and downloading an asset you need to setup MetaMask or use any other Web3-capable plugin or browser.", - "noAccount": "No accounts detected. For publishing and downloading an asset you need to unlock your Web3 account.", + "noAccount": "No wallet selected. For publishing and downloading an asset you need to use one.", + "burnerWallet": "You are using temporary burner wallet. Improve your security by migrating to Metamask", "hasAccount": "", "wrongNetwork": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com" } From 9e7df28b8990d64a1722a46c807638abdae1897a Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Tue, 9 Jul 2019 16:23:26 +0200 Subject: [PATCH 04/39] survive metamask failure to login --- client/src/context/UserProvider.tsx | 32 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index f92fd01..a0df690 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -139,6 +139,19 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } } + private loadDefaultWeb3 = async () => { + this.setState( + { + isLogged: false, + isBurner: false, + web3: DEFAULT_WEB3 + }, + () => { + this.loadOcean() + } + ) + } + private loadOcean = async () => { const { ocean } = await provideOcean(this.state.web3) this.setState({ ocean, isLoading: false }, () => { @@ -169,26 +182,11 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } ) } else { - this.loadOcean() + this.loadDefaultWeb3() } break case 'BurnerWallet': - const burnerWalletProvider = new BurnerWalletProvider() - if (await burnerWalletProvider.isLogged()) { - await burnerWalletProvider.startLogin() - this.setState( - { - isLogged: true, - isBurner: true, - web3: burnerWalletProvider.getProvider() - }, - () => { - this.loadOcean() - } - ) - } else { - this.loginBurnerWallet() - } + this.loginBurnerWallet() break default: this.loginBurnerWallet() From ad454b9f8ab8ebe242b38882fa58d89b50062d40 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 9 Jul 2019 23:13:14 +0200 Subject: [PATCH 05/39] rebase fixes --- client/package-lock.json | 8 +++- client/package.json | 1 - .../truffle-hdwallet-provider'/index.d.ts | 1 + .../molecules/AccountStatus/Popover.tsx | 7 +-- client/src/components/organisms/Header.tsx | 2 +- .../components/organisms/WalletSelector.tsx | 9 ++-- .../src/components/organisms/Web3message.tsx | 14 ++---- client/src/context/BurnerWalletProvider.ts | 24 +++++----- client/src/context/MetamaskProvider.ts | 20 ++++----- client/src/context/UserProvider.tsx | 7 +-- client/src/context/ZeroWalletProvider.ts | 44 ------------------- client/src/ocean.ts | 4 +- 12 files changed, 46 insertions(+), 95 deletions(-) create mode 100644 client/src/@types/truffle-hdwallet-provider'/index.d.ts delete mode 100644 client/src/context/ZeroWalletProvider.ts diff --git a/client/package-lock.json b/client/package-lock.json index ea58962..2e30db7 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1684,7 +1684,8 @@ "@types/prop-types": { "version": "15.7.1", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==" + "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", + "dev": true }, "@types/q": { "version": "1.5.2", @@ -1696,6 +1697,7 @@ "version": "16.8.22", "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.22.tgz", "integrity": "sha512-C3O1yVqk4sUXqWyx0wlys76eQfhrQhiDhDlHBrjER76lR2S2Agiid/KpOU9oCqj1dISStscz7xXz1Cg8+sCQeA==", + "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -1742,6 +1744,7 @@ "version": "3.8.2", "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.8.2.tgz", "integrity": "sha512-/Drs+XfHg9M60fy2Q63UUlhECXSNknDu3tnwFnbOhcdDjq03VD3hLCfv3X+BBzRqgu4TOu+TwEwBhgI8qdVAAQ==", + "dev": true, "requires": { "@types/react": "*" } @@ -4883,7 +4886,8 @@ "csstype": { "version": "2.6.5", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.5.tgz", - "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==" + "integrity": "sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA==", + "dev": true }, "currently-unhandled": { "version": "0.4.1", diff --git a/client/package.json b/client/package.json index cabdcc7..78f25c6 100644 --- a/client/package.json +++ b/client/package.json @@ -16,7 +16,6 @@ "@oceanprotocol/squid": "0.6.2", "@oceanprotocol/typographies": "^0.1.0", "@sindresorhus/slugify": "^0.9.1", - "@types/react-modal": "^3.8.2", "axios": "^0.19.0", "bip39": "^3.0.2", "classnames": "^2.2.6", diff --git a/client/src/@types/truffle-hdwallet-provider'/index.d.ts b/client/src/@types/truffle-hdwallet-provider'/index.d.ts new file mode 100644 index 0000000..1386119 --- /dev/null +++ b/client/src/@types/truffle-hdwallet-provider'/index.d.ts @@ -0,0 +1 @@ +declare module 'truffle-hdwallet-provider' diff --git a/client/src/components/molecules/AccountStatus/Popover.tsx b/client/src/components/molecules/AccountStatus/Popover.tsx index f16d327..b7cdb81 100644 --- a/client/src/components/molecules/AccountStatus/Popover.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.tsx @@ -8,12 +8,7 @@ export default class Popover extends PureComponent<{ style: React.CSSProperties }> { public render() { - const { - account, - balance, - network, - isOceanNetwork - } = this.context + const { account, balance, network, isOceanNetwork } = this.context return (
( ))} - +
diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index dfa039b..b84dea0 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -28,7 +28,6 @@ export default class WalletSelector extends PureComponent< this.toggleModal() } - public render() { return (
@@ -46,8 +45,12 @@ export default class WalletSelector extends PureComponent< toggleModal={this.toggleModal} >
- - + +
diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 6d0ff1c..67421a2 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -7,10 +7,7 @@ import WalletSelector from './WalletSelector' import content from '../../data/web3message.json' export default class Web3message extends PureComponent { - private message = ( - message: string, - account?: string, - ) => ( + private message = (message: string, account?: string) => (
{account ? ( @@ -18,19 +15,14 @@ export default class Web3message extends PureComponent {
{' '} - +
)}
) public render() { - const { - isOceanNetwork, - isLogged, - isBurner, - account, - } = this.context + const { isOceanNetwork, isLogged, isBurner, account } = this.context return !isOceanNetwork ? this.message(content.wrongNetwork) diff --git a/client/src/context/BurnerWalletProvider.ts b/client/src/context/BurnerWalletProvider.ts index a1b0854..0859573 100644 --- a/client/src/context/BurnerWalletProvider.ts +++ b/client/src/context/BurnerWalletProvider.ts @@ -1,48 +1,48 @@ import Web3 from 'web3' import { nodeUri } from '../config' -const bip39 = require('bip39') -const HDWalletProvider = require('truffle-hdwallet-provider') +import bip39 from 'bip39' +import HDWalletProvider from 'truffle-hdwallet-provider' export class BurnerWalletProvider { - web3: Web3 + private web3: Web3 - constructor() { + public constructor() { // Default this.web3 = null as any } - async isAvaliable() { + public async isAvailable() { return true } - async isLogged() { + public async isLogged() { if (localStorage.getItem('seedphrase') !== null) { return true } return false } - async startLogin() { + public async startLogin() { if (await this.isLogged()) { const mnemonic = localStorage.getItem('seedphrase') as string localStorage.setItem('logType', 'BurnerWallet') - const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1); + const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1) this.web3 = new Web3(provider) } else { const mnemonic = bip39.generateMnemonic() localStorage.setItem('seedphrase', mnemonic) localStorage.setItem('logType', 'BurnerWallet') - const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1); + const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1) this.web3 = new Web3(provider) } } - async logout() { + public async logout() { localStorage.removeItem('seedphrase') localStorage.removeItem('logType') } - getProvider() { + public getProvider() { return this.web3 } - } +} diff --git a/client/src/context/MetamaskProvider.ts b/client/src/context/MetamaskProvider.ts index d5ff6d3..a290c5d 100644 --- a/client/src/context/MetamaskProvider.ts +++ b/client/src/context/MetamaskProvider.ts @@ -1,9 +1,9 @@ import Web3 from 'web3' export class MetamaskProvider { - web3: Web3 + private web3: Web3 - constructor() { + public constructor() { // Default this.web3 = null as any // Modern dapp browsers @@ -16,19 +16,19 @@ export class MetamaskProvider { } } - async isAvaliable() { + public async isAvailable() { return this.web3 !== null } - async isLogged() { - if(this.web3 === null) return false - if((await this.web3.eth.getAccounts()).length > 0) { + public async isLogged() { + if (this.web3 === null) return false + if ((await this.web3.eth.getAccounts()).length > 0) { return true } return false } - async startLogin() { + public async startLogin() { try { await window.ethereum.enable() localStorage.setItem('logType', 'Metamask') @@ -37,12 +37,12 @@ export class MetamaskProvider { } } - async logout() { + public async logout() { localStorage.removeItem('logType') // reload page? } - getProvider() { + public getProvider() { return this.web3 } - } +} diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index a0df690..062bdb4 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -164,11 +164,12 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { private bootstrap = async () => { const logType = localStorage.getItem('logType') + const metamaskProvider = new MetamaskProvider() + switch (logType) { case 'Metamask': - const metamaskProvider = new MetamaskProvider() if ( - (await metamaskProvider.isAvaliable()) && + (await metamaskProvider.isAvailable()) && (await metamaskProvider.isLogged()) ) { const web3 = metamaskProvider.getProvider() @@ -249,7 +250,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { const isOceanNetwork = isPacific || isNile || isDuero || isSpree network !== this.state.network && - this.setState({ isOceanNetwork, network }) + this.setState({ isOceanNetwork, network }) } public render() { diff --git a/client/src/context/ZeroWalletProvider.ts b/client/src/context/ZeroWalletProvider.ts deleted file mode 100644 index 6a6816c..0000000 --- a/client/src/context/ZeroWalletProvider.ts +++ /dev/null @@ -1,44 +0,0 @@ -import Web3 from 'web3' -import { nodeHost, nodePort, nodeScheme } from '../config' -import bip39 from 'bip39' -const HDWalletProvider = require('truffle-hdwallet-provider') - -export class ZeroWalletProvider { - web3: Web3 - - constructor() { - // Default - this.web3 = null as any - } - - async isLogged() { - if (localStorage.getItem('seedphrase') !== null) { - return true - } - return false - } - - async restoreStoredLogin() { - const mnemonic = localStorage.getItem('seedphrase') as string - localStorage.setItem('seedphrase', mnemonic) - const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); - this.web3 = new Web3(provider) - } - - async createLogin() { - const mnemonic = bip39.generateMnemonic() - localStorage.setItem('seedphrase', mnemonic) - const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); - this.web3 = new Web3(provider) - } - - async restoreLogin(mnemonic: string) { - localStorage.setItem('seedphrase', mnemonic) - const provider = new HDWalletProvider(mnemonic, `${nodeScheme}://${nodeHost}:${nodePort}`, 0, 1); - this.web3 = new Web3(provider) - } - - getProvider() { - return this.web3 - } - } diff --git a/client/src/ocean.ts b/client/src/ocean.ts index e77c94a..8f611da 100644 --- a/client/src/ocean.ts +++ b/client/src/ocean.ts @@ -22,11 +22,11 @@ export async function provideOcean(web3provider: Web3) { verbose } - console.log('accs web3:', (await web3provider.eth.getAccounts())[0]) + Logger.log('accs web3:', (await web3provider.eth.getAccounts())[0]) const ocean: any = await Ocean.getInstance(config) - console.log('accs ocean:', (await ocean.accounts.list())[0].id) + Logger.log('accs ocean:', (await ocean.accounts.list())[0].id) return { ocean } } From 8d23868a9d0009134c2f0db0caf7ff258ba9221b Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 01:31:51 +0200 Subject: [PATCH 06/39] adapt messaging for wallet types, output wallet type --- .../src/components/atoms/Account.module.scss | 8 +++ client/src/components/atoms/Account.tsx | 11 +++- .../AccountStatus/Popover.module.scss | 4 ++ .../molecules/AccountStatus/Popover.tsx | 14 +++-- .../VersionNumbers/index.module.scss | 5 +- .../molecules/VersionNumbers/index.tsx | 6 +- client/src/components/organisms/Header.tsx | 2 - .../organisms/WalletSelector.module.scss | 8 +-- .../components/organisms/WalletSelector.tsx | 13 ++--- .../organisms/Web3message.module.scss | 10 ++-- .../src/components/organisms/Web3message.tsx | 58 ++++++++++--------- client/src/context/BurnerWalletProvider.ts | 2 +- client/src/context/UserProvider.tsx | 7 +++ client/src/data/web3message.json | 4 +- client/src/routes/About.tsx | 6 ++ client/src/styles/global.scss | 5 ++ 16 files changed, 103 insertions(+), 60 deletions(-) diff --git a/client/src/components/atoms/Account.module.scss b/client/src/components/atoms/Account.module.scss index f658d5d..3bff029 100644 --- a/client/src/components/atoms/Account.module.scss +++ b/client/src/components/atoms/Account.module.scss @@ -2,10 +2,12 @@ .account { display: flex; + flex-wrap: wrap; align-items: center; text-align: left; > div { + flex: 0 0 80%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; @@ -14,6 +16,12 @@ } } +.accountType { + width: 100%; + margin-left: calc(1.5rem + #{$spacer / 3}); + font-size: $font-size-mini; +} + .blockies { width: 1.5rem; height: 1.5rem; diff --git a/client/src/components/atoms/Account.tsx b/client/src/components/atoms/Account.tsx index 47006d6..e83414f 100644 --- a/client/src/components/atoms/Account.tsx +++ b/client/src/components/atoms/Account.tsx @@ -3,13 +3,22 @@ import Dotdotdot from 'react-dotdotdot' import { toDataUrl } from 'ethereum-blockies' import styles from './Account.module.scss' -const Account = ({ account }: { account: string }) => { +const Account = ({ + account, + isBurner +}: { + account: string + isBurner: boolean +}) => { const blockies = account && toDataUrl(account) return account && blockies ? (
Blockies {account} + {isBurner && ( + Burner Wallet + )}
) : ( No account selected diff --git a/client/src/components/molecules/AccountStatus/Popover.module.scss b/client/src/components/molecules/AccountStatus/Popover.module.scss index 5972204..7abcdce 100644 --- a/client/src/components/molecules/AccountStatus/Popover.module.scss +++ b/client/src/components/molecules/AccountStatus/Popover.module.scss @@ -50,6 +50,10 @@ $popoverWidth: 18rem; margin-left: $spacer / 2; white-space: nowrap; + strong { + color: $brand-grey-lighter; + } + &:first-child { margin-left: 0; } diff --git a/client/src/components/molecules/AccountStatus/Popover.tsx b/client/src/components/molecules/AccountStatus/Popover.tsx index b7cdb81..d5590f0 100644 --- a/client/src/components/molecules/AccountStatus/Popover.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.tsx @@ -4,11 +4,17 @@ import { User } from '../../../context' import styles from './Popover.module.scss' export default class Popover extends PureComponent<{ - forwardedRef: (ref: HTMLElement | null) => void - style: React.CSSProperties + forwardedRef?: (ref: HTMLElement | null) => void + style?: React.CSSProperties }> { public render() { - const { account, balance, network, isOceanNetwork } = this.context + const { + account, + balance, + network, + isOceanNetwork, + isBurner + } = this.context return (
- +
{account && balance && ( diff --git a/client/src/components/molecules/VersionNumbers/index.module.scss b/client/src/components/molecules/VersionNumbers/index.module.scss index ec09158..f242088 100644 --- a/client/src/components/molecules/VersionNumbers/index.module.scss +++ b/client/src/components/molecules/VersionNumbers/index.module.scss @@ -1,12 +1,9 @@ @import '../../../styles/variables'; -.versions { - margin-top: $spacer * 2; -} - .versionsTitle { font-size: $font-size-large; margin-bottom: $spacer / 2; + margin-top: $spacer * 2; } .versionsMinimal { diff --git a/client/src/components/molecules/VersionNumbers/index.tsx b/client/src/components/molecules/VersionNumbers/index.tsx index b446619..aadf29c 100644 --- a/client/src/components/molecules/VersionNumbers/index.tsx +++ b/client/src/components/molecules/VersionNumbers/index.tsx @@ -149,13 +149,13 @@ export default class VersionNumbers extends PureComponent< return minimal ? ( ) : ( -
-

+ <> +

Ocean Components Status

-
+ ) } } diff --git a/client/src/components/organisms/Header.tsx b/client/src/components/organisms/Header.tsx index b4fa5e1..b5d43fc 100644 --- a/client/src/components/organisms/Header.tsx +++ b/client/src/components/organisms/Header.tsx @@ -2,7 +2,6 @@ import React, { PureComponent } from 'react' import { NavLink } from 'react-router-dom' import { ReactComponent as Logo } from '@oceanprotocol/art/logo/logo.svg' import AccountStatus from '../molecules/AccountStatus' -import WalletSelector from './WalletSelector' import styles from './Header.module.scss' import menu from '../../data/menu.json' @@ -33,7 +32,6 @@ export default class Header extends PureComponent { {menu.map(item => ( ))} -
diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss index d79ea81..855649f 100644 --- a/client/src/components/organisms/WalletSelector.module.scss +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -1,13 +1,9 @@ @import '../../styles/variables'; -.actions { - text-align: right; - margin-top: $spacer; -} - .openLink { margin: 0; - font-size: $font-size-small; + margin-top: $spacer / 2; + margin-left: $spacer; } .info { diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index b84dea0..1fa251a 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -6,10 +6,10 @@ import Button from '../atoms/Button' export default class WalletSelector extends PureComponent< {}, - { - isModalOpen: boolean - } + { isModalOpen: boolean } > { + public static contextType = User + public state = { isModalOpen: false } @@ -25,12 +25,13 @@ export default class WalletSelector extends PureComponent< private loginMetamask = () => { this.context.loginMetamask() + this.context.logoutBurnerWallet() this.toggleModal() } public render() { return ( -
+ <>
- + ) } } - -WalletSelector.contextType = User diff --git a/client/src/components/organisms/Web3message.module.scss b/client/src/components/organisms/Web3message.module.scss index 5a86272..4988335 100644 --- a/client/src/components/organisms/Web3message.module.scss +++ b/client/src/components/organisms/Web3message.module.scss @@ -11,12 +11,14 @@ text-align: left; } -.warnings { - padding-left: $spacer; +.text { + margin-left: $spacer; + display: inline-block; } .status { - margin-left: -($spacer); - margin-right: $spacer / 2; + position: absolute; + left: 0; + top: $spacer / 1.5; padding: 0; } diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 67421a2..8fce377 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -7,33 +7,39 @@ import WalletSelector from './WalletSelector' import content from '../../data/web3message.json' export default class Web3message extends PureComponent { - private message = (message: string, account?: string) => ( -
- {account ? ( - - ) : ( -
- - {' '} - -
- )} -
- ) + public static contextType = User + + private message = () => { + const { isOceanNetwork, isLogged, isBurner } = this.context + + return !isOceanNetwork && !isBurner + ? content.wrongNetwork + : !isLogged + ? content.noAccount + : isBurner + ? content.hasBurnerWallet + : isLogged + ? content.hasMetaMaskWallet + : '' + } public render() { - const { isOceanNetwork, isLogged, isBurner, account } = this.context - - return !isOceanNetwork - ? this.message(content.wrongNetwork) - : !isLogged - ? this.message(content.noAccount) - : isBurner - ? this.message(content.burnerWallet) - : isLogged - ? this.message(content.hasAccount, account) - : null + return ( +
+ {this.context.account ? ( + + ) : ( + + )} + {' '} + +
+ ) } } - -Web3message.contextType = User diff --git a/client/src/context/BurnerWalletProvider.ts b/client/src/context/BurnerWalletProvider.ts index 0859573..f1f0037 100644 --- a/client/src/context/BurnerWalletProvider.ts +++ b/client/src/context/BurnerWalletProvider.ts @@ -1,7 +1,7 @@ import Web3 from 'web3' import { nodeUri } from '../config' -import bip39 from 'bip39' import HDWalletProvider from 'truffle-hdwallet-provider' +const bip39 = require('bip39') // eslint-disable-line @typescript-eslint/no-var-requires export class BurnerWalletProvider { private web3: Web3 diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 062bdb4..d66d84d 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -62,6 +62,7 @@ interface UserProviderState { requestFromFaucet(account: string): Promise loginMetamask(): Promise loginBurnerWallet(): Promise + logoutBurnerWallet(): Promise message: string } @@ -98,6 +99,11 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { ) } + private logoutBurnerWallet = async () => { + const burnerwalletProvider = new BurnerWalletProvider() + await burnerwalletProvider.logout() + } + public state = { isLogged: false, isBurner: false, @@ -114,6 +120,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { requestFromFaucet: () => requestFromFaucet(''), loginMetamask: () => this.loginMetamask(), loginBurnerWallet: () => this.loginBurnerWallet(), + logoutBurnerWallet: () => this.logoutBurnerWallet(), message: 'Connecting to Ocean...' } diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index 59c12f0..edbb663 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -1,6 +1,6 @@ { "noAccount": "No wallet selected. For publishing and downloading an asset you need to use one.", - "burnerWallet": "You are using temporary burner wallet. Improve your security by migrating to Metamask", - "hasAccount": "", + "hasBurnerWallet": "

We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side. This wallet will persist in your browser across sessions, but not across different browsers or devices.

To personalize your experience and improve your security, migrate to MetaMask.", + "hasMetaMaskWallet": "Connected with MetaMask.", "wrongNetwork": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com" } diff --git a/client/src/routes/About.tsx b/client/src/routes/About.tsx index c6ae988..799e617 100644 --- a/client/src/routes/About.tsx +++ b/client/src/routes/About.tsx @@ -2,6 +2,8 @@ import React, { Component } from 'react' import Route from '../components/templates/Route' import Content from '../components/atoms/Content' import VersionNumbers from '../components/molecules/VersionNumbers' +import Web3message from '../components/organisms/Web3message' +import stylesVersionNumbers from '../components/molecules/VersionNumbers/index.module.scss' class About extends Component { public render() { @@ -37,6 +39,10 @@ class About extends Component { +

+ Your Web3 Account Status +

+
diff --git a/client/src/styles/global.scss b/client/src/styles/global.scss index 7d6e100..f841d04 100644 --- a/client/src/styles/global.scss +++ b/client/src/styles/global.scss @@ -140,6 +140,11 @@ em, font-style: italic; } +small { + font-size: $font-size-small; + display: inline-block; +} + abbr[title], dfn { text-transform: none; From 7cc2de7d8bb47b92074c6479e81c330b9e3ba4db Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Wed, 10 Jul 2019 10:16:14 +0200 Subject: [PATCH 07/39] make web3 working again --- client/src/ocean.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/client/src/ocean.ts b/client/src/ocean.ts index 8f611da..d0511b2 100644 --- a/client/src/ocean.ts +++ b/client/src/ocean.ts @@ -11,9 +11,9 @@ import { verbose } from './config' -export async function provideOcean(web3provider: Web3) { +export async function provideOcean(web3Provider: Web3) { const config = { - web3provider, + web3Provider, nodeUri, aquariusUri, brizoUri, @@ -21,13 +21,7 @@ export async function provideOcean(web3provider: Web3) { secretStoreUri, verbose } - - Logger.log('accs web3:', (await web3provider.eth.getAccounts())[0]) - const ocean: any = await Ocean.getInstance(config) - - Logger.log('accs ocean:', (await ocean.accounts.list())[0].id) - return { ocean } } From 84c0877c43afbfa6f0be5b6feaa5e2a6e2526079 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Wed, 10 Jul 2019 13:05:43 +0200 Subject: [PATCH 08/39] some test fixes --- client/__mocks__/user-mock.ts | 10 ++++--- .../components/organisms/Web3message.test.tsx | 29 ++++--------------- client/src/context/index.tsx | 1 + client/src/routes/History.test.tsx | 21 +++----------- 4 files changed, 17 insertions(+), 44 deletions(-) diff --git a/client/__mocks__/user-mock.ts b/client/__mocks__/user-mock.ts index eabdfd5..5d6a8b2 100644 --- a/client/__mocks__/user-mock.ts +++ b/client/__mocks__/user-mock.ts @@ -3,7 +3,7 @@ import oceanMock from './ocean-mock' const userMock = { isLogged: false, isLoading: false, - isWeb3: false, + isBurner: false, isOceanNetwork: false, account: '', web3: {}, @@ -11,14 +11,15 @@ const userMock = { balance: { eth: 0, ocn: 0 }, network: '', requestFromFaucet: jest.fn(), - unlockAccounts: jest.fn(), + loginMetamask: jest.fn(), + loginBurnerWallet: jest.fn(), message: '' } const userMockConnected = { isLogged: true, isLoading: false, - isWeb3: true, + isBurner: false, isOceanNetwork: true, account: '0xxxxxx', web3: {}, @@ -26,7 +27,8 @@ const userMockConnected = { balance: { eth: 0, ocn: 0 }, network: '', requestFromFaucet: jest.fn(), - unlockAccounts: jest.fn(), + loginMetamask: jest.fn(), + loginBurnerWallet: jest.fn(), message: '' } diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index ce705a4..5ae22c4 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -5,18 +5,18 @@ import { User } from '../../context' import { userMock, userMockConnected } from '../../../__mocks__/user-mock' describe('Web3message', () => { - it('renders with noWeb3 message', () => { + it('renders with burner wallet message', () => { const { container } = render( - + ) - expect(container.firstChild).toHaveTextContent('Not a Web3 Browser') + expect(container.firstChild).toHaveTextContent('Burner Wallet') }) it('renders with wrongNetwork message', () => { const { container } = render( - + ) @@ -28,12 +28,12 @@ describe('Web3message', () => { it('renders with noAccount message', () => { const { container } = render( ) - expect(container.firstChild).toHaveTextContent('No accounts detected') + expect(container.firstChild).toHaveTextContent('No wallet selected.') }) it('renders with hasAccount message', () => { @@ -44,21 +44,4 @@ describe('Web3message', () => { ) expect(container.firstChild).toHaveTextContent('0xxxxxx') }) - - it('button click fires unlockAccounts', () => { - const { getByText } = render( - - - - ) - - fireEvent.click(getByText('Unlock Account')) - expect(userMock.unlockAccounts).toBeCalled() - }) }) diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index 1ca6b5b..69fffb1 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -2,6 +2,7 @@ import React from 'react' export const User = React.createContext({ isLogged: false, + isBurner: false, isLoading: false, isOceanNetwork: false, account: '', diff --git a/client/src/routes/History.test.tsx b/client/src/routes/History.test.tsx index 539a1cb..e6eb11b 100644 --- a/client/src/routes/History.test.tsx +++ b/client/src/routes/History.test.tsx @@ -3,6 +3,7 @@ import { render } from '@testing-library/react' import { MemoryRouter } from 'react-router' import { User } from '../context' import History from './History' +import { userMock } from '../../__mocks__/user-mock' describe('History', () => { it('renders without crashing', () => { @@ -14,24 +15,10 @@ describe('History', () => { expect(container.firstChild).toBeInTheDocument() }) - it('outputs Web3 message when no Web3 detected', () => { - const context = { - isLogged: false, - isLoading: false, - isWeb3: false, - isOceanNetwork: false, - account: '', - web3: {}, - ocean: {}, - balance: { eth: 0, ocn: 0 }, - network: '', - requestFromFaucet: () => {}, - unlockAccounts: () => {}, - message: '' - } + it('outputs no wallet selected', () => { const { container } = render( - + @@ -39,7 +26,7 @@ describe('History', () => { ) expect(container.querySelector('.message')).toBeInTheDocument() expect(container.querySelector('.message')).toHaveTextContent( - 'Not a Web3 Browser.' + 'No wallet selected.' ) }) }) From ac2cd2eb702eca4d526e75b1361f311682d82077 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 13:40:19 +0200 Subject: [PATCH 09/39] fetch market network, use it in some places to switch copy, fix faucet button --- .../organisms/Web3message.module.scss | 4 ++ client/src/context/MarketProvider.tsx | 18 ++++- client/src/context/index.tsx | 6 +- client/src/routes/Faucet.tsx | 46 ++++++------ client/src/routes/Publish/index.tsx | 72 ++++++++++--------- 5 files changed, 90 insertions(+), 56 deletions(-) diff --git a/client/src/components/organisms/Web3message.module.scss b/client/src/components/organisms/Web3message.module.scss index 4988335..99c21e3 100644 --- a/client/src/components/organisms/Web3message.module.scss +++ b/client/src/components/organisms/Web3message.module.scss @@ -9,6 +9,10 @@ padding-top: $spacer / 2; padding-bottom: $spacer / 2; text-align: left; + + > div:first-child { + margin-bottom: $spacer / 2; + } } .text { diff --git a/client/src/context/MarketProvider.tsx b/client/src/context/MarketProvider.tsx index c24f77e..0132aaf 100644 --- a/client/src/context/MarketProvider.tsx +++ b/client/src/context/MarketProvider.tsx @@ -16,6 +16,7 @@ interface MarketProviderProps { interface MarketProviderState { totalAssets: number categories: string[] + network: string } export default class MarketProvider extends PureComponent< @@ -24,7 +25,8 @@ export default class MarketProvider extends PureComponent< > { public state = { totalAssets: 0, - categories + categories, + network: 'Pacific' } public async componentDidMount() {} @@ -34,6 +36,7 @@ export default class MarketProvider extends PureComponent< // Cause there is no `prevContext`. if (prevProps.ocean !== this.props.ocean) { await this.getTotalAssets() + await this.getMarketNetwork() } } @@ -56,6 +59,19 @@ export default class MarketProvider extends PureComponent< } } + private getMarketNetwork = async () => { + try { + const { ocean } = this.props + // Set desired network to whatever Brizo is running in + const brizo = await ocean.brizo.getVersionInfo() + const network = + brizo.network.charAt(0).toUpperCase() + brizo.network.slice(1) + this.setState({ network }) + } catch (error) { + Logger.error('Error', error.message) + } + } + public render() { return ( diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index 69fffb1..f78e3ce 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -25,4 +25,8 @@ export const User = React.createContext({ message: '' }) -export const Market = React.createContext({ totalAssets: 0, categories: [''] }) +export const Market = React.createContext({ + totalAssets: 0, + categories: [''], + network: '' +}) diff --git a/client/src/routes/Faucet.tsx b/client/src/routes/Faucet.tsx index 6e01306..e187cbb 100644 --- a/client/src/routes/Faucet.tsx +++ b/client/src/routes/Faucet.tsx @@ -3,7 +3,7 @@ import { FaucetResponse } from '../ocean' import Route from '../components/templates/Route' import Button from '../components/atoms/Button' import Spinner from '../components/atoms/Spinner' -import { User } from '../context' +import { User, Market } from '../context' import Web3message from '../components/organisms/Web3message' import styles from './Faucet.module.scss' import Content from '../components/atoms/Content' @@ -112,30 +112,34 @@ export default class Faucet extends PureComponent<{}, FaucetState> { ) public render() { - const { isWeb3 } = this.context + const { isLogged } = this.context const { isLoading, error, success } = this.state return ( - - - + + {market => ( + + + -
- {isLoading ? ( - - ) : error ? ( - - ) : success ? ( - - ) : ( - isWeb3 && - )} -
-
-
+
+ {isLoading ? ( + + ) : error ? ( + + ) : success ? ( + + ) : ( + isLogged && + )} +
+
+
+ )} + ) } } diff --git a/client/src/routes/Publish/index.tsx b/client/src/routes/Publish/index.tsx index eb18137..bc61a03 100644 --- a/client/src/routes/Publish/index.tsx +++ b/client/src/routes/Publish/index.tsx @@ -3,7 +3,7 @@ import { Logger } from '@oceanprotocol/squid' import Route from '../../components/templates/Route' import Form from '../../components/atoms/Form/Form' import AssetModel from '../../models/AssetModel' -import { User } from '../../context' +import { User, Market } from '../../context' import Web3message from '../../components/organisms/Web3message' import Step from './Step' import Progress from './Progress' @@ -319,41 +319,47 @@ export default class Publish extends Component<{}, PublishState> { public render() { return ( - - - {(!this.context.isLogged || - !this.context.isOceanNetwork) && } + + {market => ( + + + {(!this.context.isLogged || + !this.context.isOceanNetwork) && ( + + )} - - -
- {steps.map((step: any, index: number) => ( - - ))} - -
-
+ +
+ {steps.map((step: any, index: number) => ( + + ))} + +
+
+ )} + ) } } From 7b334b91044dc9a02aae2f3edc027da7321b5df1 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 14:29:46 +0200 Subject: [PATCH 10/39] new Web3message styling --- client/src/components/atoms/Account.module.scss | 2 ++ .../organisms/WalletSelector.module.scss | 5 +++-- .../components/organisms/Web3message.module.scss | 12 ++++++++---- .../src/components/organisms/Web3message.test.tsx | 10 +++++----- client/src/components/organisms/Web3message.tsx | 14 ++++++-------- client/src/data/web3message.json | 6 ++++-- client/src/routes/About.tsx | 7 +++++-- client/src/routes/History.test.tsx | 1 - 8 files changed, 33 insertions(+), 24 deletions(-) diff --git a/client/src/components/atoms/Account.module.scss b/client/src/components/atoms/Account.module.scss index 3bff029..8f6a92e 100644 --- a/client/src/components/atoms/Account.module.scss +++ b/client/src/components/atoms/Account.module.scss @@ -20,6 +20,8 @@ width: 100%; margin-left: calc(1.5rem + #{$spacer / 3}); font-size: $font-size-mini; + font-weight: $font-weight-bold; + opacity: .7; } .blockies { diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss index 855649f..9e3be32 100644 --- a/client/src/components/organisms/WalletSelector.module.scss +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -2,8 +2,9 @@ .openLink { margin: 0; - margin-top: $spacer / 2; - margin-left: $spacer; + margin-left: $spacer * 1.5; + font-size: $font-size-small !important; // stylelint-disable-line + text-transform: uppercase; } .info { diff --git a/client/src/components/organisms/Web3message.module.scss b/client/src/components/organisms/Web3message.module.scss index 99c21e3..b8f2bb5 100644 --- a/client/src/components/organisms/Web3message.module.scss +++ b/client/src/components/organisms/Web3message.module.scss @@ -9,20 +9,24 @@ padding-top: $spacer / 2; padding-bottom: $spacer / 2; text-align: left; + font-size: $font-size-small; > div:first-child { margin-bottom: $spacer / 2; + background: $brand-white; + border-radius: $border-radius; + border: 1px solid $brand-grey-lighter; + padding: $spacer / 2; } } .text { - margin-left: $spacer; + padding-left: $spacer * 1.5; display: inline-block; } .status { - position: absolute; - left: 0; - top: $spacer / 1.5; + margin-left: -($spacer / 1.2); + margin-right: $spacer / 2.5; padding: 0; } diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index 5ae22c4..b8dde63 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { render, fireEvent } from '@testing-library/react' +import { render } from '@testing-library/react' import Web3message from './Web3message' import { User } from '../../context' import { userMock, userMockConnected } from '../../../__mocks__/user-mock' @@ -16,7 +16,9 @@ describe('Web3message', () => { it('renders with wrongNetwork message', () => { const { container } = render( - + ) @@ -27,9 +29,7 @@ describe('Web3message', () => { it('renders with noAccount message', () => { const { container } = render( - + ) diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 8fce377..6e382ba 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -13,7 +13,7 @@ export default class Web3message extends PureComponent { const { isOceanNetwork, isLogged, isBurner } = this.context return !isOceanNetwork && !isBurner - ? content.wrongNetwork + ? content.wrongNetworkPacific : !isLogged ? content.noAccount : isBurner @@ -26,18 +26,16 @@ export default class Web3message extends PureComponent { public render() { return (
- {this.context.account ? ( + {this.context.account && ( - ) : ( - )} - {' '} +

+ + +

) diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index edbb663..0378668 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -1,6 +1,8 @@ { "noAccount": "No wallet selected. For publishing and downloading an asset you need to use one.", - "hasBurnerWallet": "

We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side. This wallet will persist in your browser across sessions, but not across different browsers or devices.

To personalize your experience and improve your security, migrate to MetaMask.", + "hasBurnerWallet": "We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side. This wallet will persist in your browser across sessions, but not across different browsers or devices. To personalize your experience and improve your security, learn how to migrate to MetaMask.", "hasMetaMaskWallet": "Connected with MetaMask.", - "wrongNetwork": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com" + "wrongNetworkPacific": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", + "wrongNetworkNile": "Not connected to Nile network.
Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", + "wrongNetworkDuero": "Not connected to Duero network.
Please connect in MetaMask with Custom RPC https://duero.dev-ocean.com" } diff --git a/client/src/routes/About.tsx b/client/src/routes/About.tsx index 799e617..901387b 100644 --- a/client/src/routes/About.tsx +++ b/client/src/routes/About.tsx @@ -1,4 +1,5 @@ import React, { Component } from 'react' +import { Market } from '../context' import Route from '../components/templates/Route' import Content from '../components/atoms/Content' import VersionNumbers from '../components/molecules/VersionNumbers' @@ -6,17 +7,19 @@ import Web3message from '../components/organisms/Web3message' import stylesVersionNumbers from '../components/molecules/VersionNumbers/index.module.scss' class About extends Component { + public static contextType = Market + public render() { return (

Commons is built on top of the Ocean{' '} - Pacific network + {this.context.network} network {' '} and is targeted at enthusiastic data scientists with some crypto experience. It can be used with any diff --git a/client/src/routes/History.test.tsx b/client/src/routes/History.test.tsx index e6eb11b..7bca7e4 100644 --- a/client/src/routes/History.test.tsx +++ b/client/src/routes/History.test.tsx @@ -16,7 +16,6 @@ describe('History', () => { }) it('outputs no wallet selected', () => { - const { container } = render( From 8bb8111acaba65a23d836a8e3264c3638b6e4a18 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 15:41:58 +0200 Subject: [PATCH 11/39] basic wallet modal styling --- .../VersionNumbers/VersionStatus.module.scss | 4 +- .../organisms/WalletSelector.module.scss | 52 +++++++++++-------- .../components/organisms/WalletSelector.tsx | 28 ++++++++-- .../organisms/Web3message.module.scss | 3 +- 4 files changed, 56 insertions(+), 31 deletions(-) diff --git a/client/src/components/molecules/VersionNumbers/VersionStatus.module.scss b/client/src/components/molecules/VersionNumbers/VersionStatus.module.scss index ed2f600..acf3f1b 100644 --- a/client/src/components/molecules/VersionNumbers/VersionStatus.module.scss +++ b/client/src/components/molecules/VersionNumbers/VersionStatus.module.scss @@ -10,8 +10,8 @@ .element { display: inline-block; - margin-left: $spacer / 2; - margin-right: $spacer / 2; + margin-left: $spacer / 1.5; + margin-right: $spacer / 1.5; text-align: center; } diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss index 9e3be32..74e3851 100644 --- a/client/src/components/organisms/WalletSelector.module.scss +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -8,39 +8,47 @@ } .info { + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +.button { + flex: 0 0 100%; background: $brand-white; - padding: $spacer; border: 1px solid $brand-grey-lighter; border-radius: $border-radius; + padding: $spacer $spacer / 1.5; + font-family: $font-family-base; + display: inline-block; + display: flex; + flex-wrap: wrap; + cursor: pointer; + transition: border .2s ease-out; + margin-bottom: $spacer; - h3 { - font-size: $font-size-base; - margin-top: 0; - margin-bottom: $spacer / 8; + @media (min-width: $break-point--small) { + flex-basis: 48%; + margin-bottom: 0; } - p { - border-bottom: 1px solid $brand-grey-lighter; - padding-bottom: $spacer / 2; + &:hover, + &:focus { + border-color: $brand-pink; } - code { - padding: 0; - color: $brand-grey-light; + span { + display: block; + width: 100%; } } -.error { - background: $red; - padding: $spacer / 2; - text-align: center; - color: $brand-white; - border-radius: $border-radius; +.buttonTitle { + font-size: $font-size-base; + margin-bottom: $spacer / 8; font-weight: $font-weight-bold; +} + +.buttonDescription { font-size: $font-size-small; } - -.success { - composes: error; - background: $green; -} diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index 1fa251a..a3e9528 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -41,16 +41,34 @@ export default class WalletSelector extends PureComponent<

- -
diff --git a/client/src/components/organisms/Web3message.module.scss b/client/src/components/organisms/Web3message.module.scss index b8f2bb5..8913012 100644 --- a/client/src/components/organisms/Web3message.module.scss +++ b/client/src/components/organisms/Web3message.module.scss @@ -4,8 +4,6 @@ margin-bottom: $spacer; color: $brand-grey; position: relative; - border-bottom: .1rem solid $brand-grey-lighter; - border-top: .1rem solid $brand-grey-lighter; padding-top: $spacer / 2; padding-bottom: $spacer / 2; text-align: left; @@ -23,6 +21,7 @@ .text { padding-left: $spacer * 1.5; display: inline-block; + margin-bottom: 0; } .status { From 4ee5f19a9a6e55b98097ca2542206df3c5db3ae0 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 16:34:16 +0200 Subject: [PATCH 12/39] simplify Web3message UI, show during Publish flow --- .../src/components/atoms/Account.module.scss | 8 +++---- client/src/components/atoms/Account.tsx | 8 ++++--- .../AccountStatus/Popover.module.scss | 2 +- .../organisms/WalletSelector.module.scss | 6 +++--- .../components/organisms/WalletSelector.tsx | 2 +- .../organisms/Web3message.module.scss | 15 +++++++------ .../src/components/organisms/Web3message.tsx | 21 ++++++++++++------- client/src/data/web3message.json | 2 +- client/src/routes/About.tsx | 2 +- client/src/routes/Publish/Step.module.scss | 4 ++++ client/src/routes/Publish/Step.tsx | 4 ++++ 11 files changed, 44 insertions(+), 30 deletions(-) diff --git a/client/src/components/atoms/Account.module.scss b/client/src/components/atoms/Account.module.scss index 8f6a92e..48ab5d8 100644 --- a/client/src/components/atoms/Account.module.scss +++ b/client/src/components/atoms/Account.module.scss @@ -6,22 +6,22 @@ align-items: center; text-align: left; - > div { + > div:first-of-type { flex: 0 0 80%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-family: $font-family-monospace; font-size: $font-size-small; + font-weight: $font-weight-bold; } } .accountType { width: 100%; margin-left: calc(1.5rem + #{$spacer / 3}); - font-size: $font-size-mini; - font-weight: $font-weight-bold; - opacity: .7; + font-size: $font-size-small; + color: $brand-grey-light; } .blockies { diff --git a/client/src/components/atoms/Account.tsx b/client/src/components/atoms/Account.tsx index e83414f..3e632f1 100644 --- a/client/src/components/atoms/Account.tsx +++ b/client/src/components/atoms/Account.tsx @@ -2,6 +2,7 @@ import React from 'react' import Dotdotdot from 'react-dotdotdot' import { toDataUrl } from 'ethereum-blockies' import styles from './Account.module.scss' +import WalletSelector from '../organisms/WalletSelector' const Account = ({ account, @@ -16,9 +17,10 @@ const Account = ({
Blockies {account} - {isBurner && ( - Burner Wallet - )} +
+ {isBurner ? 'Burner Wallet' : 'MetaMask'} + +
) : ( No account selected diff --git a/client/src/components/molecules/AccountStatus/Popover.module.scss b/client/src/components/molecules/AccountStatus/Popover.module.scss index 7abcdce..5df8fc4 100644 --- a/client/src/components/molecules/AccountStatus/Popover.module.scss +++ b/client/src/components/molecules/AccountStatus/Popover.module.scss @@ -41,7 +41,7 @@ $popoverWidth: 18rem; } button { - font-size: $font-size-small; + display: none; } } diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss index 74e3851..f6a9693 100644 --- a/client/src/components/organisms/WalletSelector.module.scss +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -2,9 +2,8 @@ .openLink { margin: 0; - margin-left: $spacer * 1.5; font-size: $font-size-small !important; // stylelint-disable-line - text-transform: uppercase; + margin-left: $spacer / 4; } .info { @@ -45,10 +44,11 @@ .buttonTitle { font-size: $font-size-base; - margin-bottom: $spacer / 8; + margin-bottom: $spacer / 2; font-weight: $font-weight-bold; } .buttonDescription { font-size: $font-size-small; + color: $brand-grey; } diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index a3e9528..93243e0 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -41,7 +41,7 @@ export default class WalletSelector extends PureComponent< diff --git a/client/src/components/organisms/Web3message.module.scss b/client/src/components/organisms/Web3message.module.scss index 8913012..157e1bb 100644 --- a/client/src/components/organisms/Web3message.module.scss +++ b/client/src/components/organisms/Web3message.module.scss @@ -5,17 +5,16 @@ color: $brand-grey; position: relative; padding-top: $spacer / 2; - padding-bottom: $spacer / 2; text-align: left; font-size: $font-size-small; +} - > div:first-child { - margin-bottom: $spacer / 2; - background: $brand-white; - border-radius: $border-radius; - border: 1px solid $brand-grey-lighter; - padding: $spacer / 2; - } +.account { + margin-bottom: $spacer / 2; + background: $brand-white; + border-radius: $border-radius; + border: 1px solid $brand-grey-lighter; + padding: $spacer / 2; } .text { diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 6e382ba..7339e96 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -3,10 +3,9 @@ import Account from '../atoms/Account' import AccountStatus from '../molecules/AccountStatus' import styles from './Web3message.module.scss' import { User } from '../../context' -import WalletSelector from './WalletSelector' import content from '../../data/web3message.json' -export default class Web3message extends PureComponent { +export default class Web3message extends PureComponent<{ extended?: boolean }> { public static contextType = User private message = () => { @@ -26,17 +25,23 @@ export default class Web3message extends PureComponent { public render() { return (
- {this.context.account && ( +
+
+ + {this.props.extended && ( +

+ + +

)} -

- - -

-
) } diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index 0378668..805566a 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -1,6 +1,6 @@ { "noAccount": "No wallet selected. For publishing and downloading an asset you need to use one.", - "hasBurnerWallet": "We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side. This wallet will persist in your browser across sessions, but not across different browsers or devices. To personalize your experience and improve your security, learn how to migrate to MetaMask.", + "hasBurnerWallet": "We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side. This wallet will persist in your browser across sessions, but not across different browsers or devices. To personalize your experience and improve your security, migrate to MetaMask.", "hasMetaMaskWallet": "Connected with MetaMask.", "wrongNetworkPacific": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", "wrongNetworkNile": "Not connected to Nile network.
Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", diff --git a/client/src/routes/About.tsx b/client/src/routes/About.tsx index 901387b..5e40aad 100644 --- a/client/src/routes/About.tsx +++ b/client/src/routes/About.tsx @@ -45,7 +45,7 @@ class About extends Component {

Your Web3 Account Status

- +
diff --git a/client/src/routes/Publish/Step.module.scss b/client/src/routes/Publish/Step.module.scss index 692e8d4..b186855 100644 --- a/client/src/routes/Publish/Step.module.scss +++ b/client/src/routes/Publish/Step.module.scss @@ -24,3 +24,7 @@ margin-left: auto; } } + +.account { + margin-top: $spacer * $line-height; +} diff --git a/client/src/routes/Publish/Step.tsx b/client/src/routes/Publish/Step.tsx index 57b84d8..9dae46a 100644 --- a/client/src/routes/Publish/Step.tsx +++ b/client/src/routes/Publish/Step.tsx @@ -7,6 +7,7 @@ import { User } from '../../context' import Files from './Files/' import StepRegisterContent from './StepRegisterContent' import styles from './Step.module.scss' +import Web3message from '../../components/organisms/Web3message' interface Fields { label: string @@ -162,6 +163,9 @@ export default class Step extends PureComponent { )} +
+ +
) } From 01fb305612a4c85190f569870cc1ef37a2c4593d Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 17:21:55 +0200 Subject: [PATCH 13/39] remove wallet setup from Cypress --- client/package-lock.json | 1333 ++++++++++++++++++------ client/package.json | 2 +- cypress.json | 2 - cypress/support/index.js | 13 +- package-lock.json | 2084 ++++---------------------------------- package.json | 5 +- 6 files changed, 1201 insertions(+), 2238 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 2e30db7..2a9ceb3 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2185,6 +2185,14 @@ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, "ansi-html": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", @@ -2206,6 +2214,11 @@ "color-convert": "^1.9.0" } }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -2215,18 +2228,30 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" } }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "requires": { + "buffer-equal": "^1.0.0" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -2267,20 +2292,38 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "requires": { + "make-iterator": "^1.0.0" + } }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "requires": { + "make-iterator": "^1.0.0" + } }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" }, "array-equal": { "version": "1.0.0", @@ -2315,6 +2358,37 @@ "es-abstract": "^1.7.0" } }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -2327,6 +2401,28 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -2345,8 +2441,7 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "arrify": { "version": "1.0.1", @@ -2412,8 +2507,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types-flow": { "version": "0.0.7", @@ -2433,11 +2527,21 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "async-foreach": { "version": "0.1.3", @@ -2450,6 +2554,14 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "requires": { + "async-done": "^1.2.2" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2458,8 +2570,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "atob-lite": { "version": "2.0.0", @@ -2879,6 +2990,22 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, "bail": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", @@ -2893,7 +3020,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -2908,7 +3034,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -2917,7 +3042,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2926,7 +3050,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -2935,7 +3058,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2945,8 +3067,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -2983,8 +3104,7 @@ "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bindings": { "version": "1.5.0", @@ -3097,7 +3217,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -3115,7 +3234,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3273,6 +3391,11 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=" + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -3281,8 +3404,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-indexof": { "version": "1.1.1", @@ -3360,7 +3482,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -3509,7 +3630,6 @@ "version": "2.1.6", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "dev": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -3529,7 +3649,6 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, "optional": true, "requires": { "nan": "^2.12.1", @@ -3539,25 +3658,21 @@ "abbrev": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, "optional": true }, "aproba": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", "bundled": true, - "dev": true, "optional": true, "requires": { "delegates": "^1.0.0", @@ -3567,13 +3682,11 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "dev": true, "optional": true, "requires": { "balanced-match": "^1.0.0", @@ -3583,37 +3696,31 @@ "chownr": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "debug": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "^2.1.1" @@ -3622,25 +3729,21 @@ "deep-extend": { "version": "0.6.0", "bundled": true, - "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", "bundled": true, - "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -3649,13 +3752,11 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, - "dev": true, "optional": true, "requires": { "aproba": "^1.0.3", @@ -3671,7 +3772,6 @@ "glob": { "version": "7.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -3685,13 +3785,11 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", "bundled": true, - "dev": true, "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -3700,7 +3798,6 @@ "ignore-walk": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimatch": "^3.0.4" @@ -3709,7 +3806,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true, "optional": true, "requires": { "once": "^1.3.0", @@ -3719,19 +3815,16 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, "optional": true }, "ini": { "version": "1.3.5", "bundled": true, - "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -3740,13 +3833,11 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -3755,13 +3846,11 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "^5.1.2", @@ -3771,7 +3860,6 @@ "minizlib": { "version": "1.2.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "^2.2.1" @@ -3780,7 +3868,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimist": "0.0.8" @@ -3789,13 +3876,11 @@ "ms": { "version": "2.1.1", "bundled": true, - "dev": true, "optional": true }, "needle": { "version": "2.3.0", "bundled": true, - "dev": true, "optional": true, "requires": { "debug": "^4.1.0", @@ -3806,7 +3891,6 @@ "node-pre-gyp": { "version": "0.12.0", "bundled": true, - "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -3824,7 +3908,6 @@ "nopt": { "version": "4.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "abbrev": "1", @@ -3834,13 +3917,11 @@ "npm-bundled": { "version": "1.0.6", "bundled": true, - "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -3850,7 +3931,6 @@ "npmlog": { "version": "4.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -3862,19 +3942,16 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "wrappy": "1" @@ -3883,19 +3960,16 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "osenv": { "version": "0.1.5", "bundled": true, - "dev": true, "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -3905,19 +3979,16 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "rc": { "version": "1.2.8", "bundled": true, - "dev": true, "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -3929,7 +4000,6 @@ "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true } } @@ -3937,7 +4007,6 @@ "readable-stream": { "version": "2.3.6", "bundled": true, - "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -3952,7 +4021,6 @@ "rimraf": { "version": "2.6.3", "bundled": true, - "dev": true, "optional": true, "requires": { "glob": "^7.1.3" @@ -3961,43 +4029,36 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, - "dev": true, "optional": true }, "sax": { "version": "1.2.4", "bundled": true, - "dev": true, "optional": true }, "semver": { "version": "5.7.0", "bundled": true, - "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "dev": true, "optional": true }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -4008,7 +4069,6 @@ "string_decoder": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -4017,7 +4077,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -4026,13 +4085,11 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "tar": { "version": "4.4.8", "bundled": true, - "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", @@ -4047,13 +4104,11 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", "bundled": true, - "dev": true, "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -4062,13 +4117,11 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, "optional": true } } @@ -4076,8 +4129,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" } } }, @@ -4115,7 +4167,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -4127,7 +4178,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4167,13 +4217,22 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + }, "clone-deep": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", @@ -4187,6 +4246,21 @@ "shallow-clone": "^0.1.2" } }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -4207,19 +4281,37 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collapse-white-space": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==" }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -4260,6 +4352,11 @@ "simple-swizzle": "^0.2.2" } }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4297,8 +4394,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compressible": { "version": "2.0.17", @@ -4341,7 +4437,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4405,7 +4500,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -4442,8 +4536,16 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } }, "core-js": { "version": "1.2.7", @@ -4904,6 +5006,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "damerau-levenshtein": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", @@ -4951,8 +5062,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -5060,6 +5170,21 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -5070,6 +5195,11 @@ "ip-regex": "^2.1.0" } }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=" + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5082,7 +5212,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -5092,7 +5221,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5101,7 +5229,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5110,7 +5237,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5120,8 +5246,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -5203,6 +5328,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -5411,7 +5541,6 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -5419,6 +5548,15 @@ "stream-shift": "^1.0.0" } }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -5515,7 +5653,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -5543,6 +5680,46 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6232,7 +6409,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -6247,7 +6423,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -6256,13 +6431,20 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } } } }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "expect": { "version": "24.8.0", "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", @@ -6323,7 +6505,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6333,7 +6514,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -6355,7 +6535,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -6371,7 +6550,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -6380,7 +6558,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6389,7 +6566,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6398,7 +6574,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6407,7 +6582,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -6417,8 +6591,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -6427,6 +6600,17 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -6555,7 +6739,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -6567,7 +6750,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6621,12 +6803,39 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" } }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -6662,7 +6871,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, "requires": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -6705,8 +6913,7 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "0.1.5", @@ -6757,7 +6964,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -6791,6 +6997,15 @@ "jsonfile": "^2.1.0" } }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, "fs-promise": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", @@ -6876,8 +7091,7 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-own-enumerable-property-symbols": { "version": "3.0.0", @@ -6899,8 +7113,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { "version": "0.1.7", @@ -6927,7 +7140,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -6937,19 +7149,48 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, "requires": { "is-extglob": "^2.1.0" } } } }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "glob-watcher": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", + "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" + } + }, "global": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", @@ -7039,6 +7280,14 @@ "minimatch": "~3.0.2" } }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "requires": { + "sparkles": "^1.0.0" + } + }, "got": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", @@ -7081,6 +7330,60 @@ "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "gulp-cli": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", + "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "requires": { + "glogg": "^1.0.0" + } + }, "gzip-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", @@ -7196,7 +7499,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -7207,7 +7509,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -7216,14 +7517,12 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7322,11 +7621,18 @@ "react-is": "^16.7.0" } }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "hpack.js": { "version": "2.1.6", @@ -7678,8 +7984,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "6.3.1", @@ -7764,6 +8069,11 @@ "ipaddr.js": "^1.9.0" } }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -7776,8 +8086,7 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ip": { "version": "1.1.5", @@ -7796,6 +8105,15 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -7806,7 +8124,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -7828,8 +8145,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-base64": { "version": "0.1.0", @@ -7840,7 +8156,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, "requires": { "binary-extensions": "^1.0.0" } @@ -7887,7 +8202,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -7906,7 +8220,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -7916,8 +8229,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -7930,14 +8242,12 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", @@ -7952,7 +8262,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7972,7 +8281,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -7992,11 +8300,15 @@ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=" + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -8045,7 +8357,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -8070,6 +8381,14 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", @@ -8114,6 +8433,14 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, "is-url": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", @@ -8122,8 +8449,12 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=" }, "is-whitespace-character": { "version": "1.0.3", @@ -8133,8 +8464,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-word-character": { "version": "1.0.3", @@ -8155,8 +8485,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -9866,8 +10195,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -9931,6 +10259,11 @@ "array-includes": "^3.0.3" } }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=" + }, "keccakjs": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", @@ -9950,7 +10283,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" }, @@ -9958,8 +10290,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" } } }, @@ -9979,21 +10310,45 @@ "webpack-sources": "^1.1.0" } }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, "requires": { "invert-kv": "^1.0.0" } }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "requires": { + "flush-write-stream": "^1.0.2" + } + }, "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", @@ -10016,11 +10371,25 @@ "type-check": "~0.3.2" } }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -10243,6 +10612,21 @@ } } }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -10270,8 +10654,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { "version": "1.0.1", @@ -10283,7 +10666,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -10293,6 +10675,38 @@ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==" }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -10451,7 +10865,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -10471,8 +10884,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -10588,7 +11000,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -10598,7 +11009,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -10689,6 +11099,11 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==" + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -10719,7 +11134,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -10737,8 +11151,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -10759,6 +11172,11 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -10968,7 +11386,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -10980,7 +11397,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -10997,6 +11413,14 @@ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "requires": { + "once": "^1.3.2" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -11036,8 +11460,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "number-to-bn": { "version": "1.7.0", @@ -11075,7 +11498,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -11086,7 +11508,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -11108,7 +11529,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" } @@ -11117,7 +11537,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -11125,6 +11544,27 @@ "object-keys": "^1.0.11" } }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "object.fromentries": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", @@ -11147,6 +11587,25 @@ "es-abstract": "^1.5.1" } }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -11155,6 +11614,25 @@ "isobject": "^3.0.1" } }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "object.values": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", @@ -11263,6 +11741,14 @@ "wordwrap": "~1.0.0" } }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "requires": { + "readable-stream": "^2.0.1" + } + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -11288,7 +11774,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, "requires": { "lcid": "^1.0.0" } @@ -11453,6 +11938,16 @@ "is-hexadecimal": "^1.0.0" } }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, "parse-headers": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", @@ -11466,11 +11961,20 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, "parse5": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", @@ -11485,8 +11989,7 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-browserify": { "version": "0.0.0", @@ -11497,14 +12000,12 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -11529,8 +12030,20 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, "path-to-regexp": { "version": "0.1.7", @@ -11541,7 +12054,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -11711,8 +12223,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { "version": "7.0.16", @@ -12678,6 +13189,11 @@ "react-is": "^16.8.4" } }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -12796,7 +13312,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, "requires": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -12807,7 +13322,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13411,7 +13925,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -13422,7 +13935,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -13446,7 +13958,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -13462,6 +13973,14 @@ "util.promisify": "^1.0.0" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, "recursive-readdir": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", @@ -13514,7 +14033,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -13608,11 +14126,36 @@ "xtend": "^4.0.1" } }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + } + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "renderkid": { "version": "2.0.3", @@ -13654,8 +14197,7 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", @@ -13676,6 +14218,16 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -13733,8 +14285,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", @@ -13745,8 +14296,7 @@ "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, "requireindex": { "version": "1.2.0", @@ -13764,7 +14314,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -13778,12 +14327,53 @@ "resolve-from": "^3.0.0" } }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + } + } + }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "requires": { + "value-or-function": "^3.0.0" + } + }, "resolve-pathname": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", @@ -13792,8 +14382,7 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "restore-cursor": { "version": "2.0.0", @@ -13808,8 +14397,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "rgb-regex": { "version": "1.0.1", @@ -13882,7 +14470,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "~0.1.10" } @@ -14122,8 +14709,15 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "requires": { + "sver-compat": "^1.5.0" + } }, "send": { "version": "0.17.1", @@ -14219,14 +14813,12 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -14238,7 +14830,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -14430,7 +15021,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -14446,7 +15036,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -14455,7 +15044,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -14463,8 +15051,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" } } }, @@ -14472,7 +15059,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -14483,7 +15069,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -14492,7 +15077,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -14501,7 +15085,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -14510,7 +15093,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -14520,8 +15102,7 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, @@ -14529,7 +15110,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" } @@ -14602,7 +15182,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -14624,8 +15203,7 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" }, "space-separated-tokens": { "version": "1.1.4", @@ -14633,11 +15211,15 @@ "integrity": "sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA==", "dev": true }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -14646,14 +15228,12 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -14662,8 +15242,7 @@ "spdx-license-ids": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", - "dev": true + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "spdy": { "version": "4.0.0", @@ -14746,7 +15325,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -14788,6 +15366,11 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", @@ -14803,7 +15386,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -14813,7 +15395,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -14860,6 +15441,11 @@ "stream-shift": "^1.0.0" } }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==" + }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", @@ -14876,8 +15462,7 @@ "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" }, "strict-uri-encode": { "version": "1.1.0", @@ -14924,7 +15509,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -14964,7 +15548,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" }, @@ -14972,8 +15555,7 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, @@ -14981,7 +15563,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -15073,6 +15654,15 @@ "has-flag": "^3.0.0" } }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, "svgo": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", @@ -15375,18 +15965,31 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, "thunky": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" + }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", @@ -15432,6 +16035,15 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, "to-array-buffer": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz", @@ -15470,7 +16082,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -15479,7 +16090,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -15491,12 +16101,19 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "requires": { + "through2": "^2.0.3" + } + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -15563,21 +16180,23 @@ } }, "truffle-hdwallet-provider": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.5.tgz", - "integrity": "sha512-T9qNm7b6MD0UPWVmmJEhgzW1DdR6mkMDijGBSbdJqYaaBLufoycE+qH3dsV+m1mLTE+ebM5RcJ4gF4oXgDW67w==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.13.tgz", + "integrity": "sha512-I4qkKKl8ikwrCjOuTU1YBltcAWWffy4cnVH9QpVGEqTjArYPk40HWzwr4vcfr+nPNBlYyTyMUEbGt+4iouLznQ==", "requires": { "any-promise": "^1.3.0", "bindings": "^1.3.1", + "web3": "1.0.0-beta.37", "websocket": "^1.0.28" }, "dependencies": { "websocket": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.28.tgz", - "integrity": "sha512-00y/20/80P7H4bCYkzuuvvfDvh+dgtXi5kzDf3UcZwN6boTYaKvsrtZ5lIYm1Gsg48siMErd9M4zjSYfYFHTrA==", + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.29.tgz", + "integrity": "sha512-WhU8jKXC8sTh6ocLSqpZRlOKMNYGwUvjA5+XcIgIk/G3JCaDfkZUr0zA19sVSxJ0TEvm0i5IBzr54RZC4vzW7g==", "requires": { "debug": "^2.2.0", + "gulp": "^4.0.2", "nan": "^2.11.0", "typedarray-to-buffer": "^3.1.5", "yaeti": "^0.0.6" @@ -15625,6 +16244,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", + "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -15651,8 +16275,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typedarray-to-buffer": { "version": "3.1.5", @@ -15705,11 +16328,37 @@ "through": "^2.3.8" } }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, "underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" }, + "undertaker": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", + "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=" + }, "unherit": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", @@ -15764,7 +16413,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -15776,7 +16424,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -15785,7 +16432,6 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -15825,6 +16471,15 @@ "imurmurhash": "^0.1.4" } }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, "unist-util-is": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", @@ -15887,7 +16542,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -15897,7 +16551,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -15908,7 +16561,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -15918,16 +16570,14 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, "upath": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" }, "upper-case": { "version": "1.1.3", @@ -15946,8 +16596,7 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url": { "version": "0.11.0", @@ -16017,8 +16666,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "utf8": { "version": "2.1.1", @@ -16065,11 +16713,18 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, + "v8flags": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", + "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -16080,6 +16735,11 @@ "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16132,6 +16792,57 @@ "unist-util-stringify-position": "^1.1.1" } }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + } + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -16865,7 +17576,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -16873,8 +17583,7 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, "wide-align": { "version": "1.1.3", @@ -17100,7 +17809,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -17229,8 +17937,7 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, "yaeti": { "version": "0.0.6", @@ -17247,7 +17954,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -17267,8 +17973,7 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" } } }, @@ -17276,7 +17981,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, "requires": { "camelcase": "^3.0.0" }, @@ -17284,8 +17988,7 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" } } }, diff --git a/client/package.json b/client/package.json index 78f25c6..700afee 100644 --- a/client/package.json +++ b/client/package.json @@ -39,7 +39,7 @@ "react-popper": "^1.3.3", "react-router-dom": "^5.0.1", "react-transition-group": "^4.1.1", - "truffle-hdwallet-provider": "1.0.5", + "truffle-hdwallet-provider": "^1.0.13", "web3": "1.0.0-beta.37" }, "devDependencies": { diff --git a/cypress.json b/cypress.json index 52b427a..593417f 100644 --- a/cypress.json +++ b/cypress.json @@ -1,8 +1,6 @@ { "baseUrl": "http://localhost:3000", "env": { - "NODE_URI": "https://pacific.oceanprotocol.com", - "SEEDPHRASE": "taxi music thumb unique chat sand crew more leg another off lamp", "CONSUME_ASSET": "did:op:8f0086cf21e84389ad69b3272c56bd0ddc12cd7d98db4e02b4075c481fc2d32d" } } diff --git a/cypress/support/index.js b/cypress/support/index.js index 8797b20..59abc22 100644 --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -1,14 +1,3 @@ /// -import Web3 from 'web3' -import HDWalletProvider from 'truffle-hdwallet-provider' -before(function() { - cy.on('window:before:load', win => { - const provider = new HDWalletProvider( - Cypress.env('SEEDPHRASE'), - Cypress.env('NODE_URI') - ) - win.web3 = new Web3(provider) - win.ethereum = win.web3 - }) -}) +before(function() {}) diff --git a/package-lock.json b/package-lock.json index 9586d3a..b9a57e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -552,7 +552,8 @@ "@types/node": { "version": "10.14.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", - "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==" + "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==", + "dev": true }, "@types/unist": { "version": "2.0.3", @@ -634,15 +635,6 @@ } } }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "acorn": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", @@ -655,15 +647,11 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -707,11 +695,6 @@ "color-convert": "^1.9.0" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, "arch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", @@ -751,11 +734,6 @@ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -797,24 +775,16 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -837,11 +807,6 @@ "lodash": "^4.17.10" } }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, "async-retry": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz", @@ -854,7 +819,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.2", @@ -908,12 +874,14 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "bail": { "version": "1.0.4", @@ -924,7 +892,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -987,15 +956,11 @@ } } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -1006,57 +971,11 @@ "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, "bluebird": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true }, "boxen": { "version": "1.3.0", @@ -1077,6 +996,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1117,77 +1037,6 @@ } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "requires": { - "js-sha3": "^0.6.1", - "safe-buffer": "^5.1.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, "browserslist": { "version": "2.11.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", @@ -1204,38 +1053,11 @@ "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", "dev": true }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true }, "buffer-from": { "version": "1.1.1", @@ -1243,21 +1065,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1399,7 +1206,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "ccount": { "version": "1.0.4", @@ -1477,15 +1285,6 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -1683,18 +1482,11 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", @@ -1710,7 +1502,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -1778,19 +1571,6 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -1800,21 +1580,6 @@ "safe-buffer": "~5.1.1" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1830,16 +1595,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "5.2.0", @@ -1853,15 +1610,6 @@ "parse-json": "^4.0.0" } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, "create-error-class": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", @@ -1871,31 +1619,6 @@ "capture-stack-trace": "^1.0.0" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -1917,24 +1640,6 @@ } } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -2110,6 +1815,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -2124,6 +1830,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -2147,97 +1854,18 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - } + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - } - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -2275,6 +1903,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -2329,12 +1958,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "deprecated-obj": { "version": "1.0.1", @@ -2352,20 +1977,6 @@ "integrity": "sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==", "dev": true }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, "detect-indent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", @@ -2384,16 +1995,6 @@ "pify": "^2.3.0" } }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, "dir-glob": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", @@ -2422,11 +2023,6 @@ "entities": "^1.1.1" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", @@ -2470,22 +2066,19 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, "electron-to-chromium": { "version": "1.3.174", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.174.tgz", @@ -2498,35 +2091,17 @@ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "dev": true }, - "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -2550,6 +2125,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -2563,17 +2139,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2944,111 +2516,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "keccakjs": "^0.2.1", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "^10.3.2", - "aes-js": "3.0.0", - "bn.js": "^4.4.0", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -3064,20 +2531,6 @@ "through": "~2.3.1" } }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -3220,47 +2673,11 @@ } } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -3394,12 +2811,14 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -3424,7 +2843,8 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -3436,6 +2856,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, "requires": { "pend": "~1.2.0" } @@ -3458,16 +2879,6 @@ "flat-cache": "^2.0.1" } }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -3497,20 +2908,6 @@ } } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -3546,14 +2943,6 @@ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3572,23 +2961,20 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3598,62 +2984,23 @@ "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0" - } - }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "requires": { - "any-promise": "^1.3.0", - "fs-extra": "^2.0.0", - "mz": "^2.6.0", - "thenify-all": "^1.6.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -3676,7 +3023,8 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "get-value": { "version": "2.0.6", @@ -3697,6 +3045,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -3724,6 +3073,7 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3796,15 +3146,6 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -3887,36 +3228,11 @@ } } }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, "handlebars": { "version": "4.1.2", @@ -3941,12 +3257,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -3956,6 +3274,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -3983,23 +3302,11 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "^1.4.1" - } + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "has-value": { "version": "1.0.0", @@ -4047,34 +3354,6 @@ } } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "hoek": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", @@ -4126,34 +3405,11 @@ "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -4164,30 +3420,11 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4263,6 +3500,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4271,7 +3509,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.5", @@ -4312,11 +3551,6 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -4380,7 +3614,8 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, "is-ci": { "version": "2.0.0", @@ -4420,7 +3655,8 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-decimal": { "version": "1.0.3", @@ -4495,11 +3731,6 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -4509,11 +3740,6 @@ "is-extglob": "^2.1.1" } }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, "is-hexadecimal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", @@ -4530,11 +3756,6 @@ "is-path-inside": "^1.0.0" } }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -4573,11 +3794,6 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", @@ -4590,7 +3806,8 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true }, "is-plain-object": { "version": "2.0.4", @@ -4637,6 +3854,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, "requires": { "has": "^1.0.1" } @@ -4656,7 +3874,8 @@ "is-retry-allowed": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true }, "is-ssh": { "version": "1.3.1", @@ -4670,7 +3889,8 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, "is-supported-regexp-flag": { "version": "1.0.1", @@ -4682,6 +3902,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -4689,7 +3910,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", @@ -4718,7 +3940,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isemail": { "version": "3.2.0", @@ -4744,16 +3967,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "joi": { "version": "13.7.0", @@ -4772,11 +3987,6 @@ "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true }, - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4796,7 +4006,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsesc": { "version": "2.5.2", @@ -4819,12 +4030,14 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -4835,7 +4048,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "2.1.0", @@ -4854,18 +4068,11 @@ } } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4883,15 +4090,6 @@ "object.assign": "^4.1.0" } }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "requires": { - "browserify-sha3": "^0.0.4", - "sha3": "^1.2.2" - } - }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -5435,7 +4633,8 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { "version": "4.1.5", @@ -5457,6 +4656,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, "requires": { "pify": "^3.0.0" }, @@ -5464,7 +4664,8 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -5528,16 +4729,6 @@ "integrity": "sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==", "dev": true }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "mdast-util-compact": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz", @@ -5547,11 +4738,6 @@ "unist-util-visit": "^1.1.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -5679,22 +4865,12 @@ } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, "merge2": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5716,29 +4892,17 @@ "to-regex": "^3.0.2" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true }, "mime-types": { "version": "2.1.24", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, "requires": { "mime-db": "1.40.0" } @@ -5752,30 +4916,14 @@ "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5783,7 +4931,8 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "minimist-options": { "version": "3.0.2", @@ -5820,22 +4969,16 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "*" - } - }, "mock-fs": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.10.1.tgz", - "integrity": "sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw==" + "integrity": "sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw==", + "dev": true }, "moment": { "version": "2.24.0", @@ -5843,15 +4986,11 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", "dev": true }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "mute-stream": { "version": "0.0.7", @@ -5859,26 +4998,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -5904,11 +5023,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", @@ -6018,31 +5132,17 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-copy": { "version": "0.1.0", @@ -6084,7 +5184,8 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-visit": { "version": "1.0.1", @@ -6178,32 +5279,17 @@ "has": "^1.0.3" } }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "requires": { - "http-https": "^1.0.0" - } - }, "octokit-pagination-methods": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -6296,11 +5382,6 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -6310,7 +5391,8 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "2.1.0", @@ -6342,14 +5424,6 @@ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6412,19 +5486,6 @@ } } }, - "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-entities": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", @@ -6474,15 +5535,6 @@ } } }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "requires": { - "for-each": "^0.3.3", - "string.prototype.trim": "^1.1.2" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -6515,11 +5567,6 @@ "protocols": "^1.4.0" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6541,7 +5588,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -6561,11 +5609,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -6592,27 +5635,17 @@ "through": "~2.3" } }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "picomatch": { "version": "2.0.7", @@ -6623,17 +5656,20 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -7006,7 +6042,8 @@ "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true }, "preserve": { "version": "0.2.0", @@ -7508,15 +6545,11 @@ } } }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -7541,15 +6574,6 @@ "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==", "dev": true }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" - } - }, "ps-tree": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", @@ -7568,20 +6592,8 @@ "psl": { "version": "1.1.33", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", - "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } + "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==", + "dev": true }, "pump": { "version": "3.0.0", @@ -7596,22 +6608,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "querystring": { "version": "0.2.0", @@ -7650,44 +6648,6 @@ } } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -7812,6 +6772,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8086,6 +7047,7 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -8112,7 +7074,8 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true } } }, @@ -8209,19 +7172,11 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -8249,7 +7204,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -8263,45 +7219,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "^2.0.8" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "^6.0.2", - "scryptsy": "^1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "~2.8.1" - } + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "semver": { "version": "6.0.0", @@ -8326,56 +7245,6 @@ } } }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -8405,33 +7274,6 @@ } } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "sha3": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.3.tgz", - "integrity": "sha512-sOWDZi8cDBRkLfWOw18wvJyNblXDHzwMGnRWut8zNNeIeLnmMRO17bjpLc7OzMuj1ASUgx2IyohzUCAl+Kx5vA==", - "requires": { - "nan": "2.13.2" - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -8464,21 +7306,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -8707,6 +7534,7 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -8802,11 +7630,6 @@ } } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -8822,11 +7645,6 @@ "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -8848,20 +7666,11 @@ } } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -8901,28 +7710,12 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "^4.0.1" - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -9505,26 +8298,6 @@ "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", "dev": true }, - "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "decompress": "^4.0.0", - "eth-lib": "^0.1.26", - "fs-extra": "^2.1.2", - "fs-promise": "^2.0.0", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar.gz": "^1.0.5", - "xhr-request-promise": "^0.1.2" - } - }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", @@ -9567,49 +8340,6 @@ } } }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "tar.gz": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "requires": { - "bluebird": "^2.9.34", - "commander": "^2.8.1", - "fstream": "^1.0.8", - "mout": "^0.11.0", - "tar": "^2.1.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - } - } - }, "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -9691,22 +8421,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "throttleit": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", @@ -9716,12 +8430,14 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true }, "tmp": { "version": "0.0.33", @@ -9732,11 +8448,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -9797,11 +8508,6 @@ "repeat-string": "^1.6.1" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, "topo": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", @@ -9823,6 +8529,7 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -9831,7 +8538,8 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, @@ -9871,17 +8579,6 @@ "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", "dev": true }, - "truffle-hdwallet-provider": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/truffle-hdwallet-provider/-/truffle-hdwallet-provider-1.0.11.tgz", - "integrity": "sha512-4J+cB//8zGDWnsU5i6nSQG0BET2NkN+9TuraS61FkhSsYtYcDvKr23ZjvI44XzKnxvB2i8sMr+WGfzNDtZme0A==", - "requires": { - "any-promise": "^1.3.0", - "bindings": "^1.3.1", - "web3": "1.0.0-beta.37", - "websocket": "^1.0.28" - } - }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -9901,6 +8598,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -9908,7 +8606,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "type-check": { "version": "0.3.2", @@ -9919,29 +8618,12 @@ "prelude-ls": "~1.1.2" } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", @@ -9975,25 +8657,6 @@ } } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, "unherit": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", @@ -10108,11 +8771,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -10204,6 +8862,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -10242,51 +8901,34 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, "requires": { "prepend-http": "^1.0.1" } }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, "url-template": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", "dev": true }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -10298,15 +8940,11 @@ "spdx-expression-parse": "^3.0.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -10378,310 +9016,6 @@ "defaults": "^1.0.3" } }, - "web3": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.37.tgz", - "integrity": "sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ==", - "requires": { - "web3-bzz": "1.0.0-beta.37", - "web3-core": "1.0.0-beta.37", - "web3-eth": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-shh": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-bzz": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.37.tgz", - "integrity": "sha512-E+dho49Nsm/QpQvYWOF35YDsQrMvLB19AApENxhlQsu6HpWQt534DQul0t3Y/aAh8rlKD6Kanxt8LhHDG3vejQ==", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.37.tgz", - "integrity": "sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg==", - "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-requestmanager": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz", - "integrity": "sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz", - "integrity": "sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.37.tgz", - "integrity": "sha512-GTF2r1lP8nJBeA5Gxq5yZpJy9l8Fb9CXGZPfF8jHvaRdQHtm2Z+NDhqYmF833lcdkokRSyfPcXlz1mlWeClFpg==", - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.37.tgz", - "integrity": "sha512-66VUqye5BGp1Zz1r8psCxdNH+GtTjaFwroum2Osx+wbC5oRjAiXkkadiitf6wRb+edodjEMPn49u7B6WGNuewQ==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "web3-providers-http": "1.0.0-beta.37", - "web3-providers-ipc": "1.0.0-beta.37", - "web3-providers-ws": "1.0.0-beta.37" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz", - "integrity": "sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" - } - }, - "web3-eth": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.37.tgz", - "integrity": "sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-accounts": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-eth-ens": "1.0.0-beta.37", - "web3-eth-iban": "1.0.0-beta.37", - "web3-eth-personal": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz", - "integrity": "sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA==", - "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz", - "integrity": "sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g==", - "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz", - "integrity": "sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz", - "integrity": "sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-promievent": "1.0.0-beta.37", - "web3-eth-abi": "1.0.0-beta.37", - "web3-eth-contract": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz", - "integrity": "sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.37" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz", - "integrity": "sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-helpers": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-net": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.37.tgz", - "integrity": "sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-utils": "1.0.0-beta.37" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.37.tgz", - "integrity": "sha512-FM/1YDB1jtZuTo78habFj7S9tNHoqt0UipdyoQV29b8LkGKZV9Vs3is8L24hzuj1j/tbwkcAH+ewIseHwu0DTg==", - "requires": { - "web3-core-helpers": "1.0.0-beta.37", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.37.tgz", - "integrity": "sha512-NdRPRxYMIU0C3u18NI8u4bwbhI9pCg5nRgDGYcmSAx5uOBxiYcQy+hb0WkJRRhBoyIXJmy+s26FoH8904+UnPg==", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.37.tgz", - "integrity": "sha512-8p6ZLv+1JYa5Vs8oBn33Nn3VGFBbF+wVfO+b78RJS1Qf1uIOzjFVDk3XwYDD7rlz9G5BKpxhaQw+6EGQ7L02aw==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.37", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" - }, - "dependencies": { - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", - "requires": { - "debug": "^2.2.0", - "nan": "^2.3.3", - "typedarray-to-buffer": "^3.1.2", - "yaeti": "^0.0.6" - } - } - } - }, - "web3-shh": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.37.tgz", - "integrity": "sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw==", - "requires": { - "web3-core": "1.0.0-beta.37", - "web3-core-method": "1.0.0-beta.37", - "web3-core-subscriptions": "1.0.0-beta.37", - "web3-net": "1.0.0-beta.37" - } - }, - "web3-utils": { - "version": "1.0.0-beta.37", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.37.tgz", - "integrity": "sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ==", - "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "websocket": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.28.tgz", - "integrity": "sha512-00y/20/80P7H4bCYkzuuvvfDvh+dgtXi5kzDf3UcZwN6boTYaKvsrtZ5lIYm1Gsg48siMErd9M4zjSYfYFHTrA==", - "requires": { - "debug": "^2.2.0", - "nan": "^2.11.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -10821,7 +9155,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", @@ -10843,16 +9178,6 @@ "signal-exit": "^3.0.2" } }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, "x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", @@ -10865,56 +9190,11 @@ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", "dev": true }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "~4.3.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "^1.0.1" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "^2.1.1" - } - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { "version": "4.0.0", @@ -10922,11 +9202,6 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", @@ -10993,6 +9268,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index 99fa87c..e550d2f 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,7 @@ "cypress:run": "cypress run --browser chrome", "cypress:open": "cypress open" }, - "dependencies": { - "truffle-hdwallet-provider": "^1.0.10", - "web3": "1.0.0-beta.37" - }, + "dependencies": {}, "devDependencies": { "@release-it/bumper": "^1.0.3", "@typescript-eslint/eslint-plugin": "^1.11.0", From 87c54d2cb87a73973706d4fe26d753326defec54 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 17:29:33 +0200 Subject: [PATCH 14/39] fix unit tests --- .../molecules/AccountStatus/index.test.tsx | 4 +- .../components/organisms/Web3message.test.tsx | 6 +- .../src/components/organisms/Web3message.tsx | 4 +- client/src/routes/History.test.tsx | 16 --- package-lock.json | 109 +++++++++--------- package.json | 2 +- 6 files changed, 59 insertions(+), 82 deletions(-) diff --git a/client/src/components/molecules/AccountStatus/index.test.tsx b/client/src/components/molecules/AccountStatus/index.test.tsx index 47e6bd1..ecaca32 100644 --- a/client/src/components/molecules/AccountStatus/index.test.tsx +++ b/client/src/components/molecules/AccountStatus/index.test.tsx @@ -10,9 +10,7 @@ describe('AccountStatus', () => { it('togglePopover fires', () => { const { container } = render() - - const indicator = container.querySelector('.statusIndicator') - + const indicator = container.querySelector('.status') indicator && fireEvent.mouseOver(indicator) expect(container.querySelector('.popover')).toBeInTheDocument() indicator && fireEvent.mouseOut(indicator) diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index b8dde63..024956c 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -8,7 +8,7 @@ describe('Web3message', () => { it('renders with burner wallet message', () => { const { container } = render( - + ) expect(container.firstChild).toHaveTextContent('Burner Wallet') @@ -19,7 +19,7 @@ describe('Web3message', () => { - + ) expect(container.firstChild).toHaveTextContent( @@ -30,7 +30,7 @@ describe('Web3message', () => { it('renders with noAccount message', () => { const { container } = render( - + ) expect(container.firstChild).toHaveTextContent('No wallet selected.') diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 7339e96..7d7340f 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -33,14 +33,14 @@ export default class Web3message extends PureComponent<{ extended?: boolean }> { {this.props.extended && ( -

+

-

+
)} ) diff --git a/client/src/routes/History.test.tsx b/client/src/routes/History.test.tsx index 7bca7e4..b02542f 100644 --- a/client/src/routes/History.test.tsx +++ b/client/src/routes/History.test.tsx @@ -1,9 +1,7 @@ import React from 'react' import { render } from '@testing-library/react' import { MemoryRouter } from 'react-router' -import { User } from '../context' import History from './History' -import { userMock } from '../../__mocks__/user-mock' describe('History', () => { it('renders without crashing', () => { @@ -14,18 +12,4 @@ describe('History', () => { ) expect(container.firstChild).toBeInTheDocument() }) - - it('outputs no wallet selected', () => { - const { container } = render( - - - - - - ) - expect(container.querySelector('.message')).toBeInTheDocument() - expect(container.querySelector('.message')).toHaveTextContent( - 'No wallet selected.' - ) - }) }) diff --git a/package-lock.json b/package-lock.json index b9a57e5..e06e1ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1487,6 +1487,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", @@ -1656,9 +1662,9 @@ } }, "cypress": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-3.3.1.tgz", - "integrity": "sha512-JIo47ZD9P3jAw7oaK7YKUoODzszJbNw41JmBrlMMiupHOlhmXvZz75htuo7mfRFPC9/1MDQktO4lX/V2+a6lGQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-3.4.0.tgz", + "integrity": "sha512-vUE+sK3l23fhs5qTN3dKpveyP0fGr37VmK3FSYaTEjbqC/qh4DbA1Ych/3bLStUpHP4rpE5KAx7i1s/tpdD9vQ==", "dev": true, "requires": { "@cypress/listr-verbose-renderer": "0.4.1", @@ -1674,7 +1680,7 @@ "execa": "0.10.0", "executable": "4.1.1", "extract-zip": "1.6.7", - "fs-extra": "4.0.1", + "fs-extra": "5.0.0", "getos": "3.1.1", "glob": "7.1.3", "is-ci": "1.2.1", @@ -1687,7 +1693,7 @@ "moment": "2.24.0", "ramda": "0.24.1", "request": "2.88.0", - "request-progress": "0.4.0", + "request-progress": "3.0.0", "supports-color": "5.5.0", "tmp": "0.1.0", "url": "0.11.0", @@ -1706,12 +1712,6 @@ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -1736,17 +1736,6 @@ "strip-eof": "^1.0.0" } }, - "fs-extra": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz", - "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -1770,15 +1759,6 @@ "ci-info": "^1.5.0" } }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -2788,15 +2768,6 @@ "yauzl": "2.4.1" }, "dependencies": { - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, "yauzl": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", @@ -2853,9 +2824,9 @@ "dev": true }, "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, "requires": { "pend": "~1.2.0" @@ -2990,6 +2961,17 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4068,6 +4050,15 @@ } } }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -5035,12 +5026,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-eta": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/node-eta/-/node-eta-0.1.1.tgz", - "integrity": "sha1-QGYQmzk3HHYccrfr2pqeoKXeEh8=", - "dev": true - }, "node-fetch": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", @@ -7080,13 +7065,12 @@ } }, "request-progress": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.4.0.tgz", - "integrity": "sha1-wZVOOQhqqFJpxWYLzuAUKmpw1+c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", "dev": true, "requires": { - "node-eta": "^0.1.1", - "throttleit": "^0.0.2" + "throttleit": "^1.0.0" } }, "require-directory": { @@ -8422,9 +8406,9 @@ "dev": true }, "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", "dev": true }, "through": { @@ -9272,6 +9256,17 @@ "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" + }, + "dependencies": { + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + } } } } diff --git a/package.json b/package.json index e550d2f..671a27f 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/parser": "^1.11.0", "auto-changelog": "^1.13.0", "concurrently": "^4.1.1", - "cypress": "^3.3.1", + "cypress": "^3.4.0", "eslint": "^5.16.0", "eslint-config-oceanprotocol": "^1.3.0", "eslint-config-prettier": "^6.0.0", From 0befc3a5971f920ff3db7d500e5577b2f2c85e3a Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 18:46:28 +0200 Subject: [PATCH 15/39] output seed prase for burner wallet account, messaging tweaks --- .../src/components/atoms/Account.module.scss | 48 ++++++++++- client/src/components/atoms/Account.tsx | 85 ++++++++++++++----- .../VersionTableRow.module.scss | 10 ++- .../VersionNumbers/VersionTableRow.tsx | 7 +- .../organisms/WalletSelector.module.scss | 3 +- .../src/components/organisms/Web3message.tsx | 5 +- client/src/data/web3message.json | 11 +-- client/src/img/caret.svg | 3 + client/src/routes/Publish/index.tsx | 5 -- 9 files changed, 135 insertions(+), 42 deletions(-) create mode 100644 client/src/img/caret.svg diff --git a/client/src/components/atoms/Account.module.scss b/client/src/components/atoms/Account.module.scss index 48ab5d8..3cbfb22 100644 --- a/client/src/components/atoms/Account.module.scss +++ b/client/src/components/atoms/Account.module.scss @@ -13,7 +13,7 @@ text-overflow: ellipsis; font-family: $font-family-monospace; font-size: $font-size-small; - font-weight: $font-weight-bold; + font-weight: 700; } } @@ -21,9 +21,55 @@ width: 100%; margin-left: calc(1.5rem + #{$spacer / 3}); font-size: $font-size-small; + font-weight: $font-weight-bold; color: $brand-grey-light; } +.toggle { + background: none; + font-family: inherit; + font-size: inherit; + font-weight: inherit; + color: inherit; + border: none; + padding: 0; + cursor: pointer; + + svg { + display: inline-block; + fill: currentColor; + margin-right: $spacer / 8; + transition: .2s ease-out; + } +} + +.open { + transform: rotate(90deg); +} + +.seedphrase { + margin-top: $spacer / 2; + margin-left: calc(1.5rem + #{$spacer / 4}); + margin-right: calc(1.5rem + #{$spacer / 4}); + + code { + display: block; + text-align: center; + padding: $spacer / 2 $spacer; + border-radius: $border-radius; + background: $body-background; + border: 1px solid $brand-grey-lighter; + margin-bottom: $spacer / 4; + word-break: normal; + } +} + +.seedphraseHelp { + color: $brand-grey-light; + font-size: $font-size-small; + margin: 0; +} + .blockies { width: 1.5rem; height: 1.5rem; diff --git a/client/src/components/atoms/Account.tsx b/client/src/components/atoms/Account.tsx index 3e632f1..47ec9b3 100644 --- a/client/src/components/atoms/Account.tsx +++ b/client/src/components/atoms/Account.tsx @@ -1,30 +1,71 @@ -import React from 'react' +import React, { PureComponent } from 'react' import Dotdotdot from 'react-dotdotdot' import { toDataUrl } from 'ethereum-blockies' import styles from './Account.module.scss' import WalletSelector from '../organisms/WalletSelector' +import content from '../../data/web3message.json' +import { ReactComponent as Caret } from '../../img/caret.svg' -const Account = ({ - account, - isBurner -}: { - account: string - isBurner: boolean -}) => { - const blockies = account && toDataUrl(account) +export default class Account extends PureComponent< + { + account: string + isBurner: boolean + extended?: boolean + }, + { isAccountOpen: boolean } +> { + public state = { + isAccountOpen: false + } - return account && blockies ? ( -
- Blockies - {account} -
- {isBurner ? 'Burner Wallet' : 'MetaMask'} - + private toggleAccountInfo() { + this.setState({ isAccountOpen: !this.state.isAccountOpen }) + } + + public render() { + const { account, isBurner, extended } = this.props + const seedphrase = localStorage.getItem('seedphrase') as string + + const blockies = account && toDataUrl(account) + return account && blockies ? ( +
+ Blockies + {account} +
+ {isBurner ? ( + + ) : ( + 'MetaMask' + )} + +
+ + {isBurner && this.state.isAccountOpen && ( +
+ {seedphrase} +

+ {content.seedphrase} +

+
+ )}
-
- ) : ( - No account selected - ) + ) : ( + No account selected + ) + } } - -export default Account diff --git a/client/src/components/molecules/VersionNumbers/VersionTableRow.module.scss b/client/src/components/molecules/VersionNumbers/VersionTableRow.module.scss index 53de934..fd7ace9 100644 --- a/client/src/components/molecules/VersionNumbers/VersionTableRow.module.scss +++ b/client/src/components/molecules/VersionNumbers/VersionTableRow.module.scss @@ -11,5 +11,13 @@ margin-top: -.1rem; padding-right: .5rem; cursor: pointer; - color: $brand-grey-light; + + svg { + fill: $brand-grey-light; + transition: .2s ease-out; + } +} + +.open { + transform: rotate(90deg); } diff --git a/client/src/components/molecules/VersionNumbers/VersionTableRow.tsx b/client/src/components/molecules/VersionNumbers/VersionTableRow.tsx index 3656a7c..c52a36a 100644 --- a/client/src/components/molecules/VersionNumbers/VersionTableRow.tsx +++ b/client/src/components/molecules/VersionNumbers/VersionTableRow.tsx @@ -4,6 +4,7 @@ import slugify from '@sindresorhus/slugify' import styles from './VersionTableRow.module.scss' import { VersionTableContracts, VersionTableCommons } from './VersionTable' import VersionNumber from './VersionNumber' +import { ReactComponent as Caret } from '../../../img/caret.svg' const VersionTableRow = ({ value }: { value: any }) => { const collapseStyles = { @@ -26,11 +27,7 @@ const VersionTableRow = ({ value }: { value: any }) => { {(value.name === 'Commons' || value.contracts) && ( )} { } public render() { + const { network } = this.context + return (
- {this.props.extended && ( + {(network !== 'Pacific' || this.props.extended) && (
migrate to MetaMask.", - "hasMetaMaskWallet": "Connected with MetaMask.", - "wrongNetworkPacific": "Not connected to Pacific network.
Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", - "wrongNetworkNile": "Not connected to Nile network.
Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", - "wrongNetworkDuero": "Not connected to Duero network.
Please connect in MetaMask with Custom RPC https://duero.dev-ocean.com" + "hasBurnerWallet": "We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side, and without a Web3-capable browser. This wallet will persist in your browser across sessions, but not across different browsers or devices. Never use this burner wallet to send or receive any tokens. To personalize your experience and improve your security, migrate to MetaMask.", + "hasMetaMaskWallet": "Connected with MetaMask. You're a Pro.", + "wrongNetworkPacific": "Not connected to Pacific network. Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", + "wrongNetworkNile": "Not connected to Nile network. Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", + "wrongNetworkDuero": "Not connected to Duero network. Please connect in MetaMask with Custom RPC https://duero.dev-ocean.com", + "seedphrase": "You can use this seed phrase to import this burner wallet account into other wallets, e.g. MetaMask." } diff --git a/client/src/img/caret.svg b/client/src/img/caret.svg new file mode 100644 index 0000000..220b1bb --- /dev/null +++ b/client/src/img/caret.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/src/routes/Publish/index.tsx b/client/src/routes/Publish/index.tsx index bc61a03..6fac626 100644 --- a/client/src/routes/Publish/index.tsx +++ b/client/src/routes/Publish/index.tsx @@ -326,11 +326,6 @@ export default class Publish extends Component<{}, PublishState> { description={`Publish a new data set into the Ocean Protocol ${market.network} Network.`} > - {(!this.context.isLogged || - !this.context.isOceanNetwork) && ( - - )} - Date: Wed, 10 Jul 2019 20:27:06 +0200 Subject: [PATCH 16/39] address locked MetaMask account use case --- .../src/components/atoms/Account.module.scss | 21 ++++-- client/src/components/atoms/Account.tsx | 64 ++++++++++++------- .../AccountStatus/Popover.module.scss | 5 +- .../molecules/AccountStatus/Popover.tsx | 10 +-- .../src/components/organisms/Web3message.tsx | 10 +-- client/src/data/web3message.json | 2 +- client/src/routes/Publish/index.tsx | 1 - 7 files changed, 66 insertions(+), 47 deletions(-) diff --git a/client/src/components/atoms/Account.module.scss b/client/src/components/atoms/Account.module.scss index 3cbfb22..22e5eac 100644 --- a/client/src/components/atoms/Account.module.scss +++ b/client/src/components/atoms/Account.module.scss @@ -8,15 +8,23 @@ > div:first-of-type { flex: 0 0 80%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-family: $font-family-monospace; - font-size: $font-size-small; - font-weight: 700; } } +.accountId { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-family: $font-family-monospace; + font-size: $font-size-small; + font-weight: 700; +} + +.unlock { + font-size: $font-size-small !important; // stylelint-disable-line + margin-left: $spacer / 2; +} + .accountType { width: 100%; margin-left: calc(1.5rem + #{$spacer / 3}); @@ -77,4 +85,5 @@ display: inline-block; margin-right: $spacer / 3; margin-left: 0; + border: 1px solid $brand-grey-lighter; } diff --git a/client/src/components/atoms/Account.tsx b/client/src/components/atoms/Account.tsx index 47ec9b3..2e9ed9d 100644 --- a/client/src/components/atoms/Account.tsx +++ b/client/src/components/atoms/Account.tsx @@ -5,36 +5,58 @@ import styles from './Account.module.scss' import WalletSelector from '../organisms/WalletSelector' import content from '../../data/web3message.json' import { ReactComponent as Caret } from '../../img/caret.svg' +import { User } from '../../context' +import Button from './Button' export default class Account extends PureComponent< - { - account: string - isBurner: boolean - extended?: boolean - }, - { isAccountOpen: boolean } + {}, + { isAccountInfoOpen: boolean } > { + public static contextType = User + public state = { - isAccountOpen: false + isAccountInfoOpen: false } private toggleAccountInfo() { - this.setState({ isAccountOpen: !this.state.isAccountOpen }) + this.setState({ isAccountInfoOpen: !this.state.isAccountInfoOpen }) } public render() { - const { account, isBurner, extended } = this.props + const { account, isBurner, loginMetamask } = this.context + const { isAccountInfoOpen } = this.state const seedphrase = localStorage.getItem('seedphrase') as string - const blockies = account && toDataUrl(account) - return account && blockies ? ( + + return (
- Blockies - {account} + {account ? ( + <> + Blockies + + {account} + + + ) : ( + <> + + + No account selected + + + + )} +
{isBurner ? ( @@ -55,7 +75,7 @@ export default class Account extends PureComponent<
- {isBurner && this.state.isAccountOpen && ( + {isBurner && isAccountInfoOpen && (
{seedphrase}

@@ -64,8 +84,6 @@ export default class Account extends PureComponent<

)}
- ) : ( - No account selected ) } } diff --git a/client/src/components/molecules/AccountStatus/Popover.module.scss b/client/src/components/molecules/AccountStatus/Popover.module.scss index 5df8fc4..37a9ce1 100644 --- a/client/src/components/molecules/AccountStatus/Popover.module.scss +++ b/client/src/components/molecules/AccountStatus/Popover.module.scss @@ -41,7 +41,10 @@ $popoverWidth: 18rem; } button { - display: none; + svg, + &:last-child { + display: none; + } } } diff --git a/client/src/components/molecules/AccountStatus/Popover.tsx b/client/src/components/molecules/AccountStatus/Popover.tsx index d5590f0..51b990f 100644 --- a/client/src/components/molecules/AccountStatus/Popover.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.tsx @@ -8,13 +8,7 @@ export default class Popover extends PureComponent<{ style?: React.CSSProperties }> { public render() { - const { - account, - balance, - network, - isOceanNetwork, - isBurner - } = this.context + const { account, balance, network, isOceanNetwork } = this.context return (
- +
{account && balance && ( diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index 4f039a7..bda7158 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -9,7 +9,7 @@ export default class Web3message extends PureComponent<{ extended?: boolean }> { public static contextType = User private message = () => { - const { isOceanNetwork, isLogged, isBurner } = this.context + const { isOceanNetwork, isLogged, isBurner, network } = this.context return !isOceanNetwork && !isBurner ? content.wrongNetworkPacific @@ -18,7 +18,7 @@ export default class Web3message extends PureComponent<{ extended?: boolean }> { : isBurner ? content.hasBurnerWallet : isLogged - ? content.hasMetaMaskWallet + ? content.hasMetaMaskWallet.replace('NETWORK', network) : '' } @@ -28,11 +28,7 @@ export default class Web3message extends PureComponent<{ extended?: boolean }> { return (
- +
{(network !== 'Pacific' || this.props.extended) && ( diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index ca79acc..4c35e04 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -1,7 +1,7 @@ { "noAccount": "No wallet selected. For publishing and downloading an asset you need to use one.", "hasBurnerWallet": "We created a temporary burner wallet for you, allowing you to use all Commons functionality without any setup on your side, and without a Web3-capable browser. This wallet will persist in your browser across sessions, but not across different browsers or devices. Never use this burner wallet to send or receive any tokens. To personalize your experience and improve your security, migrate to MetaMask.", - "hasMetaMaskWallet": "Connected with MetaMask. You're a Pro.", + "hasMetaMaskWallet": "Connected with MetaMask to NETWORK. You're a Pro.", "wrongNetworkPacific": "Not connected to Pacific network. Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", "wrongNetworkNile": "Not connected to Nile network. Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", "wrongNetworkDuero": "Not connected to Duero network. Please connect in MetaMask with Custom RPC https://duero.dev-ocean.com", diff --git a/client/src/routes/Publish/index.tsx b/client/src/routes/Publish/index.tsx index 6fac626..1583b45 100644 --- a/client/src/routes/Publish/index.tsx +++ b/client/src/routes/Publish/index.tsx @@ -4,7 +4,6 @@ import Route from '../../components/templates/Route' import Form from '../../components/atoms/Form/Form' import AssetModel from '../../models/AssetModel' import { User, Market } from '../../context' -import Web3message from '../../components/organisms/Web3message' import Step from './Step' import Progress from './Progress' import ReactGA from 'react-ga' From 0d6875f06581713e35842b34031497967307b24f Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 21:24:02 +0200 Subject: [PATCH 17/39] style wallet selection modal, move out content --- .../organisms/WalletSelector.module.scss | 34 ++++++-- .../components/organisms/WalletSelector.tsx | 83 +++++++++++++------ client/src/data/wallets.json | 16 ++++ 3 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 client/src/data/wallets.json diff --git a/client/src/components/organisms/WalletSelector.module.scss b/client/src/components/organisms/WalletSelector.module.scss index aa08bfe..2989d26 100644 --- a/client/src/components/organisms/WalletSelector.module.scss +++ b/client/src/components/organisms/WalletSelector.module.scss @@ -16,14 +16,17 @@ background: $brand-white; border: 1px solid $brand-grey-lighter; border-radius: $border-radius; - padding: $spacer $spacer / 1.5; + line-height: 1.5; + padding: $spacer / 1.5; font-family: $font-family-base; - display: inline-block; display: flex; flex-wrap: wrap; + align-items: flex-start; + text-align: left; cursor: pointer; transition: border .2s ease-out; margin-bottom: $spacer; + position: relative; @media (min-width: $break-point--small) { flex-basis: 48%; @@ -34,20 +37,37 @@ &:focus { border-color: $brand-pink; } +} - span { - display: block; - width: 100%; - } +.buttonActive { + composes: button; + pointer-events: none; + background: $body-background; +} + +.selected { + position: absolute; + right: $spacer / 3; + top: $spacer / 4; + color: $brand-grey-light; + font-weight: $font-weight-bold; +} + +.buttonIcon { + font-size: $font-size-h4; + display: inline-block; + margin-right: $spacer / 4; } .buttonTitle { font-size: $font-size-base; margin-bottom: $spacer / 2; font-weight: $font-weight-bold; + margin-top: 0; } .buttonDescription { font-size: $font-size-small; - color: $brand-grey; + font-weight: $font-weight-bold; + color: $brand-grey-light; } diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index 93243e0..11327b5 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -3,6 +3,7 @@ import Modal from '../atoms/Modal' import { User } from '../../context' import styles from './WalletSelector.module.scss' import Button from '../atoms/Button' +import content from '../../data/wallets.json' export default class WalletSelector extends PureComponent< {}, @@ -29,6 +30,50 @@ export default class WalletSelector extends PureComponent< this.toggleModal() } + private WalletButton = ({ + title, + description, + icon + }: { + title: string + description: string + icon: string + }) => { + const active = + (title === 'Burner Wallet' && this.context.isBurner) || + (title === 'MetaMask' && !this.context.isBurner) + + return ( + + ) + } + public render() { return ( <> @@ -37,39 +82,23 @@ export default class WalletSelector extends PureComponent< className={styles.openLink} onClick={this.toggleModal} > - Select wallet + {content.title}
- - + {content.buttons.map(({ title, description, icon }) => ( + + ))}
diff --git a/client/src/data/wallets.json b/client/src/data/wallets.json new file mode 100644 index 0000000..81ad512 --- /dev/null +++ b/client/src/data/wallets.json @@ -0,0 +1,16 @@ +{ + "title": "Select wallet", + "description": "Select the wallet you want to use in the Commons Marketplace. By default, we create a burner wallet in your browser allowing you to use all functionality without further setup.", + "buttons": [ + { + "title": "Burner Wallet", + "icon": "🔥", + "description": "Easiest way to use Commons without further setup. But the wallet will be gone when you change browsers or clear your cache." + }, + { + "title": "MetaMask", + "icon": "🦊", + "description": "Most secure experience attaching everything you do in Commons to an account you control. But you need to setup MetaMask first." + } + ] +} From 725b5884bbc22f2a1e24534a7e351f1c8df4be1c Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Wed, 10 Jul 2019 21:51:07 +0200 Subject: [PATCH 18/39] fill burner account with Ether automatically --- client/src/context/BurnerWalletProvider.ts | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/client/src/context/BurnerWalletProvider.ts b/client/src/context/BurnerWalletProvider.ts index f1f0037..8040d7a 100644 --- a/client/src/context/BurnerWalletProvider.ts +++ b/client/src/context/BurnerWalletProvider.ts @@ -1,6 +1,7 @@ import Web3 from 'web3' import { nodeUri } from '../config' import HDWalletProvider from 'truffle-hdwallet-provider' +import { requestFromFaucet } from '../ocean' const bip39 = require('bip39') // eslint-disable-line @typescript-eslint/no-var-requires export class BurnerWalletProvider { @@ -23,18 +24,22 @@ export class BurnerWalletProvider { } public async startLogin() { - if (await this.isLogged()) { - const mnemonic = localStorage.getItem('seedphrase') as string - localStorage.setItem('logType', 'BurnerWallet') - const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1) - this.web3 = new Web3(provider) + let mnemonic + const isLogged = await this.isLogged() + + if (isLogged) { + mnemonic = (await localStorage.getItem('seedphrase')) as string } else { - const mnemonic = bip39.generateMnemonic() + mnemonic = bip39.generateMnemonic() localStorage.setItem('seedphrase', mnemonic) - localStorage.setItem('logType', 'BurnerWallet') - const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1) - this.web3 = new Web3(provider) } + + localStorage.setItem('logType', 'BurnerWallet') + const provider = new HDWalletProvider(mnemonic, `${nodeUri}`, 0, 1) + this.web3 = new Web3(provider) + + // fill with Ether + await requestFromFaucet(provider.addresses[0]) } public async logout() { From 25ab6e0c42191bea057ed62cf9c24efe8f73c6e5 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 11 Jul 2019 12:41:12 +0200 Subject: [PATCH 19/39] spacing --- .../molecules/VersionNumbers/VersionTable.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/molecules/VersionNumbers/VersionTable.module.scss b/client/src/components/molecules/VersionNumbers/VersionTable.module.scss index 3ecf21e..648a20d 100644 --- a/client/src/components/molecules/VersionNumbers/VersionTable.module.scss +++ b/client/src/components/molecules/VersionNumbers/VersionTable.module.scss @@ -26,7 +26,7 @@ } td { - padding: $spacer / 4 $spacer / 2; + padding: $spacer / 4 $spacer / 2 $spacer / 4 $spacer * 1.3; vertical-align: top; &:last-child { From b4db8a6556575698b13a3866599625141fd9a174 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Thu, 11 Jul 2019 14:04:40 +0200 Subject: [PATCH 20/39] add isWeb3Capable --- client/src/context/UserProvider.tsx | 2 ++ client/src/context/index.tsx | 1 + 2 files changed, 3 insertions(+) diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index d66d84d..4d85a85 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -49,6 +49,7 @@ declare global { interface UserProviderState { isLogged: boolean isBurner: boolean + isWeb3Capable: boolean isLoading: boolean isOceanNetwork: boolean account: string @@ -107,6 +108,7 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { public state = { isLogged: false, isBurner: false, + isWeb3Capable: Boolean(window.web3 || window.ethereum), isLoading: true, isOceanNetwork: false, balance: { diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index f78e3ce..ab1f187 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -3,6 +3,7 @@ import React from 'react' export const User = React.createContext({ isLogged: false, isBurner: false, + isWeb3Capable: false, isLoading: false, isOceanNetwork: false, account: '', From 4f051deefa95d5c868d2cc1d86515890ce5e7405 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 11 Jul 2019 14:54:43 +0200 Subject: [PATCH 21/39] hide wallet selection in non-Web3 browsers --- client/src/components/atoms/Account.tsx | 4 ++-- .../components/molecules/AccountStatus/Popover.module.scss | 5 ++++- client/src/components/organisms/WalletSelector.tsx | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/src/components/atoms/Account.tsx b/client/src/components/atoms/Account.tsx index 2e9ed9d..cb6f313 100644 --- a/client/src/components/atoms/Account.tsx +++ b/client/src/components/atoms/Account.tsx @@ -23,7 +23,7 @@ export default class Account extends PureComponent< } public render() { - const { account, isBurner, loginMetamask } = this.context + const { account, isBurner, loginMetamask, isWeb3Capable } = this.context const { isAccountInfoOpen } = this.state const seedphrase = localStorage.getItem('seedphrase') as string const blockies = account && toDataUrl(account) @@ -72,7 +72,7 @@ export default class Account extends PureComponent< ) : ( 'MetaMask' )} - + {isWeb3Capable && }
{isBurner && isAccountInfoOpen && ( diff --git a/client/src/components/molecules/AccountStatus/Popover.module.scss b/client/src/components/molecules/AccountStatus/Popover.module.scss index 37a9ce1..273b3b3 100644 --- a/client/src/components/molecules/AccountStatus/Popover.module.scss +++ b/client/src/components/molecules/AccountStatus/Popover.module.scss @@ -40,12 +40,15 @@ $popoverWidth: 18rem; border-bottom: 0; } + /* stylelint-disable */ button { svg, - &:last-child { + &[data-action] { display: none; } } + + /* stylelint-enable */ } .balance { diff --git a/client/src/components/organisms/WalletSelector.tsx b/client/src/components/organisms/WalletSelector.tsx index 11327b5..e45110d 100644 --- a/client/src/components/organisms/WalletSelector.tsx +++ b/client/src/components/organisms/WalletSelector.tsx @@ -81,6 +81,7 @@ export default class WalletSelector extends PureComponent< link className={styles.openLink} onClick={this.toggleModal} + data-action="wallet" > {content.title} From e488b9f001cf4782c6feccedc97931c5574ad9c4 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 11 Jul 2019 15:45:49 +0200 Subject: [PATCH 22/39] Ocean network detection, remove isOceanNetwork --- client/__mocks__/user-mock.ts | 2 - .../molecules/AccountStatus/Indicator.tsx | 22 ++++--- .../molecules/AccountStatus/Popover.test.tsx | 1 - .../molecules/AccountStatus/Popover.tsx | 32 +++++++--- .../src/components/organisms/AssetsUser.tsx | 3 +- .../components/organisms/Web3message.test.tsx | 6 +- .../src/components/organisms/Web3message.tsx | 59 ++++++++++++------- .../components/templates/Asset/AssetFile.tsx | 4 +- .../templates/Asset/AssetFilesDetails.tsx | 4 +- client/src/context/MarketProvider.tsx | 21 ++++++- client/src/context/UserProvider.tsx | 16 +---- client/src/context/index.tsx | 4 +- client/src/data/web3message.json | 1 + client/src/routes/Faucet.tsx | 4 +- client/src/routes/History.tsx | 4 +- 15 files changed, 108 insertions(+), 75 deletions(-) diff --git a/client/__mocks__/user-mock.ts b/client/__mocks__/user-mock.ts index 5d6a8b2..4e2f087 100644 --- a/client/__mocks__/user-mock.ts +++ b/client/__mocks__/user-mock.ts @@ -4,7 +4,6 @@ const userMock = { isLogged: false, isLoading: false, isBurner: false, - isOceanNetwork: false, account: '', web3: {}, ...oceanMock, @@ -20,7 +19,6 @@ const userMockConnected = { isLogged: true, isLoading: false, isBurner: false, - isOceanNetwork: true, account: '0xxxxxx', web3: {}, ...oceanMock, diff --git a/client/src/components/molecules/AccountStatus/Indicator.tsx b/client/src/components/molecules/AccountStatus/Indicator.tsx index ee81513..40748d1 100644 --- a/client/src/components/molecules/AccountStatus/Indicator.tsx +++ b/client/src/components/molecules/AccountStatus/Indicator.tsx @@ -1,6 +1,6 @@ import React from 'react' import cx from 'classnames' -import { User } from '../../../context' +import { User, Market } from '../../../context' import styles from './Indicator.module.scss' const Indicator = ({ @@ -19,13 +19,19 @@ const Indicator = ({ ref={forwardedRef} > - {states => - !states.isLogged || !states.isOceanNetwork ? ( - - ) : states.isLogged ? ( - - ) : null - } + {user => ( + + {market => + !user.isLogged || !market.networkMatch ? ( + + ) : user.isLogged ? ( + + ) : null + } + + )}
) diff --git a/client/src/components/molecules/AccountStatus/Popover.test.tsx b/client/src/components/molecules/AccountStatus/Popover.test.tsx index b82a70b..68925a0 100644 --- a/client/src/components/molecules/AccountStatus/Popover.test.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.test.tsx @@ -38,7 +38,6 @@ describe('Popover', () => { diff --git a/client/src/components/molecules/AccountStatus/Popover.tsx b/client/src/components/molecules/AccountStatus/Popover.tsx index 51b990f..045f6e2 100644 --- a/client/src/components/molecules/AccountStatus/Popover.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.tsx @@ -1,14 +1,16 @@ import React, { PureComponent } from 'react' import Account from '../../atoms/Account' -import { User } from '../../../context' +import { User, Market } from '../../../context' import styles from './Popover.module.scss' export default class Popover extends PureComponent<{ forwardedRef?: (ref: HTMLElement | null) => void style?: React.CSSProperties }> { + public static contextType = User + public render() { - const { account, balance, network, isOceanNetwork } = this.context + const { account, balance, network } = this.context return (
)} -
- {network && !isOceanNetwork - ? 'Please connect to Custom RPC\n https://pacific.oceanprotocol.com' - : network && `Connected to ${network} network`} -
+ + {market => ( +
+ {network && !market.networkMatch + ? `Please connect to Custom RPC + ${ + market.network === 'Pacific' + ? 'https://pacific.oceanprotocol.com' + : market.network === 'Nile' + ? 'https://nile.dev-ocean.com' + : market.network === 'Duero' + ? 'https://duero.dev-ocean.com' + : 'http://localhost:8545' + }` + : network && + `Connected to ${network} network`} +
+ )} +
}
) } } - -Popover.contextType = User diff --git a/client/src/components/organisms/AssetsUser.tsx b/client/src/components/organisms/AssetsUser.tsx index a9d6083..36ba6bd 100644 --- a/client/src/components/organisms/AssetsUser.tsx +++ b/client/src/components/organisms/AssetsUser.tsx @@ -57,10 +57,9 @@ export default class AssetsUser extends PureComponent< } public render() { - const { account, isOceanNetwork } = this.context + const { account } = this.context return ( - isOceanNetwork && account && (
{this.props.recent && ( diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index 024956c..e530c65 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -16,9 +16,7 @@ describe('Web3message', () => { it('renders with wrongNetwork message', () => { const { container } = render( - + ) @@ -29,7 +27,7 @@ describe('Web3message', () => { it('renders with noAccount message', () => { const { container } = render( - + ) diff --git a/client/src/components/organisms/Web3message.tsx b/client/src/components/organisms/Web3message.tsx index bda7158..d4eda66 100644 --- a/client/src/components/organisms/Web3message.tsx +++ b/client/src/components/organisms/Web3message.tsx @@ -2,28 +2,51 @@ import React, { PureComponent } from 'react' import Account from '../atoms/Account' import AccountStatus from '../molecules/AccountStatus' import styles from './Web3message.module.scss' -import { User } from '../../context' +import { User, Market } from '../../context' import content from '../../data/web3message.json' export default class Web3message extends PureComponent<{ extended?: boolean }> { - public static contextType = User + public static contextType = Market - private message = () => { - const { isOceanNetwork, isLogged, isBurner, network } = this.context - - return !isOceanNetwork && !isBurner + private messageOceanNetwork = () => + this.context.network === 'Pacific' ? content.wrongNetworkPacific - : !isLogged - ? content.noAccount - : isBurner - ? content.hasBurnerWallet - : isLogged - ? content.hasMetaMaskWallet.replace('NETWORK', network) - : '' + : this.context.network === 'Nile' + ? content.wrongNetworkNile + : this.context.network === 'Duero' + ? content.wrongNetworkDuero + : content.wrongNetworkSpree + + private Message = () => { + const { networkMatch, network } = this.context + + return ( + + {user => ( + + )} + + ) } public render() { - const { network } = this.context + const { networkMatch } = this.context return (
@@ -31,14 +54,10 @@ export default class Web3message extends PureComponent<{ extended?: boolean }> {
- {(network !== 'Pacific' || this.props.extended) && ( + {(!networkMatch || this.props.extended) && (
- +
)}
diff --git a/client/src/components/templates/Asset/AssetFile.tsx b/client/src/components/templates/Asset/AssetFile.tsx index 7ffdf06..778453f 100644 --- a/client/src/components/templates/Asset/AssetFile.tsx +++ b/client/src/components/templates/Asset/AssetFile.tsx @@ -109,7 +109,7 @@ export default class AssetFile extends PureComponent< public render() { const { ddo, file } = this.props const { isLoading, error, step } = this.state - const { isLogged, isOceanNetwork } = this.context + const { isLogged } = this.context const { index, contentType, contentLength } = file return ( @@ -145,7 +145,7 @@ export default class AssetFile extends PureComponent< className={styles.buttonMain} // weird 0 hack so TypeScript is happy onClick={() => this.purchaseAsset(ddo, index || 0)} - disabled={!isLogged || !isOceanNetwork} + disabled={!isLogged} name="Download" > Get file diff --git a/client/src/components/templates/Asset/AssetFilesDetails.tsx b/client/src/components/templates/Asset/AssetFilesDetails.tsx index 7054171..f745772 100644 --- a/client/src/components/templates/Asset/AssetFilesDetails.tsx +++ b/client/src/components/templates/Asset/AssetFilesDetails.tsx @@ -19,9 +19,7 @@ export default class AssetFilesDetails extends PureComponent<{ ))}
- {(!this.context.isOceanNetwork || !this.context.isLogged) && ( - - )} + ) : (
No files attached.
diff --git a/client/src/context/MarketProvider.tsx b/client/src/context/MarketProvider.tsx index 0132aaf..15e029a 100644 --- a/client/src/context/MarketProvider.tsx +++ b/client/src/context/MarketProvider.tsx @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react' import { Logger, Ocean } from '@oceanprotocol/squid' -import { Market } from '.' +import { Market, User } from '.' import formPublish from '../data/form-publish.json' const categories = @@ -17,19 +17,25 @@ interface MarketProviderState { totalAssets: number categories: string[] network: string + networkMatch: boolean } export default class MarketProvider extends PureComponent< MarketProviderProps, MarketProviderState > { + public static contextType = User + public state = { totalAssets: 0, categories, - network: 'Pacific' + network: 'Pacific', + networkMatch: false } - public async componentDidMount() {} + public async componentDidMount() { + await this.checkCorrectUserNetwork() + } public async componentDidUpdate(prevProps: any) { // Using ocean prop instead of getting it from context to be able to compare. @@ -37,6 +43,7 @@ export default class MarketProvider extends PureComponent< if (prevProps.ocean !== this.props.ocean) { await this.getTotalAssets() await this.getMarketNetwork() + await this.checkCorrectUserNetwork() } } @@ -72,6 +79,14 @@ export default class MarketProvider extends PureComponent< } } + private async checkCorrectUserNetwork() { + if (this.context.network === this.state.network) { + this.setState({ networkMatch: true }) + } else { + this.setState({ networkMatch: false }) + } + } + public render() { return ( diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 4d85a85..30aacc8 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -51,7 +51,6 @@ interface UserProviderState { isBurner: boolean isWeb3Capable: boolean isLoading: boolean - isOceanNetwork: boolean account: string balance: { eth: number @@ -110,7 +109,6 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { isBurner: false, isWeb3Capable: Boolean(window.web3 || window.ethereum), isLoading: true, - isOceanNetwork: false, balance: { eth: 0, ocn: 0 @@ -205,13 +203,13 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { } private fetchAccounts = async () => { - const { ocean, isLogged, isOceanNetwork } = this.state + const { ocean, isLogged } = this.state if (isLogged) { let accounts // Modern dapp browsers - if (window.ethereum && !isLogged && isOceanNetwork) { + if (window.ethereum && !isLogged) { // simply set to empty, and have user click a button somewhere // to initiate account unlocking accounts = [] @@ -250,16 +248,8 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { private fetchNetwork = async () => { const { ocean } = this.state - const network = await ocean.keeper.getNetworkName() - const isPacific = network === 'Pacific' - const isNile = network === 'Nile' - const isDuero = network === 'Duero' - const isSpree = network === 'Spree' - const isOceanNetwork = isPacific || isNile || isDuero || isSpree - - network !== this.state.network && - this.setState({ isOceanNetwork, network }) + network !== this.state.network && this.setState({ network }) } public render() { diff --git a/client/src/context/index.tsx b/client/src/context/index.tsx index ab1f187..1bdfcf2 100644 --- a/client/src/context/index.tsx +++ b/client/src/context/index.tsx @@ -5,7 +5,6 @@ export const User = React.createContext({ isBurner: false, isWeb3Capable: false, isLoading: false, - isOceanNetwork: false, account: '', web3: {}, ocean: {}, @@ -29,5 +28,6 @@ export const User = React.createContext({ export const Market = React.createContext({ totalAssets: 0, categories: [''], - network: '' + network: '', + networkMatch: false }) diff --git a/client/src/data/web3message.json b/client/src/data/web3message.json index 4c35e04..c135e7e 100644 --- a/client/src/data/web3message.json +++ b/client/src/data/web3message.json @@ -5,5 +5,6 @@ "wrongNetworkPacific": "Not connected to Pacific network. Please connect in MetaMask with Custom RPC https://pacific.oceanprotocol.com", "wrongNetworkNile": "Not connected to Nile network. Please connect in MetaMask with Custom RPC https://nile.dev-ocean.com", "wrongNetworkDuero": "Not connected to Duero network. Please connect in MetaMask with Custom RPC https://duero.dev-ocean.com", + "wrongNetworkSpree": "Not connected to Spree network. Please connect in MetaMask with Custom RPC http://localhost:8545", "seedphrase": "You can use this seed phrase to import this burner wallet account into other wallets, e.g. MetaMask." } diff --git a/client/src/routes/Faucet.tsx b/client/src/routes/Faucet.tsx index e187cbb..d2565aa 100644 --- a/client/src/routes/Faucet.tsx +++ b/client/src/routes/Faucet.tsx @@ -99,9 +99,7 @@ export default class Faucet extends PureComponent<{}, FaucetState> { diff --git a/client/src/routes/History.tsx b/client/src/routes/History.tsx index 06491e8..49161be 100644 --- a/client/src/routes/History.tsx +++ b/client/src/routes/History.tsx @@ -10,9 +10,7 @@ export default class History extends Component { return ( - {(!this.context.isLogged || - !this.context.isOceanNetwork) && } - + {!this.context.isLogged && } From ca58d7d0b170913352936a47cb33661f06123abb Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 11 Jul 2019 23:01:58 +0200 Subject: [PATCH 23/39] fix re-renders caused by withTracker HOC --- client/__mocks__/user-mock.ts | 2 + client/src/Routes.tsx | 23 ++-- client/src/hoc/withTracker.tsx | 8 +- client/src/routes/About.tsx | 3 +- client/src/routes/Channels.tsx | 3 +- client/src/routes/Faucet.tsx | 5 +- client/src/routes/History.tsx | 7 +- client/src/routes/Home.tsx | 102 ------------------ client/src/routes/Home/Search.tsx | 51 +++++++++ .../index.module.scss} | 2 +- .../{Home.test.tsx => Home/index.test.tsx} | 6 +- client/src/routes/Home/index.tsx | 74 +++++++++++++ client/src/routes/NotFound.tsx | 3 +- client/src/routes/Publish/index.tsx | 5 +- client/src/routes/Search.tsx | 7 +- client/src/routes/Styleguide.tsx | 3 +- 16 files changed, 170 insertions(+), 134 deletions(-) delete mode 100644 client/src/routes/Home.tsx create mode 100644 client/src/routes/Home/Search.tsx rename client/src/routes/{Home.module.scss => Home/index.module.scss} (96%) rename client/src/routes/{Home.test.tsx => Home/index.test.tsx} (83%) create mode 100644 client/src/routes/Home/index.tsx diff --git a/client/__mocks__/user-mock.ts b/client/__mocks__/user-mock.ts index 4e2f087..706d956 100644 --- a/client/__mocks__/user-mock.ts +++ b/client/__mocks__/user-mock.ts @@ -4,6 +4,7 @@ const userMock = { isLogged: false, isLoading: false, isBurner: false, + isWeb3Capable: false, account: '', web3: {}, ...oceanMock, @@ -19,6 +20,7 @@ const userMockConnected = { isLogged: true, isLoading: false, isBurner: false, + isWeb3Capable: true, account: '0xxxxxx', web3: {}, ...oceanMock, diff --git a/client/src/Routes.tsx b/client/src/Routes.tsx index 863d128..36c0df9 100644 --- a/client/src/Routes.tsx +++ b/client/src/Routes.tsx @@ -1,6 +1,5 @@ import React from 'react' import { Route, Switch } from 'react-router-dom' -import withTracker from './hoc/withTracker' import About from './routes/About' import Home from './routes/Home' @@ -17,17 +16,17 @@ import Channel from './components/templates/Channel' const Routes = () => ( - - - - - - - - - - - + + + + + + + + + + + ) diff --git a/client/src/hoc/withTracker.tsx b/client/src/hoc/withTracker.tsx index 272b8dc..17d1ba3 100644 --- a/client/src/hoc/withTracker.tsx +++ b/client/src/hoc/withTracker.tsx @@ -13,16 +13,14 @@ const withTracker =

( options: FieldsObject = {} ) => { const trackPage = (page: string) => { - options.isWeb3 = window.web3 !== undefined - ReactGA.set({ page, ...options }) ReactGA.pageview(page) } const HOC = (props: P) => { - useEffect(() => trackPage(props.location.pathname), [ - props.location.pathname - ]) + useEffect(() => { + trackPage(props.location.pathname) + }, [props.location.pathname]) return } diff --git a/client/src/routes/About.tsx b/client/src/routes/About.tsx index 5e40aad..5cb27be 100644 --- a/client/src/routes/About.tsx +++ b/client/src/routes/About.tsx @@ -5,6 +5,7 @@ import Content from '../components/atoms/Content' import VersionNumbers from '../components/molecules/VersionNumbers' import Web3message from '../components/organisms/Web3message' import stylesVersionNumbers from '../components/molecules/VersionNumbers/index.module.scss' +import withTracker from '../hoc/withTracker' class About extends Component { public static contextType = Market @@ -53,4 +54,4 @@ class About extends Component { } } -export default About +export default withTracker(About) diff --git a/client/src/routes/Channels.tsx b/client/src/routes/Channels.tsx index c42a38a..ff43aa2 100644 --- a/client/src/routes/Channels.tsx +++ b/client/src/routes/Channels.tsx @@ -3,6 +3,7 @@ import Route from '../components/templates/Route' import Content from '../components/atoms/Content' import channels from '../data/channels.json' import ChannelTeaser from '../components/organisms/ChannelTeaser' +import withTracker from '../hoc/withTracker' class Channels extends Component { public render() { @@ -21,4 +22,4 @@ class Channels extends Component { } } -export default Channels +export default withTracker(Channels) diff --git a/client/src/routes/Faucet.tsx b/client/src/routes/Faucet.tsx index d2565aa..d52a066 100644 --- a/client/src/routes/Faucet.tsx +++ b/client/src/routes/Faucet.tsx @@ -7,6 +7,7 @@ import { User, Market } from '../context' import Web3message from '../components/organisms/Web3message' import styles from './Faucet.module.scss' import Content from '../components/atoms/Content' +import withTracker from '../hoc/withTracker' interface FaucetState { isLoading: boolean @@ -15,7 +16,7 @@ interface FaucetState { trxHash?: string } -export default class Faucet extends PureComponent<{}, FaucetState> { +class Faucet extends PureComponent<{}, FaucetState> { public static contextType = User public state = { @@ -142,4 +143,4 @@ export default class Faucet extends PureComponent<{}, FaucetState> { } } -Faucet.contextType = User +export default withTracker(Faucet) diff --git a/client/src/routes/History.tsx b/client/src/routes/History.tsx index 49161be..680742f 100644 --- a/client/src/routes/History.tsx +++ b/client/src/routes/History.tsx @@ -4,8 +4,11 @@ import AssetsUser from '../components/organisms/AssetsUser' import Web3message from '../components/organisms/Web3message' import { User } from '../context' import Content from '../components/atoms/Content' +import withTracker from '../hoc/withTracker' + +class History extends Component { + public static contextType = User -export default class History extends Component { public render() { return ( @@ -18,4 +21,4 @@ export default class History extends Component { } } -History.contextType = User +export default withTracker(History) diff --git a/client/src/routes/Home.tsx b/client/src/routes/Home.tsx deleted file mode 100644 index 4a34c09..0000000 --- a/client/src/routes/Home.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import React, { ChangeEvent, Component, FormEvent } from 'react' -import { History } from 'history' -import { User, Market } from '../context' -import CategoryImage from '../components/atoms/CategoryImage' -import CategoryLink from '../components/atoms/CategoryLink' -import Button from '../components/atoms/Button' -import Form from '../components/atoms/Form/Form' -import Input from '../components/atoms/Form/Input' -import Route from '../components/templates/Route' -import styles from './Home.module.scss' - -import meta from '../data/meta.json' -import Content from '../components/atoms/Content' -import AssetsLatest from '../components/organisms/AssetsLatest' -import ChannelTeaser from '../components/organisms/ChannelTeaser' - -interface HomeProps { - history: History -} - -interface HomeState { - search?: string -} - -export default class Home extends Component { - public static contextType = User - - public state = { - search: '' - } - - private inputChange = (event: ChangeEvent) => { - this.setState({ - [event.target.name]: event.target.value - }) - } - - private searchAssets = (event: FormEvent) => { - event.preventDefault() - this.props.history.push(`/search?text=${this.state.search}`) - } - - public render() { - const { search } = this.state - - return ( - - -

- - Search - - } - /> -
- - - -

Featured Channel

- - -
- - -

Explore Categories

-
- - {({ categories }) => - categories - .sort((a, b) => a.localeCompare(b)) // sort alphabetically - .map((category: string) => ( - - -

{category}

-
- )) - } -
-
-
- - ) - } -} diff --git a/client/src/routes/Home/Search.tsx b/client/src/routes/Home/Search.tsx new file mode 100644 index 0000000..b0e4056 --- /dev/null +++ b/client/src/routes/Home/Search.tsx @@ -0,0 +1,51 @@ +import React, { ChangeEvent, FormEvent, PureComponent } from 'react' +import Button from '../../components/atoms/Button' +import Form from '../../components/atoms/Form/Form' +import Input from '../../components/atoms/Form/Input' + +interface SearchProps { + searchAssets: any +} + +interface SearchState { + search: string +} + +export default class Search extends PureComponent { + public state = { + search: '' + } + + private inputChange = (event: ChangeEvent) => { + this.setState({ + search: event.target.value + }) + } + + public render() { + const { search } = this.state + + return ( +
) => + this.props.searchAssets(search, e) + } + minimal + > + + Search + + } + /> +
+ ) + } +} diff --git a/client/src/routes/Home.module.scss b/client/src/routes/Home/index.module.scss similarity index 96% rename from client/src/routes/Home.module.scss rename to client/src/routes/Home/index.module.scss index 90ac6ab..087a031 100644 --- a/client/src/routes/Home.module.scss +++ b/client/src/routes/Home/index.module.scss @@ -1,4 +1,4 @@ -@import '../styles/variables'; +@import '../../styles/variables'; .home { display: block; diff --git a/client/src/routes/Home.test.tsx b/client/src/routes/Home/index.test.tsx similarity index 83% rename from client/src/routes/Home.test.tsx rename to client/src/routes/Home/index.test.tsx index e627314..e083ad8 100644 --- a/client/src/routes/Home.test.tsx +++ b/client/src/routes/Home/index.test.tsx @@ -2,9 +2,9 @@ import React from 'react' import { Router } from 'react-router' import { createBrowserHistory } from 'history' import { render } from '@testing-library/react' -import Home from './Home' -import { userMock } from '../../__mocks__/user-mock' -import { User } from '../context' +import Home from '.' +import { userMock } from '../../../__mocks__/user-mock' +import { User } from '../../context' const history = createBrowserHistory() diff --git a/client/src/routes/Home/index.tsx b/client/src/routes/Home/index.tsx new file mode 100644 index 0000000..54aa795 --- /dev/null +++ b/client/src/routes/Home/index.tsx @@ -0,0 +1,74 @@ +import React, { PureComponent, FormEvent } from 'react' +import { History } from 'history' +import { Market } from '../../context' +import CategoryImage from '../../components/atoms/CategoryImage' +import CategoryLink from '../../components/atoms/CategoryLink' +import Route from '../../components/templates/Route' +import styles from './index.module.scss' + +import meta from '../../data/meta.json' +import Content from '../../components/atoms/Content' +import AssetsLatest from '../../components/organisms/AssetsLatest' +import ChannelTeaser from '../../components/organisms/ChannelTeaser' +import Search from './Search' +import withTracker from '../../hoc/withTracker' + +interface HomeProps { + history: History +} + +interface HomeState { + search?: string +} + +class Home extends PureComponent { + public static contextType = Market + + private searchAssets = ( + search: string, + event: FormEvent + ) => { + event.preventDefault() + this.props.history.push(`/search?text=${search}`) + } + + public render() { + return ( + + + + + + +

Featured Channel

+ + +
+ + +

Explore Categories

+
+ {this.context.categories + .sort((a: any, b: any) => a.localeCompare(b)) // sort alphabetically + .map((category: string) => ( + + +

{category}

+
+ ))} +
+
+
+ ) + } +} + +export default withTracker(Home) diff --git a/client/src/routes/NotFound.tsx b/client/src/routes/NotFound.tsx index 5561ef2..e247277 100644 --- a/client/src/routes/NotFound.tsx +++ b/client/src/routes/NotFound.tsx @@ -1,6 +1,7 @@ import React, { Component } from 'react' import Route from '../components/templates/Route' import Content from '../components/atoms/Content' +import withTracker from '../hoc/withTracker' class NotFound extends Component { public render() { @@ -12,4 +13,4 @@ class NotFound extends Component { } } -export default NotFound +export default withTracker(NotFound) diff --git a/client/src/routes/Publish/index.tsx b/client/src/routes/Publish/index.tsx index 1583b45..2c6bf3d 100644 --- a/client/src/routes/Publish/index.tsx +++ b/client/src/routes/Publish/index.tsx @@ -11,6 +11,7 @@ import ReactGA from 'react-ga' import { steps } from '../../data/form-publish.json' import Content from '../../components/atoms/Content' import { File } from './Files' +import withTracker from '../../hoc/withTracker' type AssetType = 'dataset' | 'algorithm' | 'container' | 'workflow' | 'other' @@ -35,7 +36,7 @@ interface PublishState { validationStatus?: any } -export default class Publish extends Component<{}, PublishState> { +class Publish extends Component<{}, PublishState> { public static contextType = User public state = { @@ -357,3 +358,5 @@ export default class Publish extends Component<{}, PublishState> { ) } } + +export default withTracker(Publish) diff --git a/client/src/routes/Search.tsx b/client/src/routes/Search.tsx index f370d9b..4eb5ae1 100644 --- a/client/src/routes/Search.tsx +++ b/client/src/routes/Search.tsx @@ -10,6 +10,7 @@ import AssetTeaser from '../components/molecules/AssetTeaser' import Pagination from '../components/molecules/Pagination' import styles from './Search.module.scss' import Content from '../components/atoms/Content' +import withTracker from '../hoc/withTracker' interface SearchProps { location: Location @@ -27,7 +28,9 @@ interface SearchState { searchCategories: string } -export default class Search extends PureComponent { +class Search extends PureComponent { + public static contextType = User + public state = { results: [], totalResults: 0, @@ -159,4 +162,4 @@ export default class Search extends PureComponent { } } -Search.contextType = User +export default withTracker(Search) diff --git a/client/src/routes/Styleguide.tsx b/client/src/routes/Styleguide.tsx index ebf161a..b9bb9bb 100644 --- a/client/src/routes/Styleguide.tsx +++ b/client/src/routes/Styleguide.tsx @@ -6,6 +6,7 @@ import Route from '../components/templates/Route' import styles from './Styleguide.module.scss' import form from '../data/form-styleguide.json' import Content from '../components/atoms/Content' +import withTracker from '../hoc/withTracker' class Styleguide extends Component { public formFields = (entries: any[]) => @@ -47,4 +48,4 @@ class Styleguide extends Component { } } -export default Styleguide +export default withTracker(Styleguide) From 1ab87dea3078a0295120ad9a925f3e6ee8f82668 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Thu, 11 Jul 2019 23:13:19 +0200 Subject: [PATCH 24/39] fix faucet test --- client/src/routes/Faucet.tsx | 1 + cypress/integration/faucet.spec.js | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/client/src/routes/Faucet.tsx b/client/src/routes/Faucet.tsx index d52a066..a177458 100644 --- a/client/src/routes/Faucet.tsx +++ b/client/src/routes/Faucet.tsx @@ -101,6 +101,7 @@ class Faucet extends PureComponent<{}, FaucetState> { primary onClick={() => this.getTokens(this.context.requestFromFaucet)} disabled={!this.context.isLogged} + name="Faucet" > Request Ether diff --git a/cypress/integration/faucet.spec.js b/cypress/integration/faucet.spec.js index 3a93c48..7cbe57f 100644 --- a/cypress/integration/faucet.spec.js +++ b/cypress/integration/faucet.spec.js @@ -3,18 +3,27 @@ context('Faucet', () => { before(() => { cy.visit('/faucet') // Wait for end of loading - cy.get('button', { timeout: 60000 }).should('have.length', 1) + cy.get('button[name="Faucet"]', { timeout: 60000 }).should( + 'have.length', + 1 + ) + }) + + beforeEach(() => { + cy.get('button[name="Faucet"]') + .first() + .as('button') }) it('Faucet button is clickable when user is connected.', () => { - cy.get('button') + cy.get('@button') .contains('Request Ether') .should('not.be.disabled') }) it('Execute faucet call', () => { // Execute call - cy.get('button') + cy.get('@button') .contains('Request Ether') .click() // Verify that we got response from server From 69d7295f5752bad7362d5d2541e4c6f93033ccf8 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Fri, 12 Jul 2019 00:24:29 +0200 Subject: [PATCH 25/39] fix unit tests --- client/__mocks__/market-mock.ts | 8 +++++ client/src/components/atoms/Account.test.tsx | 22 +++++++++++-- .../molecules/AccountStatus/Popover.test.tsx | 11 ++++--- .../components/organisms/Web3message.test.tsx | 31 ++++++++++++++----- .../Asset/AssetFilesDetails.test.tsx | 12 ------- client/src/routes/About.test.tsx | 10 +++++- client/src/routes/Channels.test.tsx | 10 +++++- client/src/routes/Faucet.test.tsx | 10 +++++- client/src/routes/History.test.tsx | 10 +++++- client/src/routes/Home/index.test.tsx | 11 +++++-- client/src/routes/NotFound.test.tsx | 10 +++++- client/src/routes/Publish/index.test.tsx | 21 +++++++++++-- client/src/routes/Search.test.tsx | 5 +-- client/src/routes/Styleguide.test.tsx | 10 +++++- 14 files changed, 141 insertions(+), 40 deletions(-) create mode 100644 client/__mocks__/market-mock.ts diff --git a/client/__mocks__/market-mock.ts b/client/__mocks__/market-mock.ts new file mode 100644 index 0000000..2322f9a --- /dev/null +++ b/client/__mocks__/market-mock.ts @@ -0,0 +1,8 @@ +const marketMock = { + totalAssets: 1000, + categories: ['category'], + network: 'Pacific', + networkMatch: true +} + +export { marketMock } diff --git a/client/src/components/atoms/Account.test.tsx b/client/src/components/atoms/Account.test.tsx index ad44b30..9e81653 100644 --- a/client/src/components/atoms/Account.test.tsx +++ b/client/src/components/atoms/Account.test.tsx @@ -2,15 +2,27 @@ import React from 'react' import { render } from '@testing-library/react' import { toDataUrl } from 'ethereum-blockies' import Account from './Account' +import { User } from '../../context' +import { userMockConnected } from '../../../__mocks__/user-mock' describe('Account', () => { it('renders without crashing', () => { - const { container } = render() + const { container } = render( + + + + ) expect(container.firstChild).toBeInTheDocument() }) it('outputs empty state without account', () => { - const { container } = render() + const { container } = render( + + + + ) expect(container.firstChild).toHaveTextContent('No account selected') }) @@ -18,7 +30,11 @@ describe('Account', () => { const account = '0xxxxxxxxxxxxxxx' const blockies = toDataUrl(account) - const { container } = render() + const { container } = render( + + + + ) expect(container.querySelector('.blockies')).toBeInTheDocument() expect(container.querySelector('.blockies')).toHaveAttribute( 'src', diff --git a/client/src/components/molecules/AccountStatus/Popover.test.tsx b/client/src/components/molecules/AccountStatus/Popover.test.tsx index 68925a0..5edea8f 100644 --- a/client/src/components/molecules/AccountStatus/Popover.test.tsx +++ b/client/src/components/molecules/AccountStatus/Popover.test.tsx @@ -2,7 +2,8 @@ import React from 'react' import { render } from '@testing-library/react' import Popover from './Popover' import { userMock, userMockConnected } from '../../../../__mocks__/user-mock' -import { User } from '../../../context' +import { marketMock } from '../../../../__mocks__/market-mock' +import { User, Market } from '../../../context' describe('Popover', () => { it('renders without crashing', () => { @@ -25,12 +26,14 @@ describe('Popover', () => { it('renders correct network', () => { const { container } = render( - - null} style={{}} /> + + + null} style={{}} /> + ) expect(container.firstChild).toBeInTheDocument() - expect(container.firstChild).toHaveTextContent('Connected to Nile') + expect(container.firstChild).toHaveTextContent('Connected to Pacific') }) it('renders with wrong network', () => { diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index e530c65..6e7bd43 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -1,14 +1,17 @@ import React from 'react' import { render } from '@testing-library/react' import Web3message from './Web3message' -import { User } from '../../context' +import { User, Market } from '../../context' import { userMock, userMockConnected } from '../../../__mocks__/user-mock' +import { marketMock } from '../../../__mocks__/market-mock' describe('Web3message', () => { it('renders with burner wallet message', () => { const { container } = render( - + + + ) expect(container.firstChild).toHaveTextContent('Burner Wallet') @@ -16,28 +19,40 @@ describe('Web3message', () => { it('renders with wrongNetwork message', () => { const { container } = render( - - + + + + ) expect(container.firstChild).toHaveTextContent( - 'Not connected to Pacific network' + 'Not connected to Nile network' ) }) it('renders with noAccount message', () => { const { container } = render( - + + + ) - expect(container.firstChild).toHaveTextContent('No wallet selected.') + expect(container.firstChild).toHaveTextContent('No account selected') }) it('renders with hasAccount message', () => { const { container } = render( - + + + ) expect(container.firstChild).toHaveTextContent('0xxxxxx') diff --git a/client/src/components/templates/Asset/AssetFilesDetails.test.tsx b/client/src/components/templates/Asset/AssetFilesDetails.test.tsx index 8f109ba..5420c13 100644 --- a/client/src/components/templates/Asset/AssetFilesDetails.test.tsx +++ b/client/src/components/templates/Asset/AssetFilesDetails.test.tsx @@ -28,16 +28,4 @@ describe('AssetFilesDetails', () => { ) expect(container.firstChild).toHaveTextContent('No files attached.') }) - - it('hides Web3message when all connected', () => { - const { container } = render( - - - - ) - expect(container.querySelector('.status')).not.toBeInTheDocument() - }) }) diff --git a/client/src/routes/About.test.tsx b/client/src/routes/About.test.tsx index fc2722d..f5fec51 100644 --- a/client/src/routes/About.test.tsx +++ b/client/src/routes/About.test.tsx @@ -1,13 +1,21 @@ import React from 'react' import { render } from '@testing-library/react' import { MemoryRouter } from 'react-router' +import { createMemoryHistory, createLocation } from 'history' import About from './About' +const history = createMemoryHistory() +const location = createLocation('/about') + describe('About', () => { it('renders without crashing', () => { const { container } = render( - + ) expect(container.firstChild).toBeInTheDocument() diff --git a/client/src/routes/Channels.test.tsx b/client/src/routes/Channels.test.tsx index 9705c72..c5f1e7e 100644 --- a/client/src/routes/Channels.test.tsx +++ b/client/src/routes/Channels.test.tsx @@ -1,16 +1,24 @@ import React from 'react' import { MemoryRouter } from 'react-router' +import { createMemoryHistory, createLocation } from 'history' import { render } from '@testing-library/react' import Channels from './Channels' import { User } from '../context' import { userMockConnected } from '../../__mocks__/user-mock' +const history = createMemoryHistory() +const location = createLocation('/channels') + describe('Channels', () => { it('renders without crashing', () => { const { container } = render( - + ) diff --git a/client/src/routes/Faucet.test.tsx b/client/src/routes/Faucet.test.tsx index 4d219ed..50cb619 100644 --- a/client/src/routes/Faucet.test.tsx +++ b/client/src/routes/Faucet.test.tsx @@ -1,15 +1,23 @@ import React from 'react' import { render, fireEvent } from '@testing-library/react' import { MemoryRouter } from 'react-router' +import { createMemoryHistory, createLocation } from 'history' import Faucet from './Faucet' import { User } from '../context' import { userMockConnected } from '../../__mocks__/user-mock' +const history = createMemoryHistory() +const location = createLocation('/faucet') + const setup = () => { const utils = render( - + ) diff --git a/client/src/routes/History.test.tsx b/client/src/routes/History.test.tsx index b02542f..56200b5 100644 --- a/client/src/routes/History.test.tsx +++ b/client/src/routes/History.test.tsx @@ -1,13 +1,21 @@ import React from 'react' import { render } from '@testing-library/react' import { MemoryRouter } from 'react-router' +import { createMemoryHistory, createLocation } from 'history' import History from './History' +const history = createMemoryHistory() +const location = createLocation('/history') + describe('History', () => { it('renders without crashing', () => { const { container } = render( - + ) expect(container.firstChild).toBeInTheDocument() diff --git a/client/src/routes/Home/index.test.tsx b/client/src/routes/Home/index.test.tsx index e083ad8..1e7aaf1 100644 --- a/client/src/routes/Home/index.test.tsx +++ b/client/src/routes/Home/index.test.tsx @@ -1,19 +1,24 @@ import React from 'react' import { Router } from 'react-router' -import { createBrowserHistory } from 'history' +import { createMemoryHistory, createLocation } from 'history' import { render } from '@testing-library/react' import Home from '.' import { userMock } from '../../../__mocks__/user-mock' import { User } from '../../context' -const history = createBrowserHistory() +const history = createMemoryHistory() +const location = createLocation('/') describe('Home', () => { it('renders without crashing', () => { const { container } = render( - + ) diff --git a/client/src/routes/NotFound.test.tsx b/client/src/routes/NotFound.test.tsx index e0e33a5..a57e444 100644 --- a/client/src/routes/NotFound.test.tsx +++ b/client/src/routes/NotFound.test.tsx @@ -1,13 +1,21 @@ import React from 'react' import { render } from '@testing-library/react' +import { createMemoryHistory, createLocation } from 'history' import NotFound from './NotFound' import { MemoryRouter } from 'react-router' +const history = createMemoryHistory() +const location = createLocation('/whatever') + describe('NotFound', () => { it('renders without crashing', () => { const { container } = render( - + ) expect(container.firstChild).toBeInTheDocument() diff --git a/client/src/routes/Publish/index.test.tsx b/client/src/routes/Publish/index.test.tsx index 0c6462f..e1d8f7b 100644 --- a/client/src/routes/Publish/index.test.tsx +++ b/client/src/routes/Publish/index.test.tsx @@ -1,16 +1,24 @@ import React from 'react' import { MemoryRouter } from 'react-router' import { render, fireEvent } from '@testing-library/react' +import { createMemoryHistory, createLocation } from 'history' import Publish from '.' import { User } from '../../context' import { userMockConnected } from '../../../__mocks__/user-mock' +const history = createMemoryHistory() +const location = createLocation('/publish') + describe('Publish', () => { it('renders without crashing', () => { const { container, getByText } = render( - + ) @@ -22,7 +30,16 @@ describe('Publish', () => { const { getByText, getByLabelText, getByTestId } = render( - + ) diff --git a/client/src/routes/Search.test.tsx b/client/src/routes/Search.test.tsx index dd96676..0541ac7 100644 --- a/client/src/routes/Search.test.tsx +++ b/client/src/routes/Search.test.tsx @@ -6,10 +6,10 @@ import { createMemoryHistory } from 'history' import { BrowserRouter as Router } from 'react-router-dom' import { userMockConnected } from '../../__mocks__/user-mock' +const history = createMemoryHistory() + describe('Search', () => { it('renders without crashing', () => { - const history = createMemoryHistory() - const { container } = render( @@ -21,6 +21,7 @@ describe('Search', () => { hash: '' }} history={history} + match={{ params: '', path: '', url: '', isExact: true }} /> diff --git a/client/src/routes/Styleguide.test.tsx b/client/src/routes/Styleguide.test.tsx index 66ee70d..df1667e 100644 --- a/client/src/routes/Styleguide.test.tsx +++ b/client/src/routes/Styleguide.test.tsx @@ -2,12 +2,20 @@ import React from 'react' import { render } from '@testing-library/react' import Styleguide from './Styleguide' import { MemoryRouter } from 'react-router' +import { createMemoryHistory, createLocation } from 'history' + +const history = createMemoryHistory() +const location = createLocation('/styleguide') describe('Styleguide', () => { it('renders without crashing', () => { const { container } = render( - + ) expect(container.firstChild).toBeInTheDocument() From 645f79f733fb66e90f4da8bed0784854f711f7da Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Fri, 12 Jul 2019 10:25:11 +0200 Subject: [PATCH 26/39] network name crash fix --- client/src/context/UserProvider.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 30aacc8..7406c0f 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -248,7 +248,10 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { private fetchNetwork = async () => { const { ocean } = this.state - const network = await ocean.keeper.getNetworkName() + let network = 'Unknown' + try { + network = await ocean.keeper.getNetworkName() + } catch (error) {} network !== this.state.network && this.setState({ network }) } From a1fdfa8a90455db82fcb8d48cd9faff75596d3b7 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Fri, 12 Jul 2019 10:51:43 +0200 Subject: [PATCH 27/39] linting --- .../components/templates/Asset/AssetFilesDetails.test.tsx | 2 -- client/src/context/UserProvider.tsx | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/client/src/components/templates/Asset/AssetFilesDetails.test.tsx b/client/src/components/templates/Asset/AssetFilesDetails.test.tsx index 5420c13..2b9f085 100644 --- a/client/src/components/templates/Asset/AssetFilesDetails.test.tsx +++ b/client/src/components/templates/Asset/AssetFilesDetails.test.tsx @@ -4,8 +4,6 @@ import React from 'react' import { render } from '@testing-library/react' import { DDO } from '@oceanprotocol/squid' import AssetFilesDetails from './AssetFilesDetails' -import { User } from '../../../context' -import { userMockConnected } from '../../../../__mocks__/user-mock' describe('AssetFilesDetails', () => { it('renders without crashing', () => { diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index 7406c0f..a7895af 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -251,8 +251,9 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { let network = 'Unknown' try { network = await ocean.keeper.getNetworkName() - } catch (error) {} - network !== this.state.network && this.setState({ network }) + } finally { + network !== this.state.network && this.setState({ network }) + } } public render() { From 3518abab26aa88578c0cdd3d999b180df9024b50 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Fri, 12 Jul 2019 11:18:43 +0200 Subject: [PATCH 28/39] fix network error v2 --- client/src/context/UserProvider.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/context/UserProvider.tsx b/client/src/context/UserProvider.tsx index a7895af..d93d22b 100644 --- a/client/src/context/UserProvider.tsx +++ b/client/src/context/UserProvider.tsx @@ -249,11 +249,10 @@ export default class UserProvider extends PureComponent<{}, UserProviderState> { private fetchNetwork = async () => { const { ocean } = this.state let network = 'Unknown' - try { + if (ocean.keeper) { network = await ocean.keeper.getNetworkName() - } finally { - network !== this.state.network && this.setState({ network }) } + network !== this.state.network && this.setState({ network }) } public render() { From 9c47ed2183bbe0a6ce39d1ceb90c106508373719 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Fri, 12 Jul 2019 12:08:10 +0200 Subject: [PATCH 29/39] fix cypress test --- cypress/integration/consume.spec.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cypress/integration/consume.spec.js b/cypress/integration/consume.spec.js index 09be8cb..baa772d 100644 --- a/cypress/integration/consume.spec.js +++ b/cypress/integration/consume.spec.js @@ -21,9 +21,12 @@ context('Consume', () => { it('Consume asset and check if there is no error', () => { // Click consume button - cy.get('@button').click() + cy.get('button[name="Download"]').click() // Wait consume process to end - cy.get('@button', { timeout: 150000 }).should('contain', 'Get file') + cy.get('button[name="Download"]', { timeout: 150000 }).should( + 'contain', + 'Get file' + ) // check if there is no error cy.get('article>div').should( 'not.contain', From 61aef37e8eff5859179b2ca31f563325c6f5fb2b Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Fri, 12 Jul 2019 13:49:44 +0200 Subject: [PATCH 30/39] test coverage fixes --- client/src/components/atoms/Modal.tsx | 6 ++- .../organisms/WalletSelector.test.tsx | 23 ++++++++++ .../components/organisms/Web3message.test.tsx | 6 +-- .../templates/Asset/Report.test.tsx | 42 +++++++++++++++++++ .../src/components/templates/Asset/Report.tsx | 1 + .../components/templates/Asset/index.test.tsx | 18 ++++---- .../src/components/templates/Asset/index.tsx | 7 +++- .../src/context/BurnerWalletProvider.test.ts | 11 +++++ client/src/context/MarketProvider.test.tsx | 22 ++++++++++ client/src/context/MetamaskProvider.test.tsx | 11 +++++ client/src/routes/Home/Search.test.tsx | 16 +++++++ client/src/routes/Home/index.tsx | 4 +- 12 files changed, 148 insertions(+), 19 deletions(-) create mode 100644 client/src/components/organisms/WalletSelector.test.tsx create mode 100644 client/src/components/templates/Asset/Report.test.tsx create mode 100644 client/src/context/BurnerWalletProvider.test.ts create mode 100644 client/src/context/MarketProvider.test.tsx create mode 100644 client/src/context/MetamaskProvider.test.tsx create mode 100644 client/src/routes/Home/Search.test.tsx diff --git a/client/src/components/atoms/Modal.tsx b/client/src/components/atoms/Modal.tsx index d3b5c7e..84e858b 100644 --- a/client/src/components/atoms/Modal.tsx +++ b/client/src/components/atoms/Modal.tsx @@ -32,7 +32,11 @@ const Modal = ({ overlayClassName={styles.modalOverlay} {...props} > - diff --git a/client/src/components/organisms/WalletSelector.test.tsx b/client/src/components/organisms/WalletSelector.test.tsx new file mode 100644 index 0000000..e668fba --- /dev/null +++ b/client/src/components/organisms/WalletSelector.test.tsx @@ -0,0 +1,23 @@ +import React from 'react' +import { render, fireEvent } from '@testing-library/react' +import ReactModal from 'react-modal' +import WalletSelector from './WalletSelector' +import { User, Market } from '../../context' +import { userMockConnected } from '../../../__mocks__/user-mock' +import { marketMock } from '../../../__mocks__/market-mock' + +describe('WalletSelector', () => { + it('renders without crashing', () => { + ReactModal.setAppElement(document.createElement('div')) + + const { container } = render( + + + + + + ) + expect(container.firstChild).toBeInTheDocument() + fireEvent.click(container.querySelector('button')) + }) +}) diff --git a/client/src/components/organisms/Web3message.test.tsx b/client/src/components/organisms/Web3message.test.tsx index 6e7bd43..950acfc 100644 --- a/client/src/components/organisms/Web3message.test.tsx +++ b/client/src/components/organisms/Web3message.test.tsx @@ -38,8 +38,8 @@ describe('Web3message', () => { it('renders with noAccount message', () => { const { container } = render( - - + + @@ -50,7 +50,7 @@ describe('Web3message', () => { it('renders with hasAccount message', () => { const { container } = render( - + diff --git a/client/src/components/templates/Asset/Report.test.tsx b/client/src/components/templates/Asset/Report.test.tsx new file mode 100644 index 0000000..f6b8942 --- /dev/null +++ b/client/src/components/templates/Asset/Report.test.tsx @@ -0,0 +1,42 @@ +import React from 'react' +import { render, fireEvent, wait } from '@testing-library/react' +import ReactModal from 'react-modal' +import mockAxios from 'jest-mock-axios' +import Report from './Report' + +afterEach(() => { + mockAxios.reset() +}) + +const mockResponse = { + data: { status: 'success' } +} + +describe('Report', () => { + it('renders without crashing', async () => { + ReactModal.setAppElement(document.createElement('div')) + + const { getByText, getByLabelText, getByTestId } = render( + + ) + // Renders button by default + expect(getByText('Report Data Set')).toBeInTheDocument() + + // open modal + fireEvent.click(getByText('Report Data Set')) + await wait(() => expect(getByText('did:xxx')).toBeInTheDocument()) + + // add comment + const comment = getByLabelText('Comment') + fireEvent.change(comment, { + target: { value: 'Plants' } + }) + expect(comment).toHaveTextContent('Plants') + fireEvent.click(getByTestId('report')) + mockAxios.mockResponse(mockResponse) + // expect(mockAxios.post).toHaveBeenCalled() + + // close modal + fireEvent.click(getByTestId('closeModal')) + }) +}) diff --git a/client/src/components/templates/Asset/Report.tsx b/client/src/components/templates/Asset/Report.tsx index 338ae1c..c1ee361 100644 --- a/client/src/components/templates/Asset/Report.tsx +++ b/client/src/components/templates/Asset/Report.tsx @@ -142,6 +142,7 @@ export default class Report extends PureComponent< primary onClick={(e: Event) => this.sendEmail(e)} disabled={this.state.comment === ''} + data-testid="report" > Report Data Set diff --git a/client/src/components/templates/Asset/index.test.tsx b/client/src/components/templates/Asset/index.test.tsx index 4dbad3f..f4158b6 100644 --- a/client/src/components/templates/Asset/index.test.tsx +++ b/client/src/components/templates/Asset/index.test.tsx @@ -1,22 +1,18 @@ import React from 'react' import { render } from '@testing-library/react' +import { createMemoryHistory, createLocation } from 'history' import Details from './index' +const history = createMemoryHistory() +const location = createLocation('/asset/did:xxx') + describe('Details', () => { it('renders loading state by default', () => { const { container } = render(
) expect(container.firstChild).toBeInTheDocument() diff --git a/client/src/components/templates/Asset/index.tsx b/client/src/components/templates/Asset/index.tsx index 7710bce..98b8f33 100644 --- a/client/src/components/templates/Asset/index.tsx +++ b/client/src/components/templates/Asset/index.tsx @@ -8,6 +8,7 @@ import stylesApp from '../../../App.module.scss' import Content from '../../atoms/Content' import CategoryImage from '../../atoms/CategoryImage' import styles from './index.module.scss' +import withTracker from '../../../hoc/withTracker' interface AssetProps { match: { @@ -23,7 +24,9 @@ interface AssetState { error: string } -export default class Asset extends Component { +class Asset extends Component { + public static contextType = User + public state = { ddo: ({} as any) as DDO, metadata: ({ base: { name: '' } } as any) as MetaData, @@ -79,4 +82,4 @@ export default class Asset extends Component { } } -Asset.contextType = User +export default withTracker(Asset) diff --git a/client/src/context/BurnerWalletProvider.test.ts b/client/src/context/BurnerWalletProvider.test.ts new file mode 100644 index 0000000..a1787b3 --- /dev/null +++ b/client/src/context/BurnerWalletProvider.test.ts @@ -0,0 +1,11 @@ +import { BurnerWalletProvider } from './BurnerWalletProvider' + +describe('BurnerWalletProvider', () => { + it('Burner wallet can be created', async () => { + const burnerwalletProvider = new BurnerWalletProvider() + await burnerwalletProvider.startLogin() + const web3 = burnerwalletProvider.getProvider() + + expect(web3) + }) +}) diff --git a/client/src/context/MarketProvider.test.tsx b/client/src/context/MarketProvider.test.tsx new file mode 100644 index 0000000..4567bdc --- /dev/null +++ b/client/src/context/MarketProvider.test.tsx @@ -0,0 +1,22 @@ +import React from 'react' +import { render } from '@testing-library/react' +import MarketProvider from './MarketProvider' +import { User, Market } from '../context' +import { userMockConnected } from '../../__mocks__/user-mock' + +describe('MarketProvider', () => { + it('renders without crashing', () => { + const { getByTestId } = render( + + + + {market => ( +
{market.network}
+ )} +
+
+
+ ) + expect(getByTestId('hello')).toBeInTheDocument() + }) +}) diff --git a/client/src/context/MetamaskProvider.test.tsx b/client/src/context/MetamaskProvider.test.tsx new file mode 100644 index 0000000..d83d142 --- /dev/null +++ b/client/src/context/MetamaskProvider.test.tsx @@ -0,0 +1,11 @@ +import { MetamaskProvider } from './MetamaskProvider' + +describe('MetamaskProvider', () => { + it('MetamaskProvider can be created', async () => { + const metamaskProvider = new MetamaskProvider() + await metamaskProvider.startLogin() + const web3 = metamaskProvider.getProvider() + + expect(web3) + }) +}) diff --git a/client/src/routes/Home/Search.test.tsx b/client/src/routes/Home/Search.test.tsx new file mode 100644 index 0000000..5c4e99e --- /dev/null +++ b/client/src/routes/Home/Search.test.tsx @@ -0,0 +1,16 @@ +import React from 'react' +import { render, fireEvent } from '@testing-library/react' +import Search from './Search' + +describe('Search', () => { + it('renders without crashing', () => { + const { container } = render( null} />) + expect(container.firstChild).toBeInTheDocument() + // type search query + fireEvent.change(container.querySelector('input'), { + target: { value: 'Plants' } + }) + expect(container.querySelector('input').value).toBe('Plants') + // fireEvent.click(getByText('Search')) + }) +}) diff --git a/client/src/routes/Home/index.tsx b/client/src/routes/Home/index.tsx index 54aa795..a221b71 100644 --- a/client/src/routes/Home/index.tsx +++ b/client/src/routes/Home/index.tsx @@ -24,7 +24,7 @@ interface HomeState { class Home extends PureComponent { public static contextType = Market - private searchAssets = ( + public searchAssets = ( search: string, event: FormEvent ) => { @@ -40,7 +40,7 @@ class Home extends PureComponent { className={styles.home} > - + From 892c07b7832dfde13953a0e17e3cf734d6bc9dcd Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Fri, 12 Jul 2019 17:56:13 +0200 Subject: [PATCH 31/39] mention burner wallet in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f14397..7f0b1ef 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ To make use of all the functionality, you need to connect to an Ocean network. By default, the client will connect to Ocean components running within [Ocean's Pacific network](https://docs.oceanprotocol.com/concepts/pacific-network/) remotely. -With your MetaMask, connect to the Pacific network. To do this: +By default, the client uses a burner wallet connected to the correct network automatically. If you choose to use MetaMask, you need to connect to the Pacific network. To do this: 1. select Custom RPC in the network dropdown in MetaMask 2. under New Network, enter `https://pacific.oceanprotocol.com` as the custom RPC URL From 57dcdb7c21af32a800726ae1f93345670781a091 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Mon, 15 Jul 2019 12:41:52 +0200 Subject: [PATCH 32/39] leave seedphrase present --- client/src/context/BurnerWalletProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/context/BurnerWalletProvider.ts b/client/src/context/BurnerWalletProvider.ts index 8040d7a..1f0b445 100644 --- a/client/src/context/BurnerWalletProvider.ts +++ b/client/src/context/BurnerWalletProvider.ts @@ -43,7 +43,7 @@ export class BurnerWalletProvider { } public async logout() { - localStorage.removeItem('seedphrase') + // localStorage.removeItem('seedphrase') localStorage.removeItem('logType') } From 3a7247020820ce2e894bc38141e4c59e68dad147 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Mon, 15 Jul 2019 13:00:27 +0200 Subject: [PATCH 33/39] squid to 0.6.4 --- client/package-lock.json | 15 ++++++++++++--- client/package.json | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 2a9ceb3..8f0c900 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1295,12 +1295,21 @@ "resolved": "https://registry.npmjs.org/@oceanprotocol/keeper-contracts/-/keeper-contracts-0.10.3.tgz", "integrity": "sha512-Nvnk9nNWMmfXz38bHRHHNgc8MGmFPZTkXPBWbEXR9+maJq5/kRFx8OckroKqmYXX4QBEh5frwd77omNOL2MUNw==" }, + "@oceanprotocol/secret-store-client": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/@oceanprotocol/secret-store-client/-/secret-store-client-0.0.15.tgz", + "integrity": "sha512-5yNNA+qdjut9/nMiFKJd4D4io+GhzdfvdqVd5YMkgT9RV1qDosGj6NVsKArYay6g+tQH7pCJ6Y1FiAbhaaFB9g==", + "requires": { + "node-fetch": "^2.6.0" + } + }, "@oceanprotocol/squid": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@oceanprotocol/squid/-/squid-0.6.2.tgz", - "integrity": "sha512-H9xHNIYl2sNiMIAC7pd936azNI9EBpbyWMA4kcKo8jbOdIfskbXrPFab3t+EYsbHBnRuV8oWEPT7hUVLOL8SJQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@oceanprotocol/squid/-/squid-0.6.4.tgz", + "integrity": "sha512-cNSB2uKnATSMdHQzGkFX3XyyYkfKxHYbvUiNWLgP7gpljwBrldeRf1Dk4Rk2yrlZ44K/oKOiJniwiC3VcoEDyg==", "requires": { "@oceanprotocol/keeper-contracts": "^0.10.3", + "@oceanprotocol/secret-store-client": "0.0.15", "bignumber.js": "^8.1.1", "deprecated-decorator": "^0.1.6", "node-fetch": "^2.6.0", diff --git a/client/package.json b/client/package.json index 700afee..556ccd0 100644 --- a/client/package.json +++ b/client/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@oceanprotocol/art": "^2.2.0", - "@oceanprotocol/squid": "0.6.2", + "@oceanprotocol/squid": "^0.6.4", "@oceanprotocol/typographies": "^0.1.0", "@sindresorhus/slugify": "^0.9.1", "axios": "^0.19.0", From 8d2dee65543ac58eb5517eede12be91d4c110a5f Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Mon, 15 Jul 2019 15:28:08 +0200 Subject: [PATCH 34/39] vulnerability fixes --- client/package-lock.json | 41 ++++++++++---------------------------- server/package-lock.json | 43 ++++++++++------------------------------ 2 files changed, 20 insertions(+), 64 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 8f0c900..f28dac8 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11006,9 +11006,9 @@ } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -14825,9 +14825,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -16419,35 +16419,14 @@ } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { diff --git a/server/package-lock.json b/server/package-lock.json index af6b101..1faf098 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -4096,9 +4096,9 @@ "dev": true }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -5107,9 +5107,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -5856,38 +5856,15 @@ } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-string": { From ba33fc52a45f42e0512559fe3048999a3f7128f9 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Mon, 15 Jul 2019 16:14:55 +0200 Subject: [PATCH 35/39] fix test coverage --- client/src/components/atoms/Account.test.tsx | 21 ++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/client/src/components/atoms/Account.test.tsx b/client/src/components/atoms/Account.test.tsx index 9e81653..586d9d0 100644 --- a/client/src/components/atoms/Account.test.tsx +++ b/client/src/components/atoms/Account.test.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { render } from '@testing-library/react' +import { render, fireEvent } from '@testing-library/react' import { toDataUrl } from 'ethereum-blockies' import Account from './Account' import { User } from '../../context' @@ -18,12 +18,13 @@ describe('Account', () => { }) it('outputs empty state without account', () => { - const { container } = render( + const { container, getByText } = render( ) expect(container.firstChild).toHaveTextContent('No account selected') + fireEvent.click(getByText('Unlock Account')) }) it('outputs blockie img', () => { @@ -41,4 +42,20 @@ describe('Account', () => { blockies ) }) + + it('Account info can be toggled', () => { + const { container, getByText } = render( + + + + ) + expect(container.firstChild).toBeInTheDocument() + fireEvent.click(getByText('Burner Wallet')) + }) }) From 9e3f56e622609f027786b9386e6146a5775b0f39 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Mon, 15 Jul 2019 17:56:27 +0200 Subject: [PATCH 36/39] block download/publish when connected to wrong network with MetaMask --- .../components/templates/Asset/AssetFile.tsx | 48 ++++++++++--------- client/src/routes/Publish/Step.tsx | 31 +++++++----- 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/client/src/components/templates/Asset/AssetFile.tsx b/client/src/components/templates/Asset/AssetFile.tsx index 778453f..fbdafb2 100644 --- a/client/src/components/templates/Asset/AssetFile.tsx +++ b/client/src/components/templates/Asset/AssetFile.tsx @@ -3,13 +3,13 @@ import { Logger, DDO, File } from '@oceanprotocol/squid' import filesize from 'filesize' import Button from '../../atoms/Button' import Spinner from '../../atoms/Spinner' -import { User } from '../../../context' +import { User, Market } from '../../../context' import styles from './AssetFile.module.scss' import ReactGA from 'react-ga' import cleanupContentType from '../../../utils/cleanupContentType' -export const messages = { - start: 'Decrypting file URL...', +export const messages: any = { + 99: 'Decrypting file URL...', 0: '1/3
Asking for agreement signature...', 1: '1/3
Agreement initialized.', 2: '2/3
Asking for two payment confirmations...', @@ -25,24 +25,26 @@ interface AssetFileProps { interface AssetFileState { isLoading: boolean error: string - step: number | string | null + step: number } export default class AssetFile extends PureComponent< AssetFileProps, AssetFileState > { + public static contextType = User + public state = { isLoading: false, error: '', - step: null + step: 99 } private resetState = () => this.setState({ isLoading: true, error: '', - step: null + step: 99 }) private purchaseAsset = async (ddo: DDO, index: number) => { @@ -134,22 +136,24 @@ export default class AssetFile extends PureComponent< {isLoading ? ( - + ) : ( - + + {market => ( + + )} + )} {error !== '' &&
{error}
} @@ -157,5 +161,3 @@ export default class AssetFile extends PureComponent< ) } } - -AssetFile.contextType = User diff --git a/client/src/routes/Publish/Step.tsx b/client/src/routes/Publish/Step.tsx index 9dae46a..6df542e 100644 --- a/client/src/routes/Publish/Step.tsx +++ b/client/src/routes/Publish/Step.tsx @@ -3,7 +3,7 @@ import Input from '../../components/atoms/Form/Input' import Label from '../../components/atoms/Form/Label' import Row from '../../components/atoms/Form/Row' import Button from '../../components/atoms/Button' -import { User } from '../../context' +import { User, Market } from '../../context' import Files from './Files/' import StepRegisterContent from './StepRegisterContent' import styles from './Step.module.scss' @@ -43,6 +43,8 @@ interface StepProps { } export default class Step extends PureComponent { + public static contextType = User + public previousButton() { const { currentStep, prev } = this.props @@ -152,23 +154,26 @@ export default class Step extends PureComponent { {this.nextButton()} {lastStep && ( - + + {market => ( + + )} + )}
- + {!lastStep && }
) } } - -Step.contextType = User From b09c15ff1b8445546ce50d19f7d3bef9b02f0588 Mon Sep 17 00:00:00 2001 From: Jernej Pregelj Date: Tue, 16 Jul 2019 12:16:16 +0200 Subject: [PATCH 37/39] get versions on each rerender --- .../src/components/molecules/VersionNumbers/index.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/components/molecules/VersionNumbers/index.tsx b/client/src/components/molecules/VersionNumbers/index.tsx index aadf29c..7319878 100644 --- a/client/src/components/molecules/VersionNumbers/index.tsx +++ b/client/src/components/molecules/VersionNumbers/index.tsx @@ -79,15 +79,15 @@ export default class VersionNumbers extends PureComponent< // for canceling axios requests public signal = axios.CancelToken.source() - public async componentDidMount() { - this.getOceanVersions() - this.getFaucetVersion() - } - public componentWillUnmount() { this.signal.cancel() } + public componentWillReceiveProps() { + this.getOceanVersions() + this.getFaucetVersion() + } + private async getOceanVersions() { const { ocean } = this.context // wait until ocean object is properly populated From c1ff41b711a9fda655948f8372dff6f34386c644 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 16 Jul 2019 14:50:30 +0200 Subject: [PATCH 38/39] fix AssetFile unit test --- .../src/components/templates/Asset/AssetFile.test.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/client/src/components/templates/Asset/AssetFile.test.tsx b/client/src/components/templates/Asset/AssetFile.test.tsx index 8d46d78..1ca2296 100644 --- a/client/src/components/templates/Asset/AssetFile.test.tsx +++ b/client/src/components/templates/Asset/AssetFile.test.tsx @@ -5,9 +5,10 @@ import { render, fireEvent } from '@testing-library/react' import { DDO } from '@oceanprotocol/squid' import { StateMock } from '@react-mock/state' import ReactGA from 'react-ga' -import { User } from '../../../context' +import { User, Market } from '../../../context' import AssetFile, { messages } from './AssetFile' import { userMockConnected } from '../../../../__mocks__/user-mock' +import { marketMock } from '../../../../__mocks__/market-mock' const file = { index: 0, @@ -39,7 +40,9 @@ describe('AssetFile', () => { it('button to be enabled when connected', async () => { const { getByText } = render( - + + + ) const button = getByText('Get file') @@ -50,12 +53,12 @@ describe('AssetFile', () => { it('renders feedback message: initial', async () => { const { container } = render( - + ) expect(container.querySelector('.spinner')).toHaveTextContent( - messages.start + messages[99] ) }) From a31b041c05ce00ab412b1bdd197896ae17ef5552 Mon Sep 17 00:00:00 2001 From: Matthias Kretschmann Date: Tue, 16 Jul 2019 18:45:22 +0200 Subject: [PATCH 39/39] workaround for version number components updating --- .../VersionNumbers/VersionTable.test.tsx | 13 ++- .../molecules/VersionNumbers/VersionTable.tsx | 12 ++- .../molecules/VersionNumbers/index.tsx | 63 ++++++++----- client/src/components/organisms/Footer.tsx | 89 +++++++++---------- client/src/routes/About.tsx | 86 +++++++++--------- 5 files changed, 143 insertions(+), 120 deletions(-) diff --git a/client/src/components/molecules/VersionNumbers/VersionTable.test.tsx b/client/src/components/molecules/VersionNumbers/VersionTable.test.tsx index e408154..b107cbe 100644 --- a/client/src/components/molecules/VersionNumbers/VersionTable.test.tsx +++ b/client/src/components/molecules/VersionNumbers/VersionTable.test.tsx @@ -26,6 +26,17 @@ describe('VersionTableContracts', () => { /submarine.duero.dev-ocean/ ) + rerender( + + ) + expect(container.querySelector('tr:last-child a').href).toMatch( + /submarine.nile.dev-ocean/ + ) + rerender( { /> ) expect(container.querySelector('tr:last-child a').href).toMatch( - /submarine.pacific.dev-ocean/ + /submarine.oceanprotocol/ ) }) }) diff --git a/client/src/components/molecules/VersionNumbers/VersionTable.tsx b/client/src/components/molecules/VersionNumbers/VersionTable.tsx index 9d1eaba..df0ec1b 100644 --- a/client/src/components/molecules/VersionNumbers/VersionTable.tsx +++ b/client/src/components/molecules/VersionNumbers/VersionTable.tsx @@ -53,13 +53,11 @@ export const VersionTableContracts = ({ // sort alphabetically .sort((a, b) => a.localeCompare(b)) .map(key => { - const submarineLink = `https://submarine${ - network === 'duero' - ? '.duero' - : network === 'pacific' - ? '.pacific' - : '' - }.dev-ocean.com/address/${contracts[key]}` + const submarineLink = `https://submarine.${ + network === 'pacific' + ? 'oceanprotocol' + : `${network}.dev-ocean` + }.com/address/${contracts[key]}` return ( diff --git a/client/src/components/molecules/VersionNumbers/index.tsx b/client/src/components/molecules/VersionNumbers/index.tsx index 7319878..2b7ea55 100644 --- a/client/src/components/molecules/VersionNumbers/index.tsx +++ b/client/src/components/molecules/VersionNumbers/index.tsx @@ -9,19 +9,14 @@ import { version } from '../../../../package.json' import styles from './index.module.scss' import { nodeUri, faucetUri } from '../../../config' -import { User } from '../../../context' +import { User, Market } from '../../../context' import VersionTable from './VersionTable' import VersionStatus from './VersionStatus' -// construct values which are not part of any response -export const commonsVersion = - process.env.NODE_ENV === 'production' ? version : `${version}-dev` -const commonsNetwork = new URL(nodeUri).hostname.split('.')[0] -const faucetNetwork = new URL(faucetUri).hostname.split('.')[1] - interface VersionNumbersProps { minimal?: boolean + account: string } export interface VersionNumbersState extends OceanPlatformVersions { @@ -44,12 +39,20 @@ export default class VersionNumbers extends PureComponent< > { public static contextType = User + // construct values which are not part of any response + public commonsVersion = + process.env.NODE_ENV === 'production' ? version : `${version}-dev` + public commonsNetwork = new URL(nodeUri).hostname.split('.')[0] + public faucetNetwork = faucetUri.includes('dev-ocean') + ? new URL(faucetUri).hostname.split('.')[1] + : 'Pacific' + // define a minimal default state to fill UI public state: VersionNumbersState = { commons: { name: 'Commons', - network: commonsNetwork, - version: commonsVersion + network: this.commonsNetwork, + version: this.commonsVersion }, squid: { name: 'Squid-js', @@ -66,7 +69,7 @@ export default class VersionNumbers extends PureComponent< faucet: { name: 'Faucet', version: '', - network: faucetNetwork, + network: this.faucetNetwork, status: OceanPlatformTechStatus.Loading }, status: { @@ -79,15 +82,24 @@ export default class VersionNumbers extends PureComponent< // for canceling axios requests public signal = axios.CancelToken.source() - public componentWillUnmount() { - this.signal.cancel() - } - - public componentWillReceiveProps() { + public componentDidMount() { this.getOceanVersions() this.getFaucetVersion() } + public async componentDidUpdate(prevProps: any) { + // Workaround: Using account prop instead of getting it from + // context to be able to compare. Cause there is no `prevContext`. + if (prevProps.account !== this.props.account) { + this.getOceanVersions() + this.getFaucetVersion() + } + } + + public componentWillUnmount() { + this.signal.cancel() + } + private async getOceanVersions() { const { ocean } = this.context // wait until ocean object is properly populated @@ -132,14 +144,19 @@ export default class VersionNumbers extends PureComponent< const { commons, squid, brizo, aquarius } = this.state return ( -

- - v{commons.version} {squid.network && `(${squid.network})`} - -

+ + {market => ( +

+ + v{commons.version}{' '} + {market.network && `(${market.network})`} + +

+ )} +
) } diff --git a/client/src/components/organisms/Footer.tsx b/client/src/components/organisms/Footer.tsx index bc69c5b..6d3c08e 100644 --- a/client/src/components/organisms/Footer.tsx +++ b/client/src/components/organisms/Footer.tsx @@ -1,5 +1,5 @@ -import React from 'react' -import { Market } from '../../context' +import React, { useContext } from 'react' +import { Market, User } from '../../context' import Content from '../atoms/Content' import { ReactComponent as AiCommons } from '../../img/aicommons.svg' import styles from './Footer.module.scss' @@ -7,48 +7,47 @@ import styles from './Footer.module.scss' import meta from '../../data/meta.json' import VersionNumbers from '../molecules/VersionNumbers' -const Footer = () => ( -
- - - - - © {new Date().getFullYear()}{' '} - {meta.company} — All - Rights Reserved - - - - -
-) - -export default Footer + + ) +} diff --git a/client/src/routes/About.tsx b/client/src/routes/About.tsx index 5cb27be..45b488c 100644 --- a/client/src/routes/About.tsx +++ b/client/src/routes/About.tsx @@ -1,5 +1,5 @@ -import React, { Component } from 'react' -import { Market } from '../context' +import React, { useContext } from 'react' +import { Market, User } from '../context' import Route from '../components/templates/Route' import Content from '../components/atoms/Content' import VersionNumbers from '../components/molecules/VersionNumbers' @@ -7,51 +7,49 @@ import Web3message from '../components/organisms/Web3message' import stylesVersionNumbers from '../components/molecules/VersionNumbers/index.module.scss' import withTracker from '../hoc/withTracker' -class About extends Component { - public static contextType = Market +const About = () => { + const market = useContext(Market) + const user = useContext(User) - public render() { - return ( - - -

- Commons is built on top of the Ocean{' '} - - {this.context.network} network - {' '} - and is targeted at enthusiastic data scientists with - some crypto experience. It can be used with any - Web3-capable browser, like Firefox with MetaMask - installed. -

+ return ( + + +

+ Commons is built on top of the Ocean{' '} + + {market.network} network + {' '} + and is targeted at enthusiastic data scientists with some + crypto experience. It can be used with any Web3-capable + browser, like Firefox with MetaMask installed. +

- -
+ +
- -

- Your Web3 Account Status -

- - -
-
- ) - } + +

+ Your Web3 Account Status +

+ + +
+ + ) } export default withTracker(About)