From cb67aab6620b9a2cb72619bfdfbcb4ac59231aed Mon Sep 17 00:00:00 2001 From: Ezerous Date: Mon, 31 Aug 2020 19:16:15 +0300 Subject: [PATCH] Initial cleanup --- .babelrc | 8 - .eslintrc.js | 15 - .gitignore | 15 +- .npmignore | 17 +- .travis.yml | 5 - CHANGELOG.md | 13 - CONTRIBUTING.md | 120 - LICENSE.txt => LICENSE | 2 + README.md | 379 +-- index.d.ts | 42 - jest.config.js | 13 - package.json | 66 +- readme/drizzle-logomark.png | Bin 9097 -> 0 bytes readme/drizzle-sync1.png | Bin 10470 -> 0 bytes readme/drizzle-sync2.png | Bin 15820 -> 0 bytes readme/drizzle-sync3.png | Bin 16384 -> 0 bytes readme/drizzle-sync4.png | Bin 13230 -> 0 bytes src/DrizzleContract.js | 1 + src/accountBalances/accountBalancesSaga.js | 2 +- src/accounts/accountsSaga.js | 2 +- src/blocks/blocksSaga.js | 8 +- src/defaultOptions.js | 3 - src/drizzleStatus/drizzleStatusSaga.js | 2 +- src/mergeOptions.js | 4 +- src/web3/web3Saga.js | 4 +- test/accountBalances.test.js | 53 - test/accounts.test.js | 38 - test/blocks.test.js | 91 - test/contractStateUtils.test.js | 122 - test/drizzle/api.test.js | 167 -- test/drizzle/getOrCreateWeb3.test.js | 48 - test/drizzle/middleware.test.js | 184 -- test/drizzle/options.test.js | 75 - test/environments/ganache-environment.js | 45 - test/generateStore.test.js | 67 - test/utils/data/TestContract-abi.json | 42 - test/utils/data/TestContract-byteCode.json | 6 - test/utils/data/TestContract.sol | 12 - test/utils/helpers.js | 60 - test/web3.test.js | 176 -- types/Drizzle.d.ts | 36 - types/IContract.d.ts | 83 - types/contractStateUtils.d.ts | 25 - types/generateStore.d.ts | 13 - types/index.d.ts | 3 - webpack/base.config.js | 30 - webpack/pure.config.js | 6 - webpack/release.config.js | 14 - yarn.lock | 2744 ++++++++++++++++++++ 49 files changed, 2791 insertions(+), 2070 deletions(-) delete mode 100644 .babelrc delete mode 100644 .eslintrc.js delete mode 100644 .travis.yml delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md rename LICENSE.txt => LICENSE (96%) delete mode 100644 index.d.ts delete mode 100644 jest.config.js delete mode 100644 readme/drizzle-logomark.png delete mode 100644 readme/drizzle-sync1.png delete mode 100644 readme/drizzle-sync2.png delete mode 100644 readme/drizzle-sync3.png delete mode 100644 readme/drizzle-sync4.png delete mode 100644 test/accountBalances.test.js delete mode 100644 test/accounts.test.js delete mode 100644 test/blocks.test.js delete mode 100644 test/contractStateUtils.test.js delete mode 100644 test/drizzle/api.test.js delete mode 100644 test/drizzle/getOrCreateWeb3.test.js delete mode 100644 test/drizzle/middleware.test.js delete mode 100644 test/drizzle/options.test.js delete mode 100644 test/environments/ganache-environment.js delete mode 100644 test/generateStore.test.js delete mode 100644 test/utils/data/TestContract-abi.json delete mode 100644 test/utils/data/TestContract-byteCode.json delete mode 100644 test/utils/data/TestContract.sol delete mode 100644 test/utils/helpers.js delete mode 100644 test/web3.test.js delete mode 100644 types/Drizzle.d.ts delete mode 100644 types/IContract.d.ts delete mode 100644 types/contractStateUtils.d.ts delete mode 100644 types/generateStore.d.ts delete mode 100644 types/index.d.ts delete mode 100644 webpack/base.config.js delete mode 100644 webpack/pure.config.js delete mode 100644 webpack/release.config.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 363d872..0000000 --- a/.babelrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "presets": ["@babel/preset-env"], - "plugins": [ - "@babel/plugin-transform-runtime", - "@babel/plugin-transform-arrow-functions", - "@babel/plugin-proposal-object-rest-spread" - ] -} \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index fe118f4..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - "extends": ["standard", "plugin:jest/recommended"], - "plugins": ["jest"], - "rules": { - "jest/prefer-to-have-length": "warn", - "space-before-function-paren": ["error", { - "anonymous": "ignore", - "asyncArrow": "always", - "named": "ignore" - }] - }, - "env" : { - "jest/globals": true - } -} diff --git a/.gitignore b/.gitignore index 078bac2..ebbe7d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,12 @@ +# Node +/node_modules + +# IDE .DS_Store -.tern-project -dist -node_modules -yarn* \ No newline at end of file +.idea + +# Logs +/log +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/.npmignore b/.npmignore index 4d66878..f012e2a 100644 --- a/.npmignore +++ b/.npmignore @@ -1,10 +1,9 @@ -.DS_Store -jest.config.js -.travis.yml -.eslintrc.js -.babelrc +# Jetbrains +.idea -node_modules -test -webpack -.github +# Git +.gitattributes + +# Package managers +yarn.lock +*.tgz diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e1acb3d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "11.10.1" - - "--lts" -cache: npm diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index d6fdda4..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -## 1.5.1 (2019-10-29) - - -### Bug Fixes - -* handle customProvider option correctly ([be2488f](https://github.com/trufflesuite/drizzle/commit/be2488f)) -* readme.md ([d0da8b5](https://github.com/trufflesuite/drizzle/commit/d0da8b5)) -* readme.md ([ac187f5](https://github.com/trufflesuite/drizzle/commit/ac187f5)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 5aec74c..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,120 +0,0 @@ -Contributing to Drizzle -======================= - -_Thanks for taking the time to help out and improve Drizzle! :tada:_ - -The following is a set of guidelines for Drizzle contributions and may change over time. Feel free to suggest improvements to this document in a pull request! - - -Contents --------- - -[How Can I Contribute?](#how-can-i-contribute) - -[Development](#development) - - [Overview](#overview) - - [Development Requirements](#development-requirements) - - [Getting Started](#getting-started) - - [Forks, Branches, and Pull Requests](#forks-branches-and-pull-requests) - - [Branching Model](#branching-model) - - [Working on a Branch](#working-on-a-branch) - -[Additional Notes](#additional-notes) - - -How Can I Contribute? ---------------------- - -All contributions are welcome! - -If you run into an issue, the first step is to reach out in [our community Gitter channel](https://gitter.im/ConsenSys/truffle), in case others have run into the problem or know how to help. - -To report a problem or to suggest a new feature, [open a GitHub Issue](https://github.com/trufflesuite/drizzle/issues/new). This will help the Drizzle maintainers become aware of the problem and prioritize a fix. - -For code contributions, for either new features or bug fixes, see [Development](#development). - -If you're looking to make a substantial change, you may want to reach out first to give us a heads up. - - -Development ------------ - -### Overview - -Drizzle has two companion libraries ([`drizzle-react`](https://github.com/trufflesuite/drizzle-react) and [`drizzle-react-components`](https://github.com/trufflesuite/drizzle-react-components)), each with their own NPM packages. - -The content of this guide applies to those companion libraries as well. - -This repository ([trufflesuite/drizzle](https://github.com/trufflesuite/drizzle)) contains the core logic for storing and updating chaindata in a [Redux](https://github.com/reduxjs/redux) store. - -### Development Requirements - -In order to develop Drizzle, you'll need: - -- [Git](https://git-scm.com/) -- [Node.js](https://nodejs.org) - -### Getting Started - -First clone this repository and install NPM dependencies: - - $ git clone git@github.com:trufflesuite/drizzle.git - $ cd drizzle - $ npm install - $ npm test - -If all is good, then run the build command : - - $ npm run build - -Your local Drizzle copy is contained in the `dist/` directory. - -To use this in a project, use `npm link`: - - $ cd dist - $ npm link // may require sudo - $ cd my-project-root - $ npm link drizzle - -You're ready to use your local development version of Drizzle in your project. - -### Forks, Branches, and Pull Requests - -Community contributions to Drizzle require that you first fork each repository you wish to modify. After your modifications, push changes to your fork(s) and submit a pull request upstream to `trufflesuite`'s fork(s). - -See GitHub documentation about [Collaborating with issues and pull requests](https://help.github.com/categories/collaborating-with-issues-and-pull-requests/) for more information. - -> :exclamation: **Note:** _Drizzle development uses a long-lived `develop` branch for new (non-hotfix) development. Pull Requests should be opened against `develop` in all repositories._ - -#### Branching Model - -Drizzle projects adhere to Gitflow, a Git workflow designed around a strict branching model to more easily track feature development vs. releases. [For more information on Gitflow, check out Atlassian's helpful guide](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow). - -We can separate our branches into long-lived and purposeful branches. We have two long-lived branches: - -- **`master`**, checkout for hotfix development; in sync with the latest `release` (synced after the release has gone out publicly). -- **`develop`**, checkout for feature development; latest unstable releases and work targeting the next major or minor release. - -All development is done on branches with a `prefix/title` style naming convention. These are later merged into `develop` and finally a `release` branch before final release. These are the two prefixes we use: - -- **`feature/`**, for new feature development; later merged with `develop` and `release`. -- **`fix/`**, for hotfix development; later merged with `master` and `develop`. - -For example, a fix for a contract fetching error might look like: `fix/contract-fetching`. - -#### Working on a Branch - -Use a branch for your modifications, tracking it on your fork: - - $ git checkout -b feature/sweet-feature // or "fix/" prefix if a hotfix - $ git push -u ChocolateLover feature/sweet-feature - -Then, make changes and commit as usual. - - -Additional Notes ----------------- - -Join the chat in [our community Gitter channel](https://gitter.im/ConsenSys/truffle). If anything about this process is unclear, or for helpful feedback of any kind, we'd love to hear from you! - -**Thanks again for all your support, encouragement, and effort! Drizzle would not be possible without contributors like you. :bow:** \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE similarity index 96% rename from LICENSE.txt rename to LICENSE index 73a1178..5c81f74 100644 --- a/LICENSE.txt +++ b/LICENSE @@ -1,5 +1,7 @@ MIT License +Copyright (c) 2020 Ezerous + Copyright (c) 2017 Joshua Quintal Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index 6809dc2..f432153 100644 --- a/README.md +++ b/README.md @@ -1,378 +1,3 @@ - +# @ezerous/drizzle -# @drizzle/store - -`npm install --save @drizzle/store` - -Drizzle is a collection of front-end libraries that make writing dapp frontends easier and more predictable. The core of Drizzle is based on a Redux store, so you have access to the spectacular development tools around Redux. We take care of synchronizing your contract data, transaction data and more. Things stay fast because you declare what to keep in sync. - -- Fully reactive contract data, including state, events and transactions. -- Declarative, so you're not wasting valuable cycles on uneeded data. -- Maintains access to underlying functionality. Web3 and your contract's methods are still there, untouched. - -**Using React?**: The easiest way to get started with Drizzle is to use our [official `@drizzle/react-plugin` package](https://github.com/trufflesuite/drizzle/tree/master/packages/react-plugin) and (optionally) its companion [`@drizzle/react-components`](https://github.com/trufflesuite/drizzle/tree/master/packages/react-components). - -## Getting Started - -**Note**: Since Drizzle uses web3 1.0 and web sockets, be sure your development environment can support these. - -1. Import the provider. - - ```javascript - import { Drizzle } from "@drizzle/store"; - ``` - -1. Create an `options` object and pass in the desired contract artifacts for Drizzle to instantiate. Other options are available, see [the Options section](#options) below. - - ```javascript - // Import contracts - import SimpleStorage from "./../build/contracts/SimpleStorage.json"; - import TutorialToken from "./../build/contracts/TutorialToken.json"; - - const options = { - contracts: [SimpleStorage] - }; - - const drizzle = new Drizzle(options); - ``` - - **Note**: The above assumes you have no existing redux store and will generate a new one. If you need something more sophisticated, consult our documentation [Using Drizzle's Redux Store](https://www.truffleframework.com/docs/drizzle/getting-started/using-drizzles-redux-store) - -1. Get contract data. Calling the `cacheCall()` function on a contract will - execute the desired call and return a corresponding key so the data can be - retrieved from the store. When a new block is received, Drizzle will refresh - the store automatically _if_ any transactions in the block touched our - contract. For more information on how this works, see [How Data Stays - Fresh](#how-data-stays-fresh). - - **Note:** We have to check that Drizzle is initialized before fetching data. A simple if statement such as below is fine for displaying a few pieces of data, but a better approach for larger dapps is to use a [loading component](https://github.com/trufflesuite/drizzle-react#recipe-loading-component). We've already built one for you in our [`@drizzle/react-components` library](https://github.com/trufflesuite/drizzle/tree/master/packages/react-components) as well. - - ```javascript - // Assuming we're observing the store for changes. - const state = drizzle.store.getState(); - - // If Drizzle is initialized (and therefore web3, accounts and contracts), continue. - if (state.drizzleStatus.initialized) { - // Declare this call to be cached and synchronized. We'll receive the store key for recall. - const dataKey = drizzle.contracts.SimpleStorage.methods.storedData.cacheCall(); - - // Use the dataKey to display data from the store. - return state.contracts.SimpleStorage.storedData[dataKey].value; - } - - // If Drizzle isn't initialized, display some loading indication. - return "Loading..."; - ``` - - The contract instance has all of its standard web3 properties and methods. For example, you could still call as normal if you don't want something in the store: - - ```javascript - drizzle.contracts.SimpleStorage.methods.storedData().call(); - ``` - -1. Send a contract transaction. Calling the `cacheSend()` function on a contract will send the desired transaction and return a corresponding transaction hash so the status can be retrieved from the store. The last argument can optionally be an options object with the typical from, gas and gasPrice keys. Drizzle will update the transaction's state in the store (pending, success, error) and store the transaction receipt. For more information on how this works, see [How Data Stays Fresh](#how-data-stays-fresh). - - **Note:** We have to check that Drizzle is initialized before fetching data. A simple if statement such as below is fine for displaying a few pieces of data, but a better approach for larger dapps is to use a [loading component](https://github.com/trufflesuite/drizzle/tree/master/packages/react-plugin#recipe-loading-component). We've already built one for you in our [`@drizzle/react-components` library](https://github.com/trufflesuite/drizzle/tree/master/packages/react-components) as well. - - ```javascript - // Assuming we're observing the store for changes. - const state = drizzle.store.getState(); - - // If Drizzle is initialized (and therefore web3, accounts and contracts), continue. - if (state.drizzleStatus.initialized) { - // Declare this transaction to be observed. We'll receive the stackId for reference. - const stackId = drizzle.contracts.SimpleStorage.methods.set.cacheSend(2, { - from: "0x3f..." - }); - - // Use the dataKey to display the transaction status. - if (state.transactionStack[stackId]) { - const txHash = state.transactionStack[stackId]; - - return state.transactions[txHash].status; - } - } - - // If Drizzle isn't initialized, display some loading indication. - return "Loading..."; - ``` - - For more information on what's contained in transaction state, see [Drizzle State](#drizzle-state). - - The contract instance has all of its standard web3 properties and methods. For example, you could still send as normal if you don't want a tx in the store: - - ```javascript - drizzle.contracts.SimpleStorage.methods.set(2).send({ from: "0x3f..." }); - ``` - -## Adding contracts dynamically - -You can programmatically add contracts to Drizzle using either `drizzle.addContract()` or the `ADD_CONTRACT` action. - -```javascript -const contractConfig = { - contractName: "0x066408929e8d5Ed161e9cAA1876b60e1fBB5DB75", - web3Contract: new web3.eth.Contract(/* ... */) -}; -events = ["Mint"]; - -// Using an action -dispatch({ type: "ADD_CONTRACT", drizzle, contractConfig, events, web3 }); - -// Or using the Drizzle context object -this.context.drizzle.addContract(contractConfig, events); -``` - -## Deleting contracts - -You can also delete contracts using either `drizzle.deleteContract()` or the `DELETE_CONTRACT` action. - -```javascript -const contractName = "MyContract"; - -// Using an action -dispatch({ type: "DELETE_CONTRACT", drizzle, contractName }); - -// Or using the Drizzle context object -this.context.drizzle.deleteContract(contractName); -``` - -## Options - -Drizzle has a number of configuration options so it only keeps track of exactly the data you need. Here's the full list of options along with their default values. - -```javascript -{ - contracts, - events: { - contractName: [ - eventName, - { - eventName, - eventOptions - } - ] - }, - polls: { - accounts: interval, - blocks: interval - }, - syncAlways, - web3: { - customProvider, - fallback: { - type - url - } - }, - networkWhitelist -} -``` - -### `contracts` (array) - -An array of either contract artifact files or Web3 contract objects. The objects have a `contractName` and `web3Contract` key. - -i.e. - -``` -contracts: [ - truffleArtifact, // A regular Truffle contract artifact - { - contractName: 'RegisteredContract', - web3Contract: new web3.eth.Contract(abi, address, {data: 'deployedBytecode' }) // An instance of a Web3 contract - } -] -``` - -### `events` (object) - -An object consisting of contract names each containing an array of strings of the event names we'd like to listen for and sync with the store. Furthermore, event names may be replaced with an object containing both `eventName` and `eventOptions`, where `eventOptions` field corresponds to the [web3 Contract.events options](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events). - -### `polls` (object) - -An object containing key/value pairs denoting what is being polled and the interval (in ms). Possible polls are accounts and blocks. Accounts will poll for addresses and balances, blocks for new blocks. **Default**: `{ blocks: 3000 }` - -### `syncAlways` (boolean) - -If `true`, will replay all contract calls at every block. This is useful if your dapp uses a proxy contract which obfuscates your primary contract's address. By default Drizzle checks blocks to see if a transaction interacting with your contracts has occured. If so, it syncs that contract. **Default**: `false` - -### `web3` (object) - -Options regarding `web3` instantiation. - -#### `customProvider` (object) - -A valid web3 `provider` object. For example, you may wish to programatically create a Ganache provider for testing: - -``` -// Create a Ganache provider. -const testingProvider = Ganache.provider({ - gasLimit: 7000000 -}) - -const options = { - web3: { - customProvider: testingProvider - } -} - -const drizzle = new Drizzle(options) -``` - -#### `fallback` (object) - -An object consisting of the type and url of a fallback web3 provider. This is used if no injected provider, such as MetaMask or Mist, is detected. - -`type` (string): The type of the fallback web3 provider. Currently the only possibility is `'ws'` (web socket). **Default**: `'ws'` - -`url` (string): The full fallback web3 provider url. **Default**: `'ws://127.0.0.1:8545'` - -### `networkWhitelist` (array) - -An array of valid network ids for your project. Your smart contracts might only be deployed on particular networks, or you might want to restrict access on networks that are under development. - -Allows all networks by default. Ganache bypasses this check and is never restricted. - -``` -// Allows the listed networks, plus Ganache -const options = { - networkWhitelist: [ - 1, // Mainnet - 3, // Ropsten - 4, // Rinkeby - 5, // Goerli - 42 // Kovan - ] -} -``` - -## Drizzle State - -```javascript -{ - accounts, - accountBalances: { - address - } - contracts: { - contractName: { - initialized, - synced, - events, - callerFunctionName: { - argsHash: { - args, - value - } - } - } - }, - currentBlock, - drizzleStatus: { - initialized - }, - transactions: { - txHash: { - confirmations, - error, - receipt, - status - } - }, - transactionStack, - web3: { - status - } -} -``` - -## `accounts` (array) - -An array of account addresses from `web3`. - -## `accountBalances` (object) - -An object whose keys are account addresses and values are account balances (in Wei). - -## `contracts` (object) - -A series of contract state objects, indexed by the contract name as declared in its ABI. - -### `contractName` (object) - -`initialized` (boolean): `true` once contract is fully instantiated. -`synced` (boolean): `false` if contract state changes have occurred in a block and Drizzle is re-running its calls. - -`events` (array): An array of event objects. Drizzle will only listen for the events we declared in options. - -The contract's state also includes the state of each constant function called on the contract (`callerFunctionName`). The functions are indexed by name, and contain the outputs indexed by a hash of the arguments passed during the call (`argsHash`). If no arguments were passed, the hash is `0x0`. Drizzle reads from the store for you, so it should be unnecessary to touch this data cache manually. - -`args` (array): Arguments passed to function call. -`value` (mixed): Value returned from function call. - -### `currentBlock` (object) - -An object the latest block as an object resulting from [`web3.getBlock()`](https://web3js.readthedocs.io/en/v1.2.0/web3-eth.html#getblock). This is updated once the block is received from a subscription or fetched via polling, but before any processing takes place. - -## `drizzleStatus` (object) - -An object containing information about the status of Drizzle. - -`initialized` (boolean): `true` once: - -- `web3` is found or instantiated -- Account addresses are stored in state -- All contracts are instantiated - -### `initialized` (boolean) - -`false` by default, becomes true once a `web3` instance is found and the accounts and contracts are fetched. - -## `transactions` (object) - -A series of transaction objects, indexed by transaction hash. - -### `txHash` (object) - -`confirmations` (array): After the initial receipt, further confirmation receipts (up to the 24th). -`error` (object): contains the returned error if any. -`receipt` (object): contains the first transaction receipt received from a transaction's `success` event. - -`status` (string): `true` or `false` depending on transaction status - -- `pending` when the transaction has broadcasted successfully, but is not yet mined -- `success` when a transaction receipt has been received (you may also wish to check for further confirmations) -- `error` if any errors occurred after broadcasting - -For more in-depth information on the Ethereum transaction lifecycle, [check out this great blog post](https://medium.com/blockchannel/life-cycle-of-an-ethereum-transaction-e5c66bae0f6e). - -## `transactionStack` (array) - -In cases where a user cancels a transaction or the transaction is malformed and unable to be broadcasted, it won't receive a hash. To keep track of these cases, a temporary ID will be added to this array and replaced with the transaction hash once broadcasted. The `cacheSend()` method will return a `stackId`, which will allow you get the temporary ID to observe this process for your own transaction status indicator UI. - -## `web3` (object) - -`status` (string): `initializing`, `initialized` and `failed` are possible options. Useful for triggering warnings if `web3` fails to instantiate. - -## How Data Stays Fresh - -1. Once initialized, Drizzle instantiates `web3` and our desired contracts, then observes the chain by subscribing to new block headers. - - ![Drizzle Sync Step 1](https://github.com/trufflesuite/drizzle/blob/master/packages/store/readme/drizzle-sync1.png?raw=true) - -1. Drizzle keeps track of contract calls so it knows what to synchronize. - - ![Drizzle Sync Step 2](https://github.com/trufflesuite/drizzle/blob/master/packages/store/readme/drizzle-sync2.png?raw=true) - -1. When a new block header comes in, Drizzle checks that the block isn't pending, then goes through the transactions looking to see if any of them touched our contracts. - - ![Drizzle Sync Step 3](https://github.com/trufflesuite/drizzle/blob/master/packages/store/readme/drizzle-sync3.png?raw=true) - -1. If they did, we replay the calls already in the store to refresh any potentially altered data. If they didn't we continue with the store data. - - ![Drizzle Sync Step 4](https://github.com/trufflesuite/drizzle/blob/master/packages/store/readme/drizzle-sync4.png?raw=true) - -## License - -[MIT](https://github.com/trufflesuite/drizzle/blob/master/packages/store/LICENSE.txt) + A reactive data-store for web3 and smart contracts. A modified version of [@drizzle/store](https://github.com/trufflesuite/drizzle/tree/develop/packages/store). diff --git a/index.d.ts b/index.d.ts deleted file mode 100644 index c2cf22c..0000000 --- a/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { - Drizzle, - IDrizzleOptions, - generateStore, - IStoreConfig, - generateContractsInitialState, -} from './types'; - -type drizzleSagas = any[]; - -export { - Drizzle, - IDrizzleOptions, - generateStore, - IStoreConfig, - generateContractsInitialState, - drizzleSagas, -}; - -export enum EventActions { - EVENT_FIRED = 'EVENT_FIRED', - EVENT_CHANGED = 'EVENT_CHANGED', - EVENT_ERROR = 'EVENT_ERROR', -} - -export namespace drizzleReducers { - type state = any | undefined | null; - - export interface IAction { - [key: string]: any; - type: string; - } - - export function accounts(state: state, action: IAction): any; - export function accountBalances(state: state, action: IAction): any; - export function contracts(state: state, action: IAction): any; - export function currentBlock(state: state, action: IAction): any; - export function drizzleStatus(state: state, action: IAction): any; - export function transactions(state: state, action: IAction): any; - export function transactionStack(state: state, action: IAction): any; - export function web3(state: state, action: IAction): any; -} diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 066d9e7..0000000 --- a/jest.config.js +++ /dev/null @@ -1,13 +0,0 @@ -// For a detailed explanation regarding each configuration property, visit: -// https://jestjs.io/docs/en/configuration.html - -module.exports = { - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - modulePathIgnorePatterns: ['[/\\\\](dist|node_modules)[/\\\\]'], - - // The test environment that will be used for testing - testEnvironment: '/test/environments/ganache-environment.js' -} diff --git a/package.json b/package.json index d401bc8..8e3497c 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,17 @@ { - "name": "@drizzle/store", - "version": "1.5.1", + "name": "@ezerous/drizzle", + "version": "0.1.0", "description": "A reactive data-store for web3 and smart contracts.", - "types": "./index.d.ts", - "main": "./dist/drizzle-store.js", - "react-native": "./src/index.js", - "repository": "https://github.com/trufflesuite/drizzle", - "scripts": { - "prepare": "webpack --config webpack/release.config.js", - "build:pure": "webpack --config webpack/pure.config.js", - "dev": "webpack --config webpack/release.config.js --watch", - "format": "prettier-standard 'src/**/*.js' 'test/**/*.js'", - "lint": "eslint 'src/**/*.js'", - "lint:fix": "eslint 'src/**/*.js' --fix", - "test": "jest --notify --silent", - "webpack-report": "webpack-bundle-analyzer --log-level debug --port 4200 dist/stats.json" - }, - "keywords": [ - "ethereum", - "redux", - "redux-saga" - ], - "author": { - "name": "Josh Quintal", - "email": "josh@trufflesuite.com", - "url": "http://truffleframework.com/docs/drizzle/getting-started" - }, - "license": "ISC", - "publishConfig": { - "access": "public" - }, + "license": "MIT", + "author": "Ezerous ", + "main": "src/index.js", + "repository": "github:Ezerous/drizzle", "dependencies": { - "deepmerge": "^3.2.0", - "is-plain-object": "^2.0.4", - "redux": "^4.0.1", - "redux-saga": "^0.16.0", - "web3": "^1.2.1" - }, - "devDependencies": { - "@babel/core": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "eslint-config-standard": "^13.0.1", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jest": "^22.14.1", - "eslint-plugin-node": "^9.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.0", - "eth-block-tracker-es5": "^2.3.2", - "ganache-core": "^2.5.5", - "jest": "^24.7.1", - "prettier-standard": "^9.1.1", - "redux-mock-store": "^1.5.3", - "standard": "^13.1.0", - "webpack": "^4.30.0", - "webpack-cli": "^3.3.1", - "webpack-merge": "^4.2.1" + "deepmerge": "4.2.2", + "eth-block-tracker": "4.4.3", + "is-plain-object": "4.1.1", + "redux": "4.0.5", + "redux-saga": "1.1.3", + "web3": "1.2.6" } } diff --git a/readme/drizzle-logomark.png b/readme/drizzle-logomark.png deleted file mode 100644 index a7707ea7870a3dc75739cffdbb777269ceafceb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9097 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 diff --git a/readme/drizzle-sync1.png b/readme/drizzle-sync1.png deleted file mode 100644 index e5e23494247be25d1cff106adde32b717f610104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10470 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 vz0w;eJ;G4h5@TMBMQe_5!jDY?n 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 Mr|M5C { - const blockTracker = new BlockTracker({ + const blockTracker = new PollingBlockTracker({ provider: web3.currentProvider, pollingInterval: interval }) @@ -81,8 +81,8 @@ export function createBlockPollChannel ({ const unsubscribe = () => { blockTracker.stop().catch(_ => { - // BlockTracker assumes there is an outstanding event subscription. - // However for our tests we start and stop a BlockTracker in succession + // PollingBlockTracker assumes there is an outstanding event subscription. + // However for our tests we start and stop a PollingBlockTracker in succession // that triggers an error. }) } diff --git a/src/defaultOptions.js b/src/defaultOptions.js index 6cbfe2c..579d84b 100644 --- a/src/defaultOptions.js +++ b/src/defaultOptions.js @@ -1,8 +1,5 @@ const defaultOptions = { web3: { - // `block` no longer needed; - // keeping for pre-v1.1.1 compatibility with drizzle-react. - block: false, fallback: { type: 'ws', url: 'ws://127.0.0.1:8545' diff --git a/src/drizzleStatus/drizzleStatusSaga.js b/src/drizzleStatus/drizzleStatusSaga.js index d1edb52..89fc27b 100644 --- a/src/drizzleStatus/drizzleStatusSaga.js +++ b/src/drizzleStatus/drizzleStatusSaga.js @@ -1,4 +1,4 @@ -import { call, put, select, takeLatest } from 'redux-saga/effects' +import { call, put, takeLatest } from 'redux-saga/effects' // Initialization Functions import { initializeWeb3, getNetworkId } from '../web3/web3Saga' diff --git a/src/mergeOptions.js b/src/mergeOptions.js index ddbc637..f30bd87 100644 --- a/src/mergeOptions.js +++ b/src/mergeOptions.js @@ -1,5 +1,5 @@ -import merge from 'deepmerge' -const isPlainObject = require('is-plain-object') +const merge = require('deepmerge'); +import isPlainObject from 'is-plain-object'; export default function (defaultOptions, newOptions) { return merge(defaultOptions, newOptions, { diff --git a/src/web3/web3Saga.js b/src/web3/web3Saga.js index b32324e..aea1e37 100644 --- a/src/web3/web3Saga.js +++ b/src/web3/web3Saga.js @@ -1,7 +1,7 @@ import { call, put } from 'redux-saga/effects' import * as Action from './constants' -var Web3 = require('web3') +const Web3 = require('web3'); /* * Initialization @@ -47,7 +47,7 @@ export function * initializeWeb3 (options) { // Attempt fallback if no web3 injection. switch (options.fallback.type) { case 'ws': - var provider = new Web3.providers.WebsocketProvider( + const provider = new Web3.providers.WebsocketProvider( options.fallback.url ) web3 = new Web3(provider) diff --git a/test/accountBalances.test.js b/test/accountBalances.test.js deleted file mode 100644 index 3bf8e50..0000000 --- a/test/accountBalances.test.js +++ /dev/null @@ -1,53 +0,0 @@ -import * as AccountBalancesActions from '../src/accountBalances/constants' - -import { - getAccountBalances, - getAccountsState -} from '../src/accountBalances/accountBalancesSaga' -import { call, put, select } from 'redux-saga/effects' - -describe('Account Balance Saga', () => { - let mockedWeb3, mockedGetBalance - let gen - - beforeEach(() => { - mockedGetBalance = jest.fn() - mockedWeb3 = { eth: { getBalance: mockedGetBalance } } - gen = getAccountBalances({ web3: mockedWeb3 }) - }) - - test('Retrieves account balances', () => { - let next = gen.next() - - expect(next.value).toEqual(select(getAccountsState)) - next = gen.next(global.accounts) - - // It handles balance queries for all accounts - const accountBalance = 1e20 // default ETH balance - for (let account of global.accounts) { - expect(next.value).toEqual(call(mockedGetBalance, account)) - next = gen.next(accountBalance) - expect(next.value).toEqual( - put({ type: AccountBalancesActions.ACCOUNT_BALANCE_FETCHED, account, accountBalance }) - ) - next = gen.next() - } - - // Final dispatch - expect(next.value).toEqual(put({ type: AccountBalancesActions.ACCOUNT_BALANCES_FETCHED })) - }) - - test('Fails properly', () => { - let next = gen.next() - expect(next.value).toEqual(select(getAccountsState)) - next = gen.next(global.accounts) - - const error = new Error() - next = gen.throw(error) - expect(next.value).toEqual(put({ type: AccountBalancesActions.ACCOUNT_BALANCE_FAILED, error })) - - // Final dispatch - next = gen.next() - expect(next.value).toEqual(put({ type: AccountBalancesActions.ACCOUNT_BALANCES_FETCHED })) - }) -}) diff --git a/test/accounts.test.js b/test/accounts.test.js deleted file mode 100644 index 9056024..0000000 --- a/test/accounts.test.js +++ /dev/null @@ -1,38 +0,0 @@ -import { getAccounts } from '../src/accounts/accountsSaga' -import { call, put } from 'redux-saga/effects' -import * as AccountsActions from '../src/accounts/constants' - -describe('Accounts Saga', () => { - let mockedWeb3, mockedGetAccounts - let gen - - beforeEach(() => { - mockedGetAccounts = jest.fn() - mockedWeb3 = { eth: { getAccounts: mockedGetAccounts } } - gen = getAccounts({ web3: mockedWeb3 }) - }) - - test('retrieves Metamask accounts', () => { - expect(gen.next().value).toEqual(call(mockedGetAccounts)) - expect(gen.next(global.accounts).value).toEqual( - put({ type: AccountsActions.ACCOUNTS_FETCHED, accounts: global.accounts }) - ) - }) - - describe('Fails', () => { - test('when accounts are not retrieved', () => { - expect(gen.next().value).toEqual(call(mockedGetAccounts)) - expect(gen.next(undefined).value).toEqual( - put({ type: AccountsActions.ACCOUNTS_FAILED, error: 'No accounts found!' }) - ) - }) - - test('when when an exception occurs', () => { - const error = new Error() - expect(gen.next().value).toEqual(call(mockedGetAccounts)) - expect(gen.throw(error).value).toEqual( - put({ type: AccountsActions.ACCOUNTS_FAILED, error }) - ) - }) - }) -}) diff --git a/test/blocks.test.js b/test/blocks.test.js deleted file mode 100644 index 2509043..0000000 --- a/test/blocks.test.js +++ /dev/null @@ -1,91 +0,0 @@ -import { - createBlockChannel, - createBlockPollChannel -} from '../src/blocks/blocksSaga' -import { getWeb3 } from './utils/helpers' -import * as BlocksActions from '../src/blocks/constants' - -describe('read from blocks', () => { - let web3 - let syncAlways - const drizzle = {} - - beforeAll(() => { - web3 = getWeb3() - syncAlways = false - }) - - describe('by listening through websockets', () => { - let blockListener - - beforeEach(() => { - blockListener = createBlockChannel({ drizzle, web3, syncAlways }) - }) - - test('listens for block headers', done => { - // Subscribe to event - blockListener.take(event => { - expect(event.type).toEqual(BlocksActions.BLOCK_RECEIVED) - done() - }) - - // Invoke action to trigger event - web3.eth.sendTransaction({ - from: global.accounts[0], - to: global.accounts[1], - value: 200 - }) - }) - - test('unsubscribes from block headers', done => { - // Subscribe to event - blockListener.take(event => { - expect(event.type).toEqual('@@redux-saga/CHANNEL_END') - done() - }) - - // Invoke action to trigger event - blockListener.close() - }) - }) - - describe('by polling', () => { - let blockPoller - - beforeEach(() => { - const interval = 1000 - blockPoller = createBlockPollChannel({ - drizzle, - interval, - web3, - syncAlways - }) - }) - - test('polls for block headers', done => { - // Subscribe to event - blockPoller.take(event => { - expect(event.type).toEqual(BlocksActions.BLOCK_FOUND) - done() - }) - - // Invoke action to trigger event - web3.eth.sendTransaction({ - from: global.accounts[0], - to: global.accounts[1], - value: 200 - }) - }) - - test('terminates from block polling', done => { - // Subscribe to event - blockPoller.take(event => { - expect(event.type).toEqual('@@redux-saga/CHANNEL_END') - done() - }) - - // Invoke action to trigger event - blockPoller.close() - }) - }) -}) diff --git a/test/contractStateUtils.test.js b/test/contractStateUtils.test.js deleted file mode 100644 index 3b7ee6b..0000000 --- a/test/contractStateUtils.test.js +++ /dev/null @@ -1,122 +0,0 @@ -import { - isGetterFunction, - isSetterFunction, - getAbi, - generateContractInitialState, - generateContractsInitialState -} from '../src/contractStateUtils' -import TestContractABI from './utils/data/TestContract-abi.json' - -describe('Contract State Utilities', () => { - describe('isConstant', () => { - test('can identify a constant for solc v0.5.16 and below', () => { - const config = { type: 'function', constant: true } - expect(isGetterFunction(config)).toBe(true) - expect(isSetterFunction(config)).toBe(false) - }) - - test('can identify non constants for solc v0.5.16 and below', () => { - let config = { type: 'function', constant: false } - expect(isGetterFunction(config)).toBe(false) - expect(isSetterFunction(config)).toBe(true) - - config = { type: 'event' } - expect(isGetterFunction(config)).toBe(false) - expect(isSetterFunction(config)).toBe(false) - }) - - test('can identify a constant for a pure or view func, for breaking changes from solc v0.6.0 and above', () => { - let config = { type: 'function', stateMutability: 'pure' } - expect(isGetterFunction(config)).toBe(true) - expect(isSetterFunction(config)).toBe(false) - - config = { type: 'function', stateMutability: 'view' } - expect(isGetterFunction(config)).toBe(true) - expect(isSetterFunction(config)).toBe(false) - }) - - test('can identify non constants, for breaking changes from solc v0.6.0 and above', () => { - let config = { type: 'function', stateMutability: 'payable' } - expect(isGetterFunction(config)).toBe(false) - expect(isSetterFunction(config)).toBe(true) - - config = { type: 'function', stateMutability: 'nonpayable' } - expect(isGetterFunction(config)).toBe(false) - expect(isSetterFunction(config)).toBe(true) - - config = { type: 'event' } - expect(isGetterFunction(config)).toBe(false) - expect(isSetterFunction(config)).toBe(false) - }) - }) - - describe('getAbi', () => { - test('can parse Web3 contract', () => { - const jsonInterface = {} - const web3Contract = { options: { jsonInterface } } - expect(getAbi({ web3Contract })).toEqual(jsonInterface) - }) - - test('can parse TruffleArtifact', () => { - const abi = {} - const artifact = { abi } - expect(getAbi(artifact)).toEqual(abi) - }) - }) - - describe('generateContractinitialState', () => { - test('It generates correct state from truffleArtifact', () => { - const expectedState = { - initialized: false, - synced: false, - storedData: {} - } - - const input = { abi: TestContractABI } - expect(generateContractInitialState(input)).toEqual(expectedState) - }) - - test('It generates correct state from Web3 Contract', () => { - const expectedState = { - initialized: false, - synced: false, - storedData: {} - } - - const input = { - web3Contract: { options: { jsonInterface: TestContractABI } } - } - expect(generateContractInitialState(input)).toEqual(expectedState) - }) - }) - - describe('generateContractsInitialState', () => { - test('it generates multi-contract initial state', () => { - const contracts = [ - { contractName: 'C1', abi: TestContractABI }, - { contractName: 'C2', abi: TestContractABI } - ] - - const expectedStates = { - C1: { - initialized: false, - synced: false, - storedData: {} - }, - C2: { - initialized: false, - synced: false, - storedData: {} - } - } - - expect(generateContractsInitialState({ contracts })).toEqual( - expectedStates - ) - }) - - test('it generates valid initial state with empty contracts', () => { - expect(generateContractsInitialState({})).toEqual({}) - }) - }) -}) diff --git a/test/drizzle/api.test.js b/test/drizzle/api.test.js deleted file mode 100644 index df76a6a..0000000 --- a/test/drizzle/api.test.js +++ /dev/null @@ -1,167 +0,0 @@ -import { put } from 'redux-saga/effects' - -import MockedDrizzleContract from '../../src/DrizzleContract' - -import { getWeb3Assets } from '../utils/helpers' -import Drizzle from '../../src/Drizzle' -import defaultDrizzleOptions from '../../src/defaultOptions' -import { initializeDrizzle } from '../../src/drizzleStatus/drizzleStatusSaga' -import { NETWORK_IDS, NETWORK_MISMATCH } from '../../src/web3/constants' -import * as DrizzleActions from '../../src/drizzleStatus/constants' -import * as ContractActions from '../../src/contracts/constants' - -jest.mock('../../src/DrizzleContract') - -describe('Drizzle API', () => { - const accounts = global.accounts - const contractName = 'TestContract' - - let dispatchSpy, mockedStore, state, networkId - - const drizzleOptions = {} - let drizzle - let contractCreatorSpy - - beforeEach(() => { - MockedDrizzleContract.mockClear() - - networkId = global.defaultNetworkId - - // Mock Store - state = { web3: { networkId }, accounts } - dispatchSpy = jest.fn() - mockedStore = { dispatch: dispatchSpy, getState: () => state } - - // Create Drizzle and simulate web3 resolution - contractCreatorSpy = jest.fn() - let mockedWeb3 = { eth: { Contract: contractCreatorSpy } } - drizzle = new Drizzle(drizzleOptions, mockedStore) - drizzle.web3 = mockedWeb3 - - // Only the contractName is required for these tests - MockedDrizzleContract.mockImplementation(() => ({ contractName })) - }) - - test('Constructor fires up drizzle store', () => { - const expectedAction = { - type: DrizzleActions.DRIZZLE_INITIALIZING, - drizzle, - options: defaultDrizzleOptions - } - expect(dispatchSpy).toHaveBeenCalledWith(expectedAction) - }) - - // Default values in drizzleOptions - describe('Default drizzle options', () => { - - // networkWhiteList - test('Empty network whitelist does not trigger a mismatch', () => { - networkId = NETWORK_IDS.ropsten - - // Iterate to 3rd effect in initializeDrizzle generator - let gen = initializeDrizzle({drizzle, options: drizzleOptions}) - let next = gen.next() // initializeWeb3 - const fakeWeb3 = {eth: {}}; - next = gen.next(fakeWeb3) // getNetworkId - // Replace saga networkId with our own - next = gen.next(networkId) // networkWhitelist check - - const unExpectedAction = put({ type: NETWORK_MISMATCH, networkId }) - expect(next.value).not.toEqual(unExpectedAction) - }) - }) - - describe('Add:', () => { - test('a Web3 Contracts', () => { - const web3Contract = {} - const contractConfig = { web3Contract, contractName } - - drizzle.addContract(contractConfig) - - // 1 in constructor, 2 in addContract - expect(dispatchSpy).toHaveBeenCalledTimes(3) - - let expectedAction = { type: ContractActions.CONTRACT_INITIALIZING, contractConfig } - expect(dispatchSpy).toHaveBeenNthCalledWith(2, expectedAction) - - expectedAction = { type: ContractActions.CONTRACT_INITIALIZED, name: contractName } - expect(dispatchSpy).toHaveBeenNthCalledWith(3, expectedAction) - - expect(drizzle.contractList).toHaveLength(1) - expect(drizzle.contracts).toHaveProperty(contractName) - expect(MockedDrizzleContract).toHaveBeenCalledTimes(1) - }) - - test('a TruffleArtifact Contracts', async () => { - const { truffleArtifact } = await getWeb3Assets() - drizzle.addContract(truffleArtifact) - - // 1 in constructor, 2 in addContract - expect(dispatchSpy).toHaveBeenCalledTimes(3) - - let expectedAction = { - type: ContractActions.CONTRACT_INITIALIZING, - contractConfig: truffleArtifact - } - expect(dispatchSpy).toHaveBeenNthCalledWith(2, expectedAction) - - expectedAction = { - type: ContractActions.CONTRACT_INITIALIZED, - name: truffleArtifact.contractName - } - expect(dispatchSpy).toHaveBeenNthCalledWith(3, expectedAction) - - expect(drizzle.contractList).toHaveLength(1) - expect(drizzle.contracts).toHaveProperty(truffleArtifact.contractName) - expect(MockedDrizzleContract).toHaveBeenCalledTimes(1) - }) - - test('does not add duplicate contract', () => { - const web3Contract = {} - const contractConfig = { web3Contract, contractName } - - MockedDrizzleContract.mockImplementation(() => ({ contractName })) - drizzle.addContract(contractConfig) - - // Only called on 1st add - expect(dispatchSpy).toHaveBeenCalledTimes(3) - - expect(drizzle.contractList).toHaveLength(1) - expect(MockedDrizzleContract).toHaveBeenCalledTimes(1) - - // Try to add the same contract - const chucker = () => drizzle.addContract(contractConfig) - expect(chucker).toThrow(/^Contract already exists: TestContract/) - - // No more calls to dispatch - expect(dispatchSpy).toHaveBeenCalledTimes(3) - }) - }) - - describe('Delete:', () => { - test('removes a contract', () => { - // Add a contract - const web3Contract = {} - const contractConfig = { web3Contract, contractName } - - drizzle.addContract(contractConfig) - expect(drizzle.contractList).toHaveLength(1) - - drizzle.deleteContract(contractName) - expect(drizzle.contractList).toHaveLength(0) - - // 3 calls to add, 1 to delete - expect(dispatchSpy).toHaveBeenCalledTimes(4) - }) - - test('throws if contract does not exist', () => { - expect(drizzle.contractList).toHaveLength(0) - - const eraser = () => drizzle.deleteContract('Transmogrify') - expect(eraser).toThrow(/^Contract does not exist: Transmogrify/) - - // 1 call in ctor to initialize drizzle - expect(dispatchSpy).toHaveBeenCalledTimes(1) - }) - }) -}) diff --git a/test/drizzle/getOrCreateWeb3.test.js b/test/drizzle/getOrCreateWeb3.test.js deleted file mode 100644 index 2af632f..0000000 --- a/test/drizzle/getOrCreateWeb3.test.js +++ /dev/null @@ -1,48 +0,0 @@ -import { getOrCreateWeb3Contract } from '../../src/Drizzle' - -describe('getOrCreateWeb3Contract', () => { - const networkId = global.defaultNetworkId - const accounts = global.accounts - - let mockedStore, state - - beforeEach(() => { - state = { web3: { networkId }, accounts } - mockedStore = { getState: () => state } - }) - - test('recognizes a web3 contract', () => { - const mockedWeb3Contract = {} - const mockedContractConfig = { web3Contract: mockedWeb3Contract } - - const resolved = getOrCreateWeb3Contract( - mockedStore, - mockedContractConfig, - {} - ) - expect(resolved).toBe(mockedWeb3Contract) - }) - - test('recognizes a truffleArtifact', () => { - const address = '0x0123456789' - const abi = 'ABI' - const deployedBytecode = "I am Jack's caffeine fueled ledger code" - const mockedTruffleArtifact = { - abi, - networks: { [networkId]: { address } }, - deployedBytecode - } - const contractCreatorSpy = jest.fn() - const mockedWeb3 = { eth: { Contract: contractCreatorSpy } } - getOrCreateWeb3Contract(mockedStore, mockedTruffleArtifact, mockedWeb3) - - // Default selected is the 1st by convention - const selectedAccount = accounts[0] - const expectedArgs = [ - abi, - address, - { from: selectedAccount, data: deployedBytecode } - ] - expect(contractCreatorSpy).toHaveBeenCalledWith(...expectedArgs) - }) -}) diff --git a/test/drizzle/middleware.test.js b/test/drizzle/middleware.test.js deleted file mode 100644 index e788fd7..0000000 --- a/test/drizzle/middleware.test.js +++ /dev/null @@ -1,184 +0,0 @@ -import MockedDrizzleContract from '../../src/DrizzleContract' -import { drizzleMiddleware } from '../../src/drizzle-middleware' -import Drizzle from '../../src/Drizzle' -import { getWeb3Assets } from '../utils/helpers' -import configureStore from 'redux-mock-store' -import defaultDrizzleOptions from '../../src/defaultOptions' -import * as DrizzleActions from '../../src/drizzleStatus/constants' -import * as ContractActions from '../../src/contracts/constants' -import * as AccountsActions from '../../src/accounts/constants' - -jest.mock('../../src/DrizzleContract') - -const mockDrizzleInstance = (defaultAccount, numContracts = 1) => ({ - contractList: Array.from({ length: numContracts }, () => ({ - options: { from: defaultAccount } - })) -}) - -describe('Drizzle Middleware', () => { - const accounts = global.accounts - let dmw, mockedDrizzleInstance - let next - beforeEach(() => { - mockedDrizzleInstance = mockDrizzleInstance(accounts[0], 10) - next = jest.fn() - dmw = drizzleMiddleware({ contractList: [] }) - }) - - test('it passes action to the rest of middleware Pipeline', () => { - dmw()(next)({}) // call with undefined action - expect(next).toHaveBeenCalledTimes(1) - }) - - test('default sendFrom changes when wallet provider changes selectedAccount', () => { - const selectedAccount = accounts[2] - dmw()(next)({ - type: DrizzleActions.DRIZZLE_INITIALIZING, - drizzle: mockedDrizzleInstance - }) - dmw()(next)({ type: AccountsActions.ACCOUNTS_FETCHED, accounts: [selectedAccount] }) - - // All contract options should have from address set to selectedAccount - const froms = mockedDrizzleInstance.contractList.map(x => x.options.from) - expect(froms).toHaveLength(10) - const fromSet = new Set(froms) - expect(fromSet.size).toBe(1) - expect(fromSet.has(selectedAccount)).toBe(true) - expect(next).toHaveBeenCalledTimes(2) - }) - - test('default sendFrom does not change unnecessarily', () => { - dmw()(next)({ - type: DrizzleActions.DRIZZLE_INITIALIZING, - drizzle: mockedDrizzleInstance - }) - - // choose 1st account to indicate no change - const selectedAccount = accounts[0] - - // Sentinel remains IFF no account change is detected - const sentinel = {} - mockedDrizzleInstance.contractList.push({ options: { from: sentinel } }) - - dmw()(next)({ type: AccountsActions.ACCOUNTS_FETCHED, accounts: [selectedAccount] }) - - const froms = mockedDrizzleInstance.contractList.map(x => x.options.from) - expect(froms).toHaveLength(11) - - const fromSet = new Set(froms) - expect(fromSet.size).toBe(2) - expect(fromSet.has(selectedAccount)).toBe(true) - expect(fromSet.has(sentinel)).toBe(true) - expect(next).toHaveBeenCalledTimes(2) - }) - - describe('dispatch AddContract', () => { - const networkId = global.defaultNetworkId - const accounts = global.accounts - const drizzleOptions = {} - const expectedDrizzleOptions = defaultDrizzleOptions - const state = { web3: { networkId }, accounts } - - let middlewares, mockedStore - let drizzle, mockedWeb3, contractCreatorSpy - beforeEach(() => { - MockedDrizzleContract.mockClear() - - // Mock store with middleware - middlewares = [drizzleMiddleware()] - mockedStore = configureStore(middlewares)(state) - - // Mock drizzle instance and dispatch DRIZZLE_INITIALIZING - contractCreatorSpy = jest.fn() - mockedWeb3 = { eth: { Contract: contractCreatorSpy } } - drizzle = new Drizzle(drizzleOptions, mockedStore) - - // Get past web3 initialization - drizzle.web3 = mockedWeb3 - }) - - test('is initialized', () => { - const actions = mockedStore.getActions() - expect(actions).toHaveLength(1) - expect(actions[0]).toEqual({ - type: DrizzleActions.DRIZZLE_INITIALIZING, - drizzle, - options: expectedDrizzleOptions - }) - }) - - describe('Adds a Contract', () => { - const mockedContractAddress = '0x0123456789' - const mockedEvents = [] - let mockedContractConfig - - beforeEach(async () => { - // Arrange minimum mock of a ContractConfig - ;({ truffleArtifact: mockedContractConfig } = await getWeb3Assets()) - MockedDrizzleContract.mockImplementation(() => ({ - contractName: mockedContractConfig.contractName - })) - mockedContractConfig.networks = { [networkId]: mockedContractAddress } - }) - - test('successfully', async () => { - mockedStore.dispatch({ - type: ContractActions.ADD_CONTRACT, - contractConfig: mockedContractConfig, - mockedEvents - }) - - // Assert - const actions = mockedStore.getActions() - expect(actions).toHaveLength(4) - expect(actions[0]).toEqual({ - type: DrizzleActions.DRIZZLE_INITIALIZING, - drizzle, - options: expectedDrizzleOptions - }) - expect(actions[1]).toEqual({ - type: ContractActions.CONTRACT_INITIALIZING, - contractConfig: mockedContractConfig - }) - expect(actions[2]).toEqual({ - type: ContractActions.CONTRACT_INITIALIZED, - name: mockedContractConfig.contractName - }) - expect(actions[3]).toEqual({ - type: ContractActions.ADD_CONTRACT, - contractConfig: mockedContractConfig, - mockedEvents - }) - }) - - test('handles exception', async () => { - // Add a contract - - const addContractAction = { - type: ContractActions.ADD_CONTRACT, - contractConfig: mockedContractConfig, - mockedEvents - } - mockedStore.dispatch(addContractAction) - - const actions = mockedStore.getActions() - expect(actions).toHaveLength(4) - - // Add same contract - const doppleganger = () => mockedStore.dispatch(addContractAction) - - // Assert - expect(doppleganger).not.toThrow() - expect(actions).toHaveLength(5) - - const errorAction = actions[4] - expect(errorAction.type).toEqual(ContractActions.ERROR_ADD_CONTRACT) - expect(errorAction.error.message).toEqual( - `Contract already exists: ${mockedContractConfig.contractName}` - ) - expect(errorAction.attemptedAction).toEqual(addContractAction) - }) - }) - }) -}) diff --git a/test/drizzle/options.test.js b/test/drizzle/options.test.js deleted file mode 100644 index fa2e556..0000000 --- a/test/drizzle/options.test.js +++ /dev/null @@ -1,75 +0,0 @@ -import { put } from 'redux-saga/effects' - -import Drizzle from '../../src/Drizzle' -import defaultDrizzleOptions from '../../src/defaultOptions' -import { initializeDrizzle } from '../../src/drizzleStatus/drizzleStatusSaga' -import { NETWORK_IDS, NETWORK_MISMATCH } from '../../src/web3/constants' - -describe('Drizzle options:', () => { - const accounts = global.accounts - const drizzleOptions = {} - - let dispatchSpy, mockedStore, state, networkId, drizzle - - beforeEach(() => { - networkId = global.defaultNetworkId - - // Mock Store - state = { web3: { networkId }, accounts } - dispatchSpy = jest.fn() - mockedStore = { dispatch: dispatchSpy, getState: () => state } - }) - - describe('Allowed Networks:', () => { - beforeEach(() => { - drizzleOptions['networkWhitelist'] = [ - NETWORK_IDS.mainnet, - NETWORK_IDS.rinkeby - ] - }) - - test('Unauthorized network fires a mismatch', () => { - networkId = NETWORK_IDS.ropsten - drizzle = new Drizzle(drizzleOptions, mockedStore) - - let next = iterateInitializeDrizzleSagaToNetworkMismatch(drizzle, drizzleOptions, networkId) - - const expectedAction = put({ type: NETWORK_MISMATCH, networkId }) - expect(next.value).toEqual(expectedAction) - }) - - test('Authorized network does NOT fire a mismatch', () => { - networkId = NETWORK_IDS.ropsten - drizzleOptions['networkWhitelist'].push(networkId) - - drizzle = new Drizzle(drizzleOptions, mockedStore) - - let next = iterateInitializeDrizzleSagaToNetworkMismatch(drizzle, drizzleOptions, networkId) - - const unExpectedAction = put({ type: NETWORK_MISMATCH, networkId }) - expect(next.value).not.toEqual(unExpectedAction) - }) - - test('Ganache does NOT fire a mismatch', () => { - networkId = NETWORK_IDS.ganache - - drizzle = new Drizzle(drizzleOptions, mockedStore) - - let next = iterateInitializeDrizzleSagaToNetworkMismatch(drizzle, drizzleOptions, networkId) - - const unExpectedAction = put({ type: NETWORK_MISMATCH, networkId }) - expect(next.value).not.toEqual(unExpectedAction) - }) - }) -}) - -function iterateInitializeDrizzleSagaToNetworkMismatch(drizzle, options, networkId) { - // Iterate to 3rd effect in initializeDrizzle generator - let gen = initializeDrizzle({drizzle, options}) - let next = gen.next() // initializeWeb3 - const fakeWeb3 = {eth: {}}; - next = gen.next(fakeWeb3) // getNetworkId - - // Replace saga networkId with our own - return gen.next(networkId) // networkWhitelist -} diff --git a/test/environments/ganache-environment.js b/test/environments/ganache-environment.js deleted file mode 100644 index 012467c..0000000 --- a/test/environments/ganache-environment.js +++ /dev/null @@ -1,45 +0,0 @@ -const Ganache = require('ganache-core') -const NodeEnvironment = require('jest-environment-node') - -const defaultSeed = 'drizzle' -const defaultNetworkId = 6777 -const defaultAccounts = [ - // based on default Mnemonic - '0x8aDB46251E9cd45b5027501766531825C04a2E06', - '0xb50CF9eD8f60605bEbB967776925f21Ba5c81D5D', - '0x7fC9AD8C7A3232Aed94d6C68728D22D722694824', - '0x6DADB5b9C2510bD3C266329781adFBa9A5145442', - '0xc41E494bE83a33Bf56B5C071094859067bC9E728', - '0x5B5b5c834daCf8ad46464a283a2B1B4Bd06A456e', - '0x4B165a6036791822777C78cF7931F1d205d29118', - '0x3950A710fb4b4ed456EC469E973D35c170802609', - '0xDA343E876263D988DDD7C18Bb4aB288c7ef66D89', - '0x1Ff0eB66355D4d3A1310FB759A8a67Efd58C888A' -] - -class GanacheEnvironment extends NodeEnvironment { - async setup () { - await super.setup() - - // Startup a Ganache server. - this.global.provider = Ganache.provider({ - seed: defaultSeed, - network_id: defaultNetworkId, - gasLimit: 7000000 - }) - - this.global.accounts = defaultAccounts - this.global.defaultNetworkId = defaultNetworkId - - // Simulate document loaded for testing drizzle - this.global.document = { readyState: 'complete' } - } - - async teardown () { - // close provider engine gracefully - this.global.provider.close(() => {}) - await super.teardown() - } -} - -module.exports = GanacheEnvironment diff --git a/test/generateStore.test.js b/test/generateStore.test.js deleted file mode 100644 index 45eb7e6..0000000 --- a/test/generateStore.test.js +++ /dev/null @@ -1,67 +0,0 @@ -import { generateStore } from '../src/generateStore' -import { getWeb3Assets } from './utils/helpers' - -const partialDrizzleOptions = { - web3: { - block: false, - fallback: { - type: 'ws', - url: 'ws://127.0.0.1:9545' - } - }, - polls: { - accounts: 30000 - } -} - -const hasBasicShape = state => { - expect(state).toHaveProperty('contracts') - expect(state).toHaveProperty('contracts.TestContract') - expect(Object.keys(state.contracts)).toHaveLength(1) - - expect(state).toHaveProperty('contracts.TestContract.initialized') - expect(state).toHaveProperty('contracts.TestContract.synced') - expect(state).toHaveProperty('contracts.TestContract.storedData') - - expect(state).toHaveProperty('accounts') - expect(state).toHaveProperty('accountBalances') - expect(state).toHaveProperty('currentBlock') - expect(state).toHaveProperty('drizzleStatus') - expect(state).toHaveProperty('drizzleStatus.initialized') - expect(state).toHaveProperty('transactions') - expect(state).toHaveProperty('transactionStack') - expect(state).toHaveProperty('web3') -} - -describe('generateStore', () => { - let TestContract, drizzleOptions - - beforeEach(async () => { - ;({ truffleArtifact: TestContract } = await getWeb3Assets()) - drizzleOptions = { ...partialDrizzleOptions, contracts: [TestContract] } - }) - - describe('has the right shape', () => { - test('when invoked with only drizzleOptions', () => { - const store = generateStore({ drizzleOptions }) - const state = store.getState() - hasBasicShape(state) - }) - - test('when invoked with appReducer', () => { - const initialState = 'This is the initial State' - const myState = jest.fn((state = initialState) => state) - const initialAppState = { myState: initialState } - const appReducers = { myState } - const store = generateStore({ - drizzleOptions, - appReducers, - initialAppState - }) - const state = store.getState() - hasBasicShape(state) - expect(state).toHaveProperty('myState') - expect(state.myState).toBe(initialState) - }) - }) -}) diff --git a/test/utils/data/TestContract-abi.json b/test/utils/data/TestContract-abi.json deleted file mode 100644 index 4c4d33d..0000000 --- a/test/utils/data/TestContract-abi.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "constant": false, - "inputs": [ - { - "name": "_value", - "type": "uint256" - } - ], - "name": "setData", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "name": "data", - "type": "uint256" - } - ], - "name": "LogStoredData", - "type": "event" - }, - { - "constant": true, - "inputs": [], - "name": "storedData", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - } -] diff --git a/test/utils/data/TestContract-byteCode.json b/test/utils/data/TestContract-byteCode.json deleted file mode 100644 index e9ffd9a..0000000 --- a/test/utils/data/TestContract-byteCode.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "linkReferences": {}, - "object": "60806040526000805534801561001457600080fd5b5061010e806100246000396000f3fe6080604052348015600f57600080fd5b5060043610604f576000357c0100000000000000000000000000000000000000000000000000000000900480632a1afcd91460545780635b4b73a9146070575b600080fd5b605a609b565b6040518082815260200191505060405180910390f35b609960048036036020811015608457600080fd5b810190808035906020019092919050505060a1565b005b60005481565b806000819055507f1031b580b746b2e12ccbbb04a94ec78045d1f619d7194ae8863e75cd92d66116816040518082815260200191505060405180910390a15056fea165627a7a72305820c19d6e169510330ca6b40d8ed5aeecaefcb1c50aeb483b5ee99fbf5b57eaab270029", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x10E DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x4F JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x2A1AFCD9 EQ PUSH1 0x54 JUMPI DUP1 PUSH4 0x5B4B73A9 EQ PUSH1 0x70 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5A PUSH1 0x9B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x99 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH1 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0xA1 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH32 0x1031B580B746B2E12CCBBB04A94EC78045D1F619D7194AE8863E75CD92D66116 DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xc1 SWAP14 PUSH15 0x169510330CA6B40D8ED5AEECAEFCB1 0xc5 EXP 0xeb 0x48 EXTCODESIZE 0x5e 0xe9 SWAP16 0xbf JUMPDEST JUMPI 0xea 0xab 0x27 STOP 0x29 ", - "sourceMap": "33:209:0:-;;;87:1;61:27;;33:209;8:9:-1;5:2;;;30:1;27;20:12;5:2;33:209:0;;;;;;;" -} diff --git a/test/utils/data/TestContract.sol b/test/utils/data/TestContract.sol deleted file mode 100644 index 5ee5089..0000000 --- a/test/utils/data/TestContract.sol +++ /dev/null @@ -1,12 +0,0 @@ -pragma solidity >=0.5.0 <0.6.0; - -contract TestContract { - uint public storedData = 0; - event LogStoredData(uint data); - - function setData(uint _value) public { - storedData = _value; - emit LogStoredData(_value); - } -} - diff --git a/test/utils/helpers.js b/test/utils/helpers.js deleted file mode 100644 index 5253197..0000000 --- a/test/utils/helpers.js +++ /dev/null @@ -1,60 +0,0 @@ -import Web3 from 'web3' - -/** - * mockDrizzleStore - * - * @param {Object} initialState={} Set the initial State of the drizzle store. - * @returns {Array} [mockStore, dispatchedActions] - */ -const mockDrizzleStore = (initialState = {}) => { - const dispatchedActions = [] - const mockStore = { - getState: () => initialState, - dispatch: action => dispatchedActions.push(action) - } - - return [mockStore, dispatchedActions] -} - -/** - * getWeb3 - * @param {object} provider - * - * @returns {Object} A Web3 provider sourced from `global.provider` - */ -const getWeb3 = (provider = global.provider) => new Web3(provider) - -/** - * getWeb3Assets deploys a contract on ganache provider - * - * @returns {Object} with web3, accounts & truffleArtifact - */ -const getWeb3Assets = async () => { - const abi = require('./data/TestContract-abi.json') - const byteCode = require('./data/TestContract-byteCode.json') - const web3 = getWeb3() - const accounts = await web3.eth.getAccounts() // use global.accounts? - - const instance = new web3.eth.Contract(abi) - const deployedByteCode = await instance - .deploy({ data: byteCode.object }) - .send({ from: accounts[0], gas: 150000 }) - - const truffleArtifact = { - contractName: 'TestContract', - abi, - byteCode, - deployedByteCode, - networks: { - [global.defaultNetworkId]: { address: deployedByteCode._address } - } - } - - return { web3, accounts, truffleArtifact } -} - -module.exports = { - mockDrizzleStore, - getWeb3, - getWeb3Assets -} diff --git a/test/web3.test.js b/test/web3.test.js deleted file mode 100644 index be439ef..0000000 --- a/test/web3.test.js +++ /dev/null @@ -1,176 +0,0 @@ -import { initializeWeb3, getNetworkId } from '../src/web3/web3Saga' -import { call, put } from 'redux-saga/effects' -import { runSaga } from 'redux-saga' -import * as Action from '../src/web3/constants' - -const hasWeb3Shape = obj => { - expect(obj).toHaveProperty('currentProvider') - expect(obj).toHaveProperty('BatchRequest') - expect(obj).toHaveProperty('version') - expect(obj).toHaveProperty('utils') - expect(obj).toHaveProperty('eth') -} - -describe('Resolving Web3', () => { - let web3Options, resolvedWeb3, gen - - describe('with customProvider', () => { - beforeAll(async () => { - global.window = {} - web3Options = { customProvider: global.provider } - }) - - test('get web3', async () => { - gen = initializeWeb3(web3Options) - - // First action dispatched - expect(gen.next().value).toEqual(put({ type: Action.WEB3_INITIALIZED })) - - resolvedWeb3 = gen.next().value - expect(resolvedWeb3).toEqual(global.provider) - }) - }) - - describe('with ethereum, EIP-1102 compliance', () => { - test('invokes `ethereum.enable`', async () => { - const mockedEthereumEnable = jest.fn() - const ethereum = { enable: mockedEthereumEnable } - global.window = { ethereum } - - gen = initializeWeb3({}) - let next = gen.next() - // get permission according to EIP 1102 - // - - expect(next.value).toEqual( - call({ context: ethereum, fn: ethereum.enable }) - ) - - // return an account to simulate opt-in - next = gen.next('0x123') - expect(next.value).toEqual(put({ type: Action.WEB3_INITIALIZED })) - - resolvedWeb3 = gen.next().value - hasWeb3Shape(resolvedWeb3) - }) - - test('loads when user opts in', async () => { - const mockedEthereumEnable = jest.fn(() => '0x123') - const ethereum = { enable: mockedEthereumEnable } - global.window = { ethereum } - const dispatched = [] - - const result = await runSaga({ - dispatch: (action) => dispatched.push(action), - getState: () => ({ state: 'test' }) - }, initializeWeb3, {}).done - - // result should be a proper web3 provider - expect(result).toBeInstanceOf(require('web3')) - }) - - test('does not load when user opts out', async () => { - // opt out - global.window = { ethereum: { enable: jest.fn(() => undefined) } } - const dispatched = [] - - const web3Result = await runSaga( - { - dispatch: action => dispatched.push(action), - getState: () => ({ state: 'test' }) - }, - initializeWeb3, - {} - ).done - - // saga result should be undefined if an exception occurs - expect(web3Result).toBe(undefined) - - // and the last action should be WEB3_USER_DENIED - expect(dispatched.pop()).toEqual({ type: Action.WEB3_USER_DENIED }) - }) - - test('does not load when provider throws an error', async () => { - // simulate opting out - const mockedEthereumEnable = jest.fn(() => { throw new Error('oops') }) - const ethereum = { enable: mockedEthereumEnable } - global.window = { ethereum } - const dispatched = [] - - const result = await runSaga({ - dispatch: (action) => dispatched.push(action), - getState: () => ({ state: 'test' }) - }, initializeWeb3, {}).done - - // saga result is undefined when exception is thrown - expect(result).toBe(undefined) - - // and the last action should be WEB3_FAILED - expect(dispatched.pop()).toEqual({ type: Action.WEB3_FAILED }) - }) - }) - - describe('with injected web3', () => { - beforeAll(async () => { - global.window = {} - global.window.web3 = { currentProvider: global.provider } - gen = initializeWeb3({}) - }) - - test('get web3', async () => { - // First action dispatched - expect(gen.next().value).toEqual(put({ type: Action.WEB3_INITIALIZED })) - }) - }) - - describe('with websocket fallback web3', () => { - let gen - - beforeAll(async () => { - global.window = {} - global.provider.providers = { WebSocketProvider: jest.fn() } - }) - - test('get web3', async () => { - web3Options = { - fallback: { - type: 'ws', - url: 'ws://localhost:12345' - } - } - gen = initializeWeb3(web3Options) - - // First action dispatched - expect(gen.next().value).toEqual(put({ type: Action.WEB3_INITIALIZED })) - resolvedWeb3 = gen.next().value - - // is it a Web3 object? - hasWeb3Shape(resolvedWeb3) - }) - - test('fails when fallback type is unknown', async () => { - web3Options = { - fallback: { - type: 'thewrongtype', - url: 'ws://localhost:12345' - } - } - gen = initializeWeb3(web3Options) - - const error = new Error('Invalid web3 fallback provided.') - expect(gen.next().value).toEqual(put({ type: Action.WEB3_FAILED, error })) - }) - }) - - describe('Exhausts options', () => { - beforeAll(async () => { - global.window = {} - gen = initializeWeb3({}) - }) - - test('with failure', async () => { - const error = new Error('Cannot find injected web3 or valid fallback.') - expect(gen.next().value).toEqual(put({ type: Action.WEB3_FAILED, error })) - }) - }) -}) diff --git a/types/Drizzle.d.ts b/types/Drizzle.d.ts deleted file mode 100644 index 6ea77ac..0000000 --- a/types/Drizzle.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Store } from 'redux'; -import { IStoreConfig } from './generateStore'; -import { IContract } from './IContract'; -import { IContractConfig } from './contractStateUtils'; - -export interface IDrizzleOptions { - contracts: IContract[]; - events?: { - [contractName: string]: any; - }; - polls?: { - accounts?: number; - blocks?: number; - }; - syncAlways?: any; - web3?: { - customProvider?: any; - fallback?: { - type: string; - url: string; - } - }, - networkWhitelist?: number[]; -} - -export class Drizzle { - constructor(options?: IDrizzleOptions, store?: Store); - - addContract(contractConfig: IContractConfig, events: any[]): void; - - deleteContract(contractName: string): void; - - findContractByAddress(address: string): IContract; - - generateStore(options: IStoreConfig): Store; -} \ No newline at end of file diff --git a/types/IContract.d.ts b/types/IContract.d.ts deleted file mode 100644 index 99d2d48..0000000 --- a/types/IContract.d.ts +++ /dev/null @@ -1,83 +0,0 @@ -export interface ABI { - constant?: boolean; - inputs: { - name: string; - type: string; - indexed?: boolean; - }[]; - name?: string; - outputs?: { - name: string; - type: string; - }[]; - payable: boolean; - stateMutability: string; - type: string; - anonymous?: boolean; -} - -export interface AST { - absolutePath: string; - exportedSymbols: { - [name: string]: number[]; - }; - id: number; - nodeType: string; - nodes: INode[]; - src: string; -} - -export interface INetwork { - events: any; - links: any; - address: string; - transactionHash: string; -} - -export interface INetworks { - [key: number]: INetwork; - [key: string]: INetwork; -} - -export interface INode { - id: number; - literals: string[]; - nodeType: string; - src: string; - baseContracts: any[]; - contractDependencies: any[]; - contractKind: string; - documentation?: any; - fullyImplemented?: boolean; - linearizedBaseContracts: number[]; - name: string; - nodes: any[]; - scope?: number; -} - -export interface IContract { - contractName: string; - abi: ABI[]; - metadata: string; - bytecode: string; - deployedBytecode: string; - sourceMap: string; - deployedSourceMap: string; - source: string; - sourcePath: string; - ast: AST; - legacyAST: AST; - compiler: { - name: string; - version: string; - }; - networks: INetworks; - schemaVersion: string; - updatedAt: Date; - devdoc: { - methods: any; - }; - userdoc: { - methods: any; - }; -} \ No newline at end of file diff --git a/types/contractStateUtils.d.ts b/types/contractStateUtils.d.ts deleted file mode 100644 index 986e697..0000000 --- a/types/contractStateUtils.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ABI } from "./IContract"; - -export interface IContractConfig { - contractName: string; - web3Contract?: { - options: { - jsonInterface: ABI; - } - }; - abi?: ABI; -} - -export interface IContractInitialState { - [key: string]: {}; - initialized: boolean; - synced: boolean; -} - -export interface IContractOptions { - contracts?: IContractConfig[]; -} - -export function generateContractInitialState(contractConfig: IContractConfig): IContractInitialState; - -export function generateContractsInitialState(options: IContractOptions): IContractInitialState[]; diff --git a/types/generateStore.d.ts b/types/generateStore.d.ts deleted file mode 100644 index a5b70d4..0000000 --- a/types/generateStore.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Store } from 'redux'; -import { IDrizzleOptions } from './Drizzle'; - -export interface IStoreConfig { - [key: string]: any; - drizzleOptions: IDrizzleOptions; - reducers?: any; - appSagas?: any[]; - appMiddlewares?: any[]; - disableReduxDevTools?: boolean; -} - -export function generateStore(config: IStoreConfig): Store; \ No newline at end of file diff --git a/types/index.d.ts b/types/index.d.ts deleted file mode 100644 index fc6fdb3..0000000 --- a/types/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './Drizzle'; -export * from './generateStore'; -export * from './contractStateUtils'; diff --git a/webpack/base.config.js b/webpack/base.config.js deleted file mode 100644 index baa70b6..0000000 --- a/webpack/base.config.js +++ /dev/null @@ -1,30 +0,0 @@ -const path = require('path') -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin - -process.env.BABEL_ENV = 'production' - -module.exports = { - devtool: 'inline-source-map', - entry: './src/index.js', - output: { - filename: 'drizzle-store.js', - library: '@drizzle/store', - libraryTarget: 'umd', - globalObject: "typeof self !== 'undefined' ? self : this", - path: path.resolve(__dirname, '../dist') - }, - module: { - rules: [{ - test: /\.(js)$/, - include: path.resolve(__dirname, '../src'), - loader: 'babel-loader' - }] - }, - plugins: [ - new BundleAnalyzerPlugin({ - analyzerMode: 'disabled', - generateStatsFile: true, - statsOptions: { source: false } - }) - ] -} diff --git a/webpack/pure.config.js b/webpack/pure.config.js deleted file mode 100644 index ec89434..0000000 --- a/webpack/pure.config.js +++ /dev/null @@ -1,6 +0,0 @@ -const merge = require('webpack-merge'); -const baseConfig = require('./base.config.js'); - -module.exports = merge(baseConfig, { - mode: 'production' -}); \ No newline at end of file diff --git a/webpack/release.config.js b/webpack/release.config.js deleted file mode 100644 index 8e52cb7..0000000 --- a/webpack/release.config.js +++ /dev/null @@ -1,14 +0,0 @@ -const merge = require('webpack-merge'); -const baseConfig = require('./base.config.js'); - -module.exports = merge(baseConfig, { - mode: 'development', - externals: { - 'eth-block-tracker': 'eth-block-tracker-es5', - 'redux': 'redux', - 'redux-saga': 'redux-saga', - 'web3': 'web3', - 'is-plain-object': 'is-plain-object', - 'deepmerge': 'deepmerge' - } -}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..931c051 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2744 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/plugin-transform-runtime@^7.5.5": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/types@^7.10.4": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" + integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@redux-saga/core@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" + integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.1.2" + "@redux-saga/delay-p" "^1.1.2" + "@redux-saga/is" "^1.1.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + redux "^4.0.4" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" + integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== + +"@redux-saga/delay-p@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" + integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== + dependencies: + "@redux-saga/symbols" "^1.1.2" + +"@redux-saga/is@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" + integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== + dependencies: + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + +"@redux-saga/symbols@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" + integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== + +"@redux-saga/types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" + integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "14.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.2.tgz#264b44c5a28dfa80198fc2f7b6d3c8a054b9491f" + integrity sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A== + +"@types/node@^10.12.18", "@types/node@^10.3.2": + version "10.17.28" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.28.tgz#0e36d718a29355ee51cec83b42d921299200f6d9" + integrity sha512-dzjES1Egb4c1a89C7lKwQh8pwjYmlOAG9dW1pBgxEk57tMrLnssOfEthz8kdkNaBd7lIqQx7APm5+mZ619IiCQ== + +"@types/node@^12.6.1": + version "12.12.54" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.54.tgz#a4b58d8df3a4677b6c08bfbc94b7ad7a7a5f82d1" + integrity sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w== + +"@types/pbkdf2@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" + integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== + dependencies: + "@types/node" "*" + +"@web3-js/scrypt-shim@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc" + integrity sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw== + dependencies: + scryptsy "^2.1.0" + semver "^6.3.0" + +"@web3-js/websocket@^1.0.29": + version "1.0.30" + resolved "https://registry.yarnpkg.com/@web3-js/websocket/-/websocket-1.0.30.tgz#9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87" + integrity sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA== + dependencies: + debug "^2.2.0" + es5-ext "^0.10.50" + nan "^2.14.0" + typedarray-to-buffer "^3.1.5" + yaeti "^0.0.6" + +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + +ajv@^6.12.3: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +any-promise@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + +base-x@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" + integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +blakejs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" + integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + +bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + +bn.js@4.11.8: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0, body-parser@^1.16.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + 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" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^5.0.5, buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.8.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookiejar@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" + integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.1: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + 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@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + 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" + +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + 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" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + 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" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + 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" + +deepmerge@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +elliptic@6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" + integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8= + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + inherits "^2.0.1" + +elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + 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" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eth-block-tracker@4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" + integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== + dependencies: + "@babel/plugin-transform-runtime" "^7.5.5" + "@babel/runtime" "^7.5.5" + eth-query "^2.1.0" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + safe-event-emitter "^1.0.1" + +eth-ens-namehash@2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-lib@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" + integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +ethereum-bloom-filters@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.7.tgz#b7b80735e385dbb7f944ce6b4533e24511306060" + integrity sha512-cDcJJSJ9GMAcURiAWO3DxIEhTL/uWqlQnvgKpuYQzYPrt/izuGU+1ntQmHt0IRq6ADoSYHFnB+aCEFIldjhkMQ== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" + integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== + +ethereumjs-tx@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" + integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== + dependencies: + ethereumjs-common "^1.5.0" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@4.0.0-beta.3: + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.3.tgz#15bef14e57e94ecbeb7f9b39dd0a4bd435bc9066" + integrity sha512-YYPogooSknTwvHg3+Mv71gM/3Wcrx+ZpCzarBj3mqs9njjRkrOo2/eufzhHloOCo3JSoNI4TQJJ6yU5ABm3Uog== + dependencies: + "@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" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +eventemitter3@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +express@^4.14.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + 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" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + 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" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +got@9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== + dependencies: + 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@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-4.1.1.tgz#1a14d6452cbd50790edc7fdaa0aed5a40a35ebb5" + integrity sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + +js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +keccak@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" + integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + dependencies: + mkdirp "*" + +mkdirp@*: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mock-fs@^4.1.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" + integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +nan@^2.14.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +oboe@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" + integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + dependencies: + http-https "^1.0.0" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + dependencies: + p-finally "^1.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-headers@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" + integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +pbkdf2@^3.0.17, pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + 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@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + 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" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +redux-saga@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112" + integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw== + dependencies: + "@redux-saga/core" "^1.1.3" + +redux@4.0.5, redux@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +request@^2.79.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +resolve@^1.8.1: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3: + version "2.2.6" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" + integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + dependencies: + bn.js "^4.11.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" + integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q= + +scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +scryptsy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" + integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== + +secp256k1@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" + integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== + dependencies: + elliptic "^6.5.2" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +seek-bzip@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" + integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== + dependencies: + commander "^2.8.1" + +semver@^5.5.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + 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" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" + integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + dependencies: + is-hex-prefixed "1.0.0" + +swarm-js@0.1.39: + version "0.1.39" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" + integrity sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + decompress "^4.0.0" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request-promise "^0.1.2" + +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + 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@^4.0.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript-compare@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== + dependencies: + typescript-logic "^0.0.0" + +typescript-logic@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== + +typescript-tuple@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== + dependencies: + typescript-compare "^0.0.2" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbzip2-stream@^1.0.9: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +web3-bzz@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.6.tgz#0b88c0b96029eaf01b10cb47c4d5f79db4668883" + integrity sha512-9NiHLlxdI1XeFtbPJAmi2jnnIHVF+GNy517wvOS72P7ZfuJTPwZaSNXfT01vWgPPE9R96/uAHDWHOg+T4WaDQQ== + dependencies: + "@types/node" "^10.12.18" + got "9.6.0" + swarm-js "0.1.39" + underscore "1.9.1" + +web3-core-helpers@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.6.tgz#7aacd25bf8015adcdfc0f3243d0dcfdff0373f7d" + integrity sha512-gYKWmC2HmO7RcDzpo4L1K8EIoy5L8iubNDuTC6q69UxczwqKF/Io0kbK/1Z10Av++NlzOSiuyGp2gc4t4UOsDw== + dependencies: + underscore "1.9.1" + web3-eth-iban "1.2.6" + web3-utils "1.2.6" + +web3-core-method@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.6.tgz#f5a3e4d304abaf382923c8ab88ec8eeef45c1b3b" + integrity sha512-r2dzyPEonqkBg7Mugq5dknhV5PGaZTHBZlS/C+aMxNyQs3T3eaAsCTqlQDitwNUh/sUcYPEGF0Vo7ahYK4k91g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-utils "1.2.6" + +web3-core-promievent@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.6.tgz#b1550a3a4163e48b8b704c1fe4b0084fc2dad8f5" + integrity sha512-km72kJef/qtQNiSjDJJVHIZvoVOm6ytW3FCYnOcCs7RIkviAb5JYlPiye0o4pJOLzCXYID7DK7Q9bhY8qWb1lw== + dependencies: + any-promise "1.3.0" + eventemitter3 "3.1.2" + +web3-core-requestmanager@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.6.tgz#5808c0edc0d6e2991a87b65508b3a1ab065b68ec" + integrity sha512-QU2cbsj9Dm0r6om40oSwk8Oqbp3wTa08tXuMpSmeOTkGZ3EMHJ1/4LiJ8shwg1AvPMrKVU0Nri6+uBNCdReZ+g== + dependencies: + underscore "1.9.1" + web3-core-helpers "1.2.6" + web3-providers-http "1.2.6" + web3-providers-ipc "1.2.6" + web3-providers-ws "1.2.6" + +web3-core-subscriptions@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.6.tgz#9d44189e2321f8f1abc31f6c09103b5283461b57" + integrity sha512-M0PzRrP2Ct13x3wPulFtc5kENH4UtnPxO9YxkfQlX2WRKENWjt4Rfq+BCVGYEk3rTutDfWrjfzjmqMRvXqEY5Q== + dependencies: + eventemitter3 "3.1.2" + underscore "1.9.1" + web3-core-helpers "1.2.6" + +web3-core@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.6.tgz#bb42a1d7ae49a7258460f0d95ddb00906f59ef92" + integrity sha512-y/QNBFtr5cIR8vxebnotbjWJpOnO8LDYEAzZjeRRUJh2ijmhjoYk7dSNx9ExgC0UCfNFRoNCa9dGRu/GAxwRlw== + dependencies: + "@types/bn.js" "^4.11.4" + "@types/node" "^12.6.1" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-requestmanager "1.2.6" + web3-utils "1.2.6" + +web3-eth-abi@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.6.tgz#b495383cc5c0d8e2857b26e7fe25606685983b25" + integrity sha512-w9GAyyikn8nSifSDZxAvU9fxtQSX+W2xQWMmrtTXmBGCaE4/ywKOSPAO78gq8AoU4Wq5yqVGKZLLbfpt7/sHlA== + dependencies: + ethers "4.0.0-beta.3" + underscore "1.9.1" + web3-utils "1.2.6" + +web3-eth-accounts@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.6.tgz#a1ba4bf75fa8102a3ec6cddd0eccd72462262720" + integrity sha512-cDVtonHRgzqi/ZHOOf8kfCQWFEipcfQNAMzXIaKZwc0UUD9mgSI5oJrN45a89Ze+E6Lz9m77cDG5Ax9zscSkcw== + dependencies: + "@web3-js/scrypt-shim" "^0.1.0" + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "^0.2.8" + ethereumjs-common "^1.3.2" + ethereumjs-tx "^2.1.1" + underscore "1.9.1" + uuid "3.3.2" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + +web3-eth-contract@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.6.tgz#39111543960035ed94c597a239cf5aa1da796741" + integrity sha512-ak4xbHIhWgsbdPCkSN+HnQc1SH4c856y7Ly+S57J/DQVzhFZemK5HvWdpwadJrQTcHET3ZeId1vq3kmW7UYodw== + dependencies: + "@types/bn.js" "^4.11.4" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-promievent "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-utils "1.2.6" + +web3-eth-ens@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.6.tgz#bf86a624c4c72bc59913c2345180d3ea947e110d" + integrity sha512-8UEqt6fqR/dji/jBGPFAyBs16OJjwi0t2dPWXPyGXmty/fH+osnXwWXE4HRUyj4xuafiM5P1YkXMsPhKEadjiw== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-promievent "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-contract "1.2.6" + web3-utils "1.2.6" + +web3-eth-iban@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.6.tgz#0b22191fd1aa6e27f7ef0820df75820bfb4ed46b" + integrity sha512-TPMc3BW9Iso7H+9w+ytbqHK9wgOmtocyCD3PaAe5Eie50KQ/j7ThA60dGJnxItVo6yyRv5pZAYxPVob9x/fJlg== + dependencies: + bn.js "4.11.8" + web3-utils "1.2.6" + +web3-eth-personal@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.6.tgz#47a0a0657ec04dd77f95451a6869d4751d324b6b" + integrity sha512-T2NUkh1plY8d7wePXSoHnaiKOd8dLNFaQfgBl9JHU6S7IJrG9jnYD9bVxLEgRUfHs9gKf9tQpDf7AcPFdq/A8g== + dependencies: + "@types/node" "^12.6.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + +web3-eth@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.6.tgz#15a8c65fdde0727872848cae506758d302d8d046" + integrity sha512-ROWlDPzh4QX6tlGGGlAK6X4kA2n0/cNj/4kb0nNVWkRouGmYO0R8k6s47YxYHvGiXt0s0++FUUv5vAbWovtUQw== + dependencies: + underscore "1.9.1" + web3-core "1.2.6" + web3-core-helpers "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-eth-abi "1.2.6" + web3-eth-accounts "1.2.6" + web3-eth-contract "1.2.6" + web3-eth-ens "1.2.6" + web3-eth-iban "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-utils "1.2.6" + +web3-net@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.6.tgz#035ca0fbe55282fda848ca17ebb4c8966147e5ea" + integrity sha512-hsNHAPddrhgjWLmbESW0KxJi2GnthPcow0Sqpnf4oB6+/+ZnQHU9OsIyHb83bnC1OmunrK2vf9Ye2mLPdFIu3A== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-utils "1.2.6" + +web3-providers-http@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.6.tgz#3c7b1252751fb37e53b873fce9dbb6340f5e31d9" + integrity sha512-2+SaFCspb5f82QKuHB3nEPQOF9iSWxRf7c18fHtmnLNVkfG9SwLN1zh67bYn3tZGUdOI3gj8aX4Uhfpwx9Ezpw== + dependencies: + web3-core-helpers "1.2.6" + xhr2-cookies "1.1.0" + +web3-providers-ipc@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.6.tgz#adabab5ac66b3ff8a26c7dc97af3f1a6a7609701" + integrity sha512-b0Es+/GTZyk5FG3SgUDW+2/mBwJAXWt5LuppODptiOas8bB2khLjG6+Gm1K4uwOb+1NJGPt5mZZ8Wi7vibtQ+A== + dependencies: + oboe "2.1.4" + underscore "1.9.1" + web3-core-helpers "1.2.6" + +web3-providers-ws@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.6.tgz#3cecc49f7c99f07a75076d3c54247050bc4f7e11" + integrity sha512-20waSYX+gb5M5yKhug5FIwxBBvkKzlJH7sK6XEgdOx6BZ9YYamLmvg9wcRVtnSZO8hV/3cWenO/tRtTrHVvIgQ== + dependencies: + "@web3-js/websocket" "^1.0.29" + underscore "1.9.1" + web3-core-helpers "1.2.6" + +web3-shh@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.6.tgz#2492616da4cac32d4c7534b890f43bac63190c14" + integrity sha512-rouWyOOM6YMbLQd65grpj8BBezQfgNeRRX+cGyW4xsn6Xgu+B73Zvr6OtA/ftJwwa9bqHGpnLrrLMeWyy4YLUw== + dependencies: + web3-core "1.2.6" + web3-core-method "1.2.6" + web3-core-subscriptions "1.2.6" + web3-net "1.2.6" + +web3-utils@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.6.tgz#b9a25432da00976457fcc1094c4af8ac6d486db9" + integrity sha512-8/HnqG/l7dGmKMgEL9JeKPTtjScxOePTzopv5aaKFExPfaBrYRkgoMqhoowCiAl/s16QaTn4DoIF1QC4YsT7Mg== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + underscore "1.9.1" + utf8 "3.0.0" + +web3@1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.6.tgz#c497dcb14cdd8d6d9fb6b445b3b68ff83f8ccf68" + integrity sha512-tpu9fLIComgxGrFsD8LUtA4s4aCZk7px8UfcdEy6kS2uDi/ZfR07KJqpXZMij7Jvlq+cQrTAhsPSiBVvoMaivA== + dependencies: + "@types/node" "^12.6.1" + web3-bzz "1.2.6" + web3-core "1.2.6" + web3-eth "1.2.6" + web3-eth-personal "1.2.6" + web3-net "1.2.6" + web3-shh "1.2.6" + web3-utils "1.2.6" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + 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" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.5.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" + integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ== + dependencies: + global "~4.3.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0"