diff --git a/package.json b/package.json index f1213dcb1f..c919ede48c 100644 --- a/package.json +++ b/package.json @@ -188,12 +188,10 @@ "@uiw/codemirror-theme-github": "^4.19.16", "@uiw/react-codemirror": "^4.19.16", "@unstoppabledomains/resolution": "^1.17.0", - "abi-decoder": "^2.4.0", "axios": "0.21.4", "base64-js": "^1.5.1", "bech32": "^2.0.0", "bignumber.js": "9.0.1", - "bnc-onboard": "~1.35.3", "classnames": "^2.2.6", "currency-flags": "3.2.1", "date-fns": "^2.20.2", @@ -201,21 +199,15 @@ "electron-log": "^4.4.3", "electron-settings": "^4.0.2", "electron-updater": "4.6.1", - "eth-sig-util": "^2.5.3", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "^7.0.10", - "exponential-backoff": "^3.1.0", "express": "^4.17.2", "final-form": "^4.20.2", "final-form-calculate": "^1.3.2", - "framer-motion": "^4.1.17", "fuse.js": "^6.4.6", "history": "4.10.1", "immutable": "4.0.0-rc.12", "js-cookie": "^3.0.0", "jsonschema": "^1.4.1", "lodash": "^4.17.21", - "marked-react": "^1.3.0", "notistack": "https://github.com/gnosis/notistack.git#v0.9.5", "object-hash": "^2.1.1", "qrcode.react": "1.0.1", @@ -226,8 +218,8 @@ "react-final-form": "^6.5.3", "react-final-form-listeners": "^1.0.2", "react-ga": "3.3.0", - "react-intersection-observer": "^8.32.0", "react-papaparse": "^3.16.1", + "react-qr-reader": "^2.2.1", "react-redux": "7.2.4", "react-router-dom": "5.2.0", "react-scripts": "^4.0.1", @@ -240,7 +232,6 @@ "styled-components": "^5.3.0", "web3": "1.6.0", "web3-core": "^1.6.0", - "web3-eth-contract": "^1.6.0", "web3-utils": "^1.6.0" }, "devDependencies": { @@ -289,7 +280,7 @@ "husky": "^7.0.0", "jest": "26.6.0", "lint-staged": "^11.1.1", - "patch-package": "^6.4.7", + "patch-package": "^8.0.0", "postinstall-postinstall": "^2.1.0", "prettier": "^2.4.0", "redux-mock-store": "^1.5.4", @@ -298,4 +289,4 @@ "typescript": "^4.3.5", "wait-on": "^6.0.0" } -} +} \ No newline at end of file diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index eb21837469..e68ebe6370 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -1,46 +1,5 @@ import { ReactElement } from 'react' -import { _getChainId } from 'src/config' -import { getWeb3 } from 'src/logic/wallets/getWeb3' -import onboard from 'src/logic/wallets/onboard' -import { shouldSwitchNetwork, switchNetwork } from 'src/logic/wallets/utils/network' import { StyledConnectButton } from './styles' -const checkWallet = async (): Promise => { - if (shouldSwitchNetwork()) { - switchNetwork(onboard().getState().wallet, _getChainId()).catch((e) => e.log()) - } - - return await onboard().walletCheck() -} - -export const onboardUser = async (): Promise => { - // before calling walletSelect you want to check if web3 has been instantiated - // which indicates that a wallet has already been selected - // and web3 has been instantiated with that provider - const web3 = getWeb3() - const walletSelected = web3 ? true : await onboard().walletSelect() - return walletSelected && checkWallet() -} - -// export const onConnectButtonClick = async (): Promise => { -// const chainId = _getChainId() -// await connectKeplr() -// .then(async (status) => { -// if (status === KeplrErrors.NoChainInfo) { -// await suggestChain(chainId) -// return true -// } - -// return null -// }) -// .then((e) => { -// if (e) { -// connectKeplr() -// } -// }) -// .catch(() => { -// store.dispatch(enqueueSnackbar(enhanceSnackbarForAction(NOTIFICATIONS.CONNECT_WALLET_ERROR_MSG))) -// }) -// } const ConnectButton = (props: { 'data-testid': string; onConnect: () => void }): ReactElement => ( { const code = CONTRACT_ERROR_CODES.find((code) => { @@ -11,31 +8,3 @@ export const decodeMessage = (message: string): string => { return code ? `${code}: ${CONTRACT_ERRORS[code]}` : message } - -export const getContractErrorMessage = async ({ - safeInstance, - from, - data, -}: { - safeInstance: GnosisSafe - from: string - data: string -}): Promise => { - const web3 = getWeb3() - - try { - const returnData = await web3.eth.call({ - to: safeInstance.options.address, - from, - value: 0, - data, - }) - - const returnBuffer = Buffer.from(returnData.slice(2), 'hex') - - const contractOutput = abi.rawDecode(['string'], returnBuffer.slice(4))[0] - return decodeMessage(contractOutput) - } catch (e) { - return decodeMessage(e.message) - } -} diff --git a/src/logic/keplr/keplr.ts b/src/logic/keplr/keplr.ts index 06497cc6d2..38d37ad7a1 100644 --- a/src/logic/keplr/keplr.ts +++ b/src/logic/keplr/keplr.ts @@ -1,24 +1,21 @@ -import { ChainInfo } from '@gnosis.pm/safe-react-gateway-sdk' -import { Keplr, Key } from '@keplr-wallet/types' +import { Keplr } from '@keplr-wallet/types' import * as _ from 'lodash' import { Dispatch } from 'redux' +import { store } from 'src/logic/safe/store' import { JWT_TOKEN_KEY } from 'src/services/constant/common' import { getGatewayUrl } from 'src/services/data/environment' -import { auth } from 'src/services/index' -import { store } from 'src/logic/safe/store' -import { parseToAddress } from 'src/utils/parseByteAdress' import { saveToStorage } from 'src/utils/storage' import session from 'src/utils/storage/session' -import { getChainInfo, getInternalChainId, _getChainId } from '../../config' -import { trackAnalyticsEvent, WALLET_EVENTS } from '../../utils/googleAnalytics' -import { enhanceSnackbarForAction, NOTIFICATIONS } from '../notifications' +import { _getChainId, getChainInfo, getInternalChainId } from '../../config' +import { WALLET_EVENTS, trackAnalyticsEvent } from '../../utils/googleAnalytics' +import { NOTIFICATIONS, enhanceSnackbarForAction } from '../notifications' import enqueueSnackbar from '../notifications/store/actions/enqueueSnackbar' +import { handleConnectWallet } from '../providers/index' import { WALLETS_NAME } from '../wallets/constant/wallets' import { addProvider } from '../wallets/store/actions' import { LAST_USED_PROVIDER_KEY } from '../wallets/store/middlewares/providerWatcher' -import { makeProvider, ProviderProps } from '../wallets/store/model/provider' -import { handleConnectWallet } from '../providers/index' +import { ProviderProps, makeProvider } from '../wallets/store/model/provider' export type WalletKey = { myAddress: string myPubkey: string diff --git a/src/logic/safe/safeTxSigner.ts b/src/logic/safe/safeTxSigner.ts index 3b1aa91d37..bdd672aa5d 100644 --- a/src/logic/safe/safeTxSigner.ts +++ b/src/logic/safe/safeTxSigner.ts @@ -2,7 +2,8 @@ import { List } from 'immutable' import { Confirmation } from 'src/logic/safe/store/models/types/confirmation' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' import semverSatisfies from 'semver/functions/satisfies' -import { SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES } from './transactions/offchainSigner' + +const SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES = '>=1.0.0' // Here we're checking that safe contract version is greater or equal 1.1.1, but // theoretically EIP712 should also work for 1.0.0 contracts diff --git a/src/logic/safe/store/actions/createTransaction.ts b/src/logic/safe/store/actions/createTransaction.ts index 814d50dfd3..54b1ebe807 100644 --- a/src/logic/safe/store/actions/createTransaction.ts +++ b/src/logic/safe/store/actions/createTransaction.ts @@ -1,44 +1,5 @@ -import { Operation, TransactionDetails } from '@gnosis.pm/safe-react-gateway-sdk' -import { AnyAction } from 'redux' -import { ThunkAction } from 'redux-thunk' -import { onboardUser } from 'src/components/ConnectButton' -import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' -import { getNotificationsFromTxType, NOTIFICATIONS } from 'src/logic/notifications' -import { - getApprovalTransaction, - getExecutionTransaction, - saveTxToHistory, - tryOffChainSigning, -} from 'src/logic/safe/transactions' -import { estimateSafeTxGas, getGasParam } from 'src/logic/safe/transactions/gas' -import * as aboutToExecuteTx from 'src/logic/safe/utils/aboutToExecuteTx' -import { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors' -import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' -import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { providerSelector } from 'src/logic/wallets/store/selectors' -import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import closeSnackbarAction from 'src/logic/notifications/store/actions/closeSnackbar' -import { generateSafeTxHash } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' -import { shouldExecuteTransaction } from 'src/logic/safe/store/actions/utils' -import fetchTransactions from './transactions/fetchTransactions' -import { TxArgs } from 'src/logic/safe/store/models/types/transaction' -import { PayableTx } from 'src/types/contracts/types.d' -import { AppReduxState } from 'src/logic/safe/store' -import { Dispatch, DispatchReturn } from './types' -import { checkIfOffChainSignatureIsPossible, getPreValidatedSignatures } from 'src/logic/safe/safeTxSigner' import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { isTxPendingError } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { currentChainId } from 'src/logic/config/store/selectors' -import { extractShortChainName, history, SAFE_ROUTES } from 'src/routes/routes' -import { getPrefixedSafeAddressSlug, SAFE_ADDRESS_SLUG, TRANSACTION_ID_SLUG } from 'src/routes/routes' -import { generatePath } from 'react-router-dom' -import { getContractErrorMessage } from 'src/logic/contracts/safeContractErrors' -import { getLastTransaction } from '../selectors/gatewayTransactions' -import { getRecommendedNonce } from '../../api/fetchSafeTxGasEstimation' -import { isMultiSigExecutionDetails, LocalTransactionStatus } from '../models/types/gateway.d' -import { updateTransactionStatus } from './updateTransactionStatus' export interface CreateTransactionArgs { navigateToTransactionsTab?: boolean @@ -55,204 +16,5 @@ export interface CreateTransactionArgs { delayExecution?: boolean } -type CreateTransactionAction = ThunkAction, AppReduxState, DispatchReturn, AnyAction> -type ConfirmEventHandler = (safeTxHash: string) => void -type ErrorEventHandler = () => void -export const METAMASK_REJECT_CONFIRM_TX_ERROR_CODE = 4001 -export const isKeystoneError = (err: Error): boolean => { - return err.message.startsWith('#ktek_error') -} - -const navigateToTx = (safeAddress: string, txDetails: TransactionDetails) => { - if (!isMultiSigExecutionDetails(txDetails.detailedExecutionInfo)) { - return - } - const prefixedSafeAddress = getPrefixedSafeAddressSlug({ shortName: extractShortChainName(), safeAddress }) - const txRoute = generatePath(SAFE_ROUTES.TRANSACTIONS_SINGULAR, { - [SAFE_ADDRESS_SLUG]: prefixedSafeAddress, - [TRANSACTION_ID_SLUG]: txDetails.detailedExecutionInfo.safeTxHash, - }) - - history.push(txRoute) -} - -export const createTransaction = - ( - { - safeAddress, - to, - valueInWei, - txData = EMPTY_DATA, - notifiedTransaction, - txNonce, - operation = Operation.CALL, - navigateToTransactionsTab = true, - origin = null, - safeTxGas: safeTxGasArg, - ethParameters, - delayExecution = false, - }: CreateTransactionArgs, - onUserConfirm?: ConfirmEventHandler, - onError?: ErrorEventHandler, - ): CreateTransactionAction => - async (dispatch: Dispatch, getState: () => AppReduxState): Promise => { - const state = getState() - - const ready = await onboardUser() - if (!ready) return - - const { account: from, hardwareWallet, smartContractWallet } = providerSelector(state) - const safeVersion = currentSafeCurrentVersion(state) as string - const safeInstance = getGnosisSafeInstanceAt(safeAddress, safeVersion) - const chainId = currentChainId(state) - - const lastTx = getLastTransaction(state) - let nextNonce: string - try { - nextNonce = (await getRecommendedNonce(safeAddress)).toString() - } catch (e) { - logError(Errors._616, e.message) - nextNonce = await safeInstance.methods.nonce().call() - } - const nonce = txNonce !== undefined ? txNonce.toString() : nextNonce - - const isExecution = !delayExecution && (await shouldExecuteTransaction(safeInstance, nonce, lastTx)) - let safeTxGas = safeTxGasArg || '0' - try { - if (safeTxGasArg === undefined) { - safeTxGas = await estimateSafeTxGas( - { safeAddress, txData, txRecipient: to, txAmount: valueInWei, operation }, - safeVersion, - ) - } - } catch (error) { - safeTxGas = safeTxGasArg || '0' - } - - const sigs = getPreValidatedSignatures(from) - const notificationsQueue = getNotificationsFromTxType(notifiedTransaction, origin) - const beforeExecutionKey = dispatch(enqueueSnackbar(notificationsQueue.beforeExecution)) - - let txHash = '' - const txArgs: TxArgs & { sender: string } = { - safeInstance, - to, - valueInWei, - data: txData, - operation, - nonce: Number.parseInt(nonce), - safeTxGas, - baseGas: '0', - gasPrice: '0', - gasToken: ZERO_ADDRESS, - refundReceiver: ZERO_ADDRESS, - sender: from, - sigs, - } - - let safeTxHash = '' - - try { - safeTxHash = await generateSafeTxHash(safeAddress, safeVersion, txArgs) - - if (isExecution) { - dispatch(updateTransactionStatus({ safeTxHash, status: LocalTransactionStatus.PENDING })) - } - - if (checkIfOffChainSignatureIsPossible(isExecution, smartContractWallet, safeVersion)) { - const signature = await tryOffChainSigning(safeTxHash, { ...txArgs, safeAddress }, hardwareWallet, safeVersion) - - if (signature) { - dispatch(closeSnackbarAction({ key: beforeExecutionKey })) - const txDetails = await saveTxToHistory({ ...txArgs, signature, origin }) - - dispatch(fetchTransactions(chainId, safeAddress)) - if (navigateToTransactionsTab) { - navigateToTx(safeAddress, txDetails) - } - onUserConfirm?.(safeTxHash) - return - } - } - - const tx = isExecution ? getExecutionTransaction(txArgs) : getApprovalTransaction(safeInstance, safeTxHash) - const sendParams: PayableTx = { - from, - value: 0, - gas: ethParameters?.ethGasLimit, - [getGasParam()]: ethParameters?.ethGasPriceInGWei, - nonce: ethParameters?.ethNonce, - } - - await tx - .send(sendParams) - .once('transactionHash', async (hash) => { - onUserConfirm?.(safeTxHash) - - txHash = hash - dispatch(closeSnackbarAction({ key: beforeExecutionKey })) - - try { - const txDetails = await saveTxToHistory({ ...txArgs, origin }) - - if (navigateToTransactionsTab) { - navigateToTx(safeAddress, txDetails) - } - } catch (err) { - logError(Errors._803, err.message) - - // If we're just signing but not executing the tx, it's crucial that the request above succeeds - if (!isExecution) { - return - } - } - - // store the pending transaction's nonce - isExecution && aboutToExecuteTx.setNonce(txArgs.nonce) - - dispatch(fetchTransactions(chainId, safeAddress)) - }) - .then(async (receipt) => { - dispatch(fetchTransactions(chainId, safeAddress)) - return receipt.transactionHash - }) - } catch (err) { - logError(Errors._803, err.message) - onError?.() - - dispatch(closeSnackbarAction({ key: beforeExecutionKey })) - - if (isExecution && safeTxHash) { - dispatch(updateTransactionStatus({ safeTxHash, status: LocalTransactionStatus.PENDING_FAILED })) - } - - const executeDataUsedSignatures = safeInstance.methods - .execTransaction(to, valueInWei, txData, operation, 0, 0, 0, ZERO_ADDRESS, ZERO_ADDRESS, sigs) - .encodeABI() - - const contractErrorMessage = await getContractErrorMessage({ - safeInstance, - from, - data: executeDataUsedSignatures, - }) - - if (contractErrorMessage) { - logError(Errors._803, contractErrorMessage) - } - - const notification = isTxPendingError(err) - ? NOTIFICATIONS.TX_PENDING_MSG - : { - ...notificationsQueue.afterExecutionError, - ...(contractErrorMessage && { - message: `${notificationsQueue.afterExecutionError.message} - ${contractErrorMessage}`, - }), - } - - dispatch(enqueueSnackbar({ key: err.code, ...notification })) - } - - return txHash - } diff --git a/src/logic/safe/store/actions/transactions/utils/transactionHelpers.ts b/src/logic/safe/store/actions/transactions/utils/transactionHelpers.ts deleted file mode 100644 index 26d08d419e..0000000000 --- a/src/logic/safe/store/actions/transactions/utils/transactionHelpers.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TypedDataUtils } from 'eth-sig-util' - -import { TxArgs } from 'src/logic/safe/store/models/types/transaction' -import { getEip712MessageTypes, generateTypedDataFrom } from 'src/logic/safe/transactions/offchainSigner/EIP712Signer' - -export const generateSafeTxHash = async (safeAddress: string, safeVersion: string, txArgs: TxArgs): Promise => { - const typedData = await generateTypedDataFrom({ safeAddress, safeVersion, ...txArgs }) - - const messageTypes = getEip712MessageTypes(safeVersion) - - return `0x${TypedDataUtils.sign(typedData).toString('hex')}` -} diff --git a/src/logic/safe/transactions/index.ts b/src/logic/safe/transactions/index.ts index 4a4e71486d..fed5bc8f4e 100644 --- a/src/logic/safe/transactions/index.ts +++ b/src/logic/safe/transactions/index.ts @@ -1,4 +1,3 @@ export * from './send' -export * from './offchainSigner' export * from './txHistory' export * from './notifiedTransactions' diff --git a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts index 19657020c7..75b4569a5e 100644 --- a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts +++ b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts @@ -4,7 +4,6 @@ import semverSatisfies from 'semver/functions/satisfies' import { getWeb3, getChainIdFrom } from 'src/logic/wallets/getWeb3' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' import { TxArgs } from 'src/logic/safe/store/models/types/transaction' -import { adjustV } from './utils' import { Operation } from '@gnosis.pm/safe-react-gateway-sdk' const EIP712_NOT_SUPPORTED_ERROR_MSG = "EIP712 is not supported by user's wallet" @@ -133,45 +132,45 @@ export const generateTypedDataFrom = async ({ return typedData } -export const getEIP712Signer = - (version?: string) => - async (txArgs: SigningTxArgs): Promise => { - const web3 = getWeb3() - const typedData = await generateTypedDataFrom(txArgs) - - let method = 'eth_signTypedData_v3' - if (version === 'v4') { - method = 'eth_signTypedData_v4' - } - if (!version) { - method = 'eth_signTypedData' - } - - const jsonTypedData = JSON.stringify(typedData) - const signedTypedData = { - jsonrpc: '2.0', - method, - params: version === 'v3' || version === 'v4' ? [txArgs.sender, jsonTypedData] : [jsonTypedData, txArgs.sender], - from: txArgs.sender, - id: new Date().getTime(), - } - - return new Promise((resolve, reject) => { - const provider = web3.currentProvider as AbstractProvider - provider.sendAsync(signedTypedData, (err, signature) => { - if (err) { - reject(err) - return - } - - if (signature?.result == null) { - reject(new Error(EIP712_NOT_SUPPORTED_ERROR_MSG)) - return - } - - const sig = adjustV('eth_signTypedData', signature.result) - - resolve(sig.replace(EMPTY_DATA, '')) - }) - }) - } +// export const getEIP712Signer = +// (version?: string) => +// async (txArgs: SigningTxArgs): Promise => { +// const web3 = getWeb3() +// const typedData = await generateTypedDataFrom(txArgs) + +// let method = 'eth_signTypedData_v3' +// if (version === 'v4') { +// method = 'eth_signTypedData_v4' +// } +// if (!version) { +// method = 'eth_signTypedData' +// } + +// const jsonTypedData = JSON.stringify(typedData) +// const signedTypedData = { +// jsonrpc: '2.0', +// method, +// params: version === 'v3' || version === 'v4' ? [txArgs.sender, jsonTypedData] : [jsonTypedData, txArgs.sender], +// from: txArgs.sender, +// id: new Date().getTime(), +// } + +// return new Promise((resolve, reject) => { +// const provider = web3.currentProvider as AbstractProvider +// provider.sendAsync(signedTypedData, (err, signature) => { +// if (err) { +// reject(err) +// return +// } + +// if (signature?.result == null) { +// reject(new Error(EIP712_NOT_SUPPORTED_ERROR_MSG)) +// return +// } + +// const sig = adjustV('eth_signTypedData', signature.result) + +// resolve(sig.replace(EMPTY_DATA, '')) +// }) +// }) +// } diff --git a/src/logic/safe/transactions/offchainSigner/ethSigner.ts b/src/logic/safe/transactions/offchainSigner/ethSigner.ts deleted file mode 100644 index 469fa8c7e8..0000000000 --- a/src/logic/safe/transactions/offchainSigner/ethSigner.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' -import { AbstractProvider } from 'web3-core/types' -import { adjustV } from './utils' - -const ETH_SIGN_NOT_SUPPORTED_ERROR_MSG = 'ETH_SIGN_NOT_SUPPORTED' - -export type EthSignerArgs = { - safeTxHash: string - sender: string -} - -export const ethSigner = async ({ safeTxHash, sender }: EthSignerArgs): Promise => { - const web3 = getWeb3() - - return new Promise(function (resolve, reject) { - const provider = web3.currentProvider as AbstractProvider - provider.sendAsync( - { - jsonrpc: '2.0', - method: 'eth_sign', - params: [sender, safeTxHash], - id: new Date().getTime(), - }, - async function (err, signature) { - if (err) { - return reject(err) - } - - if (signature?.result == null) { - reject(new Error(ETH_SIGN_NOT_SUPPORTED_ERROR_MSG)) - return - } - - const sig = adjustV('eth_sign', signature.result, safeTxHash, sender) - - resolve(sig.replace(EMPTY_DATA, '')) - }, - ) - }) -} diff --git a/src/logic/safe/transactions/offchainSigner/index.ts b/src/logic/safe/transactions/offchainSigner/index.ts deleted file mode 100644 index 79b5660d8b..0000000000 --- a/src/logic/safe/transactions/offchainSigner/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import semverSatisfies from 'semver/functions/satisfies' - -import { isKeystoneError, METAMASK_REJECT_CONFIRM_TX_ERROR_CODE } from 'src/logic/safe/store/actions/createTransaction' -import { getEIP712Signer, SigningTxArgs } from './EIP712Signer' -import { ethSigner, EthSignerArgs } from './ethSigner' - -// 1. we try to sign via EIP-712 if user's wallet supports it -// 2. If not, try to use eth_sign (Safe version has to be >1.1.1) -// If eth_sign, doesn't work continue with the regular flow (on-chain signatures, more in createTransaction.ts) - -const SIGNERS = { - EIP712_V3: getEIP712Signer('v3'), - EIP712_V4: getEIP712Signer('v4'), - EIP712: getEIP712Signer(), - ETH_SIGN: ethSigner, -} - -export const SAFE_VERSION_FOR_OFF_CHAIN_SIGNATURES = '>=1.0.0' - -// hardware wallets support eth_sign only -// eth_sign is only supported by safes >= 1.1.0 -const getSupportedSigners = (isHW: boolean, safeVersion: string) => { - const safeSupportsEthSigner = semverSatisfies(safeVersion, '>=1.1.0') - - const signers: typeof SIGNERS[keyof typeof SIGNERS][] = isHW - ? [] - : [SIGNERS.EIP712_V3, SIGNERS.EIP712_V4, SIGNERS.EIP712] - - if (safeSupportsEthSigner) { - signers.push(SIGNERS.ETH_SIGN) - } - - return signers -} - -export const tryOffChainSigning = async ( - safeTxHash: string, - txArgs: Omit, - isHW: boolean, - safeVersion: string, -): Promise => { - let signature - - const signerByWallet = getSupportedSigners(isHW, safeVersion) - for (const signingFunc of signerByWallet) { - try { - signature = await signingFunc({ ...txArgs, safeTxHash, safeVersion }) - - break - } catch (err) { - if (err.code === METAMASK_REJECT_CONFIRM_TX_ERROR_CODE) { - throw err - } - if (isKeystoneError(err)) { - throw err - } - } - } - - return signature -} diff --git a/src/logic/safe/transactions/offchainSigner/utils.ts b/src/logic/safe/transactions/offchainSigner/utils.ts deleted file mode 100644 index 44656124df..0000000000 --- a/src/logic/safe/transactions/offchainSigner/utils.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { sameString } from 'src/utils/strings' -import { bufferToHex, ecrecover, pubToAddress } from 'ethereumjs-util' - -export const isTxHashSignedWithPrefix = (txHash: string, signature: string, ownerAddress: string): boolean => { - let hasPrefix - try { - const rsvSig = { - r: Buffer.from(signature.slice(2, 66), 'hex'), - s: Buffer.from(signature.slice(66, 130), 'hex'), - v: parseInt(signature.slice(130, 132), 16), - } - const recoveredData = ecrecover(Buffer.from(txHash.slice(2), 'hex'), rsvSig.v, rsvSig.r, rsvSig.s) - const recoveredAddress = bufferToHex(pubToAddress(recoveredData)) - hasPrefix = !sameString(recoveredAddress, ownerAddress) - } catch (e) { - hasPrefix = true - } - return hasPrefix -} - -type AdjustVOverload = { - (signingMethod: 'eth_signTypedData', signature: string): string - (signingMethod: 'eth_sign', signature: string, safeTxHash: string, sender: string): string -} - -export const adjustV: AdjustVOverload = ( - signingMethod: 'eth_sign' | 'eth_signTypedData', - signature: string, - safeTxHash?: string, - sender?: string, -): string => { - const MIN_VALID_V_VALUE = 27 - let sigV = parseInt(signature.slice(-2), 16) - - if (signingMethod === 'eth_sign') { - /* - Usually returned V (last 1 byte) is 27 or 28 (valid ethereum value) - Metamask with ledger returns v = 01, this is not valid for ethereum - In case V = 0 or 1 we add it to 27 or 28 - Adding 4 is required if signed message was prefixed with "\x19Ethereum Signed Message:\n32" - Some wallets do that, some wallets don't, V > 30 is used by contracts to differentiate between prefixed and non-prefixed messages - https://github.com/gnosis/safe-contracts/blob/main/contracts/GnosisSafe.sol#L292 - */ - if (sigV < MIN_VALID_V_VALUE) { - sigV += MIN_VALID_V_VALUE - } - const adjusted = signature.slice(0, -2) + sigV.toString(16) - const signatureHasPrefix = isTxHashSignedWithPrefix(safeTxHash as string, adjusted, sender as string) - if (signatureHasPrefix) { - sigV += 4 - } - } - - if (signingMethod === 'eth_signTypedData') { - // Metamask with ledger returns V=0/1 here too, we need to adjust it to be ethereum's valid value (27 or 28) - if (sigV < MIN_VALID_V_VALUE) { - sigV += MIN_VALID_V_VALUE - } - } - - return signature.slice(0, -2) + sigV.toString(16) -} diff --git a/src/logic/wallets/onboard.ts b/src/logic/wallets/onboard.ts deleted file mode 100644 index 6e25e81f6b..0000000000 --- a/src/logic/wallets/onboard.ts +++ /dev/null @@ -1,75 +0,0 @@ -import Onboard from 'bnc-onboard' -import { API, Wallet } from 'bnc-onboard/dist/src/interfaces' -import { store } from 'src/logic/safe/store' -import { _getChainId, getChainName } from 'src/config' -import { setWeb3 } from './getWeb3' -import { fetchProvider, removeProvider } from './store/actions' -import transactionDataCheck from './transactionDataCheck' -import { getSupportedWallets } from './utils/walletList' -import { ChainId, CHAIN_ID } from 'src/config/chain.d' - -const NETWORK_NAMES: Record = { - [CHAIN_ID.ETHEREUM]: 'mainnet', -} - -const getOnboardConfiguration = () => { - let lastUsedAddress = '' - let providerName: string | null = null - let lastNetworkId = '' - - return { - networkId: parseInt(_getChainId(), 10), - // Is it mandatory for Ledger to work to send network name in lowercase - // @FIXME: Move to CGW - networkName: NETWORK_NAMES[_getChainId()] || getChainName().toLowerCase(), - subscriptions: { - wallet: (wallet: Wallet) => { - if (wallet.provider) { - // this function will intialize web3 and store it somewhere available throughout the dapp and - // can also instantiate your contracts with the web3 instance - setWeb3(wallet.provider) - providerName = wallet.name - } - }, - address: (address: string) => { - const networkId = _getChainId() - - if (!lastUsedAddress && address && providerName) { - lastUsedAddress = address - lastNetworkId = networkId - store.dispatch(fetchProvider(providerName)) - } - - // we don't have an unsubscribe event so we rely on this - if (!address && lastUsedAddress) { - lastUsedAddress = '' - providerName = null - store.dispatch(removeProvider({ keepStorageKey: lastNetworkId !== networkId })) - } - }, - }, - walletSelect: { - description: 'Please select a wallet to connect to Gnosis Safe', - wallets: getSupportedWallets(), - }, - walletCheck: [ - { checkName: 'derivationPath' }, - { checkName: 'connect' }, - { checkName: 'accounts' }, - { checkName: 'network' }, - transactionDataCheck(), - ], - } -} - -let currentOnboardInstance: API -const onboard = (): API => { - const chainId = _getChainId() - if (!currentOnboardInstance || currentOnboardInstance.getState().appNetworkId.toString() !== chainId) { - currentOnboardInstance = Onboard(getOnboardConfiguration()) - } - - return currentOnboardInstance -} - -export default onboard diff --git a/src/logic/wallets/store/actions/removeProvider.ts b/src/logic/wallets/store/actions/removeProvider.ts index 11a27d3d4f..d347d83b10 100644 --- a/src/logic/wallets/store/actions/removeProvider.ts +++ b/src/logic/wallets/store/actions/removeProvider.ts @@ -7,8 +7,5 @@ const removeProvider = createAction(REMOVE_PROVIDER) export default (payload?: { keepStorageKey: boolean }) => (dispatch: Dispatch): void => { - // onboard().walletReset() - // resetWeb3() - dispatch(removeProvider(payload)) } diff --git a/src/logic/wallets/utils/network.ts b/src/logic/wallets/utils/network.ts deleted file mode 100644 index f7f8336313..0000000000 --- a/src/logic/wallets/utils/network.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { Wallet } from 'bnc-onboard/dist/src/interfaces' -import onboard from 'src/logic/wallets/onboard' -import { numberToHex } from 'web3-utils' - -import { _getChainId, getChainInfo, getExplorerUrl, getPublicRpcUrl } from 'src/config' -import { ChainId } from 'src/config/chain.d' -import { CodedException, Errors } from 'src/logic/exceptions/CodedException' - -const WALLET_ERRORS = { - UNRECOGNIZED_CHAIN: 4902, - USER_REJECTED: 4001, - // ADDING_EXISTING_CHAIN: -32603, -} - -/** - * Switch the chain assuming it's MetaMask. - * @see https://github.com/MetaMask/metamask-extension/pull/10905 - */ -const requestSwitch = async (wallet: Wallet, chainId: ChainId): Promise => { - await wallet.provider.request({ - method: 'wallet_switchEthereumChain', - params: [ - { - chainId: numberToHex(chainId), - }, - ], - }) -} - -/** - * Add a chain config based on EIP-3085. - * Known to be implemented by MetaMask. - * @see https://docs.metamask.io/guide/rpc-api.html#wallet-addethereumchain - */ -const requestAdd = async (wallet: Wallet, chainId: ChainId): Promise => { - const { chainName, nativeCurrency } = getChainInfo() - - await wallet.provider.request({ - method: 'wallet_addEthereumChain', - params: [ - { - chainId: numberToHex(chainId), - chainName, - nativeCurrency, - rpcUrls: [getPublicRpcUrl()], - blockExplorerUrls: [getExplorerUrl()], - }, - ], - }) -} - -/** - * Try switching the wallet chain, and if it fails, try adding the chain config - */ -export const switchNetwork = async (wallet: Wallet, chainId: ChainId): Promise => { - try { - await requestSwitch(wallet, chainId) - } catch (e) { - if (e.code === WALLET_ERRORS.USER_REJECTED) { - return - } - - if (e.code == WALLET_ERRORS.UNRECOGNIZED_CHAIN) { - try { - await requestAdd(wallet, chainId) - } catch (e) { - if (e.code === WALLET_ERRORS.USER_REJECTED) { - return - } - - throw new CodedException(Errors._301, e.message) - } - } else { - throw new CodedException(Errors._300, e.message) - } - } -} - -export const shouldSwitchNetwork = (wallet = onboard().getState()?.wallet): boolean => { - const desiredNetwork = _getChainId() - const currentNetwork = wallet?.provider?.networkVersion - return currentNetwork ? desiredNetwork !== currentNetwork.toString() : false -} - diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts deleted file mode 100644 index 5b378f9c6c..0000000000 --- a/src/logic/wallets/utils/walletList.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { WalletInitOptions } from 'bnc-onboard/dist/src/interfaces' - -import { getRpcServiceUrl, getDisabledWallets, _getChainId } from 'src/config' -import { WALLETS } from 'src/config/chain.d' - -type Wallet = WalletInitOptions & { - desktop: boolean - walletName: WALLETS -} - -const wallets = (): Wallet[] => { - const rpcUrl = getRpcServiceUrl() - const chainId = _getChainId() - - return [ - // { walletName: WALLETS.METAMASK, preferred: true, desktop: false }, - // { - // walletName: WALLETS.WALLET_CONNECT, - // preferred: true, - // // as stated in the documentation, `infuraKey` is not mandatory if rpc is provided - // rpc: { [chainId]: rpcUrl }, - // networkId: parseInt(chainId, 10), - // desktop: true, - // bridge: 'https://safe-walletconnect.gnosis.io/', - // }, - // { - // walletName: WALLETS.TREZOR, - // appUrl: 'gnosis-safe.io', - // preferred: true, - // email: 'safe@gnosis.io', - // desktop: true, - // rpcUrl, - // }, - // { - // walletName: WALLETS.LEDGER, - // desktop: true, - // preferred: true, - // rpcUrl, - // LedgerTransport: (window as any).TransportNodeHid, - // }, - // { - // walletName: WALLETS.KEYSTONE, - // desktop: false, - // rpcUrl, - // appName: 'Gnosis Safe', - // }, - // { walletName: WALLETS.TRUST, preferred: true, desktop: false }, - // { - // walletName: WALLETS.LATTICE, - // rpcUrl, - // appName: 'Gnosis Safe', - // desktop: false, - // }, - // { - // walletName: WALLETS.FORTMATIC, - // apiKey: FORTMATIC_KEY, - // desktop: true, - // }, - // { - // walletName: WALLETS.PORTIS, - // apiKey: PORTIS_ID, - // desktop: true, - // }, - // { walletName: WALLETS.AUTHEREUM, desktop: false }, - // { walletName: WALLETS.TORUS, desktop: true }, - // { walletName: WALLETS.COINBASE, desktop: false }, - // { walletName: WALLETS.WALLET_LINK, rpcUrl, desktop: false }, - // { walletName: WALLETS.OPERA, desktop: false }, - // { walletName: WALLETS.OPERA_TOUCH, desktop: false }, - // { walletName: WALLETS.KEPLR, desktop: true, preferred: true }, - ] -} - -export const getSupportedWallets = (): WalletInitOptions[] => { - if (window.isDesktop) { - return wallets() - .filter((wallet) => wallet.desktop) - .map(({ desktop, ...rest }) => rest) - } - - return wallets() - .map(({ desktop, ...rest }) => rest) - .filter((w) => !getDisabledWallets().includes(w.walletName)) -} diff --git a/src/pages/Avanced/Custom Transaction/MessageGenerator.tsx b/src/pages/Avanced/Custom Transaction/MessageGenerator.tsx index 219c1ecac9..9ab0894aac 100644 --- a/src/pages/Avanced/Custom Transaction/MessageGenerator.tsx +++ b/src/pages/Avanced/Custom Transaction/MessageGenerator.tsx @@ -3,7 +3,6 @@ import { githubDark } from '@uiw/codemirror-theme-github' import CodeMirror from '@uiw/react-codemirror' import { ReactElement, useEffect, useState } from 'react' import { Message } from 'src/components/CustomTransactionMessage/BigMsg' -import { getInternalChainId } from 'src/config' import styled from 'styled-components' import { linter } from '@codemirror/lint' @@ -34,7 +33,6 @@ const Wrap = styled.div` ` function MessageGenerator({ setMessage, setIsError }): ReactElement { - const internalChainId = getInternalChainId() const [rawMsg, setRawMsg] = useState('') const [parsedMsg, setParsedMsg] = useState([]) const [errorMsg, setErrorMsg] = useState('') diff --git a/src/routes/safe/components/Apps/components/AppCard/index.tsx b/src/routes/safe/components/Apps/components/AppCard/index.tsx deleted file mode 100644 index 4a2d958b94..0000000000 --- a/src/routes/safe/components/Apps/components/AppCard/index.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import { SyntheticEvent } from 'react' -import styled from 'styled-components' -import { Link } from 'react-router-dom' -import Bookmark from '@material-ui/icons/Bookmark' -import BookmarkBorder from '@material-ui/icons/BookmarkBorder' -import { alpha } from '@material-ui/core/styles/colorManipulator' -import IconButton from '@material-ui/core/IconButton' -import { Title, Text, Button, Card, Icon } from '@aura/safe-react-components' -import { motion } from 'framer-motion' -import AddAppIcon from 'src/routes/safe/components/Apps/assets/addApp.svg' -import { FETCH_STATUS } from 'src/utils/requests' -import { SafeApp } from '../../types' - -import appsIconSvg from 'src/assets/icons/apps.svg' -import { AppIconSK, DescriptionSK, TitleSK } from './skeleton' - -const StyledAppCard = styled(Card)` - display: flex; - align-items: center; - flex-direction: column; - justify-content: space-evenly; - box-shadow: 1px 2px 10px 0 ${({ theme }) => alpha(theme.colors.shadow.color, 0.18)}; - height: 232px !important; - box-sizing: border-box; - cursor: pointer; - color: ${({ theme }) => theme.colors.secondary}; - - :hover { - box-shadow: 1px 2px 16px 0 ${({ theme }) => alpha(theme.colors.shadow.color, 0.35)}; - transition: box-shadow 0.3s ease-in-out; - background-color: ${({ theme }) => theme.colors.background}; - cursor: pointer; - - h5 { - color: ${({ theme }) => theme.colors.primary}; - } - } -` - -const IconBtn = styled(IconButton)` - &.MuiButtonBase-root { - position: absolute; - top: 10px; - right: 10px; - z-index: 10; - padding: 5px; - opacity: 0; - - transition: opacity 0.2s ease-in-out; - } - - svg { - width: 16px; - height: 16px; - } -` - -const AppContainer = styled(motion.div)` - position: relative; - - &:hover { - ${IconBtn} { - opacity: 1; - } - } -` - -const IconImg = styled.img<{ size: 'md' | 'lg'; src: string | undefined }>` - width: ${({ size }) => (size === 'md' ? '60px' : '102px')}; - height: ${({ size }) => (size === 'md' ? '60px' : '92px')}; - margin-top: ${({ size }) => (size === 'md' ? '0' : '-16px')}; - object-fit: contain; -` - -const AppName = styled(Title)` - text-align: center; - margin: 16px 0 9px 0; -` - -const AppDescription = styled(Text)` - text-align: center; - height: 72px; - line-height: 24px; - overflow: hidden; - display: -webkit-box; - -webkit-line-clamp: 3; - -webkit-box-orient: vertical; -` - -const StyledLink = styled(Link)` - text-decoration: none; -` - -const setAppImageFallback = (error: SyntheticEvent): void => { - error.currentTarget.onerror = null - error.currentTarget.src = appsIconSvg -} - -const isAppLoading = (app: SafeApp) => FETCH_STATUS.LOADING === app.fetchStatus -const getPinLabel = (name: string, pinned: boolean) => (pinned ? `Unpin ${name}` : `Pin ${name}`) - -type Shared = { - className?: string - app: SafeApp - iconSize?: 'md' | 'lg' - to: string - pinned?: boolean -} - -type CustomAppProps = Shared & { onRemove?: (app: SafeApp) => void; onPin?: undefined } -type RemoteAppProps = Shared & { onPin?: (app: SafeApp) => void; onRemove?: undefined } -type Props = CustomAppProps | RemoteAppProps - -const AppCard = ({ app, iconSize = 'md', to, onPin, onRemove, pinned = false }: Props): React.ReactElement => { - if (isAppLoading(app)) { - return ( - - - - - - - - - ) - } - - const content = ( - <> - - - {app.name} - {app.description} - - {onPin && ( - { - // prevent triggering the link event - e.preventDefault() - - onPin(app) - }} - > - {pinned ? : } - - )} - - {onRemove && ( - { - e.preventDefault() - - onRemove(app) - }} - > - - - )} - - ) - - return ( - - {content} - - ) -} - -const AddCustomAppCard = ({ onClick }: { onClick: () => void }): React.ReactElement => ( - - - - - - -) - -export { AppCard, AddCustomAppCard } diff --git a/src/routes/safe/components/Apps/components/AppCard/skeleton.tsx b/src/routes/safe/components/Apps/components/AppCard/skeleton.tsx deleted file mode 100644 index 92ef8718d2..0000000000 --- a/src/routes/safe/components/Apps/components/AppCard/skeleton.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import styled, { keyframes } from 'styled-components' - -const gradientSK = keyframes` - 0% { - background-position: 0% 54%; - } - 50% { - background-position: 100% 47%; - } - 100% { - background-position: 0% 54%; - } -` - -export const AppIconSK = styled.div` - height: 60px; - width: 60px; - border-radius: 30px; - margin: 0 auto; - background-color: lightgrey; - background: linear-gradient(84deg, lightgrey, transparent); - background-size: 400% 400%; - animation: ${gradientSK} 1.5s ease infinite; -` -export const TitleSK = styled.div` - height: 24px; - width: 160px; - margin: 24px auto; - background-color: lightgrey; - background: linear-gradient(84deg, lightgrey, transparent); - background-size: 400% 400%; - animation: ${gradientSK} 1.5s ease infinite; -` -export const DescriptionSK = styled.div` - height: 16px; - width: 200px; - background-color: lightgrey; - background: linear-gradient(84deg, lightgrey, transparent); - background-size: 400% 400%; - animation: ${gradientSK} 1.5s ease infinite; -` diff --git a/src/routes/safe/components/Apps/components/AppFrame.tsx b/src/routes/safe/components/Apps/components/AppFrame.tsx deleted file mode 100644 index f64e5c5f7b..0000000000 --- a/src/routes/safe/components/Apps/components/AppFrame.tsx +++ /dev/null @@ -1,356 +0,0 @@ -import { ReactElement, useState, useRef, useCallback, useEffect } from 'react' -import styled from 'styled-components' -import { Loader, Card, Title } from '@aura/safe-react-components' -import { - GetBalanceParams, - GetTxBySafeTxHashParams, - MethodToResponse, - RPCPayload, - Methods, - SignMessageParams, - RequestId, -} from '@gnosis.pm/safe-apps-sdk' - -import { useSelector } from 'react-redux' -import { INTERFACE_MESSAGES, Transaction, LowercaseNetworks } from '@gnosis.pm/safe-apps-sdk-v1' -import Web3 from 'web3' - -import { currentSafe } from 'src/logic/safe/store/selectors' -import { getChainInfo, getChainName, getSafeAppsRpcServiceUrl, getTxServiceUrl } from 'src/config' -import { isSameURL } from 'src/utils/url' -import { useAnalytics, SAFE_EVENTS } from 'src/utils/googleAnalytics' -import { LoadingContainer } from 'src/components/LoaderContainer/index' -import { SAFE_POLLING_INTERVAL } from 'src/utils/constants' -import { ConfirmTxModal } from './ConfirmTxModal' -import { useIframeMessageHandler } from '../hooks/useIframeMessageHandler' -import { getAppInfoFromUrl, getEmptySafeApp } from '../utils' -import { SafeApp } from '../types' -import { useAppCommunicator } from '../communicator' -import { fetchTokenCurrenciesBalances } from 'src/logic/safe/api/fetchTokenCurrenciesBalances' -import { fetchSafeTransaction } from 'src/logic/safe/transactions/api/fetchSafeTransaction' -import { logError, Errors } from 'src/logic/exceptions/CodedException' -import { addressBookEntryName } from 'src/logic/addressBook/store/selectors' -import { useSignMessageModal } from '../hooks/useSignMessageModal' -import { SignMessageModal } from './SignMessageModal' - -const AppWrapper = styled.div` - display: flex; - flex-direction: column; - height: 100%; - margin: 0 -16px; -` - -const StyledCard = styled(Card)` - flex-grow: 1; - padding: 0; - border-radius: 0; -` - -const StyledIframe = styled.iframe<{ isLoading: boolean }>` - height: 100%; - width: 100%; - overflow: auto; - box-sizing: border-box; - display: ${({ isLoading }) => (isLoading ? 'none' : 'block')}; -` - -export type TransactionParams = { - safeTxGas?: number -} - -type ConfirmTransactionModalState = { - isOpen: boolean - txs: Transaction[] - requestId: RequestId - params?: TransactionParams -} - -type Props = { - appUrl: string -} - -const APP_LOAD_ERROR_TIMEOUT = 30000 - -const INITIAL_CONFIRM_TX_MODAL_STATE: ConfirmTransactionModalState = { - isOpen: false, - txs: [], - requestId: '', - params: undefined, -} - -const safeAppWeb3Provider = new Web3.providers.HttpProvider(getSafeAppsRpcServiceUrl(), { - timeout: 10_000, -}) - -const URL_NOT_PROVIDED_ERROR = 'App url No provided or it is invalid.' -const APP_LOAD_ERROR = 'There was an error loading the Safe App. There might be a problem with the App provider.' - -const AppFrame = ({ appUrl }: Props): ReactElement => { - const { address: safeAddress, nativeBalance, owners, threshold } = useSelector(currentSafe) - const { nativeCurrency, chainId, chainName, shortName } = getChainInfo() - const safeName = useSelector((state) => addressBookEntryName(state, { address: safeAddress })) - const { trackEvent } = useAnalytics() - const iframeRef = useRef(null) - const [confirmTransactionModal, setConfirmTransactionModal] = - useState(INITIAL_CONFIRM_TX_MODAL_STATE) - const [appIsLoading, setAppIsLoading] = useState(true) - const [safeApp, setSafeApp] = useState(() => getEmptySafeApp(appUrl)) - const [signMessageModalState, openSignMessageModal, closeSignMessageModal] = useSignMessageModal() - const timer = useRef() - const [isLoadingSlow, setIsLoadingSlow] = useState(false) - const errorTimer = useRef() - const [, setAppLoadError] = useState(false) - - useEffect(() => { - const clearTimeouts = () => { - clearTimeout(timer.current) - clearTimeout(errorTimer.current) - } - - if (appIsLoading) { - timer.current = window.setTimeout(() => { - setIsLoadingSlow(true) - }, SAFE_POLLING_INTERVAL) - errorTimer.current = window.setTimeout(() => { - setAppLoadError(() => { - throw Error(APP_LOAD_ERROR) - }) - }, APP_LOAD_ERROR_TIMEOUT) - } else { - clearTimeouts() - setIsLoadingSlow(false) - } - - return () => { - clearTimeouts() - } - }, [appIsLoading]) - - const openConfirmationModal = useCallback( - (txs: Transaction[], params: TransactionParams | undefined, requestId: RequestId) => - setConfirmTransactionModal({ - isOpen: true, - txs, - requestId, - params, - }), - [setConfirmTransactionModal], - ) - const closeConfirmationModal = useCallback( - () => setConfirmTransactionModal(INITIAL_CONFIRM_TX_MODAL_STATE), - [setConfirmTransactionModal], - ) - - const { sendMessageToIframe } = useIframeMessageHandler( - safeApp, - openConfirmationModal, - closeConfirmationModal, - iframeRef, - ) - - const onIframeLoad = useCallback(() => { - const iframe = iframeRef.current - if (!iframe || !isSameURL(iframe.src, appUrl as string)) { - return - } - - setAppIsLoading(false) - sendMessageToIframe({ - messageId: INTERFACE_MESSAGES.ON_SAFE_INFO, - data: { - safeAddress: safeAddress as string, - network: getChainName().toLowerCase() as LowercaseNetworks, - ethBalance: nativeBalance as string, - }, - }) - }, [nativeBalance, safeAddress, appUrl, sendMessageToIframe]) - - const communicator = useAppCommunicator(iframeRef, safeApp) - - useEffect(() => { - communicator?.on('getEnvInfo', () => ({ - txServiceUrl: getTxServiceUrl(), - })) - - communicator?.on(Methods.getTxBySafeTxHash, async (msg) => { - const { safeTxHash } = msg.data.params as GetTxBySafeTxHashParams - - const tx = await fetchSafeTransaction(safeTxHash) - - return tx - }) - - communicator?.on(Methods.getSafeInfo, () => ({ - safeAddress, - network: chainName, - chainId: parseInt(chainId, 10), - owners, - threshold, - })) - - communicator?.on(Methods.getSafeBalances, async (msg) => { - const { currency = 'usd' } = msg.data.params as GetBalanceParams - - const balances = await fetchTokenCurrenciesBalances({ safeAddress, selectedCurrency: currency }) - - return balances - }) - - communicator?.on(Methods.rpcCall, async (msg) => { - const params = msg.data.params as RPCPayload - - try { - const response = new Promise((resolve, reject) => { - safeAppWeb3Provider.send( - { - jsonrpc: '2.0', - method: params.call, - params: params.params, - id: '1', - }, - (err, res) => { - if (err || res?.error) { - reject(err || res?.error) - } - - resolve(res?.result) - }, - ) - }) - - return response - } catch (err) { - return err - } - }) - - communicator?.on(Methods.sendTransactions, (msg) => { - // @ts-expect-error explore ways to fix this - openConfirmationModal(msg.data.params.txs as Transaction[], msg.data.params.params, msg.data.id) - }) - - communicator?.on(Methods.signMessage, async (msg) => { - const { message } = msg.data.params as SignMessageParams - - openSignMessageModal(message, msg.data.id) - }) - - communicator?.on(Methods.getChainInfo, async () => { - return { - chainName, - chainId, - shortName, - nativeCurrency, - } - }) - }, [ - communicator, - openConfirmationModal, - safeAddress, - owners, - threshold, - openSignMessageModal, - nativeCurrency, - chainId, - chainName, - shortName, - ]) - - const onUserTxConfirm = (safeTxHash: string, requestId: RequestId) => { - // Safe Apps SDK V1 Handler - sendMessageToIframe( - { messageId: INTERFACE_MESSAGES.TRANSACTION_CONFIRMED, data: { safeTxHash } }, - confirmTransactionModal.requestId, - ) - - // Safe Apps SDK V2 Handler - communicator?.send({ safeTxHash }, requestId as string) - } - - const onTxReject = (requestId: RequestId) => { - // Safe Apps SDK V1 Handler - sendMessageToIframe( - { messageId: INTERFACE_MESSAGES.TRANSACTION_REJECTED, data: {} }, - confirmTransactionModal.requestId, - ) - - // Safe Apps SDK V2 Handler - communicator?.send('Transaction was rejected', requestId as string, true) - } - - useEffect(() => { - if (!appUrl) { - throw Error(URL_NOT_PROVIDED_ERROR) - } - - const loadApp = async () => { - try { - const app = await getAppInfoFromUrl(appUrl) - setSafeApp(app) - } catch (err) { - logError(Errors._900, `${appUrl}, ${err.message}`) - } - } - - loadApp() - }, [appUrl]) - - //track GA - useEffect(() => { - if (safeApp) { - trackEvent({ ...SAFE_EVENTS.SAFE_APP, label: safeApp.name }) - } - }, [safeApp, trackEvent]) - - return ( - - - {appIsLoading && ( - - {isLoadingSlow && The Safe App is taking too long to load, consider refreshing.} - - - )} - - - - - - - - - ) -} - -export default AppFrame diff --git a/src/routes/safe/components/Apps/components/AppsList.tsx b/src/routes/safe/components/Apps/components/AppsList.tsx deleted file mode 100644 index c1790f988f..0000000000 --- a/src/routes/safe/components/Apps/components/AppsList.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { IconText, Loader, Menu, Text, Breadcrumb, BreadcrumbElement } from '@aura/safe-react-components' -import { useState } from 'react' -import styled, { css } from 'styled-components' -import { motion, AnimatePresence } from 'framer-motion' - -import Collapse from 'src/components/Collapse' -import Col from 'src/components/layout/Col' -import { Modal } from 'src/components/Modal' -import { AppCard, AddCustomAppCard } from 'src/routes/safe/components/Apps/components/AppCard' -import { useStateHandler } from 'src/logic/hooks/useStateHandler' -import { SearchInputCard } from './SearchInputCard' -import { NoAppsFound } from './NoAppsFound' -import { SafeApp } from '../types' -import AddAppForm from './AddAppForm' -import { useAppList } from '../hooks/appList/useAppList' -import { useAppsSearch } from '../hooks/useAppsSearch' -import { generateSafeRoute, extractSafeAddress, SAFE_ROUTES } from 'src/routes/routes' -import { getShortName } from 'src/config' -import { PinnedAppsTutorial } from './PinnedAppsTutorial' - -export const PINNED_APPS_LIST_TEST_ID = 'safe_apps__pinned-apps-container' -export const ALL_APPS_LIST_TEST_ID = 'safe_apps__all-apps-container' - -const Wrapper = styled.div` - height: 100%; - display: flex; - flex-direction: column; -` - -const centerCSS = css` - display: flex; - align-items: center; - justify-content: center; -` - -const LoadingContainer = styled.div` - width: 100%; - height: 100%; - ${centerCSS}; -` - -const CardsWrapper = styled(motion.div)` - width: 100%; - display: grid; - grid-template-columns: repeat(auto-fill, minmax(243px, 1fr)); - column-gap: 20px; - row-gap: 20px; - justify-content: space-evenly; -` - -const ContentWrapper = styled.div` - display: flex; - flex-direction: column; - flex-grow: 1; - align-items: center; -` - -const SectionHeading = styled(Text)` - width: 100%; - margin: ${({ theme }) => `${theme.margin.xl} 0 ${theme.margin.md} 0`}; -` - -const CenterIconText = styled(IconText)` - justify-content: center; - margin: 16px 55px 20px 0; -` - -const AppsList = (): React.ReactElement => { - const safeAddress = extractSafeAddress() - const appsPath = generateSafeRoute(SAFE_ROUTES.APPS, { - shortName: getShortName(), - safeAddress, - }) - const [appSearch, setAppSearch] = useState('') - const { allApps, appList, removeApp, isLoading, pinnedSafeApps, togglePin, customApps, addCustomApp } = useAppList() - const apps = useAppsSearch(appList, appSearch) - const [appToRemove, setAppToRemove] = useState(null) - const { open: isAddAppModalOpen, toggle: openAddAppModal, clickAway: closeAddAppModal } = useStateHandler() - const noAppsFound = apps.length === 0 && appSearch - const showCustomApps = !!customApps.length && !appSearch - const showPinnedApps = !appSearch - - const handleAppPin = (app: SafeApp) => { - togglePin(app) - } - - if (isLoading || !safeAddress) { - return ( - - - - ) - } - - return ( - - - - - - - - - - setAppSearch(value.replace(/\s{2,}/g, ' '))} /> - - {showPinnedApps && ( - - BOOKMARKED APPS - - } - defaultExpanded - > - {pinnedSafeApps.length === 0 && } - - - {pinnedSafeApps.map((a) => ( - - ))} - - - - )} - - {showCustomApps && ( - - CUSTOM APPS - - } - defaultExpanded - > - - - {customApps.map((a) => ( - - ))} - - - - )} - - - {appSearch ? 'SEARCH RESULTS' : 'ALL APPS'} - - {noAppsFound && setAppSearch('WalletConnect')} />} - - - {!appSearch && } - {apps.map((a) => ( - pinnedApp.id === a.id)} - /> - ))} - - - - - - - {isAddAppModalOpen && ( - - - Add custom app - - - - )} - - {appToRemove && ( - setAppToRemove(null)}> - setAppToRemove(null)}> - Remove app - - - - This action will remove{' '} - - {appToRemove.name} - {' '} - from the interface - - - - setAppToRemove(null) }} - confirmButtonProps={{ - color: 'error', - onClick: () => { - removeApp(appToRemove.id) - setAppToRemove(null) - }, - text: 'Remove', - }} - /> - - - )} - - ) -} - -export default AppsList diff --git a/src/routes/safe/components/Apps/components/ConfirmTxModal/ReviewConfirm.tsx b/src/routes/safe/components/Apps/components/ConfirmTxModal/ReviewConfirm.tsx index ddd2ef2d20..61e3415ec5 100644 --- a/src/routes/safe/components/Apps/components/ConfirmTxModal/ReviewConfirm.tsx +++ b/src/routes/safe/components/Apps/components/ConfirmTxModal/ReviewConfirm.tsx @@ -1,37 +1,31 @@ -import { Operation } from '@gnosis.pm/safe-react-gateway-sdk' import { Text } from '@aura/safe-react-components' +import { DecodedDataResponse, Operation } from '@gnosis.pm/safe-react-gateway-sdk' import { ReactElement, useEffect, useMemo, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' import styled from 'styled-components' import { toBN } from 'web3-utils' -import { DecodedDataResponse } from '@gnosis.pm/safe-react-gateway-sdk' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { getMultisendContractAddress } from 'src/logic/contracts/safeContracts' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { encodeMultiSendCall } from 'src/logic/safe/transactions/multisend' +import { BasicTxInfo, DecodeTxs } from 'src/components/DecodeTxs' +import Divider from 'src/components/Divider' +import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' +import { ReviewInfoText } from 'src/components/ReviewInfoText' +import Block from 'src/components/layout/Block' +import Hairline from 'src/components/layout/Hairline' import { getExplorerInfo, getNativeCurrency } from 'src/config' +import { getMultisendContractAddress } from 'src/logic/contracts/safeContracts' import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' +import { encodeMultiSendCall } from 'src/logic/safe/transactions/multisend' +import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { lg, md } from 'src/theme/variables' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { BasicTxInfo, DecodeTxs } from 'src/components/DecodeTxs' +import { lg, md } from 'src/theme/variables' import { fetchTxDecoder } from 'src/utils/decodeTx' -import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' -import Block from 'src/components/layout/Block' -import Hairline from 'src/components/layout/Hairline' -import Divider from 'src/components/Divider' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { ReviewInfoText } from 'src/components/ReviewInfoText' +import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' +import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { ConfirmTxModalProps, DecodedTxDetail } from '.' -import { grantedSelector } from 'src/utils/safeUtils/selector' import ExecuteCheckbox from 'src/components/ExecuteCheckbox' +import { grantedSelector } from 'src/utils/safeUtils/selector' +import { ConfirmTxModalProps, DecodedTxDetail } from '.' const Container = styled.div` max-width: 480px; @@ -123,7 +117,6 @@ export const ReviewConfirm = ({ manualGasLimit, }) - const [buttonStatus, setButtonStatus] = useEstimationStatus(txEstimationExecutionStatus) const [executionApproved, setExecutionApproved] = useState(true) const doExecute = isExecution && executionApproved @@ -137,38 +130,6 @@ export const ReviewConfirm = ({ decodeTxData() }, [txData]) - const handleUserConfirmation = (safeTxHash: string): void => { - onUserConfirm(safeTxHash, requestId) - onClose() - } - - const confirmTransactions = (txParameters: TxParameters) => { - setButtonStatus(ButtonStatus.LOADING) - - dispatch( - createTransaction( - { - safeAddress, - to: txRecipient, - valueInWei: txValue, - txData, - operation, - origin: app.id, - navigateToTransactionsTab: false, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, - delayExecution: !executionApproved, - }, - handleUserConfirmation, - onReject, - ), - ) - - setButtonStatus(ButtonStatus.READY) - } - const closeEditModalCallback = (txParameters: TxParameters) => { const oldGasPrice = gasPriceFormatted const newGasPrice = txParameters.ethGasPrice @@ -249,19 +210,6 @@ export const ReviewConfirm = ({ txEstimationExecutionStatus={txEstimationExecutionStatus} /> )} - - {/* Buttons */} - - confirmTransactions(txParameters), - disabled: !isOwner, - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - }} - /> - )} diff --git a/src/routes/safe/components/Apps/components/ConfirmTxModal/index.tsx b/src/routes/safe/components/Apps/components/ConfirmTxModal/index.tsx index c473fbd57e..3ffe601b44 100644 --- a/src/routes/safe/components/Apps/components/ConfirmTxModal/index.tsx +++ b/src/routes/safe/components/Apps/components/ConfirmTxModal/index.tsx @@ -4,8 +4,7 @@ import { RequestId } from '@gnosis.pm/safe-apps-sdk' import { DecodedDataParameterValue, DecodedDataResponse } from '@gnosis.pm/safe-react-gateway-sdk' import Modal from 'src/components/Modal' -import { SafeApp } from 'src/routes/safe/components/Apps/types' -import { TransactionParams } from 'src/routes/safe/components/Apps/components/AppFrame' +import { SafeApp, TransactionParams } from 'src/routes/safe/components/Apps/types' import { mustBeEthereumAddress } from 'src/components/forms/validator' import { SafeAppLoadError } from './SafeAppLoadError' import { ReviewConfirm } from './ReviewConfirm' diff --git a/src/routes/safe/components/Apps/components/LegalDisclaimer.tsx b/src/routes/safe/components/Apps/components/LegalDisclaimer.tsx deleted file mode 100644 index 7eb42883ef..0000000000 --- a/src/routes/safe/components/Apps/components/LegalDisclaimer.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { FixedDialog, Text } from '@aura/safe-react-components' - -interface OwnProps { - onCancel: () => void - onConfirm: () => void -} - -const LegalDisclaimer = ({ onCancel, onConfirm }: OwnProps): JSX.Element => ( - - - You are now accessing third-party apps, which we do not own, control, maintain or audit. We are not liable for - any loss you may suffer in connection with interacting with the apps, which is at your own risk. You must read - our Terms, which contain more detailed provisions binding on you relating to the apps. - -
- - I have read and understood the{' '} - - Terms - {' '} - and this Disclaimer, and agree to be bound by them. - - - } - onCancel={onCancel} - onConfirm={onConfirm} - title="Disclaimer" - /> -) - -export default LegalDisclaimer diff --git a/src/routes/safe/components/Apps/components/NoAppsFound.tsx b/src/routes/safe/components/Apps/components/NoAppsFound.tsx deleted file mode 100644 index 32159a462a..0000000000 --- a/src/routes/safe/components/Apps/components/NoAppsFound.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Text, Button } from '@aura/safe-react-components' -import styled from 'styled-components' - -const NoAppsFoundTextContainer = styled.div` - max-width: 650px; - display: flex; - flex-direction: column; - align-items: center; - margin-top: ${({ theme }) => theme.margin.xxl}; - margin-bottom: ${({ theme }) => theme.margin.xxl}; - - & > p { - text-align: center; - } -` - -const SButton = styled(Button)` - margin-top: ${({ theme }) => theme.margin.md}; - max-width: 300px; -` - -type Props = { - query: string - onWalletConnectSearch: () => void -} - -const NoAppsFound = ({ query, onWalletConnectSearch }: Props): React.ReactElement => ( - - - No apps found matching {query}. Connect to dApps that haven't yet been integrated with the Safe using - the WalletConnect App. - - - Search WalletConnect - - -) - -export { NoAppsFound } diff --git a/src/routes/safe/components/Apps/components/PinnedAppsTutorial.tsx b/src/routes/safe/components/Apps/components/PinnedAppsTutorial.tsx deleted file mode 100644 index f5a9c81b3f..0000000000 --- a/src/routes/safe/components/Apps/components/PinnedAppsTutorial.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Text } from '@aura/safe-react-components' -import Card from '@material-ui/core/Card' -import BookmarkBorder from '@material-ui/icons/BookmarkBorder' - -import styled from 'styled-components' -import InfoIcon from 'src/assets/icons/info.svg' -import Img from 'src/components/layout/Img' - -const NoAppsFoundTextContainer = styled(Card)` - display: flex; - margin-top: ${({ theme }) => theme.margin.md}; - margin-bottom: ${({ theme }) => theme.margin.md}; - box-shadow: 1px 2px 10px 0 rgba(212, 212, 211, 0.59); - box-sizing: border-box; - max-width: 100%; - padding: 52px 54px; - justify-content: center; - gap: ${({ theme }) => theme.margin.sm}; -` - -const StyledBookmarkIcon = styled(BookmarkBorder)` - height: 16px; - vertical-align: middle; -` - -const PinnedAppsTutorial = (): React.ReactElement => ( - - Info - - Simply hover over an app and click on the - - to bookmark the app here for convenient access - - -) - -export { PinnedAppsTutorial } diff --git a/src/routes/safe/components/Apps/components/SignMessageModal/ReviewMessage.tsx b/src/routes/safe/components/Apps/components/SignMessageModal/ReviewMessage.tsx deleted file mode 100644 index 3ccc27d798..0000000000 --- a/src/routes/safe/components/Apps/components/SignMessageModal/ReviewMessage.tsx +++ /dev/null @@ -1,257 +0,0 @@ -import { Operation } from '@gnosis.pm/safe-react-gateway-sdk' -import { Icon, Text } from '@aura/safe-react-components' -import MuiTextField from '@material-ui/core/TextField' -import { ReactElement, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' -import styled from 'styled-components' - -import ModalTitle from 'src/components/ModalTitle' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { getExplorerInfo, getNativeCurrency } from 'src/config' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { lg, md } from 'src/theme/variables' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { BasicTxInfo } from 'src/components/DecodeTxs' -import Block from 'src/components/layout/Block' -import Divider from 'src/components/Divider' -import { SignMessageModalProps } from '.' -import Hairline from 'src/components/layout/Hairline' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { grantedSelector } from 'src/utils/safeUtils/selector' -import Paragraph from 'src/components/layout/Paragraph' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' - -const Container = styled.div` - max-width: 480px; - padding: ${md} ${lg} 0; -` - -const StyledBlock = styled(Block)` - background-color: ${({ theme }) => theme.colors.separator}; - width: fit-content; - padding: 5px 10px; - border-radius: 3px; - margin: 4px 0 0 40px; - - display: flex; - - > :nth-child(1) { - margin-right: 5px; - } -` - -const MessageTextArea = styled(MuiTextField)` - &.MuiFormControl-root { - padding-bottom: ${({ theme }) => theme.margin.md}; - } -` - -const InfoMessage = styled(Paragraph)` - display: flex; - align-items: center; - - > span:first-child { - margin-right: ${({ theme }) => theme.margin.xs}; - } -` - -type Props = Omit & { - txData: string - txRecipient: string - utf8Message: string -} - -export const ReviewMessage = ({ - app, - safeAddress, - nativeBalance, - safeName, - onUserConfirm, - onClose, - onTxReject, - requestId, - utf8Message, - txData, - txRecipient, -}: Props): ReactElement => { - const dispatch = useDispatch() - const explorerUrl = getExplorerInfo(safeAddress) - const nativeCurrency = getNativeCurrency() - const isOwner = useSelector(grantedSelector) - - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const { - gasLimit, - gasPriceFormatted, - gasEstimation, - isOffChainSignature, - isCreation, - isExecution, - gasCostFormatted, - txEstimationExecutionStatus, - } = useEstimateTransactionGas({ - txData: txData || '', - txRecipient, - operation: Operation.DELEGATE, - txAmount: '0', - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus, setButtonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - const handleTxRejection = () => { - onTxReject(requestId) - onClose() - } - - const handleUserConfirmation = (safeTxHash: string): void => { - onUserConfirm(safeTxHash, requestId) - onClose() - } - - const confirmTransactions = (txParameters: TxParameters) => { - setButtonStatus(ButtonStatus.LOADING) - - dispatch( - createTransaction( - { - safeAddress, - to: txRecipient, - valueInWei: '0', - txData, - operation: Operation.DELEGATE, - origin: app.id, - navigateToTransactionsTab: false, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, - }, - handleUserConfirmation, - handleTxRejection, - ), - ) - - setButtonStatus(ButtonStatus.READY) - } - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - return ( - - {(txParameters, toggleEditMode) => ( -
- - - - - - {/* Safe */} - - - Balance: - {`${nativeBalance} ${nativeCurrency.symbol}`} - - - - - - - - Signing message: - - {}, - placeholder: '', - }} - InputProps={{ - disableUnderline: true, - }} - /> - - - Signing a message with the Aura Safe requires a transaction on the blockchain - - - - - - {/* Gas info */} - {txEstimationExecutionStatus === EstimationStatus.LOADING ? null : ( - - )} - - {/* Buttons */} - - confirmTransactions(txParameters), - disabled: !isOwner, - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - }} - /> - -
- )} -
- ) -} diff --git a/src/routes/safe/components/Apps/components/SignMessageModal/index.tsx b/src/routes/safe/components/Apps/components/SignMessageModal/index.tsx deleted file mode 100644 index 0a964105c7..0000000000 --- a/src/routes/safe/components/Apps/components/SignMessageModal/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { RequestId } from '@gnosis.pm/safe-apps-sdk' -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' -import { hexToUtf8, isHexStrict } from 'web3-utils' - -import { getWeb3ReadOnly } from 'src/logic/wallets/getWeb3' -import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' -import { getSignMessageLibContractInstance, getSignMessageLibAddress } from 'src/logic/contracts/safeContracts' -import Modal from 'src/components/Modal' -import { SafeApp } from 'src/routes/safe/components/Apps/types' -import { ReviewMessage } from './ReviewMessage' -import { currentChainId } from 'src/logic/config/store/selectors' - -export type SignMessageModalProps = { - isOpen: boolean - app: SafeApp - message: string - safeAddress: string - safeName: string - requestId: RequestId - nativeBalance: string - onUserConfirm: (safeTxHash: string, requestId: RequestId) => void - onTxReject: (requestId: RequestId) => void - onClose: () => void -} - -const convertToHumanReadableMessage = (message: string): string => { - const isHex = isHexStrict(message.toString()) - - let humanReadableMessage = message - if (isHex) { - try { - humanReadableMessage = hexToUtf8(message) - } catch (e) { - // do nothing - } - } - - return humanReadableMessage -} - -export const SignMessageModal = ({ message, isOpen, ...rest }: SignMessageModalProps): ReactElement => { - const web3 = getWeb3ReadOnly() - const networkId = useSelector(currentChainId) - const txRecipient = getSignMessageLibAddress(networkId) || ZERO_ADDRESS - const txData = getSignMessageLibContractInstance(web3, networkId) - .methods.signMessage(web3.eth.accounts.hashMessage(message)) - .encodeABI() - - const readableData = convertToHumanReadableMessage(message) - - return ( - - - - ) -} diff --git a/src/routes/safe/components/Apps/hooks/appList/useAppList.ts b/src/routes/safe/components/Apps/hooks/appList/useAppList.ts deleted file mode 100644 index fc0ffba3aa..0000000000 --- a/src/routes/safe/components/Apps/hooks/appList/useAppList.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { useCallback, useMemo } from 'react' - -import { SafeApp } from '../../types' -import { useCustomSafeApps } from './useCustomSafeApps' -import { useRemoteSafeApps } from './useRemoteSafeApps' -import { usePinnedSafeApps } from './usePinnedSafeApps' -import { FETCH_STATUS } from 'src/utils/requests' -import { SAFE_APP_EVENTS, useAnalytics } from 'src/utils/googleAnalytics' - -type UseAppListReturnType = { - allApps: SafeApp[] - appList: SafeApp[] - customApps: SafeApp[] - pinnedSafeApps: SafeApp[] - togglePin: (app: SafeApp) => void - removeApp: (appId: string) => void - addCustomApp: (app: SafeApp) => void - isLoading: boolean -} - -const useAppList = (): UseAppListReturnType => { - const { remoteSafeApps, status: remoteAppsFetchStatus } = useRemoteSafeApps() - const { customSafeApps, updateCustomSafeApps } = useCustomSafeApps() - const { pinnedSafeAppIds, updatePinnedSafeApps } = usePinnedSafeApps(remoteSafeApps, remoteAppsFetchStatus) - const remoteIsLoading = remoteAppsFetchStatus === FETCH_STATUS.LOADING - - const { trackEvent } = useAnalytics() - - const allApps = useMemo(() => { - const allApps = [...remoteSafeApps, ...customSafeApps] - return allApps.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())) - }, [remoteSafeApps, customSafeApps]) - - const appList = useMemo(() => { - return remoteSafeApps.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())) - }, [remoteSafeApps]) - - const customApps = useMemo( - () => - // Filter out custom apps that are now part of the production app list - customSafeApps - .filter((persistedApp) => !remoteSafeApps.some((app) => app.url === persistedApp.url)) - .sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())), - [customSafeApps, remoteSafeApps], - ) - - const pinnedSafeApps = useMemo( - () => appList.filter((app) => pinnedSafeAppIds.includes(app.id)), - [pinnedSafeAppIds, appList], - ) - - const addCustomApp = useCallback( - (app: SafeApp): void => { - const newList = [...customSafeApps, app] - updateCustomSafeApps(newList) - }, - [updateCustomSafeApps, customSafeApps], - ) - - const removeApp = useCallback( - (appId: string): void => { - const newPersistedList = customSafeApps.filter(({ id }) => id !== appId) - updateCustomSafeApps(newPersistedList) - }, - [updateCustomSafeApps, customSafeApps], - ) - - const togglePin = useCallback( - (app: SafeApp): void => { - const { id: appId, name: appName } = app - const newPinnedIds = [...pinnedSafeAppIds] - const isAppPinned = pinnedSafeAppIds.includes(appId) - - if (isAppPinned) { - trackEvent({ ...SAFE_APP_EVENTS.PIN, label: appName }) - newPinnedIds.splice(newPinnedIds.indexOf(appId), 1) - } else { - trackEvent({ ...SAFE_APP_EVENTS.UNPIN, label: appName }) - newPinnedIds.push(appId) - } - - updatePinnedSafeApps(newPinnedIds) - }, - [trackEvent, updatePinnedSafeApps, pinnedSafeAppIds], - ) - - return { - allApps, - appList, - customApps, - pinnedSafeApps, - removeApp, - togglePin, - addCustomApp, - isLoading: remoteIsLoading, - } -} - -export { useAppList } diff --git a/src/routes/safe/components/Apps/hooks/appList/useCustomSafeApps.ts b/src/routes/safe/components/Apps/hooks/appList/useCustomSafeApps.ts deleted file mode 100644 index b7c5bc5372..0000000000 --- a/src/routes/safe/components/Apps/hooks/appList/useCustomSafeApps.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { useState, useEffect, useCallback } from 'react' -import { loadFromStorage, saveToStorage } from 'src/utils/storage' -import { logError, Errors } from 'src/logic/exceptions/CodedException' -import { FETCH_STATUS } from 'src/utils/requests' -import { APPS_STORAGE_KEY, getAppInfoFromUrl, getEmptySafeApp } from '../../utils' -import { StoredSafeApp, SafeApp } from '../../types' - -type ReturnType = { - customSafeApps: SafeApp[] - loaded: boolean - updateCustomSafeApps: (newCustomSafeApps: SafeApp[]) => void -} - -type CustomSafeApp = StoredSafeApp - -/* - This hook is used to manage the list of custom safe apps. - What it does: - 1. Loads a list of custom safe apps from local storage - 2. Does some backward compatibility checks (supported app networks, etc) - 3. Tries to fetch the app info (manifest.json) from the app url -*/ -const useCustomSafeApps = (): ReturnType => { - const [customSafeApps, setCustomSafeApps] = useState([]) - const [loaded, setLoaded] = useState(false) - - const updateCustomSafeApps = useCallback((newCustomSafeApps: SafeApp[]) => { - setCustomSafeApps(newCustomSafeApps) - saveToStorage( - APPS_STORAGE_KEY, - newCustomSafeApps.map(({ url }) => ({ url })), - ) - }, []) - - useEffect(() => { - const fetchAppCallback = (res: SafeApp, error = false) => { - setCustomSafeApps((prev) => { - const prevAppsCopy = [...prev] - const appIndex = prevAppsCopy.findIndex((a) => a.url === res.url) - - if (error) { - prevAppsCopy.splice(appIndex, 1) - } else { - prevAppsCopy[appIndex] = { ...res, fetchStatus: FETCH_STATUS.SUCCESS } - } - - return prevAppsCopy - }) - } - - const loadCustomApps = async () => { - // recover apps from storage (third-party apps added by the user) - const storageAppList = (await loadFromStorage(APPS_STORAGE_KEY)) || [] - // if the app does not expose supported networks, include them. (backward compatible) - const serializedApps = storageAppList.map( - (app): SafeApp => ({ - ...getEmptySafeApp(), - ...app, - url: app.url.trim(), - id: app.url.trim(), - custom: true, - }), - ) - setCustomSafeApps(serializedApps) - setLoaded(true) - - serializedApps.forEach((app) => { - getAppInfoFromUrl(app.url) - .then((appFromUrl) => { - fetchAppCallback({ ...appFromUrl, custom: true }) - }) - .catch((err) => { - fetchAppCallback(app, true) - logError(Errors._900, `${app.url}, ${err.message}`) - }) - }) - } - - loadCustomApps() - }, []) - - return { customSafeApps, loaded, updateCustomSafeApps } -} - -export { useCustomSafeApps } diff --git a/src/routes/safe/components/Apps/hooks/appList/usePinnedSafeApps.ts b/src/routes/safe/components/Apps/hooks/appList/usePinnedSafeApps.ts deleted file mode 100644 index 182fc41695..0000000000 --- a/src/routes/safe/components/Apps/hooks/appList/usePinnedSafeApps.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { useState, useEffect } from 'react' -import { loadFromStorage, saveToStorage } from 'src/utils/storage' -import { PINNED_SAFE_APP_IDS } from '../../utils' -import { FETCH_STATUS } from 'src/utils/requests' -import { SafeApp } from '../../types' - -type ReturnType = { - pinnedSafeAppIds: string[] - loaded: boolean - updatePinnedSafeApps: (newPinnedSafeAppIds: string[]) => void -} - -const usePinnedSafeApps = (remoteSafeApps: SafeApp[], remoteAppsFetchStatus: FETCH_STATUS): ReturnType => { - const [pinnedSafeAppIds, updatePinnedSafeApps] = useState([]) - const [loaded, setLoaded] = useState(false) - - useEffect(() => { - const loadPinnedAppIds = async () => { - const pinnedAppIds = (await loadFromStorage(PINNED_SAFE_APP_IDS)) || [] - - const isRemoteSafeAppsListLoaded = remoteAppsFetchStatus === FETCH_STATUS.SUCCESS - if (isRemoteSafeAppsListLoaded) { - // we remove pinned Safe Apps that are not included in the remote list, see #2847 - const filteredPinnedAppsIds = pinnedAppIds.filter((pinnedAppId) => - remoteSafeApps.some((app) => app.id === pinnedAppId), - ) - updatePinnedSafeApps(filteredPinnedAppsIds) - setLoaded(true) - } - } - - loadPinnedAppIds() - }, [remoteAppsFetchStatus, remoteSafeApps]) - - // we only update pinned apps in the localStorage when remote Apps are loaded - useEffect(() => { - const isRemoteSafeAppsListLoaded = remoteAppsFetchStatus === FETCH_STATUS.SUCCESS - if (isRemoteSafeAppsListLoaded) { - saveToStorage(PINNED_SAFE_APP_IDS, pinnedSafeAppIds) - } - }, [pinnedSafeAppIds, remoteAppsFetchStatus]) - - return { pinnedSafeAppIds, loaded, updatePinnedSafeApps } -} - -export { usePinnedSafeApps } diff --git a/src/routes/safe/components/Apps/hooks/appList/useRemoteSafeApps.ts b/src/routes/safe/components/Apps/hooks/appList/useRemoteSafeApps.ts deleted file mode 100644 index fa596474a1..0000000000 --- a/src/routes/safe/components/Apps/hooks/appList/useRemoteSafeApps.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { useState, useEffect } from 'react' -import { useDispatch } from 'react-redux' -import { logError, Errors } from 'src/logic/exceptions/CodedException' -import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import { NOTIFICATIONS } from 'src/logic/notifications' -import { FETCH_STATUS } from 'src/utils/requests' -import { SafeApp } from '../../types' -import { fetchSafeAppsList } from 'src/logic/safe/api/fetchSafeApps' - -type ReturnType = { - remoteSafeApps: SafeApp[] - status: FETCH_STATUS -} - -const useRemoteSafeApps = (): ReturnType => { - const [remoteSafeApps, setRemoteSafeApps] = useState([]) - const [status, setStatus] = useState(FETCH_STATUS.NOT_ASKED) - const dispatch = useDispatch() - - useEffect(() => { - const loadAppsList = async () => { - setStatus(FETCH_STATUS.LOADING) - try { - const result = await fetchSafeAppsList() - - if (result?.length) { - setRemoteSafeApps(result.map((app) => ({ ...app, fetchStatus: FETCH_STATUS.SUCCESS, id: String(app.id) }))) - setStatus(FETCH_STATUS.SUCCESS) - } else { - throw new Error('Empty apps array 🤬') - } - } catch (e) { - setStatus(FETCH_STATUS.ERROR) - logError(Errors._902, e.message) - dispatch(enqueueSnackbar(NOTIFICATIONS.SAFE_APPS_FETCH_ERROR_MSG)) - } - } - - loadAppsList() - }, [dispatch]) - - return { remoteSafeApps, status } -} - -export { useRemoteSafeApps } diff --git a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts index 65e837d572..d093e37eec 100644 --- a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts +++ b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts @@ -15,8 +15,7 @@ import { useEffect, useCallback, MutableRefObject } from 'react' import { getChainName, getTxServiceUrl } from 'src/config/' import { currentSafeWithNames } from 'src/logic/safe/store/selectors' -import { TransactionParams } from '../components/AppFrame' -import { SafeApp } from 'src/routes/safe/components/Apps/types' +import { SafeApp, TransactionParams } from 'src/routes/safe/components/Apps/types' type InterfaceMessageProps = { messageId: T diff --git a/src/routes/safe/components/Apps/index.tsx b/src/routes/safe/components/Apps/index.tsx index acb9ff7255..77090b005d 100644 --- a/src/routes/safe/components/Apps/index.tsx +++ b/src/routes/safe/components/Apps/index.tsx @@ -1,27 +1,18 @@ import { useHistory } from 'react-router-dom' import { useSafeAppUrl } from 'src/logic/hooks/useSafeAppUrl' -import AppFrame from 'src/routes/safe/components/Apps/components/AppFrame' -import AppsList from 'src/routes/safe/components/Apps/components/AppsList' -import LegalDisclaimer from 'src/routes/safe/components/Apps/components/LegalDisclaimer' -import { useLegalConsent } from 'src/routes/safe/components/Apps/hooks/useLegalConsent' const Apps = (): React.ReactElement => { const history = useHistory() const { getAppUrl } = useSafeAppUrl() const url = getAppUrl() - const { consentReceived, onConsentReceipt } = useLegalConsent() const goBack = () => history.goBack() if (url) { - if (!consentReceived) { - return - } - - return + return <> } else { - return + return <> } } diff --git a/src/routes/safe/components/Apps/types.ts b/src/routes/safe/components/Apps/types.ts index 16c7de1fd6..c9a08d6465 100644 --- a/src/routes/safe/components/Apps/types.ts +++ b/src/routes/safe/components/Apps/types.ts @@ -11,3 +11,7 @@ export type SafeApp = Omit & { export type StoredSafeApp = { url: string } + +export type TransactionParams = { + safeTxGas?: number +} \ No newline at end of file diff --git a/src/routes/safe/components/Balances/SendModal/index.tsx b/src/routes/safe/components/Balances/SendModal/index.tsx index 594c823654..d355f881f2 100644 --- a/src/routes/safe/components/Balances/SendModal/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/index.tsx @@ -5,12 +5,10 @@ import { Suspense, useEffect, useState, lazy } from 'react' import Modal from 'src/components/Modal' import { CollectibleTx } from './screens/ReviewCollectible' import { ReviewCustomTxProps } from './screens/ContractInteraction/ReviewCustomTx' -import { ContractInteractionTx } from './screens/ContractInteraction' import { CustomTxProps } from './screens/ContractInteraction/SendCustomTx' import { ReviewTxProp } from './screens/ReviewSendFundsTx' import { NFTToken } from 'src/logic/collectibles/sources/collectibles.d' import { SendCollectibleTxInfo } from './screens/SendCollectible' -import { Erc721Transfer } from '@gnosis.pm/safe-react-gateway-sdk' const ChooseTxType = lazy(() => import('./screens/ChooseTxType')) @@ -22,15 +20,12 @@ const ReviewCollectible = lazy(() => import('./screens/ReviewCollectible')) const ReviewSendFundsTx = lazy(() => import('./screens/ReviewSendFundsTx')) -const ContractInteraction = lazy(() => import('./screens/ContractInteraction')) - const ContractInteractionReview: any = lazy(() => import('./screens/ContractInteraction/Review')) const SendCustomTx = lazy(() => import('./screens/ContractInteraction/SendCustomTx')) const ReviewCustomTx = lazy(() => import('./screens/ContractInteraction/ReviewCustomTx')) - const useStyles = makeStyles({ loaderStyle: { height: '500px', @@ -62,7 +57,7 @@ type Props = { onClose: () => void recipientAddress?: string recipientName?: string - selectedToken?: string | NFTToken | Erc721Transfer + selectedToken?: string | NFTToken tokenAmount?: string } @@ -118,8 +113,6 @@ const SendModal = ({ setActiveScreen(screen) } - const handleVoting = (screen: TxType) => {} - return ( )} - {activeScreen === 'contractInteraction' && isABI && ( + {/* {activeScreen === 'contractInteraction' && isABI && ( - )} + )} */} {activeScreen === 'contractInteractionReview' && isABI && tx && ( handleOnPrev('contractInteraction')} tx={tx} /> diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx index 2479c95598..8b279a473e 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx @@ -1,38 +1,34 @@ -import { useEffect, useState, Fragment } from 'react' import { makeStyles } from '@material-ui/core/styles' +import { Fragment, useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { getExplorerInfo, getNativeCurrency } from 'src/config' -import { toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' +import ExecuteCheckbox from 'src/components/ExecuteCheckbox' +import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' +import { ReviewInfoText } from 'src/components/ReviewInfoText' import Block from 'src/components/layout/Block' import Col from 'src/components/layout/Col' import Hairline from 'src/components/layout/Hairline' import Img from 'src/components/layout/Img' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' +import { getExplorerInfo, getNativeCurrency } from 'src/config' +import { addressBookEntryName } from 'src/logic/addressBook/store/selectors' import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' +import { useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' +import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' +import { toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' +import { extractSafeAddress } from 'src/routes/routes' import { styles } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/style' -import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' import { generateFormFieldKey, getValueFromTxInputs, } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils' -import { useEstimateTransactionGas, EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas' -import { addressBookEntryName } from 'src/logic/addressBook/store/selectors' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { extractSafeAddress } from 'src/routes/routes' -import ExecuteCheckbox from 'src/components/ExecuteCheckbox' +import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' +import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' +import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' +import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' const useStyles = makeStyles(styles) @@ -99,27 +95,6 @@ const ContractInteractionReview = ({ onClose, onPrev, tx }: Props): React.ReactE }) }, [tx.contractAddress, tx.value, tx.data, safeAddress, nativeCurrency.decimals]) - const submitTx = (txParameters: TxParameters) => { - if (safeAddress && txInfo) { - dispatch( - createTransaction({ - safeAddress, - to: txInfo?.txRecipient, - valueInWei: txInfo?.txAmount, - txData: txInfo?.txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, - delayExecution: !executionApproved, - }), - ) - } else { - console.error('There was an error trying to submit the transaction, the safeAddress was not found') - } - onClose() - } - const closeEditModalCallback = (txParameters: TxParameters) => { const oldGasPrice = gasPriceFormatted const newGasPrice = txParameters.ethGasPrice @@ -246,18 +221,6 @@ const ContractInteractionReview = ({ onClose, onPrev, tx }: Props): React.ReactE safeNonce={txParameters.safeNonce} txEstimationExecutionStatus={txEstimationExecutionStatus} /> - - - submitTx(txParameters), - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - testId: 'submit-tx-btn', - }} - /> - )} diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx index 04d0cda196..005105194b 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx @@ -1,34 +1,29 @@ +import { makeStyles } from '@material-ui/core/styles' import { ReactElement, useState } from 'react' import { useDispatch } from 'react-redux' -import { makeStyles } from '@material-ui/core/styles' -import { getExplorerInfo, getNativeCurrency } from 'src/config' -import { toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' import Divider from 'src/components/Divider' +import ExecuteCheckbox from 'src/components/ExecuteCheckbox' +import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' +import { ReviewInfoText } from 'src/components/ReviewInfoText' import Block from 'src/components/layout/Block' import Col from 'src/components/layout/Col' import Hairline from 'src/components/layout/Hairline' import Img from 'src/components/layout/Img' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' +import { getExplorerInfo, getNativeCurrency } from 'src/config' +import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' +import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' +import { toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' +import { extractSafeAddress } from 'src/routes/routes' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' +import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { useEstimateTransactionGas, EstimationStatus } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' +import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' import { styles } from './style' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { extractSafeAddress } from 'src/routes/routes' -import ExecuteCheckbox from 'src/components/ExecuteCheckbox' export type ReviewCustomTxProps = { contractAddress: string @@ -70,30 +65,30 @@ const ReviewCustomTx = ({ onClose, onPrev, tx }: Props): ReactElement => { const doExecute = isExecution && executionApproved const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - const submitTx = (txParameters: TxParameters) => { - const txRecipient = tx.contractAddress - const txData = tx.data ? tx.data.trim() : '' - const txValue = tx.value ? toTokenUnit(tx.value, nativeCurrency.decimals) : '0' + // const submitTx = (txParameters: TxParameters) => { + // const txRecipient = tx.contractAddress + // const txData = tx.data ? tx.data.trim() : '' + // const txValue = tx.value ? toTokenUnit(tx.value, nativeCurrency.decimals) : '0' - if (safeAddress) { - dispatch( - createTransaction({ - safeAddress: safeAddress, - to: txRecipient as string, - valueInWei: txValue, - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, - delayExecution: !executionApproved, - }), - ) - } else { - console.error('There was an error trying to submit the transaction, the safeAddress was not found') - } - onClose() - } + // if (safeAddress) { + // dispatch( + // createTransaction({ + // safeAddress: safeAddress, + // to: txRecipient as string, + // valueInWei: txValue, + // txData, + // txNonce: txParameters.safeNonce, + // safeTxGas: txParameters.safeTxGas, + // ethParameters: txParameters, + // notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, + // delayExecution: !executionApproved, + // }), + // ) + // } else { + // console.error('There was an error trying to submit the transaction, the safeAddress was not found') + // } + // onClose() + // } return ( { txEstimationExecutionStatus={txEstimationExecutionStatus} /> )} - + {/* { testId: 'submit-tx-btn', }} /> - + */} )} diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx index 89ac7da3d5..2785510d32 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx @@ -1,26 +1,26 @@ +import Switch from '@material-ui/core/Switch' import { makeStyles } from '@material-ui/core/styles' import { useMemo } from 'react' -import Switch from '@material-ui/core/Switch' -import { styles } from './style' import Divider from 'src/components/Divider' import GnoForm from 'src/components/forms/GnoForm' import Block from 'src/components/layout/Block' import Hairline from 'src/components/layout/Hairline' -import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import Paragraph from 'src/components/layout/Paragraph' +import { extractSafeAddress } from 'src/routes/routes' +import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' +import { ModalHeader } from '../ModalHeader' import Buttons from './Buttons' import ContractABI from './ContractABI' import { EthAddressInput } from './EthAddressInput' import FormErrorMessage from './FormErrorMessage' import { MethodsDropdown } from './MethodsDropdown' +import { NativeCoinValue } from './NativeCoinValue' import { RenderInputParams } from './RenderInputParams' import { RenderOutputParams } from './RenderOutputParams' -import { createTxObject, formMutators, handleSubmitError, isReadMethod, ensResolver } from './utils' import { TransactionReviewType } from './Review' -import { NativeCoinValue } from './NativeCoinValue' -import { ModalHeader } from '../ModalHeader' -import { extractSafeAddress } from 'src/routes/routes' +import { styles } from './style' +import { ensResolver, formMutators } from './utils' const useStyles = makeStyles(styles) @@ -71,24 +71,21 @@ const ContractInteraction: React.FC = ({ { contractAddress, selectedMethod, value, ...values }, submit = true, ): Promise> => { - if (value || (contractAddress && selectedMethod)) { - try { - const txObject = createTxObject(selectedMethod, contractAddress, values) - const data = txObject.encodeABI() - - if (isReadMethod(selectedMethod) && submit) { - const result = await txObject.call({ from: safeAddress }) - setCallResults(result) - - // this was a read method, so we won't go to the 'review' screen - return - } - - onNext({ ...values, contractAddress, data, selectedMethod, value }, submit) - } catch (error) { - return handleSubmitError(error, values) - } - } + // if (value || (contractAddress && selectedMethod)) { + // try { + // const txObject = createTxObject(selectedMethod, contractAddress, values) + // const data = txObject.encodeABI() + // if (isReadMethod(selectedMethod) && submit) { + // const result = await txObject.call({ from: safeAddress }) + // setCallResults(result) + // // this was a read method, so we won't go to the 'review' screen + // return + // } + // onNext({ ...values, contractAddress, data, selectedMethod, value }, submit) + // } catch (error) { + // return handleSubmitError(error, values) + // } + // } } return ( diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts index 7026a5b90d..3e0f85e70b 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts @@ -1,12 +1,11 @@ import { FORM_ERROR, Mutator, SubmissionErrors } from 'final-form' import createDecorator from 'final-form-calculate' -import { ContractSendMethod } from 'web3-eth-contract' +import { BigNumber } from 'bignumber.js' import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService' -import { getAddressFromDomain, getWeb3 } from 'src/logic/wallets/getWeb3' -import { TransactionReviewType } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review' import { isValidCryptoDomainName, isValidEnsName } from 'src/logic/wallets/ethAddresses' -import { BigNumber } from 'bignumber.js' +import { getAddressFromDomain } from 'src/logic/wallets/getWeb3' +import { TransactionReviewType } from '../Review' export const NO_CONTRACT = 'no contract' @@ -97,24 +96,24 @@ export const generateFormFieldKey = (type: string, signatureHash: string, index: const extractMethodArgs = (signatureHash: string, values: Record) => - ({ type }, index) => { - const key = generateFormFieldKey(type, signatureHash, index) + ({ type }, index) => { + const key = generateFormFieldKey(type, signatureHash, index) - return getParsedJSONOrArrayFromString(values[key]) || values[key] - } + return getParsedJSONOrArrayFromString(values[key]) || values[key] + } -export const createTxObject = ( - method: AbiItemExtended, - contractAddress: string, - values: Record, -): ContractSendMethod => { - const web3 = getWeb3() - const contract = new web3.eth.Contract([method], contractAddress) - const { inputs, name = '', signatureHash } = method - const args = inputs?.map(extractMethodArgs(signatureHash, values)) || [] - - return contract.methods[name](...args) -} +// export const createTxObject = ( +// method: AbiItemExtended, +// contractAddress: string, +// values: Record, +// ): ContractSendMethod => { +// const web3 = getWeb3() +// const contract = new web3.eth.Contract([method], contractAddress) +// const { inputs, name = '', signatureHash } = method +// const args = inputs?.map(extractMethodArgs(signatureHash, values)) || [] + +// return contract.methods[name](...args) +// } export const isReadMethod = (method: AbiItemExtended): boolean => method && method.action === 'read' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx index 86675a1b46..41a73593cf 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx @@ -1,8 +1,7 @@ +import { makeStyles } from '@material-ui/core/styles' import { useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { makeStyles } from '@material-ui/core/styles' -import { getExplorerInfo } from 'src/config' import Divider from 'src/components/Divider' import Block from 'src/components/layout/Block' import Col from 'src/components/layout/Col' @@ -10,27 +9,24 @@ import Hairline from 'src/components/layout/Hairline' import Img from 'src/components/layout/Img' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' +import { getExplorerInfo } from 'src/config' import { nftTokensSelector } from 'src/logic/collectibles/store/selectors' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' +import { generateERC721TransferTxData } from 'src/logic/collectibles/utils' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { textShortener } from 'src/utils/strings' -import { generateERC721TransferTxData } from 'src/logic/collectibles/utils' -import { styles } from './style' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { ButtonStatus } from 'src/components/Modal/type' -import { Modal } from 'src/components/Modal' +import ExecuteCheckbox from 'src/components/ExecuteCheckbox' import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' import { ReviewInfoText } from 'src/components/ReviewInfoText' +import { useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' +import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' +import { extractSafeAddress } from 'src/routes/routes' +import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' import { ModalHeader } from '../ModalHeader' -import { extractSafeAddress } from 'src/routes/routes' -import ExecuteCheckbox from 'src/components/ExecuteCheckbox' +import { styles } from './style' const useStyles = makeStyles(styles) @@ -104,31 +100,31 @@ const ReviewCollectible = ({ onClose, onPrev, tx }: Props): React.ReactElement = } }, [safeAddress, tx]) - const submitTx = (txParameters: TxParameters) => { - try { - if (safeAddress) { - dispatch( - createTransaction({ - safeAddress, - to: tx.assetAddress, - valueInWei: '0', - txData: data, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, - delayExecution: !executionApproved, - }), - ) - } else { - console.error('There was an error trying to submit the transaction, the safeAddress was not found') - } - } catch (error) { - console.error('Error creating sendCollectible Tx:', error) - } finally { - onClose() - } - } + // const submitTx = (txParameters: TxParameters) => { + // try { + // if (safeAddress) { + // dispatch( + // createTransaction({ + // safeAddress, + // to: tx.assetAddress, + // valueInWei: '0', + // txData: data, + // txNonce: txParameters.safeNonce, + // safeTxGas: txParameters.safeTxGas, + // ethParameters: txParameters, + // notifiedTransaction: TX_NOTIFICATION_TYPES.STANDARD_TX, + // delayExecution: !executionApproved, + // }), + // ) + // } else { + // console.error('There was an error trying to submit the transaction, the safeAddress was not found') + // } + // } catch (error) { + // console.error('Error creating sendCollectible Tx:', error) + // } finally { + // onClose() + // } + // } const closeEditModalCallback = (txParameters: TxParameters) => { const oldGasPrice = gasPriceFormatted @@ -214,7 +210,7 @@ const ReviewCollectible = ({ onClose, onPrev, tx }: Props): React.ReactElement = safeNonce={txParameters.safeNonce} txEstimationExecutionStatus={txEstimationExecutionStatus} /> - + {/* - + */} )} diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewSendFundsTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewSendFundsTx/index.tsx index 570bdbf557..978e50b8ec 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewSendFundsTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewSendFundsTx/index.tsx @@ -92,7 +92,7 @@ const ReviewSendFundsTx = ({ onClose, onPrev, tx }: ReviewTxProps): React.ReactE const chainDefaultGasPrice = getChainDefaultGasPrice() const decimal = getCoinDecimal() - const msgSendGas = chainDefaultGas.find((chain) => chain.typeUrl === '/cosmos.bank.v1beta1.MsgSend') + const msgSendGas = chainDefaultGas?.find((chain) => chain.typeUrl === '/cosmos.bank.v1beta1.MsgSend') const { multiplier, gasAmount } = msgSendGas || { multiplier: 0, gasAmount: 0 } diff --git a/src/routes/safe/components/Settings/Advanced/ModulesTable.tsx b/src/routes/safe/components/Settings/Advanced/ModulesTable.tsx deleted file mode 100644 index 2264dff1ca..0000000000 --- a/src/routes/safe/components/Settings/Advanced/ModulesTable.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { Icon } from '@aura/safe-react-components' -import TableContainer from '@material-ui/core/TableContainer' -import cn from 'classnames' -import { useState, Fragment } from 'react' - -import { useSelector } from 'react-redux' - -import { generateColumns, ModuleAddressColumn, MODULES_TABLE_ADDRESS_ID } from './dataFetcher' -import { RemoveModuleModal } from './RemoveModuleModal' -import { useStyles } from './style' - -import ButtonHelper from 'src/components/ButtonHelper' -import { grantedSelector } from 'src/utils/safeUtils/selector' -import { ModulePair } from 'src/logic/safe/store/models/safe' -import Table from 'src/components/Table' -import { TableCell, TableRow } from 'src/components/layout/Table' -import Block from 'src/components/layout/Block' -import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { getExplorerInfo } from 'src/config' - -const REMOVE_MODULE_BTN_TEST_ID = 'remove-module-btn' -const MODULES_ROW_TEST_ID = 'owners-row' - -interface ModulesTableProps { - moduleData: ModuleAddressColumn | null -} - -export const ModulesTable = ({ moduleData }: ModulesTableProps): React.ReactElement => { - const classes = useStyles() - - const columns = generateColumns() - const autoColumns = columns.filter(({ custom }) => !custom) - - const granted = useSelector(grantedSelector) - - const [viewRemoveModuleModal, setViewRemoveModuleModal] = useState(false) - const hideRemoveModuleModal = () => setViewRemoveModuleModal(false) - - const [selectedModulePair, setSelectedModulePair] = useState() - const triggerRemoveSelectedModule = (modulePair: ModulePair): void => { - setSelectedModulePair(modulePair) - setViewRemoveModuleModal(true) - } - - return ( - <> - - - {(sortedData) => - sortedData.map((row, index) => ( - = 3 && index === sortedData.size - 1 && classes.noBorderBottom)} - data-testid={MODULES_ROW_TEST_ID} - key={index} - tabIndex={-1} - > - {autoColumns.map((column, index) => { - const columnId = column.id - const rowElement = row[columnId] - const [, moduleAddress] = rowElement - - return ( - - - {columnId === MODULES_TABLE_ADDRESS_ID ? ( - - - - ) : ( - rowElement - )} - - - - {granted && ( - triggerRemoveSelectedModule(rowElement)} - dataTestId={`${moduleAddress}-${REMOVE_MODULE_BTN_TEST_ID}`} - > - - - )} - - - - ) - })} - - )) - } -
-
- {viewRemoveModuleModal && selectedModulePair && ( - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/Advanced/RemoveGuardModal.tsx b/src/routes/safe/components/Settings/Advanced/RemoveGuardModal.tsx deleted file mode 100644 index 3e1971083c..0000000000 --- a/src/routes/safe/components/Settings/Advanced/RemoveGuardModal.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import { ReactElement, useMemo, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' - -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import Modal, { Modal as GenericModal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { getExplorerInfo } from 'src/config' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' - -import { currentSafe } from 'src/logic/safe/store/selectors' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' - -import { useStyles } from './style' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { getRemoveGuardTxData } from 'src/logic/safe/utils/guardManager' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { ModalHeader } from '../../Balances/SendModal/screens/ModalHeader' - -interface RemoveGuardModalProps { - onClose: () => void - guardAddress: string -} - -export const RemoveGuardModal = ({ onClose, guardAddress }: RemoveGuardModalProps): ReactElement => { - const classes = useStyles() - - const { address: safeAddress, currentVersion: safeVersion } = useSelector(currentSafe) - const dispatch = useDispatch() - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const txData = useMemo(() => getRemoveGuardTxData(safeAddress, safeVersion), [safeAddress, safeVersion]) - - const { - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isOffChainSignature, - isCreation, - gasLimit, - gasEstimation, - gasPriceFormatted, - } = useEstimateTransactionGas({ - txData, - txRecipient: safeAddress, - txAmount: '0', - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - const removeTransactionGuard = async (txParameters: TxParameters): Promise => { - try { - dispatch( - createTransaction({ - safeAddress, - to: safeAddress, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, - }), - ) - } catch (e) { - logError(Errors._807, `${guardAddress} – ${e.message}`) - } - } - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - let confirmButtonText = 'Remove' - if (ButtonStatus.LOADING === buttonStatus) { - confirmButtonText = txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : 'Removing' - } - - return ( - - - {(txParameters, toggleEditMode) => { - return ( - <> - - - - - - - - - - - Once the transaction guard has been removed, checks by the transaction guard will not be conducted - before or after any subsequent transactions. - - - - - {/* Tx Parameters */} - - - - - - - removeTransactionGuard(txParameters), - status: buttonStatus, - text: confirmButtonText, - }} - /> - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx b/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx deleted file mode 100644 index 23da88e8ea..0000000000 --- a/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import { ReactElement, useEffect, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' - -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import Modal, { Modal as GenericModal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { getExplorerInfo } from 'src/config' -import { getDisableModuleTxData } from 'src/logic/safe/utils/modules' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' - -import { ModulePair } from 'src/logic/safe/store/models/safe' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' - -import { useStyles } from './style' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -interface RemoveModuleModalProps { - onClose: () => void - selectedModulePair: ModulePair -} - -export const RemoveModuleModal = ({ onClose, selectedModulePair }: RemoveModuleModalProps): ReactElement => { - const classes = useStyles() - - const { address: safeAddress, currentVersion: safeVersion } = useSelector(currentSafe) - const [txData, setTxData] = useState('') - const dispatch = useDispatch() - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const [, moduleAddress] = selectedModulePair - - const { - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isOffChainSignature, - isCreation, - gasLimit, - gasEstimation, - gasPriceFormatted, - } = useEstimateTransactionGas({ - txData, - txRecipient: safeAddress, - txAmount: '0', - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - useEffect(() => { - const txData = getDisableModuleTxData(selectedModulePair, safeAddress, safeVersion) - setTxData(txData) - }, [selectedModulePair, safeAddress, safeVersion]) - - const removeSelectedModule = async (txParameters: TxParameters): Promise => { - try { - dispatch( - createTransaction({ - safeAddress, - to: safeAddress, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, - }), - ) - } catch (e) { - logError(Errors._806, `${selectedModulePair} – ${e.message}`) - } - } - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - let confirmButtonText = 'Remove' - if (ButtonStatus.LOADING === buttonStatus) { - confirmButtonText = txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : 'Removing' - } - - return ( - - - {(txParameters, toggleEditMode) => { - return ( - <> - - - - - - - - - - - After removing this module, any feature or app that uses this module might no longer work. If this - Safe requires more then one signature, the module removal will have to be confirmed by other owners - as well. - - - - - {/* Tx Parameters */} - - - - - - - removeSelectedModule(txParameters), - status: buttonStatus, - text: confirmButtonText, - }} - /> - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/Advanced/TransactionGuard.tsx b/src/routes/safe/components/Settings/Advanced/TransactionGuard.tsx deleted file mode 100644 index 755bbb6d37..0000000000 --- a/src/routes/safe/components/Settings/Advanced/TransactionGuard.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { Icon } from '@aura/safe-react-components' -import TableContainer from '@material-ui/core/TableContainer' -import cn from 'classnames' -import { useState, Fragment } from 'react' -import { useSelector } from 'react-redux' - -import { generateColumns } from './dataFetcher' -import { RemoveGuardModal } from './RemoveGuardModal' -import { useStyles } from './style' - -import ButtonHelper from 'src/components/ButtonHelper' -import { grantedSelector } from 'src/utils/safeUtils/selector' -import Table from 'src/components/Table' -import { TableCell, TableRow } from 'src/components/layout/Table' -import Block from 'src/components/layout/Block' -import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { getExplorerInfo } from 'src/config' - -export const REMOVE_GUARD_BTN_TEST_ID = 'remove-guard-btn' -const GUARDS_ROW_TEST_ID = 'guards-row' - -interface TransactionGuardProps { - address: string -} - -export const TransactionGuard = ({ address }: TransactionGuardProps): React.ReactElement => { - const classes = useStyles() - - const columns = generateColumns() - const autoColumns = columns.filter(({ custom }) => !custom) - - const granted = useSelector(grantedSelector) - - const [viewRemoveGuardModal, setViewRemoveGuardModal] = useState(false) - const hideRemoveGuardModal = () => setViewRemoveGuardModal(false) - - const triggerRemoveSelectedGuard = (): void => { - setViewRemoveGuardModal(true) - } - - return ( - <> - - - {(sortedData) => - sortedData.map((row, index) => ( - = 3 && index === sortedData.size - 1 && classes.noBorderBottom)} - data-testid={GUARDS_ROW_TEST_ID} - key={index} - tabIndex={-1} - > - {autoColumns.map((column, index) => { - const columnId = column.id - return ( - - - - - - - - - {granted && ( - - - - )} - - - - ) - })} - - )) - } -
-
- {viewRemoveGuardModal && address && } - - ) -} diff --git a/src/routes/safe/components/Settings/Advanced/dataFetcher.ts b/src/routes/safe/components/Settings/Advanced/dataFetcher.ts deleted file mode 100644 index 066b59670e..0000000000 --- a/src/routes/safe/components/Settings/Advanced/dataFetcher.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { List } from 'immutable' -import { TableColumn } from 'src/components/Table/types.d' -import { ModulePair } from 'src/logic/safe/store/models/safe' - -export const MODULES_TABLE_ADDRESS_ID = 'address' -const MODULES_TABLE_ACTIONS_ID = 'actions' - -export type ModuleAddressColumn = { [MODULES_TABLE_ADDRESS_ID]: ModulePair }[] - -export const getModuleData = (modulesList: ModulePair[] | null): ModuleAddressColumn | undefined => { - return modulesList?.map((modules) => ({ - [MODULES_TABLE_ADDRESS_ID]: modules, - })) -} - -export const generateColumns = (): List => { - const addressColumn: TableColumn = { - align: 'left', - custom: false, - disablePadding: false, - id: MODULES_TABLE_ADDRESS_ID, - label: 'Address', - order: false, - } - - const actionsColumn: TableColumn = { - custom: true, - disablePadding: false, - id: MODULES_TABLE_ACTIONS_ID, - label: '', - order: false, - } - - return List([addressColumn, actionsColumn]) -} diff --git a/src/routes/safe/components/Settings/Advanced/index.tsx b/src/routes/safe/components/Settings/Advanced/index.tsx deleted file mode 100644 index dcc35d1121..0000000000 --- a/src/routes/safe/components/Settings/Advanced/index.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import { Text, theme, Title } from '@aura/safe-react-components' -import { ReactElement, useEffect } from 'react' -import { useSelector } from 'react-redux' -import styled from 'styled-components' -import semverSatisfies from 'semver/functions/satisfies' - -import { getModuleData } from './dataFetcher' -import { useStyles } from './style' -import { ModulesTable } from './ModulesTable' - -import Block from 'src/components/layout/Block' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { useAnalytics, SETTINGS_EVENTS } from 'src/utils/googleAnalytics' -import { TransactionGuard } from './TransactionGuard' - -const InfoText = styled(Text)` - margin-top: 16px; -` - -const Bold = styled.strong` - color: ${theme.colors.text}; -` - -const NoModuleLegend = (): ReactElement => ( - - No modules enabled - -) - -const NoTransactionGuardLegend = (): ReactElement => ( - - No transaction guard set - -) - -const DOCS_LINK = 'https://docs.gnosis-safe.io/contracts/modules-1' - -const Advanced = (): ReactElement => { - const classes = useStyles() - const { nonce, modules, guard, currentVersion } = useSelector(currentSafe) ?? {} - - const moduleData = modules ? getModuleData(modules) ?? null : null - const isVersionWithGuards = semverSatisfies(currentVersion, '>=1.3.0') - const { trackEvent } = useAnalytics() - - useEffect(() => { - trackEvent(SETTINGS_EVENTS.ADVANCED) - }, [trackEvent]) - - return ( - <> - {/* Nonce */} - - - Safe Nonce - - - For security reasons, transactions made with Aura Safe need to be executed in order. The nonce shows you which - transaction will be executed next. You can find the nonce for a transaction in the transaction details. - - - Current Nonce: {nonce} - - - - {/* Modules */} - - - Safe Modules - - - Modules allow you to customize the access-control logic of your Safe. Modules are potentially risky, so make - sure to only use modules from trusted sources. Learn more about modules{' '} - - here - - . - - - {!moduleData || !moduleData.length ? : } - - - {/* Transaction guard */} - {isVersionWithGuards && ( - - - Transaction Guard - - - Transaction guards impose additional constraints that are checked prior to executing a Safe transaction. - Transaction guards are potentially risky, so make sure to only use modules from trusted sources. Learn more - about transaction guards{' '} - - here - - . - - - {!guard ? : } - - )} - - ) -} - -export default Advanced diff --git a/src/routes/safe/components/Settings/Advanced/style.ts b/src/routes/safe/components/Settings/Advanced/style.ts deleted file mode 100644 index 1fc15beb9e..0000000000 --- a/src/routes/safe/components/Settings/Advanced/style.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core' - -import { lg, md } from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - container: { - padding: lg, - }, - hide: { - '&:hover': { - backgroundColor: '#f7f5f5', - }, - '&:hover $actions': { - visibility: 'initial', - }, - }, - actions: { - justifyContent: 'flex-end', - visibility: 'hidden', - minWidth: '100px', - }, - noBorderBottom: { - '& > td': { - borderBottom: 'none', - }, - }, - modalOwner: { - padding: md, - alignItems: 'center', - }, - modalDescription: { - padding: md, - }, - accordionContainer: { - margin: `0 ${md}`, - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.tsx deleted file mode 100644 index 91ae9b033c..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/index.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { useEffect, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' - -import Modal from 'src/components/Modal' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import { addressBookAddOrUpdate } from 'src/logic/addressBook/store/actions' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { checksumAddress } from 'src/utils/checksumAddress' -import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook' -import { Dispatch } from 'src/logic/safe/store/actions/types.d' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { extractSafeAddress } from 'src/routes/routes' - -import { OwnerForm } from './screens/OwnerForm' -import { ReviewAddOwner } from './screens/Review' -import { ThresholdForm } from './screens/ThresholdForm' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors' -import { currentChainId } from 'src/logic/config/store/selectors' -import { _getChainId } from 'src/config' - -export type OwnerValues = { - ownerAddress: string - ownerName: string - threshold: string -} - -const sendAddOwner = async ( - values: OwnerValues, - safeAddress: string, - safeVersion: string, - txParameters: TxParameters, - dispatch: Dispatch, - connectedWalletAddress: string, -): Promise => { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getAddOwnerTx( - { ownerAddress: values.ownerAddress, threshold: +values.threshold }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - const txHash = await dispatch( - createTransaction({ - safeAddress, - to: safeAddress, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, - }), - ) - - if (txHash) { - dispatch( - addressBookAddOrUpdate( - makeAddressBookEntry({ address: values.ownerAddress, name: values.ownerName, chainId: _getChainId() }), - ), - ) - } -} - -type Props = { - isOpen: boolean - onClose: () => void -} - -export const AddOwnerModal = ({ isOpen, onClose }: Props): React.ReactElement => { - const [activeScreen, setActiveScreen] = useState('selectOwner') - const [values, setValues] = useState({ ownerName: '', ownerAddress: '', threshold: '' }) - const dispatch = useDispatch() - const safeAddress = extractSafeAddress() - const safeVersion = useSelector(currentSafeCurrentVersion) - const connectedWalletAddress = useSelector(userAccountSelector) - const chainId = useSelector(currentChainId) - - useEffect( - () => () => { - setActiveScreen('selectOwner') - setValues({ ownerName: '', ownerAddress: '', threshold: '' }) - }, - [isOpen], - ) - - const onClickBack = () => { - if (activeScreen === 'reviewAddOwner') { - setActiveScreen('selectThreshold') - } else if (activeScreen === 'selectThreshold') { - setActiveScreen('selectOwner') - } - } - - const ownerSubmitted = (newValues) => { - setValues((stateValues) => ({ - ...stateValues, - ownerName: newValues.ownerName, - ownerAddress: checksumAddress(newValues.ownerAddress), - })) - setActiveScreen('selectThreshold') - } - - const thresholdSubmitted = (newValues) => { - setValues((stateValues) => ({ - ...stateValues, - threshold: newValues.threshold, - })) - setActiveScreen('reviewAddOwner') - } - - const onAddOwner = async (txParameters: TxParameters) => { - onClose() - - try { - await sendAddOwner(values, safeAddress, safeVersion, txParameters, dispatch, connectedWalletAddress) - dispatch( - addressBookAddOrUpdate(makeAddressBookEntry({ name: values.ownerName, address: values.ownerAddress, chainId })), - ) - } catch (error) { - logError(Errors._808, error.message) - } - } - - return ( - - <> - {activeScreen === 'selectOwner' && ( - - )} - {activeScreen === 'selectThreshold' && ( - - )} - {activeScreen === 'reviewAddOwner' && ( - - )} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/index.tsx deleted file mode 100644 index 83f283f086..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/index.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import { makeStyles } from '@material-ui/core/styles' -import { Mutator } from 'final-form' - -import { useSelector } from 'react-redux' -import { OnChange } from 'react-final-form-listeners' - -import { styles } from './style' - -import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' -import AddressInput from 'src/components/forms/AddressInput' -import Field from 'src/components/forms/Field' -import GnoForm from 'src/components/forms/GnoForm' -import TextField from 'src/components/forms/TextField' -import { - addressIsNotCurrentSafe, - composeValidators, - required, - uniqueAddress, - validAddressBookName, -} from 'src/components/forms/validator' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { isValidAddress } from 'src/utils/isValidAddress' - -import { OwnerValues } from '../..' -import { Modal } from 'src/components/Modal' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -const ADD_OWNER_NAME_INPUT_TEST_ID = 'add-owner-name-input' -const ADD_OWNER_ADDRESS_INPUT_TEST_ID = 'add-owner-address-testid' -const ADD_OWNER_NEXT_BTN_TEST_ID = 'add-owner-next-btn' - -const formMutators: Record< - string, - Mutator<{ setOwnerAddress: { address: string }; setOwnerName: { name: string } }> -> = { - setOwnerAddress: (args, state, utils) => { - utils.changeValue(state, 'ownerAddress', () => args[0]) - }, - setOwnerName: (args, state, utils) => { - utils.changeValue(state, 'ownerName', () => args[0]) - }, -} - -const useStyles = makeStyles(styles) - -type OwnerFormProps = { - onClose: () => void - onSubmit: (values) => void - initialValues?: OwnerValues -} - -export const OwnerForm = ({ onClose, onSubmit, initialValues }: OwnerFormProps): React.ReactElement => { - const classes = useStyles() - const handleSubmit = (values) => { - onSubmit(values) - } - const addressBookMap = useSelector(currentNetworkAddressBookAsMap) - const { address: safeAddress = '', owners = [] } = useSelector(currentSafe) ?? {} - const ownerDoesntExist = uniqueAddress(owners) - const ownerAddressIsNotSafeAddress = addressIsNotCurrentSafe(safeAddress) - - return ( - <> - - - - {(...args) => { - const mutators = args[3] - - const handleScan = (value, closeQrModal) => { - let scannedAddress = value - - if (scannedAddress.startsWith('ethereum:')) { - scannedAddress = scannedAddress.replace('ethereum:', '') - } - mutators.setOwnerAddress(scannedAddress) - closeQrModal() - } - - return ( - <> - - - Add a new owner to the active Safe - - - - - - {async (address: string) => { - if (isValidAddress(address)) { - const ownerName = addressBookMap[address]?.name - if (ownerName) { - mutators.setOwnerName(ownerName) - } - } - }} - - - - - - - - - - - - - - - - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.ts b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.ts deleted file mode 100644 index f9ccd17da8..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/OwnerForm/style.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { lg, md } from 'src/theme/variables' -import { createStyles } from '@material-ui/core' - -export const styles = createStyles({ - formContainer: { - padding: `${md} ${lg}`, - minHeight: '340px', - }, - buttonRow: { - height: '84px', - justifyContent: 'center', - gap: '16px', - }, -}) diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx deleted file mode 100644 index 45b3c1a150..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx +++ /dev/null @@ -1,237 +0,0 @@ -import { makeStyles } from '@material-ui/core/styles' -import { ReactElement, useEffect, useState, Fragment } from 'react' -import { useSelector } from 'react-redux' - -import { getExplorerInfo } from 'src/config' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { currentSafeWithNames } from 'src/logic/safe/store/selectors' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { Modal } from 'src/components/Modal' -import { ReviewInfoText } from 'src/components/ReviewInfoText' - -import { OwnerValues } from '../..' -import { styles } from './style' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' - -const ADD_OWNER_SUBMIT_BTN_TEST_ID = 'add-owner-submit-btn' - -const useStyles = makeStyles(styles) - -type ReviewAddOwnerProps = { - onClickBack: () => void - onClose: () => void - onSubmit: (txParameters: TxParameters) => void - values: OwnerValues -} - -export const ReviewAddOwner = ({ onClickBack, onClose, onSubmit, values }: ReviewAddOwnerProps): ReactElement => { - const classes = useStyles() - const [data, setData] = useState('') - const { - address: safeAddress, - name: safeName, - owners, - currentVersion: safeVersion, - } = useSelector(currentSafeWithNames) - const connectedWalletAddress = useSelector(userAccountSelector) - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const { - gasLimit, - gasEstimation, - gasCostFormatted, - gasPriceFormatted, - txEstimationExecutionStatus, - isExecution, - isOffChainSignature, - isCreation, - } = useEstimateTransactionGas({ - txData: data, - txRecipient: safeAddress, - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - useEffect(() => { - let isCurrent = true - - const calculateAddOwnerData = async () => { - try { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getAddOwnerTx( - { ownerAddress: values.ownerAddress, threshold: +values.threshold }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - if (isCurrent) { - setData(txData) - } - } catch (error) { - logError(Errors._811, error.message) - } - } - calculateAddOwnerData() - - return () => { - isCurrent = false - } - }, [connectedWalletAddress, safeAddress, safeVersion, values.ownerAddress, values.threshold]) - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - return ( - - {(txParameters, toggleEditMode) => ( - <> - - - - - - - - - Details - - - - - Safe name - - - {safeName} - - - - - Any transaction requires the confirmation of: - - - {`${values.threshold} out of ${(owners?.length || 0) + 1} owner(s)`} - - - - - - - - {`${(owners?.length || 0) + 1} Safe owner(s)`} - - - - {owners?.map((owner) => ( - - - - - - - - - ))} - - - ADDING NEW OWNER ↓ - - - - - - - - - - - - - - - {/* Tx Parameters */} - - - - - - onSubmit(txParameters), - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - testId: ADD_OWNER_SUBMIT_BTN_TEST_ID, - }} - /> - - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.ts b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.ts deleted file mode 100644 index 5de73e1839..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/style.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { background, border, lg, sm } from 'src/theme/variables' -import { createStyles } from '@material-ui/core/styles' - -export const styles = createStyles({ - root: { - height: '372px', - }, - info: { - backgroundColor: background, - padding: sm, - justifyContent: 'center', - textAlign: 'center', - flexDirection: 'column', - }, - buttonRow: { - height: '84px', - justifyContent: 'center', - gap: '16px', - }, - details: { - padding: lg, - borderRight: `solid 2px ${border}`, - height: '100%', - }, - owners: { - overflow: 'auto', - height: '100%', - }, - ownersTitle: { - padding: lg, - }, - owner: { - padding: sm, - alignItems: 'center', - }, - name: { - textOverflow: 'ellipsis', - overflow: 'hidden', - }, - selectedOwner: { - padding: sm, - alignItems: 'center', - backgroundColor: '#f7f5f5', - }, - open: { - paddingLeft: sm, - width: 'auto', - '&:hover': { - cursor: 'pointer', - }, - }, -}) diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/index.tsx deleted file mode 100644 index c3689d0e18..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/index.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import MenuItem from '@material-ui/core/MenuItem' -import { makeStyles } from '@material-ui/core/styles' -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' - -import { styles } from './style' - -import Field from 'src/components/forms/Field' -import GnoForm from 'src/components/forms/GnoForm' -import SelectField from 'src/components/forms/SelectField' -import { composeValidators, maxValue, minValue, mustBeInteger, required } from 'src/components/forms/validator' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { Modal } from 'src/components/Modal' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -const ADD_OWNER_THRESHOLD_NEXT_BTN_TEST_ID = 'add-owner-threshold-next-btn' - -const useStyles = makeStyles(styles) - -type SubmitProps = { - threshold: number -} - -type ThresholdValues = { - threshold: string -} - -type Props = { - onClickBack: () => void - onClose: () => void - onSubmit: (values: SubmitProps) => void - initialValues: ThresholdValues -} - -export const ThresholdForm = ({ onClickBack, onClose, onSubmit, initialValues }: Props): ReactElement => { - const classes = useStyles() - const { owners, threshold = 1 } = useSelector(currentSafe) ?? {} - const numOptions = owners ? owners.length + 1 : 0 - - const handleSubmit = (values: SubmitProps) => { - onSubmit(values) - } - - return ( - <> - - - - {() => ( - <> - - - - Set the required owner confirmations: - - - - Any transaction requires the confirmation of: - - - - ( - <> - - {[...Array(Number(numOptions))].map((x, index) => ( - - {index + 1} - - ))} - - {props.meta.error && props.meta.touched && ( - - {props.meta.error} - - )} - - )} - validate={composeValidators(required, mustBeInteger, minValue(1), maxValue(numOptions))} - /> - - - - out of {numOptions} owner(s) - - - - - - - - - - )} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.ts b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.ts deleted file mode 100644 index db6690b53c..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/ThresholdForm/style.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { lg, md, sm } from 'src/theme/variables' -import { createStyles } from '@material-ui/core' - -export const styles = createStyles({ - headingText: { - fontSize: md, - }, - formContainer: { - padding: `${md} ${lg}`, - minHeight: '340px', - }, - ownersText: { - marginLeft: sm, - }, - buttonRow: { - height: '84px', - justifyContent: 'center', - gap: '16px', - }, - inputRow: { - position: 'relative', - }, - errorText: { - position: 'absolute', - bottom: '-25px', - }, -}) diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx deleted file mode 100644 index 3ea94e7cb0..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { useDispatch, useSelector } from 'react-redux' - -import { getExplorerInfo } from 'src/config' -import Field from 'src/components/forms/Field' -import GnoForm from 'src/components/forms/GnoForm' -import TextField from 'src/components/forms/TextField' -import { composeValidators, required, validAddressBookName } from 'src/components/forms/validator' -import Block from 'src/components/layout/Block' -import Hairline from 'src/components/layout/Hairline' -import Row from 'src/components/layout/Row' -import Modal, { Modal as GenericModal } from 'src/components/Modal' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook' -import { addressBookAddOrUpdate } from 'src/logic/addressBook/store/actions' -import { NOTIFICATIONS } from 'src/logic/notifications' -import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' - -import { useStyles } from './style' -import { currentChainId } from 'src/logic/config/store/selectors' - -const RENAME_OWNER_INPUT_TEST_ID = 'rename-owner-input' -const SAVE_OWNER_CHANGES_BTN_TEST_ID = 'save-owner-changes-btn' - -type OwnProps = { - isOpen: boolean - onClose: () => void - owner: OwnerData -} - -export const EditOwnerModal = ({ isOpen, onClose, owner }: OwnProps): React.ReactElement => { - const classes = useStyles() - const dispatch = useDispatch() - const chainId = useSelector(currentChainId) - - const handleSubmit = ({ ownerName }: { ownerName: string }): void => { - // Update the value only if the ownerName really changed - if (ownerName !== owner.name) { - dispatch(addressBookAddOrUpdate(makeAddressBookEntry({ address: owner.address, name: ownerName, chainId }))) - dispatch(enqueueSnackbar(NOTIFICATIONS.OWNER_NAME_CHANGE_EXECUTED_MSG)) - } - onClose() - } - - return ( - - - - - {(...args) => { - const pristine = args[2].pristine - return ( - <> - - - - - - - - - - - - - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.ts b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.ts deleted file mode 100644 index 5b50e7e869..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/style.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core' - -import { lg, md } from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - heading: { - padding: lg, - justifyContent: 'space-between', - boxSizing: 'border-box', - height: '74px', - }, - manage: { - fontSize: lg, - }, - container: { - padding: `${md} ${lg}`, - minHeight: '200px', - }, - close: { - height: '35px', - width: '35px', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.tsx deleted file mode 100644 index 61fd3088f9..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/index.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { useEffect, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' - -import { CheckOwner } from './screens/CheckOwner' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import { ReviewRemoveOwnerModal } from './screens/Review' -import { ThresholdForm } from './screens/ThresholdForm' - -import Modal from 'src/components/Modal' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { Dispatch } from 'src/logic/safe/store/actions/types.d' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { extractSafeAddress } from 'src/routes/routes' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors' - -type OwnerValues = OwnerData & { - threshold: string -} - -const sendRemoveOwner = async ( - values: OwnerValues, - safeAddress: string, - safeVersion: string, - ownerAddressToRemove: string, - dispatch: Dispatch, - txParameters: TxParameters, - connectedWalletAddress: string, -): Promise => { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getRemoveOwnerTx( - { ownerAddress: ownerAddressToRemove, threshold: +values.threshold }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - dispatch( - createTransaction({ - safeAddress, - to: safeAddress, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, - }), - ) -} - -type RemoveOwnerProps = { - isOpen: boolean - onClose: () => void - owner: OwnerData -} - -export const RemoveOwnerModal = ({ isOpen, onClose, owner }: RemoveOwnerProps): React.ReactElement => { - const [activeScreen, setActiveScreen] = useState('checkOwner') - const [values, setValues] = useState({ ...owner, threshold: '' }) - const dispatch = useDispatch() - const safeAddress = extractSafeAddress() - const safeVersion = useSelector(currentSafeCurrentVersion) - const connectedWalletAddress = useSelector(userAccountSelector) - - useEffect( - () => () => { - setActiveScreen('checkOwner') - }, - [isOpen], - ) - - const onClickBack = () => { - if (activeScreen === 'reviewRemoveOwner') { - setActiveScreen('selectThreshold') - } else if (activeScreen === 'selectThreshold') { - setActiveScreen('checkOwner') - } - } - - const ownerSubmitted = () => { - setActiveScreen('selectThreshold') - } - - const thresholdSubmitted = (newValues) => { - const cpValues = { ...values, threshold: newValues.threshold } - setValues(cpValues) - setActiveScreen('reviewRemoveOwner') - } - - const onRemoveOwner = async (txParameters: TxParameters) => { - onClose() - - try { - await sendRemoveOwner( - values, - safeAddress, - safeVersion, - owner.address, - dispatch, - txParameters, - connectedWalletAddress, - ) - } catch (error) { - logError(Errors._809, error.message) - } - } - - return ( - - <> - {activeScreen === 'checkOwner' && } - {activeScreen === 'selectThreshold' && ( - - )} - {activeScreen === 'reviewRemoveOwner' && ( - - )} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx deleted file mode 100644 index 06899aaa6e..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { ReactElement } from 'react' - -import { getExplorerInfo } from 'src/config' -import { Modal } from 'src/components/Modal' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' - -import { useStyles } from './style' - -const REMOVE_OWNER_MODAL_NEXT_BTN_TEST_ID = 'remove-owner-next-btn' - -interface CheckOwnerProps { - onClose: () => void - onSubmit: () => void - owner: OwnerData -} - -export const CheckOwner = ({ onClose, onSubmit, owner }: CheckOwnerProps): ReactElement => { - const classes = useStyles() - - return ( - <> - - - - - Review the owner you want to remove from the active Safe: - - - - - - - - - - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.ts b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.ts deleted file mode 100644 index d0f020f2c6..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/style.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core' - -import { lg, md } from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - formContainer: { - padding: `${md} ${lg}`, - minHeight: '340px', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx deleted file mode 100644 index 0b907eeac9..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx +++ /dev/null @@ -1,256 +0,0 @@ -import { useEffect, useState, Fragment } from 'react' -import { useSelector } from 'react-redux' - -import { getExplorerInfo } from 'src/config' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { currentSafeWithNames } from 'src/logic/safe/store/selectors' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' - -import { useStyles } from './style' -import { Modal } from 'src/components/Modal' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { logError } from 'src/logic/exceptions/CodedException' -import ErrorCodes from 'src/logic/exceptions/registry' - -const REMOVE_OWNER_REVIEW_BTN_TEST_ID = 'remove-owner-review-btn' - -type ReviewRemoveOwnerProps = { - onClickBack: () => void - onClose: () => void - onSubmit: (txParameters: TxParameters) => void - owner: OwnerData - threshold?: number -} - -export const ReviewRemoveOwnerModal = ({ - onClickBack, - onClose, - onSubmit, - owner, - threshold = 1, -}: ReviewRemoveOwnerProps): React.ReactElement => { - const classes = useStyles() - const [data, setData] = useState('') - const { - address: safeAddress, - name: safeName, - owners, - currentVersion: safeVersion, - } = useSelector(currentSafeWithNames) - const connectedWalletAddress = useSelector(userAccountSelector) - const numOptions = owners ? owners.length - 1 : 0 - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const { - gasLimit, - gasEstimation, - gasPriceFormatted, - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isCreation, - isOffChainSignature, - } = useEstimateTransactionGas({ - txData: data, - txRecipient: safeAddress, - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - useEffect(() => { - let isCurrent = true - - if (!threshold) { - console.error("Threshold value was not define, tx can't be executed") - return - } - - const calculateRemoveOwnerData = async () => { - try { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getRemoveOwnerTx( - { ownerAddress: owner.address, threshold: +threshold }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - if (isCurrent) { - setData(txData) - } - } catch (error) { - logError(ErrorCodes._812, error.message) - } - } - calculateRemoveOwnerData() - - return () => { - isCurrent = false - } - }, [safeAddress, safeVersion, connectedWalletAddress, owner.address, threshold]) - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - return ( - - {(txParameters, toggleEditMode) => ( - <> - - - - - {/* Details */} - - - - - Details - - - - - Safe name - - - {safeName} - - - - - Any transaction requires the confirmation of: - - - {`${threshold} out of ${numOptions} owner(s)`} - - - - - {/* Owners */} - - - - {`${numOptions} Safe owner(s)`} - - - - {owners?.map( - (safeOwner) => - !sameAddress(safeOwner.address, owner.address) && ( - - - - - - - - - ), - )} - - - REMOVING OWNER ↓ - - - - - - - - - - - - - - - {/* Tx Parameters */} - - - {txEstimationExecutionStatus === EstimationStatus.LOADING ? null : ( - - )} - - onSubmit(txParameters), - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - type: 'submit', - testId: REMOVE_OWNER_REVIEW_BTN_TEST_ID, - }} - /> - - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.ts b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.ts deleted file mode 100644 index e3eaa9f254..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/style.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core' - -import { background, border, lg, sm } from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - root: { - height: '372px', - }, - info: { - backgroundColor: background, - padding: sm, - justifyContent: 'center', - textAlign: 'center', - flexDirection: 'column', - }, - details: { - padding: lg, - borderRight: `solid 1px ${border}`, - height: '100%', - }, - owners: { - overflow: 'auto', - height: '100%', - }, - ownersTitle: { - padding: lg, - }, - owner: { - padding: sm, - alignItems: 'center', - }, - name: { - textOverflow: 'ellipsis', - overflow: 'hidden', - }, - selectedOwner: { - padding: sm, - alignItems: 'center', - backgroundColor: '#ffe6ea', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/index.tsx deleted file mode 100644 index ed57305f78..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/index.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import MenuItem from '@material-ui/core/MenuItem' -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' - -import { useStyles } from './style' - -import Field from 'src/components/forms/Field' -import GnoForm from 'src/components/forms/GnoForm' -import SelectField from 'src/components/forms/SelectField' -import { composeValidators, maxValue, minValue, mustBeInteger, required } from 'src/components/forms/validator' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { Modal } from 'src/components/Modal' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -const REMOVE_OWNER_THRESHOLD_NEXT_BTN_TEST_ID = 'remove-owner-threshold-next-btn' - -type ThresholdValues = { - threshold: string -} - -type Props = { - onClickBack: () => void - onClose: () => void - onSubmit: (txParameters: TxParameters) => void - initialValues: ThresholdValues -} - -export const ThresholdForm = ({ onClickBack, onClose, onSubmit, initialValues }: Props): ReactElement => { - const classes = useStyles() - const { owners, threshold = 1 } = useSelector(currentSafe) ?? {} - const ownersCount = owners?.length ?? 0 - const handleSubmit = (values) => { - onSubmit(values) - } - const defaultThreshold = threshold > 1 && threshold === ownersCount ? threshold - 1 : threshold - - return ( - <> - - - - {() => { - const numOptions = ownersCount > 1 ? ownersCount - 1 : 1 - - return ( - <> - - - - Set the required owner confirmations: - - - - Any transaction requires the confirmation of: - - - - ( - <> - - {[...Array(Number(numOptions))].map((x, index) => ( - - {index + 1} - - ))} - - {props.meta.error && props.meta.touched && ( - - {props.meta.error} - - )} - - )} - validate={composeValidators(required, mustBeInteger, minValue(1), maxValue(numOptions))} - /> - - - - out of {ownersCount ? ownersCount - 1 : 0} owner(s) - - - - - - - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.ts b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.ts deleted file mode 100644 index 8f9b92d00b..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/ThresholdForm/style.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core/styles' - -import { lg, md, sm } from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - headingText: { - fontSize: md, - }, - formContainer: { - padding: `${sm} ${lg}`, - minHeight: '340px', - }, - ownersText: { - marginLeft: sm, - }, - inputRow: { - position: 'relative', - }, - errorText: { - position: 'absolute', - bottom: '-25px', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.tsx deleted file mode 100644 index 7ba988cc04..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/index.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import { useEffect, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' - -import Modal from 'src/components/Modal' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import { addressBookAddOrUpdate } from 'src/logic/addressBook/store/actions' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { checksumAddress } from 'src/utils/checksumAddress' -import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook' -import { Dispatch } from 'src/logic/safe/store/actions/types.d' - -import { OwnerForm } from 'src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm' -import { ReviewReplaceOwnerModal } from 'src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { isValidAddress } from 'src/utils/isValidAddress' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' -import { extractSafeAddress } from 'src/routes/routes' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' -import { currentSafeCurrentVersion } from 'src/logic/safe/store/selectors' -import { _getChainId } from 'src/config' - -export type OwnerValues = { - address: string - name: string -} - -const sendReplaceOwner = async ( - newOwner: OwnerValues, - safeAddress: string, - safeVersion: string, - ownerAddressToRemove: string, - dispatch: Dispatch, - txParameters: TxParameters, - connectedWalletAddress: string, -): Promise => { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getSwapOwnerTx( - { oldOwnerAddress: ownerAddressToRemove, newOwnerAddress: newOwner.address }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - const txHash = await dispatch( - createTransaction({ - safeAddress, - to: safeAddress, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.SETTINGS_CHANGE_TX, - }), - ) - - if (txHash) { - // update the AB - dispatch(addressBookAddOrUpdate(makeAddressBookEntry({ ...newOwner, chainId: _getChainId() }))) - } -} - -type ReplaceOwnerProps = { - isOpen: boolean - onClose: () => void - owner: OwnerData -} - -export const ReplaceOwnerModal = ({ isOpen, onClose, owner }: ReplaceOwnerProps): React.ReactElement => { - const [activeScreen, setActiveScreen] = useState('checkOwner') - const [newOwner, setNewOwner] = useState({ address: '', name: '' }) - const dispatch = useDispatch() - const safeAddress = extractSafeAddress() - const safeVersion = useSelector(currentSafeCurrentVersion) - const connectedWalletAddress = useSelector(userAccountSelector) - - useEffect( - () => () => { - setActiveScreen('checkOwner') - setNewOwner({ address: '', name: '' }) - }, - [isOpen], - ) - - const onClickBack = () => setActiveScreen('checkOwner') - - const ownerSubmitted = (newValues) => { - const { ownerAddress, ownerName } = newValues - - if (isValidAddress(ownerAddress)) { - const checksumAddr = checksumAddress(ownerAddress) - setNewOwner({ address: checksumAddr, name: ownerName }) - setActiveScreen('reviewReplaceOwner') - } - } - - const onReplaceOwner = async (txParameters: TxParameters) => { - onClose() - - try { - await sendReplaceOwner( - newOwner, - safeAddress, - safeVersion, - owner.address, - dispatch, - txParameters, - connectedWalletAddress, - ) - dispatch(addressBookAddOrUpdate(makeAddressBookEntry({ ...newOwner, chainId: _getChainId() }))) - } catch (error) { - logError(Errors._810, error.message) - } - } - - return ( - - <> - {activeScreen === 'checkOwner' && ( - - )} - {activeScreen === 'reviewReplaceOwner' && ( - - )} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx deleted file mode 100644 index 5bc9d3ad22..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import { Mutator } from 'final-form' -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' -import { OnChange } from 'react-final-form-listeners' - -import AddressInput from 'src/components/forms/AddressInput' -import Field from 'src/components/forms/Field' -import GnoForm from 'src/components/forms/GnoForm' -import TextField from 'src/components/forms/TextField' -import { - addressIsNotCurrentSafe, - composeValidators, - required, - uniqueAddress, - validAddressBookName, -} from 'src/components/forms/validator' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' -import { Modal } from 'src/components/Modal' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { currentNetworkAddressBookAsMap } from 'src/logic/addressBook/store/selectors' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' -import { isValidAddress } from 'src/utils/isValidAddress' - -import { useStyles } from './style' -import { getExplorerInfo } from 'src/config' - - -import { OwnerValues } from '../..' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -const REPLACE_OWNER_NAME_INPUT_TEST_ID = 'replace-owner-name-input' -const REPLACE_OWNER_ADDRESS_INPUT_TEST_ID = 'replace-owner-address-testid' -const REPLACE_OWNER_NEXT_BTN_TEST_ID = 'replace-owner-next-btn' - -const formMutators: Record< - string, - Mutator<{ setOwnerAddress: { address: string }; setOwnerName: { name: string } }> -> = { - setOwnerAddress: (args, state, utils) => { - utils.changeValue(state, 'ownerAddress', () => args[0]) - }, - setOwnerName: (args, state, utils) => { - utils.changeValue(state, 'ownerName', () => args[0]) - }, -} - -type NewOwnerProps = { - ownerAddress: string - ownerName: string -} - -type OwnerFormProps = { - onClose: () => void - onSubmit: (values: NewOwnerProps) => void - owner: OwnerData - initialValues?: OwnerValues -} - -export const OwnerForm = ({ onClose, onSubmit, owner, initialValues }: OwnerFormProps): ReactElement => { - const classes = useStyles() - - const handleSubmit = (values: NewOwnerProps) => { - onSubmit(values) - } - const addressBookMap = useSelector(currentNetworkAddressBookAsMap) - const { address: safeAddress = '', owners } = useSelector(currentSafe) ?? {} - const ownerDoesntExist = uniqueAddress(owners) - const ownerAddressIsNotSafeAddress = addressIsNotCurrentSafe(safeAddress) - - return ( - <> - - - - {(...args) => { - const mutators = args[3] - - const handleScan = (value, closeQrModal) => { - let scannedAddress = value - - if (scannedAddress.startsWith('ethereum:')) { - scannedAddress = scannedAddress.replace('ethereum:', '') - } - - mutators.setOwnerAddress(scannedAddress) - closeQrModal() - } - - return ( - <> - - - - Review the owner you want to replace from the active Safe. Then specify the new owner you want to - replace it with: - - - - Current owner - - - - - - - - New owner - - - - - - {async (address: string) => { - if (isValidAddress(address)) { - const ownerName = addressBookMap[address]?.name - if (ownerName) { - mutators.setOwnerName(ownerName) - } - } - }} - - - - - - - - - - - - - - - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.ts b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.ts deleted file mode 100644 index d3064a9eb7..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/style.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { lg, md, sm } from 'src/theme/variables' -import { createStyles, makeStyles } from '@material-ui/core' - -export const useStyles = makeStyles( - createStyles({ - formContainer: { - padding: `${md} ${lg}`, - minHeight: '340px', - }, - owner: { - alignItems: 'center', - }, - address: { - marginRight: sm, - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx deleted file mode 100644 index e4bd560ed8..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx +++ /dev/null @@ -1,266 +0,0 @@ -import { useEffect, useState, Fragment } from 'react' -import { useSelector } from 'react-redux' - -import { getExplorerInfo } from 'src/config' -import Block from 'src/components/layout/Block' -import Col from 'src/components/layout/Col' -import Hairline from 'src/components/layout/Hairline' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { userAccountSelector } from 'src/logic/wallets/store/selectors' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { currentSafeWithNames } from 'src/logic/safe/store/selectors' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { Modal } from 'src/components/Modal' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { OwnerData } from 'src/routes/safe/components/Settings/ManageOwners/dataFetcher' - -import { useStyles } from './style' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { getSafeSDK } from 'src/logic/wallets/getWeb3' -import { Errors, logError } from 'src/logic/exceptions/CodedException' - -const REPLACE_OWNER_SUBMIT_BTN_TEST_ID = 'replace-owner-submit-btn' - -type ReplaceOwnerProps = { - onClose: () => void - onClickBack: () => void - onSubmit: (txParameters: TxParameters) => void - owner: OwnerData - newOwner: { - address: string - name: string - } -} - -export const ReviewReplaceOwnerModal = ({ - onClickBack, - onClose, - onSubmit, - owner, - newOwner, -}: ReplaceOwnerProps): React.ReactElement => { - const classes = useStyles() - const [data, setData] = useState('') - const { - address: safeAddress, - name: safeName, - owners, - threshold = 1, - currentVersion: safeVersion, - } = useSelector(currentSafeWithNames) - const connectedWalletAddress = useSelector(userAccountSelector) - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const { - gasLimit, - gasEstimation, - gasPriceFormatted, - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isCreation, - isOffChainSignature, - } = useEstimateTransactionGas({ - txData: data, - txRecipient: safeAddress, - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - useEffect(() => { - let isCurrent = true - - const calculateReplaceOwnerData = async () => { - try { - const sdk = await getSafeSDK(connectedWalletAddress, safeAddress, safeVersion) - const safeTx = await sdk.getSwapOwnerTx( - { oldOwnerAddress: owner.address, newOwnerAddress: newOwner.address }, - { safeTxGas: 0 }, - ) - const txData = safeTx.data.data - - if (isCurrent) { - setData(txData) - } - } catch (error) { - logError(Errors._813, error.message) - } - } - calculateReplaceOwnerData() - - return () => { - isCurrent = false - } - }, [safeAddress, safeVersion, connectedWalletAddress, owner.address, newOwner.address]) - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - return ( - - {(txParameters, toggleEditMode) => ( - <> - - - - - - - - - Details - - - - - Safe name - - - {safeName} - - - - - Any transaction requires the confirmation of: - - - {`${threshold} out of ${owners?.length || 0} owner(s)`} - - - - - - - - {`${owners?.length || 0} Safe owner(s)`} - - - - {owners?.map( - (safeOwner) => - !sameAddress(safeOwner.address, owner.address) && ( - - - - - - - - - ), - )} - - - REMOVING OWNER ↓ - - - - - - - - - - - ADDING NEW OWNER ↓ - - - - - - - - - - - - - - - {/* Tx Parameters */} - - - - - onSubmit(txParameters), - status: buttonStatus, - text: txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : undefined, - type: 'submit', - testId: REPLACE_OWNER_SUBMIT_BTN_TEST_ID, - }} - /> - - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.ts b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.ts deleted file mode 100644 index c8feaa893d..0000000000 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/style.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { background, border, lg, sm } from 'src/theme/variables' -import { createStyles, makeStyles } from '@material-ui/core' - -export const useStyles = makeStyles( - createStyles({ - root: { - height: '372px', - }, - info: { - backgroundColor: background, - padding: sm, - justifyContent: 'center', - textAlign: 'center', - flexDirection: 'column', - }, - details: { - padding: lg, - borderRight: `solid 1px ${border}`, - height: '100%', - }, - owners: { - overflow: 'auto', - height: '100%', - }, - ownersTitle: { - padding: lg, - }, - owner: { - padding: sm, - alignItems: 'center', - }, - name: { - textOverflow: 'ellipsis', - overflow: 'hidden', - }, - selectedOwnerRemoved: { - padding: sm, - alignItems: 'center', - backgroundColor: '#ffe6ea', - }, - selectedOwnerAdded: { - padding: sm, - alignItems: 'center', - backgroundColor: '#f7f5f5', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ManageOwners/index.tsx b/src/routes/safe/components/Settings/ManageOwners/index.tsx index b9a3f0a88b..b60a15edb1 100644 --- a/src/routes/safe/components/Settings/ManageOwners/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/index.tsx @@ -1,25 +1,21 @@ -import { useState, useEffect, ReactElement } from 'react' import TableCell from '@material-ui/core/TableCell' import TableContainer from '@material-ui/core/TableContainer' import TableRow from '@material-ui/core/TableRow' import cn from 'classnames' +import { ReactElement, useEffect } from 'react' -import { AddOwnerModal } from './AddOwnerModal' -import { EditOwnerModal } from './EditOwnerModal' -import { RemoveOwnerModal } from './RemoveOwnerModal' -import { ReplaceOwnerModal } from './ReplaceOwnerModal' -import { OWNERS_TABLE_ADDRESS_ID, generateColumns, getOwnerData, OwnerData } from './dataFetcher' +import { OWNERS_TABLE_ADDRESS_ID, generateColumns, getOwnerData } from './dataFetcher' import { useStyles } from './style' -import { getExplorerInfo } from 'src/config' +import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' import Table from 'src/components/Table' import { cellWidth } from 'src/components/Table/TableHead' import Block from 'src/components/layout/Block' import Heading from 'src/components/layout/Heading' import Paragraph from 'src/components/layout/Paragraph/index' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { useAnalytics, SETTINGS_EVENTS } from 'src/utils/googleAnalytics' +import { getExplorerInfo } from 'src/config' import { AddressBookState } from 'src/logic/addressBook/model/addressBook' +import { SETTINGS_EVENTS, useAnalytics } from 'src/utils/googleAnalytics' export const RENAME_OWNER_BTN_TEST_ID = 'rename-owner-btn' export const REMOVE_OWNER_BTN_TEST_ID = 'remove-owner-btn' @@ -36,32 +32,6 @@ const ManageOwners = ({ granted, owners }: Props): ReactElement => { const { trackEvent } = useAnalytics() const classes = useStyles() - const [selectedOwner, setSelectedOwner] = useState() - const [modalsStatus, setModalStatus] = useState({ - showAddOwner: false, - showRemoveOwner: false, - showReplaceOwner: false, - showEditOwner: false, - }) - - const onShow = (action, row?: OwnerData) => () => { - setModalStatus((prevState) => ({ - ...prevState, - [`show${action}`]: !prevState[`show${action}`], - })) - if (row) { - setSelectedOwner(row) - } - } - - const onHide = (action) => () => { - setModalStatus((prevState) => ({ - ...prevState, - [`show${action}`]: !Boolean(prevState[`show${action}`]), - })) - setSelectedOwner(undefined) - } - useEffect(() => { trackEvent(SETTINGS_EVENTS.OWNERS) }, [trackEvent]) @@ -118,65 +88,12 @@ const ManageOwners = ({ granted, owners }: Props): ReactElement => { )} ))} - {/* - - - - - {granted && ( - <> - - - - {ownerData.length > 1 && ( - - - - )} - - )} - - */} )) } - {/* {granted && ( - <> - - - - - - - - )} */} - - {selectedOwner && ( - <> - - - - - )} ) } diff --git a/src/routes/safe/components/Settings/SafeDetails/index.tsx b/src/routes/safe/components/Settings/SafeDetails/index.tsx index 8cfe6ee577..9ebd3f9037 100644 --- a/src/routes/safe/components/Settings/SafeDetails/index.tsx +++ b/src/routes/safe/components/Settings/SafeDetails/index.tsx @@ -1,5 +1,5 @@ import { makeStyles } from '@material-ui/core/styles' -import { ReactElement, useEffect, useState } from 'react' +import { ReactElement, useEffect } from 'react' import { useDispatch, useSelector } from 'react-redux' import styled from 'styled-components' @@ -10,14 +10,12 @@ import { composeValidators, required, validAddressBookName } from 'src/component import Block from 'src/components/layout/Block' import Heading from 'src/components/layout/Heading' import Paragraph from 'src/components/layout/Paragraph' -import Modal from 'src/components/Modal' import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook' import { addressBookAddOrUpdate } from 'src/logic/addressBook/store/actions' import { enhanceSnackbarForAction, getNotificationsFromTxType } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' import { updateSafe } from 'src/logic/safe/store/actions/updateSafe' import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { UpdateSafeModal } from 'src/routes/safe/components/Settings/UpdateSafeModal' import { StyledBorder, StyledButtonBorder, StyledButtonLabel, styles } from './style' import ChainIndicator from 'src/components/ChainIndicator' @@ -45,12 +43,6 @@ const SafeDetails = (): ReactElement => { const dispatch = useDispatch() const { trackEvent } = useAnalytics() - const [isModalOpen, setModalOpen] = useState(false) - - const toggleModal = () => { - setModalOpen((prevOpen) => !prevOpen) - } - const updateAddressBook = (values) => { dispatch( addressBookAddOrUpdate( @@ -107,25 +99,6 @@ const SafeDetails = (): ReactElement => { )} - - {/* - - - - Save - - - - */} - - - )} diff --git a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Amount.tsx b/src/routes/safe/components/Settings/SpendingLimit/FormFields/Amount.tsx deleted file mode 100644 index b54bd0a452..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Amount.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { TextField as SRCTextField } from '@aura/safe-react-components' -import { ReactElement } from 'react' -import { useField } from 'react-final-form' -import { useSelector } from 'react-redux' -import styled from 'styled-components' - -import GnoField from 'src/components/forms/Field' -import { composeValidators, minValue, mustBeFloat, required } from 'src/components/forms/validator' -import { extendedSafeTokensSelector } from 'src/utils/safeUtils/selector' -import { useStyles } from 'src/routes/safe/components/Settings/SpendingLimit/style' - -export const Field = styled(GnoField)` - margin: 8px 0; - width: 100%; -` - -const AmountInput = styled.div` - grid-area: amountInput; -` - -const TextField = styled(SRCTextField)` - margin: 0; -` - -const Amount = (): ReactElement => { - const classes = useStyles() - - const { - input: { value: tokenAddress }, - } = useField('token', { subscription: { value: true } }) - const { - meta: { touched, visited }, - } = useField('amount', { subscription: { touched: true, visited: true } }) - - const tokens = useSelector(extendedSafeTokensSelector) - - const selectedTokenRecord = tokens.find((token) => token.address === tokenAddress) - - const validate = (touched || visited) && composeValidators(required, mustBeFloat, minValue(0, false)) - - return ( - - - - ) -} - -export default Amount diff --git a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Beneficiary.tsx b/src/routes/safe/components/Settings/SpendingLimit/FormFields/Beneficiary.tsx deleted file mode 100644 index b43d4e82c8..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Beneficiary.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { KeyboardEvent, ReactElement, useEffect, useState } from 'react' -import { useForm, useFormState } from 'react-final-form' -import { useSelector } from 'react-redux' -import styled from 'styled-components' - -import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { getExplorerInfo } from 'src/config' -import { currentNetworkAddressBook } from 'src/logic/addressBook/store/selectors' -import { AddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' -import { sameString } from 'src/utils/strings' -import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { mustBeEthereumAddress } from 'src/components/forms/validator' - -const BeneficiaryInput = styled.div` - grid-area: beneficiaryInput; -` - -const BeneficiaryScan = styled.div` - grid-area: beneficiaryScan; -` - -const Beneficiary = (): ReactElement => { - const { initialValues } = useFormState() - const { mutators } = useForm() - const [addressErrorMsg, setAddressErrorMsg] = useState('') - - const [selectedEntry, setSelectedEntry] = useState<{ address?: string; name?: string } | null>({ - address: initialValues?.beneficiary || '', - name: '', - }) - - const [pristine, setPristine] = useState(!initialValues?.beneficiary) - - useEffect(() => { - if (selectedEntry === null) { - mutators?.setBeneficiary?.('') - - if (pristine) { - setPristine(false) - } - } - }, [mutators, pristine, selectedEntry]) - - const addressBook = useSelector(currentNetworkAddressBook) - - const handleScan = (value: string, closeQrModal: () => void) => { - const scannedAddress = value.startsWith('ethereum:') ? value.replace('ethereum:', '') : value - const scannedName = addressBook.find(({ address }) => { - return sameAddress(scannedAddress, address) - })?.name - - const addressErrorMessage = mustBeEthereumAddress(scannedAddress) - if (!addressErrorMessage) { - mutators?.setBeneficiary?.(scannedAddress) - - setSelectedEntry({ - name: scannedName, - address: scannedAddress, - }) - setAddressErrorMsg('') - } else setAddressErrorMsg(addressErrorMessage) - - closeQrModal() - } - - const handleOnKeyDown = (e: KeyboardEvent): void => { - if (sameString(e.key, 'Tab')) { - return - } - setSelectedEntry(null) - } - - const handleOnClick = () => { - setSelectedEntry(null) - } - - return selectedEntry?.address ? ( - - - - ) : ( - <> - - {}} - label="Beneficiary" - /> - - - - - - ) -} - -export default Beneficiary diff --git a/src/routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime.tsx b/src/routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime.tsx deleted file mode 100644 index 48d4d9e1d1..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { RadioButtons, Text } from '@aura/safe-react-components' -import { FormControlLabel, hexToRgb, Switch as SwitchMui } from '@material-ui/core' -import { ReactElement } from 'react' -import { useField } from 'react-final-form' -import styled from 'styled-components' - -import { getChainName } from 'src/config' -import { Field } from 'src/routes/safe/components/Settings/SpendingLimit/FormFields/Amount' - -// TODO: propose refactor in safe-react-components based on this requirements -const SpendingLimitRadioButtons = styled(RadioButtons)` - & .MuiRadio-colorPrimary.Mui-checked { - color: ${({ theme }) => theme.colors.primary}; - } -` - -// TODO: add `name` and `value` to SRC Switch, as they're required for a better RFF integration -const StyledSwitch = styled(({ ...rest }) => )` - && { - .MuiIconButton-label, - .MuiSwitch-colorSecondary { - color: ${({ theme }) => theme.colors.icon}; - } - - .MuiSwitch-colorSecondary.Mui-checked .MuiIconButton-label { - color: ${({ theme }) => theme.colors.primary}; - } - - .MuiSwitch-colorSecondary.Mui-checked:hover { - background-color: ${({ theme }) => hexToRgb(`${theme.colors.primary}03`)}; - } - - .Mui-checked + .MuiSwitch-track { - background-color: ${({ theme }) => theme.colors.primaryLight}; - } - } -` - -interface RadioButtonOption { - label: string - value: string -} - -interface RadioButtonProps { - options: RadioButtonOption[] - initialValue: string - groupName: string -} - -const SafeRadioButtons = ({ options, initialValue, groupName }: RadioButtonProps): ReactElement => ( - - {({ input: { name, value, onChange } }) => ( - - )} - -) - -const Switch = ({ label, name }: { label: string; name: string }): ReactElement => ( - ( - - )} - /> - } - /> -) - -const ResetTimeLabel = styled.div` - grid-area: resetTimeLabel; -` - -const ResetTimeToggle = styled.div` - grid-area: resetTimeToggle; -` - -const ResetTimeOptions = styled.div` - grid-area: resetTimeOption; -` - -const RESET_TIME_OPTIONS = [ - { label: '1 day', value: '1440' }, // 1 day x 24h x 60min - { label: '1 week', value: '10080' }, // 7 days x 24h x 60min - { label: '1 month', value: '43200' }, // 30 days x 24h x 60min -] - -const RINKEBY_RESET_TIME_OPTIONS = [ - { label: '5 minutes', value: '5' }, - { label: '30 minutes', value: '30' }, - { label: '1 hour', value: '60' }, -] - -export const getResetTimeOptions = (): RadioButtonOption[] => { - const currentNetwork = getChainName().toLowerCase() - return currentNetwork !== 'rinkeby' ? RESET_TIME_OPTIONS : RINKEBY_RESET_TIME_OPTIONS -} - -const ResetTime = (): ReactElement => { - const { - input: { value: withResetTime }, - } = useField('withResetTime', { subscription: { value: true } }) - - const resetTimeOptions = getResetTimeOptions() - - const switchExplanation = withResetTime ? 'choose reset time period' : 'one time' - - return ( - <> - - Set a reset time so the allowance automatically refills after the defined time period. - - - - - {withResetTime && ( - - - - )} - - ) -} - -export default ResetTime diff --git a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Token.tsx b/src/routes/safe/components/Settings/SpendingLimit/FormFields/Token.tsx deleted file mode 100644 index d964bb903f..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/FormFields/Token.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' -import styled from 'styled-components' - -import TokenSelectField from 'src/routes/safe/components/Balances/SendModal/screens/SendFunds/TokenSelectField' -import { extendedSafeTokensSelector } from 'src/utils/safeUtils/selector' - -const TokenInput = styled.div` - grid-area: tokenInput; -` - -const Token = (): ReactElement => { - const tokens = useSelector(extendedSafeTokensSelector) - - return ( - - - - ) -} - -export default Token diff --git a/src/routes/safe/components/Settings/SpendingLimit/FormFields/index.ts b/src/routes/safe/components/Settings/SpendingLimit/FormFields/index.ts deleted file mode 100644 index 555ac53768..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/FormFields/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Amount from './Amount' -import Beneficiary from './Beneficiary' -import ResetTime from './ResetTime' -import Token from './Token' - -export { Amount, Beneficiary, ResetTime, Token } diff --git a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/AddressInfo.tsx b/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/AddressInfo.tsx deleted file mode 100644 index 6d1adc1775..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/AddressInfo.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { Text } from '@aura/safe-react-components' -import { ReactElement } from 'react' -import { useSelector } from 'react-redux' - -import PrefixedEthHashInfo from 'src/components/PrefixedEthHashInfo' -import { getExplorerInfo } from 'src/config' -import { addressBookEntryName } from 'src/logic/addressBook/store/selectors' -import { ADDRESS_BOOK_DEFAULT_NAME } from 'src/logic/addressBook/model/addressBook' -import { sameString } from 'src/utils/strings' - -interface AddressInfoProps { - address: string - title?: string - name?: string - logoUri?: string -} - -const AddressInfo = ({ address, title, name, logoUri }: AddressInfoProps): ReactElement => { - const addessBookName = useSelector((state) => addressBookEntryName(state, { address })) - - return ( - <> - {title && ( - - {title} - - )} - - - ) -} - -export default AddressInfo diff --git a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/ResetTimeInfo.tsx b/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/ResetTimeInfo.tsx deleted file mode 100644 index 3838278751..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/ResetTimeInfo.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { IconText, Text } from '@aura/safe-react-components' -import { ReactElement } from 'react' - -import Row from 'src/components/layout/Row' - -interface ResetTimeInfoProps { - title?: string - label?: string -} - -const ResetTimeInfo = ({ title, label }: ResetTimeInfoProps): ReactElement => ( - <> - - {title} - - {label ? ( - - - - ) : ( - - One-time spending limit - - )} - -) - -export default ResetTimeInfo diff --git a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/TokenInfo.tsx b/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/TokenInfo.tsx deleted file mode 100644 index 9673179273..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/TokenInfo.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Text } from '@aura/safe-react-components' -import { ReactElement } from 'react' -import styled from 'styled-components' - -import { Token } from 'src/logic/tokens/store/model/token' -import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' - -const StyledImage = styled.img` - width: 32px; - height: 32px; - object-fit: contain; - margin: 0 8px 0 0; -` -const StyledImageName = styled.div` - display: flex; - align-items: center; -` - -interface TokenInfoProps { - amount: string - title?: string - token: Token -} - -const TokenInfo = ({ amount, title, token }: TokenInfoProps): ReactElement => ( - <> - - {title} - - - - - {amount} {token.symbol} - - - -) - -export default TokenInfo diff --git a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/index.ts b/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/index.ts deleted file mode 100644 index ca9c9f549c..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/InfoDisplay/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import AddressInfo from './AddressInfo' -import ResetTimeInfo from './ResetTimeInfo' -import TokenInfo from './TokenInfo' - -export { AddressInfo, ResetTimeInfo, TokenInfo } diff --git a/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/SpentVsAmount.tsx b/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/SpentVsAmount.tsx deleted file mode 100644 index 206d7a9d49..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/SpentVsAmount.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { Text } from '@aura/safe-react-components' -import { ReactElement, useMemo } from 'react' -import styled from 'styled-components' - -import { Token } from 'src/logic/tokens/store/model/token' -import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' -import useTokenInfo from 'src/logic/safe/hooks/useTokenInfo' -import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' -import { useWindowDimensions } from 'src/logic/hooks/useWindowDimensions' - -const StyledImage = styled.img` - width: 32px; - height: 32px; - object-fit: contain; - margin: 0 8px 0 0; -` - -const StyledImageName = styled.div` - display: flex; - align-items: center; -` - -type FormattedAmountsProps = { amount: string; spent: string; tokenInfo?: Token } - -type FormattedAmounts = { amount: string; spent: string } - -const useFormattedAmounts = ({ amount, spent, tokenInfo }: FormattedAmountsProps): FormattedAmounts | undefined => { - return useMemo(() => { - if (tokenInfo) { - const formattedSpent = formatAmount(fromTokenUnit(spent, tokenInfo.decimals)).toString() - const formattedAmount = formatAmount(fromTokenUnit(amount, tokenInfo.decimals)).toString() - return { amount: formattedAmount, spent: formattedSpent } - } - }, [amount, spent, tokenInfo]) -} - -interface SpentVsAmountProps { - amount: string - spent: string - tokenAddress: string -} - -export const SpentVsAmount = ({ amount, spent, tokenAddress }: SpentVsAmountProps): ReactElement | null => { - const { width } = useWindowDimensions() - const showIcon = useMemo(() => width > 1024, [width]) - - const tokenInfo = useTokenInfo(tokenAddress) - const spentInfo = useFormattedAmounts({ amount, spent, tokenInfo }) - - return spentInfo && tokenInfo ? ( - - {showIcon && } - {`${spentInfo.spent} of ${spentInfo.amount} ${tokenInfo.symbol}`} - - ) : null -} diff --git a/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/dataFetcher.ts b/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/dataFetcher.ts deleted file mode 100644 index 6887d8ebe2..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/LimitsTable/dataFetcher.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { List } from 'immutable' - -import { TableColumn } from 'src/components/Table/types.d' -import { SpendingLimitRow } from 'src/logic/safe/utils/spendingLimits' -import { relativeTime } from 'src/utils/date' - -export const SPENDING_LIMIT_TABLE_BENEFICIARY_ID = 'beneficiary' -export const SPENDING_LIMIT_TABLE_SPENT_ID = 'spent' -export const SPENDING_LIMIT_TABLE_RESET_TIME_ID = 'resetTime' -const SPENDING_LIMIT_TABLE_ACTION_ID = 'action' - -export type SpendingLimitTable = { - [SPENDING_LIMIT_TABLE_BENEFICIARY_ID]: string - [SPENDING_LIMIT_TABLE_SPENT_ID]: { - spent: string - amount: string - tokenAddress: string - } - [SPENDING_LIMIT_TABLE_RESET_TIME_ID]: { - relativeTime: string - lastResetMin: string - resetTimeMin: string - } -} - -const getSpendingLimitData = (spendingLimits?: SpendingLimitRow[] | null): SpendingLimitTable[] | undefined => - spendingLimits?.map((spendingLimit) => ({ - [SPENDING_LIMIT_TABLE_BENEFICIARY_ID]: spendingLimit.delegate, - [SPENDING_LIMIT_TABLE_SPENT_ID]: { - spent: spendingLimit.spent, - amount: spendingLimit.amount, - tokenAddress: spendingLimit.token, - }, - [SPENDING_LIMIT_TABLE_RESET_TIME_ID]: { - relativeTime: relativeTime(spendingLimit.lastResetMin, spendingLimit.resetTimeMin), - lastResetMin: spendingLimit.lastResetMin, - resetTimeMin: spendingLimit.resetTimeMin, - }, - })) - -export const generateColumns = (): List => { - const beneficiaryColumn: TableColumn = { - align: 'left', - custom: false, - disablePadding: false, - id: SPENDING_LIMIT_TABLE_BENEFICIARY_ID, - label: 'Beneficiary', - order: false, - } - - const spentColumn: TableColumn = { - align: 'left', - custom: false, - disablePadding: false, - id: SPENDING_LIMIT_TABLE_SPENT_ID, - label: 'Spent', - order: false, - static: true, - } - - const resetColumn: TableColumn = { - align: 'left', - custom: false, - disablePadding: false, - id: SPENDING_LIMIT_TABLE_RESET_TIME_ID, - label: 'Reset Time', - order: false, - static: true, - } - - const actionsColumn: TableColumn = { - custom: true, - disablePadding: false, - id: SPENDING_LIMIT_TABLE_ACTION_ID, - label: '', - order: false, - } - - return List([beneficiaryColumn, spentColumn, resetColumn, actionsColumn]) -} diff --git a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Create.tsx b/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Create.tsx deleted file mode 100644 index a159fcf67a..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Create.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { FormState, Mutator } from 'final-form' -import { ReactElement } from 'react' -import styled from 'styled-components' - -import GnoForm from 'src/components/forms/GnoForm' -import { Modal } from 'src/components/Modal' -import { Amount, Beneficiary, ResetTime, Token } from 'src/routes/safe/components/Settings/SpendingLimit/FormFields' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import Hairline from 'src/components/layout/Hairline' - -const FormContainer = styled.div` - padding: 24px 8px 24px 24px; - align-items: center; - display: grid; - grid-template-columns: 4fr 1fr; - grid-template-rows: 6fr; - gap: 16px 8px; - grid-template-areas: - 'beneficiaryInput beneficiaryScan' - 'tokenInput .' - 'amountInput .' - 'resetTimeLabel resetTimeLabel' - 'resetTimeToggle resetTimeToggle' - 'resetTimeOption resetTimeOption'; -` - -const formMutators: Record> = { - setBeneficiary: (args, state, utils) => { - utils.changeValue(state, 'beneficiary', () => args[0]) - }, -} - -interface NewSpendingLimitProps { - initialValues?: Record - onCancel: () => void - onReview: (values) => void -} - -const canReview = ({ - invalid, - submitting, - dirtyFieldsSinceLastSubmit, - values: { beneficiary, token, amount }, -}: FormState<{ beneficiary: string; token: string; amount: string }>): boolean => - !(submitting || invalid || !beneficiary || !token || !amount || !dirtyFieldsSinceLastSubmit) - -const Create = ({ initialValues, onCancel, onReview }: NewSpendingLimitProps): ReactElement => { - return ( - <> - - - - {(...args) => { - return ( - <> - - - - - - - - - - - - ) - }} - - - ) -} - -export default Create diff --git a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Review.tsx b/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Review.tsx deleted file mode 100644 index be8e4b4d3d..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/Review.tsx +++ /dev/null @@ -1,351 +0,0 @@ -import { Text } from '@aura/safe-react-components' -import { ReactElement, useEffect, useMemo, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' - -import Col from 'src/components/layout/Col' -import Row from 'src/components/layout/Row' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { createTransaction, CreateTransactionArgs } from 'src/logic/safe/store/actions/createTransaction' -import { SafeRecordProps, SpendingLimit } from 'src/logic/safe/store/models/safe' -import { - addSpendingLimitBeneficiaryMultiSendTx, - currentMinutes, - enableSpendingLimitModuleMultiSendTx, - getResetSpendingLimitTx, - setSpendingLimitMultiSendTx, - setSpendingLimitTx, - spendingLimitMultiSendTx, - SpendingLimitRow, -} from 'src/logic/safe/utils/spendingLimits' -import { MultiSendTx } from 'src/logic/safe/transactions/multisend' -import { makeToken, Token } from 'src/logic/tokens/store/model/token' -import { fromTokenUnit, toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' -import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { getResetTimeOptions } from 'src/routes/safe/components/Settings/SpendingLimit/FormFields/ResetTime' -import { AddressInfo, ResetTimeInfo, TokenInfo } from 'src/routes/safe/components/Settings/SpendingLimit/InfoDisplay' -import { currentSafe } from 'src/logic/safe/store/selectors' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import Hairline from 'src/components/layout/Hairline' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { isModuleEnabled } from 'src/logic/safe/utils/modules' -import { SPENDING_LIMIT_MODULE_ADDRESS } from 'src/utils/constants' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -import { ActionCallback, CREATE } from '.' - -const useExistentSpendingLimit = ({ - spendingLimits, - txToken, - values, -}: { - spendingLimits?: SafeRecordProps['spendingLimits'] - txToken: Token - values: ReviewSpendingLimitProps['values'] -}) => { - // undefined: before setting a value - // null: if no previous value - // SpendingLimit: if previous value exists - return useMemo(() => { - // if `delegate` already exist, check what tokens were delegated to the _beneficiary_ `getTokens(safe, delegate)` - const currentDelegate = spendingLimits?.find( - ({ delegate, token }) => sameAddress(delegate, values.beneficiary) && sameAddress(token, values.token), - ) - - // let the user know that is about to replace an existent allowance - if (currentDelegate !== undefined) { - return { - ...currentDelegate, - amount: fromTokenUnit(currentDelegate.amount, txToken.decimals), - } - } else { - return null - } - }, [spendingLimits, txToken.decimals, values.beneficiary, values.token]) -} - -const calculateSpendingLimitsTxData = ( - safeAddress: string, - safeVersion: string, - spendingLimits: SpendingLimit[] | null | undefined, - existentSpendingLimit: SpendingLimit | null, - txToken: Token, - values: Record, - modules: string[], - txParameters?: TxParameters, -): { - spendingLimitTxData: CreateTransactionArgs - transactions: MultiSendTx[] - spendingLimitArgs: { - beneficiary: string - token: string - spendingLimitInWei: string - resetTimeMin: number - resetBaseMin: number - } -} => { - const isSpendingLimitEnabled = isModuleEnabled(modules, SPENDING_LIMIT_MODULE_ADDRESS) - const transactions: MultiSendTx[] = [] - - // is spendingLimit module enabled? -> if not, create the tx to enable it, and encode it - if (!isSpendingLimitEnabled && safeAddress) { - transactions.push(enableSpendingLimitModuleMultiSendTx(safeAddress, safeVersion)) - } - - // does `delegate` already exist? (`getDelegates`, previously queried to build the table with allowances (??)) - // ^ - shall we rely on this or query the list of delegates once again? - const isDelegateAlreadyAdded = - spendingLimits?.some(({ delegate }) => sameAddress(delegate, values?.beneficiary)) ?? false - - // if `delegate` does not exist, add it by calling `addDelegate(beneficiary)` - if (!isDelegateAlreadyAdded && values?.beneficiary) { - transactions.push(addSpendingLimitBeneficiaryMultiSendTx(values.beneficiary)) - } - - if (existentSpendingLimit && existentSpendingLimit.spent !== '0') { - transactions.push(getResetSpendingLimitTx(existentSpendingLimit.delegate, txToken.address)) - } - - // prepare the setAllowance tx - const startTime = currentMinutes() - 30 - const spendingLimitArgs = { - beneficiary: values.beneficiary, - token: values.token, - spendingLimitInWei: toTokenUnit(values.amount, txToken.decimals), - resetTimeMin: values.withResetTime ? +values.resetTime : 0, - resetBaseMin: values.withResetTime ? startTime : 0, - } - - let spendingLimitTxData - if (safeAddress) { - // if there's no tx for enable module or adding a delegate, then we avoid using multiSend Tx - if (transactions.length === 0) { - spendingLimitTxData = setSpendingLimitTx({ spendingLimitArgs, safeAddress }) - } else { - const encodedTxForMultisend = setSpendingLimitMultiSendTx({ spendingLimitArgs, safeAddress }) - transactions.push(encodedTxForMultisend) - spendingLimitTxData = spendingLimitMultiSendTx({ transactions, safeAddress }) - } - - if (txParameters) { - spendingLimitTxData.txNonce = txParameters.safeNonce - spendingLimitTxData.safeTxGas = txParameters.safeTxGas ? txParameters.safeTxGas : undefined - spendingLimitTxData.ethParameters = txParameters - } - } - return { - spendingLimitTxData, - transactions, - spendingLimitArgs, - } -} - -interface ReviewSpendingLimitProps { - onBack: ActionCallback - onClose: () => void - txToken: Token - values: Record - existentSpendingLimit?: SpendingLimitRow -} - -export const ReviewSpendingLimits = ({ onBack, onClose, txToken, values }: ReviewSpendingLimitProps): ReactElement => { - const dispatch = useDispatch() - - const { - address: safeAddress = '', - spendingLimits, - currentVersion: safeVersion = '', - modules, - } = useSelector(currentSafe) ?? {} - const existentSpendingLimit = useExistentSpendingLimit({ spendingLimits, txToken, values }) - const [estimateGasArgs, setEstimateGasArgs] = useState>({ - to: '', - txData: '', - }) - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - const { - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isCreation, - isOffChainSignature, - gasPrice, - gasPriceFormatted, - gasLimit, - gasEstimation, - } = useEstimateTransactionGas({ - txData: estimateGasArgs.txData as string, - txRecipient: estimateGasArgs.to as string, - operation: estimateGasArgs.operation, - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - const safeModules = useMemo(() => modules?.map((pair) => pair[1]) || [], [modules]) - - useEffect(() => { - const { spendingLimitTxData } = calculateSpendingLimitsTxData( - safeAddress, - safeVersion, - spendingLimits, - existentSpendingLimit, - txToken, - values, - safeModules, - ) - setEstimateGasArgs(spendingLimitTxData) - }, [safeAddress, safeVersion, spendingLimits, existentSpendingLimit, txToken, values, safeModules]) - - const handleSubmit = (txParameters: TxParameters): void => { - const { ethGasPrice, ethGasLimit, ethGasPriceInGWei } = txParameters - const advancedOptionsTxParameters = { - ...txParameters, - ethGasPrice: ethGasPrice || gasPrice, - ethGasPriceInGWei: ethGasPriceInGWei || gasPriceFormatted, - ethGasLimit: ethGasLimit || gasLimit, - } - - if (safeAddress) { - const { spendingLimitTxData } = calculateSpendingLimitsTxData( - safeAddress, - safeVersion, - spendingLimits, - existentSpendingLimit, - txToken, - values, - safeModules, - advancedOptionsTxParameters, - ) - - dispatch(createTransaction(spendingLimitTxData)) - } - } - - const resetTimeLabel = useMemo( - () => (values.withResetTime ? getResetTimeOptions().find(({ value }) => value === values.resetTime)?.label : ''), - [values.resetTime, values.withResetTime], - ) - - const previousResetTime = (existentSpendingLimit: SpendingLimit) => - getResetTimeOptions().find(({ value }) => value === (+existentSpendingLimit.resetTimeMin).toString())?.label ?? - 'One-time spending limit' - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - let confirmButtonText = 'Submit' - if (ButtonStatus.LOADING === buttonStatus) { - confirmButtonText = txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : 'Submitting' - } - - return ( - - {(txParameters, toggleEditMode) => ( - <> - - - - - - - - - - {existentSpendingLimit && ( - - Previous Amount: {existentSpendingLimit.amount} - - )} - - - - {existentSpendingLimit && ( - - - Previous Reset Time: {previousResetTime(existentSpendingLimit)} - - - )} - - - {existentSpendingLimit && ( - - - You are about to replace an existent spending limit - - - )} - {/* Tx Parameters */} - - - - - - onBack({ values: {}, txToken: makeToken(), step: CREATE }), - text: 'Back', - }} - confirmButtonProps={{ - onClick: () => handleSubmit(txParameters), - disabled: existentSpendingLimit === undefined, - status: buttonStatus, - text: confirmButtonText, - }} - /> - - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/index.tsx b/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/index.tsx deleted file mode 100644 index 1e8887af37..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/NewLimitModal/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { List } from 'immutable' -import { Reducer, useCallback, useReducer } from 'react' -import { useSelector } from 'react-redux' - -import { makeToken, Token } from 'src/logic/tokens/store/model/token' -import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { extendedSafeTokensSelector } from 'src/utils/safeUtils/selector' - -export const CREATE = 'CREATE' as const -const REVIEW = 'REVIEW' as const - -type Step = typeof CREATE | typeof REVIEW - -type State = { - step: Step - values: Record - txToken: Token -} - -type Action = { - type: Step - newState: State - tokens: List -} - -const newLimitModalReducer = (state: State, action: Action): State => { - const { type, newState, tokens } = action - - switch (type) { - case CREATE: { - return { - ...state, - step: CREATE, - } - } - - case REVIEW: { - return { - ...state, - ...newState, - // we lookup into the list of tokens for the selected token info - txToken: tokens.find((token) => sameAddress(token.address, newState.values.token)) ?? state.txToken, - step: REVIEW, - } - } - } -} - -export type ActionCallback = (state: State) => void -type NewLimitModalHook = [State, { create: ActionCallback; review: ActionCallback }] - -const useNewLimitModal = (initialStep: Step): NewLimitModalHook => { - // globally stored tokens - const tokens = useSelector(extendedSafeTokensSelector) - - // setup the reducer with initial values - const [state, dispatch] = useReducer, State>( - newLimitModalReducer, - { - step: initialStep, - txToken: makeToken(), - values: {}, - }, - (state) => state, - ) - - // define actions - const create = useCallback((newState) => dispatch({ type: CREATE, newState, tokens }), [tokens]) - const review = useCallback((newState) => dispatch({ type: REVIEW, newState, tokens }), [tokens]) - - // returns state and dispatch - return [state, { create, review }] -} - -interface SpendingLimitModalProps { - close: () => void - open: boolean -} diff --git a/src/routes/safe/components/Settings/SpendingLimit/RemoveLimitModal.tsx b/src/routes/safe/components/Settings/SpendingLimit/RemoveLimitModal.tsx deleted file mode 100644 index d7fce42852..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/RemoveLimitModal.tsx +++ /dev/null @@ -1,199 +0,0 @@ -import { ReactElement, useEffect, useState } from 'react' -import { useDispatch } from 'react-redux' - -import Col from 'src/components/layout/Col' -import Row from 'src/components/layout/Row' -import Hairline from 'src/components/layout/Hairline' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import useTokenInfo from 'src/logic/safe/hooks/useTokenInfo' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { getDeleteAllowanceTxData } from 'src/logic/safe/utils/spendingLimits' -import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { SPENDING_LIMIT_MODULE_ADDRESS } from 'src/utils/constants' -import { getResetTimeOptions } from './FormFields/ResetTime' -import { AddressInfo, ResetTimeInfo, TokenInfo } from './InfoDisplay' -import { SpendingLimitTable } from './LimitsTable/dataFetcher' -import { useStyles } from './style' -import { extractSafeAddress } from 'src/routes/routes' - -interface RemoveSpendingLimitModalProps { - onClose: () => void - spendingLimit: SpendingLimitTable - open: boolean -} - -export const RemoveLimitModal = ({ onClose, spendingLimit, open }: RemoveSpendingLimitModalProps): ReactElement => { - const classes = useStyles() - - const tokenInfo = useTokenInfo(spendingLimit.spent.tokenAddress) - - const safeAddress = extractSafeAddress() - const [txData, setTxData] = useState('') - const dispatch = useDispatch() - const [manualSafeTxGas, setManualSafeTxGas] = useState('0') - const [manualGasPrice, setManualGasPrice] = useState() - const [manualGasLimit, setManualGasLimit] = useState() - - useEffect(() => { - const { - beneficiary, - spent: { tokenAddress }, - } = spendingLimit - const txData = getDeleteAllowanceTxData({ beneficiary, tokenAddress }) - setTxData(txData) - }, [spendingLimit]) - - const { - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isOffChainSignature, - isCreation, - gasLimit, - gasEstimation, - gasPriceFormatted, - } = useEstimateTransactionGas({ - txData, - txRecipient: SPENDING_LIMIT_MODULE_ADDRESS, - txAmount: '0', - safeTxGas: manualSafeTxGas, - manualGasPrice, - manualGasLimit, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - const removeSelectedSpendingLimit = (txParameters: TxParameters) => { - try { - dispatch( - createTransaction({ - safeAddress, - to: SPENDING_LIMIT_MODULE_ADDRESS, - valueInWei: '0', - txData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: TX_NOTIFICATION_TYPES.REMOVE_SPENDING_LIMIT_TX, - }), - ) - } catch (e) { - console.error( - `failed to remove spending limit ${spendingLimit.beneficiary} -> ${spendingLimit.spent.tokenAddress}`, - e.message, - ) - } - } - - const resetTimeLabel = - getResetTimeOptions().find(({ value }) => +value === +spendingLimit.resetTime.resetTimeMin)?.label ?? '' - - const closeEditModalCallback = (txParameters: TxParameters) => { - const oldGasPrice = gasPriceFormatted - const newGasPrice = txParameters.ethGasPrice - const oldSafeTxGas = gasEstimation - const newSafeTxGas = txParameters.safeTxGas - - if (newGasPrice && oldGasPrice !== newGasPrice) { - setManualGasPrice(txParameters.ethGasPrice) - } - - if (txParameters.ethGasLimit && gasLimit !== txParameters.ethGasLimit) { - setManualGasLimit(txParameters.ethGasLimit) - } - - if (newSafeTxGas && oldSafeTxGas !== newSafeTxGas) { - setManualSafeTxGas(newSafeTxGas) - } - } - - let confirmButtonText = 'Remove' - if (ButtonStatus.LOADING === buttonStatus) { - confirmButtonText = txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : 'Removing' - } - - return ( - - - {(txParameters, toggleEditMode) => { - return ( - <> - - - - - - - - - {tokenInfo && ( - - )} - - - - - {/* Tx Parameters */} - - - - - - - - - removeSelectedSpendingLimit(txParameters), - status: buttonStatus, - text: confirmButtonText, - }} - /> - - - ) - }} - - - ) -} diff --git a/src/routes/safe/components/Settings/SpendingLimit/assets/asset-amount.svg b/src/routes/safe/components/Settings/SpendingLimit/assets/asset-amount.svg deleted file mode 100644 index f25cd82d6b..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/assets/asset-amount.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/routes/safe/components/Settings/SpendingLimit/assets/beneficiary.svg b/src/routes/safe/components/Settings/SpendingLimit/assets/beneficiary.svg deleted file mode 100644 index d601f4a673..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/assets/beneficiary.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/routes/safe/components/Settings/SpendingLimit/assets/time.svg b/src/routes/safe/components/Settings/SpendingLimit/assets/time.svg deleted file mode 100644 index 5a330082c9..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/assets/time.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/routes/safe/components/Settings/SpendingLimit/style.ts b/src/routes/safe/components/Settings/SpendingLimit/style.ts deleted file mode 100644 index 2a866b9ca2..0000000000 --- a/src/routes/safe/components/Settings/SpendingLimit/style.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { createStyles, makeStyles } from '@material-ui/core' -import { - background, - boldFont, - border, - error, - fontColor, - lg, - md, - secondaryText, - sm, - smallFontSize, - xl, -} from 'src/theme/variables' - -export const useStyles = makeStyles( - createStyles({ - title: { - padding: lg, - paddingBottom: 0, - }, - hide: { - '&:hover': { - backgroundColor: '#f7f5f5', - }, - '&:hover $actions': { - visibility: 'initial', - }, - }, - actions: { - justifyContent: 'flex-end', - visibility: 'hidden', - }, - noBorderBottom: { - '& > td': { - borderBottom: 'none', - }, - }, - annotation: { - paddingLeft: lg, - }, - ownersText: { - color: secondaryText, - '& b': { - color: fontColor, - }, - }, - container: { - padding: lg, - }, - actionButton: { - fontWeight: boldFont, - marginRight: sm, - }, - buttonRow: { - padding: lg, - left: 0, - bottom: 0, - boxSizing: 'border-box', - width: '100%', - justifyContent: 'flex-end', - borderTop: `2px solid ${border}`, - }, - modifyBtn: { - height: xl, - fontSize: smallFontSize, - }, - removeModuleIcon: { - marginLeft: lg, - cursor: 'pointer', - }, - modalHeading: { - boxSizing: 'border-box', - justifyContent: 'space-between', - height: '74px', - padding: `${sm} ${lg}`, - }, - modalContainer: { - minHeight: '369px', - }, - modalManage: { - fontSize: lg, - }, - modalClose: { - height: '35px', - width: '35px', - }, - modalButtonRow: { - height: '84px', - justifyContent: 'center', - }, - modalButtonRemove: { - color: '#fff', - backgroundColor: error, - height: '42px', - }, - modalName: { - textOverflow: 'ellipsis', - overflow: 'hidden', - }, - modalUserName: { - whiteSpace: 'nowrap', - }, - modalOwner: { - backgroundColor: background, - padding: md, - alignItems: 'center', - }, - modalUser: { - justifyContent: 'left', - }, - modalDescription: { - padding: md, - }, - modalOpen: { - paddingLeft: sm, - width: 'auto', - '&:hover': { - cursor: 'pointer', - }, - }, - amountInput: { - width: '100% !important', - }, - }), -) diff --git a/src/routes/safe/components/Settings/ThresholdSettings/index.tsx b/src/routes/safe/components/Settings/ThresholdSettings/index.tsx index c9083e52e0..6ee170af6c 100644 --- a/src/routes/safe/components/Settings/ThresholdSettings/index.tsx +++ b/src/routes/safe/components/Settings/ThresholdSettings/index.tsx @@ -7,7 +7,7 @@ import Bold from 'src/components/layout/Bold' import Heading from 'src/components/layout/Heading' import Paragraph from 'src/components/layout/Paragraph' import { currentSafe } from 'src/logic/safe/store/selectors' -import { useAnalytics, SETTINGS_EVENTS } from 'src/utils/googleAnalytics' +import { SETTINGS_EVENTS, useAnalytics } from 'src/utils/googleAnalytics' import { styles } from './style' @@ -15,13 +15,7 @@ const useStyles = makeStyles(styles) const ThresholdSettings = (): React.ReactElement => { const classes = useStyles() - // const [isModalOpen, setModalOpen] = useState(false) - const { /* address: safeAddress = '', */ owners, threshold = 1 } = useSelector(currentSafe) ?? {} - // const granted = useSelector(grantedSelector) - - // const toggleModal = () => { - // setModalOpen((prevOpen) => !prevOpen) - // } + const { owners, threshold = 1 } = useSelector(currentSafe) ?? {} const { trackEvent } = useAnalytics() @@ -37,33 +31,7 @@ const ThresholdSettings = (): React.ReactElement => { {threshold} out of {owners?.length || 0} owners - {/* {owners && owners.length > 1 && granted && ( - - - - )} */} - {/* - - */} ) } diff --git a/src/routes/safe/components/Settings/UpdateSafeModal/index.tsx b/src/routes/safe/components/Settings/UpdateSafeModal/index.tsx deleted file mode 100644 index 8f974486c8..0000000000 --- a/src/routes/safe/components/Settings/UpdateSafeModal/index.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { Operation } from '@gnosis.pm/safe-react-gateway-sdk' -import { useEffect, useState } from 'react' -import { useDispatch } from 'react-redux' - -import { useStyles } from './style' - -import { LATEST_SAFE_VERSION } from 'src/utils/constants' -import Link from 'src/components/layout/Link' -import Block from 'src/components/layout/Block' -import Paragraph from 'src/components/layout/Paragraph' -import Row from 'src/components/layout/Row' -import { getUpgradeSafeTransactionHash } from 'src/logic/safe/utils/upgradeSafe' -import { createTransaction } from 'src/logic/safe/store/actions/createTransaction' -import { Modal } from 'src/components/Modal' -import { ButtonStatus } from 'src/components/Modal/type' -import { ReviewInfoText } from 'src/components/ReviewInfoText' -import { EstimationStatus, useEstimateTransactionGas } from 'src/logic/hooks/useEstimateTransactionGas' -import { useEstimationStatus } from 'src/logic/hooks/useEstimationStatus' -import { getMultisendContractAddress } from 'src/logic/contracts/safeContracts' -import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { TxParametersDetail } from 'src/utils/transactionHelpers/TxParametersDetail' -import { EditableTxParameters } from 'src/utils/transactionHelpers/EditableTxParameters' -import { TxParameters } from 'src/routes/safe/container/hooks/useTransactionParameters' -import { ModalHeader } from 'src/routes/safe/components/Balances/SendModal/screens/ModalHeader' - -type Props = { - onClose: () => void - safeAddress: string - safeCurrentVersion: string -} - -export const UpdateSafeModal = ({ onClose, safeAddress, safeCurrentVersion }: Props): React.ReactElement => { - const classes = useStyles() - const dispatch = useDispatch() - const [multiSendCallData, setMultiSendCallData] = useState(EMPTY_DATA) - - const { - gasCostFormatted, - txEstimationExecutionStatus, - isExecution, - isCreation, - isOffChainSignature, - gasPriceFormatted, - gasLimit, - gasEstimation, - } = useEstimateTransactionGas({ - txRecipient: getMultisendContractAddress(), - txData: multiSendCallData, - txAmount: '0', - operation: Operation.DELEGATE, - }) - - const [buttonStatus] = useEstimationStatus(txEstimationExecutionStatus) - - useEffect(() => { - const encodeMultiSendCallData = getUpgradeSafeTransactionHash(safeAddress, safeCurrentVersion) - setMultiSendCallData(encodeMultiSendCallData) - }, [safeAddress, safeCurrentVersion]) - - const handleSubmit = (txParameters: TxParameters) => { - // Call the update safe method - dispatch( - createTransaction({ - safeAddress, - to: getMultisendContractAddress(), - valueInWei: '0', - txData: multiSendCallData, - txNonce: txParameters.safeNonce, - safeTxGas: txParameters.safeTxGas, - ethParameters: txParameters, - notifiedTransaction: 'STANDARD_TX', - operation: Operation.DELEGATE, - }), - ) - onClose() - } - - let confirmButtonText = 'Update Safe' - if (ButtonStatus.LOADING === buttonStatus) { - confirmButtonText = txEstimationExecutionStatus === EstimationStatus.LOADING ? 'Estimating' : 'Updating' - } - - return ( - - {(txParameters, toggleEditMode) => ( - <> - - - - - Update now to take advantage of new features and the highest security standards available. - - - To check details about updates added by this smart contract version please visit{' '} - - latest Aura Safe contracts changelog - - - - You will need to confirm this update just like any other transaction. This means other owners will have - to confirm the update in case more than one confirmation is required for this Safe. - - - {/* A warning for 1.x.x -> 1.3.0 upgrades */} - - Warning: this upgrade will invalidate all unexecuted transactions. This means you will be unable - to access or execute them after the upgrade. Please make sure to execute any remaining transactions - before upgrading. - - - {/* Tx Parameters */} - - - {txEstimationExecutionStatus === EstimationStatus.LOADING ? null : ( - - )} - {/* Footer */} - - handleSubmit(txParameters), - status: buttonStatus, - text: confirmButtonText, - }} - /> - - - )} - - ) -} diff --git a/src/routes/safe/components/Settings/UpdateSafeModal/style.ts b/src/routes/safe/components/Settings/UpdateSafeModal/style.ts deleted file mode 100644 index 129bb159e5..0000000000 --- a/src/routes/safe/components/Settings/UpdateSafeModal/style.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { lg, md } from 'src/theme/variables' -import { createStyles, makeStyles } from '@material-ui/core' - -export const useStyles = makeStyles( - createStyles({ - modalContent: { - padding: `${md} ${lg}`, - }, - }), -) diff --git a/src/routes/safe/components/Settings/assets/icons/bin.svg b/src/routes/safe/components/Settings/assets/icons/bin.svg deleted file mode 100644 index 5f8aa26c95..0000000000 --- a/src/routes/safe/components/Settings/assets/icons/bin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/routes/safe/components/Settings/assets/icons/disabled-bin.svg b/src/routes/safe/components/Settings/assets/icons/disabled-bin.svg deleted file mode 100644 index e79a478e82..0000000000 --- a/src/routes/safe/components/Settings/assets/icons/disabled-bin.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/routes/safe/components/Settings/index.tsx b/src/routes/safe/components/Settings/index.tsx index 794955636c..33df0f437d 100644 --- a/src/routes/safe/components/Settings/index.tsx +++ b/src/routes/safe/components/Settings/index.tsx @@ -15,13 +15,10 @@ import { generatePrefixedAddressRoutes, SAFE_SUBSECTION_ROUTE } from 'src/routes import { grantedSelector } from 'src/utils/safeUtils/selector' import { styles } from './style' -// const Advanced = lazy(() => import('./Advanced')) -// const SpendingLimitSettings = lazy(() => import('./SpendingLimit')) const ManageOwners = lazy(() => import('./ManageOwners')) const RemoveSafeModal = lazy(() => import('./RemoveSafeModal')) const SafeDetails = lazy(() => import('./SafeDetails')) const ThresholdSettings = lazy(() => import('./ThresholdSettings')) -// const Appearance = lazy(() => import('./Appearance')) export const OWNERS_SETTINGS_TAB_TEST_ID = 'owner-settings-tab' @@ -110,18 +107,6 @@ const Settings = (): React.ReactElement => { - {/* - } /> - } /> - } - /> - } /> - } /> - } /> - */} diff --git a/src/routes/safe/index.tsx b/src/routes/safe/index.tsx index 5daae36ebc..e353c61efc 100644 --- a/src/routes/safe/index.tsx +++ b/src/routes/safe/index.tsx @@ -98,16 +98,6 @@ const Container = (): React.ReactElement => { component: hasLoadFailed ? : , exact: true, }, - { - path: SAFE_ROUTES.APPS, - render: ({ history }) => { - if (!featuresEnabled.includes(FEATURES.SAFE_APPS)) { - history.push(generateSafeRoute(SAFE_ROUTES.ASSETS_BALANCES, extractPrefixedSafeAddress())) - } - return hasLoadFailed ? : - }, - exact: true, - }, { path: SAFE_ROUTES.SETTINGS, component: hasLoadFailed ? : , @@ -144,7 +134,7 @@ const Container = (): React.ReactElement => { key={index} exact={route.exact} path={route.path} - render={route.render || (() => wrapInSuspense(route.component, null))} + render={() => wrapInSuspense(route.component, null)} /> ))} diff --git a/src/utils/signer.ts b/src/utils/signer.ts index 0077b894dd..e55f01957c 100644 --- a/src/utils/signer.ts +++ b/src/utils/signer.ts @@ -42,8 +42,6 @@ import { confirmSafeTransaction, createSafeTransaction, fetchAccountInfo, - getAccountInfo, - getAccountInfoByLcd } from 'src/services' import { MESSAGES_CODE } from 'src/services/constant/message' import { ICreateSafeTransaction } from 'src/types/transaction' diff --git a/yarn.lock b/yarn.lock index 20bb6bae98..d667b6f937 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,11 +7,6 @@ resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== -"@apocentre/alias-sampling@^0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@apocentre/alias-sampling/-/alias-sampling-0.5.3.tgz#897ff181b48ad7b2bcb4ecf29400214888244f08" - integrity sha512-7UDWIIF9hIeJqfKXkNIzkVandlwLf1FWTSdrb9iXvOP8oF544JRXQjCbiTmCv2c9n44n/FIWtehhBfNuAx2CZA== - "@aura/safe-react-components@https://github.com/aura-nw/safe-react-components.git": version "1.1.5" resolved "https://github.com/aura-nw/safe-react-components.git#7f91dbf42bb274e608e3e2fc20ca04eacf68e39b" @@ -1568,18 +1563,6 @@ resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-runtime@^7.5.5": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" - integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.5" - babel-plugin-polyfill-regenerator "^0.2.2" - semver "^6.3.0" - "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" @@ -2112,11 +2095,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chaitanyapotti/random-id@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@chaitanyapotti/random-id/-/random-id-1.0.3.tgz#f52f647cfe9f79fc7723ea2b01b0ad3889204002" - integrity sha512-xiVWA2vTL3jQeuZ+yebXAtwIeEbh/13RAFxvRq0YxeUc02RBOGyC9eyDKXjwlN0uxPtnEwWxsELkSwnaH5kxjg== - "@changesets/apply-release-plan@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-5.0.1.tgz#ed3e30550f787ef1b72f0a51e29a54d244123109" @@ -2761,47 +2739,6 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== -"@cvbb/bc-bech32@^1.1.15": - version "1.1.15" - resolved "https://registry.yarnpkg.com/@cvbb/bc-bech32/-/bc-bech32-1.1.15.tgz#f337e1046ee8ee9256b11ab25efaf4c1311bd04a" - integrity sha512-e80x5VsfUCpXYiheLm/c/lOEegr7ZSd5nq3HlJEcfgljXW5LosH/Kgf21he9Yyr2cBke3NrZM7DuOxvbMpPJHg== - -"@cvbb/bc-ur@^0.2.14": - version "0.2.15" - resolved "https://registry.yarnpkg.com/@cvbb/bc-ur/-/bc-ur-0.2.15.tgz#fc2f057b740c86c25b16d60f0ca7f97afd228ba7" - integrity sha512-jukQNKCzv1zxUsESeCbVV2Mkxmgz03yVmtgjPpqJ0D1HhNUz8pBt7tmLVOvAO1eeK4Q0083maebxv3r7p2uadA== - dependencies: - "@cvbb/bc-bech32" "^1.1.15" - "@types/sha.js" "^2.4.0" - sha.js "^2.4.11" - -"@cvbb/eth-keyring@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@cvbb/eth-keyring/-/eth-keyring-1.1.1.tgz#e681810e7f74d8682f6ee9b8f3844d5bbc9ef02f" - integrity sha512-HhSiHY3chN4nx1tajLD5v0obdr5GdIVGdLGCEOP8rG0f0Tu6bOJBqJE/idDii8C7mtxEijquyfyuPHHNfa8xKg== - dependencies: - "@cvbb/sdk" "^1.1.1" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^7.0.8" - hdkey "^2.0.1" - -"@cvbb/sdk@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@cvbb/sdk/-/sdk-1.1.1.tgz#a8343feff0a8e5781a60095c01895c86c1c58d5e" - integrity sha512-aEx914et/V/CXREVZiMrrS4VprCNFPsabTNZTzqNJOrMsOpABk0gwJHi55D+FaAsqIDK7PTLzkPjR59Iorol6Q== - dependencies: - "@cvbb/bc-ur" "^0.2.14" - "@types/qrcode.react" "^1.0.1" - "@types/react-dom" "^17.0.1" - "@types/react-modal" "^3.12.0" - "@types/react-qr-reader" "^2.1.3" - qrcode.react "^1.0.1" - react "^17.0.1" - react-dom "^17.0.1" - react-modal "^3.12.1" - react-qr-reader "^2.2.1" - rxjs "^6.6.3" - "@develar/schema-utils@~2.6.5": version "2.6.5" resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" @@ -2873,7 +2810,7 @@ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== -"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.2", "@emotion/is-prop-valid@^0.8.6", "@emotion/is-prop-valid@^0.8.8": +"@emotion/is-prop-valid@0.8.8", "@emotion/is-prop-valid@^0.8.6", "@emotion/is-prop-valid@^0.8.8": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== @@ -2954,51 +2891,6 @@ ripemd160 "^2.0.2" sha3 "^2.1.3" -"@ensdomains/address-encoder@^0.1.7": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" - integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== - dependencies: - bech32 "^1.1.3" - blakejs "^1.1.0" - bn.js "^4.11.8" - bs58 "^4.0.1" - crypto-addr-codec "^0.1.7" - nano-base32 "^1.0.1" - ripemd160 "^2.0.2" - -"@ensdomains/ens@0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.3.tgz#f4a6b55146fe526c9a50e13f373bf90d36ca94dc" - integrity sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA== - dependencies: - bluebird "^3.5.2" - eth-ens-namehash "^2.0.8" - ethereumjs-testrpc "^6.0.3" - ganache-cli "^6.1.0" - solc "^0.4.20" - testrpc "0.0.1" - web3-utils "^1.0.0-beta.31" - -"@ensdomains/ensjs@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.0.1.tgz#c27438f9ca074825ddb08430988c7decf2062a91" - integrity sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg== - dependencies: - "@babel/runtime" "^7.4.4" - "@ensdomains/address-encoder" "^0.1.7" - "@ensdomains/ens" "0.4.3" - "@ensdomains/resolver" "0.2.4" - content-hash "^2.5.2" - eth-ens-namehash "^2.0.8" - ethers "^5.0.13" - js-sha3 "^0.8.0" - -"@ensdomains/resolver@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" - integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -3014,7 +2906,7 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethereumjs/common@^2.0.0", "@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0": +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== @@ -3022,15 +2914,7 @@ crc-32 "^1.2.0" ethereumjs-util "^7.1.1" -"@ethereumjs/tx@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.0.0.tgz#8dfd91ed6e91e63996e37b3ddc340821ebd48c81" - integrity sha512-H9tfy6qgYxPXvt1TSObfVmVjlF43OoQqoPQ3PJsG2JiuqaMHj5ettV1pGFEC3FamENDBkl6vD6niQEvIlXv/VQ== - dependencies: - "@ethereumjs/common" "^2.0.0" - ethereumjs-util "^7.0.7" - -"@ethereumjs/tx@^3.0.0", "@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0": +"@ethereumjs/tx@^3.2.1": version "3.3.2" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== @@ -3398,24 +3282,11 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== -"@gnosis.pm/safe-apps-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.5.0.tgz#e0121553ef22c1458eb95cf0afed14e8c2570ae3" - integrity sha512-c4OuKV+cIW2aDmv0DZfLOelmyNNZz5Dr3OG5TvnCfmYhZtHyOd1x6bd2xnROCuiZU+QAUGJsm65mBe6iy8NAVQ== - dependencies: - "@gnosis.pm/safe-apps-sdk" "3.0.0" - events "^3.3.0" - "@gnosis.pm/safe-apps-sdk-v1@npm:@gnosis.pm/safe-apps-sdk@0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-0.4.2.tgz#ae87b2164931c006cb0efdede3d82ff210df1648" integrity sha512-BwA2dyCebPMdi4JhhTkp6EjkhEM6vAIviKdhqHiHnSmL+sDfxtP1jdOuE8ME2/4+5TiLSS8k8qscYjLSlf1LLw== -"@gnosis.pm/safe-apps-sdk@3.0.0", "@gnosis.pm/safe-apps-sdk@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-3.0.0.tgz#0f90185c3693f2683322d275e796e61ff99ce87d" - integrity sha512-dLCSlniYnxEqCglx4XdhByvi7KKuSYRWJKm1lVXAc4oJqwwVkoCwp0bFIejLZ/dnf7cQSBUUVsTGWhvSda511w== - "@gnosis.pm/safe-apps-sdk@6.1.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-6.1.0.tgz#b1b07504ed43d034e0b94c7fe274e908d62988a8" @@ -3801,14 +3672,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@keepkey/device-protocol@^7.2.4": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@keepkey/device-protocol/-/device-protocol-7.3.0.tgz#4b35df4dee91921fedb9b6d8e55f77a27f439572" - integrity sha512-jY45XarbeWQoPkbDdMwAj/b9kUyRb7jjzlQvJOUo9b9rYJKZ/XhioEDKgOv7tnKwR6nmbPPXf/9lUm7o2A64sQ== - dependencies: - google-protobuf "^3.7.0-rc.2" - pbjs "^0.0.5" - "@keplr-wallet/types@^0.9.10": version "0.9.10" resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.9.10.tgz#3b7f8bdb96edffd73bcd5b65f6fe0aef1c9d1f98" @@ -3820,82 +3683,7 @@ long "^4.0.0" secretjs "^0.17.0" -"@keystonehq/base-eth-keyring@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@keystonehq/base-eth-keyring/-/base-eth-keyring-0.1.0.tgz#bebcf41763601fcffccc53a8de0e3715f8f03ff5" - integrity sha512-iJ5FtzWiMaEMBPucDz+qDNvCS/95kfmyojH/rt8u/ajVWYwHkwFypgVqcbsKoRjk9oNxdC/bQGxSSlVPXq0GXQ== - dependencies: - "@ethereumjs/tx" "3.0.0" - "@keystonehq/bc-ur-registry-eth" "^0.6.14" - ethereumjs-util "^7.0.8" - hdkey "^2.0.1" - uuid "^8.3.2" - -"@keystonehq/bc-ur-registry-eth@^0.6.14": - version "0.6.14" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry-eth/-/bc-ur-registry-eth-0.6.14.tgz#4b8c34d653278524eb574a2879910072ee621ae0" - integrity sha512-Zr0VAUJuzz5zfH2263AucdWPUYuclpd93Pmi/VzbML72sQLv8l83kQWmQpI+7639uV5dHcOj6JnD8FhCPYPRFQ== - dependencies: - "@keystonehq/bc-ur-registry" "^0.4.4" - ethereumjs-util "^7.0.8" - hdkey "^2.0.1" - uuid "^8.3.2" - -"@keystonehq/bc-ur-registry@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@keystonehq/bc-ur-registry/-/bc-ur-registry-0.4.4.tgz#3073fdd4b33cdcbd04526a313a7685891a4b4583" - integrity sha512-SBdKdAZfp3y14GTGrKjfJJHf4iXObjcm4/qKUZ92lj8HVR8mxHHGmHksjE328bJPTAsJPloLix4rTnWg+qgS2w== - dependencies: - "@ngraveio/bc-ur" "^1.1.5" - base58check "^2.0.0" - tslib "^2.3.0" - -"@keystonehq/eth-keyring@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@keystonehq/eth-keyring/-/eth-keyring-0.9.0.tgz#cf364d62f8f764fe14a98410cabfe8ddf20bdc23" - integrity sha512-ceNi5LqhOg9vk/V90o79/hPMWmkp5SZor7Xk/DjrNUdNXd7v/nym8PTLNLUiToF+se/clazsa04zDEOtOg5t0w== - dependencies: - "@ethereumjs/tx" "3.0.0" - "@keystonehq/base-eth-keyring" "^0.1.0" - "@keystonehq/bc-ur-registry-eth" "^0.6.14" - "@keystonehq/sdk" "^0.7.14" - "@metamask/obs-store" "^7.0.0" - bs58check "^2.1.2" - ethereumjs-util "^7.0.8" - hdkey "^2.0.1" - uuid "^8.3.2" - -"@keystonehq/sdk@^0.7.14": - version "0.7.14" - resolved "https://registry.yarnpkg.com/@keystonehq/sdk/-/sdk-0.7.14.tgz#db0de74c5be1e46708a9b4ed1f282a40d019a95f" - integrity sha512-m6XtrA6cBQdek3T8zueMAOYRJ9ZuS4J5Qxi/qPDF2M1zaZ8Xgy2yNPbYUlBDoGFa9poh/hFoMQJSU6Gw9RGk7g== - dependencies: - "@ngraveio/bc-ur" "^1.0.0" - qrcode.react "^1.0.1" - react "16.13.1" - react-dom "16.13.1" - react-modal "^3.12.1" - react-qr-reader "^2.2.1" - rxjs "^6.6.3" - -"@ledgerhq/cryptoassets@^6.8.1": - version "6.12.2" - resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-6.12.2.tgz#e0573358ae498aa639c9eea927f8e4873bcb2916" - integrity sha512-Q8ZYe74lWoCqagB1QXt8jBFDqhbKc1IP0/ZYtil2W0PNM+Kv563//LnupmcfkR0uN0czvZrDS/runSx0ASO+JQ== - dependencies: - invariant "2" - -"@ledgerhq/devices@^5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.51.1.tgz#d741a4a5d8f17c2f9d282fd27147e6fe1999edb7" - integrity sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA== - dependencies: - "@ledgerhq/errors" "^5.50.0" - "@ledgerhq/logs" "^5.50.0" - rxjs "6" - semver "^7.3.5" - -"@ledgerhq/devices@^6.20.0", "@ledgerhq/devices@^6.7.0": +"@ledgerhq/devices@^6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-6.20.0.tgz#4280aaa5dc16f821ecab9ee8ae882299411ba5b7" integrity sha512-WehM7HGdb+nSUzyUlz1t2qJ8Tg4I+rQkOJJsx0/Dpjkx6/+1hHcX6My/apPuwh39qahqwYhjszq0H1YzGDS0Yg== @@ -3905,29 +3693,11 @@ rxjs "6" semver "^7.3.5" -"@ledgerhq/errors@^5.34.0", "@ledgerhq/errors@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.50.0.tgz#e3a6834cb8c19346efca214c1af84ed28e69dad9" - integrity sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow== - -"@ledgerhq/errors@^6.10.0", "@ledgerhq/errors@^6.2.0": +"@ledgerhq/errors@^6.10.0": version "6.10.0" resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-6.10.0.tgz#dda9127b65f653fbb2f74a55e8f0e550d69de6e4" integrity sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg== -"@ledgerhq/hw-app-eth@6.8.1": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-6.8.1.tgz#1bd832fa04c1f933ab115b39812e1b744cc9dafa" - integrity sha512-fmiPeFpOWAbYlggg5H6qTrQu+KwLNFR0Uijsd4w8u0iWEsirO7BPkye+tevZNVzOSuXbFKNDsWIPJHBBZW7TwA== - dependencies: - "@ledgerhq/cryptoassets" "^6.8.1" - "@ledgerhq/errors" "^6.2.0" - "@ledgerhq/hw-transport" "^6.7.0" - "@ledgerhq/logs" "^6.2.0" - axios "^0.21.4" - bignumber.js "^9.0.1" - ethers "^5.4.7" - "@ledgerhq/hw-transport-node-hid-noevents@^6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.20.0.tgz#9baa5023a7191de41ca96ef7ab345225ab84d05d" @@ -3953,36 +3723,7 @@ node-hid "2.1.1" usb-detection "^4.13.0" -"@ledgerhq/hw-transport-u2f@^5.21.0": - version "5.34.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.34.0.tgz#53466e4f07e177ec29b1ea061b6c56a57439a0cd" - integrity sha512-EM6LcbdD6Xo/msedbAWalBZlv89XAZrAZwL5zN9eKlUcWPjjG8c9+t5NedR/jmIaGuzIUVseUCIRxczqd5byOw== - dependencies: - "@ledgerhq/errors" "^5.34.0" - "@ledgerhq/hw-transport" "^5.34.0" - "@ledgerhq/logs" "^5.30.0" - u2f-api "0.2.7" - -"@ledgerhq/hw-transport-webusb@6.7.0": - version "6.7.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.7.0.tgz#2d7fab52280c703ac66b0970ca636e8ba358d0af" - integrity sha512-IyUOAkXd2g5YG/DaRUer/7hZQnecxJDZK2MKFwpafpUbyJQNdkW09CcodinB3e/Y+pjk6O0XuGzUKLgk3dc2vQ== - dependencies: - "@ledgerhq/devices" "^6.7.0" - "@ledgerhq/errors" "^6.2.0" - "@ledgerhq/hw-transport" "^6.7.0" - "@ledgerhq/logs" "^6.2.0" - -"@ledgerhq/hw-transport@^5.34.0": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz#8dd14a8e58cbee4df0c29eaeef983a79f5f22578" - integrity sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw== - dependencies: - "@ledgerhq/devices" "^5.51.1" - "@ledgerhq/errors" "^5.50.0" - events "^3.3.0" - -"@ledgerhq/hw-transport@^6.20.0", "@ledgerhq/hw-transport@^6.7.0": +"@ledgerhq/hw-transport@^6.20.0": version "6.20.0" resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-6.20.0.tgz#16e84c99fca2d10f637c0e36c87088322479a488" integrity sha512-5KS0Y6CbWRDOv3FgNIfk53ViQOIZqMxAw0RuOexreW5GMwuYfK7ddGi4142qcu7YrxkGo7cNe42wBbx1hdXl0Q== @@ -3991,12 +3732,7 @@ "@ledgerhq/errors" "^6.10.0" events "^3.3.0" -"@ledgerhq/logs@^5.30.0", "@ledgerhq/logs@^5.50.0": - version "5.50.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.50.0.tgz#29c6419e8379d496ab6d0426eadf3c4d100cd186" - integrity sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA== - -"@ledgerhq/logs@^6.10.0", "@ledgerhq/logs@^6.2.0": +"@ledgerhq/logs@^6.10.0": version "6.10.0" resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-6.10.0.tgz#c012c1ecc1a0e53d50e6af381618dca5268461c1" integrity sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw== @@ -4156,19 +3892,6 @@ prop-types "^15.7.2" react-is "^16.8.0 || ^17.0.0" -"@metamask/obs-store@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@metamask/obs-store/-/obs-store-7.0.0.tgz#6cae5f28306bb3e83a381bc9ae22682316095bd3" - integrity sha512-Tr61Uu9CGXkCg5CZwOYRMQERd+y6fbtrtLd/PzDTPHO5UJpmSbU+7MPcQK7d1DwZCOCeCIvhmZSUCvYliC8uGw== - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - through2 "^2.0.3" - -"@metamask/safe-event-emitter@2.0.0", "@metamask/safe-event-emitter@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" - integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -4177,19 +3900,6 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@ngraveio/bc-ur@^1.0.0", "@ngraveio/bc-ur@^1.1.5": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@ngraveio/bc-ur/-/bc-ur-1.1.6.tgz#8f8c75fff22f6a5e4dfbc5a6b540d7fe8f42cd39" - integrity sha512-G+2XgjXde2IOcEQeCwR250aS43/Swi7gw0FuETgJy2c3HqF8f88SXDMsIGgJlZ8jXd0GeHR4aX0MfjXf523UZg== - dependencies: - "@apocentre/alias-sampling" "^0.5.3" - assert "^2.0.0" - bignumber.js "^9.0.1" - cbor-sync "^1.0.4" - crc "^3.8.0" - jsbi "^3.1.5" - sha.js "^2.4.11" - "@noble/hashes@^1", "@noble/hashes@^1.0.0": version "1.1.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" @@ -4254,16 +3964,6 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@portis/web3@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@portis/web3/-/web3-4.0.6.tgz#eb2662faf7cc9c1a898e84905d589858fe9afd7c" - integrity sha512-UXB+tmMcPYP7jcaSApJGMecemNO5Xe04JPuvz4RoSbPscFW3DqeDrM/4TGuggZUdkxeeDDagHGdHv2gMH6uWEQ== - dependencies: - ethereumjs-util "5.2.0" - penpal "3.0.7" - pocket-js-core "0.0.3" - web3-provider-engine "16.0.1" - "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -4468,42 +4168,6 @@ "@sentry/types" "6.13.3" tslib "^1.9.3" -"@shapeshiftoss/hdwallet-core@1.17.0", "@shapeshiftoss/hdwallet-core@^1.15.2": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-core/-/hdwallet-core-1.17.0.tgz#92f89db523169af74bf149c9e0b9dd5826d27cd9" - integrity sha512-FV+RPjOQeSI4rDvu2UsEWKo3LDlyKRXgvrgEiemfF9J8rhRDbK939MvPARD7RVXWDFfaDJ0SODpcNQe4iOxZNA== - dependencies: - eventemitter2 "^5.0.1" - lodash "^4.17.21" - rxjs "^6.4.0" - -"@shapeshiftoss/hdwallet-keepkey-webusb@^1.15.2": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-keepkey-webusb/-/hdwallet-keepkey-webusb-1.17.0.tgz#14b4b45b84999c73d5c567119b03cfd79f254e6c" - integrity sha512-eBUeylQNubPrN01AfwQsyVVsGN4HqcgAaZ5n0KbIROzJzRAey35OH9tZ3NHpwkV6tACUysqCXeKGuyIAFSWHcA== - dependencies: - "@shapeshiftoss/hdwallet-core" "1.17.0" - "@shapeshiftoss/hdwallet-keepkey" "1.17.0" - -"@shapeshiftoss/hdwallet-keepkey@1.17.0", "@shapeshiftoss/hdwallet-keepkey@^1.15.2": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-keepkey/-/hdwallet-keepkey-1.17.0.tgz#4325125a951aff75a0221a1bc7cf426a81babf34" - integrity sha512-z6GIzU2gp3ujg43BvqLvs8W4qURMuOsmjGDpnlDUBc97O8P4x1bDibQqgq68SK8NuD58GoLznRc6GPIc2ec7OQ== - dependencies: - "@ethereumjs/common" "^2.4.0" - "@ethereumjs/tx" "^3.3.0" - "@keepkey/device-protocol" "^7.2.4" - "@shapeshiftoss/hdwallet-core" "1.17.0" - bignumber.js "^9.0.1" - bnb-javascript-sdk-nobroadcast "^2.16.14" - crypto-js "^4.0.0" - eip55 "^2.1.0" - google-protobuf "^3.15.8" - icepick "^2.4.0" - lodash "^4.17.21" - semver "^6.3.0" - tiny-secp256k1 "^1.1.6" - "@sideway/address@^4.1.0": version "4.1.2" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" @@ -5225,90 +4889,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@toruslabs/eccrypto@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.7.tgz#962954d6416f56ca2ba9bb9948cd08bd3b8cd0c4" - integrity sha512-zU4GnrH21yDY179fgp5Ovi4YjLdHy3WXM3QHCHAomYNxa03eAw2lxNR2bZ7kb698yk40s4WMrbnauukgabXH4Q== - dependencies: - acorn "^8.4.1" - elliptic "^6.5.4" - es6-promise "^4.2.8" - nan "^2.14.2" - optionalDependencies: - secp256k1 "^3.8.0" - -"@toruslabs/fetch-node-details@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@toruslabs/fetch-node-details/-/fetch-node-details-3.0.2.tgz#8c91729e397580e3b45566e4c86e8dad9cce23c2" - integrity sha512-pDMK+eQaGsog+k+JoLzfan/xE1h50BJt/fQV9hpFBYrLE//OxHBX23mxY6t64If5UVOSOVAhDObp/sz62MxNug== - dependencies: - web3-eth-contract "^1.6.0" - web3-utils "^1.6.0" - -"@toruslabs/http-helpers@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-1.4.0.tgz#6d2d4129d1126876b0616b7dffec3f4b339739b5" - integrity sha512-lPRhTWeChQunds2CGV70xvaoFMMebZAqZLpTYZjUJfziumQjT12w9HWLIzlRfGFVKoYUsUiZLpGHl0JEwHCcqg== - dependencies: - deepmerge "^4.2.2" - -"@toruslabs/openlogin-jrpc@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-1.0.0.tgz#1e8001bd7008e152f7635474972c097f268fc3a8" - integrity sha512-ONQKHY/j4WHqO4XEILtfMeNSJSLfwTv4ikkO1D6JolWeVScH+6CtgO+rpalSf3oWJy/PECITiI63EGnHIH7yKA== - dependencies: - "@toruslabs/openlogin-utils" "^1.0.0" - end-of-stream "^1.4.4" - events "^3.3.0" - fast-safe-stringify "^2.1.1" - once "^1.4.0" - pump "^3.0.0" - readable-stream "^3.6.0" - -"@toruslabs/openlogin-utils@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@toruslabs/openlogin-utils/-/openlogin-utils-1.0.0.tgz#4a16b37d3f18c3ef1f1ac8a0f7ac374fd6cc6a78" - integrity sha512-ZJO0KqzG1s71ouuop4TIka4JcQ/Uaat0iayydgQy5xFqCU4tgHLDB6UpHddZJnQDcqDYqWdmdvEuSnFe6qkNZA== - dependencies: - base64url "^3.0.1" - keccak "^3.0.2" - randombytes "^2.1.0" - -"@toruslabs/torus-embed@^1.10.11": - version "1.13.6" - resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.13.6.tgz#b9e1ef33aa4ea43b29adc98ea20f9e1b3d1bcbe4" - integrity sha512-bLDosd4BuAGRZOeOxTM2palx1EzLjEjx2Uz6Ifb4/VOWr4j+eKu2GOxTiOadbCbsFlvFCwnfHb14xjRiqoTAnA== - dependencies: - "@chaitanyapotti/random-id" "^1.0.3" - "@metamask/obs-store" "^7.0.0" - "@toruslabs/fetch-node-details" "^3.0.2" - "@toruslabs/http-helpers" "^1.4.0" - "@toruslabs/openlogin-jrpc" "^1.0.0" - "@toruslabs/torus.js" "^3.0.0" - create-hash "^1.2.0" - deepmerge "^4.2.2" - end-of-stream "^1.4.4" - eth-rpc-errors "^4.0.3" - fast-deep-equal "^3.1.3" - is-stream "^3.0.0" - loglevel "^1.7.1" - once "^1.4.0" - pump "^3.0.0" - -"@toruslabs/torus.js@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-3.1.0.tgz#4ab3a98818776be05e36ce41a261983b851c7f9d" - integrity sha512-atP5UDjTLIYWSRw0dVdRvtBy5B2mY6eooZJGFqSWI1VQs7SknwGNCB/WhLREg7S6BictKzchgnG7Y+2wwXFtQA== - dependencies: - "@toruslabs/eccrypto" "^1.1.7" - "@toruslabs/http-helpers" "^1.4.0" - bn.js "^5.2.0" - elliptic "^6.5.4" - json-stable-stringify "^1.0.1" - loglevel "^1.7.1" - memory-cache "^0.2.0" - web3-utils "^1.6.0" - "@typechain/web3-v1@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@typechain/web3-v1/-/web3-v1-3.1.0.tgz#3124cd25589dad93c5115acb87c65ea708d89ab3" @@ -5559,11 +5139,6 @@ dependencies: "@types/react" "*" -"@types/marked@^4.0.3": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.0.7.tgz#400a76809fd08c2bbd9e25f3be06ea38c8e0a1d3" - integrity sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw== - "@types/micromatch@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/micromatch/-/micromatch-4.0.2.tgz#ce29c8b166a73bf980a5727b1e4a4d099965151d" @@ -5604,11 +5179,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.4.tgz#90771124822d6663814f7c1c9b45a6654d8fd964" integrity sha512-TMgXmy0v2xWyuCSCJM6NCna2snndD8yvQF67J29ipdzMcsPa9u+o0tjF5+EQNdhcuZplYuouYqpc4zcd5I6amQ== -"@types/node@10.12.18": - version "10.12.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" - integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== - "@types/node@11.11.6": version "11.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" @@ -5691,13 +5261,6 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== -"@types/qrcode.react@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/qrcode.react/-/qrcode.react-1.0.2.tgz#f892432cc41b5dac52e3ca8873b717c8bfea6002" - integrity sha512-I9Oq5Cjlkgy3Tw7krCnCXLw2/zMhizkTere49OOcta23tkvH0xBTP0yInimTh0gstLRtb8Ki9NZVujE5UI6ffQ== - dependencies: - "@types/react" "*" - "@types/qs@*", "@types/qs@^6.9.0", "@types/qs@^6.9.5": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -5723,27 +5286,13 @@ "@types/react" "*" "@types/reactcss" "*" -"@types/react-dom@>=16.9.0", "@types/react-dom@^17.0.1", "@types/react-dom@^17.0.9": +"@types/react-dom@>=16.9.0", "@types/react-dom@^17.0.9": version "17.0.10" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.10.tgz#d6972ec018d23cf22b99597f1289343d99ea9d9d" integrity sha512-8oz3NAUId2z/zQdFI09IMhQPNgIbiP8Lslhv39DIDamr846/0spjZK0vnrMak0iB8EKb9QFTTIdg2Wj2zH5a3g== dependencies: "@types/react" "*" -"@types/react-modal@^3.12.0": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/react-modal/-/react-modal-3.13.1.tgz#5b9845c205fccc85d9a77966b6e16dc70a60825a" - integrity sha512-iY/gPvTDIy6Z+37l+ibmrY+GTV4KQTHcCyR5FIytm182RQS69G5ps4PH2FxtC7bAQ2QRHXMevsBgck7IQruHNg== - dependencies: - "@types/react" "*" - -"@types/react-qr-reader@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@types/react-qr-reader/-/react-qr-reader-2.1.4.tgz#a36f0b83b4402e26c4217d0e8af6b5e2887fc749" - integrity sha512-2Hq+UNfsO2TVqxbFlOE0gGhQr/+C4wdgNDaaLV8K93mK/Z7Vw2D3YbMlnJAaSzM45fUtYJs0vc48wV04+OEkiA== - dependencies: - "@types/react" "*" - "@types/react-redux@^7.1.16", "@types/react-redux@^7.1.18": version "7.1.20" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" @@ -5857,13 +5406,6 @@ "@types/mime" "^1" "@types/node" "*" -"@types/sha.js@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/sha.js/-/sha.js-2.4.0.tgz#bce682ef860b40f419d024fa08600c3b8d24bb01" - integrity sha512-amxKgPy6WJTKuw8mpUwjX2BSxuBtBmZfRwIUDIuPJKNwGN8CWDli8JTg5ONTWOtcTkHIstvT7oAhhYXqEjStHQ== - dependencies: - "@types/node" "*" - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -6142,176 +5684,6 @@ optionalDependencies: dotenv "^8.2.0" -"@walletconnect/browser-utils@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/browser-utils/-/browser-utils-1.6.6.tgz#a985b48c99c65a986a051d66a4910010a10a0c56" - integrity sha512-E29xSHU7Akd4jaPehWVGx7ct+SsUzZbxcGc0fz+Pw6/j4Gh5tlfYZ9XuVixuYI4WPdQ2CmOraj8RrVOu5vba4w== - dependencies: - "@walletconnect/safe-json" "1.0.0" - "@walletconnect/types" "^1.6.6" - "@walletconnect/window-getters" "1.0.0" - "@walletconnect/window-metadata" "1.0.0" - detect-browser "5.2.0" - -"@walletconnect/client@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.6.6.tgz#ec64575b245bfce25cc0d9150a3c2e919a8a2632" - integrity sha512-DDOrxagSmXCciIEr16hTf4gWZ7PG7GXribYTfOOsjtODLtPEODEEYj/AsmEALjh3ZBG4bN35Vj0F/ZA1D+90GQ== - dependencies: - "@walletconnect/core" "^1.6.6" - "@walletconnect/iso-crypto" "^1.6.6" - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - -"@walletconnect/core@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.6.6.tgz#0a35a9b0f91da8958bec27be801a510818f4e142" - integrity sha512-pSftIVPY6mYz2koZPBEYmeFeAjVf2MSnRHOM6+vx+iAsUEcfMZHkgeXX6GtM6Fjza+zSZu1qnmdgURVXpmKwtQ== - dependencies: - "@walletconnect/socket-transport" "^1.6.6" - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - -"@walletconnect/crypto@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.1.tgz#d4c1b1cd5dd1be88fe9a82dfc54cadbbb3f9d325" - integrity sha512-IgUReNrycIFxkGgq8YT9HsosCkhutakWD9Q411PR0aJfxpEa/VKJeaLRtoz6DvJpztWStwhIHnAbBoOVR72a6g== - dependencies: - "@walletconnect/encoding" "^1.0.0" - "@walletconnect/environment" "^1.0.0" - "@walletconnect/randombytes" "^1.0.1" - aes-js "^3.1.2" - hash.js "^1.1.7" - -"@walletconnect/encoding@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.0.tgz#e24190cb5e803526f9dfd7191fb0e4dc53c6d864" - integrity sha512-4nkJFnS0QF5JdieG/3VPD1/iEWkLSZ14EBInLZ00RWxmC6EMZrzAeHNAWIgm+xP3NK0lqz+7lEsmWGtcl5gYnQ== - dependencies: - is-typedarray "1.0.0" - typedarray-to-buffer "3.1.5" - -"@walletconnect/environment@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.0.tgz#c4545869fa9c389ec88c364e1a5f8178e8ab5034" - integrity sha512-4BwqyWy6KpSvkocSaV7WR3BlZfrxLbJSLkg+j7Gl6pTDE+U55lLhJvQaMuDVazXYxcjBsG09k7UlH7cGiUI5vQ== - -"@walletconnect/http-connection@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.6.6.tgz#d5030bf175f24e57901e5da3acff493a3e7df556" - integrity sha512-V0UEnvMQPYBpD+8LAbuxN+i0dWVVfZ8XtmJymsBh2KyHLgKyHSsT5RwSCst132JGDV4/JP4HrHCs5t8KqSfEPw== - dependencies: - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - eventemitter3 "4.0.7" - xhr2-cookies "1.1.0" - -"@walletconnect/iso-crypto@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.6.6.tgz#19848bdcd54e9945961bab8a996cbca8a00d7cf1" - integrity sha512-wRYgKvd8K3A9FVLn2c0cDh4+9OUHkqibKtwQJTJsz+ibPGgd+n5j1/FjnzDDRGb9T1+TtlwYF3ZswKyys3diVQ== - dependencies: - "@walletconnect/crypto" "^1.0.1" - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - -"@walletconnect/jsonrpc-types@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.0.tgz#fa75ad5e8f106a2e33287b1e6833e22ed0225055" - integrity sha512-11QXNq5H1PKZk7bP8SxgmCw3HRaDuPOVE+wObqEvmhc7OWYUZqfuaaMb+OXGRSOHL3sbC+XHfdeCxFTMXSFyng== - dependencies: - keyvaluestorage-interface "^1.0.0" - -"@walletconnect/jsonrpc-utils@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.0.tgz#1a2f668d606e8f0b6e7d8fdebae86001bd037a3f" - integrity sha512-qUHbKUK6sHeHn67qtHZoLoYk5hS6x1arTPjKDRkY93/6Fx+ZmNIpdm1owX3l6aYueyegJ7mz43FpvYHUqJ8xcw== - dependencies: - "@walletconnect/environment" "^1.0.0" - "@walletconnect/jsonrpc-types" "^1.0.0" - -"@walletconnect/mobile-registry@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.4.0.tgz#502cf8ab87330841d794819081e748ebdef7aee5" - integrity sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw== - -"@walletconnect/qrcode-modal@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.6.6.tgz#d95d790a4f0eaee4e8bb024b92ed111a0ee716bd" - integrity sha512-wZorjpOIm6OhXKNvyH1YtpxfCUVcnuJxS8YbUeKWckGjS3tDPqUTbXWPlzFdMpNBrpY3j0B2XjLgVVQ2aUDX0w== - dependencies: - "@walletconnect/browser-utils" "^1.6.6" - "@walletconnect/mobile-registry" "^1.4.0" - "@walletconnect/types" "^1.6.6" - copy-to-clipboard "^3.3.1" - preact "10.4.1" - qrcode "1.4.4" - -"@walletconnect/randombytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.1.tgz#87f0f02d9206704ce1c9e23f07d3b28898c48385" - integrity sha512-YJTyq69i0PtxVg7osEpKfvjTaWuAsR49QEcqGKZRKVQWMbGXBZ65fovemK/SRgtiFRv0V8PwsrlKSheqzfPNcg== - dependencies: - "@walletconnect/encoding" "^1.0.0" - "@walletconnect/environment" "^1.0.0" - randombytes "^2.1.0" - -"@walletconnect/safe-json@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.0.tgz#12eeb11d43795199c045fafde97e3c91646683b2" - integrity sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg== - -"@walletconnect/socket-transport@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.6.6.tgz#b80974fe3e2a2f93ba1f6b40df5a0ea492b94086" - integrity sha512-mugCEoeKTx75ogb5ROg/+LA3yGTsuRNcrYgrApceo7WNU9Z4dG8l6ycMPqrrFcODcrasq3NmXVWUYDv/CvrzSw== - dependencies: - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - ws "7.5.3" - -"@walletconnect/types@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.6.6.tgz#8d644e2a390e494e40424c60272e91b4820bf0d4" - integrity sha512-op77cxexOmQQN36XB1sYouNTlBRV0Rup/2NYK8A1ffdwXa3a6HLHHdhBM7I/I9BVmRXoZ4+XoOnPKGGrYtlS3g== - -"@walletconnect/utils@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.6.6.tgz#e8e49a5f2c35e4a5f9153b09ad076655f38d8c96" - integrity sha512-s2X/cVXiMDSEoWV6i7HPMbP1obXlzP7KLMrBo9OMabiJKnQEh6HSZ39WLswB2PHnl8Hp1Sr4BdRvhM5kCcYWRw== - dependencies: - "@walletconnect/browser-utils" "^1.6.6" - "@walletconnect/encoding" "^1.0.0" - "@walletconnect/jsonrpc-utils" "^1.0.0" - "@walletconnect/types" "^1.6.6" - bn.js "4.11.8" - js-sha3 "0.8.0" - query-string "6.13.5" - -"@walletconnect/web3-provider@^1.6.2": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.6.6.tgz#7be7b6d6230d6925f8728cdddc226ef24119e602" - integrity sha512-8z4r9JCE0lKuZmVCPSdYnX114ckQ+oMfr9D8osRBtdyhvN9elwITMloUJfACDRelcuet94yEbXuDobQeBDDkkw== - dependencies: - "@walletconnect/client" "^1.6.6" - "@walletconnect/http-connection" "^1.6.6" - "@walletconnect/qrcode-modal" "^1.6.6" - "@walletconnect/types" "^1.6.6" - "@walletconnect/utils" "^1.6.6" - web3-provider-engine "16.0.1" - -"@walletconnect/window-getters@1.0.0", "@walletconnect/window-getters@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.0.tgz#1053224f77e725dfd611c83931b5f6c98c32bfc8" - integrity sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA== - -"@walletconnect/window-metadata@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.0.tgz#93b1cc685e6b9b202f29c26be550fde97800c4e5" - integrity sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA== - dependencies: - "@walletconnect/window-getters" "^1.0.0" - "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -6489,28 +5861,6 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abi-decoder@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/abi-decoder/-/abi-decoder-2.4.0.tgz#99f72337c614d6ac45a28dbc83c08b44eba48ad5" - integrity sha512-TOLU2q1HgYOjs1GKGtVzaqrYkar6I2fT9a80rzx6/9EJ/5crb4nCGuro0grZayixem93T7omrajYmLiMkYDLDA== - dependencies: - web3-eth-abi "^1.2.1" - web3-utils "^1.2.1" - -abstract-leveldown@~2.6.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== - dependencies: - xtend "~4.0.0" - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -6527,13 +5877,6 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" - integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= - dependencies: - acorn "^4.0.3" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -6552,16 +5895,6 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= - -acorn@^5.0.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -6572,7 +5905,7 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1: +acorn@^8.2.4: version "8.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== @@ -6600,11 +5933,6 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= -aes-js@^3.1.1, aes-js@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" - integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== - agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -6673,15 +6001,6 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -6918,11 +6237,6 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -7104,16 +6418,6 @@ assert@^1.1.1: object-assign "^4.1.1" util "0.10.3" -assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -7141,13 +6445,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-eventemitter@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - async-exit-hook@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" @@ -7158,29 +6455,12 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-mutex@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" - integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== - dependencies: - tslib "^2.0.0" - async@0.9.x: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= -async@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== - -async@^1.4.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.2: +async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -7207,26 +6487,6 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -authereum@^0.1.12: - version "0.1.14" - resolved "https://registry.yarnpkg.com/authereum/-/authereum-0.1.14.tgz#5655e543b296d899136e350d09f9cfe4c12fbc38" - integrity sha512-o1lsXXGg+oYDAEutZ8Ak1Qn2Dnk+qSyQ2ZokyLHRSYGJj6HpEHaSlQA6W3VTHD5r68Q+W0JD/BN9hDSF2xyshQ== - dependencies: - async "3.2.0" - bn.js "5.1.2" - ethereum-private-key-to-address "0.0.3" - ethers "4.0.47" - eventemitter3 "4.0.0" - is-buffer "2.0.4" - penpal "4.1.1" - pify "4.0.1" - querystring "0.2.0" - store "2.0.12" - to-hex "0.0.11" - uuidv4 "6.0.6" - web3-provider-engine "15.0.4" - web3-utils "1.2.1" - autoprefixer@^9.6.1, autoprefixer@^9.7.2: version "9.8.8" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" @@ -7267,21 +6527,13 @@ axios@0.21.1: dependencies: follow-redirects "^1.10.0" -axios@0.21.4, axios@^0.21.0, axios@^0.21.1, axios@^0.21.2, axios@^0.21.4: +axios@0.21.4, axios@^0.21.0, axios@^0.21.1, axios@^0.21.2: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -axios@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" - integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== - dependencies: - follow-redirects "1.5.10" - is-buffer "^2.0.2" - axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -7767,23 +7019,11 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -backoff@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= - dependencies: - precond "0.2" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac" - integrity sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w= - base-x@^3.0.2, base-x@^3.0.8: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" @@ -7791,23 +7031,11 @@ base-x@^3.0.2, base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -base58check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base58check/-/base58check-2.0.0.tgz#8046652d14bc87f063bd16be94a39134d3b61173" - integrity sha1-gEZlLRS8h/BjvRa+lKORNNO2EXM= - dependencies: - bs58 "^3.0.0" - base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -7882,7 +7110,7 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@9.0.1, bignumber.js@^9.0.0, bignumber.js@^9.0.1: +bignumber.js@9.0.1, bignumber.js@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== @@ -7897,31 +7125,13 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bind-decorator@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/bind-decorator/-/bind-decorator-1.0.11.tgz#e41bc06a1f65dd9cec476c91c5daf3978488252f" - integrity sha1-5BvAah9l3ZzsR2yRxdrzl4SIJS8= - -bindings@^1.2.1, bindings@^1.3.0, bindings@^1.5.0: +bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bip32@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/bip32/-/bip32-2.0.6.tgz#6a81d9f98c4cd57d05150c60d8f9e75121635134" - integrity sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA== - dependencies: - "@types/node" "10.12.18" - bs58check "^2.1.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - tiny-secp256k1 "^1.1.3" - typeforce "^1.11.5" - wif "^2.0.6" - bip39@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.0.4.tgz#5b11fed966840b5e1b8539f0f54ab6392969b2a0" @@ -7937,22 +7147,10 @@ bip44-constants@^8.0.5: resolved "https://registry.yarnpkg.com/bip44-constants/-/bip44-constants-8.0.103.tgz#fc8c6718a2d8f38bf7fdb689732250e32333ba8b" integrity sha512-wuGsY9IKUS9GC5Sf/Acb5jLJZI3Z8qsMoQHWldnQyoVUlij4y8e5srh28Iqul1HwK+elPsAYGNYKtYhovjvNxA== -bip66@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" - integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= - dependencies: - safe-buffer "^5.0.1" - -bitwise@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bitwise/-/bitwise-2.1.0.tgz#1853fac76500c86da01e3819150a4edf92a7abdb" - integrity sha512-XKgAhMXCh4H/3oNwAHAsAO0iC89s9cOiumgYwSHjSobGWxYjv62YhkL9QEdvGP151xypCtMlAfKK79GEcd2eRQ== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" inherits "^2.0.4" @@ -7970,7 +7168,7 @@ bluebird-lst@^1.0.9: dependencies: bluebird "^3.5.5" -bluebird@^3.5.0, bluebird@^3.5.2, bluebird@^3.5.5: +bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -7980,16 +7178,6 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - -bn.js@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" - integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" @@ -8000,81 +7188,6 @@ bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -bnb-javascript-sdk-nobroadcast@^2.16.14: - version "2.16.15" - resolved "https://registry.yarnpkg.com/bnb-javascript-sdk-nobroadcast/-/bnb-javascript-sdk-nobroadcast-2.16.15.tgz#712723911081fbde48251d59e6074fac5dd24044" - integrity sha512-+vZOmPszzQcNVxx4ZpUJtGs0FEdzAQdbDvBZEHDwU9Epzh6I2xEe+Kehf0T2ombbtJRtzcwlEVYCdcvvv0SPIg== - dependencies: - axios "0.21.1" - bech32 "^1.1.3" - big.js "^5.2.2" - bip32 "^2.0.5" - bip39 "^3.0.2" - bn.js "^4.11.8" - camelcase "^5.3.1" - crypto-browserify "^3.12.0" - crypto-js "^3.1.9-1" - elliptic "^6.0.0" - eslint-utils "^1.4.2" - events "^3.0.0" - is_js "^0.9.0" - lodash "^4.17.19" - minimist "^1.2.5" - ndjson "^1.5.0" - protocol-buffers-encodings "^1.1.0" - pumpify "^2.0.1" - secure-random "^1.1.2" - tiny-secp256k1 "^1.1.3" - url "^0.11.0" - uuid "^3.3.2" - websocket-stream "^5.5.0" - -bnc-onboard@~1.35.3: - version "1.35.3" - resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.35.3.tgz#f6e92e4dec1b35bbc808e57032d76c677d7f1ff8" - integrity sha512-9g3Lgfo5Q4VwKdoIDw4Zf+nVMCa16lReb0f+iSmH6CrdiDrN5rRTGMy8qEOxQ/vSNuyHMeL9lVARpLA4s7X5xQ== - dependencies: - "@cvbb/eth-keyring" "^1.1.0" - "@ensdomains/ensjs" "^2.0.1" - "@ethereumjs/common" "^2.0.0" - "@ethereumjs/tx" "^3.0.0" - "@gnosis.pm/safe-apps-provider" "^0.5.0" - "@gnosis.pm/safe-apps-sdk" "^3.0.0" - "@keystonehq/eth-keyring" "0.9.0" - "@ledgerhq/hw-app-eth" "6.8.1" - "@ledgerhq/hw-transport-u2f" "^5.21.0" - "@ledgerhq/hw-transport-webusb" "6.7.0" - "@portis/web3" "^4.0.0" - "@shapeshiftoss/hdwallet-core" "^1.15.2" - "@shapeshiftoss/hdwallet-keepkey" "^1.15.2" - "@shapeshiftoss/hdwallet-keepkey-webusb" "^1.15.2" - "@toruslabs/torus-embed" "^1.10.11" - "@walletconnect/web3-provider" "^1.6.2" - authereum "^0.1.12" - bignumber.js "^9.0.0" - bnc-sdk "^3.4.1" - bowser "^2.10.0" - eth-lattice-keyring "^0.2.7" - eth-provider "^0.6.1" - eth-sig-util "^3.0.1" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^7.0.3" - fortmatic "^2.2.1" - hdkey "^2.0.1" - regenerator-runtime "^0.13.7" - trezor-connect "^8.1.9" - walletlink "^2.1.11" - web3-provider-engine "^15.0.4" - -bnc-sdk@^3.4.1: - version "3.7.0" - resolved "https://registry.yarnpkg.com/bnc-sdk/-/bnc-sdk-3.7.0.tgz#b6472067baad41e102c4fe748ba3cc32793fca9e" - integrity sha512-o8vd+LLL+sBU3aE+/tmhilbtkKQpGvA9rBhvT/bszvBpAgSNzVaP3vdmNPaglDmE2WymcrqvQGf57z5l9v+rrw== - dependencies: - crypto-es "^1.2.2" - rxjs "^6.6.3" - sturdy-websocket "^0.1.12" - body-parser@1.19.1, body-parser@^1.16.0: version "1.19.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" @@ -8131,24 +7244,6 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.1.4.tgz#f51a2fb5838a99e06f9b6ec1edb674de67026435" integrity sha512-3hx0kwU3uzG6ReQ3pnaFQPSktpBw6RHN3/ivDKEuU8g1XSfafowyvDnadjv1xp8IZqhtSukxlwv9bF6FhX8m0w== -borc@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/borc/-/borc-2.1.2.tgz#6ce75e7da5ce711b963755117dd1b187f6f8cf19" - integrity sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w== - dependencies: - bignumber.js "^9.0.0" - buffer "^5.5.0" - commander "^2.15.0" - ieee754 "^1.1.13" - iso-url "~0.4.7" - json-text-sequence "~0.1.0" - readable-stream "^3.6.0" - -bowser@^2.10.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - boxen@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" @@ -8238,7 +7333,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -8349,13 +7444,6 @@ browserslist@^4.20.2, browserslist@^4.21.0: node-releases "^2.0.5" update-browserslist-db "^1.0.4" -bs58@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-3.1.0.tgz#d4c26388bf4804cac714141b1945aa47e5eb248e" - integrity sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4= - dependencies: - base-x "^1.1.0" - bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -8363,7 +7451,7 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58check@<3.0.0, bs58check@^2.1.1, bs58check@^2.1.2: +bs58check@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -8379,11 +7467,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -8412,7 +7495,7 @@ buffer-fill@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= -buffer-from@^1.0.0, buffer-from@^1.1.1: +buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== @@ -8432,7 +7515,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@6.0.3, buffer@^6.0.3: +buffer@6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -8449,7 +7532,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.0.5, buffer@^5.1.0, buffer@^5.4.2, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -8511,13 +7594,6 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bytebuffer@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" - integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= - dependencies: - long "~3" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -8669,15 +7745,6 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -8692,17 +7759,7 @@ camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -8759,19 +7816,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cbor-sync@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cbor-sync/-/cbor-sync-1.0.4.tgz#5a11a1ab75c2a14d1af1b237fd84aa8c1593662f" - integrity sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA== - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -8800,7 +7844,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -8843,13 +7887,6 @@ check-types@^11.1.1: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== -checkpoint-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= - dependencies: - functional-red-black-tree "^1.0.1" - "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" @@ -8929,6 +7966,11 @@ ci-info@^3.1.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== +ci-info@^3.7.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -9054,24 +8096,6 @@ clipboard@^2.0.0: select "^1.1.2" tiny-emitter "^2.0.0" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -9111,12 +8135,7 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.0.0, clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -clsx@^1.0.4, clsx@^1.1.0, clsx@^1.1.1: +clsx@^1.0.4, clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== @@ -9254,7 +8273,7 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.15.0, commander@^2.19.0, commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -9289,7 +8308,7 @@ compare-version@^0.1.2: resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA= -component-emitter@^1.2.0, component-emitter@^1.2.1: +component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -9450,7 +8469,7 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookiejar@^2.1.0, cookiejar@^2.1.1: +cookiejar@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== @@ -9472,7 +8491,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.3.1: +copy-to-clipboard@^3.0.8: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== @@ -9644,15 +8663,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@^2.1.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.5.tgz#afaf5729f3b6c78d89c9296115c9f142541a5705" - integrity sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w== - dependencies: - node-fetch "2.6.1" - whatwg-fetch "2.0.4" - -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@6.0.5, cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -9708,7 +8719,7 @@ crypto-addr-codec@^0.1.7: safe-buffer "^5.2.0" sha3 "^2.1.1" -crypto-browserify@3.12.0, crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -9725,21 +8736,6 @@ crypto-browserify@3.12.0, crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-es@^1.2.2: - version "1.2.7" - resolved "https://registry.yarnpkg.com/crypto-es/-/crypto-es-1.2.7.tgz#754a6d52319a94fb4eb1f119297f17196b360f88" - integrity sha512-UUqiVJ2gUuZFmbFsKmud3uuLcNP2+Opt+5ysmljycFCyhA0+T16XJmo1ev/t5kMChMqWh7IEvURNCqsg+SjZGQ== - -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -crypto-js@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" - integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== - crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -10072,13 +9068,6 @@ currency-flags@3.2.1: resolved "https://registry.yarnpkg.com/currency-flags/-/currency-flags-3.2.1.tgz#ed535a55628bad6d9a2f39e10e681e9de9304dd4" integrity sha512-5IBjKoPlrEX2KAW5GWrldPnSWybsbeiltLe63y1pEeIOdaEqMu3T6pfKgDud9oq3G9i8hMvzSQGiPO+prF0+Hg== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - curve25519-js@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/curve25519-js/-/curve25519-js-0.0.4.tgz#e6ad967e8cd284590d657bbfc90d8b50e49ba060" @@ -10137,21 +9126,14 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: dependencies: ms "2.1.2" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6, debug@^3.2.7: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: +decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -10159,7 +9141,7 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -10245,13 +9227,6 @@ defer-to-connect@^1.0.1: 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" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== - dependencies: - abstract-leveldown "~2.6.0" - define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -10317,11 +9292,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -delimit-stream@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b" - integrity sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs= - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -10350,11 +9320,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-browser@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.2.0.tgz#c9cd5afa96a6a19fda0bbe9e9be48a6b6e1e9c97" - integrity sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA== - detect-indent@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" @@ -10410,11 +9375,6 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dijkstrajs@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257" - integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg== - dir-compare@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631" @@ -10650,15 +9610,6 @@ dotenv@^9.0.2: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== -drbg.js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" - integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= - dependencies: - browserify-aes "^1.0.6" - create-hash "^1.1.2" - create-hmac "^1.1.4" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -10669,7 +9620,7 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.5.1, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -10679,16 +9630,6 @@ duplexify@^3.4.2, duplexify@^3.5.1, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -duplexify@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -10702,13 +9643,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -eip55@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eip55/-/eip55-2.1.0.tgz#a1e870cc6e15fb9ec8d338b68317f3db546728f1" - integrity sha512-jtOfFne69XvSYz58oBXqfKHk1cJwwHcAzKm9jbzOKsedKEaulMPCA4fq2UXS9NaxkdVOdbSG0kg7fM09+K4gjw== - dependencies: - keccak "^1.3.0" - ejs@^2.6.1: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" @@ -10836,20 +9770,7 @@ element-resize-detector@^1.2.1: dependencies: batch-processor "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" - -elliptic@6.5.4, elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -10906,14 +9827,7 @@ encodeurl@^1.0.2, encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -10929,16 +9843,6 @@ endent@^2.0.1: fast-json-parse "^1.0.3" objectorarray "^1.0.5" -enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" - integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" - enhanced-resolve@^4.3.0, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" @@ -10965,14 +9869,14 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@^0.1.3, errno@~0.1.1, errno@~0.1.7: +errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -11076,7 +9980,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: +es5-ext@^0.10.35, es5-ext@^0.10.50: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -11095,7 +9999,7 @@ es6-error@^4.1.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -es6-iterator@2.0.3, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: +es6-iterator@2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -11104,53 +10008,12 @@ es6-iterator@2.0.3, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0. es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - es6-shim@^0.35.5: version "0.35.6" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== -es6-symbol@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: +es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -11158,16 +10021,6 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -es6-weak-map@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - escalade@^3.0.2, escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -11210,16 +10063,6 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-config-prettier@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" @@ -11355,13 +10198,6 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" @@ -11511,19 +10347,7 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eth-block-tracker@4.4.3, eth-block-tracker@^4.4.2: - version "4.4.3" - resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz#766a0a0eb4a52c867a28328e9ae21353812cf626" - integrity sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw== - dependencies: - "@babel/plugin-transform-runtime" "^7.5.5" - "@babel/runtime" "^7.5.5" - eth-query "^2.1.0" - json-rpc-random-id "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: +eth-ens-namehash@2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= @@ -11531,108 +10355,6 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-json-rpc-errors@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz#148377ef55155585981c21ff574a8937f9d6991f" - integrity sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-json-rpc-errors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz#c1965de0301fe941c058e928bebaba2e1285e3c4" - integrity sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-json-rpc-filters@4.2.2, eth-json-rpc-filters@^4.1.1, eth-json-rpc-filters@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz#eb35e1dfe9357ace8a8908e7daee80b2cd60a10d" - integrity sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw== - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - async-mutex "^0.2.6" - eth-json-rpc-middleware "^6.0.0" - eth-query "^2.1.2" - json-rpc-engine "^6.1.0" - pify "^5.0.0" - -eth-json-rpc-infura@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-4.1.0.tgz#623478375ba65e4304dea529ed69e8bd7938270d" - integrity sha512-DFYitKovzVlCdUulEccdm4g6k/vnvyByuw7rd5OoWDBSIiaeinI8Z/SntLjSIs2c+YvE20DGwk/GLwZGCWDN1Q== - dependencies: - eth-json-rpc-middleware "^4.4.0" - eth-rpc-errors "^3.0.0" - json-rpc-engine "^5.1.3" - node-fetch "^2.6.0" - -eth-json-rpc-infura@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz#e6da7dc47402ce64c54e7018170d89433c4e8fb6" - integrity sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow== - dependencies: - eth-json-rpc-middleware "^6.0.0" - eth-rpc-errors "^3.0.0" - json-rpc-engine "^5.3.0" - node-fetch "^2.6.0" - -eth-json-rpc-middleware@^4.1.5, eth-json-rpc-middleware@^4.4.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.1.tgz#07d3dd0724c24a8d31e4a172ee96271da71b4228" - integrity sha512-yoSuRgEYYGFdVeZg3poWOwAlRI+MoBIltmOB86MtpoZjvLbou9EB/qWMOWSmH2ryCWLW97VYY6NWsmWm3OAA7A== - dependencies: - btoa "^1.2.1" - clone "^2.1.1" - eth-json-rpc-errors "^1.0.1" - eth-query "^2.1.2" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.6.0" - ethereumjs-tx "^1.3.7" - ethereumjs-util "^5.1.2" - ethereumjs-vm "^2.6.0" - fetch-ponyfill "^4.0.0" - json-rpc-engine "^5.1.3" - json-stable-stringify "^1.0.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - -eth-json-rpc-middleware@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz#4fe16928b34231a2537856f08a5ebbc3d0c31175" - integrity sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ== - dependencies: - btoa "^1.2.1" - clone "^2.1.1" - eth-query "^2.1.2" - eth-rpc-errors "^3.0.0" - eth-sig-util "^1.4.2" - ethereumjs-util "^5.1.2" - json-rpc-engine "^5.3.0" - json-stable-stringify "^1.0.1" - node-fetch "^2.6.1" - pify "^3.0.0" - safe-event-emitter "^1.0.1" - -eth-lattice-keyring@^0.2.7: - version "0.2.29" - resolved "https://registry.yarnpkg.com/eth-lattice-keyring/-/eth-lattice-keyring-0.2.29.tgz#9b9ad913df465b4068a65a64aece1565c54706dd" - integrity sha512-P2YZJcW2JtWx2y1T2v8oC3xwCJoGnirA1DwjsGhf5CxrSk13+a+pobFaGXF7WN7kSKs6sH6IdynzS/RXqVx36g== - dependencies: - ethereumjs-common "^1.5.2" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^7.0.10" - gridplus-sdk "^0.7.16" - -eth-lib@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" - integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - eth-lib@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" @@ -11654,75 +10376,6 @@ eth-lib@^0.1.26: ws "^3.0.0" xhr-request-promise "^0.1.2" -eth-provider@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/eth-provider/-/eth-provider-0.6.1.tgz#795c69205f023678ed79f9139233426afdbc479c" - integrity sha512-0sBNzOBEUSQmo5zHSQ/os25ULh+LeoTTK5nGxiTJpXo8R0OOxOzYiVWLfAWuIuYLhzT1ma5A1wPZWMt+gPGeoA== - dependencies: - ethereum-provider "0.2.2" - events "3.2.0" - oboe "2.1.5" - uuid "8.3.2" - ws "7.4.3" - xhr2-cookies "1.1.0" - -eth-query@^2.1.0, eth-query@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= - dependencies: - json-rpc-random-id "^1.0.0" - xtend "^4.0.1" - -eth-rpc-errors@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.2.tgz#11bc164e25237a679061ac05b7da7537b673d3b7" - integrity sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-rpc-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz#d7b22653c70dbf9defd4ef490fd08fe70608ca10" - integrity sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" - integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== - dependencies: - fast-safe-stringify "^2.0.6" - -eth-sig-util@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" - integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= - dependencies: - ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" - ethereumjs-util "^5.1.1" - -eth-sig-util@^2.5.3: - version "2.5.4" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.5.4.tgz#577b01fe491b6bf59b0464be09633e20c1677bc5" - integrity sha512-aCMBwp8q/4wrW4QLsF/HYBOSA7TpLKmkVwP3pYQNkEEseW2Rr8Z5Uxc9/h6HX+OG3tuHo+2bINVSihIeBfym6A== - dependencies: - ethereumjs-abi "0.6.8" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.0" - -eth-sig-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-3.0.1.tgz#8753297c83a3f58346bd13547b59c4b2cd110c96" - integrity sha512-0Us50HiGGvZgjtWTyAI/+qTzYPMLy5Q451D0Xy68bxq1QMWdoOddDwGvsqcFT27uohKgalM9z/yxplyt+mY2iQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^5.1.1" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.0" - ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -11730,24 +10383,6 @@ ethereum-bloom-filters@^1.0.6: dependencies: js-sha3 "^0.8.0" -ethereum-checksum-address@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ethereum-checksum-address/-/ethereum-checksum-address-0.0.2.tgz#46fcb2d962dacd1ed49d7b464408ec26fd183209" - integrity sha512-GAb7mPvGgcfi1j+Bsnwm9af9Z7dLUKp+5cFm88+kMrKACfh9gLatGLVVK5pSGEG2pOGfrmqCRcuh3RtMjIg8GQ== - dependencies: - keccak256 "^1.0.0" - meow "^5.0.0" - -ethereum-common@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" - integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== - -ethereum-common@^0.0.18: - version "0.0.18" - resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= - ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" @@ -11774,120 +10409,14 @@ ethereum-ens-network-map@^1.0.2: resolved "https://registry.yarnpkg.com/ethereum-ens-network-map/-/ethereum-ens-network-map-1.0.2.tgz#4e27bad18dae7bd95d84edbcac2c9e739fc959b9" integrity sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg== -ethereum-private-key-to-address@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/ethereum-private-key-to-address/-/ethereum-private-key-to-address-0.0.3.tgz#1f1dccaefd1198c2dcde55501f331a846bd0aad0" - integrity sha512-P+z9eFlgOezxogEpY1sQR155U4xFmQUWVxKzIJa5BL05Gs7zL0sYuyQuSAme8LBYGQ6p6AwconiMDauf4LbqyA== - dependencies: - ethereum-private-key-to-public-key "0.0.2" - ethereum-public-key-to-address "0.0.1" - meow "^5.0.0" - -ethereum-private-key-to-public-key@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ethereum-private-key-to-public-key/-/ethereum-private-key-to-public-key-0.0.2.tgz#bb5803aad43df2692e0d7b4c9eaa224eec2a39cb" - integrity sha512-WKwFspLS5IdpV1rBUmWSG2xtIDV7YMpAG/uSjtV9kDzBU6hpSzoqg6R/e1iEfHkOr/eae+NtDTpwzXRtSMDvhw== - dependencies: - meow "^5.0.0" - secp256k1 "^3.7.1" - -ethereum-provider@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ethereum-provider/-/ethereum-provider-0.2.2.tgz#37ba0674a6c05915b51afb8e6d13e9bd166f1c33" - integrity sha512-147DaU4nccfYYCAKhrILdgSWTjjZX2NnmcZJx12frM+cNw8cGTbpQPpi4xApagIk7HlN16ZncCP5uyOiZN7n3g== - dependencies: - events "3.2.0" - -ethereum-public-key-to-address@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/ethereum-public-key-to-address/-/ethereum-public-key-to-address-0.0.1.tgz#3f0237687d9c2217234dc5683f3eb580abf3f6ce" - integrity sha512-X78x/VBluHUdrYpZunoXJ48luXTaUiUK4ImPjTjI+XiS24+jUR5WFCpm9wCNbLYP6/ZCJ+lwuYormXSjt8rrbw== - dependencies: - ethereum-checksum-address "0.0.2" - keccak256 "^1.0.0" - meow "^5.0.0" - secp256k1 "^3.7.1" - -ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": +ethereumjs-abi@0.6.8: version "0.6.8" resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" dependencies: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-account@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" - integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== - dependencies: - ethereumjs-util "^5.0.0" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-block@^1.2.2, ethereumjs-block@^1.6.0: - version "1.7.1" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" - integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== - dependencies: - async "^2.0.1" - ethereum-common "0.2.0" - ethereumjs-tx "^1.2.2" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-block@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" - integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== - dependencies: - async "^2.0.1" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.1" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-common@^1.1.0, ethereumjs-common@^1.5.0, ethereumjs-common@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" - integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== - -ethereumjs-testrpc@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz#7a0b87bf3670f92f607f98fa6a78801d9741b124" - integrity sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA== - dependencies: - webpack "^3.0.0" - -ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" - integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== - dependencies: - ethereum-common "^0.0.18" - ethereumjs-util "^5.0.0" - -ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" - integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== - dependencies: - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.0.0" - -ethereumjs-util@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" - integrity sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - ethjs-util "^0.1.3" - keccak "^1.0.2" - rlp "^2.0.0" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" - -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0: +ethereumjs-util@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -11900,20 +10429,7 @@ ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.5: - version "5.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" - integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "^0.1.3" - rlp "^2.0.0" - safe-buffer "^5.1.1" - -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.0.7, ethereumjs-util@^7.0.8, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3: +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== @@ -11924,44 +10440,7 @@ ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.0.7, ethereu ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" - integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - ethereumjs-account "^2.0.3" - ethereumjs-block "~2.2.0" - ethereumjs-common "^1.1.0" - ethereumjs-util "^6.0.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "^2.3.2" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - -ethers-eip712@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ethers-eip712/-/ethers-eip712-0.2.0.tgz#52973b3a9a22638f7357283bf66624994c6e91ed" - integrity sha512-fgS196gCIXeiLwhsWycJJuxI9nL/AoUPGSQ+yvd+8wdWR+43G+J1n69LmWVWvAON0M6qNaf2BF4/M159U8fujQ== - -ethers@4.0.47: - version "4.0.47" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.47.tgz#91b9cd80473b1136dd547095ff9171bd1fc68c85" - integrity sha512-hssRYhngV4hiDNeZmVU/k5/E8xmLG8UpcNUzg6mb7lqhgpFPH/t7nuv20RjRrEf0gblzvi2XwR5Te+V3ZFc9pQ== - dependencies: - aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.2" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.0.13, ethers@^5.0.31, ethers@^5.4.7: +ethers@^5.4.7: version "5.5.1" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== @@ -12005,7 +10484,7 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" -ethjs-util@0.1.6, ethjs-util@^0.1.3: +ethjs-util@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== @@ -12013,40 +10492,22 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" - eventemitter2@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452" integrity sha1-YZegldX7a1folC9v1+qtY6CclFI= -eventemitter3@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@4.0.7, eventemitter3@^4.0.0: +eventemitter3@^4.0.0: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== - -events@^3.0.0, events@^3.2.0, events@^3.3.0: +events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -12127,11 +10588,6 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exenv@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= - exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" @@ -12172,11 +10628,6 @@ expect@^26.6.0, expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -exponential-backoff@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.0.tgz#9409c7e579131f8bd4b32d7d8094a911040f2e68" - integrity sha512-oBuz5SYz5zzyuHINoe9ooePwSu0xApKWgeNzok4hZ5YKXFh9zrQBEM15CXqoZkJJPuI2ArvqjPQd8UKJA753XA== - express@^4.14.0, express@^4.17.1, express@^4.17.2: version "4.17.2" resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" @@ -12272,7 +10723,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -12325,13 +10776,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fake-merkle-patricia-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= - dependencies: - checkpoint-store "^1.1.0" - fast-deep-equal@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" @@ -12385,11 +10829,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -12425,13 +10864,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fetch-ponyfill@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= - dependencies: - node-fetch "~1.7.1" - figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -12615,15 +11047,7 @@ find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -12679,13 +11103,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - follow-redirects@^1.0.0, follow-redirects@^1.10.0, follow-redirects@^1.14.0: version "1.14.4" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" @@ -12741,15 +11158,6 @@ fork-ts-checker-webpack-plugin@4.1.6, fork-ts-checker-webpack-plugin@^4.1.4: tapable "^1.0.0" worker-rpc "^0.1.0" -form-data@^2.3.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -12782,16 +11190,6 @@ format@^0.2.0: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== -formidable@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" - integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== - -fortmatic@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/fortmatic/-/fortmatic-2.2.1.tgz#91ce9159c1fe539bd87e483125fca5c27a410a86" - integrity sha512-PEfPoErJSErU2A8iYD2Mab2c8eJK5dCdCr1jR/8yc49aEAlyQ4UXnZXyeO6MU5zBGkDAZmg9brnRSPzc+8MKPQ== - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -12804,26 +11202,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@^4.1.17: - version "4.1.17" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-4.1.17.tgz#4029469252a62ea599902e5a92b537120cc89721" - integrity sha512-thx1wvKzblzbs0XaK2X0G1JuwIdARcoNOW7VVwjO8BUltzXPyONGAElLu6CiCScsOQRI7FIk/45YTFtJw5Yozw== - dependencies: - framesync "5.3.0" - hey-listen "^1.0.8" - popmotion "9.3.6" - style-value-types "4.1.4" - tslib "^2.1.0" - optionalDependencies: - "@emotion/is-prop-valid" "^0.8.2" - -framesync@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/framesync/-/framesync-5.3.0.tgz#0ecfc955e8f5a6ddc8fdb0cc024070947e1a0d9b" - integrity sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA== - dependencies: - tslib "^2.1.0" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -12842,17 +11220,6 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" @@ -12985,15 +11352,6 @@ fuse.js@^6.4.6: resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-6.4.6.tgz#62f216c110e5aa22486aff20be7896d19a059b79" integrity sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw== -ganache-cli@^6.1.0: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -13013,11 +11371,6 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -13292,11 +11645,6 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -google-protobuf@^3.15.8, google-protobuf@^3.7.0-rc.2: - version "3.19.0" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.19.0.tgz#97f474323c92f19fd6737af1bb792e396991e0b8" - integrity sha512-qXGAiv3OOlaJXJNeKOBKxbBAwjsxzhx+12ZdKOkZTsqsRkyiQRmr/nBkAkqnuQ8cmA9X5NVXvObQTpHVnXE2DQ== - got@9.6.0, got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -13334,7 +11682,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -13349,27 +11697,6 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -gridplus-sdk@^0.7.16: - version "0.7.27" - resolved "https://registry.yarnpkg.com/gridplus-sdk/-/gridplus-sdk-0.7.27.tgz#e63438fc0a676f88d5228e74a28426361e6149d5" - integrity sha512-0Jl5zMooppkR3n3xwdw9u5ayENAZJlcQl2/uBBp9GaYU38U6prfZIR2Y4I4DUfKjefuBf2UmAQCol8NO6bdDwg== - dependencies: - aes-js "^3.1.1" - bech32 "^2.0.0" - bignumber.js "^9.0.1" - bitwise "^2.0.4" - borc "^2.1.2" - bs58check "^2.1.2" - buffer "^5.6.0" - crc-32 "^1.2.0" - elliptic "6.5.4" - ethers "^5.0.31" - ethers-eip712 "^0.2.0" - js-sha3 "^0.8.0" - rlp-browser "^1.0.1" - secp256k1 "4.0.2" - superagent "^3.8.3" - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -13441,11 +11768,6 @@ has-bigints@^1.0.2: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -13549,14 +11871,6 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7, hash.js@~1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -13591,15 +11905,6 @@ hastscript@^6.0.0: property-information "^5.0.0" space-separated-tokens "^1.0.0" -hdkey@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-2.0.1.tgz#0a211d0c510bfc44fa3ec9d44b13b634641cad74" - integrity sha512-c+tl9PHG9/XkGgG0tD7CJpRVaE0jfZizDNmnErUAKQ4EjQSOcOUcV3EN9ZEZS8pZ4usaeiiK0H7stzuzna8feA== - dependencies: - bs58check "^2.1.2" - safe-buffer "^5.1.1" - secp256k1 "^4.0.0" - he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -13610,11 +11915,6 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - highlight.js@^10.4.1, highlight.js@~10.7.0: version "10.7.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" @@ -13637,7 +11937,7 @@ history@4.10.1, history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" -hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -13892,11 +12192,6 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -icepick@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/icepick/-/icepick-2.4.0.tgz#1ff31e080d9b64ca5d164916ea725f8cb9514b7a" - integrity sha512-tr62H2DxpN9dEdgFZ4CGKiE0yzcz/kST4dJiRN6jkPn4CllniywYl1LvPTErWTBxJ2GAG4c7Em/pzy0WZi9eNw== - iconv-corefoundation@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.6.tgz#27c135470237f6f8d13462fa1f5eaf250523c29a" @@ -13965,11 +12260,6 @@ ignore@^5.1.4, ignore@^5.1.8: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - immer@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" @@ -14046,11 +12336,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -14074,7 +12359,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -14183,23 +12468,13 @@ interpret@^2.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -invariant@2, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" @@ -14299,21 +12574,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" @@ -14443,11 +12708,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -14536,14 +12796,6 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-nan@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -14684,7 +12936,7 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -14694,11 +12946,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -14731,16 +12978,11 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.7: foreach "^2.0.5" has-tostringtag "^1.0.0" -is-typedarray@1.0.0, is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - is-weakref@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" @@ -14782,11 +13024,6 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -is_js@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" - integrity sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0= - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -14797,7 +13034,7 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@^2.0.1, isarray@^2.0.5: +isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== @@ -14819,11 +13056,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -iso-url@~0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.7.tgz#de7e48120dae46921079fe78f325ac9e9217a385" - integrity sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog== - isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -15467,26 +13699,21 @@ js-crypto-random@^0.4.3: dependencies: js-crypto-env "^0.3.2" -js-encoding-utils@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/js-encoding-utils/-/js-encoding-utils-0.5.6.tgz#517351d8f4a85b2ad121183d41df8319981bee03" - integrity sha512-qnAGsUIWrmzh5n+3AXqbxX1KsB9hkQmJZf3aA9DLAS7GpL/NEHCBreFFbW+imramoU+Q0TDyvkwhRbBRH1TVkg== - -js-sha256@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= - +js-encoding-utils@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/js-encoding-utils/-/js-encoding-utils-0.5.6.tgz#517351d8f4a85b2ad121183d41df8319981bee03" + integrity sha512-qnAGsUIWrmzh5n+3AXqbxX1KsB9hkQmJZf3aA9DLAS7GpL/NEHCBreFFbW+imramoU+Q0TDyvkwhRbBRH1TVkg== + js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= + js-sha512@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" @@ -15517,11 +13744,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbi@^3.1.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" - integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -15575,11 +13797,6 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" - integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -15590,27 +13807,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-rpc-engine@6.1.0, json-rpc-engine@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" - integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - eth-rpc-errors "^4.0.2" - -json-rpc-engine@^5.1.3, json-rpc-engine@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz#75758609d849e1dba1e09021ae473f3ab63161e5" - integrity sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g== - dependencies: - eth-rpc-errors "^3.0.0" - safe-event-emitter "^1.0.1" - -json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -15631,25 +13827,18 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= +json-stable-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" + integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== dependencies: - jsonify "~0.0.0" + jsonify "^0.0.1" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json-text-sequence@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.1.1.tgz#a72f217dc4afc4629fff5feb304dc1bd51a2f3d2" - integrity sha1-py8hfcSvxGKf/1/rME3BvVGi89I= - dependencies: - delimit-stream "0.1.0" - json2mq@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" @@ -15662,11 +13851,6 @@ json3@^3.3.2, json3@^3.3.3: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -15686,13 +13870,6 @@ json5@^2.1.2, json5@^2.2.0: dependencies: minimist "^1.2.5" -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -15709,6 +13886,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -15817,25 +13999,7 @@ just-curry-it@^3.1.0: resolved "https://registry.yarnpkg.com/just-curry-it/-/just-curry-it-3.2.1.tgz#7bb18284c8678ed816bfc5c19e44400605fbe461" integrity sha512-Q8206k8pTY7krW32cdmPsP+DqqLgWx/hYPSj9/+7SYqSqz7UuwPbfSe07lQtvuuaVyiSJveXk0E5RydOuWwsEg== -keccak256@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/keccak256/-/keccak256-1.0.3.tgz#0a9c0383a9cda753a7351811cf69eaa607043366" - integrity sha512-EkF/4twuPm1V/gn75nejOUrKfDUJn87RMLzDWosXF3pXuOvesiSgX35GcmbqzdImCASEkE/WaklWGWSa+Ha5bQ== - dependencies: - bn.js "^4.11.8" - keccak "^3.0.1" - -keccak@^1.0.2, keccak@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-1.4.0.tgz#572f8a6dbee8e7b3aa421550f9e6408ca2186f80" - integrity sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw== - dependencies: - bindings "^1.2.1" - inherits "^2.0.3" - nan "^2.2.1" - safe-buffer "^5.1.0" - -keccak@^3.0.0, keccak@^3.0.1, keccak@^3.0.2: +keccak@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== @@ -15851,11 +14015,6 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -keyvaluestorage-interface@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" - integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -15892,13 +14051,6 @@ klaw-sync@^6.0.0: dependencies: graceful-fs "^4.1.11" -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -15936,11 +14088,6 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -15957,70 +14104,6 @@ lazy-val@^1.0.4, lazy-val@^1.0.5: resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== - -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== - dependencies: - errno "~0.1.1" - -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - -level-ws@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= - dependencies: - readable-stream "~1.0.15" - xtend "~2.1.1" - -levelup@^1.2.1: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -16093,37 +14176,6 @@ listr2@^3.12.2: through "^2.3.8" wrap-ansi "^7.0.0" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - load-yaml-file@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" @@ -16134,7 +14186,7 @@ load-yaml-file@^0.2.0: pify "^4.0.1" strip-bom "^3.0.0" -loader-runner@^2.3.0, loader-runner@^2.4.0: +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== @@ -16206,11 +14258,6 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -16221,11 +14268,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -16323,7 +14365,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loglevel@^1.6.8, loglevel@^1.7.1: +loglevel@^1.6.8: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== @@ -16341,16 +14383,6 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -long@~3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" - integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -16358,14 +14390,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -16421,11 +14445,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= - lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -16460,13 +14479,6 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -16477,11 +14489,6 @@ map-obj@^1.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - map-obj@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" @@ -16507,19 +14514,6 @@ markdown-to-jsx@^6.11.4: prop-types "^15.6.2" unquote "^1.1.0" -marked-react@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/marked-react/-/marked-react-1.3.0.tgz#4ffd3e45916993a7f5918fa8c248f46beebd541f" - integrity sha512-O7bzt+9h50rqnq/439skOcDAPPPbBDM3f3c0S/CREU6icznAzWqXa2RcXBIoULYdnNub7wqBWYu3kdW/SMoujA== - dependencies: - "@types/marked" "^4.0.3" - marked "^4.0.12" - -marked@^4.0.12: - version "4.1.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.1.0.tgz#3fc6e7485f21c1ca5d6ec4a39de820e146954796" - integrity sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA== - matcher@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" @@ -16565,34 +14559,6 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memdown@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= - dependencies: - abstract-leveldown "~2.7.1" - functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" @@ -16600,12 +14566,7 @@ memoizerific@^1.11.3: dependencies: map-or-similar "^1.5.0" -memory-cache@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/memory-cache/-/memory-cache-0.2.0.tgz#7890b01d52c00c8ebc9d533e1f8eb17e3034871a" - integrity sha1-eJCwHVLADI68nVM+H46xfjA0hxo= - -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -16621,26 +14582,6 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - meow@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" @@ -16678,21 +14619,7 @@ merge@2.1.1: resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== -merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== - dependencies: - async "^1.4.2" - ethereumjs-util "^5.0.0" - level-ws "0.0.0" - levelup "^1.2.1" - memdown "^1.0.0" - readable-stream "^2.0.0" - rlp "^2.0.0" - semaphore ">=1.0.1" - -methods@^1.1.1, methods@~1.1.2: +methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -16761,7 +14688,7 @@ mime-types@~2.1.34: dependencies: mime-db "1.52.0" -mime@1.6.0, mime@^1.4.1: +mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -16776,7 +14703,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.0.0, mimic-fn@^2.1.0: +mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -16826,7 +14753,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -16845,14 +14772,6 @@ minimatch@^3.0.2, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -16867,6 +14786,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -16969,7 +14893,7 @@ mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -17076,7 +15000,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.14.2, nan@^2.15.0, nan@^2.2.1: +nan@^2.12.1, nan@^2.15.0: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== @@ -17130,16 +15054,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -ndjson@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-1.5.0.tgz#ae603b36b134bcec347b452422b0bf98d5832ec8" - integrity sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg= - dependencies: - json-stringify-safe "^5.0.1" - minimist "^1.2.0" - split2 "^2.1.0" - through2 "^2.0.3" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -17202,11 +15116,6 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - node-fetch@^2.6.0, node-fetch@^2.6.1: version "2.6.5" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" @@ -17214,14 +15123,6 @@ node-fetch@^2.6.0, node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-fetch@~1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -17246,7 +15147,7 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.0.0, node-libs-browser@^2.2.1: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -17307,14 +15208,7 @@ node-releases@^2.0.5: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== -normalize-hex@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/normalize-hex/-/normalize-hex-0.0.2.tgz#5491c43759db2f06b7168d8419f4925c271ab27e" - integrity sha512-E2dx7XJQnjsm6SkS4G6GGvIXRHaLeWAZE2D2N3aia+OpIif2UT8y4S0KCjrX3WmFDSeFnlNOp0FSHFjLeJ4SJw== - dependencies: - bn.js "^4.11.8" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.5.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== @@ -17486,11 +15380,6 @@ object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -17692,31 +15581,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -17742,11 +15606,6 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - p-each-series@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" @@ -17764,11 +15623,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -17943,13 +15797,6 @@ parse-headers@^2.0.0: resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -17991,24 +15838,26 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -patch-package@^6.4.7: - version "6.4.7" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" - integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== +patch-package@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.0.tgz#d191e2f1b6e06a4624a0116bcb88edd6714ede61" + integrity sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA== dependencies: "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" - cross-spawn "^6.0.5" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" - is-ci "^2.0.0" + fs-extra "^9.0.0" + json-stable-stringify "^1.0.2" klaw-sync "^6.0.0" - minimist "^1.2.0" + minimist "^1.2.6" open "^7.4.2" rimraf "^2.6.3" - semver "^5.6.0" + semver "^7.5.3" slash "^2.0.0" tmp "^0.0.33" + yaml "^2.2.2" path-browserify@0.0.1: version "0.0.1" @@ -18020,13 +15869,6 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -18074,22 +15916,6 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -18102,15 +15928,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbjs@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/pbjs/-/pbjs-0.0.5.tgz#b4c88e15aac4552ca0922aa64cd5338efd3447bf" - integrity sha1-tMiOFarEVSygkiqmTNUzjv00R78= - dependencies: - bytebuffer "5.0.1" - commander "2.9.0" - protocol-buffers-schema "3.1.0" - pbkdf2@^3.0.16, pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" @@ -18127,16 +15944,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -penpal@3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/penpal/-/penpal-3.0.7.tgz#d252711ed93b30f1d867eb82342785b3a95f5f75" - integrity sha512-WSXiq5HnEvzvY05SHhaXcsviUmCvh4Ze8AiIZzvmdzaaYAAx4rx8c6Xq6+MaVDG/Nfve3VmGD8HyRP3CkPvPbQ== - -penpal@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/penpal/-/penpal-4.1.1.tgz#c96ccfdac441682acf617f6dcbc177a614e8302b" - integrity sha512-6d1f8khVLyBz3DnhLztbfjJ7+ANxdXRM2l6awpnCdEtbrmse4AGTsELOvGuNY0SU7xZw7heGbP6IikVvaVTOWw== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -18157,11 +15964,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -pify@4.0.1, pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -18172,10 +15974,10 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" @@ -18246,11 +16048,6 @@ plist@^3.0.1: base64-js "^1.5.1" xmlbuilder "^9.0.7" -pngjs@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - pnp-webpack-plugin@1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" @@ -18265,13 +16062,6 @@ pnp-webpack-plugin@^1.6.4: dependencies: ts-pnp "^1.1.6" -pocket-js-core@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/pocket-js-core/-/pocket-js-core-0.0.3.tgz#1ab278b9a6a5775e2bdc3c2c2e218057774061e4" - integrity sha512-OUTEvEVutdjLT6YyldvAlSebpBueUUWg2XKxGNt5u3QqrmLpBOOBmdDnGMNJ+lEwXtko+JqgwFq+HTi4g1QDVg== - dependencies: - axios "^0.18.0" - polished@^3.4.4: version "3.7.2" resolved "https://registry.yarnpkg.com/polished/-/polished-3.7.2.tgz#ec5ddc17a7d322a574d5e10ddd2a6f01d3e767d1" @@ -18286,16 +16076,6 @@ polished@^4.2.2: dependencies: "@babel/runtime" "^7.17.8" -popmotion@9.3.6: - version "9.3.6" - resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-9.3.6.tgz#b5236fa28f242aff3871b9e23721f093133248d1" - integrity sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw== - dependencies: - framesync "5.3.0" - hey-listen "^1.0.8" - style-value-types "4.1.4" - tslib "^2.1.0" - popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" @@ -18991,16 +16771,6 @@ postinstall-postinstall@^2.1.0: resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== -preact@10.4.1: - version "10.4.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" - integrity sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q== - -preact@^10.5.9: - version "10.5.15" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.5.15.tgz#6df94d8afecf3f9e10a742fd8c362ddab464225f" - integrity sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA== - prebuild-install@^6.0.0, prebuild-install@^6.1.4: version "6.1.4" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" @@ -19020,11 +16790,6 @@ prebuild-install@^6.0.0, prebuild-install@^6.1.4: tar-fs "^2.0.0" tunnel-agent "^0.6.0" -precond@0.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= - preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -19152,14 +16917,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-to-callback@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= - dependencies: - is-fn "^1.0.0" - set-immediate-shim "^1.0.1" - promise.allsettled@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz#2443f3d4b2aa8dfa560f6ac2aa6c4ea999d75f53" @@ -19291,19 +17048,6 @@ protobufjs@~6.11.3: "@types/node" ">=13.7.0" long "^4.0.0" -protocol-buffers-encodings@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/protocol-buffers-encodings/-/protocol-buffers-encodings-1.1.1.tgz#f1e4a386711823137330171d2c82b49d062e75d3" - integrity sha512-5aFshI9SbhtcMiDiZZu3g2tMlZeS5lhni//AGJ7V34PQLU5JA91Cva7TIs6inZhYikS3OpnUzAUuL6YtS0CyDA== - dependencies: - signed-varint "^2.0.1" - varint "5.0.0" - -protocol-buffers-schema@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.1.0.tgz#d8a819549ead3e6bd189ebe9e50e96636bbc5cc7" - integrity sha1-2KgZVJ6tPmvRievp5Q6WY2u8XMc= - proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -19369,15 +17113,6 @@ pumpify@^1.3.3: inherits "^2.0.3" pump "^2.0.0" -pumpify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.1.tgz#abfc7b5a621307c728b551decbbefb51f0e4aa1e" - integrity sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw== - dependencies: - duplexify "^4.1.1" - inherits "^2.0.3" - pump "^3.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -19415,7 +17150,7 @@ qr.js@0.0.0: resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" integrity sha1-ys6GOG9ZoNuAUPqQ2baw6IoeNk8= -qrcode.react@1.0.1, qrcode.react@^1.0.1: +qrcode.react@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-1.0.1.tgz#2834bb50e5e275ffe5af6906eff15391fe9e38a5" integrity sha512-8d3Tackk8IRLXTo67Y+c1rpaiXjoz/Dd2HpcMdW//62/x8J1Nbho14Kh8x974t9prsLHN6XqVgcnRiBGFptQmg== @@ -19424,19 +17159,6 @@ qrcode.react@1.0.1, qrcode.react@^1.0.1: prop-types "^15.6.0" qr.js "0.0.0" -qrcode@1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.4.4.tgz#f0c43568a7e7510a55efc3b88d9602f71963ea83" - integrity sha512-oLzEC5+NKFou9P0bMj5+v6Z40evexeE29Z9cummZXZ9QXyMr3lphkURzxjXgPJC5azpxcshoDWV1xE46z+/c3Q== - dependencies: - buffer "^5.4.3" - buffer-alloc "^1.2.0" - buffer-from "^1.1.1" - dijkstrajs "^1.0.1" - isarray "^2.0.1" - pngjs "^3.3.0" - yargs "^13.2.4" - qs@6.10.3: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" @@ -19456,27 +17178,11 @@ qs@^6.10.0, qs@^6.6.0: dependencies: side-channel "^1.0.4" -qs@^6.5.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@6.13.5: - version "6.13.5" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.5.tgz#99e95e2fb7021db90a6f373f990c0c814b3812d8" - integrity sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - query-string@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.1.tgz#45bd149cf586aaa582dffc7ec7a8ad97dd02f75d" @@ -19529,11 +17235,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -19571,11 +17272,6 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -randomhex@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/randomhex/-/randomhex-0.1.5.tgz#baceef982329091400f2a2912c6cd02f1094f585" - integrity sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU= - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -19797,17 +17493,7 @@ react-docgen@^5.0.0: node-dir "^0.1.10" strip-indent "^3.0.0" -react-dom@16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-dom@17.0.2, react-dom@^17.0.1: +react-dom@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -19907,11 +17593,6 @@ react-inspector@^5.1.0: is-dom "^1.0.0" prop-types "^15.0.0" -react-intersection-observer@^8.32.0: - version "8.32.1" - resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-8.32.1.tgz#9b949871eb35eb1fc730732bbf8fcfaaaf3f5b02" - integrity sha512-FOmMkMw7MeJ8FkuADpU8TRcvGuTvPB+DRkaikS1QXcWArYLCWC3mjRorq2XeRGBuqmaueOBd27PUazTu9AgInw== - react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -19922,7 +17603,7 @@ react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -19937,16 +17618,6 @@ react-media@^1.10.0: json2mq "^0.2.0" prop-types "^15.5.10" -react-modal@^3.12.1: - version "3.14.3" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.14.3.tgz#7eb7c5ec85523e5843e2d4737cc17fc3f6aeb1c0" - integrity sha512-+C2KODVKyu20zHXPJxfOOcf571L1u/EpFlH+oS/3YDn8rgVE51QZuxuuIwabJ8ZFnOEHaD+r6XNjqwtxZnXO0g== - dependencies: - exenv "^1.2.0" - prop-types "^15.7.2" - react-lifecycles-compat "^3.0.0" - warning "^4.0.3" - react-papaparse@^3.16.1: version "3.17.2" resolved "https://registry.yarnpkg.com/react-papaparse/-/react-papaparse-3.17.2.tgz#9c636c7910ac910db691796c66847b8766a6adc1" @@ -20148,16 +17819,7 @@ react-transition-group@^4.4.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react@16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -react@17.0.2, react@^17.0.1: +react@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -20192,30 +17854,6 @@ read-config-file@6.2.0: json5 "^2.2.0" lazy-val "^1.0.4" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -20225,33 +17863,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^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" @@ -20272,7 +17883,7 @@ read-yaml-file@^1.1.0: pify "^4.0.1" strip-bom "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -20285,17 +17896,7 @@ read-yaml-file@^1.1.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -20304,16 +17905,6 @@ readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -20349,14 +17940,6 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -20608,12 +18191,12 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request@^2.79.0, request@^2.85.0: +request@^2.79.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -20644,21 +18227,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -20833,14 +18406,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= - dependencies: - align-text "^0.1.1" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -20867,14 +18433,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: hash-base "^3.0.0" inherits "^2.0.1" -rlp-browser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rlp-browser/-/rlp-browser-1.0.1.tgz#d1ea37f289359200d33dfa006d46008a288761eb" - integrity sha512-JU+9ntlfyKanOOPwtNuMZBmCQ/fWVoryfa7ZSYDTUKAa1zk4v2smvM0WV8BsskJuqn/DdxpO7HO2vEikMvmhOA== - dependencies: - buffer "^5.4.2" - -rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -20959,12 +18518,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@6, rxjs@^6.1.0, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3: +rxjs@6, rxjs@^6.1.0, rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -21000,13 +18554,6 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-event-emitter@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" - integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== - dependencies: - events "^3.0.0" - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -21119,11 +18666,6 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -21134,7 +18676,7 @@ sdp@^2.12.0, sdp@^2.6.0: resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.12.0.tgz#338a106af7560c86e4523f858349680350d53b22" integrity sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw== -secp256k1@4.0.2, secp256k1@^4.0.0, secp256k1@^4.0.1: +secp256k1@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1" integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg== @@ -21143,20 +18685,6 @@ secp256k1@4.0.2, secp256k1@^4.0.0, secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -secp256k1@^3.0.1, secp256k1@^3.7.1, secp256k1@^3.8.0: - 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" - secretjs@^0.17.0: version "0.17.5" resolved "https://registry.yarnpkg.com/secretjs/-/secretjs-0.17.5.tgz#5b55e46cfa2719714831fc2019e21c21959fe587" @@ -21174,7 +18702,7 @@ secretjs@^0.17.0: protobufjs "^6.11.2" secure-random "1.1.2" -secure-random@1.1.2, secure-random@^1.1.2: +secure-random@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/secure-random/-/secure-random-1.1.2.tgz#ed103b460a851632d420d46448b2a900a41e7f7c" integrity sha512-H2bdSKERKdBV1SwoqYm6C0y+9EA94v6SUBOWO8kDndc4NoUih7Dv6Tsgma7zO1lv27wIvjlD0ZpMQk7um5dheQ== @@ -21196,11 +18724,6 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" -semaphore@>=1.0.1, semaphore@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" - integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== - semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" @@ -21213,7 +18736,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -21240,10 +18763,12 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== +semver@^7.5.3: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" send@0.17.2: version "0.17.2" @@ -21364,11 +18889,6 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -21379,11 +18899,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= - setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -21491,13 +19006,6 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signed-varint@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/signed-varint/-/signed-varint-2.0.1.tgz#50a9989da7c98c2c61dad119bc97470ef8528129" - integrity sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk= - dependencies: - varint "~5.0.0" - simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -21652,17 +19160,6 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -solc@^0.4.20: - version "0.4.26" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" - integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== - dependencies: - fs-extra "^0.30.0" - memorystream "^0.3.1" - require-from-string "^1.1.0" - semver "^5.3.0" - yargs "^4.7.1" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -21699,14 +19196,6 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.20" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" @@ -21725,7 +19214,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -21819,13 +19308,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== - dependencies: - through2 "^2.0.2" - sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" @@ -21910,11 +19392,6 @@ store2@^2.12.0, store2@^2.7.1: resolved "https://registry.yarnpkg.com/store2/-/store2-2.13.2.tgz#01ad8802ca5b445b9c316b55e72645c13a3cd7e3" integrity sha512-CMtO2Uneg3SAz/d6fZ/6qbqqQHi2ynq6/KzMD/26gTkiEShCcpqFfTHgOxsE0egAq6SX3FmN4CeSqn8BzXQkJg== -store@2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593" - integrity sha1-jFNOKguDH3K3X8XxEZhXxE711ZM= - stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -21923,14 +19400,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -22117,11 +19586,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -22180,13 +19644,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -22222,11 +19679,6 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -22244,13 +19696,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -sturdy-websocket@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/sturdy-websocket/-/sturdy-websocket-0.1.12.tgz#84bb779f948b585a695f76961dc7d1c4a5e87629" - integrity sha512-PA7h8LdjaMoIlC5HAwLVzae4raGWgyroscV4oUpEiTtEFINcNa47/CKYT3e98o+FfsJgrclI2pYpaJrz0aaoew== - dependencies: - lodash.defaults "^4.2.0" - style-loader@1.3.0, style-loader@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" @@ -22264,14 +19709,6 @@ style-mod@^4.0.0: resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.0.2.tgz#ef9e14c4c67428bcf31cc886787e81ca7f8f5021" integrity sha512-C4myMmRTO8iaC5Gg+N1ftK2WT4eXUTMAa+HEFPPrfVeO/NtqLTtAmV1HbqnuGtLwCek44Ra76fdGUkSqjiMPcQ== -style-value-types@4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-4.1.4.tgz#80f37cb4fb024d6394087403dfb275e8bb627e75" - integrity sha512-LCJL6tB+vPSUoxgUBt9juXIlNJHtBMy8jkXzUJSBzeHWdBu6lhzHqCvLVkXFGsFIlNa2ln1sQHya/gzaFmB2Lg== - dependencies: - hey-listen "^1.0.8" - tslib "^2.1.0" - styled-components@^5.3.0: version "5.3.3" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.3.tgz#312a3d9a549f4708f0fb0edc829eb34bde032743" @@ -22304,22 +19741,6 @@ sumchecker@^3.0.1: dependencies: debug "^4.1.0" -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - supports-color@8.1.1, supports-color@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -22332,13 +19753,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -22446,11 +19860,6 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -tapable@^0.2.7: - version "0.2.9" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" - integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== - tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -22652,11 +20061,6 @@ test-value@^2.1.0: array-back "^1.0.3" typical "^2.6.0" -testrpc@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" - integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== - text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -22672,7 +20076,7 @@ throttle-debounce@^2.1.0: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== -through2@^2.0.0, through2@^2.0.2, through2@^2.0.3: +through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -22717,17 +20121,6 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== -tiny-secp256k1@^1.1.3, tiny-secp256k1@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" - integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== - dependencies: - bindings "^1.3.0" - bn.js "^4.11.8" - create-hmac "^1.1.7" - elliptic "^6.4.0" - nan "^2.13.2" - tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -22781,13 +20174,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-hex@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/to-hex/-/to-hex-0.0.11.tgz#22355e09e5b56f5ae2b32502c493320f021171ac" - integrity sha512-3FSU8sfjrVc9fWowwP9xrdhxbp5Wco8uVZLhMhfsNuCFo9Fu8ecD2MgJV/2iAw+755W3AcGSQYVZGOpBmJtNcA== - dependencies: - normalize-hex "0.0.2" - to-no-case@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" @@ -22881,20 +20267,6 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -trezor-connect@^8.1.9: - version "8.2.1" - resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.2.1.tgz#2789dec6d7bb3bbfcacc35af9d47b9b48998b367" - integrity sha512-YqGgB6E440j8DHaIJCZumtjg5LdUgQyow2pzQRAIVFchhbTOgU3FnWGO3vEeRn9UQuY3pj8xVo0A0GKEtHAW8g== - dependencies: - "@babel/runtime" "^7.12.5" - events "^3.2.0" - whatwg-fetch "^3.5.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -22947,7 +20319,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== @@ -22998,21 +20370,11 @@ tunnel@^0.0.6: resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== -tweetnacl-util@^0.15.0: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -23106,7 +20468,7 @@ typed-styles@^0.0.7: resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== -typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: +typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== @@ -23118,11 +20480,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typeforce@^1.11.5: - version "1.18.0" - resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" - integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== - typescript@^4.3.5: version "4.4.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" @@ -23133,40 +20490,11 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= -u2f-api@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" - integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== - ua-parser-js@^0.7.24: version "0.7.30" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.30.tgz#4cf5170e8b55ac553fe8b38df3a82f0669671f0b" integrity sha512-uXEtSresNUlXQ1QL4/3dQORcGv7+J2ookOG2ybA/ga9+HYEXueT2o+8dUJQkpedsyTyCJ6jCCirRcKtdtx1kbg== -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= - -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" - ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -23192,11 +20520,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -underscore@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== - unfetch@^4.1.0, unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -23486,7 +20809,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@^0.12.0, util@^0.12.4: +util@^0.12.0: version "0.12.4" resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== @@ -23513,37 +20836,20 @@ uuid-browser@^3.1.0: resolved "https://registry.yarnpkg.com/uuid-browser/-/uuid-browser-3.1.0.tgz#0f05a40aef74f9e5951e20efbf44b11871e56410" integrity sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg== -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= - uuid@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" - integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== - -uuid@8.3.2, uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuidv4@6.0.6: - version "6.0.6" - resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.0.6.tgz#6966e8dd15760528a0f954843d24fdfdfda5a329" - integrity sha512-10YcruyGJtsG5SJnPG+8atr8toJa7xAOrcO7B7plYYiwpH1mQ8UZHjNSa2MrwGi6KWuyVrXGHr+Rce22F9UAiw== - dependencies: - uuid "7.0.2" +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: version "2.3.0" @@ -23581,12 +20887,7 @@ value-equal@^1.0.1: resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== -varint@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.0.tgz#d826b89f7490732fabc0c0ed693ed475dcb29ebf" - integrity sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8= - -varint@^5.0.0, varint@~5.0.0: +varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== @@ -23652,27 +20953,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.12" -walletlink@^2.1.11: - version "2.2.6" - resolved "https://registry.yarnpkg.com/walletlink/-/walletlink-2.2.6.tgz#cfea3ba94e5ea33e87b0a2f31151a77ee1a59d72" - integrity sha512-4TF1kkpo9aq1QlfKv6jTCEsV8Rc+1RIuXn2EtsTJt9/H02fG3oy7k49sqB4gXZ9CWN48yoXnmSwq1GdkvfYGjw== - dependencies: - "@metamask/safe-event-emitter" "2.0.0" - bind-decorator "^1.0.11" - bn.js "^5.1.1" - buffer "^6.0.3" - clsx "^1.1.0" - eth-block-tracker "4.4.3" - eth-json-rpc-filters "4.2.2" - eth-rpc-errors "4.0.2" - js-sha256 "0.9.0" - json-rpc-engine "6.1.0" - keccak "^3.0.1" - preact "^10.5.9" - rxjs "^6.6.3" - stream-browserify "^3.0.0" - util "^0.12.4" - warning@^4.0.2, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -23687,7 +20967,7 @@ watchpack-chokidar2@^2.0.1: dependencies: chokidar "^2.1.8" -watchpack@^1.4.0, watchpack@^1.7.4: +watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== @@ -23780,7 +21060,7 @@ web3-core@1.6.0, web3-core@^1.6.0: web3-core-requestmanager "1.6.0" web3-utils "1.6.0" -web3-eth-abi@1.6.0, web3-eth-abi@^1.2.1: +web3-eth-abi@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz#4225608f61ebb0607d80849bb2b20f910780253d" integrity sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA== @@ -23805,7 +21085,7 @@ web3-eth-accounts@1.6.0: web3-core-method "1.6.0" web3-utils "1.6.0" -web3-eth-contract@1.6.0, web3-eth-contract@^1.6.0: +web3-eth-contract@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz#deb946867ad86d32bcbba899d733b681b25ea674" integrity sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw== @@ -23880,90 +21160,6 @@ web3-net@1.6.0: web3-core-method "1.6.0" web3-utils "1.6.0" -web3-provider-engine@15.0.4: - version "15.0.4" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.4.tgz#5c336bcad2274dff5218bc8db003fa4e9e464c24" - integrity sha512-Ob9oK0TUZfVC7NXkB7CQSWAiCdCD/Xnlh2zTnV8NdJR8LCrMAy2i6JedU70JHaxw59y7mM4GnsYOTTGkquFnNQ== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^1.0.1" - eth-json-rpc-filters "^4.1.1" - eth-json-rpc-infura "^4.0.1" - eth-json-rpc-middleware "^4.1.5" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - -web3-provider-engine@16.0.1: - version "16.0.1" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-16.0.1.tgz#2600a39ede364cdc0a1fc773bf40a94f2177e605" - integrity sha512-/Eglt2aocXMBiDj7Se/lyZnNDaHBaoJlaUfbP5HkLJQC/HlGbR+3/W+dINirlJDhh7b54DzgykqY7ksaU5QgTg== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-filters "^4.2.1" - eth-json-rpc-infura "^5.1.0" - eth-json-rpc-middleware "^6.0.0" - eth-rpc-errors "^3.0.0" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - -web3-provider-engine@^15.0.4: - version "15.0.12" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.12.tgz#24d7f2f6fb6de856824c7306291018c4fc543ac3" - integrity sha512-/OfhQalKPND1iB5ggvGuYF0+SIb2Qj5OFTrT2VrZWP79UhMTdP7T+L2FtblmRdCeOetoAzZHdBaIwLOZsmIX+w== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^2.0.2" - eth-json-rpc-filters "^4.1.1" - eth-json-rpc-infura "^4.0.1" - eth-json-rpc-middleware "^4.1.5" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - web3-providers-http@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.0.tgz#8db4e589abf7197f5d65b12af1bf9726c45f4160" @@ -23999,20 +21195,7 @@ web3-shh@1.6.0: web3-core-subscriptions "1.6.0" web3-net "1.6.0" -web3-utils@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.1.tgz#21466e38291551de0ab34558de21512ac4274534" - integrity sha512-Mrcn3l58L+yCKz3zBryM6JZpNruWuT0OCbag8w+reeNROSGVlXzUQkU+gtAwc9JCZ7tKUyg67+2YUGqUjVcyBA== - dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randomhex "0.1.5" - underscore "1.9.1" - utf8 "3.0.0" - -web3-utils@1.6.0, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.1, web3-utils@^1.6.0: +web3-utils@1.6.0, web3-utils@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.0.tgz#1975c5ee5b7db8a0836eb7004848a7cd962d1ddc" integrity sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg== @@ -24141,7 +21324,7 @@ webpack-manifest-plugin@2.2.0: object.entries "^1.1.0" tapable "^1.0.0" -webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -24193,34 +21376,6 @@ webpack@4.44.2: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpack@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" - integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - mkdirp "~0.5.0" - node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" - webpack@^4.43.0: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" @@ -24272,18 +21427,6 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -websocket-stream@^5.5.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.5.2.tgz#49d87083d96839f0648f5513bbddd581f496b8a2" - integrity sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ== - dependencies: - duplexify "^3.5.1" - inherits "^2.0.1" - readable-stream "^2.3.3" - safe-buffer "^5.1.2" - ws "^3.2.0" - xtend "^4.0.0" - websocket@^1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" @@ -24303,12 +21446,7 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== - -whatwg-fetch@^3.4.1, whatwg-fetch@^3.5.0: +whatwg-fetch@^3.4.1: version "3.6.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== @@ -24346,11 +21484,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -24411,33 +21544,11 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -wif@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" - integrity sha1-CNP1IFbGZnkplyb63g1DKudLRwQ= - dependencies: - bs58check "<3.0.0" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - workbox-background-sync@^5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz#5ae0bbd455f4e9c319e8d827c055bb86c894fd12" @@ -24605,14 +21716,6 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -24655,22 +21758,12 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== - ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - -ws@^3.0.0, ws@^3.2.0: +ws@^3.0.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== @@ -24679,13 +21772,6 @@ ws@^3.0.0, ws@^3.2.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^5.1.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== - dependencies: - async-limiter "~1.0.0" - ws@^6.2.1: version "6.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" @@ -24735,7 +21821,7 @@ xhr2-cookies@1.1.0: dependencies: cookiejar "^2.1.1" -xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: +xhr@^2.0.4, xhr@^2.3.3: version "2.6.0" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== @@ -24765,11 +21851,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xstream@^11.14.0: version "11.14.0" resolved "https://registry.yarnpkg.com/xstream/-/xstream-11.14.0.tgz#2c071d26b18310523b6877e86b4e54df068a9ae5" @@ -24778,23 +21859,11 @@ xstream@^11.14.0: globalthis "^1.0.1" symbol-observable "^2.0.3" -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -24830,14 +21899,12 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" +yaml@^2.2.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" + integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== -yargs-parser@^13.1.0, yargs-parser@^13.1.2: +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -24853,44 +21920,12 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@^13.2.4, yargs@^13.3.2: +yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -24949,55 +21984,6 @@ yargs@^17.0.1: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"