diff --git a/lib/block-listeners/cosmos-node-subscription.js b/lib/block-listeners/cosmos-node-subscription.js index b94e675ea5..83676b228a 100644 --- a/lib/block-listeners/cosmos-node-subscription.js +++ b/lib/block-listeners/cosmos-node-subscription.js @@ -1,6 +1,4 @@ const _ = require('lodash') -const io = require('@pm2/io') -const Tendermint = require('../rpc/tendermint') const { publishBlockAdded, publishUserTransactionAdded, @@ -10,115 +8,65 @@ const Sentry = require('@sentry/node') const database = require('../database') const config = require('../../config.js') -const WAIT_FOR_BLOCK_DELAY = 5000 +const POLLING_INTERVAL = 1000 const EXPECTED_MAX_BLOCK_WINDOW = 120000 +// apparently the cosmos db takes a while to serve the content after a block has been updated +// if we don't do this, we run into errors as the data is not yet available +const COSMOS_DB_DELAY = 2000 -// let reconnectionTimeout = {} - -// This class establishes an rpc connection to Tendermint. +// This class polls for new blocks // Used for listening to events, such as new blocks. class CosmosNodeSubscription { constructor(network, CosmosApiClass, store) { this.network = network this.cosmosAPI = new CosmosApiClass(network) this.store = store - this.lastupdate = 0 - this.metric = io.metric({ - name: `${this.network.id}_update` - }) const networkSchemaName = this.network.id.replace(/-/g, '_') this.db = new database(config)(networkSchemaName) this.chainHangup = undefined + this.height = undefined - this.connectTendermint(this.network) + this.pollForNewBlock() } - async connectTendermint(network) { - console.log('Connecting to Tendermint on', network.rpc_url) - // Create a RPC subscription for each network that will react to new block events. - Tendermint() - .connect(network.rpc_url) - .then(connectedClient => { - console.log('Connected to Tendermint on', network.rpc_url) - connectedClient.subscribe({ query: "tm.event='NewBlock'" }, event => { - // this tracks the block times - // issue: this will only trigger if there are actually blocks I guess - if (this.lastupdate) { - const diff = Date.now() - this.lastupdate - this.metric.set(diff) - } - this.lastupdate = Date.now() - - setTimeout( - () => this.newBlockHandler(event.block.header.height), - WAIT_FOR_BLOCK_DELAY - ) + async pollForNewBlock() { + this.pollingTimeout = setTimeout(async () => { + const block = await this.cosmosAPI.getBlockByHeight() - // if there are no new blocks for some time, trigger an error - // TODO: show this error automatically in the UI - if (this.chainHangup) clearTimeout(this.chainHangup) - this.chainHangup = setTimeout(() => { - console.error(`Chain ${this.network.id} seems to have halted.`) - Sentry.captureException( - new Error(`Chain ${this.network.id} seems to have halted.`) - ) - }, EXPECTED_MAX_BLOCK_WINDOW) - }) - - // on connection lost, reconnect to tendermint + Sentry error - connectedClient.ondisconnect = () => { - console.log('Lost connection to Tendermint for', network.rpc_url) + if (this.height !== block.height) { + // apparently the cosmos db takes a while to serve the content after a block has been updated + // if we don't do this, we run into errors as the data is not yet available + setTimeout(() => this.newBlockHandler(block), COSMOS_DB_DELAY) - Sentry.withScope(function(scope) { - scope.setExtra('network', network.id) - scope.setExtra('rpc_url', network.rpc_url) - Sentry.captureException(new Error(`Lost Tendermint connection`)) - }) - // need to clear previous timeout to evoid connection hell - // clearTimeout(reconnectionTimeout[network.id]) - // reconnectionTimeout[network.id] = setTimeout( - // () => this.connectTendermint(network), - // 3000 - // ) - } - }) - .catch(e => { - Sentry.withScope(function(scope) { - scope.setExtra('network', network.id) - scope.setExtra('rpc_url', network.rpc_url) - Sentry.captureException(e) - }) + // we are safe, that the chain produced a block so it didn't hang up + if (this.chainHangup) clearTimeout(this.chainHangup) + } - // clearTimeout(reconnectionTimeout[network.id]) - // // if can't connect, retry - // reconnectionTimeout[network.id] = setTimeout( - // () => this.connectTendermint(network), - // 3000 - // ) - }) + this.pollForNewBlock() + }, POLLING_INTERVAL) + + // if there are no new blocks for some time, trigger an error + // TODO: show this error automatically in the UI + this.chainHangup = setTimeout(() => { + console.error(`Chain ${this.network.id} seems to have halted.`) + Sentry.captureException( + new Error(`Chain ${this.network.id} seems to have halted.`) + ) + }, EXPECTED_MAX_BLOCK_WINDOW) } // For each block event, we fetch the block information and publish a message. // A GraphQL resolver is listening for these messages and sends the block to // each subscribed user. - async newBlockHandler(height) { - if (height) { - Sentry.configureScope(function(scope) { - scope.setExtra('height', height) - }) - } - - const block = await this.cosmosAPI.getBlockByHeight({ - blockHeight: height + async newBlockHandler(block) { + Sentry.configureScope(function(scope) { + scope.setExtra('height', block.height) }) - // in the case of height being undefined to query for latest - // eslint-disable-next-line require-atomic-updates - height = block.height - const validators = await this.cosmosAPI.getAllValidators(height) + const validators = await this.cosmosAPI.getAllValidators(block.height) const validatorMap = await this.getValidatorMap(validators) this.updateDBValidatorProfiles(validators) - this.store.update({ height, block, validators: validatorMap }) + this.store.update({ height: block.height, block, validators: validatorMap }) publishBlockAdded(this.network.id, block) // TODO remove, only for demo purposes // publishEvent(this.network.id, 'block', '', block) diff --git a/lib/resolvers.js b/lib/resolvers.js index 4032fe1941..ac7e7389bd 100644 --- a/lib/resolvers.js +++ b/lib/resolvers.js @@ -219,9 +219,7 @@ const resolvers = { block: (_, { networkId, height }, { dataSources }, { cacheControl }) => { const maxAge = height ? 60 : 10 cacheControl.setCacheHint({ maxAge }) - return remoteFetch(dataSources, networkId).getBlockByHeight({ - blockHeight: height - }) + return remoteFetch(dataSources, networkId).getBlockByHeight(height) }, network: (_, { id }) => { const network = networkMap[id] diff --git a/lib/rpc/tendermint.js b/lib/rpc/tendermint.js deleted file mode 100644 index fb14801a5d..0000000000 --- a/lib/rpc/tendermint.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * This file handels subscriptions via Tendermint through Websockets - * Usage: - * const tendermint = Tendermint().connect(websocketURL) - * tendermint.subscribe({ query: "tm.event='NewBlock'" }, async event => { - * console.log(event) - * }) - */ - -/* istanbuld ignore file: mostly websocket logic */ -/* global WebSocket */ - -'use strict' - -const camel = require(`camelcase`) -if (typeof window === 'undefined') { - global.WebSocket = require('websocket').w3cwebsocket -} - -const connectionTimeoutInterval = 5000 - -function tendermintConnect() { - const client = { - socket: undefined, - subscriptions: [], - ondisconnect: undefined, - isConnected() { - return this.socket && this.socket.readyState === WebSocket.OPEN - }, - async disconnect() { - try { - await this.unsubscribeAll() - } catch (error) { - // ignore error because throws if nothing to unsubscribe - } - this.subscriptions = [] - this.socket.close() - }, - async connect(websocketEndpoint) { - // if we have an existing connection, first disconnect that one - if (this.isConnected()) { - await this.disconnect() - } - - let socket - try { - socket = await connect(websocketEndpoint) - } catch (error) { - throw new Error('Connecting to Tendermint Websocket failed', error) - } - this.socket = socket - - const handler = function(event) { - let { id: eventId, error, result } = JSON.parse(event.data) - const isSubscriptionEvent = eventId.indexOf('#event') !== -1 - if (isSubscriptionEvent) { - eventId = eventId.replace('#event', '') - } - - const subscription = this.subscriptions.find(({ id }) => eventId === id) - if (subscription) { - if (isSubscriptionEvent && result) { - subscription.callback(result.data.value) - return - } - - if (error) { - subscription.reject(error) - } else { - subscription.resolve(result) - } - - // remove single subscription - if (subscription.method !== 'subscribe') { - this.subscriptions = this.subscriptions.filter( - ({ id }) => eventId !== id - ) - } - } - }.bind(this) - - this.socket.onmessage = handler - this.socket.onerror = handler - - // poll websocket connection - this.pollInterval = setInterval( - () => this.pollConnection(), - connectionTimeoutInterval * 6 - ) - - this.subscriptions.forEach(subscription => - this.startSubscription(subscription) - ) - - return this - }, - pollConnection() { - // handle connection timeout - let connectionTimeout = setTimeout( - function() { - // prevent polling again for connection timeout - clearInterval(this.pollInterval) - // close the current websocket so we terminate the connection - this.socket.close() - // call a handler for the disconnect if this is desired - if (this.ondisconnect) this.ondisconnect() - }.bind(this), - connectionTimeoutInterval - ) - this.health().then(() => clearTimeout(connectionTimeout)) - }, - subscribe(args, callback, method = 'subscribe') { - const id = Math.random().toString(36) - const parameters = convertWsArgs(args) - - return new Promise((resolve, reject) => { - const subscription = { - id, - method, - parameters, - callback, - resolve, - reject - } - this.subscriptions.push(subscription) - - if (this.isConnected()) { - this.startSubscription(subscription) - } - }) - }, - startSubscription({ id, method, parameters }) { - this.socket.send( - JSON.stringify({ - jsonrpc: `2.0`, - id, - method, - params: parameters - }) - ) - } - } - - for (const name of tendermintMethods) { - client[camel(name)] = function(args) { - return client.subscribe(args, undefined, name) - } - } - - return client -} - -// websocketEndpoint is ws://localhost:26657/websocket for a normal Tendermint full node -// remember that for a https served website you need to have a wss (secure websocket) endpoint in place -// to do so, you can reverse proxy the Tendermint full node using Nginx or Caddy -async function connect(websocketEndpoint) { - const socket = new WebSocket(websocketEndpoint) - - await new Promise((resolve, reject) => { - socket.onopen = resolve - socket.onclose = reject - }) - - return socket -} - -const tendermintMethods = [ - `unsubscribe`, - `unsubscribe_all`, - - `status`, - `net_info`, - `dial_peers`, - `dial_seeds`, - `blockchain`, - `genesis`, - `health`, - `block`, - `block_results`, - `blockchain`, - `validators`, - `consensus_state`, - `dump_consensus_state`, - `broadcast_tx_commit`, - `broadcast_tx_sync`, - `broadcast_tx_async`, - `unconfirmed_txs`, - `num_unconfirmed_txs`, - `commit`, - `tx`, - `tx_search`, - - `abci_query`, - `abci_info`, - - `unsafe_flush_mempool`, - `unsafe_start_cpu_profiler`, - `unsafe_stop_cpu_profiler`, - `unsafe_write_heap_profile` -] - -function convertWsArgs(args = {}) { - for (const k in args) { - const v = args[k] - if (typeof v === `number`) { - args[k] = String(v) - } else if (Buffer.isBuffer(v)) { - args[k] = `0x` + v.toString(`hex`) - } else if (v instanceof Uint8Array) { - args[k] = `0x` + Buffer.from(v).toString(`hex`) - } - } - return args -} - -module.exports = tendermintConnect diff --git a/lib/source/cosmosV0-source.js b/lib/source/cosmosV0-source.js index 5a1693c14a..5e7bd66a01 100644 --- a/lib/source/cosmosV0-source.js +++ b/lib/source/cosmosV0-source.js @@ -21,6 +21,23 @@ class CosmosV0API extends RESTDataSource { this.reducers = require('../reducers/cosmosV0-reducers') } + async getRetry(url, intent = 0) { + try { + return await this.get(url) + } catch (error) { + // give up + if (intent >= 3) { + throw new Error( + `Error for query ${url} in network ${this.networkId} (tried 3 times)` + ) + } + + // retry + await new Promise(resolve => setTimeout(() => resolve(), 1000)) + return this.getRetry(url, intent + 1) + } + } + // querying data from the cosmos REST API // is overwritten in cosmos v2 to extract from a differnt result format // some endpoints /blocks and /txs have a different response format so they use this.get directly @@ -265,17 +282,17 @@ class CosmosV0API extends RESTDataSource { } } - async getBlockByHeight({ blockHeight }) { + async getBlockByHeight(blockHeight) { let block, transactions if (blockHeight) { const response = await Promise.all([ - this.get(`blocks/${blockHeight}`), + this.getRetry(`blocks/${blockHeight}`), this.getTransactionsByHeight(blockHeight) ]) block = response[0] transactions = response[1] } else { - block = await this.get(`blocks/latest`) + block = await this.getRetry(`blocks/latest`) transactions = await this.getTransactionsByHeight( block.block_meta.header.height ) @@ -459,7 +476,7 @@ class CosmosV0API extends RESTDataSource { const pagination = `&limit=1000000000&page=${page}` let allTxs = [] - const { txs, total_count } = await this.get(`${url}${pagination}`) + const { txs, total_count } = await this.getRetry(`${url}${pagination}`) allTxs = allTxs.concat(txs) // there is a bug in page_number in gaia-13007 so we can't use is diff --git a/lib/source/cosmosV2-source.js b/lib/source/cosmosV2-source.js index 4bd31c7dae..ac83a3982c 100644 --- a/lib/source/cosmosV2-source.js +++ b/lib/source/cosmosV2-source.js @@ -6,7 +6,7 @@ class CosmosV2API extends CosmosV0API { } async query(url) { - const response = await this.get(url) + const response = await this.getRetry(url) return response.result } @@ -19,7 +19,7 @@ class CosmosV2API extends CosmosV0API { const pagination = `&limit=1000000000&page=${page}` let allTxs = [] - const { txs, total_count } = await this.get(`${url}${pagination}`) + const { txs, total_count } = await this.getRetry(`${url}${pagination}`) allTxs = allTxs.concat(txs) // there is a bug in page_number in gaia-13007 so we can't use is diff --git a/lib/source/livepeerV0-source.js b/lib/source/livepeerV0-source.js index 4592de202c..d073b54047 100644 --- a/lib/source/livepeerV0-source.js +++ b/lib/source/livepeerV0-source.js @@ -20,7 +20,7 @@ class LivepeerV0API extends GraphQLDataSource { this.reducers = require('../reducers/livepeerV0-reducers') } - async getBlockByHeight({ blockHeight }) { + async getBlockByHeight(blockHeight) { if (!blockHeight) { const { transcoders } = await this.query( ` diff --git a/package.json b/package.json index d3d64696a3..9669567a82 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,6 @@ "license": "ISC", "dependencies": { "@hapi/joi": "^16.1.8", - "@pm2/io": "^4.3.3", "@sentry/node": "^5.9.0", "apollo-datasource-rest": "^0.6.6", "apollo-server": "^2.9.9", diff --git a/yarn.lock b/yarn.lock index d9129c3737..ebcca297e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -477,63 +477,6 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@opencensus/core@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.8.tgz#df01f200c2d2fbfe14dae129a1a86fb87286db92" - integrity sha512-yUFT59SFhGMYQgX0PhoTR0LBff2BEhPrD9io1jWfF/VDbakRfs6Pq60rjv0Z7iaTav5gQlttJCX2+VPxFWCuoQ== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^5.5.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@opencensus/core@^0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@opencensus/core/-/core-0.0.9.tgz#b16f775435ee309433e4126af194d37313fc93b3" - integrity sha512-31Q4VWtbzXpVUd2m9JS6HEaPjlKvNMOiF7lWKNmXF84yUcgfAFL5re7/hjDmdyQbOp32oGc+RFV78jXIldVz6Q== - dependencies: - continuation-local-storage "^3.2.1" - log-driver "^1.2.7" - semver "^5.5.0" - shimmer "^1.2.0" - uuid "^3.2.1" - -"@opencensus/propagation-b3@^0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@opencensus/propagation-b3/-/propagation-b3-0.0.8.tgz#0751e6fd75f09400d9d3c419001e9e15a0df68e9" - integrity sha512-PffXX2AL8Sh0VHQ52jJC4u3T0H6wDK6N/4bg7xh4ngMYOIi13aR1kzVvX1sVDBgfGwDOkMbl4c54Xm3tlPx/+A== - dependencies: - "@opencensus/core" "^0.0.8" - uuid "^3.2.1" - -"@pm2/agent-node@^1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@pm2/agent-node/-/agent-node-1.1.10.tgz#29fafc9d1b75288dec87b6af1216ddfab8ea9b06" - integrity sha512-xRcrk7OEwhS3d/227/kKGvxgmbIi6Yyp27FzGlFNermEKhgddmFaRnmd7GRLIsBM/KB28NrwflBZulzk/mma6g== - dependencies: - debug "^3.1.0" - eventemitter2 "^5.0.1" - proxy-agent "^3.0.3" - ws "^6.0.0" - -"@pm2/io@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@pm2/io/-/io-4.3.3.tgz#3a719da5b0897718173d51ab313d25d7e1471c9b" - integrity sha512-ENGsdSVpnwbYMGdeB0/Xy2eZYo7oltzApoCsMD4ssqWNXDg9C4uQZy5J09iPsb0IHFwSDjU5oylXdwKDSoqODw== - dependencies: - "@opencensus/core" "^0.0.9" - "@opencensus/propagation-b3" "^0.0.8" - "@pm2/agent-node" "^1.1.10" - async "~2.6.1" - debug "3.1.0" - eventemitter2 "~5.0.1" - require-in-the-middle "^5.0.0" - semver "5.5.0" - shimmer "~1.2.0" - signal-exit "3.0.2" - tslib "1.9.3" - "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -939,20 +882,13 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: +agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" @@ -1301,11 +1237,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types@0.x.x: - version "0.13.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.2.tgz#df39b677a911a83f3a049644fb74fdded23cea48" - integrity sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA== - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -1321,14 +1252,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-listener@^0.6.0: - version "0.6.10" - resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" - integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== - dependencies: - semver "^5.3.0" - shimmer "^1.1.0" - async-retry@^1.2.1: version "1.2.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" @@ -1336,13 +1259,6 @@ async-retry@^1.2.1: dependencies: retry "0.12.0" -async@~2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1839,14 +1755,6 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -continuation-local-storage@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" - integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== - dependencies: - async-listener "^0.6.0" - emitter-listener "^1.1.1" - convert-source-map@^1.4.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1979,11 +1887,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== - data-urls@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" @@ -2003,7 +1906,7 @@ date-and-time@^0.11.0: resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.11.0.tgz#1e22b61533af303953d79cc8c5e92e228fc5e4d2" integrity sha512-VyzhHurex4wlg9oMszn7O+kxHchphWjzDn7Mv0WfkFKI6hSNOQePpTBFGsnRakvLNzQKXqPBAVV8DOxUGtUxqA== -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2017,13 +1920,6 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -2031,6 +1927,13 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2099,15 +2002,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2238,13 +2132,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -emitter-listener@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" - integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== - dependencies: - shimmer "^1.2.0" - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2326,18 +2213,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.x.x: - version "1.12.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.1.tgz#08770602a74ac34c7a90ca9229e7d51e379abc76" - integrity sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ== - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - escodegen@^1.9.1: version "1.12.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" @@ -2436,7 +2311,7 @@ espree@^6.1.2: acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" -esprima@3.x.x, esprima@^3.1.3: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= @@ -2480,11 +2355,6 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter2@^5.0.1, eventemitter2@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" - integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= - eventemitter3@^3.1.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2693,11 +2563,6 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -2839,14 +2704,6 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2934,18 +2791,6 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -3252,7 +3097,7 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@^1.7.3, http-errors@~1.7.2: +http-errors@^1.7.3, http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -3432,11 +3277,6 @@ ioredis@^4.0.0, ioredis@^4.6.3: redis-parser "^3.0.0" standard-as-callback "^2.0.1" -ip@1.1.5, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" @@ -4422,11 +4262,6 @@ lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -4452,7 +4287,7 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.0.0, lru-cache@^5.1.1: +lru-cache@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== @@ -4623,11 +4458,6 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -module-details-from-path@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4694,11 +4524,6 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -5029,31 +4854,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== - dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -5296,25 +5096,6 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.0" -proxy-agent@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== - dependencies: - agent-base "^4.2.0" - debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5387,16 +5168,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -5439,29 +5210,6 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - "readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -5624,15 +5372,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-in-the-middle@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-5.0.2.tgz#ce3593007a61583b39ccdcd2c167a2a326c670b2" - integrity sha512-l2r6F9i6t5xp4OE9cw/daB/ooQKHZOOW1AYPADhEvk/Tj/THJDS8gePp76Zyuht6Cj57a0KL+eHK5Dyv7wZnKA== - dependencies: - debug "^4.1.1" - module-details-from-path "^1.0.3" - resolve "^1.12.0" - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5672,13 +5411,6 @@ resolve@^1.10.0, resolve@^1.3.2: dependencies: path-parse "^1.0.6" -resolve@^1.12.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== - dependencies: - path-parse "^1.0.6" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -5802,11 +5534,6 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - semver@^6.0.0, semver@^6.1.2, semver@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -5898,11 +5625,6 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -shimmer@^1.1.0, shimmer@^1.2.0, shimmer@~1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" - integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== - should-equal@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3" @@ -5947,7 +5669,7 @@ should@^13.2.3: should-type-adaptors "^1.0.1" should-util "^1.0.0" -signal-exit@3.0.2, signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= @@ -5976,11 +5698,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - snakeize@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d" @@ -6016,22 +5733,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -6435,11 +6136,6 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -6534,11 +6230,6 @@ tslib@1.10.0, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslib@1.9.3: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6713,7 +6404,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: +uuid@^3.1.0, uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -6944,11 +6635,6 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"