Hash:
@@ -85,7 +88,7 @@ const ExpandedTx = ({ cancelTx, tx }: ExpandedTxProps): React.ReactElement => {
{!isCreationTx ? (
Fee:
- {tx.fee ? tx.fee : 'n/a'}
+ {tx.fee ? fromWei(toBN(tx.fee)) + ' ETH' : 'n/a'}
) : null}
diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.ts b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.ts
index f149263b7d..d76074bef5 100644
--- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.ts
+++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/style.ts
@@ -1,6 +1,10 @@
import { border, lg, md } from 'src/theme/variables'
const cssStyles = {
+ col: {
+ wordBreak: 'break-word',
+ whiteSpace: 'normal',
+ },
expandedTxBlock: {
borderBottom: `2px solid ${border}`,
},
diff --git a/src/routes/safe/components/Transactions/TxsTable/TxType/index.tsx b/src/routes/safe/components/Transactions/TxsTable/TxType/index.tsx
index fbe5a86079..28c54f67f7 100644
--- a/src/routes/safe/components/Transactions/TxsTable/TxType/index.tsx
+++ b/src/routes/safe/components/Transactions/TxsTable/TxType/index.tsx
@@ -35,7 +35,7 @@ const typeToLabel = {
}
interface TxTypeProps {
- origin?: string
+ origin: string | null
txType: keyof typeof typeToLabel
}
@@ -45,7 +45,11 @@ const TxType = ({ origin, txType }: TxTypeProps): React.ReactElement => {
const [forceCustom, setForceCustom] = useState(false)
useEffect(() => {
- const getAppInfo = async () => {
+ const getAppInfo = async (origin: string | null) => {
+ if (!origin) {
+ return
+ }
+
const parsedOrigin = getAppInfoFromOrigin(origin)
if (!parsedOrigin) {
@@ -60,11 +64,7 @@ const TxType = ({ origin, txType }: TxTypeProps): React.ReactElement => {
setLoading(false)
}
- if (!origin) {
- return
- }
-
- getAppInfo()
+ getAppInfo(origin)
}, [origin, txType])
if (forceCustom || !origin) {
diff --git a/src/routes/safe/components/Transactions/TxsTable/columns.tsx b/src/routes/safe/components/Transactions/TxsTable/columns.tsx
index 4f385bf644..39eca8d5db 100644
--- a/src/routes/safe/components/Transactions/TxsTable/columns.tsx
+++ b/src/routes/safe/components/Transactions/TxsTable/columns.tsx
@@ -50,7 +50,10 @@ export const getIncomingTxAmount = (tx: Transaction, formatted = true): string =
return `1 ${tx.symbol}`
}
- return getAmountWithSymbol(tx, formatted)
+ return getAmountWithSymbol(
+ { decimals: tx.decimals as string, symbol: tx.symbol as string, value: tx.value },
+ formatted,
+ )
}
export const getTxAmount = (tx: Transaction, formatted = true): string => {
@@ -65,10 +68,10 @@ export const getTxAmount = (tx: Transaction, formatted = true): string => {
return NOT_AVAILABLE
}
- return getAmountWithSymbol({ decimals, symbol, value }, formatted)
+ return getAmountWithSymbol({ decimals: decimals as string, symbol: symbol as string, value }, formatted)
}
-interface TableData {
+export interface TableData {
amount: string
cancelTx?: Transaction
date: string
@@ -81,15 +84,15 @@ interface TableData {
const getIncomingTxTableData = (tx: Transaction): TableData => ({
[TX_TABLE_ID]: tx.blockNumber?.toString() ?? '',
- [TX_TABLE_TYPE_ID]:
,
- [TX_TABLE_DATE_ID]: formatDate(tx.executionDate),
- [buildOrderFieldFrom(TX_TABLE_DATE_ID)]: getTime(parseISO(tx.executionDate)),
+ [TX_TABLE_TYPE_ID]:
,
+ [TX_TABLE_DATE_ID]: formatDate(tx.executionDate || '0'),
+ [buildOrderFieldFrom(TX_TABLE_DATE_ID)]: getTime(parseISO(tx.executionDate || '0')),
[TX_TABLE_AMOUNT_ID]: getIncomingTxAmount(tx),
[TX_TABLE_STATUS_ID]: tx.status,
[TX_TABLE_RAW_TX_ID]: tx,
})
-const getTransactionTableData = (tx: Transaction, cancelTx: Transaction): TableData => {
+const getTransactionTableData = (tx: Transaction, cancelTx?: Transaction): TableData => {
const txDate = tx.submissionDate
return {
diff --git a/src/routes/safe/components/Transactions/TxsTable/index.tsx b/src/routes/safe/components/Transactions/TxsTable/index.tsx
index 57033ba43e..522c277a08 100644
--- a/src/routes/safe/components/Transactions/TxsTable/index.tsx
+++ b/src/routes/safe/components/Transactions/TxsTable/index.tsx
@@ -7,7 +7,7 @@ import { withStyles } from '@material-ui/core/styles'
import ExpandLess from '@material-ui/icons/ExpandLess'
import ExpandMore from '@material-ui/icons/ExpandMore'
import cn from 'classnames'
-import React, { useState } from 'react'
+import React, { useState, useEffect } from 'react'
import { useSelector } from 'react-redux'
import ExpandedTxComponent from './ExpandedTx'
@@ -21,6 +21,7 @@ import Block from 'src/components/layout/Block'
import Row from 'src/components/layout/Row'
import { safeCancellationTransactionsSelector } from 'src/logic/safe/store/selectors'
import { extendedTransactionsSelector } from 'src/logic/safe/store/selectors/transactions'
+import { useAnalytics, SAFE_NAVIGATION_EVENT } from 'src/utils/googleAnalytics'
export const TRANSACTION_ROW_TEST_ID = 'transaction-row'
@@ -28,6 +29,11 @@ const TxsTable = ({ classes }) => {
const [expandedTx, setExpandedTx] = useState(null)
const cancellationTransactions = useSelector(safeCancellationTransactionsSelector)
const transactions = useSelector(extendedTransactionsSelector)
+ const { trackEvent } = useAnalytics()
+
+ useEffect(() => {
+ trackEvent({ category: SAFE_NAVIGATION_EVENT, action: 'Transactions' })
+ }, [trackEvent])
const handleTxExpand = (safeTxHash) => {
setExpandedTx((prevTx) => (prevTx === safeTxHash ? null : safeTxHash))
@@ -38,8 +44,8 @@ const TxsTable = ({ classes }) => {
const filteredData = getTxTableData(transactions, cancellationTransactions)
.sort((tx1, tx2) => {
// First order by nonce
- const aNonce = tx1.tx.nonce
- const bNonce = tx1.tx.nonce
+ const aNonce = tx1.tx?.nonce
+ const bNonce = tx1.tx?.nonce
if (aNonce && bNonce) {
const difference = aNonce - bNonce
if (difference !== 0) {
diff --git a/src/routes/safe/components/Transactions/TxsTable/test/column.test.ts b/src/routes/safe/components/Transactions/TxsTable/test/column.test.ts
index 89b0a4998b..75f9fffb38 100644
--- a/src/routes/safe/components/Transactions/TxsTable/test/column.test.ts
+++ b/src/routes/safe/components/Transactions/TxsTable/test/column.test.ts
@@ -1,6 +1,6 @@
import { List, Map } from 'immutable'
import { makeTransaction } from 'src/logic/safe/store/models/transaction'
-import { getTxTableData, TX_TABLE_RAW_CANCEL_TX_ID } from 'src/routes/safe/components/Transactions/TxsTable/columns'
+import { getTxTableData, TX_TABLE_RAW_CANCEL_TX_ID, TableData } from 'src/routes/safe/components/Transactions/TxsTable/columns'
describe('TxsTable Columns > getTxTableData', () => {
it('should include CancelTx object inside TxTableData', () => {
@@ -10,7 +10,7 @@ describe('TxsTable Columns > getTxTableData', () => {
// When
const txTableData = getTxTableData(List([mockedTransaction]), Map( { '1': mockedCancelTransaction }))
- const txRow = txTableData.first()
+ const txRow = txTableData.first() as TableData
// Then
expect(txRow[TX_TABLE_RAW_CANCEL_TX_ID]).toEqual(mockedCancelTransaction)
@@ -22,7 +22,7 @@ describe('TxsTable Columns > getTxTableData', () => {
// When
const txTableData = getTxTableData(List([mockedTransaction]), Map( { '2': mockedCancelTransaction }))
- const txRow = txTableData.first()
+ const txRow = txTableData.first() as TableData
// Then
expect(txRow[TX_TABLE_RAW_CANCEL_TX_ID]).toBeUndefined()
diff --git a/src/routes/safe/container/hooks/useTransactions.tsx b/src/routes/safe/container/hooks/useTransactions.ts
similarity index 97%
rename from src/routes/safe/container/hooks/useTransactions.tsx
rename to src/routes/safe/container/hooks/useTransactions.ts
index a08f649d64..e9699ab6ac 100644
--- a/src/routes/safe/container/hooks/useTransactions.tsx
+++ b/src/routes/safe/container/hooks/useTransactions.ts
@@ -7,7 +7,7 @@ import {
safeAllTransactionsSelector,
safeTotalTransactionsAmountSelector,
} from 'src/logic/safe/store/selectors/allTransactions'
-import { Transaction } from 'src/logic/safe/store/models/types/transactions'
+import { Transaction } from 'src/logic/safe/store/models/types/transactions.d'
import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors'
type Props = {
@@ -19,7 +19,7 @@ export const useTransactions = (props: Props): { transactions: Transaction[]; to
const { offset, limit } = props
const dispatch = useDispatch()
const transactions = useSelector(safeAllTransactionsSelector)
- const safeAddress = useSelector(safeParamAddressFromStateSelector)
+ const safeAddress = useSelector(safeParamAddressFromStateSelector) as string
const totalTransactionsCount = useSelector(safeTotalTransactionsAmountSelector)
useEffect(() => {
async function loadNewTxs() {
diff --git a/src/routes/safe/container/index.tsx b/src/routes/safe/container/index.tsx
index c504a71fb8..2ca98cbf4b 100644
--- a/src/routes/safe/container/index.tsx
+++ b/src/routes/safe/container/index.tsx
@@ -29,7 +29,7 @@ const Container = (): React.ReactElement => {
title: null,
body: null,
footer: null,
- onClose: null,
+ onClose: () => {},
})
const safeAddress = useSelector(safeParamAddressFromStateSelector)
@@ -42,7 +42,7 @@ const Container = (): React.ReactElement => {
const closeGenericModal = () => {
if (modal.onClose) {
- modal.onClose()
+ modal.onClose?.()
}
setModal({
@@ -50,7 +50,7 @@ const Container = (): React.ReactElement => {
title: null,
body: null,
footer: null,
- onClose: null,
+ onClose: () => {},
})
}
@@ -59,22 +59,26 @@ const Container = (): React.ReactElement => {
wrapInSuspense(, null)}
/>
wrapInSuspense(, null)}
/>
- wrapInSuspense(, null)} />
- wrapInSuspense(, null)} />
+ wrapInSuspense(, null)} />
wrapInSuspense(, null)}
+ />
+ wrapInSuspense(, null)}
/>
-
+
{modal.isOpen &&
}
>
diff --git a/src/routes/safe/container/selector.ts b/src/routes/safe/container/selector.ts
index 821790cd0d..f27581d9a6 100644
--- a/src/routes/safe/container/selector.ts
+++ b/src/routes/safe/container/selector.ts
@@ -33,7 +33,7 @@ export const extendedSafeTokensSelector = createSelector(
const extendedTokens = Map
().withMutations((map) => {
safeTokens.forEach((tokenAddress) => {
const baseToken = tokensList.get(tokenAddress)
- const tokenBalance = balances.get(tokenAddress)
+ const tokenBalance = balances?.get(tokenAddress)
if (baseToken) {
map.set(tokenAddress, baseToken.set('balance', tokenBalance || '0'))
diff --git a/src/routes/safe/store/actions/transactions/__tests__/utils.test.ts b/src/routes/safe/store/actions/transactions/__tests__/utils.test.ts
new file mode 100644
index 0000000000..db0b015c06
--- /dev/null
+++ b/src/routes/safe/store/actions/transactions/__tests__/utils.test.ts
@@ -0,0 +1,170 @@
+import { getLastTx, getNewTxNonce, shouldExecuteTransaction } from 'src/logic/safe/store/actions/utils'
+import { getMockedSafeInstance, getMockedTxServiceModel } from 'src/test/utils/safeHelper'
+import axios from 'axios'
+import { buildTxServiceUrl } from 'src/logic/safe/transactions'
+
+describe('shouldExecuteTransaction', () => {
+ it('It should return false if given a safe with a threshold > 1', async () => {
+ // given
+ const nonce = '0'
+ const threshold = '2'
+ const safeInstance = getMockedSafeInstance({ threshold })
+ const lastTx = getMockedTxServiceModel({})
+
+ // when
+ const result = await shouldExecuteTransaction(safeInstance, nonce, lastTx)
+
+ // then
+ expect(result).toBe(false)
+ })
+ it('It should return true if given a safe with a threshold === 1 and the previous transaction is already executed', async () => {
+ // given
+ const nonce = '0'
+ const threshold = '1'
+ const safeInstance = getMockedSafeInstance({ threshold })
+ const lastTx = getMockedTxServiceModel({})
+
+ // when
+ const result = await shouldExecuteTransaction(safeInstance, nonce, lastTx)
+
+ // then
+ expect(result).toBe(true)
+ })
+ it('It should return true if given a safe with a threshold === 1 and the previous transaction is already executed', async () => {
+ // given
+ const nonce = '10'
+ const threshold = '1'
+ const safeInstance = getMockedSafeInstance({ threshold })
+ const lastTx = getMockedTxServiceModel({ isExecuted: true })
+
+ // when
+ const result = await shouldExecuteTransaction(safeInstance, nonce, lastTx)
+
+ // then
+ expect(result).toBe(true)
+ })
+ it('It should return false if given a safe with a threshold === 1 and the previous transaction is not yet executed', async () => {
+ // given
+ const nonce = '10'
+ const threshold = '1'
+ const safeInstance = getMockedSafeInstance({ threshold })
+ const lastTx = getMockedTxServiceModel({ isExecuted: false })
+
+ // when
+ const result = await shouldExecuteTransaction(safeInstance, nonce, lastTx)
+
+ // then
+ expect(result).toBe(false)
+ })
+})
+
+describe('getNewTxNonce', () => {
+ it('It should return 2 if given the last transaction with nonce 1', async () => {
+ // given
+ const safeInstance = getMockedSafeInstance({})
+ const lastTx = getMockedTxServiceModel({ nonce: 1 })
+ const expectedResult = '2'
+
+ // when
+ const result = await getNewTxNonce(undefined, lastTx, safeInstance)
+
+ // then
+ expect(result).toBe(expectedResult)
+ })
+ it('It should return 0 if given a safe with nonce 0 and no transactions should use safe contract instance for retrieving nonce', async () => {
+ // given
+ const safeNonce = '0'
+ const safeInstance = getMockedSafeInstance({ nonce: safeNonce })
+ const expectedResult = '0'
+ const mockFnCall = jest.fn().mockImplementation(() => safeNonce)
+ const mockFnNonce = jest.fn().mockImplementation(() => ({ call: mockFnCall }))
+
+ safeInstance.methods.nonce = mockFnNonce
+
+ // when
+ const result = await getNewTxNonce(undefined, null, safeInstance)
+
+ // then
+ expect(result).toBe(expectedResult)
+ expect(mockFnNonce).toHaveBeenCalled()
+ expect(mockFnCall).toHaveBeenCalled()
+ mockFnNonce.mockRestore()
+ mockFnCall.mockRestore()
+ })
+ it('Given a Safe and the last transaction, should return nonce of the last transaction + 1', async () => {
+ // given
+ const safeInstance = getMockedSafeInstance({})
+ const expectedResult = '11'
+ const lastTx = getMockedTxServiceModel({ nonce: 10 })
+
+ // when
+ const result = await getNewTxNonce(undefined, lastTx, safeInstance)
+
+ // then
+ expect(result).toBe(expectedResult)
+ })
+ it('Given a pre-calculated nonce number should return it', async () => {
+ // given
+ const safeInstance = getMockedSafeInstance({})
+ const expectedResult = '114'
+ const nextNonce = '114'
+
+ // when
+ const result = await getNewTxNonce(nextNonce, null, safeInstance)
+
+ // then
+ expect(result).toBe(expectedResult)
+ })
+})
+
+jest.mock('axios')
+jest.mock('console')
+describe('getLastTx', () => {
+ afterAll(() => {
+ jest.unmock('axios')
+ jest.unmock('console')
+ })
+ const safeAddress = '0xdfA693da0D16F5E7E78FdCBeDe8FC6eBEa44f1Cf'
+ it('It should return the last transaction for a given a safe address', async () => {
+ // given
+ const lastTx = getMockedTxServiceModel({ nonce: 1 })
+ const url = buildTxServiceUrl(safeAddress)
+
+ // when
+ // @ts-ignore
+ axios.get.mockImplementationOnce(() => {
+ return {
+ data: {
+ results: [lastTx],
+ },
+ }
+ })
+
+ const result = await getLastTx(safeAddress)
+
+ // then
+ expect(result).toStrictEqual(lastTx)
+ expect(axios.get).toHaveBeenCalled()
+ expect(axios.get).toBeCalledWith(url, { params: { limit: 1 } })
+ })
+ it('If should return null If catches an error getting last transaction', async () => {
+ // given
+ const lastTx = null
+ const url = buildTxServiceUrl(safeAddress)
+
+ // when
+ // @ts-ignore
+ axios.get.mockImplementationOnce(() => {
+ throw new Error()
+ })
+ console.error = jest.fn()
+ const result = await getLastTx(safeAddress)
+ const spyConsole = jest.spyOn(console, 'error').mockImplementation()
+
+ // then
+ expect(result).toStrictEqual(lastTx)
+ expect(axios.get).toHaveBeenCalled()
+ expect(axios.get).toBeCalledWith(url, { params: { limit: 1 } })
+ expect(spyConsole).toHaveBeenCalled()
+ })
+})
diff --git a/src/routes/safe/store/actions/transactions/utils/multiSendDecodedDetails.ts b/src/routes/safe/store/actions/transactions/utils/multiSendDecodedDetails.ts
index 461051c49b..b03c475126 100644
--- a/src/routes/safe/store/actions/transactions/utils/multiSendDecodedDetails.ts
+++ b/src/routes/safe/store/actions/transactions/utils/multiSendDecodedDetails.ts
@@ -56,7 +56,7 @@ export const extractMultiSendDetails = (parameter: Parameter): MultiSendDetails[
export const extractMultiSendDataDecoded = (tx: Transaction): MultiSendDataDecoded => {
const transfersDetails = tx.transfers?.map(extractTransferDetails)
- const txDetails = extractMultiSendDetails(tx.dataDecoded?.parameters[0])
+ const txDetails = tx.dataDecoded?.parameters[0] ? extractMultiSendDetails(tx.dataDecoded?.parameters[0]) : undefined
return { txDetails, transfersDetails }
}
diff --git a/src/routes/safe/store/actions/transactions/utils/transferDetails.ts b/src/routes/safe/store/actions/transactions/utils/transferDetails.ts
index 6b00126f12..12363dff05 100644
--- a/src/routes/safe/store/actions/transactions/utils/transferDetails.ts
+++ b/src/routes/safe/store/actions/transactions/utils/transferDetails.ts
@@ -20,7 +20,7 @@ const isIncomingTransfer = (transfer: Transfer): boolean => {
export const extractERC20TransferDetails = (transfer: Transfer): ERC20TransferDetails => {
const erc20TransferDetails = {
tokenAddress: transfer.tokenInfo?.address || TxConstants.UNKNOWN,
- value: humanReadableValue(transfer.value, transfer.tokenInfo?.decimals),
+ value: humanReadableValue(transfer.value || 0, transfer.tokenInfo?.decimals),
name: transfer.tokenInfo?.name || transfer.tokenInfo?.symbol || TxConstants.UNKNOWN,
txHash: transfer.transactionHash,
}
@@ -59,7 +59,7 @@ export const extractERC721TransferDetails = (transfer: Transfer): ERC721Transfer
export const extractETHTransferDetails = (transfer: Transfer): ETHTransferDetails => {
const ethTransferDetails = {
- value: humanReadableValue(transfer.value),
+ value: humanReadableValue(transfer.value || 0),
txHash: transfer.transactionHash,
}
if (isIncomingTransfer(transfer)) {
diff --git a/src/store/index.ts b/src/store/index.ts
index 8fc2340868..0b5d7a8d6d 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -6,7 +6,6 @@ import thunk from 'redux-thunk'
import addressBookMiddleware from 'src/logic/addressBook/store/middleware/addressBookMiddleware'
import addressBook, { ADDRESS_BOOK_REDUCER_ID } from 'src/logic/addressBook/store/reducer/addressBook'
-import { AddressBookReducerMap } from 'src/logic/addressBook/store/reducer/types/addressBook.d'
import {
NFT_ASSETS_REDUCER_ID,
NFT_TOKENS_REDUCER_ID,
@@ -19,7 +18,10 @@ import currencyValues, {
CURRENCY_VALUES_KEY,
CurrencyValuesState,
} from 'src/logic/currencyValues/store/reducer/currencyValues'
-import currentSession, { CURRENT_SESSION_REDUCER_ID } from 'src/logic/currentSession/store/reducer/currentSession'
+import currentSession, {
+ CURRENT_SESSION_REDUCER_ID,
+ CurrentSessionState,
+} from 'src/logic/currentSession/store/reducer/currentSession'
import notifications, { NOTIFICATIONS_REDUCER_ID } from 'src/logic/notifications/store/reducer/notifications'
import tokens, { TOKEN_REDUCER_ID, TokenState } from 'src/logic/tokens/store/reducer/tokens'
import providerWatcher from 'src/logic/wallets/store/middlewares/providerWatcher'
@@ -38,6 +40,7 @@ import transactions, { TRANSACTIONS_REDUCER_ID } from 'src/logic/safe/store/redu
import { NFTAssets, NFTTokens } from 'src/logic/collectibles/sources/OpenSea'
import { SafeReducerMap } from 'src/routes/safe/store/reducer/types/safe'
import allTransactions, { TRANSACTIONS, TransactionsState } from '../logic/safe/store/reducer/allTransactions'
+import { AddressBookState } from 'src/logic/addressBook/model/addressBook'
export const history = createHashHistory()
@@ -85,8 +88,8 @@ export type AppReduxState = CombinedState<{
[NOTIFICATIONS_REDUCER_ID]: Map
[CURRENCY_VALUES_KEY]: CurrencyValuesState
[COOKIES_REDUCER_ID]: Map
- [ADDRESS_BOOK_REDUCER_ID]: AddressBookReducerMap
- [CURRENT_SESSION_REDUCER_ID]: Map
+ [ADDRESS_BOOK_REDUCER_ID]: AddressBookState
+ [CURRENT_SESSION_REDUCER_ID]: CurrentSessionState
[TRANSACTIONS]: TransactionsState
router: RouterState
}>
diff --git a/src/test/safe.dom.balances.ts b/src/test/safe.dom.balances.ts
deleted file mode 100644
index 142228fce0..0000000000
--- a/src/test/safe.dom.balances.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-import { waitForElement } from '@testing-library/react'
-import { Set, Map } from 'immutable'
-import { aNewStore } from 'src/store'
-import { sleep } from 'src/utils/timer'
-import { aMinedSafe } from 'src/test/builder/safe.redux.builder'
-import { sendTokenTo, sendEtherTo } from 'src/test/utils/tokenMovements'
-import { renderSafeView } from 'src/test/builder/safe.dom.utils'
-import { dispatchAddTokenToList } from 'src/test/utils/transactions/moveTokens.helper'
-// import { calculateBalanceOf } from 'src/routes/safe/store/actions/fetchTokenBalances'
-import updateActiveTokens from 'src/logic/safe/store/actions/updateActiveTokens'
-import '@testing-library/jest-dom/extend-expect'
-import updateSafe from 'src/logic/safe/store/actions/updateSafe'
-import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances'
-import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3'
-
-describe('DOM > Feature > Balances', () => {
- let store
- let safeAddress
- beforeEach(async () => {
- store = aNewStore()
- safeAddress = await aMinedSafe(store)
- })
-
- it('Updates token balances automatically', async () => {
- const tokensAmount = '100'
- const tokenAddress = await sendTokenTo(safeAddress, tokensAmount)
- await dispatchAddTokenToList(store, tokenAddress)
-
- const SafeDom = await renderSafeView(store, safeAddress)
-
- // Activate token
- const safeTokenBalance = undefined
- // const safeTokenBalance = await calculateBalanceOf(tokenAddress, safeAddress, 18)
- // expect(safeTokenBalance).toBe(tokensAmount)
-
- const balances = Map({
- [tokenAddress]: safeTokenBalance,
- })
- store.dispatch(updateActiveTokens(safeAddress, Set([tokenAddress])))
- store.dispatch(updateSafe({ address: safeAddress, balances }))
- await sleep(1000)
-
- const balanceRows = SafeDom.getAllByTestId(BALANCE_ROW_TEST_ID)
- expect(balanceRows.length).toBe(2)
-
- await waitForElement(() => SafeDom.getByText(`${tokensAmount} OMG`))
-
- await sendTokenTo(safeAddress, tokensAmount)
-
- await waitForElement(() => SafeDom.getByText(`${parseInt(tokensAmount, 10) * 2} OMG`))
- })
-
- it('Updates ether balance automatically', async () => {
- const etherAmount = '1'
- await sendEtherTo(safeAddress, etherAmount)
-
- const SafeDom = await renderSafeView(store, safeAddress)
-
- const safeEthBalance = await getBalanceInEtherOf(safeAddress)
- expect(safeEthBalance).toBe(etherAmount)
-
- const balanceRows = SafeDom.getAllByTestId(BALANCE_ROW_TEST_ID)
- expect(balanceRows.length).toBe(1)
-
- await waitForElement(() => SafeDom.getByText(`${etherAmount} ETH`))
-
- await sendEtherTo(safeAddress, etherAmount)
-
- await waitForElement(() => SafeDom.getByText(`${parseInt(etherAmount, 10) * 2} ETH`))
- })
-})
diff --git a/src/test/tokens.dom.adding.ts b/src/test/tokens.dom.adding.ts
index fa1c5b0f1e..79f770af1a 100644
--- a/src/test/tokens.dom.adding.ts
+++ b/src/test/tokens.dom.adding.ts
@@ -1,83 +1,82 @@
-//
-import { fireEvent } from '@testing-library/react'
-import { getWeb3 } from 'src/logic/wallets/getWeb3'
-import { getFirstTokenContract } from 'src/test/utils/tokenMovements'
-import { aNewStore } from 'src/store'
-import { aMinedSafe } from 'src/test/builder/safe.redux.builder'
-import { renderSafeView } from 'src/test/builder/safe.dom.utils'
-import { sleep } from 'src/utils/timer'
-import { clickOnManageTokens, clickOnAddCustomToken } from 'src/test/utils/DOMNavigation'
-import * as fetchTokensModule from 'src/logic/tokens/store/actions/fetchTokens'
-import {
- ADD_CUSTOM_TOKEN_ADDRESS_INPUT_TEST_ID,
- ADD_CUSTOM_TOKEN_SYMBOLS_INPUT_TEST_ID,
- ADD_CUSTOM_TOKEN_DECIMALS_INPUT_TEST_ID,
- ADD_CUSTOM_TOKEN_FORM,
-} from 'src/routes/safe/components/Balances/Tokens/screens/AddCustomToken'
-import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances/'
-import '@testing-library/jest-dom/extend-expect'
+// import { fireEvent } from '@testing-library/react'
+// import { getWeb3 } from 'src/logic/wallets/getWeb3'
+// import { getFirstTokenContract } from 'src/test/utils/tokenMovements'
+// import { aNewStore } from 'src/store'
+// import { aMinedSafe } from 'src/test/builder/safe.redux.builder'
+// import { renderSafeView } from 'src/test/builder/safe.dom.utils'
+// import { sleep } from 'src/utils/timer'
+// import { clickOnManageTokens, clickOnAddCustomToken } from 'src/test/utils/DOMNavigation'
+// import * as fetchTokensModule from 'src/logic/tokens/store/actions/fetchTokens'
+// import {
+// ADD_CUSTOM_TOKEN_ADDRESS_INPUT_TEST_ID,
+// ADD_CUSTOM_TOKEN_SYMBOLS_INPUT_TEST_ID,
+// ADD_CUSTOM_TOKEN_DECIMALS_INPUT_TEST_ID,
+// ADD_CUSTOM_TOKEN_FORM,
+// } from 'src/routes/safe/components/Balances/Tokens/screens/AddCustomToken'
+// import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances/'
+// import '@testing-library/jest-dom/extend-expect'
+export const TODO = 'TODO'
+// // https://github.com/testing-library/@testing-library/react/issues/281
+// const originalError = console.error
+// beforeAll(() => {
+// console.error = (...args) => {
+// if (/Warning.*not wrapped in act/.test(args[0])) {
+// return
+// }
+// originalError.call(console, ...args)
+// }
+// })
-// https://github.com/testing-library/@testing-library/react/issues/281
-const originalError = console.error
-beforeAll(() => {
- console.error = (...args) => {
- if (/Warning.*not wrapped in act/.test(args[0])) {
- return
- }
- originalError.call(console, ...args)
- }
-})
+// afterAll(() => {
+// console.error = originalError
+// })
-afterAll(() => {
- console.error = originalError
-})
+// describe('DOM > Feature > Add custom ERC 20 Tokens', () => {
+// let web3
+// let accounts
+// let erc20Token
-describe('DOM > Feature > Add custom ERC 20 Tokens', () => {
- let web3
- let accounts
- let erc20Token
+// beforeAll(async () => {
+// web3 = getWeb3()
+// accounts = await web3.eth.getAccounts()
+// erc20Token = await getFirstTokenContract(web3, accounts[0])
+// })
- beforeAll(async () => {
- web3 = getWeb3()
- accounts = await web3.eth.getAccounts()
- erc20Token = await getFirstTokenContract(web3, accounts[0])
- })
+// it('adds and displays an erc 20 token after filling the form', async () => {
+// // GIVEN
+// const store = aNewStore()
+// const safeAddress = await aMinedSafe(store)
+// await store.dispatch(fetchTokensModule.fetchTokens() as any)
+// const TokensDom = renderSafeView(store, safeAddress)
+// await sleep(400)
- it('adds and displays an erc 20 token after filling the form', async () => {
- // GIVEN
- const store = aNewStore()
- const safeAddress = await aMinedSafe(store)
- await store.dispatch(fetchTokensModule.fetchTokens() as any)
- const TokensDom = renderSafeView(store, safeAddress)
- await sleep(400)
+// // WHEN
+// clickOnManageTokens(TokensDom)
+// clickOnAddCustomToken(TokensDom)
+// await sleep(200)
- // WHEN
- clickOnManageTokens(TokensDom)
- clickOnAddCustomToken(TokensDom)
- await sleep(200)
+// // Fill address
+// const addTokenForm = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_FORM)
+// const addressInput = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_ADDRESS_INPUT_TEST_ID)
+// fireEvent.change(addressInput, { target: { value: erc20Token.address } })
+// await sleep(500)
- // Fill address
- const addTokenForm = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_FORM)
- const addressInput = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_ADDRESS_INPUT_TEST_ID)
- fireEvent.change(addressInput, { target: { value: erc20Token.address } })
- await sleep(500)
+// // Check if it loaded symbol/decimals correctly
+// const symbolInput: any = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_SYMBOLS_INPUT_TEST_ID)
+// const decimalsInput: any = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_DECIMALS_INPUT_TEST_ID)
- // Check if it loaded symbol/decimals correctly
- const symbolInput: any = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_SYMBOLS_INPUT_TEST_ID)
- const decimalsInput: any = TokensDom.getByTestId(ADD_CUSTOM_TOKEN_DECIMALS_INPUT_TEST_ID)
+// const tokenSymbol = await erc20Token.symbol()
+// const tokenDecimals = await erc20Token.decimals()
+// expect(symbolInput.value).toBe(tokenSymbol)
+// expect(decimalsInput.value).toBe(tokenDecimals.toString())
- const tokenSymbol = await erc20Token.symbol()
- const tokenDecimals = await erc20Token.decimals()
- expect(symbolInput.value).toBe(tokenSymbol)
- expect(decimalsInput.value).toBe(tokenDecimals.toString())
+// // Submit form
+// fireEvent.submit(addTokenForm)
+// await sleep(300)
- // Submit form
- fireEvent.submit(addTokenForm)
- await sleep(300)
-
- // check if token is displayed
- const balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
- expect(balanceRows.length).toBe(2)
- expect(balanceRows[1]).toHaveTextContent(tokenSymbol)
- })
-})
+// // check if token is displayed
+// const balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
+// expect(balanceRows.length).toBe(2)
+// expect(balanceRows[1]).toHaveTextContent(tokenSymbol)
+// })
+// })
diff --git a/src/test/tokens.dom.enabling.ts b/src/test/tokens.dom.enabling.ts
index 1f22bff7b2..0a3ea15c5f 100644
--- a/src/test/tokens.dom.enabling.ts
+++ b/src/test/tokens.dom.enabling.ts
@@ -1,92 +1,91 @@
-//
-import { waitForElement } from '@testing-library/react'
-import { List } from 'immutable'
-import { getWeb3 } from 'src/logic/wallets/getWeb3'
-import { getFirstTokenContract, getSecondTokenContract } from 'src/test/utils/tokenMovements'
-import { aNewStore } from 'src/store'
-import { aMinedSafe } from 'src/test/builder/safe.redux.builder'
-import { renderSafeView } from 'src/test/builder/safe.dom.utils'
-import { sleep } from 'src/utils/timer'
-import saveTokens from 'src/logic/tokens/store/actions/saveTokens'
-import { clickOnManageTokens, closeManageTokensModal, toggleToken } from './utils/DOMNavigation'
-import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances'
-import { makeToken } from 'src/logic/tokens/store/model/token'
-import '@testing-library/jest-dom/extend-expect'
-import { getActiveTokens } from 'src/logic/tokens/utils/tokensStorage'
+// import { waitForElement } from '@testing-library/react'
+// import { List } from 'immutable'
+// import { getWeb3 } from 'src/logic/wallets/getWeb3'
+// import { getFirstTokenContract, getSecondTokenContract } from 'src/test/utils/tokenMovements'
+// import { aNewStore } from 'src/store'
+// import { aMinedSafe } from 'src/test/builder/safe.redux.builder'
+// import { renderSafeView } from 'src/test/builder/safe.dom.utils'
+// import { sleep } from 'src/utils/timer'
+// import saveTokens from 'src/logic/tokens/store/actions/saveTokens'
+// import { clickOnManageTokens, closeManageTokensModal, toggleToken } from './utils/DOMNavigation'
+// import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances'
+// import { makeToken } from 'src/logic/tokens/store/model/token'
+// import '@testing-library/jest-dom/extend-expect'
+// import { getActiveTokens } from 'src/logic/tokens/utils/tokensStorage'
+export const TODO = 'TODO'
+// describe('DOM > Feature > Enable and disable default tokens', () => {
+// let web3
+// let accounts
+// let firstErc20Token
+// let secondErc20Token
+// let testTokens
-describe('DOM > Feature > Enable and disable default tokens', () => {
- let web3
- let accounts
- let firstErc20Token
- let secondErc20Token
- let testTokens
+// beforeAll(async () => {
+// web3 = getWeb3()
+// accounts = await web3.eth.getAccounts()
- beforeAll(async () => {
- web3 = getWeb3()
- accounts = await web3.eth.getAccounts()
+// firstErc20Token = await getFirstTokenContract(web3, accounts[0])
+// secondErc20Token = await getSecondTokenContract(web3, accounts[0])
+// testTokens = List([
+// makeToken({
+// address: firstErc20Token.address,
+// name: 'First Token Example',
+// symbol: 'FTE',
+// decimals: 18,
+// logoUri: 'https://upload.wikimedia.org/wikipedia/commons/c/c0/Earth_simple_icon.png',
+// }),
+// makeToken({
+// address: secondErc20Token.address,
+// name: 'Second Token Example',
+// symbol: 'STE',
+// decimals: 18,
+// logoUri: 'https://upload.wikimedia.org/wikipedia/commons/c/c0/Earth_simple_icon.png',
+// }),
+// ])
+// })
- firstErc20Token = await getFirstTokenContract(web3, accounts[0])
- secondErc20Token = await getSecondTokenContract(web3, accounts[0])
- testTokens = List([
- makeToken({
- address: firstErc20Token.address,
- name: 'First Token Example',
- symbol: 'FTE',
- decimals: 18,
- logoUri: 'https://upload.wikimedia.org/wikipedia/commons/c/c0/Earth_simple_icon.png',
- }),
- makeToken({
- address: secondErc20Token.address,
- name: 'Second Token Example',
- symbol: 'STE',
- decimals: 18,
- logoUri: 'https://upload.wikimedia.org/wikipedia/commons/c/c0/Earth_simple_icon.png',
- }),
- ])
- })
+// it('allows to enable and disable tokens, stores active ones in the local storage', async () => {
+// // GIVEN
+// const store = aNewStore()
+// const safeAddress = await aMinedSafe(store)
+// await store.dispatch(saveTokens(testTokens))
- it('allows to enable and disable tokens, stores active ones in the local storage', async () => {
- // GIVEN
- const store = aNewStore()
- const safeAddress = await aMinedSafe(store)
- await store.dispatch(saveTokens(testTokens))
+// // WHEN
+// const TokensDom = await renderSafeView(store, safeAddress)
- // WHEN
- const TokensDom = await renderSafeView(store, safeAddress)
+// // Check if only ETH is enabled
+// let balanceRows = await waitForElement(() => TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID))
+// expect(balanceRows.length).toBe(1)
- // Check if only ETH is enabled
- let balanceRows = await waitForElement(() => TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID))
- expect(balanceRows.length).toBe(1)
+// // THEN
+// clickOnManageTokens(TokensDom)
+// await toggleToken(TokensDom, 'FTE')
+// await toggleToken(TokensDom, 'STE')
+// closeManageTokensModal(TokensDom)
- // THEN
- clickOnManageTokens(TokensDom)
- await toggleToken(TokensDom, 'FTE')
- await toggleToken(TokensDom, 'STE')
- closeManageTokensModal(TokensDom)
+// // Wait for active tokens to save
+// await sleep(1500)
- // Wait for active tokens to save
- await sleep(1500)
+// // Check if tokens were enabled
+// balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
+// expect(balanceRows.length).toBe(3)
+// expect(balanceRows[1]).toHaveTextContent('FTE')
+// expect(balanceRows[2]).toHaveTextContent('STE')
+// const tokensFromStorage = await getActiveTokens()
- // Check if tokens were enabled
- balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
- expect(balanceRows.length).toBe(3)
- expect(balanceRows[1]).toHaveTextContent('FTE')
- expect(balanceRows[2]).toHaveTextContent('STE')
- const tokensFromStorage = await getActiveTokens()
+// expect(Object.keys(tokensFromStorage)).toContain(firstErc20Token.address)
+// expect(Object.keys(tokensFromStorage)).toContain(secondErc20Token.address)
- expect(Object.keys(tokensFromStorage)).toContain(firstErc20Token.address)
- expect(Object.keys(tokensFromStorage)).toContain(secondErc20Token.address)
+// // disable tokens
+// clickOnManageTokens(TokensDom)
+// await toggleToken(TokensDom, 'FTE')
+// await toggleToken(TokensDom, 'STE')
+// closeManageTokensModal(TokensDom)
+// await sleep(1500)
- // disable tokens
- clickOnManageTokens(TokensDom)
- await toggleToken(TokensDom, 'FTE')
- await toggleToken(TokensDom, 'STE')
- closeManageTokensModal(TokensDom)
- await sleep(1500)
-
- // check if tokens were disabled
- balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
- expect(balanceRows.length).toBe(1)
- expect(balanceRows[0]).toHaveTextContent('ETH')
- })
-})
+// // check if tokens were disabled
+// balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
+// expect(balanceRows.length).toBe(1)
+// expect(balanceRows[0]).toHaveTextContent('ETH')
+// })
+// })
diff --git a/src/test/utils/safeHelper.ts b/src/test/utils/safeHelper.ts
new file mode 100644
index 0000000000..c260537c06
--- /dev/null
+++ b/src/test/utils/safeHelper.ts
@@ -0,0 +1,163 @@
+//@ts-nocheck
+import { NonPayableTransactionObject } from 'src/types/contracts/types.d'
+import { PromiEvent } from 'web3-core'
+import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d'
+import { ContractOptions, ContractSendMethod, DeployOptions, EventData, PastEventOptions } from 'web3-eth-contract'
+import {
+ ConfirmationServiceModel,
+ TxServiceModel,
+} from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions'
+import { DataDecoded } from 'src/routes/safe/store/models/types/transactions.d'
+import { List, Map } from 'immutable'
+import { PendingActionValues } from 'src/logic/safe/store/models/types/transaction'
+
+const mockNonPayableTransactionObject = (callResult?: string): NonPayableTransactionObject => {
+ return {
+ arguments: [],
+ call: (tx?) => new Promise((resolve) => resolve(callResult || '')),
+ encodeABI: (tx?) => '',
+ estimateGas: (tx?) => new Promise((resolve) => resolve(1000)),
+ send: () => { return {} as PromiEvent}
+ }
+}
+
+type SafeMethodsProps = {
+ threshold?: string
+ nonce?: string
+ isOwnerUserAddress?: string,
+ name?: string,
+ version?: string
+}
+
+export const getMockedSafeInstance = (safeProps: SafeMethodsProps): GnosisSafe => {
+ const { threshold = '1', nonce = '0', isOwnerUserAddress, name = 'safeName', version = '1.0.0' } = safeProps
+ return {
+ defaultAccount: undefined,
+ defaultBlock: undefined,
+ defaultChain: undefined,
+ defaultCommon: undefined,
+ defaultHardfork: undefined,
+ handleRevert: false,
+ options: undefined,
+ transactionBlockTimeout: 0,
+ transactionConfirmationBlocks: 0,
+ transactionPollingTimeout: 0,
+ clone(): GnosisSafe {
+ return undefined;
+ },
+ constructor(jsonInterface: any[], address?: string, options?: ContractOptions): GnosisSafe {
+ return undefined;
+ },
+ deploy(options: DeployOptions): ContractSendMethod {
+ return undefined;
+ },
+ getPastEvents(event: string, options?: PastEventOptions | ((error: Error, event: EventData) => void), callback?: (error: Error, event: EventData) => void): Promise {
+ return undefined;
+ },
+ once(event: "AddedOwner" | "ExecutionFromModuleSuccess" | "EnabledModule" | "ChangedMasterCopy" | "ExecutionFromModuleFailure" | "RemovedOwner" | "ApproveHash" | "DisabledModule" | "SignMsg" | "ExecutionSuccess" | "ChangedThreshold" | "ExecutionFailure", cb: any): void {
+ },
+ events: { } as any,
+ methods: {
+ NAME: (): NonPayableTransactionObject => mockNonPayableTransactionObject(name) as NonPayableTransactionObject,
+ VERSION: (): NonPayableTransactionObject => mockNonPayableTransactionObject(version) as NonPayableTransactionObject,
+ addOwnerWithThreshold: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ approvedHashes: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ changeMasterCopy: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ changeThreshold: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ disableModule: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ domainSeparator: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ enableModule: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ execTransactionFromModule: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ execTransactionFromModuleReturnData: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ getModules: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ getThreshold: (): NonPayableTransactionObject => mockNonPayableTransactionObject(threshold) as NonPayableTransactionObject,
+ isOwner: (): NonPayableTransactionObject => mockNonPayableTransactionObject(isOwnerUserAddress) as NonPayableTransactionObject,
+ nonce: (): NonPayableTransactionObject => mockNonPayableTransactionObject(nonce) as NonPayableTransactionObject,
+ removeOwner: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ setFallbackHandler: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ signedMessages: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ swapOwner: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ setup: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ execTransaction: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ requiredTxGas: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ approveHash: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ signMessage: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ isValidSignature: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ getMessageHash: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ encodeTransactionData: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ getTransactionHash: (): NonPayableTransactionObject => mockNonPayableTransactionObject() as NonPayableTransactionObject,
+ } as any
+ }
+}
+
+type TransactionProps = {
+ baseGas?: number
+ blockNumber?: number | null
+ confirmations?: ConfirmationServiceModel[]
+ confirmationsRequired?: number
+ creationTx?: boolean | null
+ data?: string | null
+ dataDecoded?: DataDecoded
+ ethGasPrice?: string
+ executionDate?: string | null
+ executor?: string
+ fee?: string
+ gasPrice?: string
+ gasToken?: string
+ gasUsed?: number
+ isExecuted?: boolean
+ isSuccessful?: boolean
+ modified?: string
+ nonce?: number | null
+ operation?: number
+ origin?: string | null
+ ownersWithPendingActions?: Map>,
+ recipient?: string,
+ refundParams?: string,
+ refundReceiver?: string
+ safe?: string
+ safeTxGas?: number
+ safeTxHash?: string
+ signatures?: string
+ submissionDate?: string | null
+ to?: string
+ transactionHash?: string | null
+ value?: string
+}
+
+
+export const getMockedTxServiceModel = (txProps: TransactionProps): TxServiceModel => {
+ return {
+ baseGas: 0,
+ confirmations: [],
+ confirmationsRequired: 0,
+ creationTx: false,
+ data: null,
+ ethGasPrice: '',
+ executionDate: '',
+ executor: '',
+ fee: '',
+ gasPrice: '',
+ gasToken: '',
+ gasUsed: 0,
+ isExecuted: false,
+ isSuccessful: false,
+ modified: '',
+ nonce: 0,
+ operation: 0,
+ origin: '',
+ ownersWithPendingActions: Map(),
+ recipient: '',
+ refundParams: '',
+ refundReceiver: '',
+ safe: '',
+ safeTxGas: 0,
+ safeTxHash: '',
+ signatures: '',
+ submissionDate: '',
+ to: '',
+ transactionHash: '',
+ value: '',
+ ...txProps
+ }
+}
diff --git a/src/test/utils/tokenMovements.ts b/src/test/utils/tokenMovements.ts
index 85ffe7e064..e15863d868 100644
--- a/src/test/utils/tokenMovements.ts
+++ b/src/test/utils/tokenMovements.ts
@@ -56,13 +56,13 @@ export const getFirstTokenContract = undefined //ensureOnce(createTokenOMGContra
export const getSecondTokenContract = undefined //ensureOnce(createTokenRDNContract)
export const get6DecimalsTokenContract = undefined //ensureOnce(create6DecimalsTokenContract)
-export const sendTokenTo = async (safe, value, tokenContract?: any) => {
- const web3 = getWeb3()
- const accounts = await web3.eth.getAccounts()
+// export const sendTokenTo = async (safe, value, tokenContract?: any) => {
+// const web3 = getWeb3()
+// const accounts = await web3.eth.getAccounts()
- const OMGToken = tokenContract || (await getFirstTokenContract(web3, accounts[0]))
- const nativeValue = toNative(value, 18)
- await OMGToken.transfer(safe, nativeValue.valueOf(), { from: accounts[0], gas: '5000000' })
+// const OMGToken = tokenContract || (await getFirstTokenContract(web3, accounts[0]))
+// const nativeValue = toNative(value, 18)
+// await OMGToken.transfer(safe, nativeValue.valueOf(), { from: accounts[0], gas: '5000000' })
- return OMGToken.address
-}
+// return OMGToken.address
+// }
diff --git a/src/utils/checksumAddress.ts b/src/utils/checksumAddress.ts
index 674509a37c..b0cd1fdca4 100644
--- a/src/utils/checksumAddress.ts
+++ b/src/utils/checksumAddress.ts
@@ -1,6 +1,5 @@
import { getWeb3 } from 'src/logic/wallets/getWeb3'
export const checksumAddress = (address: string): string => {
- if (!address) return null
return getWeb3().utils.toChecksumAddress(address)
}
diff --git a/src/utils/clipboard.ts b/src/utils/clipboard.ts
index e2b45a91a2..d540a71cca 100644
--- a/src/utils/clipboard.ts
+++ b/src/utils/clipboard.ts
@@ -1,15 +1,15 @@
-export const copyToClipboard = (text) => {
+export const copyToClipboard = (text: string): void => {
const range = document.createRange()
range.selectNodeContents(document.body)
- document.getSelection().addRange(range)
+ document?.getSelection()?.addRange(range)
- function listener(e) {
- e.clipboardData.setData('text/plain', text)
+ function listener(e: ClipboardEvent) {
+ e.clipboardData?.setData('text/plain', text)
e.preventDefault()
}
document.addEventListener('copy', listener)
document.execCommand('copy')
document.removeEventListener('copy', listener)
- document.getSelection().removeAllRanges()
+ document?.getSelection()?.removeAllRanges()
}
diff --git a/src/utils/fetch.ts b/src/utils/fetch.ts
deleted file mode 100644
index faf9f84e19..0000000000
--- a/src/utils/fetch.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export const enhancedFetch = async (url, errMsg) => {
- const header = new Headers({
- 'Access-Control-Allow-Origin': '*',
- })
-
- const sentData: any = {
- mode: 'cors',
- header,
- }
-
- const response = await fetch(url, sentData)
- if (!response.ok) {
- return Promise.reject(new Error(errMsg))
- }
-
- return Promise.resolve(response.json())
-}
diff --git a/src/utils/googleAnalytics.ts b/src/utils/googleAnalytics.ts
index d66c860260..091f6a40bb 100644
--- a/src/utils/googleAnalytics.ts
+++ b/src/utils/googleAnalytics.ts
@@ -1,12 +1,14 @@
import { useCallback, useEffect, useState } from 'react'
-import GoogleAnalytics from 'react-ga'
+import GoogleAnalytics, { EventArgs } from 'react-ga'
import { getGoogleAnalyticsTrackingID } from 'src/config'
import { COOKIES_KEY } from 'src/logic/cookies/model/cookie'
import { loadFromCookie } from 'src/logic/cookies/utils'
+export const SAFE_NAVIGATION_EVENT = 'Safe Navigation'
+
let analyticsLoaded = false
-export const loadGoogleAnalytics = () => {
+export const loadGoogleAnalytics = (): void => {
if (analyticsLoaded) {
return
}
@@ -22,7 +24,12 @@ export const loadGoogleAnalytics = () => {
}
}
-export const useAnalytics = () => {
+type UseAnalyticsResponse = {
+ trackPage: (path: string) => void
+ trackEvent: (event: EventArgs) => void
+}
+
+export const useAnalytics = (): UseAnalyticsResponse => {
const [analyticsAllowed, setAnalyticsAllowed] = useState(false)
useEffect(() => {
@@ -37,18 +44,24 @@ export const useAnalytics = () => {
}, [])
const trackPage = useCallback(
- (page, options = {}) => {
+ (page) => {
if (!analyticsAllowed || !analyticsLoaded) {
return
}
- GoogleAnalytics.set({
- page,
- ...options,
- })
GoogleAnalytics.pageview(page)
},
[analyticsAllowed],
)
- return { trackPage }
+ const trackEvent = useCallback(
+ (event: EventArgs) => {
+ if (!analyticsAllowed || !analyticsLoaded) {
+ return
+ }
+ GoogleAnalytics.event(event)
+ },
+ [analyticsAllowed],
+ )
+
+ return { trackPage, trackEvent }
}
diff --git a/src/utils/intercom.ts b/src/utils/intercom.ts
index 8c2f7ee949..6fb98cbf97 100644
--- a/src/utils/intercom.ts
+++ b/src/utils/intercom.ts
@@ -13,7 +13,7 @@ export const loadIntercom = () => {
s.async = true
s.src = `https://widget.intercom.io/widget/${APP_ID}`
const x = d.getElementsByTagName('script')[0]
- x.parentNode.insertBefore(s, x)
+ x?.parentNode?.insertBefore(s, x)
s.onload = () => {
;(window as any).Intercom('boot', {
diff --git a/src/utils/storage/signatures.ts b/src/utils/storage/signatures.ts
deleted file mode 100644
index 1684fea41c..0000000000
--- a/src/utils/storage/signatures.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { Map } from 'immutable'
-
-import { loadFromStorage, saveToStorage } from 'src/utils/storage'
-
-const getSignaturesKeyFrom = (safeAddress) => `TXS-SIGNATURES-${safeAddress}`
-
-export const storeSignature = async (safeAddress, nonce, signature) => {
- const signaturesKey = getSignaturesKeyFrom(safeAddress)
- const subjects = Map(await loadFromStorage(signaturesKey)) || Map()
-
- try {
- const key = `${nonce}`
- const existingSignatures = subjects.get(key)
- const signatures = existingSignatures ? existingSignatures + signature : signature
- const updatedSubjects = subjects.set(key, signatures)
- await saveToStorage(signaturesKey, updatedSubjects)
- } catch (err) {
- console.error('Error storing signatures in localstorage', err)
- }
-}
-
-export const getSignaturesFrom = (safeAddress, nonce) => {
- const key = getSignaturesKeyFrom(safeAddress)
- const data = loadFromStorage(key)
-
- const signatures = data ? Map(data as any) : Map()
- const txSigs = signatures.get(String(nonce)) || ''
-
- return `0x${txSigs}`
-}
diff --git a/src/utils/storage/transactions.ts b/src/utils/storage/transactions.ts
deleted file mode 100644
index 855f5f3456..0000000000
--- a/src/utils/storage/transactions.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Map } from 'immutable'
-
-import { loadFromStorage, saveToStorage } from 'src/utils/storage'
-
-const getSubjectKeyFrom = (safeAddress) => `TXS-SUBJECTS-${safeAddress}`
-
-export const storeSubject = async (safeAddress, nonce, subject) => {
- const key = getSubjectKeyFrom(safeAddress)
- const subjects = Map(await loadFromStorage(key)) || Map()
-
- try {
- const updatedSubjects = subjects.set(nonce, subject)
- saveToStorage(key, updatedSubjects)
- } catch (err) {
- console.error('Error storing transaction subject in localstorage', err)
- }
-}
diff --git a/src/utils/strings.ts b/src/utils/strings.ts
index f7d41dedcb..ec142be70e 100644
--- a/src/utils/strings.ts
+++ b/src/utils/strings.ts
@@ -16,15 +16,7 @@ export const textShortener = ({ charsEnd = 10, charsStart = 10, ellipsis = '...'
* @param text
* @returns {string|?string}
*/
- (text = null) => {
- if (typeof text !== 'string') {
- throw new TypeError(` A string is required. ${typeof text} was provided instead.`)
- }
-
- if (!text) {
- return ''
- }
-
+ (text = ''): string => {
const amountOfCharsToKeep = charsEnd + charsStart
const finalStringLength = amountOfCharsToKeep + ellipsis.length
diff --git a/tsconfig.json b/tsconfig.json
index ede637e72e..61c5bcc10c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,6 +9,7 @@
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"strict": false,
+ "strictNullChecks": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
diff --git a/yarn.lock b/yarn.lock
index 1a75bcdf73..6c51521608 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -186,11 +186,10 @@
lodash "^4.17.19"
"@babel/helper-explode-assignable-expression@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c"
- integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz#2d8e3470252cc17aba917ede7803d4a7a276a41b"
+ integrity sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==
dependencies:
- "@babel/traverse" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-function-name@^7.10.4":
@@ -263,14 +262,13 @@
lodash "^4.17.19"
"@babel/helper-remap-async-to-generator@^7.10.4":
- version "7.10.4"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5"
- integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz#4474ea9f7438f18575e30b0cac784045b402a12d"
+ integrity sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==
dependencies:
"@babel/helper-annotate-as-pure" "^7.10.4"
"@babel/helper-wrap-function" "^7.10.4"
"@babel/template" "^7.10.4"
- "@babel/traverse" "^7.10.4"
"@babel/types" "^7.10.4"
"@babel/helper-replace-supers@^7.10.4":
@@ -1486,9 +1484,10 @@
"@ethersproject/rlp" "^5.0.0"
"@ethersproject/signing-key" "^5.0.0"
-"@gnosis.pm/safe-apps-sdk@https://github.com/gnosis/safe-apps-sdk.git#development":
- version "0.3.1"
- resolved "https://github.com/gnosis/safe-apps-sdk.git#15c93481812dee9987ad52edd2589a49675d688d"
+"@gnosis.pm/safe-apps-sdk@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-0.4.0.tgz#26c821513c995b9dc023ebbdfe103a832e731521"
+ integrity sha512-hUt/Siz5kSu9jgvMZXejQsxQiUo/NIow67KNAQGfMt7D0S1YoyvpCGAgSliNelY/bP7EanBhhStOnItnu7DwUA==
"@gnosis.pm/safe-contracts@1.1.1-dev.2":
version "1.1.1-dev.2"
@@ -1524,7 +1523,7 @@
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
-"@hapi/address@^4.0.1":
+"@hapi/address@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-4.1.0.tgz#d60c5c0d930e77456fdcde2598e77302e2955e1d"
integrity sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==
@@ -1561,17 +1560,6 @@
"@hapi/hoek" "8.x.x"
"@hapi/topo" "3.x.x"
-"@hapi/joi@^17.1.1":
- version "17.1.1"
- resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-17.1.1.tgz#9cc8d7e2c2213d1e46708c6260184b447c661350"
- integrity sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==
- dependencies:
- "@hapi/address" "^4.0.1"
- "@hapi/formula" "^2.0.0"
- "@hapi/hoek" "^9.0.0"
- "@hapi/pinpoint" "^2.0.0"
- "@hapi/topo" "^5.0.0"
-
"@hapi/pinpoint@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-2.0.0.tgz#805b40d4dbec04fc116a73089494e00f073de8df"
@@ -1749,7 +1737,18 @@
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
-"@ledgerhq/devices@^5.19.1", "@ledgerhq/devices@^5.22.0":
+"@jest/types@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71"
+ integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
+"@ledgerhq/devices@^5.22.0":
version "5.22.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.22.0.tgz#18595f3545b57cf60e50d6e9d83095dda21f575f"
integrity sha512-oJxhee/zlHmIx66zvQQTSpIsHOiiLjALemTX9oUtB4xQwFvoiptPnBCeTDTM9teode7wzk7oE9qdUAZuat+nCg==
@@ -1758,7 +1757,7 @@
"@ledgerhq/logs" "^5.22.0"
rxjs "^6.6.2"
-"@ledgerhq/errors@^5.19.1", "@ledgerhq/errors@^5.22.0":
+"@ledgerhq/errors@^5.22.0":
version "5.22.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.22.0.tgz#7327fc152d4896ddc26aada0943065db21c14880"
integrity sha512-XDT0meBn39+q+JWzUFXmiFbVYLTy+uHRFMb9napcxyZ0Q/MdKkle9/vkgtvRHjPIkGobklXpyefsgH3BZQHukA==
@@ -1773,7 +1772,7 @@
bignumber.js "^9.0.0"
rlp "^2.2.6"
-"@ledgerhq/hw-transport-node-hid-noevents@^5.19.1":
+"@ledgerhq/hw-transport-node-hid-noevents@^5.22.0":
version "5.22.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.22.0.tgz#b5a42a71664fe69bf5fae579854d10e4815a794e"
integrity sha512-6sxrqTcBEGvhVDOS5Vy3mKZgaVOKbHplxm4o/3PmtugJcvpEBvDNGXNh3PMWPtHXXYQ5E5C/qWh7Y+gYshMmTg==
@@ -1784,16 +1783,16 @@
"@ledgerhq/logs" "^5.22.0"
node-hid "^1.3.0"
-"@ledgerhq/hw-transport-node-hid@5.19.1":
- version "5.19.1"
- resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.19.1.tgz#75017ad106a1c8c809ffb255a73f87ea5bfdd51d"
- integrity sha512-8+FvB8MPYfRs6DqxwFjFxe5+7l4uOuwWHP7WXh4lcv26fU3jVOTghOr82YQwE+LPiYeQntViLwsLmp9DUiPQQA==
+"@ledgerhq/hw-transport-node-hid@5.22.0":
+ version "5.22.0"
+ resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.22.0.tgz#00f573bd9163b9c553071af3f2a52aa19d4674c0"
+ integrity sha512-TrSQEGiYXBW8FQS2QEAmk/g+vwcKQ2MZVjPiIaqSCGnwVgmKOXfMetPjwgwr8k6XiQ7YMRdpsXa0GpIvTowqRA==
dependencies:
- "@ledgerhq/devices" "^5.19.1"
- "@ledgerhq/errors" "^5.19.1"
- "@ledgerhq/hw-transport" "^5.19.1"
- "@ledgerhq/hw-transport-node-hid-noevents" "^5.19.1"
- "@ledgerhq/logs" "^5.19.1"
+ "@ledgerhq/devices" "^5.22.0"
+ "@ledgerhq/errors" "^5.22.0"
+ "@ledgerhq/hw-transport" "^5.22.0"
+ "@ledgerhq/hw-transport-node-hid-noevents" "^5.22.0"
+ "@ledgerhq/logs" "^5.22.0"
lodash "^4.17.19"
node-hid "^1.3.0"
usb "^1.6.3"
@@ -1808,7 +1807,7 @@
"@ledgerhq/logs" "^5.22.0"
u2f-api "0.2.7"
-"@ledgerhq/hw-transport@^5.19.1", "@ledgerhq/hw-transport@^5.22.0":
+"@ledgerhq/hw-transport@^5.22.0":
version "5.22.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.22.0.tgz#d627948b43005ec9e7dfe85adf9aa01e130de280"
integrity sha512-MFfkVGYMYnr6fI4XGnJQNLd36JIrRpvd5WBmVSDhCO3UKUER2fJ9koVBGc97o7yXtE5IAlJKF+nR9HZJIa0lRQ==
@@ -1817,7 +1816,7 @@
"@ledgerhq/errors" "^5.22.0"
events "^3.2.0"
-"@ledgerhq/logs@^5.19.1", "@ledgerhq/logs@^5.22.0":
+"@ledgerhq/logs@^5.22.0":
version "5.22.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.22.0.tgz#a54d6b5b391cdb4c2eacc9500feb04b90475c361"
integrity sha512-jV4mJxD1aieORm+sK9bYakQd9GMLd7KAxgt2IaxhrTU+QD5Ne47mxQOTys9p7f5w25ujs3R+Px2t3KiMRASHtg==
@@ -2477,21 +2476,21 @@
dependencies:
defer-to-connect "^1.0.1"
-"@testing-library/dom@^7.17.1":
- version "7.22.2"
- resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.22.2.tgz#6deaa828500993cc94bdd62875c251b5b5b70d69"
- integrity sha512-taxURh+4Lwr//uC1Eghat95aMnTlI4G4ETosnZK0wliwHWdutLDVKIvHXAOYdXGdzrBAy1wNhSGmNBbZ72ml4g==
+"@testing-library/dom@^7.22.3":
+ version "7.23.0"
+ resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.23.0.tgz#c54c0fa53705ad867bcefb52fc0c96487fbc10f6"
+ integrity sha512-H5m090auYH+obdZmsaYLrSWC5OauWD2CvNbz88KBxQJoXgkJzbU0DpAG8BS7Evj5WqCC3nAAKrLS6vw0ljUYLg==
dependencies:
"@babel/runtime" "^7.10.3"
"@types/aria-query" "^4.2.0"
aria-query "^4.2.2"
- dom-accessibility-api "^0.5.0"
- pretty-format "^25.5.0"
+ dom-accessibility-api "^0.5.1"
+ pretty-format "^26.4.2"
-"@testing-library/jest-dom@5.11.2":
- version "5.11.2"
- resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.2.tgz#c49de331555c70127b5d7fc97344ad5265f4c54c"
- integrity sha512-s+rWJx+lanEGKqvOl4qJR0rGjCrxsEjj9qjxFlg4NV4/FRD7fnUUAWPHqwpyafNHfLYArs58FADgdn4UKmjFmw==
+"@testing-library/jest-dom@5.11.4":
+ version "5.11.4"
+ resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.4.tgz#f325c600db352afb92995c2576022b35621ddc99"
+ integrity sha512-6RRn3epuweBODDIv3dAlWjOEHQLpGJHB2i912VS3JQtsD22+ENInhdDNl4ZZQiViLlIfFinkSET/J736ytV9sw==
dependencies:
"@babel/runtime" "^7.9.2"
"@types/testing-library__jest-dom" "^5.9.1"
@@ -2499,25 +2498,16 @@
chalk "^3.0.0"
css "^3.0.0"
css.escape "^1.5.1"
- jest-diff "^25.1.0"
- jest-matcher-utils "^25.1.0"
lodash "^4.17.15"
redent "^3.0.0"
-"@testing-library/react@10.4.8":
- version "10.4.8"
- resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.8.tgz#5eb730291b8fd81cdb2d8877770d060b044ae4a4"
- integrity sha512-clgpFR6QHiRRcdhFfAKDhH8UXpNASyfkkANhtCsCVBnai+O+mK1rGtMES+Apc7ql5Wyxu7j8dcLiC4pV5VblHA==
+"@testing-library/react@10.4.9":
+ version "10.4.9"
+ resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.9.tgz#9faa29c6a1a217bf8bbb96a28bd29d7a847ca150"
+ integrity sha512-pHZKkqUy0tmiD81afs8xfiuseXfU/N7rAX3iKjeZYje86t9VaB0LrxYVa+OOsvkrveX5jCK3IjajVn2MbePvqA==
dependencies:
"@babel/runtime" "^7.10.3"
- "@testing-library/dom" "^7.17.1"
-
-"@testing-library/user-event@12.1.0":
- version "12.1.0"
- resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.1.0.tgz#a2597419466a93e338c91baa7bb22d4da0309d1d"
- integrity sha512-aH/XuNFpPD6dA+fh754EGqKeAzpH66HpLJYkv9vOAih2yGmTM8JiZ8uisQDGWRPkc6sxE2zCqDwLR4ZskhRCxw==
- dependencies:
- "@babel/runtime" "^7.10.2"
+ "@testing-library/dom" "^7.22.3"
"@toruslabs/eccrypto@^1.1.4":
version "1.1.5"
@@ -2548,14 +2538,14 @@
loglevel "^1.6.8"
"@toruslabs/torus-embed@^1.8.2":
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.8.2.tgz#6652b8f751c5f041749ccbfcaa0c08ced5f4f278"
- integrity sha512-SlApK4BavoQYNenoQxjUs9/rrqrGDK5+Z9coABA6J7pLcbSL7QnBl8bKwTTYhI9Hri2GRbUM8XzNNpZfy5RiIQ==
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.8.3.tgz#3c1e5c6ca755628381529402650f00e5c0e4d407"
+ integrity sha512-wI+mDF3oj6QsHPcLrApVEXmddBcIzrB5JMdxR/V5Jag2Rlk3bRFf7VkxI4mXz0+Qf+He6+fa2VXWCITZMlaDeQ==
dependencies:
"@chaitanyapotti/random-id" "^1.0.3"
"@toruslabs/fetch-node-details" "^2.3.0"
"@toruslabs/http-helpers" "^1.3.4"
- "@toruslabs/torus.js" "^2.2.4"
+ "@toruslabs/torus.js" "^2.2.5"
create-hash "^1.2.0"
deepmerge "^4.2.2"
eth-json-rpc-errors "^2.0.2"
@@ -2571,7 +2561,7 @@
safe-event-emitter "^1.0.1"
web3 "^0.20.7"
-"@toruslabs/torus.js@^2.2.4":
+"@toruslabs/torus.js@^2.2.5":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-2.2.5.tgz#8994ae7727d980e2c0600b1154d547260ea52ec4"
integrity sha512-fxrIQmtNo4p3uEy5KdiIrZiB32KGPtaV70PoPg/vQB4IL/gjrQSYSIcC0VyP04yBfjHLccJe/HKOhlofpKcjAg==
@@ -2831,7 +2821,14 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
-"@types/jest@*", "@types/jest@^26.0.9":
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821"
+ integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@*":
version "26.0.10"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.10.tgz#8faf7e9756c033c39014ae76a7329efea00ea607"
integrity sha512-i2m0oyh8w/Lum7wWK/YOZJakYF8Mx08UaKA1CtbmFeDquVhAEdA7znacsVSf2hJ1OQ/OfVMGN90pw/AtzF8s/Q==
@@ -2839,6 +2836,14 @@
jest-diff "^25.2.1"
pretty-format "^25.2.1"
+"@types/jest@^26.0.14":
+ version "26.0.14"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.14.tgz#078695f8f65cb55c5a98450d65083b2b73e5a3f3"
+ integrity sha512-Hz5q8Vu0D288x3iWXePSn53W7hAjP0H7EQ6QvDO9c7t46mR0lNOLlfuwQ+JkVxuhygHzlzPX+0jKdA3ZgSh+Vg==
+ dependencies:
+ jest-diff "^25.2.1"
+ pretty-format "^25.2.1"
+
"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4":
version "7.0.5"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
@@ -2878,10 +2883,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1"
integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g==
-"@types/node@14.6.0":
- version "14.6.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499"
- integrity sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==
+"@types/node@14.11.2":
+ version "14.11.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
+ integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
"@types/node@^10.12.18", "@types/node@^10.3.2":
version "10.17.28"
@@ -3003,10 +3008,10 @@
"@types/prop-types" "*"
csstype "^3.0.2"
-"@types/react@^16.9.47":
- version "16.9.47"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.47.tgz#fb092936f0b56425f874d0ff1b08051fdf70c1ba"
- integrity sha512-dAJO4VbrjYqTUwFiQqAKjLyHHl4RSTNnRyPdX3p16MPbDKvow51wxATUPxoe2QsiXNMEYrOjc2S6s92VjG+1VQ==
+"@types/react@^16.9.49":
+ version "16.9.49"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.49.tgz#09db021cf8089aba0cdb12a49f8021a69cce4872"
+ integrity sha512-DtLFjSj0OYAdVLBbyjhuV9CdGVHCkHn2R+xr3XkBvK2rS1Y1tkc14XSGjYgm5Fjjr90AxH9tiSzc1pCFMGO06g==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
@@ -3040,10 +3045,10 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
-"@types/styled-components@^5.1.2":
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.2.tgz#652af475b4af917b355ea1c3068acae63d46455f"
- integrity sha512-HNocYLfrsnNNm8NTS/W53OERSjRA8dx5Bn6wBd2rXXwt4Z3s+oqvY6/PbVt3e6sgtzI63GX//WiWiRhWur08qQ==
+"@types/styled-components@^5.1.3":
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.3.tgz#6fab3d9c8f7d9a15cbb89d379d850c985002f363"
+ integrity sha512-HGpirof3WOhiX17lb61Q/tpgqn48jxO8EfZkdJ8ueYqwLbK2AHQe/G08DasdA2IdKnmwOIP1s9X2bopxKXgjRw==
dependencies:
"@types/hoist-non-react-statics" "*"
"@types/react" "*"
@@ -3725,9 +3730,9 @@ aes-js@3.1.2, aes-js@^3.1.1:
integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==
aggregate-error@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
- integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
dependencies:
clean-stack "^2.0.0"
indent-string "^4.0.0"
@@ -4273,12 +4278,12 @@ axe-core@^3.5.4:
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227"
integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==
-axios@0.19.2, axios@^0.19.2:
- version "0.19.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
- integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+axios@0.20.0:
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
+ integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==
dependencies:
- follow-redirects "1.5.10"
+ follow-redirects "^1.10.0"
axios@^0.18.0:
version "0.18.1"
@@ -4288,6 +4293,13 @@ axios@^0.18.0:
follow-redirects "1.5.10"
is-buffer "^2.0.2"
+axios@^0.19.2:
+ version "0.19.2"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
+ integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
+ dependencies:
+ follow-redirects "1.5.10"
+
axobject-query@^2.0.2, axobject-query@^2.1.2:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
@@ -5345,10 +5357,10 @@ bn.js@^5.1.1, bn.js@^5.1.2:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
-bnc-onboard@1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.11.1.tgz#da463b0af063d8dc10d9cfbdcadbd40ee8383597"
- integrity sha512-KuPEuVQGr4/oGysFXsJoVCpgyijEjWh6FHZeyP7azf2g6wUW3U7553+TPT72IMyIg47N4h7UfJFLzIZKFM9QMQ==
+bnc-onboard@1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.13.1.tgz#281629e15c01ab47425f9494b33c4ce28a9db01e"
+ integrity sha512-Mv06oWNjkjDNU3vR8l/aJFKTBya5lj6vPfYcl9ONpyyaoY/8neZS4icQrFeRv9nDvENVz6esxcYAyX62f0+rwA==
dependencies:
"@ledgerhq/hw-app-eth" "^5.21.0"
"@ledgerhq/hw-transport-u2f" "^5.21.0"
@@ -6138,7 +6150,7 @@ cli-table3@0.5.1:
optionalDependencies:
colors "^1.1.2"
-cli-truncate@2.1.0, cli-truncate@^2.1.0:
+cli-truncate@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
@@ -6338,10 +6350,10 @@ commander@^4.0.1, commander@^4.1.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
-commander@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
- integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+commander@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc"
+ integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==
common-tags@^1.8.0:
version "1.8.0"
@@ -6405,7 +6417,7 @@ concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.2:
readable-stream "^2.2.2"
typedarray "^0.0.6"
-concurrently@^5.2.0:
+concurrently@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b"
integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==
@@ -6619,6 +6631,17 @@ cosmiconfig@^6.0.0:
path-type "^4.0.0"
yaml "^1.7.2"
+cosmiconfig@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3"
+ integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
coveralls@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b"
@@ -7474,10 +7497,10 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
-dom-accessibility-api@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.0.tgz#fddffd04e178796e241436c3f21be2f89c91afac"
- integrity sha512-eCVf9n4Ni5UQAFc2+fqfMPHdtiX7DA0rLakXgNBZfXNJzEbNo3MQIYd+zdYpFBqAaGYVrkd8leNSLGPrG4ODmA==
+dom-accessibility-api@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.2.tgz#ef3cdb5d3f0d599d8f9c8b18df2fb63c9793739d"
+ integrity sha512-k7hRNKAiPJXD2aBqfahSo4/01cTsKWXf+LqJgglnkN2Nz8TsxXKQBXHhKe0Ye9fEfHEZY49uSA5Sr3AqP/sWKA==
dom-converter@^0.2:
version "0.2.0"
@@ -7663,9 +7686,9 @@ ejs@^2.7.4:
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
ejs@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.3.tgz#514d967a8894084d18d3d47bd169a1c0560f093d"
- integrity sha512-wmtrUGyfSC23GC/B1SMv2ogAUgbQEtDmTIhfqielrG5ExIM9TP4UoYdi90jLF1aTcsWCJNEO0UrgKzP0y3nTSg==
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b"
+ integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==
dependencies:
jake "^10.6.1"
@@ -7699,13 +7722,13 @@ electron-log@4.2.4:
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.2.4.tgz#a13e42a9fc42ca2cc7d2603c3746352efa82112e"
integrity sha512-CXbDU+Iwi+TjKzugKZmTRIORIPe3uQRqgChUl19fkW/reFUn5WP7dt+cNGT3bkLV8xfPilpkPFv33HgtmLLewQ==
-electron-notarize@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-0.3.0.tgz#b93c606306eac558b250c78ff95273ddb9fedf0a"
- integrity sha512-tuDw8H0gcDOalNLv6RM2CwGvUXU60MPGZRDEmd0ppX+yP5XqL8Ec2DuXyz9J7WQSA3aRCfzIgH8C5CAivDYWMw==
+electron-notarize@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz#bc925b1ccc3f79e58e029e8c4706572b01a9fd8f"
+ integrity sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==
dependencies:
debug "^4.1.1"
- fs-extra "^8.1.0"
+ fs-extra "^9.0.1"
electron-publish@22.8.0:
version "22.8.0"
@@ -7756,10 +7779,10 @@ electron-updater@4.3.4:
lodash.isequal "^4.5.0"
semver "^7.3.2"
-electron@7.2.4:
- version "7.2.4"
- resolved "https://registry.yarnpkg.com/electron/-/electron-7.2.4.tgz#9fc0446dae23ead897af8742470cb18da55c6ce9"
- integrity sha512-Z+R692uTzXgP8AHrabE+kkrMlQJ6pnAYoINenwj9QSqaD2YbO8IuXU9DMCcUY0+VpA91ee09wFZJNUKYPMnCKg==
+electron@9.3.0:
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.0.tgz#a4f3dc17f31acc6797eb4c2c4bd0d0e25efb939b"
+ integrity sha512-7zPLEZ+kOjVJqfawMQ0vVuZZRqvZIeiID3tbjjbVybbxXIlFMpZ2jogoh7PV3rLrtm+dKRfu7Qc4E7ob1d0FqQ==
dependencies:
"@electron/get" "^1.0.1"
"@types/node" "^12.0.12"
@@ -7888,7 +7911,7 @@ enhanced-resolve@^4.1.0, enhanced-resolve@^4.3.0:
memory-fs "^0.5.0"
tapable "^1.0.0"
-enquirer@^2.3.5:
+enquirer@^2.3.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
@@ -7941,6 +7964,24 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-
string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1"
+es-abstract@^1.18.0-next.0:
+ version "1.18.0-next.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc"
+ integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.2.0"
+ is-negative-zero "^2.0.0"
+ is-regex "^1.1.1"
+ object-inspect "^1.8.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimend "^1.0.1"
+ string.prototype.trimstart "^1.0.1"
+
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
@@ -8203,7 +8244,7 @@ eslint-plugin-react@7.19.0:
string.prototype.matchall "^4.0.2"
xregexp "^4.3.0"
-eslint-plugin-react@^7.20.5:
+eslint-plugin-react@^7.20.6:
version "7.20.6"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz#4d7845311a93c463493ccfa0a19c9c5d0fd69f60"
integrity sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg==
@@ -8893,11 +8934,16 @@ eventemitter3@4.0.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
-eventemitter3@4.0.4, eventemitter3@^4.0.0:
+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.0:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.5.tgz#51d81e4f1ccc8311a04f0c20121ea824377ea6d9"
+ integrity sha512-QR0rh0YiPuxuDQ6+T9GAO/xWTExXpxIes1Nl9RykNGTnE1HJmkuEfxJH9cubjIOQZ/GH4qNBR4u8VSHaKiWs4g==
+
events@^3.0.0, events@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
@@ -8936,7 +8982,7 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-execa@^4.0.1:
+execa@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2"
integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==
@@ -8986,7 +9032,7 @@ expect@^24.9.0:
jest-message-util "^24.9.0"
jest-regex-util "^24.9.0"
-exponential-backoff@^3.0.1:
+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==
@@ -9451,7 +9497,7 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
-follow-redirects@^1.0.0:
+follow-redirects@^1.0.0, follow-redirects@^1.10.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
@@ -10511,10 +10557,10 @@ immer@1.10.0:
resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==
-immortal-db@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/immortal-db/-/immortal-db-1.0.3.tgz#cd88a1e8ba53646ccc8d7363fd1ee4717ad049c3"
- integrity sha512-KWmEx/5KZumg++Yrj/+LH0vERDf1mXR5UFKKhLla0pwd7r/FttKz80ccO1sHyd5+eoSK2wb/N2WCFxWz9O6JKw==
+immortal-db@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/immortal-db/-/immortal-db-1.1.0.tgz#b0bbff61262bcbc964952954aeb169462e4b6c5c"
+ integrity sha512-RwtZT+FEdXrLQeHHKvQQx6SKlQelrcH7x1SLh5lQVcOZFtUNYPjc/ZaU52SsFI/T5rey+VdM87pxVOGKhuZLVw==
dependencies:
idb-keyval "^3.2.0"
js-cookie "^2.2.1"
@@ -10539,7 +10585,7 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
-import-fresh@^3.0.0, import-fresh@^3.1.0:
+import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
@@ -11011,6 +11057,11 @@ is-natural-number@^4.0.1:
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
+is-negative-zero@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
+ integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
+
is-npm@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
@@ -11084,7 +11135,7 @@ is-plain-object@^3.0.0:
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
-is-regex@^1.0.4, is-regex@^1.1.0:
+is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9"
integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
@@ -11381,7 +11432,7 @@ jest-diff@^24.9.0:
jest-get-type "^24.9.0"
pretty-format "^24.9.0"
-jest-diff@^25.1.0, jest-diff@^25.2.1, jest-diff@^25.5.0:
+jest-diff@^25.2.1:
version "25.5.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
@@ -11513,16 +11564,6 @@ jest-matcher-utils@^24.9.0:
jest-get-type "^24.9.0"
pretty-format "^24.9.0"
-jest-matcher-utils@^25.1.0:
- version "25.5.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867"
- integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==
- dependencies:
- chalk "^3.0.0"
- jest-diff "^25.5.0"
- jest-get-type "^25.2.6"
- pretty-format "^25.5.0"
-
jest-message-util@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
@@ -11732,6 +11773,17 @@ jest@24.9.0:
import-local "^2.0.0"
jest-cli "^24.9.0"
+joi@^17.1.1:
+ version "17.2.1"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.2.1.tgz#e5140fdf07e8fecf9bc977c2832d1bdb1e3f2a0a"
+ integrity sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA==
+ dependencies:
+ "@hapi/address" "^4.1.0"
+ "@hapi/formula" "^2.0.0"
+ "@hapi/hoek" "^9.0.0"
+ "@hapi/pinpoint" "^2.0.0"
+ "@hapi/topo" "^5.0.0"
+
js-base64@^2.1.8:
version "2.6.4"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
@@ -12328,20 +12380,20 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
-lint-staged@10.2.11:
- version "10.2.11"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.11.tgz#713c80877f2dc8b609b05bc59020234e766c9720"
- integrity sha512-LRRrSogzbixYaZItE2APaS4l2eJMjjf5MbclRZpLJtcQJShcvUzKXsNeZgsLIZ0H0+fg2tL4B59fU9wHIHtFIA==
+lint-staged@10.4.0:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.4.0.tgz#d18628f737328e0bbbf87d183f4020930e9a984e"
+ integrity sha512-uaiX4U5yERUSiIEQc329vhCTDDwUcSvKdRLsNomkYLRzijk3v8V9GWm2Nz0RMVB87VcuzLvtgy6OsjoH++QHIg==
dependencies:
- chalk "^4.0.0"
- cli-truncate "2.1.0"
- commander "^5.1.0"
- cosmiconfig "^6.0.0"
+ chalk "^4.1.0"
+ cli-truncate "^2.1.0"
+ commander "^6.0.0"
+ cosmiconfig "^7.0.0"
debug "^4.1.1"
dedent "^0.7.0"
- enquirer "^2.3.5"
- execa "^4.0.1"
- listr2 "^2.1.0"
+ enquirer "^2.3.6"
+ execa "^4.0.3"
+ listr2 "^2.6.0"
log-symbols "^4.0.0"
micromatch "^4.0.2"
normalize-path "^3.0.0"
@@ -12349,10 +12401,10 @@ lint-staged@10.2.11:
string-argv "0.3.1"
stringify-object "^3.3.0"
-listr2@^2.1.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.0.tgz#788a3d202978a1b8582062952cbc49272c8e206a"
- integrity sha512-nwmqTJYQQ+AsKb4fCXH/6/UmLCEDL1jkRAdSn9M6cEUzoRGrs33YD/3N86gAZQnGZ6hxV18XSdlBcJ1GTmetJA==
+listr2@^2.6.0:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-2.6.2.tgz#4912eb01e1e2dd72ec37f3895a56bf2622d6f36a"
+ integrity sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==
dependencies:
chalk "^4.1.0"
cli-truncate "^2.1.0"
@@ -12739,7 +12791,7 @@ matcher@^3.0.0:
dependencies:
escape-string-regexp "^4.0.0"
-material-ui-search-bar@^1.0.0-beta.13:
+material-ui-search-bar@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/material-ui-search-bar/-/material-ui-search-bar-1.0.0.tgz#2652dd5bdc4cb043cffb7144d9c296c120702e62"
integrity sha512-lCNuzMLPBVukVAkcnYKLXHneozsuKZREZNOcc8z9S9scXHqxJzhC9hOS3OC3/YJ+NJEB5lZB9zg1gryBaXEu8w==
@@ -13178,9 +13230,9 @@ mocha@8.0.1:
yargs-unparser "1.6.0"
mock-fs@^4.1.0:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.12.0.tgz#a5d50b12d2d75e5bec9dac3b67ffe3c41d31ade4"
- integrity sha512-/P/HtrlvBxY4o/PzXY9cCNBrdylDNxg7gnrv2sMNxj+UJ2m8jSpl0/A6fuJeNAWr99ZvGWH8XCbE0vmnM5KupQ==
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598"
+ integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA==
moment@2.24.0:
version "2.24.0"
@@ -13353,9 +13405,9 @@ no-case@^3.0.3:
tslib "^1.10.0"
node-abi@^2.18.0, node-abi@^2.7.0:
- version "2.18.0"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4"
- integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.19.0.tgz#11614ff22dd64dad3501074bf656e6923539e17a"
+ integrity sha512-rpKqVe24p9GvMTgtqUXdLR1WQJBGVlkYPU10qHKv9/1i9V/k04MmFLVK2WcHBf1WKKY+ZsdvARPi8F4tfJ4opA==
dependencies:
semver "^5.4.1"
@@ -13675,7 +13727,7 @@ object-hash@^2.0.1:
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea"
integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==
-object-inspect@^1.7.0:
+object-inspect@^1.7.0, object-inspect@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
@@ -13836,7 +13888,7 @@ open@^6.3.0:
dependencies:
is-wsl "^1.1.0"
-open@^7.0.0, open@^7.0.2, open@^7.1.0:
+open@^7.0.0, open@^7.0.2:
version "7.1.0"
resolved "https://registry.yarnpkg.com/open/-/open-7.1.0.tgz#68865f7d3cb238520fa1225a63cf28bcf8368a1c"
integrity sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==
@@ -13844,6 +13896,14 @@ open@^7.0.0, open@^7.0.2, open@^7.1.0:
is-docker "^2.0.0"
is-wsl "^2.1.1"
+open@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4"
+ integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==
+ dependencies:
+ is-docker "^2.0.0"
+ is-wsl "^2.1.1"
+
opencollective-postinstall@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
@@ -14395,6 +14455,13 @@ polished@3.6.5, polished@^3.3.1:
dependencies:
"@babel/runtime" "^7.9.2"
+polished@3.6.7:
+ version "3.6.7"
+ resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.7.tgz#44cbd0047f3187d83db0c479ef0c7d5583af5fb6"
+ integrity sha512-b4OViUOihwV0icb9PHmWbR+vPqaSzSAEbgLskvb7ANPATVXGiYv/TQFHQo65S53WU9i5EQ1I03YDOJW7K0bmYg==
+ dependencies:
+ "@babel/runtime" "^7.9.2"
+
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"
@@ -15152,10 +15219,10 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
-prettier@2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
- integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
+prettier@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
+ integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
prettier@^1.14.2:
version "1.19.1"
@@ -15195,6 +15262,16 @@ pretty-format@^25.2.1, pretty-format@^25.5.0:
ansi-styles "^4.0.0"
react-is "^16.12.0"
+pretty-format@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.2.tgz#d081d032b398e801e2012af2df1214ef75a81237"
+ integrity sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
pretty-hrtime@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
@@ -15486,9 +15563,9 @@ querystring@0.2.0, querystring@^0.2.0:
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
querystringify@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
- integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
quick-lru@^1.0.0:
version "1.1.0"
@@ -15882,7 +15959,7 @@ react-router@5.2.0:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-scripts@^3.4.1:
+react-scripts@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-3.4.3.tgz#21de5eb93de41ee92cd0b85b0e1298d0bb2e6c51"
integrity sha512-oSnoWmii/iKdeQiwaO6map1lUaZLmG0xIUyb/HwCVFLT7gNbj8JZ9RmpvMCZ4fB98ZUMRfNmp/ft8uy/xD1RLA==
@@ -17172,12 +17249,12 @@ shellwords@^0.1.1:
integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
side-channel@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947"
- integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3"
+ integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==
dependencies:
- es-abstract "^1.17.0-next.1"
- object-inspect "^1.7.0"
+ es-abstract "^1.18.0-next.0"
+ object-inspect "^1.8.0"
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.3"
@@ -17929,10 +18006,10 @@ style-loader@^1.0.0:
loader-utils "^2.0.0"
schema-utils "^2.6.6"
-styled-components@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.1.1.tgz#96dfb02a8025794960863b9e8e365e3b6be5518d"
- integrity sha512-1ps8ZAYu2Husx+Vz8D+MvXwEwvMwFv+hqqUwhNlDN5ybg6A+3xyW1ECrAgywhvXapNfXiz79jJyU0x22z0FFTg==
+styled-components@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.0.tgz#6dcb5aa8a629c84b8d5ab34b7167e3e0c6f7ed74"
+ integrity sha512-9qE8Vgp8C5cpGAIdFaQVAl89Zgx1TDM4Yf4tlHbO9cPijtpSXTMLHy9lmP0lb+yImhgPFb1AmZ1qMUubmg3HLg==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@babel/traverse" "^7.4.5"
@@ -18493,15 +18570,6 @@ truffle-interface-adapter@^0.2.5:
lodash "^4.17.13"
web3 "1.2.1"
-truffle@5.1.36:
- version "5.1.36"
- resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.36.tgz#d49c9e0c20558bdee76f442663f81367f62c5559"
- integrity sha512-BXfDrRJmxECsHFu1ZHeQNDdv3OA3vmwQ6Wp5m9yaE0swKcHS+gd8sBdxQBoliiAI0xvUAsD62PRGowqFfT1CLg==
- dependencies:
- app-module-path "^2.2.0"
- mocha "8.0.1"
- original-require "1.0.1"
-
truffle@^5.1.21:
version "5.1.40"
resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.40.tgz#f93a147612b3b083354808dd0abbe6723bd04f7f"
@@ -18653,9 +18721,9 @@ type@^1.0.1:
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
- integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f"
+ integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==
typechain@^2.0.0:
version "2.0.0"
@@ -19095,13 +19163,13 @@ w3c-xmlserializer@^1.1.2:
webidl-conversions "^4.0.2"
xml-name-validator "^3.0.0"
-wait-on@5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.1.0.tgz#b697f21c6fea0908b9c7ad6ed56ace4736768b66"
- integrity sha512-JM0kgaE+V0nCDvSl72iM05W8NDt2E2M56WC5mzR7M+T+k6xjt2yYpyom+xA8RasSunFGzbxIpAXbVzXqtweAnA==
+wait-on@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.0.tgz#6711e74422523279714a36d52cf49fb47c9d9597"
+ integrity sha512-U1D9PBgGw2XFc6iZqn45VBubw02VsLwnZWteQ1au4hUVHasTZuFSKRzlTB2dqgLhji16YVI8fgpEpwUdCr8B6g==
dependencies:
- "@hapi/joi" "^17.1.1"
axios "^0.19.2"
+ joi "^17.1.1"
lodash "^4.17.19"
minimist "^1.2.5"
rxjs "^6.5.5"
@@ -20562,7 +20630,7 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yaml@^1.7.2:
+yaml@^1.10.0, yaml@^1.7.2:
version "1.10.0"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==