diff --git a/app/scripts/controllers/permissions/enums.js b/app/scripts/controllers/permissions/enums.js new file mode 100644 index 000000000000..43119aa2d5e4 --- /dev/null +++ b/app/scripts/controllers/permissions/enums.js @@ -0,0 +1,113 @@ +export const WALLET_PREFIX = 'wallet_' + +export const HISTORY_STORE_KEY = 'permissionsHistory' + +export const LOG_STORE_KEY = 'permissionsLog' + +export const METADATA_STORE_KEY = 'domainMetadata' + +export const CAVEAT_NAMES = { + exposedAccounts: 'exposedAccounts', +} + +export const NOTIFICATION_NAMES = { + accountsChanged: 'wallet_accountsChanged', +} + +export const LOG_IGNORE_METHODS = [ + 'wallet_sendDomainMetadata', +] + +export const SAFE_METHODS = [ + 'web3_sha3', + 'net_listening', + 'net_peerCount', + 'net_version', + 'eth_blockNumber', + 'eth_call', + 'eth_chainId', + 'eth_coinbase', + 'eth_estimateGas', + 'eth_gasPrice', + 'eth_getBalance', + 'eth_getBlockByHash', + 'eth_getBlockByNumber', + 'eth_getBlockTransactionCountByHash', + 'eth_getBlockTransactionCountByNumber', + 'eth_getCode', + 'eth_getFilterChanges', + 'eth_getFilterLogs', + 'eth_getLogs', + 'eth_getStorageAt', + 'eth_getTransactionByBlockHashAndIndex', + 'eth_getTransactionByBlockNumberAndIndex', + 'eth_getTransactionByHash', + 'eth_getTransactionCount', + 'eth_getTransactionReceipt', + 'eth_getUncleByBlockHashAndIndex', + 'eth_getUncleByBlockNumberAndIndex', + 'eth_getUncleCountByBlockHash', + 'eth_getUncleCountByBlockNumber', + 'eth_getWork', + 'eth_hashrate', + 'eth_mining', + 'eth_newBlockFilter', + 'eth_newFilter', + 'eth_newPendingTransactionFilter', + 'eth_protocolVersion', + 'eth_sendRawTransaction', + 'eth_sendTransaction', + 'eth_sign', + 'personal_sign', + 'eth_signTypedData', + 'eth_signTypedData_v1', + 'eth_signTypedData_v3', + 'eth_submitHashrate', + 'eth_submitWork', + 'eth_syncing', + 'eth_uninstallFilter', + 'metamask_watchAsset', + 'wallet_watchAsset', + 'cfx_epochNumber', + 'cfx_call', + 'cfx_chainId', + 'cfx_coinbase', + 'cfx_estimateGas', + 'cfx_gasPrice', + 'cfx_getBalance', + 'cfx_getEpochByHash', + 'cfx_getEpochByNumber', + 'cfx_getEpochTransactionCountByHash', + 'cfx_getEpochTransactionCountByNumber', + 'cfx_getCode', + 'cfx_getFilterChanges', + 'cfx_getFilterLogs', + 'cfx_getLogs', + 'cfx_getStorageAt', + 'cfx_getTransactionByEpochHashAndIndex', + 'cfx_getTransactionByEpochNumberAndIndex', + 'cfx_getTransactionByHash', + 'cfx_getTransactionCount', + 'cfx_getTransactionReceipt', + 'cfx_getUncleByEpochHashAndIndex', + 'cfx_getUncleByEpochNumberAndIndex', + 'cfx_getUncleCountByEpochHash', + 'cfx_getUncleCountByEpochNumber', + 'cfx_getWork', + 'cfx_hashrate', + 'cfx_mining', + 'cfx_newEpochFilter', + 'cfx_newFilter', + 'cfx_newPendingTransactionFilter', + 'cfx_protocolVersion', + 'cfx_sendRawTransaction', + 'cfx_sendTransaction', + 'cfx_sign', + 'cfx_signTypedData', + 'cfx_signTypedData_v1', + 'cfx_signTypedData_v3', + 'cfx_submitHashrate', + 'cfx_submitWork', + 'cfx_syncing', + 'cfx_uninstallFilter', +] diff --git a/app/scripts/controllers/permissions/index.js b/app/scripts/controllers/permissions/index.js index 2d7d5478c012..f398559b1329 100644 --- a/app/scripts/controllers/permissions/index.js +++ b/app/scripts/controllers/permissions/index.js @@ -4,40 +4,45 @@ import ObservableStore from 'obs-store' import log from 'loglevel' import { CapabilitiesController as RpcCap } from 'rpc-cap' import { ethErrors } from 'eth-json-rpc-errors' + import getRestrictedMethods from './restrictedMethods' import createMethodMiddleware from './methodMiddleware' -import createLoggerMiddleware from './loggerMiddleware' +import PermissionsLogController from './permissionsLog' // Methods that do not require any permissions to use: -import SAFE_METHODS from './permissions-safe-methods.json' - -// some constants -const METADATA_STORE_KEY = 'domainMetadata' -const LOG_STORE_KEY = 'permissionsLog' -const HISTORY_STORE_KEY = 'permissionsHistory' -const WALLET_METHOD_PREFIX = 'wallet_' -const ACCOUNTS_CHANGED_NOTIFICATION = 'wallet_accountsChanged' - -export const CAVEAT_NAMES = { - exposedAccounts: 'exposedAccounts', -} +import { + SAFE_METHODS, // methods that do not require any permissions to use + WALLET_PREFIX, + METADATA_STORE_KEY, + LOG_STORE_KEY, + HISTORY_STORE_KEY, + CAVEAT_NAMES, + NOTIFICATION_NAMES, +} from './enums' export class PermissionsController { constructor ( - { platform, notifyDomain, notifyAllDomains, keyringController } = {}, + { + platform, notifyDomain, notifyAllDomains, getKeyringAccounts, + } = {}, restoredPermissions = {}, - restoredState = {} - ) { + restoredState = {}) { + this.store = new ObservableStore({ [METADATA_STORE_KEY]: restoredState[METADATA_STORE_KEY] || {}, [LOG_STORE_KEY]: restoredState[LOG_STORE_KEY] || [], [HISTORY_STORE_KEY]: restoredState[HISTORY_STORE_KEY] || {}, }) - this.notifyDomain = notifyDomain + + this._notifyDomain = notifyDomain this.notifyAllDomains = notifyAllDomains - this.keyringController = keyringController + this.getKeyringAccounts = getKeyringAccounts this._platform = platform this._restrictedMethods = getRestrictedMethods(this) + this.permissionsLogController = new PermissionsLogController({ + restrictedMethods: Object.keys(this._restrictedMethods), + store: this.store, + }) this._initializePermissions(restoredPermissions) } @@ -53,33 +58,20 @@ export class PermissionsController { const engine = new JsonRpcEngine() - engine.push( - createLoggerMiddleware({ - walletPrefix: WALLET_METHOD_PREFIX, - restrictedMethods: Object.keys(this._restrictedMethods), - ignoreMethods: ['wallet_sendDomainMetadata'], - store: this.store, - logStoreKey: LOG_STORE_KEY, - historyStoreKey: HISTORY_STORE_KEY, - }) - ) + engine.push(this.permissionsLogController.createMiddleware()) - engine.push( - createMethodMiddleware({ - store: this.store, - storeKey: METADATA_STORE_KEY, - getAccounts: this.getAccounts.bind(this, origin), - requestAccountsPermission: this._requestPermissions.bind(this, origin, { - eth_accounts: {}, - }), - }) - ) + engine.push(createMethodMiddleware({ + store: this.store, + storeKey: METADATA_STORE_KEY, + getAccounts: this.getAccounts.bind(this, origin), + requestAccountsPermission: this._requestPermissions.bind( + this, origin, { eth_accounts: {} } + ), + })) - engine.push( - this.permissions.providerMiddlewareFunction.bind(this.permissions, { - origin, - }) - ) + engine.push(this.permissions.providerMiddlewareFunction.bind( + this.permissions, { origin } + )) return asMiddleware(engine) } @@ -113,7 +105,7 @@ export class PermissionsController { } /** - * Submits a permissions request to rpc-cap. Internal use only. + * Submits a permissions request to rpc-cap. Internal, background use only. * * @param {string} origin - The origin string. * @param {IRequestedPermissions} permissions - The requested permissions. @@ -231,14 +223,19 @@ export class PermissionsController { } /** - * Update the accounts exposed to the given origin. + * Update the accounts exposed to the given origin. Changes the eth_accounts + * permissions and emits accountsChanged. + * At least one account must be exposed. If no accounts are to be exposed, the + * eth_accounts permissions should be removed completely. + * * Throws error if the update fails. * * @param {string} origin - The origin to change the exposed accounts for. * @param {string[]} accounts - The new account(s) to expose. */ - async updateExposedAccounts (origin, accounts) { - await this.validateExposedAccounts(accounts) + async updatePermittedAccounts (origin, accounts) { + + await this.validatePermittedAccounts(accounts) this.permissions.updateCaveatFor( origin, @@ -248,7 +245,7 @@ export class PermissionsController { ) this.notifyDomain(origin, { - method: ACCOUNTS_CHANGED_NOTIFICATION, + method: NOTIFICATION_NAMES.accountsChanged, result: accounts, }) } @@ -264,7 +261,8 @@ export class PermissionsController { const { eth_accounts: ethAccounts } = requestedPermissions if (ethAccounts) { - await this.validateExposedAccounts(accounts) + + await this.validatePermittedAccounts(accounts) if (!ethAccounts.caveats) { ethAccounts.caveats = [] @@ -289,13 +287,14 @@ export class PermissionsController { * * @param {string[]} accounts - An array of addresses. */ - async validateExposedAccounts (accounts) { + async validatePermittedAccounts (accounts) { + if (!Array.isArray(accounts) || accounts.length === 0) { throw new Error('Must provide non-empty array of account(s).') } // assert accounts exist - const allAccounts = await this.keyringController.getAccounts() + const allAccounts = await this.getKeyringAccounts() accounts.forEach(acc => { if (!allAccounts.includes(acc)) { throw new Error(`Unknown account: ${acc}`) @@ -303,6 +302,29 @@ export class PermissionsController { }) } + notifyDomain (origin, payload) { + + // if the accounts changed from the perspective of the dapp, + // update "last seen" time for the origin and account(s) + // exception: no accounts -> no times to update + if ( + payload.method === NOTIFICATION_NAMES.accountsChanged && + Array.isArray(payload.result) + ) { + this.permissionsLogController.updateAccountsHistory( + origin, payload.result + ) + } + + this._notifyDomain(origin, payload) + + // NOTE: + // we don't check for accounts changing in the notifyAllDomains case, + // because the log only records when accounts were last seen, + // and the accounts only change for all domains at once when permissions + // are removed + } + /** * Removes the given permissions for the given domain. * @param {Object} domains { origin: [permissions] } @@ -313,10 +335,10 @@ export class PermissionsController { origin, perms.map(methodName => { if (methodName === 'eth_accounts') { - this.notifyDomain(origin, { - method: ACCOUNTS_CHANGED_NOTIFICATION, - result: [], - }) + this.notifyDomain( + origin, + { method: NOTIFICATION_NAMES.accountsChanged, result: [] } + ) } return { parentCapability: methodName } @@ -325,13 +347,41 @@ export class PermissionsController { }) } + /** + * When a new account is selected in the UI for 'origin', emit accountsChanged + * to 'origin' if the selected account is permitted. + * @param {string} origin - The origin. + * @param {string} account - The newly selected account's address. + */ + async handleNewAccountSelected (origin, account) { + + const permittedAccounts = await this.getAccounts(origin) + + // do nothing if the account is not permitted for the origin, or + // if it's already first in the array of permitted accounts + if ( + !account || !permittedAccounts.includes(account) || + permittedAccounts[0] === account + ) { + return + } + + const newPermittedAccounts = [account].concat( + permittedAccounts.filter(_account => _account !== account) + ) + + // update permitted accounts to ensure that accounts are returned + // in the same order every time + this.updatePermittedAccounts(origin, newPermittedAccounts) + } + /** * Removes all known domains and their related permissions. */ clearPermissions () { this.permissions.clearDomains() this.notifyAllDomains({ - method: ACCOUNTS_CHANGED_NOTIFICATION, + method: NOTIFICATION_NAMES.accountsChanged, result: [], }) } @@ -348,36 +398,33 @@ export class PermissionsController { this.pendingApprovals = {} - this.permissions = new RpcCap( - { - // Supports passthrough methods: - safeMethods: SAFE_METHODS, - - // optional prefix for internal methods - methodPrefix: WALLET_METHOD_PREFIX, - - restrictedMethods: this._restrictedMethods, - - /** - * A promise-returning callback used to determine whether to approve - * permissions requests or not. - * - * Currently only returns a boolean, but eventually should return any - * specific parameters or amendments to the permissions. - * - * @param {string} req - The internal rpc-cap user request object. - */ - requestUserApproval: async req => { - const { - metadata: { id }, - } = req - - this._platform.openExtensionInBrowser(`connect/${id}`) - - return new Promise((resolve, reject) => { - this.pendingApprovals[id] = { resolve, reject } - }) - }, + this.permissions = new RpcCap({ + + // Supports passthrough methods: + safeMethods: SAFE_METHODS, + + // optional prefix for internal methods + methodPrefix: WALLET_PREFIX, + + restrictedMethods: this._restrictedMethods, + + /** + * A promise-returning callback used to determine whether to approve + * permissions requests or not. + * + * Currently only returns a boolean, but eventually should return any + * specific parameters or amendments to the permissions. + * + * @param {string} req - The internal rpc-cap user request object. + */ + requestUserApproval: async (req) => { + const { metadata: { id } } = req + + this._platform.openExtensionInBrowser(`connect/${id}`) + + return new Promise((resolve, reject) => { + this.pendingApprovals[id] = { resolve, reject } + }) }, initState ) @@ -385,5 +432,5 @@ export class PermissionsController { } export function addInternalMethodPrefix (method) { - return WALLET_METHOD_PREFIX + method + return WALLET_PREFIX + method } diff --git a/app/scripts/controllers/permissions/loggerMiddleware.js b/app/scripts/controllers/permissions/loggerMiddleware.js deleted file mode 100644 index 3aa1e1edaad3..000000000000 --- a/app/scripts/controllers/permissions/loggerMiddleware.js +++ /dev/null @@ -1,200 +0,0 @@ -import clone from 'clone' -import { isValidAddress } from 'ethereumjs-util' - -const LOG_LIMIT = 100 - -/** - * Create middleware for logging requests and responses to restricted and - * permissions-related methods. - */ -export default function createLoggerMiddleware ({ - walletPrefix, - restrictedMethods, - store, - logStoreKey, - historyStoreKey, - ignoreMethods, -}) { - return (req, res, next, _end) => { - let activityEntry, requestedMethods - const { origin, method } = req - const isInternal = method.startsWith(walletPrefix) - if ( - (isInternal || restrictedMethods.includes(method)) && - !ignoreMethods.includes(method) - ) { - activityEntry = logActivity(req, isInternal) - if (method === `${walletPrefix}requestPermissions`) { - requestedMethods = getRequestedMethods(req) - } - } else if (method === 'eth_requestAccounts') { - activityEntry = logActivity(req, isInternal) - requestedMethods = ['eth_accounts'] - } else { - return next() - } - - next(cb => { - const time = Date.now() - addResponse(activityEntry, res, time) - if (!res.error && requestedMethods) { - logHistory( - requestedMethods, - origin, - res.result, - time, - method === 'eth_requestAccounts' - ) - } - cb() - }) - } - - function logActivity (request, isInternal) { - const activityEntry = { - id: request.id, - method: request.method, - methodType: isInternal ? 'internal' : 'restricted', - origin: request.origin, - request: cloneObj(request), - requestTime: Date.now(), - response: null, - responseTime: null, - success: null, - } - commitActivity(activityEntry) - return activityEntry - } - - function addResponse (activityEntry, response, time) { - if (!response) { - return - } - activityEntry.response = cloneObj(response) - activityEntry.responseTime = time - activityEntry.success = !response.error - } - - function commitActivity (entry) { - const logs = store.getState()[logStoreKey] - if (logs.length > LOG_LIMIT - 2) { - logs.pop() - } - logs.push(entry) - store.updateState({ [logStoreKey]: logs }) - } - - function getRequestedMethods (request) { - if ( - !request.params || - typeof request.params[0] !== 'object' || - Array.isArray(request.params[0]) - ) { - return null - } - return Object.keys(request.params[0]) - } - - function logHistory ( - requestedMethods, - origin, - result, - time, - isEthRequestAccounts - ) { - let accounts, entries - if (isEthRequestAccounts) { - accounts = result - const accountToTimeMap = accounts.reduce( - (acc, account) => ({ ...acc, [account]: time }), - {} - ) - entries = { - eth_accounts: { accounts: accountToTimeMap, lastApproved: time }, - } - } else { - entries = result - ? result - .map(perm => { - if (perm.parentCapability === 'eth_accounts') { - accounts = getAccountsFromPermission(perm) - } - return perm.parentCapability - }) - .reduce((acc, m) => { - if (requestedMethods.includes(m)) { - if (m === 'eth_accounts') { - const accountToTimeMap = accounts.reduce( - (acc, account) => ({ ...acc, [account]: time }), - {} - ) - acc[m] = { lastApproved: time, accounts: accountToTimeMap } - } else { - acc[m] = { lastApproved: time } - } - } - return acc - }, {}) - : {} - } - - if (Object.keys(entries).length > 0) { - commitHistory(origin, entries) - } - } - - function commitHistory (origin, entries) { - const history = store.getState()[historyStoreKey] || {} - const newOriginHistory = { - ...history[origin], - ...entries, - } - - if ( - history[origin] && - history[origin]['eth_accounts'] && - entries['eth_accounts'] - ) { - newOriginHistory['eth_accounts'] = { - lastApproved: entries['eth_accounts'].lastApproved, - accounts: { - ...history[origin]['eth_accounts'].accounts, - ...entries['eth_accounts'].accounts, - }, - } - } - - history[origin] = newOriginHistory - - store.updateState({ [historyStoreKey]: history }) - } -} - -// the call to clone is set to disallow circular references -// we attempt cloning at a depth of 3 and 2, then return a -// shallow copy of the object -function cloneObj (obj) { - for (let i = 3; i > 1; i--) { - try { - return clone(obj, false, i) - } catch (_) {} - } - return { ...obj } -} - -function getAccountsFromPermission (perm) { - if (perm.parentCapability !== 'eth_accounts' || !perm.caveats) { - return [] - } - const accounts = {} - for (const c of perm.caveats) { - if (c.type === 'filterResponse' && Array.isArray(c.value)) { - for (const v of c.value) { - if (isValidAddress(v)) { - accounts[v] = true - } - } - } - } - return Object.keys(accounts) -} diff --git a/app/scripts/controllers/permissions/permissions-safe-methods.json b/app/scripts/controllers/permissions/permissions-safe-methods.json deleted file mode 100644 index 118e8b21813e..000000000000 --- a/app/scripts/controllers/permissions/permissions-safe-methods.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - "web3_sha3", - "net_listening", - "net_peerCount", - "net_version", - "eth_blockNumber", - "eth_call", - "eth_chainId", - "eth_coinbase", - "eth_estimateGas", - "eth_gasPrice", - "eth_getBalance", - "eth_getBlockByHash", - "eth_getBlockByNumber", - "eth_getBlockTransactionCountByHash", - "eth_getBlockTransactionCountByNumber", - "eth_getCode", - "eth_getFilterChanges", - "eth_getFilterLogs", - "eth_getLogs", - "eth_getStorageAt", - "eth_getTransactionByBlockHashAndIndex", - "eth_getTransactionByBlockNumberAndIndex", - "eth_getTransactionByHash", - "eth_getTransactionCount", - "eth_getTransactionReceipt", - "eth_getUncleByBlockHashAndIndex", - "eth_getUncleByBlockNumberAndIndex", - "eth_getUncleCountByBlockHash", - "eth_getUncleCountByBlockNumber", - "eth_getWork", - "eth_hashrate", - "eth_mining", - "eth_newBlockFilter", - "eth_newFilter", - "eth_newPendingTransactionFilter", - "eth_protocolVersion", - "eth_sendRawTransaction", - "eth_sendTransaction", - "eth_sign", - "personal_sign", - "eth_signTypedData", - "eth_signTypedData_v1", - "eth_signTypedData_v3", - "eth_submitHashrate", - "eth_submitWork", - "eth_syncing", - "eth_uninstallFilter", - "wallet_watchAsset", - "metamask_watchAsset", - "cfx_epochNumber", - "cfx_call", - "cfx_chainId", - "cfx_coinbase", - "cfx_estimateGas", - "cfx_gasPrice", - "cfx_getBalance", - "cfx_getEpochByHash", - "cfx_getEpochByNumber", - "cfx_getEpochTransactionCountByHash", - "cfx_getEpochTransactionCountByNumber", - "cfx_getCode", - "cfx_getFilterChanges", - "cfx_getFilterLogs", - "cfx_getLogs", - "cfx_getStorageAt", - "cfx_getTransactionByEpochHashAndIndex", - "cfx_getTransactionByEpochNumberAndIndex", - "cfx_getTransactionByHash", - "cfx_getTransactionCount", - "cfx_getTransactionReceipt", - "cfx_getUncleByEpochHashAndIndex", - "cfx_getUncleByEpochNumberAndIndex", - "cfx_getUncleCountByEpochHash", - "cfx_getUncleCountByEpochNumber", - "cfx_getWork", - "cfx_hashrate", - "cfx_mining", - "cfx_newEpochFilter", - "cfx_newFilter", - "cfx_newPendingTransactionFilter", - "cfx_protocolVersion", - "cfx_sendRawTransaction", - "cfx_sendTransaction", - "cfx_sign", - "personal_sign", - "cfx_signTypedData", - "cfx_signTypedData_v1", - "cfx_signTypedData_v3", - "cfx_submitHashrate", - "cfx_submitWork", - "cfx_syncing", - "cfx_uninstallFilter" -] diff --git a/app/scripts/controllers/permissions/permissionsLog.js b/app/scripts/controllers/permissions/permissionsLog.js new file mode 100644 index 000000000000..caa369a2e9e6 --- /dev/null +++ b/app/scripts/controllers/permissions/permissionsLog.js @@ -0,0 +1,405 @@ + +import clone from 'clone' +import { isValidAddress } from 'ethereumjs-util' +import { + CAVEAT_NAMES, + HISTORY_STORE_KEY, + LOG_STORE_KEY, + LOG_IGNORE_METHODS, + WALLET_PREFIX, +} from './enums' + +const LOG_LIMIT = 100 + +/** + * Controller with middleware for logging requests and responses to restricted + * and permissions-related methods. + */ +export default class PermissionsLogController { + + constructor ({ restrictedMethods, store }) { + this.restrictedMethods = restrictedMethods + this.store = store + } + + /** + * Get the activity log. + * + * @returns {Array} - The activity log. + */ + getActivityLog () { + return this.store.getState()[LOG_STORE_KEY] || [] + } + + /** + * Update the activity log. + * + * @param {Array} logs - The new activity log array. + */ + updateActivityLog (logs) { + this.store.updateState({ [LOG_STORE_KEY]: logs }) + } + + /** + * Get the permissions history log. + * + * @returns {Object} - The permissions history log. + */ + getHistory () { + return this.store.getState()[HISTORY_STORE_KEY] || {} + } + + /** + * Update the permissions history log. + * + * @param {Object} history - The new permissions history log object. + */ + updateHistory (history) { + this.store.updateState({ [HISTORY_STORE_KEY]: history }) + } + + /** + * Updates the exposed account history for the given origin. + * Sets the 'last seen' time to Date.now() for the given accounts. + * + * @param {string} origin - The origin that the accounts are exposed to. + * @param {Array} accounts - The accounts. + */ + updateAccountsHistory (origin, accounts) { + + if (accounts.length === 0) { + return + } + + const accountToTimeMap = getAccountToTimeMap(accounts, Date.now()) + + this.commitNewHistory(origin, { + eth_accounts: { + accounts: accountToTimeMap, + }, + }) + } + + /** + * Create a permissions log middleware. + * + * @returns {JsonRpcEngineMiddleware} - The permissions log middleware. + */ + createMiddleware () { + return (req, res, next, _end) => { + + let requestedMethods + const { origin, method, id: requestId } = req + const isInternal = method.startsWith(WALLET_PREFIX) + + // we only log certain methods + if ( + !LOG_IGNORE_METHODS.includes(method) && + (isInternal || this.restrictedMethods.includes(method)) + ) { + + this.logActivityRequest(req, isInternal) + + if (method === `${WALLET_PREFIX}requestPermissions`) { + // get the corresponding methods from the requested permissions + requestedMethods = this.getRequestedMethods(req) + } + } else if (method === 'eth_requestAccounts') { + + // eth_requestAccounts is a special case; we need to extract the accounts + // from it + this.logActivityRequest(req, isInternal) + requestedMethods = [ 'eth_accounts' ] + } else { + // no-op + return next() + } + + // call next with a return handler for capturing the response + next(cb => { + + const time = Date.now() + this.logActivityResponse(requestId, res, time) + + if (!res.error && requestedMethods) { + // any permissions or accounts changes will be recorded on the response, + // so we only log permissions history here + this.logPermissionsHistory( + requestedMethods, origin, res.result, time, + method === 'eth_requestAccounts', + ) + } + cb() + }) + } + } + + /** + * Creates and commits an activity log entry, without response data. + * + * @param {Object} request - The request object. + * @param {boolean} isInternal - Whether the request is internal. + */ + logActivityRequest (request, isInternal) { + const activityEntry = { + id: request.id, + method: request.method, + methodType: isInternal ? 'internal' : 'restricted', + origin: request.origin, + request: cloneObj(request), + requestTime: Date.now(), + response: null, + responseTime: null, + success: null, + } + this.commitNewActivity(activityEntry) + } + + /** + * Adds response data to an existing activity log entry and re-commits it. + * + * @param {string} id - The original request id. + * @param {Object} response - The response object. + * @param {number} time - Output from Date.now() + */ + logActivityResponse (id, response, time) { + + if (!id || !response) { + return + } + + const logs = this.getActivityLog() + const index = getLastIndexOfObjectArray(logs, 'id', id) + if (index === -1) { + return + } + + const entry = logs[index] + entry.response = cloneObj(response) + entry.responseTime = time + entry.success = !response.error + + this.updateActivityLog(logs) + } + + /** + * Commit a new entry to the activity log. + * Removes the oldest entry from the log if it exceeds the log limit. + * + * @param {Object} entry - The activity log entry. + */ + commitNewActivity (entry) { + + const logs = this.getActivityLog() + + // add new entry to end of log + logs.push(entry) + + // remove oldest log if exceeding size limit + if (logs.length > LOG_LIMIT) { + logs.shift() + } + + this.updateActivityLog(logs) + } + + /** + * Create new permissions history log entries, if any, and commit them. + * + * @param {Array} requestedMethods - The method names corresponding to the requested permissions. + * @param {string} origin - The origin of the permissions request. + * @param {Array { + + if (perm.parentCapability === 'eth_accounts') { + accounts = this.getAccountsFromPermission(perm) + } + + return perm.parentCapability + }) + .reduce((acc, method) => { + + if (requestedMethods.includes(method)) { + + if (method === 'eth_accounts') { + + const accountToTimeMap = getAccountToTimeMap(accounts, time) + + acc[method] = { + lastApproved: time, + accounts: accountToTimeMap, + } + } else { + acc[method] = { lastApproved: time } + } + } + + return acc + }, {}) + : {} // no result (e.g. in case of error), no log + } + + if (Object.keys(newEntries).length > 0) { + this.commitNewHistory(origin, newEntries) + } + } + + /** + * Commit new entries to the permissions history log. + * Merges the history for the given origin, overwriting existing entries + * with the same key (permission name). + * + * @param {string} origin - The requesting origin. + * @param {Object} newEntries - The new entries to commit. + */ + commitNewHistory (origin, newEntries) { + + // a simple merge updates most permissions + const history = this.getHistory() + const newOriginHistory = { + ...history[origin], + ...newEntries, + } + + // eth_accounts requires special handling, because of information + // we store about the accounts + const existingEthAccountsEntry = ( + history[origin] && history[origin]['eth_accounts'] + ) + const newEthAccountsEntry = newEntries['eth_accounts'] + if (existingEthAccountsEntry && newEthAccountsEntry) { + + // we may intend to update just the accounts, not the permission + // itself + const lastApproved = ( + newEthAccountsEntry.lastApproved || + existingEthAccountsEntry.lastApproved + ) + + // merge old and new eth_accounts history entries + newOriginHistory['eth_accounts'] = { + lastApproved, + accounts: { + ...existingEthAccountsEntry.accounts, + ...newEthAccountsEntry.accounts, + }, + } + } + + history[origin] = newOriginHistory + + this.updateHistory(history) + } + + /** + * Get all requested methods from a permissions request. + * + * @param {Object} request - The request object. + * @returns {Array} - The names of the requested permissions. + */ + getRequestedMethods (request) { + if ( + !request.params || + typeof request.params[0] !== 'object' || + Array.isArray(request.params[0]) + ) { + return null + } + return Object.keys(request.params[0]) + } + + /** + * Get the permitted accounts from an eth_accounts permissions object. + * Returns an empty array if the permission is not eth_accounts. + * + * @param {Object} perm - The permissions object. + * @returns {Array} - The permitted accounts. + */ + getAccountsFromPermission (perm) { + + if (perm.parentCapability !== 'eth_accounts' || !perm.caveats) { + return [] + } + + const accounts = {} + for (const caveat of perm.caveats) { + + if ( + caveat.name === CAVEAT_NAMES.exposedAccounts && + Array.isArray(caveat.value) + ) { + + for (const value of caveat.value) { + if (isValidAddress(value)) { + accounts[value] = true + } + } + } + } + return Object.keys(accounts) + } +} + +// helper functions + +// the call to clone is set to disallow circular references +// we attempt cloning at a depth of 3 and 2, then return a +// shallow copy of the object +function cloneObj (obj) { + + for (let i = 3; i > 1; i--) { + try { + return clone(obj, false, i) + } catch (_) {} + } + return { ...obj } +} + +function getAccountToTimeMap (accounts, time) { + return accounts.reduce( + (acc, account) => ({ ...acc, [account]: time }), {} + ) +} + +function getLastIndexOfObjectArray (array, key, value) { + + if (Array.isArray(array) && array.length > 0) { + + for (let i = array.length - 1; i >= 0; i--) { + + if (typeof array[i] !== 'object') { + throw new Error(`Encountered non-Object element at index ${i}`) + } + + if (array[i][key] === value) { + return i + } + } + } + return -1 +} diff --git a/app/scripts/controllers/permissions/restrictedMethods.js b/app/scripts/controllers/permissions/restrictedMethods.js index 69be11850e74..4b64336079f0 100644 --- a/app/scripts/controllers/permissions/restrictedMethods.js +++ b/app/scripts/controllers/permissions/restrictedMethods.js @@ -3,9 +3,8 @@ export default function getRestrictedMethods (permissionsController) { eth_accounts: { description: 'View the address of the selected account', method: (_, res, __, end) => { - permissionsController.keyringController - .getAccounts() - .then(accounts => { + permissionsController.getKeyringAccounts() + .then((accounts) => { res.result = accounts end() }) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 68f2e7b4c7f3..5a3b75ef2e15 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -62,8 +62,15 @@ class PreferencesController { // ENS decentralized website resolution ipfsGateway: 'ipfs.dweb.link', }, - opts.initState - ) + completedOnboarding: false, + metaMetricsId: null, + metaMetricsSendCount: 0, + + // ENS decentralized website resolution + ipfsGateway: 'ipfs.dweb.link', + + lastSelectedAddressByOrigin: {}, + }, opts.initState) this.diagnostics = opts.diagnostics this.network = opts.network @@ -377,6 +384,56 @@ class PreferencesController { return this.store.getState().selectedAddress } + /** + * Update the last selected address for the given origin. + * + * @param {string} origin - The origin for which the address was selected. + * @param {string} address - The new selected address. + */ + setLastSelectedAddress (origin, address) { + + const { lastSelectedAddressByOrigin } = this.store.getState() + + // only update state if it's necessary + if (lastSelectedAddressByOrigin[origin] !== address) { + lastSelectedAddressByOrigin[origin] = address + this.store.updateState({ lastSelectedAddressByOrigin }) + } + } + + /** + * Remove the selected address history for the given origin. + * + * @param {Array} origins - The origin to remove the last selected address for. + */ + removeLastSelectedAddressesFor (origins) { + + if ( + !Array.isArray(origins) || + (origins.length > 0 && typeof origins[0] !== 'string') + ) { + throw new Error('Expected array of strings') + } + + if (origins.length === 0) { + return + } + + const { lastSelectedAddressByOrigin } = this.store.getState() + + origins.forEach(origin => { + delete lastSelectedAddressByOrigin[origin] + }) + this.store.updateState({ lastSelectedAddressByOrigin }) + } + + /** + * Clears the selected address history. + */ + clearLastSelectedAddressHistory () { + this.store.updateState({ lastSelectedAddressByOrigin: {} }) + } + /** * Contains data about tokens users add to their account. * @typedef {Object} AddedToken diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 66d041f28a19..04a577b43d3e 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -214,7 +214,7 @@ export default class MetamaskController extends EventEmitter { this.permissionsController = new PermissionsController( { - keyringController: this.keyringController, + getKeyringAccounts: this.keyringController.getAccounts.bind(this.keyringController), platform: opts.platform, notifyDomain: this.notifyConnections.bind(this), notifyAllDomains: this.notifyAllConnections.bind(this), @@ -527,38 +527,16 @@ export default class MetamaskController extends EventEmitter { preferencesController ), addToken: nodeify(preferencesController.addToken, preferencesController), - removeToken: nodeify( - preferencesController.removeToken, - preferencesController - ), - removeSuggestedTokens: nodeify( - preferencesController.removeSuggestedTokens, - preferencesController - ), - setCurrentAccountTab: nodeify( - preferencesController.setCurrentAccountTab, - preferencesController - ), - setAccountLabel: nodeify( - preferencesController.setAccountLabel, - preferencesController - ), - setFeatureFlag: nodeify( - preferencesController.setFeatureFlag, - preferencesController - ), - setPreference: nodeify( - preferencesController.setPreference, - preferencesController - ), - completeOnboarding: nodeify( - preferencesController.completeOnboarding, - preferencesController - ), - addKnownMethodData: nodeify( - preferencesController.addKnownMethodData, - preferencesController - ), + removeToken: nodeify(preferencesController.removeToken, preferencesController), + removeSuggestedTokens: nodeify(preferencesController.removeSuggestedTokens, preferencesController), + setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController), + setAccountLabel: nodeify(preferencesController.setAccountLabel, preferencesController), + setFeatureFlag: nodeify(preferencesController.setFeatureFlag, preferencesController), + setPreference: nodeify(preferencesController.setPreference, preferencesController), + completeOnboarding: nodeify(preferencesController.completeOnboarding, preferencesController), + addKnownMethodData: nodeify(preferencesController.addKnownMethodData, preferencesController), + clearLastSelectedAddressHistory: nodeify(preferencesController.clearLastSelectedAddressHistory, preferencesController), + removeLastSelectedAddressesFor: nodeify(preferencesController.removeLastSelectedAddressesFor, preferencesController), // BlacklistController whitelistPhishingDomain: this.whitelistPhishingDomain.bind(this), @@ -665,34 +643,17 @@ export default class MetamaskController extends EventEmitter { ), // permissions - approvePermissionsRequest: nodeify( - permissionsController.approvePermissionsRequest, - permissionsController - ), - clearPermissions: permissionsController.clearPermissions.bind( - permissionsController - ), - getApprovedAccounts: nodeify( - permissionsController.getAccounts.bind(permissionsController) - ), - rejectPermissionsRequest: nodeify( - permissionsController.rejectPermissionsRequest, - permissionsController - ), - removePermissionsFor: permissionsController.removePermissionsFor.bind( - permissionsController - ), - updateExposedAccounts: nodeify( - permissionsController.updateExposedAccounts, - permissionsController - ), - legacyExposeAccounts: nodeify( - permissionsController.legacyExposeAccounts, - permissionsController - ), - - getRequestAccountTabIds: cb => cb(null, this.getRequestAccountTabIds()), - getOpenMetamaskTabsIds: cb => cb(null, this.getOpenMetamaskTabsIds()), + approvePermissionsRequest: nodeify(permissionsController.approvePermissionsRequest, permissionsController), + clearPermissions: permissionsController.clearPermissions.bind(permissionsController), + getApprovedAccounts: nodeify(permissionsController.getAccounts.bind(permissionsController)), + rejectPermissionsRequest: nodeify(permissionsController.rejectPermissionsRequest, permissionsController), + removePermissionsFor: permissionsController.removePermissionsFor.bind(permissionsController), + updatePermittedAccounts: nodeify(permissionsController.updatePermittedAccounts, permissionsController), + legacyExposeAccounts: nodeify(permissionsController.legacyExposeAccounts, permissionsController), + handleNewAccountSelected: nodeify(this.handleNewAccountSelected, this), + + getRequestAccountTabIds: (cb) => cb(null, this.getRequestAccountTabIds()), + getOpenMetamaskTabsIds: (cb) => cb(null, this.getOpenMetamaskTabsIds()), } } @@ -1181,6 +1142,18 @@ export default class MetamaskController extends EventEmitter { await this.preferencesController.setSelectedAddress(accounts[0]) } + /** + * Handle when a new account is selected for the given origin in the UI. + * Stores the address by origin and notifies external providers associated + * with the origin. + * @param {string} origin - The origin for which the address was selected. + * @param {string} address - The new selected address. + */ + async handleNewAccountSelected (origin, address) { + this.permissionsController.handleNewAccountSelected(origin, address) + this.preferencesController.setLastSelectedAddress(origin, address) + } + // --------------------------------------------------------------------------- // Identity Management (signature operations) diff --git a/package.json b/package.json index 3568389c75ce..d78c4ed6c3ce 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,7 @@ "redux-logger": "^3.0.6", "redux-thunk": "^2.2.0", "reselect": "^3.0.1", - "rpc-cap": "^1.0.1", + "rpc-cap": "^1.0.3", "safe-event-emitter": "^1.0.1", "single-call-balance-checker-abi": "^1.0.0", "string.prototype.matchall": "^3.0.1", diff --git a/ui/app/components/app/account-menu/account-menu.container.js b/ui/app/components/app/account-menu/account-menu.container.js index b6d067b1b3c2..de7a1a12bee1 100644 --- a/ui/app/components/app/account-menu/account-menu.container.js +++ b/ui/app/components/app/account-menu/account-menu.container.js @@ -15,6 +15,8 @@ import { getMetaMaskKeyrings, getOriginOfCurrentTab, getSelectedAddress, + // getLastSelectedAddress, + // getPermittedAccounts, } from '../../../selectors/selectors' import AccountMenu from './account-menu.component' @@ -28,12 +30,22 @@ function mapStateToProps (state) { metamask: { isAccountMenuOpen }, } = state const accounts = getMetaMaskAccountsOrdered(state) + const origin = getOriginOfCurrentTab(state) + const selectedAddress = getSelectedAddress(state) + + /** + * TODO:LoginPerSite:ui + * - propagate the relevant props below after computing them + */ + // const lastSelectedAddress = getLastSelectedAddress(state, origin) + // const permittedAccounts = getPermittedAccounts(state, origin) + // const selectedAccountIsPermitted = permittedAccounts.includes(selectedAddress) return { isAccountMenuOpen, addressConnectedDomainMap: getAddressConnectedDomainMap(state), - originOfCurrentTab: getOriginOfCurrentTab(state), - selectedAddress: getSelectedAddress(state), + originOfCurrentTab: origin, + selectedAddress: selectedAddress, keyrings: getMetaMaskKeyrings(state), accounts, shouldShowAccountsSearch: accounts.length >= SHOW_SEARCH_ACCOUNTS_MIN_COUNT, diff --git a/ui/app/selectors/permissions.js b/ui/app/selectors/permissions.js new file mode 100644 index 000000000000..9399934a90a6 --- /dev/null +++ b/ui/app/selectors/permissions.js @@ -0,0 +1,48 @@ + +import { createSelector } from 'reselect' +import { + CAVEAT_NAMES, +} from '../../../app/scripts/controllers/permissions/enums' + +const permissionsSelector = (state, origin) => { + return origin && state.metamask.domains && state.metamask.domains[origin] +} + +// all permissions for the origin probably too expensive for deep equality check +const accountsPermissionSelector = createSelector( + permissionsSelector, + (domain = {}) => { + + return ( + Array.isArray(domain.permissions) + ? domain.permissions.find( + perm => perm.parentCapability === 'eth_accounts' + ) + : {} + ) + } +) + +/** + * Selects the permitted accounts from an eth_accounts permission. + * Expects input from accountsPermissionsSelector. + * @returns - An empty array or an array of accounts. + */ +export const getPermittedAccounts = createSelector( + accountsPermissionSelector, // deep equal check performed on this output + (accountsPermission = {}) => { + + const accountsCaveat = ( + Array.isArray(accountsPermission.caveats) && + accountsPermission.caveats.find( + c => c.name === CAVEAT_NAMES.exposedAccounts + ) + ) + + return ( + accountsCaveat && Array.isArray(accountsCaveat.value) + ? accountsCaveat.value + : [] + ) + } +) diff --git a/ui/app/selectors/selectors.js b/ui/app/selectors/selectors.js index bb2ae21c9f13..74c49c558663 100644 --- a/ui/app/selectors/selectors.js +++ b/ui/app/selectors/selectors.js @@ -12,6 +12,10 @@ import { getOriginFromUrl, } from '../helpers/utils/util' +import { getPermittedAccounts } from './permissions' + +export { getPermittedAccounts } from './permissions' + export function getNetworkIdentifier (state) { const { metamask: { @@ -97,6 +101,21 @@ export function getSelectedAddress (state) { return selectedAddress } +function lastSelectedAddressSelector (state, origin) { + return state.metamask.lastSelectedAddressByOrigin[origin] || null +} + +// not using reselect here since the returns are contingent; +// we have no reasons to recompute the permitted accounts if there +// exists a lastSelectedAddress +export function getLastSelectedAddress (state, origin) { + return ( + lastSelectedAddressSelector(state, origin) || + getPermittedAccounts(state, origin)[0] || // always returns array + getSelectedAddress(state) + ) +} + export function getSelectedIdentity (state) { const selectedAddress = getSelectedAddress(state) const identities = state.metamask.identities diff --git a/ui/app/store/actions.js b/ui/app/store/actions.js index 2f953e682334..e090ae3e6d91 100644 --- a/ui/app/store/actions.js +++ b/ui/app/store/actions.js @@ -1258,6 +1258,7 @@ export function showAccountDetail (address) { if (err) { return dispatch(displayWarning(err.message)) } + background.handleNewAccountSelected(origin, address) dispatch(updateTokens(tokens)) dispatch({ type: actionConstants.SHOW_ACCOUNT_DETAIL, @@ -2303,6 +2304,7 @@ export function legacyExposeAccounts (origin, accounts) { export function removePermissionsFor (domains) { return () => { background.removePermissionsFor(domains) + background.removeLastSelectedAddressesFor(Object.keys(domains)) } } @@ -2312,6 +2314,7 @@ export function removePermissionsFor (domains) { export function clearPermissions () { return () => { background.clearPermissions() + background.clearLastSelectedAddressHistory() } } diff --git a/yarn.lock b/yarn.lock index b0c16b8526e5..d79d6b9bf076 100644 --- a/yarn.lock +++ b/yarn.lock @@ -96,16 +96,16 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" + "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" convert-source-map "^1.7.0" debug "^4.1.0" @@ -200,10 +200,10 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" + integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== dependencies: "@babel/types" "^7.8.3" jsesc "^2.5.1" @@ -523,13 +523,13 @@ "@babel/traverse" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/helpers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" + integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ== dependencies: "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" + "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" "@babel/highlight@7.0.0-beta.51": @@ -569,10 +569,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== -"@babel/parser@^7.1.0", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== +"@babel/parser@^7.1.0", "@babel/parser@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" + integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== "@babel/parser@^7.4.3": version "7.4.5" @@ -1290,9 +1290,9 @@ regenerator-runtime "^0.13.2" "@babel/runtime@^7.5.0", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" - integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" + integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== dependencies: regenerator-runtime "^0.13.2" @@ -1401,16 +1401,16 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/traverse@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" + integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" + "@babel/generator" "^7.8.3" "@babel/helper-function-name" "^7.8.3" "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" + "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" debug "^4.1.0" globals "^11.1.0" @@ -2219,11 +2219,11 @@ any-observable "^0.3.0" "@sentry/browser@^5.11.1": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.11.2.tgz#f0b19bd97e9f09a20e9f93a9835339ed9ab1f5a4" - integrity sha512-ls6ARX5m+23ld8OsuoPnR+kehjR5ketYWRcDYlmJDX2VOq5K4EzprujAo8waDB0o5a92yLXQ0ZSoK/zzAV2VoA== + version "5.11.1" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.11.1.tgz#337ffcb52711b23064c847a07629e966f54a5ebb" + integrity sha512-oqOX/otmuP92DEGRyZeBuQokXdeT9HQRxH73oqIURXXNLMP3PWJALSb4HtT4AftEt/2ROGobZLuA4TaID6My/Q== dependencies: - "@sentry/core" "5.11.2" + "@sentry/core" "5.11.1" "@sentry/types" "5.11.0" "@sentry/utils" "5.11.1" tslib "^1.9.3" @@ -2240,21 +2240,21 @@ progress "2.0.0" proxy-from-env "^1.0.0" -"@sentry/core@5.11.2": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.11.2.tgz#f2d9d37940d291dbcb9a9e4a012f76919474bdf6" - integrity sha512-IFCXGy7ebqIq/Kb8RVryCo/SjwhPcrfBmOjkicr4+DxN1UybLre2N3p9bejQMPIteOfDVHlySLYeipjTf+mxZw== +"@sentry/core@5.11.1": + version "5.11.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.11.1.tgz#9e2da485e196ae32971545c1c49ee6fe719930e2" + integrity sha512-BpvPosVNT20Xso4gAV54Lu3KqDmD20vO63HYwbNdST5LUi8oYV4JhvOkoBraPEM2cbBwQvwVcFdeEYKk4tin9A== dependencies: - "@sentry/hub" "5.11.2" - "@sentry/minimal" "5.11.2" + "@sentry/hub" "5.11.1" + "@sentry/minimal" "5.11.1" "@sentry/types" "5.11.0" "@sentry/utils" "5.11.1" tslib "^1.9.3" -"@sentry/hub@5.11.2": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.11.2.tgz#a3b7ec27cd4cea2cddd75c372fbf1b4bc04c6aae" - integrity sha512-5BiDin6ZPsaiTm29rCC41MAjP1vOaKniqfjtXHVPm7FeOBA2bpHm95ncjLkshKGJTPfPZHXTpX/1IZsHrfGVEA== +"@sentry/hub@5.11.1": + version "5.11.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.11.1.tgz#ddcb865563fae53852d405885c46b4c6de68a91b" + integrity sha512-ucKprYCbGGLLjVz4hWUqHN9KH0WKUkGf5ZYfD8LUhksuobRkYVyig0ZGbshECZxW5jcDTzip4Q9Qimq/PkkXBg== dependencies: "@sentry/types" "5.11.0" "@sentry/utils" "5.11.1" @@ -2269,12 +2269,12 @@ "@sentry/utils" "5.11.1" tslib "^1.9.3" -"@sentry/minimal@5.11.2": - version "5.11.2" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.11.2.tgz#ae417699342266ecd109a97e53cd9519c0893b21" - integrity sha512-oNuJuz3EZhVtamzABmPdr6lcYo06XHLWb2LvgnoNaYcMD1ExUSvhepOSyZ2h5STCMbmVgGVfXBNPV9RUTp8GZg== +"@sentry/minimal@5.11.1": + version "5.11.1" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.11.1.tgz#0e705d01a567282d8fbbda2aed848b4974cc3cec" + integrity sha512-HK8zs7Pgdq7DsbZQTThrhQPrJsVWzz7MaluAbQA0rTIAJ3TvHKQpsVRu17xDpjZXypqWcKCRsthDrC4LxDM1Bg== dependencies: - "@sentry/hub" "5.11.2" + "@sentry/hub" "5.11.1" "@sentry/types" "5.11.0" tslib "^1.9.3" @@ -2335,16 +2335,16 @@ integrity sha512-+uM1YZ4MhBC82vt99prF7DXNGqhYmJ9cQ3p5qNowMNkkzn9OWEkqBvguBW3ChAt7JvqZ3SD5HJOfc6YgnfMTHw== "@storybook/addon-actions@^5.2.8": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.10.tgz#08cfaa656a787990260e73e5b556efd903a92dcc" - integrity sha512-k4LT2pMiUm3WljBGWGlMsPVJhmESfLiyos0BV2apLIXEVb0L/O8rEJtZ9GBEab63lZVb4Yxo0yGbGIk6In13bQ== - dependencies: - "@storybook/addons" "5.3.10" - "@storybook/api" "5.3.10" - "@storybook/client-api" "5.3.10" - "@storybook/components" "5.3.10" - "@storybook/core-events" "5.3.10" - "@storybook/theming" "5.3.10" + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.9.tgz#fc8b1d912c87f418e69c2b52031d29465bb4867b" + integrity sha512-saTxUXnu8O8pE1G2yPDY8NbvK+qZS27HcoeN3HzU/ooAQDffMTnreU4C8LU6/yKAx4KBDvXS4oyiBguOlQfIgg== + dependencies: + "@storybook/addons" "5.3.9" + "@storybook/api" "5.3.9" + "@storybook/client-api" "5.3.9" + "@storybook/components" "5.3.9" + "@storybook/core-events" "5.3.9" + "@storybook/theming" "5.3.9" core-js "^3.0.1" fast-deep-equal "^2.0.1" global "^4.3.2" @@ -2355,16 +2355,16 @@ uuid "^3.3.2" "@storybook/addon-knobs@^5.2.8": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.3.10.tgz#3dbb6046f2e625a9f6ef22e1b5660c9976f4f842" - integrity sha512-0mroTdXQItWOotswyo2e+P+Xmt4O+AyuVegRE3K5/2w/WMf2ku/YdRzH0uPgYS+y8PD0j3vDcTXt1UFnzjv8eg== - dependencies: - "@storybook/addons" "5.3.10" - "@storybook/api" "5.3.10" - "@storybook/client-api" "5.3.10" - "@storybook/components" "5.3.10" - "@storybook/core-events" "5.3.10" - "@storybook/theming" "5.3.10" + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.3.9.tgz#b51be01731dd31ad1b883276acdbeabedc0b7095" + integrity sha512-blMiksvApq4lGiZM1A8FpwnIOXC0PsBXja0LkWQDDHN+snREzjZV85XLrYdz688RhN/7MTXZXMgsvRMSug/r3g== + dependencies: + "@storybook/addons" "5.3.9" + "@storybook/api" "5.3.9" + "@storybook/client-api" "5.3.9" + "@storybook/components" "5.3.9" + "@storybook/core-events" "5.3.9" + "@storybook/theming" "5.3.9" "@types/react-color" "^3.0.1" copy-to-clipboard "^3.0.8" core-js "^3.0.1" @@ -2378,31 +2378,31 @@ react-lifecycles-compat "^3.0.4" react-select "^3.0.8" -"@storybook/addons@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.10.tgz#60a969329fdee455a491e95e9f2ed982faa97e65" - integrity sha512-n+cQrXHIiasyqWvthg9y51OCEmjmKWMrX2XQcG1i+9J9RCNkLQ77Tj3LWefT5dJbi77Fa2/TzOShRiQqaaFNiQ== +"@storybook/addons@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.9.tgz#f2492de356e0cd38e3da357f4dafa058a4756e36" + integrity sha512-LrlO6nQ4S6yroFuG9Pn1rXhg0AjT/jx7UKZjZTJNqo4ZdPy88QhQO0ClbOVL+KhUiY773zEBYIk0BvwA3WYtSQ== dependencies: - "@storybook/api" "5.3.10" - "@storybook/channels" "5.3.10" - "@storybook/client-logger" "5.3.10" - "@storybook/core-events" "5.3.10" + "@storybook/api" "5.3.9" + "@storybook/channels" "5.3.9" + "@storybook/client-logger" "5.3.9" + "@storybook/core-events" "5.3.9" core-js "^3.0.1" global "^4.3.2" util-deprecate "^1.0.2" -"@storybook/api@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.10.tgz#45927f7cbba111842729f85f8f9a38ab2c0d3793" - integrity sha512-vyRpZgMECc0Er1mBsr6o43aZQ3KA2Zin38AQo/5oW7sE+tCsjHSljhxB7+qlrf9FuheU4PWqV4KAKp52WHwFhg== +"@storybook/api@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.9.tgz#090119c6fd4082442e926a434d3d171535ec6784" + integrity sha512-ix6WS880K5C3H4wjEN0IKqIlVNV0f7zHgvyRf8maL1UFEya5wkBkZg9REDOiCH0tSByzRN73NmPdII3Q1FoAvA== dependencies: "@reach/router" "^1.2.1" - "@storybook/channels" "5.3.10" - "@storybook/client-logger" "5.3.10" - "@storybook/core-events" "5.3.10" + "@storybook/channels" "5.3.9" + "@storybook/client-logger" "5.3.9" + "@storybook/core-events" "5.3.9" "@storybook/csf" "0.0.1" - "@storybook/router" "5.3.10" - "@storybook/theming" "5.3.10" + "@storybook/router" "5.3.9" + "@storybook/theming" "5.3.9" "@types/reach__router" "^1.2.3" core-js "^3.0.1" fast-deep-equal "^2.0.1" @@ -2417,34 +2417,34 @@ telejson "^3.2.0" util-deprecate "^1.0.2" -"@storybook/channel-postmessage@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.10.tgz#0d5ede72e4057a20b5c2ad5d871134f3cba54b78" - integrity sha512-YHc6FCc9RSpDoYfa1LUGNwHXKx3KjW1m5Q86g86sV8Rnj+guy5atDRSmL2i/OKTONQO4Edp1er+UGFzyUd+a2Q== +"@storybook/channel-postmessage@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.9.tgz#3846ae7ea5bc2fe36b1ef64fbc215f480cf8a189" + integrity sha512-gMzPwxTsN0Xgpd01ERlC2lpJzzeOMgP+eSruHh1pwieplL8CEctn8HV1eXrAtF/JtFIXjd4jkoRHAwRptHuJ2w== dependencies: - "@storybook/channels" "5.3.10" - "@storybook/client-logger" "5.3.10" + "@storybook/channels" "5.3.9" + "@storybook/client-logger" "5.3.9" core-js "^3.0.1" global "^4.3.2" telejson "^3.2.0" -"@storybook/channels@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.10.tgz#6556b0fbe99bc0234a9a54de3c94e9e1cf55e4e3" - integrity sha512-VbXhwCQ6T7VMhD/YTBqvkWDnnl9CsZLL9MLameM4E+WxLrGpxHIl7sSvJ5av5YPgJPxaNJpPMeVSxdi5u4quxg== +"@storybook/channels@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.9.tgz#7ee8f6e6f4c9465227120d6711805b5e6862107f" + integrity sha512-8JFTDTI4hQyAJPDBgwnK99lye2oyxEheko4vD2Pv5M7LblcFBZJuCRhO5wiBsgHi5eV4srSD9kuBsPkYSxB2Xw== dependencies: core-js "^3.0.1" -"@storybook/client-api@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.10.tgz#74c9c36a62d653f5eb29ceb84c3acbec19aad254" - integrity sha512-bYFgdzsaxdlWlZzNpDqWWLUaX31rc4xHdyy1MJ+dl65AnubPrLacvvqSCVYK+VdRAWHX+T7Bcvt2sRtwka7oEQ== +"@storybook/client-api@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.9.tgz#43ae2651bf303e832e97c014fd6c77a523669fd9" + integrity sha512-c2AO8R/CKJfOGCQxWva6te7Fhlbs+6nzBj14rnb+BC6e7zORuozLNugGXTc7w2aR7manI86WFjSWWfzX64Jr3w== dependencies: - "@storybook/addons" "5.3.10" - "@storybook/channel-postmessage" "5.3.10" - "@storybook/channels" "5.3.10" - "@storybook/client-logger" "5.3.10" - "@storybook/core-events" "5.3.10" + "@storybook/addons" "5.3.9" + "@storybook/channel-postmessage" "5.3.9" + "@storybook/channels" "5.3.9" + "@storybook/client-logger" "5.3.9" + "@storybook/core-events" "5.3.9" "@storybook/csf" "0.0.1" "@types/webpack-env" "^1.15.0" core-js "^3.0.1" @@ -2458,20 +2458,20 @@ ts-dedent "^1.1.0" util-deprecate "^1.0.2" -"@storybook/client-logger@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.10.tgz#3f1ab223ccc5389004f76d9cab792083003d1db9" - integrity sha512-WCgXrr44Z8ScDiAVju5WLdm0am0JALo1XvUir1uP7j0f/h38/yA1+Jk1wXzAISdqOQN/CLl+o1H66rntEh/ijA== +"@storybook/client-logger@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.9.tgz#06654be9caa8d37366270b0426c2d5acb217f504" + integrity sha512-EbA9id/Fk2BZkIWGSICYh+Iu4j7JFRZce4Lp69/MPmHpQk8YKnjL6NdxGsHj/83OFQ9CCbtqNOBzBdtiCy/23w== dependencies: core-js "^3.0.1" -"@storybook/components@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.10.tgz#09cb0e931ff27d90ded3b94b8d4cd1ac52007c52" - integrity sha512-azGOazbkAJguGLZ7MOA8ZMh+Y2MTxhOcT7+jCVyl/AqpYuKjRR8cogZCWkbg5DnQsj79XNBr4eFWJ64m8dlUZw== +"@storybook/components@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.9.tgz#1fbc688770889ddadb8c603f5a4dbcf987f3eb0f" + integrity sha512-R4xDR3pIYu7yPHex6DG3PPC3ekLgQuG03ZMQEgCfmWdl2wKXcLtEfQPYLRpC59xnQobfR3wqWgqrGchW54HPow== dependencies: - "@storybook/client-logger" "5.3.10" - "@storybook/theming" "5.3.10" + "@storybook/client-logger" "5.3.9" + "@storybook/theming" "5.3.9" "@types/react-syntax-highlighter" "11.0.2" "@types/react-textarea-autosize" "^4.3.3" core-js "^3.0.1" @@ -2492,33 +2492,33 @@ simplebar-react "^1.0.0-alpha.6" ts-dedent "^1.1.0" -"@storybook/core-events@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.10.tgz#3fa271f5f47ec9822c488b91d4ea7c298eb7ed6c" - integrity sha512-HxE8inbyoBtKqUR6cnNHBvHI55nRLYf8RGEB7BuazYtF5v2FBFRghngKJ+4ELz0Rw9Hv2jiU93S6zfTaOg6euw== +"@storybook/core-events@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.9.tgz#3c7fbc20204ae4b937c896ed6281e782cc09c4aa" + integrity sha512-JFnVjOHMnxbArIHEGuVvAcQuwf0l2yUJEsx5zJZ6OkCOFXKGDjqATGNtyZEOhVXTwONIWT6Y6ZTfKZLmdiSksQ== dependencies: core-js "^3.0.1" -"@storybook/core@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.10.tgz#862574b61da6f484facb40fed48ad99badf42574" - integrity sha512-KdCsfT8XZsPbyB90YRJJVVh7cac6TZhb0+xtEgepH8JozePrHwWRpt7y37u8XnFewnvsaUvWvRKcQiC6/K1oTg== +"@storybook/core@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.9.tgz#a13149714c46788555641124ed4f9fb7359e4550" + integrity sha512-AsyNLlFczEz5wGu92fJA6ioiSkUtK2Qgr+fXNOAFXA/FLhgBIijsNoAvEwkfCs8Koe3xNkbMRE1Tk4WRIl0kCw== dependencies: "@babel/plugin-proposal-class-properties" "^7.7.0" "@babel/plugin-proposal-object-rest-spread" "^7.6.2" "@babel/plugin-syntax-dynamic-import" "^7.2.0" "@babel/plugin-transform-react-constant-elements" "^7.2.0" "@babel/preset-env" "^7.4.5" - "@storybook/addons" "5.3.10" - "@storybook/channel-postmessage" "5.3.10" - "@storybook/client-api" "5.3.10" - "@storybook/client-logger" "5.3.10" - "@storybook/core-events" "5.3.10" + "@storybook/addons" "5.3.9" + "@storybook/channel-postmessage" "5.3.9" + "@storybook/client-api" "5.3.9" + "@storybook/client-logger" "5.3.9" + "@storybook/core-events" "5.3.9" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "5.3.10" - "@storybook/router" "5.3.10" - "@storybook/theming" "5.3.10" - "@storybook/ui" "5.3.10" + "@storybook/node-logger" "5.3.9" + "@storybook/router" "5.3.9" + "@storybook/theming" "5.3.9" + "@storybook/ui" "5.3.9" airbnb-js-shims "^2.2.1" ansi-to-html "^0.6.11" autoprefixer "^9.7.2" @@ -2585,10 +2585,10 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.10.tgz#5bf4b8ce352901cd629401cc903b15e423ccd76c" - integrity sha512-ivasRTdJPFj9qi9q4ozkn6lhWi16cubf9AZwC5Or5HJE4OJkSsowecJBu28l2p887yexDkCDazOIvR9XtEIoIA== +"@storybook/node-logger@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.9.tgz#5de49697b5e2565a4a84bd56244a424368f5e726" + integrity sha512-Uxk7YjlIMkf5Bsyw/EOdlYa4JT3m+FUqb5bV+vtkfzPhzKA9FLdSFEh5OVKct4lG74XxOgaKWJxudINeWKz0qQ== dependencies: "@types/npmlog" "^4.1.2" chalk "^3.0.0" @@ -2598,16 +2598,16 @@ regenerator-runtime "^0.13.3" "@storybook/react@^5.2.8": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.3.10.tgz#86e7746ee7a59245ccbd81635409232e52ca17ca" - integrity sha512-EPGPs6ZCsHfSec18LTdOymxOZPjRp0Lmm4Q27mRNyaiH91sc43KndnT9ajq+/9VvsC8KrNWc6trTZjceLd3auw== + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.3.9.tgz#cf3a954b5d0430c5a3558ea5df305bb70e2af3cd" + integrity sha512-pOc6xw1c83fUnTRcCpIrtLLDKkZUhW3EkNvwYyMHrGXMRcgDETAlpoxBMHXpnbfV7qaAsE/UAVQQ1rRq5pgPBA== dependencies: "@babel/plugin-transform-react-constant-elements" "^7.6.3" "@babel/preset-flow" "^7.0.0" "@babel/preset-react" "^7.0.0" - "@storybook/addons" "5.3.10" - "@storybook/core" "5.3.10" - "@storybook/node-logger" "5.3.10" + "@storybook/addons" "5.3.9" + "@storybook/core" "5.3.9" + "@storybook/node-logger" "5.3.9" "@svgr/webpack" "^4.0.3" "@types/webpack-env" "^1.15.0" babel-plugin-add-react-displayname "^0.0.5" @@ -2616,7 +2616,7 @@ core-js "^3.0.1" global "^4.3.2" lodash "^4.17.15" - mini-css-extract-plugin "^0.9.0" + mini-css-extract-plugin "^0.8.0" prop-types "^15.7.2" react-dev-utils "^9.0.0" regenerator-runtime "^0.13.3" @@ -2624,10 +2624,10 @@ ts-dedent "^1.1.0" webpack "^4.33.0" -"@storybook/router@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.10.tgz#a30f2694f4fa586ce4e398d02d4db7b70161551d" - integrity sha512-WQwsiOnvhqtAi7LKDygI03vk/CJG23/jqRtqDvjEhf2K3oRQmW3ZpPZkt6/W+UTkRlzp2bYMZFBYa0/HxEYITQ== +"@storybook/router@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.9.tgz#3c6e01f4dced9de8e8c5c314352fdc437f2441c2" + integrity sha512-z7ptxekGRAXP7hU74wdfeFY/ugrHXtpQcAM1X0k4tvbasJpm+fvqAD3yEYQpfEDL7cLlHEFLbOm6xDqtf1e5qQ== dependencies: "@reach/router" "^1.2.1" "@storybook/csf" "0.0.1" @@ -2650,14 +2650,14 @@ shelljs "^0.8.1" yargs "^11.0.0" -"@storybook/theming@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.10.tgz#6f53df9684d998ce3dfdb22babfaeb667b7f250d" - integrity sha512-5/RQQS6u7BuJ8ufiqohAZ6EBLi6PwvJ3KcLMU21Dces/i0/e/HukXzUJVS0DVOno4bROkf98fYIv+MetpvIX+g== +"@storybook/theming@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.9.tgz#caaeea398f9e630394298ccfe8f36a185a289e4f" + integrity sha512-1vG+H1D5j2vcMv54eEKixAoa4UlTuS/dxMZubJfcZYY1PDNtnvQM6B1CE/4EU+qsIYPFQiGFXB4b6gjCFYIFpQ== dependencies: "@emotion/core" "^10.0.20" "@emotion/styled" "^10.0.17" - "@storybook/client-logger" "5.3.10" + "@storybook/client-logger" "5.3.9" core-js "^3.0.1" deep-object-diff "^1.1.0" emotion-theming "^10.0.19" @@ -2668,20 +2668,20 @@ resolve-from "^5.0.0" ts-dedent "^1.1.0" -"@storybook/ui@5.3.10": - version "5.3.10" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.10.tgz#7af027773f8fa300c02447455b85d26d8a762b13" - integrity sha512-YVsFL7ZF2reDhubwjafyJK+eKKo5n9Np+VRMPnjeqpjd3+/N70Wg4VnT/AqgKrCXfCGExit+CVf3wbwBpnP1Kw== +"@storybook/ui@5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.9.tgz#7e084ef93abb90b50ac18d4eea879c1f16b3e741" + integrity sha512-J1ktdeNaEGJmJUNFPGej71eVmjKct9DXaZq88eY3hwjrdfbBIPFrF6kUcAiP4SY900VlwMKuEtUJDcJpz55FYw== dependencies: "@emotion/core" "^10.0.20" - "@storybook/addons" "5.3.10" - "@storybook/api" "5.3.10" - "@storybook/channels" "5.3.10" - "@storybook/client-logger" "5.3.10" - "@storybook/components" "5.3.10" - "@storybook/core-events" "5.3.10" - "@storybook/router" "5.3.10" - "@storybook/theming" "5.3.10" + "@storybook/addons" "5.3.9" + "@storybook/api" "5.3.9" + "@storybook/channels" "5.3.9" + "@storybook/client-logger" "5.3.9" + "@storybook/components" "5.3.9" + "@storybook/core-events" "5.3.9" + "@storybook/router" "5.3.9" + "@storybook/theming" "5.3.9" copy-to-clipboard "^3.0.8" core-js "^3.0.1" core-js-pure "^3.0.1" @@ -2820,10 +2820,10 @@ dependencies: defer-to-connect "^1.0.1" -"@szmarczak/http-timer@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-3.1.1.tgz#8b876acd14a4f36ad274468910ee858241e356ad" - integrity sha512-F7vS53bV9NXT+mmYFeSBr2nXaOI1h6qxdlLDVP+4CPG/c60MMStT7aaqYD2TSNWob1DA3GH9ikFY0UW31bUsWA== +"@szmarczak/http-timer@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.0.tgz#309789ccb7842ff1e41848cf43da587f78068836" + integrity sha512-3yoXv8OtGr/r3R5gaWWNQ3VUoQ5G3Gmo8DXX95V14ZVvE2b7Pj6Ide9uIDON8ym4D/ItyfL9ejohYUPqOyvRXw== dependencies: defer-to-connect "^1.1.1" @@ -2861,9 +2861,9 @@ "@babel/types" "^7.3.0" "@types/bn.js@^4.11.3": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.5.tgz#40e36197433f78f807524ec623afcf0169ac81dc" - integrity sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng== + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" @@ -2900,9 +2900,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/express-serve-static-core@^4.16.9": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.1.tgz#82be64a77211b205641e0209096fd3afb62481d3" - integrity sha512-9e7jj549ZI+RxY21Cl0t8uBnWyb22HzILupyHZjYEVK//5TT/1bZodU+yUbLnPdoYViBBnNWbxp4zYjGV0zUGw== + version "4.17.2" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.2.tgz#f6f41fa35d42e79dbf6610eccbb2637e6008a0cf" + integrity sha512-El9yMpctM6tORDAiBwZVLMcxoTMcqqRO9dVyYcn7ycLWbvR8klrDn8CAOwRfZujZtWD7yS/mshTdz43jMOejbg== dependencies: "@types/node" "*" "@types/range-parser" "*" @@ -3012,20 +3012,15 @@ integrity sha512-xXD08vZsvpv4xptQXj1+ky22f7ZoKu5ZNI/4l+/BXG3X+XaeZsmaFbbTKuhSE3NjjvRuZFxFf9sQBMXIcZNFMQ== "@types/node@^12.7.7": - version "12.12.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.22.tgz#b8d9eae3328b96910a373cf06ac8d3c5abe9c200" - integrity sha512-r5i93jqbPWGXYXxianGATOxTelkp6ih/U0WVnvaqAvTqM+0U6J3kw6Xk6uq/dWNRkEVw/0SLcO5ORXbVNz4FMQ== + version "12.12.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.26.tgz#213e153babac0ed169d44a6d919501e68f59dea9" + integrity sha512-UmUm94/QZvU5xLcUlNR8hA7Ac+fGpO1EG/a8bcWVz0P0LqtxFmun9Y2bbtuckwGboWJIT70DoWq1r3hb56n3DA== "@types/node@^8.10.11": version "8.10.48" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.48.tgz#e385073561643a9ba6199a1985ffc03530f90781" integrity sha512-c35YEBTkL4rzXY2ucpSKy+UYHjUBIIkuJbWYbsGIrKLEWU5dgJMmLkkIb3qeC3O3Tpb1ZQCwecscvJTDjDjkRw== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - "@types/npmlog@^4.1.2": version "4.1.2" resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.2.tgz#d070fe6a6b78755d1092a3dc492d34c3d8f871c4" @@ -3131,9 +3126,9 @@ "@types/vfile-message" "*" "@types/webpack-env@^1.15.0": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.1.tgz#c8e84705e08eed430b5e15b39c65b0944e4d1422" - integrity sha512-eWN5ElDTeBc5lRDh95SqA8x18D0ll2pWudU3uWiyfsRmIZcmUXpEsxPU+7+BsdCrO2vfLRC629u/MmjbmF+2tA== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.0.tgz#bd9956d5044b1fb43e869a9ba9148862ff98d9fd" + integrity sha512-TfcyNecCz8Z9/s90gBOBniyzZrTru8u2Vp0VZODq4KEBaQu8bfXvu7o/KUOecMpzjbFPUA7aqgSq628Iue5BQg== "@types/yargs-parser@*": version "15.0.0" @@ -3141,9 +3136,9 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== + version "13.0.6" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.6.tgz#6aed913a92c262c13b94d4bca8043237de202124" + integrity sha512-IkltIncDQWv6fcAvnHtJ6KtkmY/vtR3bViOaCzpj/A3yNhlfZAgxNe6AEQD1cQrkYD+YsKVo08DSxvNKEsD7BA== dependencies: "@types/yargs-parser" "*" @@ -4015,7 +4010,15 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.0.tgz#5681f0dcf7ae5880a7841d8831c4724ed9cc0172" + integrity sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +ansi-styles@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== @@ -4487,10 +4490,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1, assert@^1.3.0, assert@^1.4.0, assert@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: + object-assign "^4.1.1" util "0.10.3" assertion-error@^1.0.1: @@ -6457,13 +6461,13 @@ browserslist@^4.6.0, browserslist@^4.6.3: node-releases "^1.1.29" browserslist@^4.8.3: - version "4.8.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" - integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== + version "4.8.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3" + integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg== dependencies: - caniuse-lite "^1.0.30001023" - electron-to-chromium "^1.3.341" - node-releases "^1.1.47" + caniuse-lite "^1.0.30001022" + electron-to-chromium "^1.3.338" + node-releases "^1.1.46" bs58@4.0.1, bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" @@ -6753,12 +6757,12 @@ cache-content-type@^1.0.0: mime-types "^2.1.18" ylru "^1.2.0" -cacheable-lookup@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-0.2.1.tgz#f474ae2c686667d7ea08c43409ad31b2b31b26c2" - integrity sha512-BQ8MRjxJASEq2q+w0SusPU3B054gS278K8sj58QCLMZIso5qG05+MdCdmXxuyVlfvI8h4bPsNOavVUauVCGxrg== +cacheable-lookup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-1.0.0.tgz#ae877296b7b43b720e4a4554c47ec85e74d0932a" + integrity sha512-Te7MkBWBEPUdLjFWLoIu61osWKjrvBdBrSxEso6T9iGLTDPhcA2PI6J++lF/Hmqi5HtZmkKN3q/C7gwa+U/EUg== dependencies: - keyv "^3.1.0" + keyv "^4.0.0" cacheable-request@^2.1.1: version "2.1.4" @@ -6786,15 +6790,15 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -cacheable-request@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.0.tgz#12421aa084e943ec81eac8c93e56af90c624788a" - integrity sha512-UVG4gMn3WjnAeFBBx7RFoprgOANIAkMwN5Dta6ONmfSwrCxfm0Ip7g0mIBxIRJZX9aDsoID0Ry3dU5Pr0csKKA== +cacheable-request@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.1.tgz#062031c2856232782ed694a257fa35da93942a58" + integrity sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" - keyv "^3.0.0" + keyv "^4.0.0" lowercase-keys "^2.0.0" normalize-url "^4.1.0" responselike "^2.0.0" @@ -6898,9 +6902,9 @@ camelcase-keys@^4.0.0: quick-lru "^1.0.0" camelcase-keys@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.1.1.tgz#0d24dde78cea4c7d2da7f4ea40b7995083328c8d" - integrity sha512-kEPCddRFChEzO0d6w61yh0WbBiSv9gBnfZWGfXRYPlGqIdIGef6HMR6pgqVSEWCYkrp8B0AtEpEXNY+Jx0xk1A== + version "6.1.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.1.2.tgz#531a289aeea93249b63ec1249db9265f305041f7" + integrity sha512-QfFrU0CIw2oltVvpndW32kuJ/9YOJwUnmWrjlXt1nnJZHCaS9i6bfOpg9R4Lw8aZjStkJWM+jc0cdXjWBgVJSw== dependencies: camelcase "^5.3.1" map-obj "^4.0.0" @@ -6946,7 +6950,7 @@ caniuse-lite@^1.0.30000810, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.300009 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz#823054210be638c725521edcb869435dae46728d" integrity sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg== -caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001023: +caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001022: version "1.0.30001023" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz#b82155827f3f5009077bdd2df3d8968bcbcc6fc4" integrity sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA== @@ -7337,12 +7341,7 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.4, classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" - integrity sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0= - -classnames@^2.2.6: +classnames@^2.2.4, classnames@^2.2.5, classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== @@ -7778,6 +7777,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +compare-versions@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.5.1.tgz#26e1f5cf0d48a77eced5046b9f67b6b61075a393" + integrity sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg== + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -7799,11 +7803,11 @@ component-inherit@0.0.3: integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= compressible@~2.0.14: - version "2.0.17" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" - integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: - mime-db ">= 1.40.0 < 2" + mime-db ">= 1.43.0 < 2" compression@1.7.3: version "1.7.3" @@ -8112,16 +8116,11 @@ core-js@^3.0.1: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.1.3.tgz#95700bca5f248f5f78c0ec63e784eca663ec4138" integrity sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA== -core-js@^3.0.4: +core-js@^3.0.4, core-js@^3.1.4: version "3.6.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== -core-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.0.tgz#2b854e451de1967d1e29896025cdc13a2518d9ea" - integrity sha512-AHPTNKzyB+YwgDWoSOCaid9PUSEF6781vsfiK8qUz62zRR448/XgK2NtCbpiUGizbep8Lrpt0Du19PpGGZvw3Q== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -8158,7 +8157,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.0, cosmiconfig@^5.2.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.0.0, cosmiconfig@^5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -9188,9 +9187,9 @@ defer-to-connect@^1.0.1: integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== defer-to-connect@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.1.tgz#88ae694b93f67b81815a2c8c769aef6574ac8f2f" - integrity sha512-J7thop4u3mRTkYRQ+Vpfwy2G5Ehoy82I14+14W4YMDLKdWloI9gSzRbV30s/NckQGVJtPkWNcW4oMAUigTdqiQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== deferred-leveldown@~1.2.1: version "1.2.2" @@ -9304,20 +9303,6 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" -del@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" - integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== - dependencies: - globby "^10.0.1" - graceful-fs "^4.2.2" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.1" - p-map "^3.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -9992,10 +9977,10 @@ electron-to-chromium@^1.3.247: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.262.tgz#8022933e46e5a2c7b0fd1565d215872326520a7c" integrity sha512-YFr53qZWr2pWkiTUorWEhAweujdf0ALiUp8VkNa0WGtbMVR+kZ8jNy3VTCemLsA4sT6+srCqehNn8TEAD0Ngrw== -electron-to-chromium@^1.3.341: - version "1.3.344" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz#f1397a633c35e726730c24be1084cd25c3ee8148" - integrity sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw== +electron-to-chromium@^1.3.338: + version "1.3.340" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" + integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== electron-to-chromium@^1.3.47: version "1.3.52" @@ -10069,6 +10054,19 @@ elliptic@^6.4.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +elliptic@^6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -11030,9 +11028,9 @@ eth-block-tracker@^4.4.2: safe-event-emitter "^1.0.1" eth-contract-metadata@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/eth-contract-metadata/-/eth-contract-metadata-1.11.0.tgz#4d23a8208d5d53be9d4c0696ed8492b505c6bca1" - integrity sha512-Bbvio71M+lH+qXd8XXddpTc8hhjL9m4fNPOxmZFIX8z0/VooUdwV8YmmDAbkU5WVioZi+Jp1XaoO7VwzXnDboA== + version "1.12.1" + resolved "https://registry.yarnpkg.com/eth-contract-metadata/-/eth-contract-metadata-1.12.1.tgz#41014c8c0123453cee15acbcc14299c4d470c759" + integrity sha512-9u2jUcdxaKIv4RvA9RtjyD4+M2yWt4yCulR5bpdQTiG3HUFnN9lHtNL5NIRDpvQVJKerFhexrgEM2WdGP3a6VA== eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: version "2.0.8" @@ -11980,16 +11978,17 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" - integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== +execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" + human-signals "^1.1.1" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^3.0.0" + npm-run-path "^4.0.0" onetime "^5.1.0" p-finally "^2.0.0" signal-exit "^3.0.2" @@ -12746,6 +12745,13 @@ find-versions@^3.0.0: array-uniq "^2.1.0" semver-regex "^2.0.0" +find-versions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" + integrity sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww== + dependencies: + semver-regex "^2.0.0" + findup-sync@0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" @@ -13289,34 +13295,7 @@ fuse.js@^3.4.6: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.6.tgz#545c3411fed88bf2e27c457cab6e73e7af697a45" integrity sha512-H6aJY4UpLFwxj1+5nAvufom5b2BT2v45P1MkPvdGIK8fWjQx/7o6tTT1+ALV0yawQvbmvCF0ufl2et8eJ7v7Cg== -gaba@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/gaba/-/gaba-1.9.1.tgz#2e096889aca74eb5946b55a3922427314b5dca22" - integrity sha512-YsKG4+Ql3D6v4cnMgH7P8c9JqQb74y6gkIhySLd1BYwFZQTXn27u16cYfoxPtqeGfTFhus9h4CpxAr8s8bsvCA== - dependencies: - await-semaphore "^0.1.3" - eth-contract-metadata "^1.11.0" - eth-ens-namehash "^2.0.8" - eth-json-rpc-infura "^4.0.1" - eth-keyring-controller "^5.3.0" - eth-method-registry "1.1.0" - eth-phishing-detect "^1.1.13" - eth-query "^2.1.2" - eth-sig-util "^2.3.0" - ethereumjs-util "^6.1.0" - ethereumjs-wallet "0.6.0" - ethjs-query "^0.3.8" - human-standard-collectible-abi "^1.0.2" - human-standard-token-abi "^2.0.0" - isomorphic-fetch "^2.2.1" - jsonschema "^1.2.4" - percentile "^1.2.1" - single-call-balance-checker-abi "^1.0.0" - uuid "^3.3.2" - web3 "^0.20.7" - web3-provider-engine "^15.0.4" - -gaba@^1.9.3: +gaba@^1.6.0, gaba@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/gaba/-/gaba-1.9.3.tgz#4e0e106f3640930f1f06ffe72546903b4c51813e" integrity sha512-zC9CpaksncAT9SSc4QAxozUE+SKIWN+r9YwhjAJoSeh9joqPJsXlJOHg1/CrHABpvN68QdE00wAYSabYM02EqQ== @@ -13873,7 +13852,7 @@ globby@8.0.2: pify "^3.0.0" slash "^1.0.0" -globby@^10.0.0, globby@^10.0.1: +globby@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== @@ -13999,15 +13978,15 @@ got@9.6.0, got@^9.6.0: url-parse-lax "^3.0.0" got@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.2.0.tgz#c7d54e5b41881e5c64952a4013986af12dbab47f" - integrity sha512-X14b2uo+20s+HrJz9qyUmGNdIyYbRUZNE05fUz0aS4eXp1l82oUvsvFcMjwY3D25zgWwittqEQWEia0XqSlzzw== + version "10.4.0" + resolved "https://registry.yarnpkg.com/got/-/got-10.4.0.tgz#2bd869d3d965716a43bee89d6fc3d16b565109c4" + integrity sha512-yHxq0LgdLFmJcrl27wEOIvZaHbgtn1DYpYUUX/kovLZoQ8q+QwJH+i9zkldDxGUawu1cUsgNMp8Xxm5yKT2UyQ== dependencies: "@sindresorhus/is" "^1.0.0" - "@szmarczak/http-timer" "^3.1.1" + "@szmarczak/http-timer" "^4.0.0" "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^0.2.1" - cacheable-request "^7.0.0" + cacheable-lookup "^1.0.0" + cacheable-request "^7.0.1" decompress-response "^5.0.0" duplexer3 "^0.1.4" get-stream "^5.0.0" @@ -14016,7 +13995,7 @@ got@^10.2.0: p-cancelable "^2.0.0" responselike "^2.0.0" to-readable-stream "^2.0.0" - type-fest "^0.8.0" + type-fest "^0.9.0" got@^6.7.1: version "6.7.1" @@ -15000,6 +14979,11 @@ https-proxy-agent@3.0.0, https-proxy-agent@^3.0.0: agent-base "^4.3.0" debug "^3.1.0" +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-standard-collectible-abi@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/human-standard-collectible-abi/-/human-standard-collectible-abi-1.0.2.tgz#077bae9ed1b0b0b82bc46932104b4b499c941aa0" @@ -15046,21 +15030,20 @@ humble-localstorage@^1.4.2: localstorage-memory "^1.0.1" husky@>=1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.1.0.tgz#5faad520ab860582ed94f0c1a77f0f04c90b57c0" - integrity sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-4.2.1.tgz#b09f1bd9129e6c323cc515dc17081d0615e2d7c1" + integrity sha512-Qa0lRreeIf4Tl92sSs42ER6qc3hzoyQPPorzOrFWfPEVbdi6LuvJEqWKPk905fOWIR76iBpp7ECZNIwk+a8xuQ== dependencies: - chalk "^2.4.2" + chalk "^3.0.0" ci-info "^2.0.0" - cosmiconfig "^5.2.1" - execa "^1.0.0" - get-stdin "^7.0.0" + compare-versions "^3.5.1" + cosmiconfig "^6.0.0" + find-versions "^3.2.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" please-upgrade-node "^3.2.0" - read-pkg "^5.2.0" - run-node "^1.0.0" slash "^3.0.0" + which-pm-runs "^1.0.0" hyphenate-style-name@^1.0.2: version "1.0.2" @@ -16295,11 +16278,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" - integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== - is-dom@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.0.9.tgz#483832d52972073de12b9fe3f60320870da8370d" @@ -16572,7 +16550,7 @@ is-path-cwd@^1.0.0: resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= -is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: +is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== @@ -16605,11 +16583,6 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -16827,7 +16800,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: +is-wsl@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== @@ -17427,14 +17400,6 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^25.1.0: - version "25.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" - integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" @@ -17477,9 +17442,9 @@ js-beautify@~1.5.4: nopt "~3.0.1" js-conflux-sdk@^0.4.0-beta: - version "0.4.0-beta" - resolved "https://registry.yarnpkg.com/js-conflux-sdk/-/js-conflux-sdk-0.4.0-beta.tgz#5c62879ad0ce48118f557d418a90c007d707ec2f" - integrity sha512-9qBR3kdmgT5nUZFmFfgv36oW2inGeX0YrVk3bn3EJ/7ufRL3BgOfu0I4P5qsaKda50zdMV8FdEy4I4X2t4rxaQ== + version "0.4.1" + resolved "https://registry.yarnpkg.com/js-conflux-sdk/-/js-conflux-sdk-0.4.1.tgz#2c961c27ac0e59ea9050c36eaf76f01c007842d9" + integrity sha512-D6dfrHDz5lfRb2Ufn40M8KNESql4Vd3wmqJ108sK30+3lWhxMfG5i5PUPpNq1+j0kLNcoKOPmS0081LR/1wP5w== dependencies: bignumber.js "^9.0.0" keccak "^2.0.0" @@ -17702,6 +17667,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-merge-patch@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-merge-patch/-/json-merge-patch-0.2.3.tgz#fa2c6b5af87da77bae2966a589d52e23ed81fe40" @@ -18188,13 +18158,20 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" -keyv@^3.0.0, keyv@^3.1.0: +keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.0.tgz#2d1dab694926b2d427e4c74804a10850be44c12f" + integrity sha512-U7ioE8AimvRVLfw4LffyOIRhL2xVgmE8T22L6i0BucSnBUyv4w+I7VN/zVZwRKHOI6ZRUcdMdWHQ8KSUvGpEog== + dependencies: + json-buffer "3.0.1" + kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" @@ -19123,23 +19100,22 @@ linkify-it@^2.0.0: uc.micro "^1.0.1" lint-staged@>=8: - version "9.5.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-9.5.0.tgz#290ec605252af646d9b74d73a0fa118362b05a33" - integrity sha512-nawMob9cb/G1J98nb8v3VC/E8rcX1rryUYXVZ69aT9kde6YWX+uvNOEHY5yf2gcWcTJGiD0kqXmCnS3oD75GIA== + version "10.0.7" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.0.7.tgz#d205f92d9359419a23bc6aa3b6f8546b1998da64" + integrity sha512-Byj0F4l7GYUpYYHEqyFH69NiI6ICTg0CeCKbhRorL+ickbzILKUlZLiyCkljZV02wnoh7yH7PmFyYm9PRNwk9g== dependencies: - chalk "^2.4.2" - commander "^2.20.0" - cosmiconfig "^5.2.1" + chalk "^3.0.0" + commander "^4.0.1" + cosmiconfig "^6.0.0" debug "^4.1.1" dedent "^0.7.0" - del "^5.0.0" - execa "^2.0.3" + execa "^3.4.0" listr "^0.14.3" log-symbols "^3.0.0" micromatch "^4.0.2" normalize-path "^3.0.0" - please-upgrade-node "^3.1.1" - string-argv "^0.3.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" stringify-object "^3.3.0" listr-silent-renderer@^1.1.1: @@ -19634,12 +19610,12 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -lodash@4.17.14, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10, lodash@~4.17.2, lodash@~4.17.4: +lodash@4.17.14: version "4.17.14" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@=3.10.1, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: +lodash@=3.10.1, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10, lodash@~4.17.2, lodash@~4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -20418,11 +20394,16 @@ mime-db@1.40.0, mime-db@1.x.x: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-db@1.42.0, "mime-db@>= 1.40.0 < 2": +mime-db@1.42.0: version "1.42.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== +"mime-db@>= 1.43.0 < 2": + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + mime-db@^1.28.0: version "1.41.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" @@ -20527,10 +20508,10 @@ mini-create-react-context@^0.3.0: gud "^1.0.0" tiny-warning "^1.0.2" -mini-css-extract-plugin@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" + integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -21075,9 +21056,9 @@ nanoid@^2.0.0: integrity sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw== nanoid@^2.1.6: - version "2.1.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" - integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== + version "2.1.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.6.tgz#0665418f692e54cf44f34d4010761f3240a03314" + integrity sha512-2NDzpiuEy3+H0AVtdt8LoFi7PnqkOnIzYmJQp7xsEU6VexLluHQwKREuiz57XaQC5006seIadPrIZJhyS2n7aw== nanomatch@^1.2.9: version "1.2.9" @@ -21411,7 +21392,7 @@ node-releases@^1.1.29: dependencies: semver "^5.3.0" -node-releases@^1.1.47: +node-releases@^1.1.46: version "1.1.47" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== @@ -21517,7 +21498,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.0.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -21638,10 +21619,10 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5" - integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg== +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" @@ -22053,12 +22034,11 @@ open@^6.3.0: is-wsl "^1.1.0" open@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.2.tgz#fb3681f11f157f2361d2392307548ca1792960e8" - integrity sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ== + version "7.0.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.0.tgz#7e52999b14eb73f90f0f0807fe93897c4ae73ec9" + integrity sha512-K6EKzYqnwQzk+/dzJAQSBORub3xlBTxMz+ntpZpH/LyCa1o6KjXhuN+2npAaI9jaSmU3R1Q8NWf4KUWcyytGsQ== dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + is-wsl "^2.1.0" opencollective-postinstall@^2.0.0, opencollective-postinstall@^2.0.2: version "2.0.2" @@ -22440,13 +22420,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== - dependencies: - p-try "^2.0.0" - p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -23080,9 +23053,9 @@ phantomjs-prebuilt@^2.1.16, phantomjs-prebuilt@~2.1.7: which "^1.2.10" picomatch@^2.0.4, picomatch@^2.0.7: - version "2.1.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== picomatch@^2.0.5: version "2.0.7" @@ -23218,7 +23191,7 @@ platform-is@^1.0.4: resolved "https://registry.yarnpkg.com/platform-is/-/platform-is-1.0.4.tgz#768761e319fc4c9c24dba2e3b7f5a1177438540a" integrity sha512-5Y/mOvQDDZCyVTbQAsA2KHr/1Gq+aBck3pRfLA/Ga5f6sPI1CuDqGoT0CjofZmjeiARlMSUYRLZ9IfYYxthPxQ== -please-upgrade-node@^3.1.1, please-upgrade-node@^3.2.0: +please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== @@ -25171,16 +25144,6 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - "readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3, readable-stream@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" @@ -26220,9 +26183,9 @@ rimraf@^2.6.3, rimraf@^2.7.1: glob "^7.1.3" rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.1.tgz#48d3d4cb46c80d388ab26cd61b1b466ae9ae225a" + integrity sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw== dependencies: glob "^7.1.3" @@ -26254,7 +26217,7 @@ rn-host-detect@^1.1.5: resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" integrity sha512-ufk2dFT3QeP9HyZ/xTuMtW27KnFy815CYitJMqQm+pgG3ZAtHBsrU8nXizNKkqXGy3bQmhEoloVbrfbvMJMqkg== -rpc-cap@^1.0.1: +rpc-cap@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/rpc-cap/-/rpc-cap-1.0.3.tgz#c58f99ee97a92441f4310f407c0f40fecdbf0e78" integrity sha512-6lheD7UU4IY+OpILTL65E5NQWFPfG1Igd/CAGbnMJY+3szmQ9mUrf4/3bbcvNhu64Q/KYfCstVhxJREmTeFLOg== @@ -26322,11 +26285,6 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" @@ -26380,14 +26338,7 @@ rxjs@^6.3.3, rxjs@^6.4.0: dependencies: tslib "^1.9.0" -rxjs@^6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== - dependencies: - tslib "^1.9.0" - -rxjs@^6.5.3: +rxjs@^6.5.2, rxjs@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== @@ -26584,7 +26535,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.4: +schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4: version "2.6.4" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53" integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ== @@ -26658,7 +26609,7 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" -secp256k1@^3.0.1, secp256k1@^3.6.1, secp256k1@^3.6.2, secp256k1@^3.7.1: +secp256k1@^3.0.1, secp256k1@^3.6.1, secp256k1@^3.6.2: version "3.7.1" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1" integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g== @@ -26672,6 +26623,20 @@ secp256k1@^3.0.1, secp256k1@^3.6.1, secp256k1@^3.6.2, secp256k1@^3.7.1: nan "^2.14.0" safe-buffer "^5.1.2" +secp256k1@^3.7.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" + integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== + dependencies: + 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.5.2" + nan "^2.14.0" + safe-buffer "^5.1.2" + seedrandom@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" @@ -27962,7 +27927,7 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@^0.3.0: +string-argv@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== @@ -28455,9 +28420,9 @@ superagent@^3.8.1: readable-stream "^2.3.5" superagent@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-5.1.2.tgz#b122f3a62b14c4d638612667033a7eb43c4f4d83" - integrity sha512-VwPCbi9H02qDtTbdY+e3+cK5XR0YHsJy9hmeCOXLQ8ezjq8+S1Bs4MdNRmpmf2QjDBetD7drG7/nEta7E3E6Sg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-5.2.1.tgz#9f5f86b705be0865a8c1b9bcde533ab7773ff63a" + integrity sha512-46b4Lkwnlz7Ebdv2FBbfuqb3kVkG1jV/SK3EW6NnwL9a3T4h5hHtegNEQfbXvTFbDoUZXId4W3dMgap2f6ic1g== dependencies: component-emitter "^1.3.0" cookiejar "^2.1.2" @@ -28526,7 +28491,7 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== @@ -28887,9 +28852,9 @@ term-size@^1.2.0: execa "^0.7.0" term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.1.1.tgz#f81ec25854af91a480d2f9d0c77ffcb26594ed1a" + integrity sha512-UqvQSch04R+69g4RDhrslmGvGL3ucDRX/U+snYW0Mab4uCAyKSndUksaoqlJ81QKSpRnIsuOYQCbC2ZWx2896A== terser-webpack-plugin@^1.4.3: version "1.4.3" @@ -28907,15 +28872,14 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser-webpack-plugin@^2.1.2: - version "2.3.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz#ac045703bd8da0936ce910d8fb6350d0e1dee5fe" - integrity sha512-Nv96Nws2R2nrFOpbzF6IxRDpIkkIfmhvOws+IqMvYdFLO7o6wAILWFKONFgaYy8+T4LVz77DQW0f7wOeDEAjrg== + version "2.3.2" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz#6d3d1b0590c8f729bfbaeb7fb2528b8b62db4c74" + integrity sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA== dependencies: cacache "^13.0.1" find-cache-dir "^3.2.0" - jest-worker "^25.1.0" - p-limit "^2.2.2" - schema-utils "^2.6.4" + jest-worker "^24.9.0" + schema-utils "^2.6.1" serialize-javascript "^2.1.2" source-map "^0.6.1" terser "^4.4.3" @@ -29582,16 +29546,16 @@ type-fest@^0.3.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: +type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.9.0.tgz#3b7904821e42b26377831a6e9b5d2930ab19c99a" + integrity sha512-j55pzONIdg7rdtJTRZPKIbV0FosUqYdhHK1aAYJIrUvejv1VVyBokrILE8KQDT4emW/1Ev9tx+yZG+AxuSBMmA== + type-is@^1.6.16, 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" @@ -29633,9 +29597,9 @@ typeforce@^1.11.3, typeforce@^1.11.5: integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== typescript@^3.2.1: - version "3.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" - integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" @@ -30240,7 +30204,7 @@ uuid@3.2.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== -uuid@3.3.2, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.2.2, uuid@^3.3.2: +uuid@3.3.2, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.2.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -30250,7 +30214,7 @@ uuid@^2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= -uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -31103,6 +31067,11 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-pm-runs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= + which@1, which@^1.2.1, which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" @@ -31648,9 +31617,9 @@ yargs@^13.2.2, yargs@^13.2.4, yargs@^13.3.0: yargs-parser "^13.1.1" yargs@^15.0.2: - version "15.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" - integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== + version "15.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.0.2.tgz#4248bf218ef050385c4f7e14ebdf425653d13bd3" + integrity sha512-GH/X/hYt+x5hOat4LMnCqMd8r5Cv78heOMIJn1hr7QPPBqfeC6p89Y78+WB9yGDvfpCvgasfmWLzNzEioOUD9Q== dependencies: cliui "^6.0.0" decamelize "^1.2.0"