From 797acaaf7e11658bf5e400a9f7e0ae93ecf32ea6 Mon Sep 17 00:00:00 2001 From: Chris Meisl Date: Thu, 20 Jun 2019 22:12:48 -0600 Subject: [PATCH] version 0.9 (#308) * Update snapshots * update to version 0.8.11 * Release/0.9 (#307) * add abi check for ethers * update tests * add ethers support * modify variable names in separate args * fixed getContractMethod calls * fixed transactionQueue bug * also fixes txQueue bug * update getContractMethod to properly create overloaded methods for ethers contracts * correctly assign from property on txOptions object based on ethers or web3 * updated readme * Refactor function to remove unwanted notifications * Add code to call handleNotificationEvent * Update readme * Change value to undefined so that default values work correctly * Add default empty object for proper destructuring * started work to be compatible with ethers v5 * refactored websocket retry logic to be in websockets.js * Update tests * change parameter abi is pulled off of, change to uncheckedsigner * fixed merge conflicts and updated tests * Update readme with ethers contract instantiation example * update getCurrentProvider to allow for ethers * add logic for different ethers versions * add unchecked signer for v4 support * modify eslint config to allow for case declarations * update docs * update readme with compatile ethers versions * add ethers to config validation * small fix to formatting and wrong declaration * Fix bignumber bug with contract gas estimate * Add missing default value for inlineCustomMsgs * Add handleNotificationEvent and remove truffleContract from config validation * Add extra provider checksif not using web3 * Make sure nsfFail event is included in handleNotificationEvent * Add better documentation for handleNotificationEvent * update to version 0.9 * Update documentation for notification events * clarification for txConfirmedClient event --- .eslintrc.js | 3 +- README.md | 122 +- internals/jestSetup.js | 2 + multidep.json | 9 +- package.json | 2 +- .../websockets/index.test.js | 17 +- src/__tests__/js/contract/index.test.js | 24 +- src/__tests__/js/init.test.js | 12 +- src/__tests__/js/web3.test.js | 16 +- src/js/helpers/ethers-provider.js | 59 + src/js/helpers/events.js | 43 +- src/js/helpers/utilities.js | 8 +- src/js/helpers/validation.js | 5 +- src/js/helpers/web3.js | 193 ++- src/js/helpers/websockets.js | 73 +- src/js/index.js | 219 ++-- src/js/logic/contract-methods.js | 167 ++- src/js/logic/send-transaction.js | 111 +- src/js/logic/user.js | 23 +- src/js/views/content.js | 4 +- src/js/views/dom.js | 27 +- src/js/views/event-to-ui.js | 28 +- yarn.lock | 1103 ++++++++--------- 23 files changed, 1315 insertions(+), 955 deletions(-) create mode 100644 src/js/helpers/ethers-provider.js diff --git a/.eslintrc.js b/.eslintrc.js index d0e32167..cf9b43b5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -25,7 +25,8 @@ module.exports = { 'no-nested-ternary': 'off', 'import/no-cycle': 'off', 'no-lonely-if': 'off', - 'consistent-return': 'off' + 'consistent-return': 'off', + 'no-case-declarations': 'off' }, settings: { 'import/resolver': { diff --git a/README.md b/README.md index 73016710..2f5edf98 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Takes care of onboarding your users, keeping them informed about transaction status and comprehensive usage analytics with minimal -setup. Supports `web3.js` versions 0.20 and 1.0. +setup. Supports `web3.js` versions `0.20` and `1.0`, `ethers.js` versions `^4.0.20` and `^5.0-beta-137` _note: `web3.js` 1.0.0 beta versions 38, 39, 40, 41, 42, 43, 44, 45 have bugs when interacting with MetaMask, we recommend you avoid these versions of `web3.js`_ @@ -43,16 +43,16 @@ yarn add bnc-assist #### Script Tag The library uses [semantic versioning](https://semver.org/spec/v2.0.0.html). -The current version is 0.8.11. +The current version is 0.9.0. There are minified and non-minified versions. Put this script at the top of your `` ```html - + - + ``` ### Initialize the Library @@ -114,6 +114,7 @@ Decorating your contracts is simple: ```javascript var myContract = new web3.eth.Contract(abi, address) +// Assist can decorate ethers instantiated contracts as well var myDecoratedContract = assistInstance.Contract(myContract) // and then replace `myContract` with `myDecoratedContract` @@ -130,6 +131,14 @@ To speed things up, you can decorate the contract inline: var myContract = assistInstance.Contract(new web3.eth.Contract(abi, address)) ``` +### Ethers Contracts + +If you are using `ethers.js` you will need to pass in the `address` and the `abi` to Assist's `Contract` function so that Assist can instantiate it with the `UncheckedJsonRpcSigner`. This is critical for Assist's transaction notifications to work correctly. An example of how to create an ethers contract: + +```javascript +var myContract = assistInstance.Contract(address, abi) +``` + ### Initializing `web3` and including it in the `config` `web3` isn't a required parameter as you might not have access to a provider to instantiate Web3 with until after the user has been onboarded and has a wallet installed. We recommend instantiating `web3` at the top level of your Dapp once the window object is available like this: @@ -161,6 +170,7 @@ var config = { networkId: Number, // The network id of the Ethereum network your Dapp is working with (REQUIRED) dappId: String, // The API key supplied to you by Blocknative (REQUIRED) web3: Object, // The instantiated version of web3 that the Dapp is using + ethers: Object, // Pass in ethers if using instead of web3 (this is required if you are using ethers) mobileBlocked: Boolean, // Defines if the Dapp works on mobile [false] minimumBalance: String, // Defines the minimum balance in Wei that a user needs to have to use the Dapp [0] headlessMode: Boolean, // Turn off Assist UI, but still retain analytics collection [false] @@ -194,6 +204,7 @@ var config = { notificationsPosition: Object || String, // Defines where in the viewport notifications will be positioned. See below: 'Notification Positioning' css: String // Custom css string to overide Assist default styles }, + handleNotificationEvent: Function // Called on every tx notification event with a transaction event object timeouts: { txStall: Number // The number of milliseconds after a transaction has been sent before showing a stall notification if not confirmed in the blockchain } @@ -216,7 +227,7 @@ By default, `Assist` positions notifications at the `top` of the viewport on mob ```javascript // Set notifications to bottom on mobile and top right on desktop -const config = { +var config = { style: { notificationsPosition: { desktop: 'topLeft', @@ -228,13 +239,70 @@ const config = { ```javascript // Sets only the desktop position -const config = { +var config = { style: { notificationsPosition: 'bottomRight' } } ``` +### Handling Notifications + +If you want more fine grained control over whether Assist's notifications are displayed or you just want to be informed of every event, you can define a function that will be called every time there is a notification event. + +The function that is defined on the `handleNotificationEvent` property of the config will be called with the following object: + +```javascript +{ + categoryCode: String, // event category - List detailed below + eventCode: String, // event type - List detailed below + contract: { // if not a contract method transaction, then this is undefined + methodName: String, // name of the method that was called + parameters: Array, // the parameters the method was called with + }, + inlineCustomMsgs: Object | Boolean, // the inline custom messages passed to the transaction + transaction: { + id: String, // internal unique id for the transaction + from: String, // the address the transaction was sent from + gas: String, // the gas limit of the transaction + gasPrice: String, // the gas price of the transaction + to: String, // the address the transaction was sent to + value: String // the value of the transaction + }, + wallet: { + address: String, // the account address of the wallet in use + balance: String, // the balance in wei of the wallet in use + minimum: Boolean, // whether the wallet has the minimum balance required (specified in config) + provider: String // the name of the wallet provider + } +} +``` + +#### `eventCode` + +The list of event codes that are included in the object that `handleNotificationEvent` is called with are the same as the list included in the `messages` object that is passed to the config with one addition: + +```javascript + txConfirmedClient: String // called when a client confirmation is received from the provider +``` + +This additional event is used to notify transaction confirmation if a `txConfirmed` was not already received. Whichever of `txConfirmed` and `txConfirmedClient` is received first should be used for notification. + +For documentation on the rest of the event codes see the documentation for the messages parameter of the config object. + +#### `categoryCode` + +The following list of category codes can be included in the object that `handleNotificationEvent` is called with: + +```javascript + activePreflight: String, // called during preflight transaction checks + activeTransaction: String, // called during an active non-contract transaction + activeContract: String // called during an active contract transaction +``` + +#### Selectively display Notification UI + +If you would like Assist to display a notification for the current event, then return a "truthy" value from the `handleNotificationEvent` function. If you don't want a notification to be displayed then just return a "falsy" value. ### Custom Transaction Messages @@ -294,6 +362,22 @@ Transaction(txObject, callback, {messages: {txPending: () => 'Sending ETH...'}}) The `messages` object _must_ always be the _last_ argument provided to the send method for it to be recognized. +### Transaction Events + +By defining a function and including it in the config on the `handleNotificationEvent` property you can hook in to all of the transaction events within Assist. The function will be called with a transaction event object which has the following properties: + +```javascript +{ + categoryCode: "activeTransaction" + contract: Object { methodName: "highFive", parameters: (1) […] } + eventCode: "txPending" + inlineCustomMsgs: false + transaction: Object { id: "f64a4c67-f349-4da7-8d6b-55e92525e60b", gas: "24268", gasPrice: "1000000000", … } +} +``` + +If you want Assist to still go ahead and show the notification, return `true` from the function. If you don't want the notification to display, then return `false`. + ### Ethereum Network Ids The available ids for the `networkId` property of the config object: @@ -420,11 +504,13 @@ assistInstance.onboard() }) ``` -### `Contract(contractInstance)` +### `Contract(contractInstanceOrAddress [, abi])` #### Parameters -`contractInstance` - `Object`: Instantiated web3 `contract` object (**Required**) +`contractInstanceOrAddress` - `Object` | `String`: Instantiated web3 `contract` object (**Required**) or an address if you are using `ethers` instead if `web3` + +`abi` - `Array`: Abi array if you are using `ethers` #### Returns @@ -433,10 +519,16 @@ A decorated `contract` to be used instead of the original instance #### Example ```javascript -const myContract = new web3.eth.Contract(abi, address) -const myDecoratedContract = assistInstance.Contract(myContract) - +// web3 +var myContract = new web3.eth.Contract(abi, address) +var myDecoratedContract = assistInstance.Contract(myContract) mydecoratedContract.methods.myMethod(params).call() + +// OR + +// ethers +var myContract = assistInstance.Contract(address, abi) +myContract.myMethod().call() ``` ### `Transaction(txObject [, callback] [, inlineCustomMsgs])` @@ -494,7 +586,7 @@ assistInstance.getState() `style` - `Object`: Object containing new style information (**Required**) ```javascript -const style = { +var style = { darkMode: Boolean, // Set Assist UI to dark mode css: String, // Custom css string to overide Assist default styles notificationsPosition: String || Object, // Defines which corner transaction notifications will be positioned. See 'Notification Positioning' @@ -505,14 +597,14 @@ const style = { ```javascript // Enable dark mode and position notifications at the bottom left on desktop -const style = { +var style = { darkMode: true, notificationsPosition: 'bottomLeft' } assistInstance.updateStyle(style) // Position notifications at the bottom of the viewport on mobile and set their background to black -const style = { +var style = { css: `.bn-notification { background: black }`, notificationsPosition: { mobile: 'bottom' } } @@ -554,7 +646,7 @@ assistInstance.notify('success', 'Operation was a success! Click { describe('socket refuses to connect', () => { beforeEach(() => { - websockets.openWebsocketConnection() + websockets.openWebsocketConnection().catch(() => {}) mockServer.emit('error') }) test('state.pendingSocketConnection is set to false', () => { expect(state.pendingSocketConnection).toEqual(false) }) }) + describe('socket creation throws an error', () => { beforeEach(() => { global.WebSocket = null @@ -70,15 +70,8 @@ describe('a websocket connection is requested', () => { afterEach(() => { global.WebSocket = WebSocket }) - test('assistLog should be called with the error', () => { - const assistLogSpy = jest - .spyOn(utilities, 'assistLog') - .mockImplementation(() => {}) - expect(() => { - websockets.openWebsocketConnection() - }).toThrow() - expect(assistLogSpy).toHaveBeenCalled() - assistLogSpy.mockRestore() + test('openWebsocketConnection should reject', () => { + expect(websockets.openWebsocketConnection()).rejects.toBe(false) }) }) }) @@ -264,7 +257,7 @@ describe('assist is connected to a websocket', () => { contract: 'some-contract', inlineCustomMsgs: { '1': 'msg' } } - const payload = { event: { transaction } } + const payload = { event: { transaction, eventCode: 'txConfirmed' } } let existingTxStatus = 'pending' let handleEventSpy beforeEach(() => { diff --git a/src/__tests__/js/contract/index.test.js b/src/__tests__/js/contract/index.test.js index 04607b9d..a31baace 100644 --- a/src/__tests__/js/contract/index.test.js +++ b/src/__tests__/js/contract/index.test.js @@ -1,9 +1,9 @@ import truffleContract from 'truffle-contract' -import { Server } from 'mock-socket' import abi from '~/__tests__/res/dstoken.json' import da from '~/js' import * as web3Helpers from '~/js/helpers/web3' -import { initialState, updateState } from '~/js/helpers/state' +import * as websockets from '~/js/helpers/websockets' +import { state, initialState, updateState } from '~/js/helpers/state' import convertLibJson from '~/__tests__/res/ConvertLib.json' import { convertLibAddress, port } from '../../../../internals/ganacheConfig' @@ -34,10 +34,19 @@ multidepRequire.forEachVersion('web3', (version, Web3) => { let assistInstance let web3 let contract - let mockServer let config beforeEach(() => { - mockServer = new Server('ws://localhost:8080') + jest + .spyOn(websockets, 'openWebsocketConnection') + .mockImplementation(() => Promise.resolve(true)) + jest + .spyOn(websockets, 'checkForSocketConnection') + .mockImplementation(() => Promise.resolve(true)) + updateState({ + socket: { send: () => {} }, + socketConnection: true, + pendingSocketConnection: false + }) const provider = version.includes('0.20') ? new Web3.providers.HttpProvider(`http://localhost:${port}`) : `ws://localhost${port}` @@ -45,9 +54,6 @@ multidepRequire.forEachVersion('web3', (version, Web3) => { config = { dappId: '123', web3, networkId: 1 } assistInstance = da.init(config) }) - afterEach(() => { - mockServer.close() - }) const contracts = [ ['truffle', getTruffleContract], ['web3', getWeb3Contract] @@ -55,8 +61,12 @@ multidepRequire.forEachVersion('web3', (version, Web3) => { contracts.forEach(([name, getContract]) => { describe(`with a ${name} contract`, () => { beforeEach(async () => { + if (name === 'truffle') state.config.truffleContract = true contract = await getContract(web3) }) + afterEach(() => { + if (name === 'truffle') state.config.truffleContract = false + }) test(`it doesn't fail and returns the expected decorated contract`, () => { const decoratedContract = assistInstance.Contract(contract) diff --git a/src/__tests__/js/init.test.js b/src/__tests__/js/init.test.js index 6b8cd552..732ae767 100644 --- a/src/__tests__/js/init.test.js +++ b/src/__tests__/js/init.test.js @@ -13,9 +13,13 @@ jest.mock('../../js/helpers/iframe') events.handleEvent = jest.fn() // this is a little hacky but it's easier than creating a __mocks__ directory just for this case -websocket.openWebsocketConnection = jest.fn(() => { - jest.fn() -}) +websocket.openWebsocketConnection = jest + .fn() + .mockImplementation(() => Promise.resolve(true)) + +websocket.checkForSocketConnection = jest + .fn() + .mockImplementation(() => Promise.resolve(true)) const assist = da.init({ dappId: 'something', networkId: 1 }) @@ -86,6 +90,7 @@ test('Does not delete any methods from the contract object when decorating', () test('Does not allow sending transactions without a valid API key', async () => { stateMock.state.validApiKey = false + stateMock.state.config = {} try { assist.Transaction({ some: 'property' }) @@ -98,6 +103,7 @@ test('Does not allow sending transactions without a valid API key', async () => test('Does not allow sending transactions on the wrong network', async () => { stateMock.state.validApiKey = true stateMock.state.supportedNetwork = false + stateMock.state.config = {} try { assist.Transaction({ some: 'property' }) diff --git a/src/__tests__/js/web3.test.js b/src/__tests__/js/web3.test.js index 83ac1321..386839d6 100644 --- a/src/__tests__/js/web3.test.js +++ b/src/__tests__/js/web3.test.js @@ -35,7 +35,10 @@ describe(`web3.js tests`, () => { beforeEach(() => { jest .spyOn(websockets, 'openWebsocketConnection') - .mockImplementation(() => {}) + .mockImplementation(() => Promise.resolve(true)) + jest + .spyOn(websockets, 'checkForSocketConnection') + .mockImplementation(() => Promise.resolve(true)) simpleVersion = version.slice(0, 3) web3 = initWeb3(simpleVersion, Web3) config = { dappId: '123', web3, networkId: 5 } @@ -82,16 +85,13 @@ describe(`web3.js tests`, () => { }) test('should return the expected gas cost', async () => { const expected = 21400 // gas the setOwner call should cost - const contract = web3.eth.contract + const contractObj = web3.eth.contract ? web3.eth.contract(abi).at(zeroAddress) // web3 0.20 : new web3.eth.Contract(abi, zeroAddress) // web3 1.0 - const contractMethod = contract.methods - ? contract.methods.setOwner // web3 1.0 - : contract.setOwner // web3 0.20 const parameters = [zeroAddress] const contractGas = await web3Functions.contractGas( simpleVersion - )(contractMethod, parameters, {}) + )({ contractObj, methodName: 'setOwner', args: parameters }) expect(contractGas).toEqual(expected) }) }) @@ -110,12 +110,12 @@ describe(`web3.js tests`, () => { // see https://github.com/blocknative/assist/issues/171 test('should return the expected gas cost', async () => { const expected = 21988 // gas the convert call should cost - const contractMethod = contractInstance.convert + const contractObj = contractInstance const parameters = [5, 10] const contractGas = await web3Functions.contractGas( simpleVersion, true - )(contractMethod, parameters) + )({ contractObj, methodName: 'convert', args: parameters }) expect(contractGas).toEqual(expected) }) }) diff --git a/src/js/helpers/ethers-provider.js b/src/js/helpers/ethers-provider.js new file mode 100644 index 00000000..e59e51da --- /dev/null +++ b/src/js/helpers/ethers-provider.js @@ -0,0 +1,59 @@ +import { state } from './state' +import { networkName } from './utilities' + +let provider + +export const getEthersProvider = () => { + if (!provider) { + const { ethers } = state.config + if (typeof window.ethereum !== 'undefined') { + provider = new ethers.providers.Web3Provider(window.ethereum) + } else if (typeof window.web3 !== 'undefined') { + provider = new ethers.providers.Web3Provider(window.web3.currentProvider) + } else { + provider = ethers.getDefaultProvider(networkName(state.config.networkId)) + } + } + + return provider +} + +let UncheckedSigner + +export const getUncheckedSigner = () => { + if (!UncheckedSigner) { + const { ethers } = state.config + const provider = getEthersProvider() + class UncheckedJsonRpcSigner extends ethers.Signer { + constructor(signer) { + super() + ethers.utils.defineReadOnly(this, 'signer', signer) + ethers.utils.defineReadOnly(this, 'provider', signer.provider) + } + + getAddress() { + return this.signer.getAddress() + } + + sendTransaction(transaction) { + return this.signer.sendUncheckedTransaction(transaction).then(hash => ({ + hash, + nonce: null, + gasLimit: null, + gasPrice: null, + data: null, + value: null, + chainId: null, + confirmations: 0, + from: null, + wait: confirmations => + this.provider.waitForTransaction(hash, confirmations) + })) + } + } + + UncheckedSigner = new UncheckedJsonRpcSigner(provider.getSigner()) + } + + return UncheckedSigner +} diff --git a/src/js/helpers/events.js b/src/js/helpers/events.js index d17d9418..0ccf4403 100644 --- a/src/js/helpers/events.js +++ b/src/js/helpers/events.js @@ -1,13 +1,15 @@ import eventToUI from '~/js/views/event-to-ui' import { state } from './state' -import { networkName, timeouts } from './utilities' +import { networkName } from './utilities' import { getTxObjFromQueue } from './transaction-queue' -import { openWebsocketConnection } from './websockets' +import { checkForSocketConnection, retryLogEvent } from './websockets' import { getItem } from './storage' +import { removeUnwantedNotifications } from '../views/dom' export function handleEvent(eventObj, clickHandlers) { - const { eventCode, categoryCode } = eventObj + const { eventCode, categoryCode, transaction } = eventObj + const { handleNotificationEvent, headlessMode } = state.config || {} const serverEvent = eventCode === 'txPending' || eventCode === 'txConfirmed' || @@ -15,6 +17,8 @@ export function handleEvent(eventObj, clickHandlers) { eventCode === 'txSpeedUp' || eventCode === 'txCancel' + const notificationEvent = eventCode.includes('tx') || eventCode === 'nsfFail' + let eventToLog = { ...eventObj } // If dealing with a custom notification the logged event @@ -30,6 +34,21 @@ export function handleEvent(eventObj, clickHandlers) { // Log everything that isn't a server event !serverEvent && lib.logEvent(eventToLog) + let showNotification = true + + if (notificationEvent) { + showNotification = + handleNotificationEvent && + typeof handleNotificationEvent === 'function' && + categoryCode !== 'userInitiatedNotify' + ? handleNotificationEvent(eventObj) + : true + + if (!showNotification) { + removeUnwantedNotifications(eventCode, transaction.id) + } + } + // If tx status is 'completed', UI has been already handled if (eventCode === 'txConfirmed' || eventCode === 'txConfirmedClient') { const txObj = getTxObjFromQueue(eventObj.transaction.id) @@ -40,7 +59,7 @@ export function handleEvent(eventObj, clickHandlers) { } // Show UI - if (state.config && !state.config.headlessMode) { + if (!headlessMode && showNotification) { eventToUI[categoryCode] && eventToUI[categoryCode][eventCode] && eventToUI[categoryCode][eventCode](eventObj, clickHandlers) @@ -49,7 +68,7 @@ export function handleEvent(eventObj, clickHandlers) { // Create event log to be sent to server export function createEventLog(eventObj) { - const { dappId, networkId, headlessMode } = state.config + const { dappId, networkId, headlessMode } = state.config || {} const { userAgent, version } = state const newUser = getItem('_assist_newUser') === 'true' return JSON.stringify( @@ -81,17 +100,9 @@ export function logEvent(eventObj) { // Need to check if connection dropped // as we don't know until after we try to send a message - setTimeout(() => { - if (!state.socketConnection) { - if (!state.pendingSocketConnection) { - openWebsocketConnection() - } - - setTimeout(() => { - logEvent(eventObj) - }, timeouts.checkSocketConnection) - } - }, timeouts.checkSocketConnection) + checkForSocketConnection().then( + connected => !connected && retryLogEvent(() => logEvent(eventObj)) + ) } export const lib = { diff --git a/src/js/helpers/utilities.js b/src/js/helpers/utilities.js index d2a57c4f..a21b18ab 100644 --- a/src/js/helpers/utilities.js +++ b/src/js/helpers/utilities.js @@ -92,7 +92,7 @@ export function createTransactionId() { export function separateArgs(allArgs, argsLength) { const allArgsCopy = [...allArgs] - const args = argsLength ? allArgsCopy.splice(0, argsLength) : [] + const methodArgs = argsLength ? allArgsCopy.splice(0, argsLength) : [] const inlineCustomMsgs = typeof last(allArgsCopy) === 'object' && @@ -102,7 +102,7 @@ export function separateArgs(allArgs, argsLength) { const callback = typeof last(allArgsCopy) === 'function' && takeLast(allArgsCopy) - const txObject = + const txOptions = typeof first(allArgsCopy) === 'object' && first(allArgsCopy) !== null ? takeFirst(allArgsCopy) : {} @@ -111,8 +111,8 @@ export function separateArgs(allArgs, argsLength) { return { callback, - args, - txObject, + methodArgs, + txOptions, defaultBlock, inlineCustomMsgs } diff --git a/src/js/helpers/validation.js b/src/js/helpers/validation.js index d64c0a0d..033cffa8 100644 --- a/src/js/helpers/validation.js +++ b/src/js/helpers/validation.js @@ -19,6 +19,7 @@ export function validateConfig(config) { networkId: ow.number, dappId: ow.string, web3: ow.optional.object, + ethers: ow.optional.object, mobileBlocked: ow.optional.boolean, minimumBalance: ow.optional.number, headlessMode: ow.optional.boolean, @@ -36,6 +37,7 @@ export function validateConfig(config) { txConfirmed: ow.optional.function, txSpeedUp: ow.optional.function }), + handleNotificationEvent: ow.optional.function, images: ow.optional.object.exactShape({ welcome: ow.optional.object.exactShape({ src: ow.string, @@ -59,8 +61,7 @@ export function validateConfig(config) { }), timeouts: ow.optional.object.exactShape({ txStall: ow.number - }), - truffleContract: ow.optional.boolean + }) }) ) } diff --git a/src/js/helpers/web3.js b/src/js/helpers/web3.js index a7014e03..ff0b585b 100644 --- a/src/js/helpers/web3.js +++ b/src/js/helpers/web3.js @@ -1,6 +1,7 @@ import { promisify } from 'bluebird' import { state, updateState } from './state' import { formatNumber, handleWeb3Error, timeouts } from './utilities' +import { getEthersProvider } from './ethers-provider' const errorObj = new Error('undefined version of web3') errorObj.eventCode = 'initFail' @@ -12,6 +13,14 @@ export const web3Functions = { return promisify(state.web3Instance.version.getNetwork) case '1.0': return state.web3Instance.eth.net.getId + case 'ethers': + return () => + new Promise(async (resolve, reject) => { + const { chainId } = await getEthersProvider() + .getNetwork() + .catch(reject) + resolve(chainId) + }) default: return () => Promise.reject(errorObj) } @@ -24,6 +33,15 @@ export const web3Functions = { case '1.0': return value => Promise.resolve(state.web3Instance.utils.toBN(formatNumber(value))) + case 'ethers': + const { ethers } = state.config + const ethersVersion = Number(ethers.version[0]) + return value => + Promise.resolve( + ethersVersion <= 4 + ? ethers.utils.bigNumberify(value) + : ethers.BigNumber.from(value) + ) default: return () => Promise.reject(errorObj) } @@ -34,6 +52,14 @@ export const web3Functions = { return promisify(state.web3Instance.eth.getGasPrice) case '1.0': return state.web3Instance.eth.getGasPrice + case 'ethers': + return () => + new Promise(async (resolve, reject) => { + const gasPrice = await getEthersProvider() + .getGasPrice() + .catch(reject) + resolve(gasPrice.toString()) + }) default: return () => Promise.reject(errorObj) } @@ -41,15 +67,35 @@ export const web3Functions = { contractGas: (version, truffleContract) => { switch (version) { case '0.2': - return (contractMethod, parameters, txObject) => - truffleContract - ? contractMethod.estimateGas(...parameters) - : promisify(contractMethod.estimateGas)(...parameters, txObject) + return ({ contractObj, methodName, overloadKey, args }) => { + const contractMethod = getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract + }) + + return truffleContract + ? contractMethod.estimateGas(...args) + : promisify(contractMethod.estimateGas)(...args) + } + case '1.0': - return (contractMethod, parameters, txObject) => - truffleContract - ? contractMethod.estimateGas(...parameters) - : contractMethod(...parameters).estimateGas(txObject) + return ({ contractObj, methodName, overloadKey, args, txOptions }) => { + const contractMethod = getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract + }) + + return truffleContract + ? contractMethod.estimateGas(...args) + : contractMethod(...args).estimateGas(txOptions) + } + case 'ethers': + return ({ contractObj, methodName, overloadKey, args }) => + contractObj.estimate[overloadKey || methodName](...args) default: return () => Promise.reject(errorObj) } @@ -60,6 +106,14 @@ export const web3Functions = { return promisify(state.web3Instance.eth.estimateGas) case '1.0': return state.web3Instance.eth.estimateGas + case 'ethers': + return txOptions => + new Promise(async (resolve, reject) => { + const transactionGas = await getEthersProvider() + .estimateGas(txOptions) + .catch(reject) + resolve(transactionGas) + }) default: return () => Promise.reject(errorObj) } @@ -70,6 +124,15 @@ export const web3Functions = { return promisify(state.web3Instance.eth.getBalance) case '1.0': return state.web3Instance.eth.getBalance + case 'ethers': + return address => + new Promise(async (resolve, reject) => { + const balance = await getEthersProvider() + .getBalance(address) + .catch(reject) + + resolve(balance) + }) default: return () => Promise.reject(errorObj) } @@ -80,6 +143,14 @@ export const web3Functions = { return promisify(state.web3Instance.eth.getAccounts) case '1.0': return state.web3Instance.eth.getAccounts + case 'ethers': + return () => + new Promise(async (resolve, reject) => { + const accounts = await getEthersProvider() + .listAccounts() + .catch(reject) + resolve(accounts) + }) default: return () => Promise.reject(errorObj) } @@ -158,36 +229,42 @@ export function checkForWallet() { } export function getNetworkId() { - const version = state.web3Version && state.web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : state.web3Version && state.web3Version.slice(0, 3) return web3Functions .networkId(version)() .then(id => Number(id)) } -export function getTransactionParams( - txObject = {}, - contractMethod, - contractEventObj, - truffleContract -) { +export function getTransactionParams({ + txOptions, + contractObj, + methodName, + overloadKey, + args +}) { return new Promise(async resolve => { - const version = state.web3Version && state.web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : state.web3Version && state.web3Version.slice(0, 3) // Sometimes value is in exponent notation and needs to be formatted - if (txObject.value) { - txObject.value = formatNumber(txObject.value) + if (txOptions.value) { + txOptions.value = formatNumber(txOptions.value) } - const valuePromise = txObject.value - ? web3Functions.bigNumber(version)(txObject.value) + const valuePromise = txOptions.value + ? web3Functions.bigNumber(version)(txOptions.value) : web3Functions.bigNumber(version)('0') const gasPricePromise = new Promise(async (resolve, reject) => { try { // If gasPrice isn't passed explicitly, ask web3 for a suitable one - const gasPrice = txObject.gasPrice - ? txObject.gasPrice + const gasPrice = txOptions.gasPrice + ? txOptions.gasPrice : await web3Functions.gasPrice(version)() + resolve(web3Functions.bigNumber(version)(gasPrice)) } catch (e) { reject(e) @@ -199,19 +276,21 @@ export function getTransactionParams( try { // Get a gas estimate based on if the tx is a contract method call // or regular transaction - gas = contractMethod - ? await web3Functions.contractGas(version, truffleContract)( - contractMethod, - contractEventObj.parameters, - txObject - ) - : await web3Functions.transactionGas(version)(txObject) + gas = contractObj + ? await web3Functions.contractGas(version)({ + contractObj, + methodName, + overloadKey, + args, + txOptions + }) + : await web3Functions.transactionGas(version)(txOptions) } catch (e) { // Sometimes MM can't estimate the gas, and will throw. // In this case, use either the gas specified by the dapp // dev, or if that doesn't exist 0 as we are unable to predict // how much gas the transaction will consume. - gas = txObject.gas ? txObject.gas : 0 + gas = txOptions.gas ? txOptions.gas : 0 } finally { resolve(web3Functions.bigNumber(version)(gas)) } @@ -233,7 +312,9 @@ export async function hasSufficientBalance({ gasPrice = 0 }) { return new Promise(async resolve => { - const version = state.web3Version && state.web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : state.web3Version && state.web3Version.slice(0, 3) const gasCost = gas.mul(gasPrice) @@ -246,6 +327,7 @@ export async function hasSufficientBalance({ const transactionCost = gasCost.add(value).add(buffer) const balance = await getAccountBalance().catch(handleWeb3Error) + const accountBalance = await web3Functions .bigNumber(version)(balance) .catch(handleWeb3Error) @@ -259,9 +341,12 @@ export async function hasSufficientBalance({ export function getAccountBalance() { return new Promise(async resolve => { const accounts = await getAccounts().catch(handleWeb3Error) + updateState({ accountAddress: accounts && accounts[0] }) - const version = state.web3Version && state.web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : state.web3Version && state.web3Version.slice(0, 3) const balance = await web3Functions .balance(version)(accounts[0]) .catch(handleWeb3Error) @@ -270,8 +355,30 @@ export function getAccountBalance() { }) } +export function getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract +}) { + return state.legacyWeb3 || truffleContract + ? overloadKey + ? contractObj[methodName][overloadKey] + : contractObj[methodName] + : state.config.ethers + ? overloadKey + ? contractObj[overloadKey] + : contractObj[methodName] + : overloadKey + ? contractObj.methods[overloadKey] + : contractObj.methods[methodName] +} + export function getAccounts() { - const version = state.web3Version && state.web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : state.web3Version && state.web3Version.slice(0, 3) + return web3Functions.accounts(version)() } @@ -289,46 +396,62 @@ export function getCurrentProvider() { const web3 = state.web3Instance if (!web3) { + if (window.ethereum.isMetaMask) { + return 'metamask' + } + + if (window.ethereum.isDapper) { + return 'dapper' + } + return 'unknown' } + if (web3.currentProvider.isMetaMask) { return 'metamask' } + if (web3.currentProvider.isDapper) { return 'dapper' } + if (web3.currentProvider.isTrust) { return 'trust' } + if (typeof window.SOFA !== 'undefined') { return 'toshi' } + if (typeof window.__CIPHER__ !== 'undefined') { return 'cipher' } + if (web3.currentProvider.constructor.name === 'EthereumProvider') { return 'mist' } + if (web3.currentProvider.constructor.name === 'Web3FrameProvider') { return 'parity' } + if ( web3.currentProvider.host && web3.currentProvider.host.indexOf('infura') !== -1 ) { return 'infura' } + if ( web3.currentProvider.host && web3.currentProvider.host.indexOf('localhost') !== -1 ) { return 'localhost' } + if (web3.currentProvider.connection) { return 'Infura Websocket' } - - return undefined } // Poll for a tx receipt diff --git a/src/js/helpers/websockets.js b/src/js/helpers/websockets.js index 30b3e3bc..84ff472b 100644 --- a/src/js/helpers/websockets.js +++ b/src/js/helpers/websockets.js @@ -1,7 +1,7 @@ import { state, updateState } from './state' import { handleEvent } from './events' import { storeItem, getItem } from './storage' -import { assistLog } from './utilities' +import { timeouts } from './utilities' import { updateTransactionInQueue, getTxObjFromQueue, @@ -10,37 +10,60 @@ import { // Create websocket connection export function openWebsocketConnection() { - updateState({ pendingSocketConnection: true }) - - let socket - try { - socket = new WebSocket('wss://api.blocknative.com/v0') - } catch (errorObj) { - assistLog(errorObj) - } + return new Promise((resolve, reject) => { + updateState({ pendingSocketConnection: true }) + + let socket + try { + socket = new WebSocket('wss://api.blocknative.com/v0') + } catch (errorObj) { + updateState({ pendingSocketConnection: false }) + reject(false) + } - socket.addEventListener('message', handleSocketMessage) - socket.addEventListener('close', () => - updateState({ socketConnection: false }) - ) - socket.addEventListener('error', () => { - updateState({ pendingSocketConnection: false }) - }) - socket.addEventListener('open', () => { - updateState({ - socket, - socketConnection: true, - pendingSocketConnection: false + socket.addEventListener('message', handleSocketMessage) + socket.addEventListener('close', () => + updateState({ socketConnection: false }) + ) + socket.addEventListener('error', () => { + updateState({ pendingSocketConnection: false }) + reject(false) }) + socket.addEventListener('open', () => { + updateState({ + socket, + socketConnection: true, + pendingSocketConnection: false + }) + + handleEvent({ + categoryCode: 'initialize', + eventCode: 'checkDappId', + connectionId: getItem('connectionId') + }) - handleEvent({ - categoryCode: 'initialize', - eventCode: 'checkDappId', - connectionId: getItem('connectionId') + resolve(true) }) }) } +export function checkForSocketConnection() { + return new Promise(resolve => { + setTimeout(() => { + if (!state.socketConnection) { + resolve(false) + } + resolve(true) + }, timeouts.checkSocketConnection) + }) +} + +export function retryLogEvent(logFunc) { + openWebsocketConnection() + .then(logFunc) + .catch(() => setTimeout(logFunc, timeouts.checkSocketConnection)) +} + // Handle in coming socket messages export function handleSocketMessage(msg) { const { status, reason, event, connectionId } = JSON.parse(msg.data) diff --git a/src/js/index.js b/src/js/index.js index f6a4e964..19728874 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -19,6 +19,7 @@ import { } from './logic/contract-methods' import { openWebsocketConnection } from './helpers/websockets' import { getUserAgent } from './helpers/browser' +import { getUncheckedSigner } from './helpers/ethers-provider' import { checkUserEnvironment, prepareForTransaction } from './logic/user' import sendTransaction from './logic/send-transaction' import { configureWeb3 } from './helpers/web3' @@ -223,30 +224,14 @@ function init(config) { // CONTRACT FUNCTION // - function Contract(contractObj) { - const { validApiKey, supportedNetwork, web3Instance, modernWeb3 } = state - const truffleContract = contractObj.constructor.name === 'TruffleContract' - - // Check using a version of truffle that uses web3 v1.x.x - if (truffleContract && !truffleContractUsesWeb3v1(contractObj)) { - throw new Error( - 'Assist only supports truffle contracts using web3 v1.x.x. Please upgrade your truffle-contract dependency to >= verson 4.x.x.\nSee https://www.npmjs.com/package/truffle-contract?activeTab=versions for more information.' - ) - } - - // Set which types of send/call methods to use for this contract - let send - let call - if (truffleContract) { - send = truffleSend - call = legacyCall - } else if (modernWeb3) { - send = modernSend - call = modernCall - } else { - send = legacySend - call = legacyCall - } + function Contract(contractObjOrAddress, ethersAbi) { + const { + validApiKey, + supportedNetwork, + web3Instance, + modernWeb3, + config: { ethers } + } = state if (!validApiKey) { const errorObj = new Error('Your API key is not valid') @@ -261,7 +246,7 @@ function init(config) { } // Check if we have an instance of web3 - if (!web3Instance) { + if (!web3Instance && !ethers) { if (window.web3) { configureWeb3() } else { @@ -273,9 +258,41 @@ function init(config) { } } + const contractObj = ethers + ? new ethers.Contract( + contractObjOrAddress, + ethersAbi, + getUncheckedSigner() + ) + : contractObjOrAddress + + const truffleContract = contractObj.constructor.name === 'TruffleContract' + + // Check using a version of truffle that uses web3 v1.x.x + if (truffleContract && !truffleContractUsesWeb3v1(contractObj)) { + throw new Error( + 'Assist only supports truffle contracts using web3 v1.x.x. Please upgrade your truffle-contract dependency to >= verson 4.x.x.\nSee https://www.npmjs.com/package/truffle-contract?activeTab=versions for more information.' + ) + } + + // Set which types of send/call methods to use for this contract + let send + let call + if (truffleContract) { + send = truffleSend + call = legacyCall + } else if (modernWeb3) { + send = modernSend + call = modernCall + } else { + send = legacySend + call = legacyCall + } + const abi = contractObj.abi || contractObj._jsonInterface || + (ethers && ethersAbi) || Object.keys(contractObj.abiModel.abi.methods) // remove any arrays from the ABI, they contain redundant information .filter(key => !Array.isArray(contractObj.abiModel.abi.methods[key])) @@ -287,7 +304,7 @@ function init(config) { const seenMethods = [] const delegatedContractObj = contractKeys.reduce((newContractObj, key) => { - if (state.legacyWeb3 || truffleContract) { + if (state.legacyWeb3 || truffleContract || ethers) { // if we have seen this key, then we have already dealt with it if (seenMethods.includes(key)) { return newContractObj @@ -309,19 +326,42 @@ function init(config) { methodAbiArray.map(abi => getOverloadedMethodKeys(abi.inputs)) const { name, inputs, constant } = methodAbiArray[0] - const method = contractObj[name] const argsLength = inputs.length newContractObj[name] = (...args) => constant - ? call(method, name, args, argsLength, truffleContract) - : send(method, name, args, argsLength) + ? call({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) + : send({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) newContractObj[name].call = (...args) => - call(method, name, args, argsLength, truffleContract) + call({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) newContractObj[name].sendTransaction = (...args) => - send(method, name, args, argsLength) + send({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) // Add any additional properties onto the method function Object.entries(contractObj[name]).forEach(([k, v]) => { @@ -331,29 +371,53 @@ function init(config) { }) if (overloadedMethodKeys) { - overloadedMethodKeys.forEach(key => { - const method = contractObj[name][key] + overloadedMethodKeys.forEach(overloadKey => { + const method = contractObj[name][overloadKey] if (!method) { // no method, then overloaded methods not supported on this object return } - newContractObj[name][key] = (...args) => + newContractObj[name][overloadKey] = (...args) => constant - ? call(method, name, args, argsLength, truffleContract) - : send(method, name, args, argsLength) - - newContractObj[name][key].call = (...args) => - call(method, name, args, argsLength, truffleContract) - - newContractObj[name][key].sendTransaction = (...args) => - send(method, name, args, argsLength) + ? call({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) + : send({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) + + newContractObj[name][overloadKey].call = (...args) => + call({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) + + newContractObj[name][overloadKey].sendTransaction = (...args) => + send({ + contractObj, + methodName: name, + args, + argsLength, + truffleContract + }) // Add any additional properties onto the method function Object.entries(method).forEach(([k, v]) => { - if (!Object.keys(newContractObj[name][key]).includes(k)) { - newContractObj[name][key][k] = v + if (!Object.keys(newContractObj[name][overloadKey]).includes(k)) { + newContractObj[name][overloadKey][k] = v } }) }) @@ -388,8 +452,8 @@ function init(config) { const method = contractObj.methods[name] methodsObj[name] = (...args) => constant - ? call(method, name, args, truffleContract) - : send(method, name, args) + ? call({ contractObj, methodName: name, args, truffleContract }) + : send({ contractObj, methodName: name, args, truffleContract }) // Add any additional properties onto the method function Object.entries(method).forEach(([k, v]) => { @@ -411,10 +475,21 @@ function init(config) { } const overloadedMethod = contractObj.methods[overloadedMethodKey] + methodsObj[overloadedMethodKey] = (...args) => constant - ? call(overloadedMethod, name, args, truffleContract) - : send(overloadedMethod, name, args) + ? call({ + contractObj, + methodName: overloadedMethodKey, + args, + truffleContract + }) + : send({ + contractObj, + methodName: overloadedMethodKey, + args, + truffleContract + }) // Add any additional properties onto the method function Object.entries(overloadedMethod).forEach(([k, v]) => { @@ -435,15 +510,23 @@ function init(config) { // TRANSACTION FUNCTION // - function Transaction(txObject, callback, inlineCustomMsgs = {}) { - if (!state.validApiKey) { + function Transaction(txOptions, callback, inlineCustomMsgs = {}) { + const { + validApiKey, + supportedNetwork, + web3Instance, + config: { ethers }, + legacyWeb3 + } = state + + if (!validApiKey) { const errorObj = new Error('Your api key is not valid') errorObj.eventCode = 'initFail' throw errorObj } - if (!state.supportedNetwork) { + if (!supportedNetwork) { const errorObj = new Error('This network is not supported') errorObj.eventCode = 'initFail' @@ -451,39 +534,37 @@ function init(config) { } // Check if we have an instance of web3 - if (!state.web3Instance) { + if (!web3Instance && !ethers) { configureWeb3() } - const sendMethod = state.legacyWeb3 + const sendMethod = ethers + ? txOptions => getUncheckedSigner().sendTransaction(txOptions) + : legacyWeb3 ? promisify(state.web3Instance.eth.sendTransaction) : state.web3Instance.eth.sendTransaction if (state.modernWeb3) { const promiEvent = new PromiEventLib.PromiEvent() - sendTransaction( - 'activeTransaction', - txObject, + sendTransaction({ + categoryCode: 'activeTransaction', + txOptions, sendMethod, callback, - inlineCustomMsgs.messages, - undefined, - undefined, - false, + inlineCustomMsgs: inlineCustomMsgs.messages, promiEvent - ) + }) + return promiEvent } - return sendTransaction( - 'activeTransaction', - txObject, + + return sendTransaction({ + categoryCode: 'activeTransaction', + txOptions, sendMethod, callback, - inlineCustomMsgs.messages, - undefined, - undefined, - false - ) + inlineCustomMsgs: inlineCustomMsgs.messages + }) } } diff --git a/src/js/logic/contract-methods.js b/src/js/logic/contract-methods.js index 6dc2129a..264dbab5 100644 --- a/src/js/logic/contract-methods.js +++ b/src/js/logic/contract-methods.js @@ -3,13 +3,19 @@ import PromiEventLib from 'web3-core-promievent' import { state } from '~/js/helpers/state' import { handleEvent } from '~/js/helpers/events' import { separateArgs, handleError } from '~/js/helpers/utilities' +import { getContractMethod } from '~/js/helpers/web3' import { checkNetwork, getCorrectNetwork } from '~/js/logic/user' import sendTransaction from './send-transaction' -export function modernCall(method, name, args) { - const originalReturnObject = method(...args) - const innerMethod = method(...args).call +export function modernCall({ contractObj, methodName, args, truffleContract }) { + const originalReturnObject = getContractMethod({ + contractObj, + methodName, + truffleContract + })(...args) + + const innerMethod = originalReturnObject.call const returnObject = Object.keys(originalReturnObject).reduce((obj, key) => { obj[key] = originalReturnObject[key] @@ -18,7 +24,7 @@ export function modernCall(method, name, args) { returnObject.call = (...innerArgs) => new Promise(async (resolve, reject) => { - const { callback, txObject } = separateArgs(innerArgs, 0) + const { callback, txOptions } = separateArgs(innerArgs, 0) const { mobileDevice, config: { mobileBlocked, headlessMode } @@ -58,12 +64,12 @@ export function modernCall(method, name, args) { } } - const result = await innerMethod(txObject).catch(errorObj => { + const result = await innerMethod(txOptions).catch(errorObj => { handleEvent({ eventCode: 'contractQueryFail', categoryCode: 'activeContract', contract: { - methodName: name, + methodName, parameters: args }, reason: errorObj.message || errorObj @@ -77,7 +83,7 @@ export function modernCall(method, name, args) { eventCode: 'contractQuery', categoryCode: 'activeContract', contract: { - methodName: name, + methodName, parameters: args, result: JSON.stringify(result) } @@ -92,8 +98,13 @@ export function modernCall(method, name, args) { return returnObject } -export function modernSend(method, name, args) { - const originalReturnObject = method(...args) +export function modernSend({ contractObj, methodName, args, truffleContract }) { + const originalReturnObject = getContractMethod({ + contractObj, + methodName, + truffleContract + })(...args) + const innerMethod = originalReturnObject.send const returnObject = Object.keys(originalReturnObject).reduce((obj, key) => { @@ -103,19 +114,19 @@ export function modernSend(method, name, args) { returnObject.send = (...innerArgs) => { const promiEvent = new PromiEventLib.PromiEvent() - const { callback, txObject, inlineCustomMsgs } = separateArgs(innerArgs, 0) + const { callback, txOptions, inlineCustomMsgs } = separateArgs(innerArgs, 0) - sendTransaction( - 'activeContract', - txObject, - innerMethod, + sendTransaction({ + categoryCode: 'activeContract', + txOptions, + sendMethod: innerMethod, callback, inlineCustomMsgs, - method, - { methodName: name, parameters: args }, - false, + contractObj, + methodName, + methodArgs: args, promiEvent - ) + }) return promiEvent } @@ -123,14 +134,22 @@ export function modernSend(method, name, args) { return returnObject } -export function legacyCall(method, name, allArgs, argsLength, truffleContract) { +export function legacyCall({ + contractObj, + methodName, + overloadKey, + args, + argsLength, + truffleContract +}) { return new Promise(async (resolve, reject) => { const { mobileDevice, - config: { mobileBlocked, headlessMode } + config: { mobileBlocked, headlessMode, ethers } } = state - const { callback, args, txObject, defaultBlock } = separateArgs( - allArgs, + + const { callback, methodArgs, txOptions, defaultBlock } = separateArgs( + args, argsLength ) @@ -169,22 +188,30 @@ export function legacyCall(method, name, allArgs, argsLength, truffleContract) { } } - // Only promisify method if it isn't a truffle contract - method = truffleContract ? method : promisify(method) + const contractMethod = getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract + }) + + // Only promisify method if it isn't a truffle or ethers contract + const method = + truffleContract || ethers ? contractMethod : promisify(contractMethod) // Truffle contracts don't support passing txObj or defaultBlock // in the method call const argsToPass = truffleContract - ? args - : [...args, txObject, defaultBlock] + ? methodArgs + : [...methodArgs, txOptions, defaultBlock] const result = await method(...argsToPass).catch(errorObj => { handleEvent({ eventCode: 'contractQueryFail', categoryCode: 'activeContract', contract: { - methodName: name, - parameters: args + methodName: overloadKey || methodName, + parameters: methodArgs }, reason: errorObj.message || errorObj }) @@ -197,7 +224,7 @@ export function legacyCall(method, name, allArgs, argsLength, truffleContract) { eventCode: 'contractQuery', categoryCode: 'activeContract', contract: { - methodName: name, + methodName, parameters: args, result: JSON.stringify(result) } @@ -209,50 +236,76 @@ export function legacyCall(method, name, allArgs, argsLength, truffleContract) { }) } -export async function legacySend(method, name, allArgs, argsLength) { - const { callback, txObject, args, inlineCustomMsgs } = separateArgs( - allArgs, +export async function legacySend({ + contractObj, + methodName, + overloadKey, + args, + argsLength, + truffleContract +}) { + const { callback, txOptions, methodArgs, inlineCustomMsgs } = separateArgs( + args, argsLength ) - const sendMethod = promisify(method) + const { ethers } = state.config + + const contractMethod = getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract + }) - return sendTransaction( - 'activeContract', - txObject, + const sendMethod = ethers ? contractMethod : promisify(contractMethod) + + return sendTransaction({ + categoryCode: 'activeContract', + txOptions, sendMethod, callback, inlineCustomMsgs, - method, - { - methodName: name, - parameters: args - }, - false - ) + contractObj, + methodName, + overloadKey, + methodArgs + }) } -export function truffleSend(method, name, allArgs, argsLength) { - const { callback, txObject, args, inlineCustomMsgs } = separateArgs( - allArgs, +export function truffleSend({ + contractObj, + methodName, + overloadKey, + args, + argsLength +}) { + const { callback, txOptions, methodArgs, inlineCustomMsgs } = separateArgs( + args, argsLength ) + const sendMethod = getContractMethod({ + contractObj, + methodName, + overloadKey, + truffleContract: true + }) + const promiEvent = new PromiEventLib.PromiEvent() - sendTransaction( - 'activeContract', - txObject, - method, + sendTransaction({ + categoryCode: 'activeContract', + txOptions, + sendMethod, callback, inlineCustomMsgs, - method, - { - methodName: name, - parameters: args - }, - true, + contractObj, + methodName, + overloadKey, + methodArgs, + truffleContract: true, promiEvent - ) + }) return promiEvent } diff --git a/src/js/logic/send-transaction.js b/src/js/logic/send-transaction.js index cdb98a8c..0510b7d3 100644 --- a/src/js/logic/send-transaction.js +++ b/src/js/logic/send-transaction.js @@ -23,25 +23,42 @@ import { import { prepareForTransaction } from './user' -function sendTransaction( +function sendTransaction({ categoryCode, txOptions = {}, - sendTransactionMethod, + sendMethod, callback, inlineCustomMsgs, - contractMethod, - contractEventObj, + contractObj, + methodName, + overloadKey, + methodArgs, truffleContract, promiEvent -) { +}) { return new Promise(async (resolve, reject) => { + const { + legacyWeb3, + currentProvider, + accountAddress, + accountBalance, + config: { ethers, minimumBalance } + } = state + // Get information like gasPrice and gas - const transactionParams = await getTransactionParams( + const transactionParams = await getTransactionParams({ txOptions, - contractMethod, - contractEventObj, + contractObj, + methodName, + overloadKey, + args: methodArgs, truffleContract - ) + }) + + const contractEventObj = { + methodName, + parameters: methodArgs + } // Check user is ready to make the transaction const [sufficientBalance, ready] = await Promise.all([ @@ -56,7 +73,8 @@ function sendTransaction( } // Make sure that we have from address in txOptions - if (!txOptions.from) { + // @NOTE - ethers.js errors if you add a from address, but web3.js errors if you don't + if (!ethers && !txOptions.from) { txOptions.from = state.accountAddress } @@ -67,7 +85,7 @@ function sendTransaction( gasPrice: transactionParams.gasPrice.toString(), value: transactionParams.value.toString(), to: txOptions.to, - from: txOptions.from + from: state.accountAddress } if (sufficientBalance === false) { @@ -78,10 +96,10 @@ function sendTransaction( contract: contractEventObj, inlineCustomMsgs, wallet: { - provider: state.currentProvider, - address: state.accountAddress, - balance: state.accountBalance, - minimum: state.config.minimumBalance + provider: currentProvider, + address: accountAddress, + balance: accountBalance, + minimum: minimumBalance } }) @@ -107,10 +125,10 @@ function sendTransaction( contract: contractEventObj, inlineCustomMsgs, wallet: { - provider: state.currentProvider, - address: state.accountAddress, - balance: state.accountBalance, - minimum: state.config.minimumBalance + provider: currentProvider, + address: accountAddress, + balance: accountBalance, + minimum: minimumBalance } }) } @@ -123,25 +141,24 @@ function sendTransaction( contract: contractEventObj, inlineCustomMsgs, wallet: { - provider: state.currentProvider, - address: state.accountAddress, - balance: state.accountBalance, - minimum: state.config.minimumBalance + provider: currentProvider, + address: accountAddress, + balance: accountBalance, + minimum: minimumBalance } }) } let txPromise - if ((state.legacyWeb3 || truffleContract) && contractEventObj) { - // legacy contract call - txPromise = sendTransactionMethod( - ...contractEventObj.parameters, - txOptions - ) + if (legacyWeb3 || truffleContract || ethers) { + if (contractObj) { + txPromise = sendMethod(...methodArgs, txOptions) + } else { + txPromise = sendMethod(txOptions) + } } else { - // modern contract call or basic transaction - txPromise = sendTransactionMethod(txOptions) + txPromise = sendMethod(txOptions) } handleEvent({ @@ -151,10 +168,10 @@ function sendTransaction( contract: contractEventObj, inlineCustomMsgs, wallet: { - provider: state.currentProvider, - address: state.accountAddress, - balance: state.accountBalance, - minimum: state.config.minimumBalance + provider: currentProvider, + address: accountAddress, + balance: accountBalance, + minimum: minimumBalance } }) @@ -176,16 +193,16 @@ function sendTransaction( contract: contractEventObj, inlineCustomMsgs, wallet: { - provider: state.currentProvider, - address: state.accountAddress, - balance: state.accountBalance, - minimum: state.config.minimumBalance + provider: currentProvider, + address: accountAddress, + balance: accountBalance, + minimum: minimumBalance } }) } }, timeouts.txConfirmReminder) - if (state.legacyWeb3) { + if (legacyWeb3) { txPromise .then(hash => { onTxHash(transactionId, hash, categoryCode) @@ -201,6 +218,20 @@ function sendTransaction( onTxError(transactionId, errorObj, categoryCode) handleError({ resolve, reject, callback })(errorObj) }) + } else if (ethers) { + txPromise + .then(async tx => { + onTxHash(transactionId, tx.hash, categoryCode) + resolve(tx) + callback && callback(null, tx) + + await tx.wait() + onTxReceipt(transactionId, categoryCode) + }) + .catch(errorObj => { + onTxError(transactionId, errorObj, categoryCode) + handleError({ resolve, reject, callback })(errorObj) + }) } else { new Promise(confirmed => { /* In web3 v1 instead of resolving the promise returned by sendTransaction diff --git a/src/js/logic/user.js b/src/js/logic/user.js index 91cad47c..7dc0ed8a 100644 --- a/src/js/logic/user.js +++ b/src/js/logic/user.js @@ -32,7 +32,7 @@ export function checkUserEnvironment() { return } - if (!state.web3Instance) { + if (!state.web3Instance && !state.config.ethers) { configureWeb3() } @@ -52,9 +52,7 @@ export function checkUserEnvironment() { export function prepareForTransaction(categoryCode, originalResolve) { return new Promise(async (resolve, reject) => { originalResolve = originalResolve || resolve - await checkUserEnvironment() - if (state.mobileDevice && state.config.mobileBlocked) { handleEvent( { eventCode: 'mobileBlocked', categoryCode }, @@ -110,7 +108,7 @@ export function prepareForTransaction(categoryCode, originalResolve) { } } - if (!state.web3Instance || !state.web3Wallet) { + if ((!state.web3Instance && !state.config.ethers) || !state.web3Wallet) { if (state.mobileDevice) { try { await getWeb3Wallet(categoryCode) @@ -217,9 +215,7 @@ function getWeb3Wallet(categoryCode) { }, timeouts.changeUI), onClick: () => { if (state.mobileDevice) { - window.location = `https://links.trustwalletapp.com/a/key_live_lfvIpVeI9TFWxPCqwU8rZnogFqhnzs4D?&event=openURL&url=${ - window.location.href - }` + window.location = `https://links.trustwalletapp.com/a/key_live_lfvIpVeI9TFWxPCqwU8rZnogFqhnzs4D?&event=openURL&url=${window.location.href}` } else { window.location.reload() } @@ -270,19 +266,26 @@ export function checkNetwork() { function checkMinimumBalance() { return new Promise(async (resolve, reject) => { await checkAccountAccess() + if (!state.accessToAccounts) { resolve() } const { web3Version } = state - const version = web3Version && web3Version.slice(0, 3) + const version = state.config.ethers + ? 'ethers' + : web3Version && web3Version.slice(0, 3) + const minimum = state.config.minimumBalance || 0 - const account = await getAccountBalance().catch(resolve) + const balance = await getAccountBalance().catch(resolve) + const minimumBalance = await web3Functions .bigNumber(version)(minimum) .catch(reject) + const accountBalance = await web3Functions - .bigNumber(version)(account) + .bigNumber(version)(balance) .catch(reject) + const sufficientBalance = accountBalance.gte(minimumBalance) updateState({ diff --git a/src/js/views/content.js b/src/js/views/content.js index c20e26b5..74c19545 100644 --- a/src/js/views/content.js +++ b/src/js/views/content.js @@ -67,9 +67,7 @@ export const notSupported = { browserNotSupported: { heading: 'This Browser is Not Supported', description: () => - `This Dapp is not supported in ${ - state.userAgent.browser.name - }. Please visit us in one of the following browsers. Thank You!` + `This Dapp is not supported in ${state.userAgent.browser.name}. Please visit us in one of the following browsers. Thank You!` }, mobileWalletNotSupported: { heading: 'Install A Mobile Dapp Wallet', diff --git a/src/js/views/dom.js b/src/js/views/dom.js index d1696a26..a9335708 100644 --- a/src/js/views/dom.js +++ b/src/js/views/dom.js @@ -246,9 +246,7 @@ function walletLogos() { return `

- + Chrome Logo { if (notification) { removeNotification(notification) @@ -647,6 +649,25 @@ export function removeAllNotifications(notifications) { }) } +export function removeUnwantedNotifications(eventCode, id) { + const eventCodesNoRepeat = ['nsfFail', 'txSendFail', 'txUnderPriced'] + const notificationsNoRepeat = eventCodesNoRepeat.reduce( + (acc, eventCode) => [...acc, ...getAllByQuery(`.bn-${eventCode}`)], + [] + ) + + const keepTxRepeatNotification = + eventCode === 'txRequest' || eventCode === 'txConfirmReminder' + + const notificationsWithSameId = keepTxRepeatNotification + ? getAllByQuery(`.bn-${id}`).filter( + n => !n.classList.contains('bn-txRepeat') + ) + : getAllByQuery(`.bn-${id}`) + + removeAllNotifications([...notificationsNoRepeat, ...notificationsWithSameId]) +} + export function checkIfNotifications() { const notificationsList = getByQuery('.bn-notifications') const allNotifications = Array.from( diff --git a/src/js/views/event-to-ui.js b/src/js/views/event-to-ui.js index 49f409d2..9b9d4c91 100644 --- a/src/js/views/event-to-ui.js +++ b/src/js/views/event-to-ui.js @@ -17,7 +17,6 @@ import { onboardModal, getById, getByQuery, - getAllByQuery, offsetElement, removeNotification, createTransactionBranding, @@ -25,10 +24,10 @@ import { showElement, setNotificationsHeight, startTimerInterval, - removeAllNotifications, positionElement, addTouchHandlers, - removeTouchHandlers + removeTouchHandlers, + removeUnwantedNotifications } from './dom' import { transactionMsgs } from './content' @@ -178,8 +177,6 @@ function getCustomTxMsg(eventCode, data, inlineCustomMsgs = {}) { } } -const eventCodesNoRepeat = ['nsfFail', 'txSendFail', 'txUnderPriced'] - function notificationsUI({ transaction = {}, contract = {}, @@ -220,26 +217,7 @@ function notificationsUI({ existingNotifications = true notificationsList = getByQuery('.bn-notifications') - const notificationsNoRepeat = eventCodesNoRepeat.reduce( - (acc, eventCode) => [...acc, ...getAllByQuery(`.bn-${eventCode}`)], - [] - ) - - // remove all notifications we don't want to repeat - removeAllNotifications(notificationsNoRepeat) - - // We want to keep the txRepeat notification if the new notification is a txRequest or txConfirmReminder - const keepTxRepeatNotification = - eventCode === 'txRequest' || eventCode === 'txConfirmReminder' - - const notificationsWithSameId = keepTxRepeatNotification - ? getAllByQuery(`.bn-${id}`).filter( - n => !n.classList.contains('bn-txRepeat') - ) - : getAllByQuery(`.bn-${id}`) - - // if notification with the same id we can remove it to be replaced with new status - removeAllNotifications(notificationsWithSameId) + removeUnwantedNotifications(eventCode, id) } else { existingNotifications = false notificationsContainer = positionElement( diff --git a/yarn.lock b/yarn.lock index 936ba427..1ea3a605 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,16 +27,16 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.2.2": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" - integrity sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ== + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a" + integrity sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.4.4" "@babel/helpers" "^7.4.4" - "@babel/parser" "^7.4.4" + "@babel/parser" "^7.4.5" "@babel/template" "^7.4.4" - "@babel/traverse" "^7.4.4" + "@babel/traverse" "^7.4.5" "@babel/types" "^7.4.4" convert-source-map "^1.1.0" debug "^4.1.0" @@ -230,10 +230,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" - integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== +"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -450,12 +450,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz#5611d96d987dfc4a3a81c4383bb173361037d68d" - integrity sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== dependencies: - regexp-tree "^0.1.0" + regexp-tree "^0.1.6" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -488,12 +488,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz#5b4da4df79391895fca9e28f99e87e22cfc02072" - integrity sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g== +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== dependencies: - regenerator-transform "^0.13.4" + regenerator-transform "^0.14.0" "@babel/plugin-transform-reserved-words@^7.2.0": version "7.2.0" @@ -567,9 +567,9 @@ regenerator-runtime "^0.13.2" "@babel/preset-env@^7.1.6": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" - integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.5.tgz#2fad7f62983d5af563b5f3139242755884998a58" + integrity sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -600,12 +600,12 @@ "@babel/plugin-transform-modules-commonjs" "^7.4.4" "@babel/plugin-transform-modules-systemjs" "^7.4.4" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.2.0" "@babel/plugin-transform-parameters" "^7.4.4" "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.4" + "@babel/plugin-transform-regenerator" "^7.4.5" "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" "@babel/plugin-transform-spread" "^7.2.0" @@ -614,16 +614,16 @@ "@babel/plugin-transform-typeof-symbol" "^7.2.0" "@babel/plugin-transform-unicode-regex" "^7.4.4" "@babel/types" "^7.4.4" - browserslist "^4.5.2" - core-js-compat "^3.0.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" "@babel/runtime@^7.1.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.3": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.4.tgz#dc2e34982eb236803aa27a07fea6857af1b9171d" - integrity sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg== + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" + integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== dependencies: regenerator-runtime "^0.13.2" @@ -636,16 +636,16 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" - integrity sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A== +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.4.4" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.4.4" + "@babel/parser" "^7.4.5" "@babel/types" "^7.4.4" debug "^4.1.0" globals "^11.1.0" @@ -707,14 +707,14 @@ "@types/istanbul-lib-report" "*" "@types/node@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.0.tgz#d11813b9c0ff8aaca29f04cbc12817f4c7d656e5" - integrity sha512-Jrb/x3HT4PTJp6a4avhmJCDEVrPdqLfl3e8GGMbpkGGdwAV5UGlIs4vVEfsHHfylZVOKZWpOqmqFH8CbfOZ6kg== + version "12.0.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.8.tgz#551466be11b2adc3f3d47156758f610bd9f6b1d8" + integrity sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg== "@types/node@^10.12.18", "@types/node@^10.3.2": - version "10.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" - integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== + version "10.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.9.tgz#2e8d678039d27943ce53a1913386133227fd9066" + integrity sha512-NelG/dSahlXYtSoVPErrp06tYFrvzj8XLWmKA+X8x0W//4MqbUyZu++giUG/v0bjAT6/Qxa8IjodrfdACyb0Fg== "@types/yargs@^12.0.9": version "12.0.12" @@ -738,7 +738,7 @@ abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: dependencies: xtend "~3.0.0" -accepts@~1.3.5: +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== @@ -779,17 +779,7 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= -ajv@^5.1.1: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.5.5, ajv@^6.9.1: +ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1: version "6.10.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== @@ -1054,9 +1044,9 @@ babel-core@^7.0.0-bridge.0: integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== babel-eslint@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" - integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== + version "10.0.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456" + integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.0.0" @@ -1157,9 +1147,9 @@ babel-plugin-jest-hoist@^23.2.0: integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= babel-plugin-root-import@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-root-import/-/babel-plugin-root-import-6.1.0.tgz#ea27407df1e920750fc247b2702e322a19f8a14f" - integrity sha512-7pFBKr83H7S4mjLICsHENXm8oZ//sTdrjlxP20y7wWAmDl8N1IRtUVAGJDCTk3E9E3LOyRdiPb9znoweDVCrFg== + version "6.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-root-import/-/babel-plugin-root-import-6.2.0.tgz#5a5cbcefbd67506738679ed6f899c013142bcd49" + integrity sha512-Tsq1pfSRn2XkNOrMXOYoTAxYddvWC21850h8Cj6xozccwr50WQu+GrzrHmr9RAmHCaLVUOfFYe3cshpQbDmf4w== dependencies: slash "^1.0.0" @@ -1285,14 +1275,14 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bindings@^1.2.1: +bindings@^1.2.1, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bip66@^1.1.3: +bip66@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= @@ -1327,37 +1317,21 @@ bluebird@^2.9.34: integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= bluebird@^3.5.0, bluebird@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" - integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== 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, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.3, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0: +bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" - on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" - -body-parser@^1.16.0: +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== @@ -1440,7 +1414,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6: inherits "^2.0.1" safe-buffer "^5.0.1" -browserify-cipher@^1.0.0: +browserify-cipher@^1.0.0, browserify-cipher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== @@ -1497,14 +1471,14 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" -browserslist@^4.5.2, browserslist@^4.5.4: - version "4.5.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.6.tgz#ea42e8581ca2513fa7f371d4dd66da763938163d" - integrity sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg== +browserslist@^4.6.0, browserslist@^4.6.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.3.tgz#0530cbc6ab0c1f3fc8c819c72377ba55cf647f05" + integrity sha512-CNBqTCq22RKM8wKJNowcqihHJ4SkI8CGeK7KOR9tPboXUuS5Zk5lQgzzTbs4oxD8x+6HUshZUa2OyNI9lR93bQ== dependencies: - caniuse-lite "^1.0.30000963" - electron-to-chromium "^1.3.127" - node-releases "^1.1.17" + caniuse-lite "^1.0.30000975" + electron-to-chromium "^1.3.164" + node-releases "^1.1.23" bser@^2.0.0: version "2.0.0" @@ -1569,11 +1543,6 @@ builtin-modules@^2.0.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -1623,10 +1592,10 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -caniuse-lite@^1.0.30000963: - version "1.0.30000966" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000966.tgz#f3c6fefacfbfbfb981df6dfa68f2aae7bff41b64" - integrity sha512-qqLQ/uYrpZmFhPY96VuBkMEo8NhVFBZ9y/Bh+KnvGzGJ5I8hvpIaWlF2pw5gqe4PLAL+ZjsPgMOvoXSpX21Keg== +caniuse-lite@^1.0.30000975: + version "1.0.30000975" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000975.tgz#d4e7131391dddcf2838999d3ce75065f65f1cdfc" + integrity sha512-ZsXA9YWQX6ATu5MNg+Vx/cMQ+hM6vBBSqDeJs8ruk9z0ky4yIHML15MoxcFt088ST2uyjgqyUGRJButkptWf0w== capture-exit@^1.2.0: version "1.2.0" @@ -1774,9 +1743,9 @@ color-name@1.1.3: integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + 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" @@ -1822,10 +1791,12 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +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" @@ -1844,10 +1815,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +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" @@ -1859,30 +1830,24 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.1.tgz#bff73ba31ca8687431b9c88f78d3362646fb76f0" - integrity sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g== +core-js-compat@^3.1.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.4.tgz#e4d0c40fbd01e65b1d457980fe4112d4358a7408" + integrity sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg== dependencies: - browserslist "^4.5.4" - core-js "3.0.1" - core-js-pure "3.0.1" - semver "^6.0.0" + browserslist "^4.6.2" + core-js-pure "3.1.4" + semver "^6.1.1" -core-js-pure@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.1.tgz#37358fb0d024e6b86d443d794f4e37e949098cbe" - integrity sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g== +core-js-pure@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769" + integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA== core-js@2, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== - -core-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" - integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1898,13 +1863,13 @@ cors@^2.8.1: vary "^1" cosmiconfig@^5.0.7: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" - integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" - js-yaml "^3.13.0" + js-yaml "^3.13.1" parse-json "^4.0.0" create-ecdh@^4.0.0: @@ -1915,7 +1880,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +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== @@ -2008,9 +1973,9 @@ cssstyle@^1.0.0: cssom "0.3.x" damerau-levenshtein@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= + version "1.0.5" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" + integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== dashdash@^1.12.0: version "1.14.1" @@ -2035,7 +2000,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.0: +debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2300,10 +2265,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.127: - version "1.3.131" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.131.tgz#205a0b7a276b3f56bc056f19178909243054252a" - integrity sha512-NSO4jLeyGLWrT4mzzfYX8vt1MYCoMI5LxSYAjt0H9+LF/14JyiKJSyyjA6AJTxflZlEM5v3QU33F0ohbPMCAPg== +electron-to-chromium@^1.3.164: + version "1.3.165" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.165.tgz#51864c9e3c9bd9e1c020b9493fddcc0f49888e3a" + integrity sha512-iIS8axR524EAnvUtWUNnREnYjQrS0zUvutIKYgTVuN3MzcjrV31EuJYKw7DGOtFO9DQw+JiXeaVDPQWMskG1wQ== elliptic@6.3.3: version "6.3.3" @@ -2315,7 +2280,7 @@ elliptic@6.3.3: hash.js "^1.0.0" inherits "^2.0.1" -elliptic@^6.0.0, elliptic@^6.2.3, elliptic@^6.4.0: +elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== @@ -2461,9 +2426,9 @@ eslint-module-utils@^2.4.0: pkg-dir "^2.0.0" eslint-plugin-import@^2.17.2: - version "2.17.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb" - integrity sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g== + version "2.17.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.3.tgz#00548b4434c18faebaba04b24ae6198f280de189" + integrity sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q== dependencies: array-includes "^3.0.3" contains-path "^0.1.0" @@ -2475,7 +2440,7 @@ eslint-plugin-import@^2.17.2: lodash "^4.17.11" minimatch "^3.0.4" read-pkg-up "^2.0.0" - resolve "^1.10.0" + resolve "^1.11.0" eslint-plugin-jsx-a11y@^6.1.2: version "6.2.1" @@ -2492,9 +2457,9 @@ eslint-plugin-jsx-a11y@^6.1.2: jsx-ast-utils "^2.0.1" eslint-plugin-prettier@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz#19d521e3981f69dd6d14f64aec8c6a6ac6eb0b0d" - integrity sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" + integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== dependencies: prettier-linter-helpers "^1.0.0" @@ -2614,10 +2579,10 @@ estree-walker@^0.2.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= -estree-walker@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" - integrity sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw== +estree-walker@^0.6.0, estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== esutils@^2.0.2: version "2.0.2" @@ -2711,9 +2676,9 @@ ethers@4.0.0-beta.1: xmlhttprequest "1.8.0" ethers@^4.0.0-beta.1, ethers@^4.0.27: - version "4.0.27" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.27.tgz#e570b0da9d805ad65c83d81919abe02b2264c6bf" - integrity sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA== + version "4.0.30" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.30.tgz#140653fd08adf2834bb2f3aceefa10d04205b47d" + integrity sha512-1a39Y+q5zTfrXCLndV+CHsTHq+T5/TvAx5y0S/PKd700C0lfU70CJnU7q89bd+4pIuWp05TkrEsrTj2dXhkcSA== dependencies: "@types/node" "^10.3.2" aes-js "3.0.0" @@ -2843,38 +2808,38 @@ expect@^23.6.0: jest-regex-util "^23.3.0" express@^4.14.0: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - accepts "~1.3.5" + accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" + body-parser "1.19.0" + content-disposition "0.5.3" content-type "~1.0.4" - cookie "0.3.1" + 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.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.2" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" + 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" @@ -2938,11 +2903,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" @@ -3045,17 +3005,17 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== +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.2" - statuses "~1.4.0" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" find-up@^1.0.0, find-up@^1.1.2: @@ -3162,19 +3122,10 @@ fs-extra@^2.0.0, fs-extra@^2.1.2: graceful-fs "^4.1.2" jsonfile "^2.1.0" -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.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: minipass "^2.2.1" @@ -3206,10 +3157,10 @@ fsevents@^1.2.3, fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -fstream@^1.0.2, fstream@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= +fstream@^1.0.12, fstream@^1.0.8: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -3234,9 +3185,9 @@ fwd-stream@^1.0.4: readable-stream "~1.0.26-4" ganache-cli@^6.4.3: - version "6.4.3" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.4.3.tgz#2fb66c10f9df157b2cd9aeaf007a9fd47cd79cb1" - integrity sha512-3G+CK4ojipDvxQHlpX8PjqaOMRWVcaLZZSW97Bv7fdcPTXQwkji2yY5CY6J12Atiub4M4aJc0va+q3HXeerbIA== + version "6.4.4" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.4.4.tgz#9772bba8585d6e2049bd85adf24369c1cc165170" + integrity sha512-JWygbyZuM2GQl2ZvU7tBkjpgJaKE/XEtB99ech17XTouuqLU5rBcyO3sMb/L83wAtzr0gBnTgenIBl+OeREpJw== dependencies: bn.js "4.11.8" source-map-support "0.5.9" @@ -3326,7 +3277,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -3338,18 +3289,6 @@ glob@^7.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global@~4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -3557,17 +3496,7 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@1.7.2: +http-errors@1.7.2, 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== @@ -3608,13 +3537,6 @@ husky@^1.3.1: run-node "^1.0.0" slash "^2.0.0" -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -3698,7 +3620,12 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, 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== + +inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -4259,9 +4186,9 @@ jest-docblock@^23.2.0: detect-newline "^2.1.0" jest-dom@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/jest-dom/-/jest-dom-3.1.4.tgz#914490e8baf997da16f71dc913ff0a77bd2a2ff7" - integrity sha512-ruIRHoRVnqPRt/HSS2aFukfhTpjEoq1I6PkYptKK5U2EeRm1eeOXG7BFiaMncTaGu4COSoCF84oLHj02+J5VDg== + version "3.5.0" + resolved "https://registry.yarnpkg.com/jest-dom/-/jest-dom-3.5.0.tgz#715908b545c0d66a0eba9d21fc59357fac024f43" + integrity sha512-xHnP3Qo/29oLAo2iixaZsoDrm3XKSVrMH5Wf2ZEiLychJQBTNzOeVMPxrCygCgJiyQMbnymXltme8bPzuiGOIA== dependencies: chalk "^2.4.1" css "^2.2.3" @@ -4551,7 +4478,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.0, js-yaml@^3.7.0: +js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -4616,11 +4543,6 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - 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" @@ -4660,13 +4582,6 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" -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" @@ -4703,9 +4618,9 @@ keccakjs@^0.2.1: sha3 "^1.2.2" kill-port@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/kill-port/-/kill-port-1.4.0.tgz#9a4049ab2f8d8968d015a37d7d7202cdc6d53a73" - integrity sha512-VvLs/W4DA710DMMoN+tv4OLlnHuVs6n6T01vvHjLDXUsAWXCEZbi/EXnyAlYO4o0DHCG6W4HzSRi0tqjVivodw== + version "1.5.1" + resolved "https://registry.yarnpkg.com/kill-port/-/kill-port-1.5.1.tgz#c567eca95824642aa489c8583a3a7d930a651fbf" + integrity sha512-hyjGDvVAE1Sosn4FFNYIWy6Ig2LD16GCkpv0+/EkLSrEEuapN5HW3VzA8e6mU5rzpKY0v/Y9kWt/MqqTqhZ8Ug== dependencies: get-them-args "^1.3.1" shell-exec "^1.0.2" @@ -5060,10 +4975,10 @@ mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: dependencies: mime-db "1.40.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +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-fn@^1.0.0: version "1.2.0" @@ -5114,7 +5029,7 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.4: +minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== @@ -5122,7 +5037,7 @@ minipass@^2.2.1, minipass@^2.3.4: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: +minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== @@ -5152,9 +5067,9 @@ mkdirp@*, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: minimist "0.0.8" mock-fs@^4.1.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.9.0.tgz#7fc0c2f82965050b2776f8eb4eb63ca53a92ff86" - integrity sha512-aUj0qIniTNxzGqAC61Bvro7YD37tIBnMw3wpClucUVgNBS7r6YQn/M4wuoH7SGteKz4SvC1OBeDsfpG0MYC+1Q== + version "4.10.1" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.10.1.tgz#50a07a20114a6cdb119f35762f61f46266a1e323" + integrity sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw== mock-socket@^8.0.5: version "8.0.5" @@ -5164,9 +5079,9 @@ mock-socket@^8.0.5: url-parse "^1.2.0" mockdate@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-2.0.2.tgz#5ae0c0eaf8fe23e009cd01f9889b42c4f634af12" - integrity sha1-WuDA6vj+I+AJzQH5iJtCxPY0rxI= + version "2.0.3" + resolved "https://registry.yarnpkg.com/mockdate/-/mockdate-2.0.3.tgz#f4095e5eaea94c5f8b4e0e708f5d79fdff846a66" + integrity sha512-/wRyr3grWk3tyk188qjZpeiiAfkAoDPEGqyerretomeeaH0D+pN9MCcedhAwrkxX3a216gp8CwPeQMHfLvrFpA== mout@^0.11.0: version "0.11.1" @@ -5178,11 +5093,16 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +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== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + multidep@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/multidep/-/multidep-2.0.2.tgz#ffa2b97791bc4c879267dc3f7324c207b2decc67" @@ -5206,16 +5126,16 @@ mz@^2.6.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== - -nan@^2.0.8, nan@^2.11.0, nan@^2.12.1, nan@^2.2.1, nan@^2.3.3: +nan@2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +nan@^2.0.8, nan@^2.11.0, nan@^2.12.1, nan@^2.14.0, nan@^2.2.1, nan@^2.3.3: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + 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" @@ -5244,11 +5164,11 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" - integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg== + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== dependencies: - debug "^4.1.0" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" @@ -5258,9 +5178,9 @@ negotiator@0.6.2: integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== nice-try@^1.0.4: version "1.0.5" @@ -5299,10 +5219,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.17: - version "1.1.17" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.17.tgz#71ea4631f0a97d5cd4f65f7d04ecf9072eac711a" - integrity sha512-/SCjetyta1m7YXLgtACZGDYJdCSIBAWorDWkGCGZlydP2Ll7J48l7j/JxNYZ+xsgSPbWfdulVS/aY+GdjUsQ7Q== +node-releases@^1.1.23: + version "1.1.23" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0" + integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w== dependencies: semver "^5.3.0" @@ -5680,7 +5600,7 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parseurl@~1.3.2: +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== @@ -5753,7 +5673,7 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pbkdf2@^3.0.3: +pbkdf2@^3.0.17, pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== @@ -5850,9 +5770,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^1.15.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" - integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== pretty-format@^23.6.0: version "23.6.0" @@ -5883,9 +5803,9 @@ process-es6@^0.11.2: integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + 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" @@ -5905,7 +5825,7 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" -proxy-addr@~2.0.4: +proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== @@ -5929,9 +5849,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + version "1.1.33" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.33.tgz#5533d9384ca7aab86425198e10e8053ebfeab661" + integrity sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw== public-encrypt@^4.0.0: version "4.0.3" @@ -5968,16 +5888,16 @@ punycode@^2.1.0, punycode@^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.5.2, 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== - 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" @@ -6001,7 +5921,7 @@ randomatic@^3.0.0: kind-of "^6.0.0" math-random "^1.0.1" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +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== @@ -6021,20 +5941,10 @@ randomhex@0.1.5: resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585" integrity sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU= -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.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" @@ -6162,9 +6072,9 @@ redent@^2.0.0: strip-indent "^2.0.0" regenerate-unicode-properties@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" - integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: regenerate "^1.4.0" @@ -6183,10 +6093,10 @@ regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== dependencies: private "^0.1.6" @@ -6205,10 +6115,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.6.tgz#84900fa12fdf428a2ac25f04300382a7c0148479" - integrity sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w== +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== regexpp@^2.0.1: version "2.0.1" @@ -6352,10 +6262,10 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" + integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== dependencies: path-parse "^1.0.6" @@ -6473,12 +6383,11 @@ rollup-pluginutils@^1.5.0: minimatch "^3.0.2" rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz#203706edd43dfafeaebc355d7351119402fc83ad" - integrity sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" + integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== dependencies: - estree-walker "^0.6.0" - micromatch "^3.1.10" + estree-walker "^0.6.1" rollup@^0.67.3: version "0.67.4" @@ -6506,9 +6415,9 @@ run-node@^1.0.0: integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== rxjs@^6.4.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" - integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg== + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== dependencies: tslib "^1.9.0" @@ -6568,6 +6477,15 @@ scrypt.js@0.2.0: scrypt "^6.0.2" scryptsy "^1.2.1" +scrypt.js@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" + integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== + dependencies: + scryptsy "^1.2.1" + optionalDependencies: + scrypt "^6.0.2" + scrypt@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" @@ -6583,18 +6501,18 @@ scryptsy@^1.2.1: pbkdf2 "^3.0.3" secp256k1@^3.0.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.6.2.tgz#da835061c833c74a12f75c73d2ec2e980f00dc1f" - integrity sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng== + version "3.7.1" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1" + integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g== dependencies: - bindings "^1.2.1" - bip66 "^1.1.3" - bn.js "^4.11.3" - create-hash "^1.1.2" + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" drbg.js "^1.0.1" - elliptic "^6.2.3" - nan "^2.2.1" - safe-buffer "^5.1.0" + elliptic "^6.4.1" + nan "^2.14.0" + safe-buffer "^5.1.2" seek-bzip@^1.0.5: version "1.0.5" @@ -6613,20 +6531,20 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" - integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" + integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== semver@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" integrity sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +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" @@ -6635,27 +6553,27 @@ send@0.16.2: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" serialize-javascript@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== +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.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" servify@^0.1.12: version "0.1.12" @@ -6703,11 +6621,6 @@ setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -6722,11 +6635,11 @@ sha.js@^2.4.0, sha.js@^2.4.8: safe-buffer "^5.0.1" sha3@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.2.tgz#a66c5098de4c25bc88336ec8b4817d005bca7ba9" - integrity sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k= + version "1.2.3" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.3.tgz#ed5958fa8331df1b1b8529ca9fdf225a340c5418" + integrity sha512-sOWDZi8cDBRkLfWOw18wvJyNblXDHzwMGnRWut8zNNeIeLnmMRO17bjpLc7OzMuj1ASUgx2IyohzUCAl+Kx5vA== dependencies: - nan "2.10.0" + nan "2.13.2" shebang-command@^1.2.0: version "1.2.0" @@ -6948,16 +6861,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2": +"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= -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -7135,33 +7043,15 @@ swarm-js@0.1.37: tar.gz "^1.0.5" xhr-request-promise "^0.1.2" -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-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" - integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ== + version "5.4.1" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" + integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== dependencies: ajv "^6.9.1" lodash "^4.17.11" @@ -7193,26 +7083,26 @@ tar.gz@^1.0.5: tar "^2.1.1" tar@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" - fstream "^1.0.2" + fstream "^1.0.12" inherits "2" -tar@^4, tar@^4.0.2: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.3.5" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" test-exclude@^2.1.1: version "2.1.3" @@ -7355,53 +7245,53 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -truffle-blockchain-utils@^0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.9.tgz#ac61d703878c36eeabaa770c5bdf553e2260877e" - integrity sha512-UJlWLN53AYU108c2A7rY6ri2Ollj8ygRnpSyBD4MPq+MF15PFvqwNHa/4rnj6ajOo7JYV07nNQ4hmBwh0KSeoA== +truffle-blockchain-utils@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.10.tgz#18b772673635a95a893f7083f7be6bd62227462b" + integrity sha512-gVvagLCvYD0QXfnkxy6I48P6O+d7TEY0smc2VFuwldl1/clLVWE+KfBO/jFMaAz+nupTQeKvPhNTeyh3JAsCeA== -truffle-contract-schema@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-3.0.9.tgz#8dff0b254561194f64452cf9c6c9fefdd7d46fe4" - integrity sha512-V1gwOeOPj7h0cM427KeMnTJZfotBqkISMLb9zq7bDj+iy/i05Ug7vyYaqCYnC5ignSnfNYgmJt8VsIt0UGI4lg== +truffle-contract-schema@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-3.0.11.tgz#202f6982b51bcad032b7ff2a8d5837853fb69301" + integrity sha512-YcgSOlrufi6VtnXg8LU5Ma7JHzHpnZQxzB1PSWnb+JOTc1nL02XRoCWTgEO7PkJnFgf6yrwOpW0ajSwHk3zQ7Q== dependencies: - ajv "^5.1.1" + ajv "^6.10.0" crypto-js "^3.1.9-1" debug "^4.1.0" truffle-contract@^4.0.15: - version "4.0.15" - resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-4.0.15.tgz#c8a7be3a9d4223c6bf3477974cb69cbdf3bcd429" - integrity sha512-TEye3lotuPZqoXni/t1HomU5w760Kf0x63cZa7q2WXzqtQCnNqdG/FMRlyMim/MRK4geGdo2H+Sg1k4D1VqJDw== + version "4.0.20" + resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-4.0.20.tgz#319a2d8de85daf9c3bc07d4e6312f4293140d2d0" + integrity sha512-enj4ymJCSBWMPLI6GPpeQVqA/+5DPL4bwIeq6BcvFPBmsPw2jRyMJUrK05/PuuANVtwI9bBoOJlh1S9uu8lEdA== dependencies: bignumber.js "^7.2.1" ethers "^4.0.0-beta.1" - truffle-blockchain-utils "^0.0.9" - truffle-contract-schema "^3.0.9" - truffle-error "^0.0.4" - truffle-interface-adapter "^0.1.5" + truffle-blockchain-utils "^0.0.10" + truffle-contract-schema "^3.0.11" + truffle-error "^0.0.5" + truffle-interface-adapter "^0.1.6" web3 "1.0.0-beta.37" web3-core-promievent "1.0.0-beta.37" web3-eth-abi "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -truffle-error@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.4.tgz#c3ff027570c26ae1f20db78637902497857f898f" - integrity sha512-hER0TNR4alBIhUp7SNrZRRiZtM/MBx+xBdM9qXP0tC3YASFmhNAxPuOyB8JDHFRNbDx12K7nvaqmyYGsI5c8BQ== +truffle-error@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.5.tgz#6b5740c9f3aac74f47b85d654fff7fe2c1fc5e0e" + integrity sha512-JpzPLMPSCE0vaZ3vH5NO5u42GpMj/Y1SRBkQ6b69PSw3xMSH1umApN32cEcg1nnh8q5FNYc5FnKu0m4tiBffyQ== -truffle-interface-adapter@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/truffle-interface-adapter/-/truffle-interface-adapter-0.1.5.tgz#406b00f8f751335d9c4a66b24b460f2bce9c37e6" - integrity sha512-TbKD7oUdz/0GqeR4PStNoad4uwKkHtZMUQQH+Xyy5acVZxBCJ7uTGwYVaOvtxeAITaX5zxeyhjlU8IKyrnd4QA== +truffle-interface-adapter@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/truffle-interface-adapter/-/truffle-interface-adapter-0.1.6.tgz#ae61f54613f3219fd8d420de57a6e457d6e81ad7" + integrity sha512-UFzVsbIPhE8w4b2Ywp/2xYPIOo4dtdLc2Lwa82UYg2ikf0q4/EteYLFE7hsiTgmPwmeB+L+YQZ8pqLtAa+AOgw== dependencies: bn.js "^4.11.8" web3 "1.0.0-beta.37" tslib@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tunnel-agent@^0.6.0: version "0.6.0" @@ -7427,7 +7317,7 @@ type-fest@^0.5.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== -type-is@~1.6.16, type-is@~1.6.17: +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== @@ -7452,15 +7342,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -uglify-js@^3.1.4: - version "3.5.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.10.tgz#652bef39f86d9dbfd6674407ee05a5e2d372cf2d" - integrity sha512-/GTF0nosyPLbdJBd+AwYiZ+Hu5z8KXWnO0WCGt1BQ/u9Iamhejykqmz5o1OHJ53+VAk6xVxychonnApDjuqGsw== - dependencies: - commander "~2.20.0" - source-map "~0.6.1" - -uglify-js@^3.4.9: +uglify-js@^3.1.4, uglify-js@^3.4.9: version "3.6.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== @@ -7519,11 +7401,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -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" @@ -7655,9 +7532,9 @@ w3c-hr-time@^1.0.1: browser-process-hrtime "^0.1.2" wait-for-expect@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-1.1.1.tgz#9cd10e07d52810af9e0aaf509872e38f3c3d81ae" - integrity sha512-vd9JOqqEcBbCDhARWhW85ecjaEcfBLuXgVBqatfS3iw6oU4kzAcs+sCNjF+TC9YHPImCW7ypsuQc+htscIAQCw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-1.2.0.tgz#fdab6a26e87d2039101db88bff3d8158e5c3e13f" + integrity sha512-EJhKpA+5UHixduMBEGhTFuLuVgQBKWxkFbefOdj2bbk2/OpA5Opsc4aUTGmF+qJ+v3kTGxDRNYwKaT4j6g5n8Q== walker@~1.0.5: version "1.0.7" @@ -7683,16 +7560,6 @@ web3-bzz@1.0.0-beta.37: swarm-js "0.1.37" underscore "1.8.3" -web3-bzz@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.54.tgz#6c467551a5bde937187bde51979eef71f32b1834" - integrity sha512-YKoYJWSAxyekk52V0v/rx/gtklqFbMpT8S2Wevox+9MjWchizt34MovJOIbAQzUEUpDhMffdoycVoebmJBcVfA== - dependencies: - "@babel/runtime" "^7.3.1" - "@types/node" "^10.12.18" - lodash "^4.17.11" - swarm-js "^0.1.39" - web3-core-helpers@1.0.0-beta.37: version "1.0.0-beta.37" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz#04ec354b7f5c57234c309eea2bda9bf1f2fe68ba" @@ -7702,15 +7569,16 @@ web3-core-helpers@1.0.0-beta.37: web3-eth-iban "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-core-helpers@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.54.tgz#6b3fc3c2efc45ae8f23a78be5b1b5db687819d99" - integrity sha512-tASbzdfWyUd6ICbrhDAkWP8NxzSk8+t8IGrpaTBen00gR4gudz3KLPZKTJXrE7y3FB6YONRFPlpYqbim/TS6XQ== +web3-core-helpers@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.55.tgz#832b8499889f9f514b1d174f00172fd3683d63de" + integrity sha512-suj9Xy/lIqajaYLJTEjr2rlFgu6hGYwChHmf8+qNrC2luZA6kirTamtB9VThWMxbywx7p0bqQFjW6zXogAgWhg== dependencies: "@babel/runtime" "^7.3.1" lodash "^4.17.11" - web3-eth-iban "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-eth-iban "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-core-method@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7723,14 +7591,19 @@ web3-core-method@1.0.0-beta.37: web3-core-subscriptions "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-core-method@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.54.tgz#e534ef831287e9e32ae9104f60bae78cf02df24d" - integrity sha512-5Ar3+jj1tOdNA8+ra105QD+cYef5w9wmgmaaIyGmjsgPZGMDeCIIPLgdSdFuyOdgPhy0zKhhwJsIzr3fJXtMxw== +web3-core-method@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.55.tgz#0af994295ac2dd64ccd53305b7df8da76e11da49" + integrity sha512-w1cW/s2ji9qGELHk2uMJCn1ooay0JJLVoPD1nvmsW6OTRWcVjxa62nJrFQhe6P5lEb83Xk9oHgmCxZoVUHibOw== dependencies: "@babel/runtime" "^7.3.1" eventemitter3 "3.1.0" lodash "^4.17.11" + rxjs "^6.4.0" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-subscriptions "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-core-promievent@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7768,10 +7641,10 @@ web3-core-subscriptions@1.0.0-beta.37: underscore "1.8.3" web3-core-helpers "1.0.0-beta.37" -web3-core-subscriptions@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.54.tgz#2a1c75682dd642344894eba454ed3b39483cdb8c" - integrity sha512-JQK0pgdIPQU0Ff0Muv8eVNeeABRzvEa4rDkqKyEkZtHKd+JcxBFWp7Y9nlDLViAq20ahH5yh4AB/pCGh7mxIiw== +web3-core-subscriptions@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.55.tgz#105902c13db53466fc17d07a981ad3d41c700f76" + integrity sha512-pb3oQbUzK7IoyXwag8TYInQddg0rr7BHxKc+Pbs/92hVNQ5ps4iGMVJKezdrjlQ1IJEEUiDIglXl4LZ1hIuMkw== dependencies: "@babel/runtime" "^7.3.1" eventemitter3 "^3.1.0" @@ -7787,16 +7660,18 @@ web3-core@1.0.0-beta.37: web3-core-requestmanager "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-core@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.54.tgz#1141dd92dcc3f5ed289db9c54acaa732d65926e8" - integrity sha512-phgFlv0LotX1ym1H+5mchhjJY3MVFov3DdUnFg1eZQlgHxsRKNfRI/nf3+ICVkDqOJP6mdX+oSPFizIXZJqLGQ== +web3-core@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.55.tgz#26b9abbf1bc1837c9cc90f06ecbc4ed714f89b53" + integrity sha512-AMMp7TLEtE7u8IJAu/THrRhBTZyZzeo7Y6GiWYNwb5+KStC9hIGLr9cI1KX9R6ZioTOLRHrqT7awDhnJ1ku2mg== dependencies: "@babel/runtime" "^7.3.1" "@types/bn.js" "^4.11.4" "@types/node" "^10.12.18" lodash "^4.17.11" - web3-utils "1.0.0-beta.54" + web3-core-method "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-eth-abi@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7807,15 +7682,15 @@ web3-eth-abi@1.0.0-beta.37: underscore "1.8.3" web3-utils "1.0.0-beta.37" -web3-eth-abi@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.54.tgz#4d863e6d4675fa3502e3eba7093d8c2998a66566" - integrity sha512-2hePxe8VHtNvGX6i14rntPCjAuwO8Iktn95HcR/VgXW2SoqeKkqmKow+lR6ePjl/D/BQyEa/bWCaLrSpArfK9g== +web3-eth-abi@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.55.tgz#69250420039346105a3d0f899c0a8a53be926f97" + integrity sha512-3h1xnm/vYmKUXTOYAOP0OsB5uijQV76pNNRGKOB6Dq6GR1pbcbD3WrB/4I643YA8l91t5FRzFzUiA3S77R2iqw== dependencies: "@babel/runtime" "^7.3.1" ethers "^4.0.27" lodash "^4.17.11" - web3-utils "1.0.0-beta.54" + web3-utils "1.0.0-beta.55" web3-eth-accounts@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7833,22 +7708,24 @@ web3-eth-accounts@1.0.0-beta.37: web3-core-method "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-eth-accounts@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.54.tgz#701b8e9a735f6d4e692a2076b469be960e91d71f" - integrity sha512-/cIwYx4vod+W05tyQoLBcmBs2wGcnvuyvptoRk2y+krwsVNY+8OvUCu8hU4pIqhH8lt6Q++D1dshttsZsue5hw== +web3-eth-accounts@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.55.tgz#ba734ffdc1e3cc8ac0ea01de5241323a0c2f69f3" + integrity sha512-VfzvwpSDHXqRVelIxsBVhgbV9BkFvhJ/q+bKhnVUUXV0JAhMK/7uC92TsqKk4EBYuqpHyZ1jjqrL4n03fMU7zw== dependencies: "@babel/runtime" "^7.3.1" - crypto-browserify "3.12.0" + browserify-cipher "^1.0.1" eth-lib "0.2.8" lodash "^4.17.11" - scrypt.js "0.2.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + scrypt.js "0.3.0" uuid "3.3.2" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-eth-contract@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7864,22 +7741,22 @@ web3-eth-contract@1.0.0-beta.37: web3-eth-abi "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-eth-contract@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.54.tgz#f4e828b7979153fe88dbba98ffc37beb1950dcfe" - integrity sha512-on5LfhA3041VKo1wIlA16HeNIyy+JkyoM/lTLOPHMueD2b+4+USFh+x8rKE4LNrtvjq4wE8+emxLmHrRez459Q== +web3-eth-contract@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.55.tgz#cd9e6727ff73d648ebe7cae17516e8aec5873c65" + integrity sha512-v6oB1wfH039/A5sTb4ZTKX++fcBTHEkuQGpq50ATIDoxP/UTz2+6S+iL+3sCJTsByPw2/Bni/HM7NmLkXqzg/Q== dependencies: "@babel/runtime" "^7.3.1" "@types/bn.js" "^4.11.4" lodash "^4.17.11" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-core-subscriptions "1.0.0-beta.54" - web3-eth-abi "1.0.0-beta.54" - web3-eth-accounts "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-core-subscriptions "1.0.0-beta.55" + web3-eth-abi "1.0.0-beta.55" + web3-eth-accounts "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-eth-ens@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7895,22 +7772,23 @@ web3-eth-ens@1.0.0-beta.37: web3-eth-contract "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-eth-ens@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.54.tgz#732770b8efd4b4eca5e93ebcb67706f384ac17f1" - integrity sha512-YXdBq7qB0Hfp3+FZKwsUOkHxcM0F0mGDNSEhjVrfuJy7+S+qKA4/gXVMoUA3z+M0TbygtHr7cgY0ayz/n8s3BQ== +web3-eth-ens@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.55.tgz#4341434a3406728212d411ae7f22d4cf5b8642fe" + integrity sha512-jEL17coO0FJXb7KYq4+7DhVXj0Rh+wHfZ86jOvFUvJsRaUHfqK2TlMatuhD2mbrmxpBYb6oMPnXVnNK9bnD5Rg== dependencies: "@babel/runtime" "^7.3.1" eth-ens-namehash "2.0.8" lodash "^4.17.11" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-eth-abi "1.0.0-beta.54" - web3-eth-contract "1.0.0-beta.54" - web3-net "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-eth-abi "1.0.0-beta.55" + web3-eth-accounts "1.0.0-beta.55" + web3-eth-contract "1.0.0-beta.55" + web3-net "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-eth-iban@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7920,14 +7798,14 @@ web3-eth-iban@1.0.0-beta.37: bn.js "4.11.6" web3-utils "1.0.0-beta.37" -web3-eth-iban@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.54.tgz#d09ee445fae7bb8cc5fb81eaa6ee5ab5596e0538" - integrity sha512-wgPP7KFb3zKOk7FAeRCcUkGryqRPvPL38eMWNlsqcwcrq3Hmj/wdVSnARYed7Xg0pcagabSyaPtEGuHnxCmtRg== +web3-eth-iban@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.55.tgz#15146a69de21addc99e7dbfb2920555b1e729637" + integrity sha512-a2Fxsb5Mssa+jiXgjUdIzJipE0175IcQXJbZLpKft2+zeSJWNTbaa3PQD2vPPpIM4W789q06N+f9Zc0Fyls+1g== dependencies: "@babel/runtime" "^7.3.1" bn.js "4.11.8" - web3-utils "1.0.0-beta.54" + web3-utils "1.0.0-beta.55" web3-eth-personal@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7940,19 +7818,19 @@ web3-eth-personal@1.0.0-beta.37: web3-net "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-eth-personal@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.54.tgz#78ce9d3d214174eda3cc5ee482b5a73c77b26da2" - integrity sha512-bnKbNXgo5lInir8FQ0cyL/55e/vq3xWBNw//fAvUCPKLgL+PQ9eGhr6ftApJTpxapAgMIEHzpP3rjtfLC5djWQ== +web3-eth-personal@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.55.tgz#76e9d2da1501ee3c686751e7c7df63cc11793a1d" + integrity sha512-H0mahLQx6Oj7lpgTamKAswr3rHChRUZijeWAar2Hj7BABQlLRKwx8n09nYhxggvvLYQNQS90JjvQue7rAo2LQQ== dependencies: "@babel/runtime" "^7.3.1" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-eth-accounts "1.0.0-beta.54" - web3-net "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-eth-accounts "1.0.0-beta.55" + web3-net "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-eth@1.0.0-beta.37: version "1.0.0-beta.37" @@ -7973,27 +7851,27 @@ web3-eth@1.0.0-beta.37: web3-net "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-eth@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.54.tgz#469ca08f0919f5afe383f5df6069678973dbe146" - integrity sha512-rXjx2I24xY2id43mz66RAH/ZyFpjporKIrIJTGRgyPO6jN+DdGjJbDcFpw7G/H6a+bRdOfVyo5tdl3eW1j6xdg== +web3-eth@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.55.tgz#bb52150df0a77bd13511449a53793d4eb23ade6e" + integrity sha512-F3zJ9I1gOgQdNGfi2Dy2lmj6OqCMJoRN01XHhQZagq0HY1JYMfObtfMi5E3L+qsegsSddHbqp4YY57tKx6uxpA== dependencies: "@babel/runtime" "^7.3.1" ethereumjs-tx "^1.3.7" rxjs "^6.4.0" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-core-subscriptions "1.0.0-beta.54" - web3-eth-abi "1.0.0-beta.54" - web3-eth-accounts "1.0.0-beta.54" - web3-eth-contract "1.0.0-beta.54" - web3-eth-ens "1.0.0-beta.54" - web3-eth-iban "1.0.0-beta.54" - web3-eth-personal "1.0.0-beta.54" - web3-net "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-core-subscriptions "1.0.0-beta.55" + web3-eth-abi "1.0.0-beta.55" + web3-eth-accounts "1.0.0-beta.55" + web3-eth-contract "1.0.0-beta.55" + web3-eth-ens "1.0.0-beta.55" + web3-eth-iban "1.0.0-beta.55" + web3-eth-personal "1.0.0-beta.55" + web3-net "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-net@1.0.0-beta.37: version "1.0.0-beta.37" @@ -8004,18 +7882,18 @@ web3-net@1.0.0-beta.37: web3-core-method "1.0.0-beta.37" web3-utils "1.0.0-beta.37" -web3-net@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.54.tgz#be64a6efd53e7a70d56bfb640b11ea8dd8a5ba75" - integrity sha512-3YjdjHvUpitGDs3b+g9HfzWQdd6fd1mpHDCLgBJQUykKgjwxgkEbb0Dm7vqQMSggLm6W37LV2xBQjIOMmYsA/Q== +web3-net@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.55.tgz#daf24323df16a890a0bac6c6eda48b6e8c7e96ef" + integrity sha512-do2WY8+/GArJSWX7k/zZ7nBnV9Y3n6LhPYkwT3LeFqDzD515bKwlomaNC8hOaTc6UQyXIoPprYTK2FevL7jrZw== dependencies: "@babel/runtime" "^7.3.1" lodash "^4.17.11" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-providers-http@1.0.0-beta.37: version "1.0.0-beta.37" @@ -8043,16 +7921,20 @@ web3-providers-ws@1.0.0-beta.37: web3-core-helpers "1.0.0-beta.37" websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" -web3-providers@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-providers/-/web3-providers-1.0.0-beta.54.tgz#b2401eb72ded5996379e03c2e166113daa50a19a" - integrity sha512-P55MQHkfU2VLt3t+3IbqRUVwOziLOMiXxKulVYXzTu9M8p9aogl1tvPjKXpRUGygCY3LsWTpt/UlJR8Aaia+CQ== +web3-providers@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-providers/-/web3-providers-1.0.0-beta.55.tgz#639503517741b69baaa82f1f940630df6a25992b" + integrity sha512-MNifc7W+iF6rykpbDR1MuX152jshWdZXHAU9Dk0Ja2/23elhIs4nCWs7wOX9FHrKgdrQbscPoq0uy+0aGzyWVQ== dependencies: "@babel/runtime" "^7.3.1" "@types/node" "^10.12.18" eventemitter3 "3.1.0" lodash "^4.17.11" url-parse "1.4.4" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" websocket "^1.0.28" xhr2-cookies "1.1.0" @@ -8066,19 +7948,19 @@ web3-shh@1.0.0-beta.37: web3-core-subscriptions "1.0.0-beta.37" web3-net "1.0.0-beta.37" -web3-shh@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.54.tgz#1f0b5d42f9e7a542547d0638aea6911fbb771cec" - integrity sha512-YO+sMZ3szof0wTZ+Lh43mkioVGSLhDH2paGzcBB7JM8PoZ9QbuLquNypiM3XWfehNusCQmEGvq0R0nVZe/Juaw== +web3-shh@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.55.tgz#56f152ebcefb791dab86d2e6f1c296f8c1553644" + integrity sha512-lGP2HQ/1ThNnfoU8677aL48KsTx4Ht+2KQIn39dGpxVZqysQmovQIltbymVnAr4h8wofwcEz46iNHGa+PAyNzA== dependencies: "@babel/runtime" "^7.3.1" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-core-subscriptions "1.0.0-beta.54" - web3-net "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-core-helpers "1.0.0-beta.55" + web3-core-method "1.0.0-beta.55" + web3-core-subscriptions "1.0.0-beta.55" + web3-net "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" web3-utils@1.0.0-beta.37: version "1.0.0-beta.37" @@ -8093,10 +7975,10 @@ web3-utils@1.0.0-beta.37: underscore "1.8.3" utf8 "2.1.1" -web3-utils@1.0.0-beta.54: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.54.tgz#90588e45eae7c56b61138b5a4c4034377fca33fd" - integrity sha512-yb/cjzjTU99P/9bEaAnb6cjqGjyMUF0OmjD7/ix89IfcDhBJ3jExSuClTAKU8Hz9Rf7IXLiXqBny9W8PdogwmQ== +web3-utils@1.0.0-beta.55: + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.55.tgz#beb40926b7c04208b752d36a9bc959d27a04b308" + integrity sha512-ASWqUi8gtWK02Tp8ZtcoAbHenMpQXNvHrakgzvqTNNZn26wgpv+Q4mdPi0KOR6ZgHFL8R/9b5BBoUTglS1WPpg== dependencies: "@babel/runtime" "^7.3.1" "@types/bn.js" "^4.11.4" @@ -8106,7 +7988,7 @@ web3-utils@1.0.0-beta.54: ethjs-unit "^0.1.6" lodash "^4.17.11" number-to-bn "1.7.0" - randomhex "0.1.5" + randombytes "^2.1.0" utf8 "2.1.1" web3@1.0.0-beta.37: @@ -8123,22 +8005,19 @@ web3@1.0.0-beta.37: web3-utils "1.0.0-beta.37" web3@^1.0.0-beta.37: - version "1.0.0-beta.54" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.54.tgz#d3545ad863be6558ca08b3e41b9491cf16d1eb8b" - integrity sha512-rMQaLFwBNR3Lc8Npa9uasdkJKhsnp2FrDA0r8J814mU1VITkAG7l8NPICrlUaDLNiQn0bf6QnONTNujuds+yNg== + version "1.0.0-beta.55" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.55.tgz#8845075129299da172c2eb41a748c8a87c2a2b5a" + integrity sha512-yJpwy4IUA3T/F9hWzYQVn0GbJCrAaZ0KTIO3iuqkhaYH0Y09KV7k4GzFi4hN7hT4cFTj4yIKaeVCwQ5kzvi2Vg== dependencies: "@babel/runtime" "^7.3.1" "@types/node" "^10.12.18" - web3-bzz "1.0.0-beta.54" - web3-core "1.0.0-beta.54" - web3-core-helpers "1.0.0-beta.54" - web3-core-method "1.0.0-beta.54" - web3-eth "1.0.0-beta.54" - web3-eth-personal "1.0.0-beta.54" - web3-net "1.0.0-beta.54" - web3-providers "1.0.0-beta.54" - web3-shh "1.0.0-beta.54" - web3-utils "1.0.0-beta.54" + web3-core "1.0.0-beta.55" + web3-eth "1.0.0-beta.55" + web3-eth-personal "1.0.0-beta.55" + web3-net "1.0.0-beta.55" + web3-providers "1.0.0-beta.55" + web3-shh "1.0.0-beta.55" + web3-utils "1.0.0-beta.55" webidl-conversions@^4.0.2: version "4.0.2" @@ -8237,9 +8116,9 @@ wrappy@1: integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^2.1.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" - integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -8367,7 +8246,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==