From 6d2638410f4178bc2139a48685bfdb559b47899b Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Tue, 23 Jun 2020 10:36:30 -0300 Subject: [PATCH 01/17] Set address book suggestions --- .../screens/AddressBookInput/index.tsx | 2 +- .../EthAddressInput/index.tsx | 47 ++++++++++++++----- .../screens/ContractInteraction/index.tsx | 3 +- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index e3a50f57..0a7d416a 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -50,7 +50,7 @@ const AddressBookInput = ({ }: any) => { const addressBook = useSelector(getAddressBookListSelector) const [isValidForm, setIsValidForm] = useState(true) - const [validationText, setValidationText] = useState(true) + const [validationText, setValidationText] = useState('') const [inputTouched, setInputTouched] = useState(false) const [blurred, setBlurred] = useState(pristine) const [adbkList, setADBKList] = useState(List([])) diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx index 91ddf4df..a4cef3f1 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx @@ -1,7 +1,8 @@ import { makeStyles } from '@material-ui/core/styles' -import React from 'react' +import React, { useState } from 'react' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' +import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import Field from 'src/components/forms/Field' import TextField from 'src/components/forms/TextField' import { @@ -22,12 +23,26 @@ export interface EthAddressProps { name: string onScannedValue: (scannedValue: string) => void text: string + value?: string + pristine: boolean } -const EthAddressInput = ({ isContract = true, isRequired = true, name, onScannedValue, text }: EthAddressProps) => { +const EthAddressInput = ({ + isContract = true, + isRequired = true, + name, + onScannedValue, + text, + value, + pristine, +}: EthAddressProps) => { const classes = useStyles() const validatorsList = [isRequired && required, mustBeEthereumAddress, isContract && mustBeEthereumContractAddress] const validate = composeValidators(...validatorsList.filter((_) => _)) + const [selectedEntry, setSelectedEntry] = useState<{ address?: string; name?: string } | null>({ + address: value, + name: '', + }) const handleScan = (value, closeQrModal) => { let scannedAddress = value @@ -44,15 +59,25 @@ const EthAddressInput = ({ isContract = true, isRequired = true, name, onScanned <> - + {selectedEntry && selectedEntry.address ? ( + + ) : ( + {}} + fieldMutator={onScannedValue} + isCustomTx + pristine={pristine} + /> + )} diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx index 2c4b94a8..d6caadfc 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/index.tsx @@ -100,15 +100,16 @@ const ContractInteraction: React.FC = ({ > {(submitting, validating, rest, mutators) => { setCallResults = mutators.setCallResults - return ( <> From 62270e180b8861759e14f8cb846aa7a86ae2db25 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Wed, 24 Jun 2020 16:39:19 -0300 Subject: [PATCH 02/17] update types --- .../screens/AddressBookInput/index.tsx | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index 0a7d416a..50ef42f2 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -14,6 +14,17 @@ import { getAddressBookListSelector } from 'src/logic/addressBook/store/selector import { getAddressFromENS } from 'src/logic/wallets/getWeb3' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' +export interface AddressBookProps { + classes: any + fieldMutator + isCustomTx: boolean + pristine: boolean + recipientAddress: string + setIsValidAddress: string + setSelectedEntry: string + onScannedValue: (scannedValue: string) => void +} + const textFieldLabelStyle = makeStyles(() => ({ root: { overflow: 'hidden', @@ -30,13 +41,15 @@ const textFieldInputStyle = makeStyles(() => ({ }, })) -const filterAddressBookWithContractAddresses = async (addressBook) => { +const filterAddressBookWithContractAddresses = async (addressBook: Array): Promise => { const abFlags = await Promise.all( - addressBook.map(async ({ address }) => { - return (await mustBeEthereumContractAddress(address)) === undefined - }), + addressBook.map( + async ({ address }: { address: string }): Promise => { + return (await mustBeEthereumContractAddress(address)) === undefined + }, + ), ) - return addressBook.filter((adbkEntry, index) => abFlags[index]) + return addressBook.filter((_, index) => abFlags[index]) } const AddressBookInput = ({ @@ -57,7 +70,7 @@ const AddressBookInput = ({ const [inputAddValue, setInputAddValue] = useState(recipientAddress) - const onAddressInputChanged = async (addressValue) => { + const onAddressInputChanged = async (addressValue: string): Promise => { setInputAddValue(addressValue) let resolvedAddress = addressValue let isValidText @@ -96,7 +109,7 @@ const AddressBookInput = ({ } useEffect(() => { - const filterAdbkContractAddresses = async () => { + const filterAdbkContractAddresses = async (): Promise => { if (!isCustomTx) { setADBKList(addressBook) return From 79fbc2a54bd1b4e0f2ca8cf30e366eeeb014c6ad Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Wed, 24 Jun 2020 16:57:45 -0300 Subject: [PATCH 03/17] Add types for Address book suggestion --- .../SendModal/screens/AddressBookInput/index.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index 313af8e4..5923cd7c 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -16,13 +16,12 @@ import { isValidEnsName } from 'src/logic/wallets/ethAddresses' export interface AddressBookProps { classes: any - fieldMutator - isCustomTx: boolean + fieldMutator: (address: string) => void + isCustomTx?: boolean pristine: boolean - recipientAddress: string - setIsValidAddress: string - setSelectedEntry: string - onScannedValue: (scannedValue: string) => void + recipientAddress?: string + setSelectedEntry: (entry?: any) => void + setIsValidAddress: (valid?: boolean) => void } const textFieldLabelStyle = makeStyles(() => ({ @@ -60,7 +59,7 @@ const AddressBookInput = ({ recipientAddress, setIsValidAddress, setSelectedEntry, -}: any) => { +}: AddressBookProps) => { const addressBook = useSelector(getAddressBookListSelector) const [isValidForm, setIsValidForm] = useState(true) const [validationText, setValidationText] = useState('') From d11142de709f5b65d5ef6405af5bf23fcaa536b2 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Thu, 25 Jun 2020 21:22:17 -0300 Subject: [PATCH 04/17] Update types --- .../Balances/SendModal/screens/AddressBookInput/index.tsx | 4 +++- yarn.lock | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index 5923cd7c..94cf2b62 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -20,7 +20,9 @@ export interface AddressBookProps { isCustomTx?: boolean pristine: boolean recipientAddress?: string - setSelectedEntry: (entry?: any) => void + setSelectedEntry: ( + entry: { address?: string; name?: string } | React.SetStateAction<{ address: any; name: string }>, + ) => void setIsValidAddress: (valid?: boolean) => void } diff --git a/yarn.lock b/yarn.lock index 0bc94691..1e7f3d99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17263,9 +17263,9 @@ web3-provider-engine@^15.0.4: xhr "^2.2.0" xtend "^4.0.1" -"web3-provider-engine@git+https://github.com/trufflesuite/provider-engine.git#web3-one": +"web3-provider-engine@https://github.com/trufflesuite/provider-engine#web3-one": version "14.0.6" - resolved "git+https://github.com/trufflesuite/provider-engine.git#9694f5b4e5500651bd2ff689df8529bb5cf6b96f" + resolved "https://github.com/trufflesuite/provider-engine#9694f5b4e5500651bd2ff689df8529bb5cf6b96f" dependencies: async "^2.5.0" backoff "^2.5.0" From 89100d5158f2f96600981832500a91d6f8181138 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Fri, 26 Jun 2020 13:04:43 -0300 Subject: [PATCH 05/17] Change value validator --- src/components/forms/validator.ts | 8 ++++++++ .../screens/ContractInteraction/SendCustomTx/index.tsx | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/forms/validator.ts b/src/components/forms/validator.ts index ecd3d604..2f5e052e 100644 --- a/src/components/forms/validator.ts +++ b/src/components/forms/validator.ts @@ -40,6 +40,14 @@ export const greaterThan = (min: number | string) => (value: string) => { return `Should be greater than ${min}` } +export const equalOrGreaterThan = (min: number | string) => (value: string) => { + if (Number.isNaN(Number(value)) || Number.parseFloat(value) >= Number(min)) { + return undefined + } + + return `Should be equal or greater than ${min}` +} + const regexQuery = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,}))\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/i const url = new RegExp(regexQuery) export const mustBeUrl = (value: string) => { diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx index 69c172d4..a222e961 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx @@ -19,7 +19,7 @@ import Field from 'src/components/forms/Field' import GnoForm from 'src/components/forms/GnoForm' import TextField from 'src/components/forms/TextField' import TextareaField from 'src/components/forms/TextareaField' -import { composeValidators, maxValue, mustBeFloat, greaterThan } from 'src/components/forms/validator' +import { composeValidators, maxValue, mustBeFloat, equalOrGreaterThan } from 'src/components/forms/validator' import Block from 'src/components/layout/Block' import Button from 'src/components/layout/Button' import ButtonLink from 'src/components/layout/ButtonLink' @@ -230,7 +230,7 @@ const SendCustomTx: React.FC = ({ initialValues, onClose, onNext, contrac placeholder="Value*" text="Value*" type="text" - validate={composeValidators(mustBeFloat, maxValue(ethBalance), greaterThan(0))} + validate={composeValidators(mustBeFloat, maxValue(ethBalance), equalOrGreaterThan(0))} /> From 0587bb91390cf5e54425b54b9eed508c8392dd8f Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Mon, 29 Jun 2020 13:48:46 -0300 Subject: [PATCH 06/17] Fix types + improve form values --- src/components/forms/validator.ts | 2 +- .../SendModal/screens/AddressBookInput/index.tsx | 16 ++++++++++------ .../SendModal/screens/AddressBookInput/style.ts | 4 +++- .../EthAddressInput/index.tsx | 15 ++++++++------- .../screens/ContractInteraction/index.tsx | 2 -- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/components/forms/validator.ts b/src/components/forms/validator.ts index 2f5e052e..8cf59811 100644 --- a/src/components/forms/validator.ts +++ b/src/components/forms/validator.ts @@ -40,7 +40,7 @@ export const greaterThan = (min: number | string) => (value: string) => { return `Should be greater than ${min}` } -export const equalOrGreaterThan = (min: number | string) => (value: string) => { +export const equalOrGreaterThan = (min: number | string) => (value: string): undefined | string => { if (Number.isNaN(Number(value)) || Number.parseFloat(value) >= Number(min)) { return undefined } diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index 94cf2b62..fc6915ae 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -15,17 +15,18 @@ import { getAddressFromENS } from 'src/logic/wallets/getWeb3' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' export interface AddressBookProps { - classes: any fieldMutator: (address: string) => void isCustomTx?: boolean pristine: boolean recipientAddress?: string setSelectedEntry: ( - entry: { address?: string; name?: string } | React.SetStateAction<{ address: any; name: string }>, + entry: { address?: string; name?: string } | React.SetStateAction<{ address: string; name: string }>, ) => void setIsValidAddress: (valid?: boolean) => void } +const useStyles = makeStyles(styles) + const textFieldLabelStyle = makeStyles(() => ({ root: { overflow: 'hidden', @@ -42,7 +43,9 @@ const textFieldInputStyle = makeStyles(() => ({ }, })) -const filterAddressBookWithContractAddresses = async (addressBook: Array): Promise => { +const filterAddressBookWithContractAddresses = async ( + addressBook: List<{ address: string }>, +): Promise> => { const abFlags = await Promise.all( addressBook.map( async ({ address }: { address: string }): Promise => { @@ -50,11 +53,11 @@ const filterAddressBookWithContractAddresses = async (addressBook: Array): }, ), ) + return addressBook.filter((_, index) => abFlags[index]) } const AddressBookInput = ({ - classes, fieldMutator, isCustomTx, pristine, @@ -62,12 +65,13 @@ const AddressBookInput = ({ setIsValidAddress, setSelectedEntry, }: AddressBookProps) => { + const classes = useStyles() const addressBook = useSelector(getAddressBookListSelector) const [isValidForm, setIsValidForm] = useState(true) - const [validationText, setValidationText] = useState('') + const [validationText, setValidationText] = useState('') const [inputTouched, setInputTouched] = useState(false) const [blurred, setBlurred] = useState(pristine) - const [adbkList, setADBKList] = useState(List([])) + const [adbkList, setADBKList] = useState>(List([])) const [inputAddValue, setInputAddValue] = useState(recipientAddress) diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts index b7468d06..b6d2d076 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/style.ts @@ -1,4 +1,6 @@ -export const styles = () => ({ +import { createStyles } from '@material-ui/core' + +export const styles = createStyles({ itemOptionList: { display: 'flex', }, diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx index a4cef3f1..d846772f 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx @@ -1,5 +1,6 @@ import { makeStyles } from '@material-ui/core/styles' import React, { useState } from 'react' +import { useFormState, useField } from 'react-final-form' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' @@ -17,14 +18,12 @@ import { styles } from 'src/routes/safe/components/Balances/SendModal/screens/Co const useStyles = makeStyles(styles) -export interface EthAddressProps { +export interface AddressBookInputProps { isContract?: boolean isRequired?: boolean name: string onScannedValue: (scannedValue: string) => void text: string - value?: string - pristine: boolean } const EthAddressInput = ({ @@ -33,12 +32,14 @@ const EthAddressInput = ({ name, onScannedValue, text, - value, - pristine, -}: EthAddressProps) => { +}: AddressBookInputProps) => { const classes = useStyles() const validatorsList = [isRequired && required, mustBeEthereumAddress, isContract && mustBeEthereumContractAddress] const validate = composeValidators(...validatorsList.filter((_) => _)) + const { pristine } = useFormState({ subscription: { pristine: true } }) + const { + input: { value }, + } = useField('contractAddress', { subscription: { value: true } }) const [selectedEntry, setSelectedEntry] = useState<{ address?: string; name?: string } | null>({ address: value, name: '', @@ -59,7 +60,7 @@ const EthAddressInput = ({ <> - {selectedEntry && selectedEntry.address ? ( + {selectedEntry?.address ? ( = ({ From 36e78e00b4a7a1bcf619bd11980120ab881b8bb0 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Fri, 3 Jul 2020 09:23:30 -0300 Subject: [PATCH 07/17] (Fix) - Settings ui break (#1073) * Adds useWindowDimensions hook Uses useWindowDimensions hook to render the address on ownerAddressTable depending of the size of the screen * Fix table width for medium sizes * Reduces padding for medium screen sizes Also simplifies js logic for adding cut addresses * Adjust the padding for larger screens * Adjust the padding for larger screens Co-authored-by: Mikhail Mikheev --- src/components/layout/Page/index.module.scss | 9 ++++++- .../OwnerAddressTableCell/index.tsx | 17 ++++++++++++- .../container/hooks/useWindowDimensions.tsx | 24 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/routes/safe/container/hooks/useWindowDimensions.tsx diff --git a/src/components/layout/Page/index.module.scss b/src/components/layout/Page/index.module.scss index 2e3e196f..26c03497 100644 --- a/src/components/layout/Page/index.module.scss +++ b/src/components/layout/Page/index.module.scss @@ -9,10 +9,17 @@ @media only screen and (max-width: #{$screenLg}px) { .page { - padding: 72px $lg 0px $lg; + padding: 72px $lg 0 $lg; } } +@media only screen and (min-width: #{$screenLg}px) and (max-width: 1360px) { + .page { + padding: 96px 120px 0 120px; + } +} + + .center { align-self: center; } diff --git a/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx b/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx index 961feb5f..671d4cea 100644 --- a/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx @@ -4,16 +4,31 @@ import EtherScanLink from 'src/components/EtherscanLink' import Identicon from 'src/components/Identicon' import Block from 'src/components/layout/Block' import Paragraph from 'src/components/layout/Paragraph' +import { useWindowDimensions } from '../../../../container/hooks/useWindowDimensions' +import { useEffect, useState } from 'react' const OwnerAddressTableCell = (props) => { const { address, knownAddress, showLinks, userName } = props + const [cut, setCut] = useState(undefined) + const { width } = useWindowDimensions() + + useEffect(() => { + if (width <= 900) { + setCut(6) + } else if (width <= 1024) { + setCut(12) + } else { + setCut(undefined) + } + }, [width]) + return ( {showLinks ? (
{userName} - +
) : ( {address} diff --git a/src/routes/safe/container/hooks/useWindowDimensions.tsx b/src/routes/safe/container/hooks/useWindowDimensions.tsx new file mode 100644 index 00000000..3a5cd9cf --- /dev/null +++ b/src/routes/safe/container/hooks/useWindowDimensions.tsx @@ -0,0 +1,24 @@ +import { useState, useEffect } from 'react' + +function getWindowDimensions() { + const { innerWidth: width, innerHeight: height } = window + return { + width, + height, + } +} + +export const useWindowDimensions = (): { width: number; height: number } => { + const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions()) + + useEffect(() => { + function handleResize() { + setWindowDimensions(getWindowDimensions()) + } + + window.addEventListener('resize', handleResize) + return () => window.removeEventListener('resize', handleResize) + }, []) + + return windowDimensions +} From 72a13f8c74a8778aa3f912a0acd2593edb1f0f92 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Fri, 3 Jul 2020 14:48:18 -0300 Subject: [PATCH 08/17] Update name in props --- .../screens/ContractInteraction/EthAddressInput/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx index d846772f..0c11b16e 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/EthAddressInput/index.tsx @@ -18,7 +18,7 @@ import { styles } from 'src/routes/safe/components/Balances/SendModal/screens/Co const useStyles = makeStyles(styles) -export interface AddressBookInputProps { +export interface EthAddressInputProps { isContract?: boolean isRequired?: boolean name: string @@ -32,7 +32,7 @@ const EthAddressInput = ({ name, onScannedValue, text, -}: AddressBookInputProps) => { +}: EthAddressInputProps) => { const classes = useStyles() const validatorsList = [isRequired && required, mustBeEthereumAddress, isContract && mustBeEthereumContractAddress] const validate = composeValidators(...validatorsList.filter((_) => _)) From ab7fab365f98c80f62ecb34debca11b84d8befe8 Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Mon, 6 Jul 2020 14:41:55 +0400 Subject: [PATCH 09/17] check if there as a pending transaction before marking transaction as a cancellation one --- .../fetchTransactions/loadOutgoingTransactions.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index 9b2f8000..6c0f2736 100644 --- a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -79,7 +79,10 @@ export type BatchProcessTxsProps = OutgoingTxs & { const extractCancelAndOutgoingTxs = (safeAddress: string, outgoingTxs: TxServiceModel[]): OutgoingTxs => { return outgoingTxs.reduce( (acc, transaction) => { - if (isCancelTransaction(transaction, safeAddress)) { + if ( + isCancelTransaction(transaction, safeAddress) && + outgoingTxs.find((tx) => tx.nonce === transaction.nonce && !isCancelTransaction(tx, safeAddress)) + ) { if (!isNaN(Number(transaction.nonce))) { acc.cancellationTxs[transaction.nonce] = transaction } From 0f4c1325fd0ba0b131f5bfbd2ce6872c97b984a8 Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Mon, 6 Jul 2020 14:42:33 +0400 Subject: [PATCH 10/17] update pkg.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4170f76..9d374de8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "safe-react", - "version": "2.5.0", + "version": "2.5.1", "description": "Allowing crypto users manage funds in a safer way", "website": "https://github.com/gnosis/safe-react#readme", "bugs": { From d5f05536c371b49cf77ddf6d3533f33313799189 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Mon, 6 Jul 2020 09:54:49 -0300 Subject: [PATCH 11/17] (Hotfix) Tx decoding (#1094) * Add types * Fix missing condition * Update Version --- package.json | 2 +- src/logic/tokens/store/actions/fetchTokens.ts | 4 ++-- src/logic/tokens/utils/tokenHelpers.ts | 13 +++++++++---- .../fetchTransactions/loadOutgoingTransactions.ts | 2 +- .../transactions/utils/transactionHelpers.ts | 4 ++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 9d374de8..2f226d9c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "safe-react", - "version": "2.5.1", + "version": "2.5.2", "description": "Allowing crypto users manage funds in a safer way", "website": "https://github.com/gnosis/safe-react#readme", "bugs": { diff --git a/src/logic/tokens/store/actions/fetchTokens.ts b/src/logic/tokens/store/actions/fetchTokens.ts index 83d551f2..a2156698 100644 --- a/src/logic/tokens/store/actions/fetchTokens.ts +++ b/src/logic/tokens/store/actions/fetchTokens.ts @@ -9,7 +9,7 @@ import saveTokens from './saveTokens' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { fetchTokenList } from 'src/logic/tokens/api' -import { makeToken } from 'src/logic/tokens/store/model/token' +import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { tokensSelector } from 'src/logic/tokens/store/selectors' import { getWeb3 } from 'src/logic/wallets/getWeb3' import { store } from 'src/store' @@ -57,7 +57,7 @@ const getTokenValues = (tokenAddress) => methods: ['decimals', 'name', 'symbol'], }) -export const getTokenInfos = async (tokenAddress) => { +export const getTokenInfos = async (tokenAddress: string): Promise => { if (!tokenAddress) { return null } diff --git a/src/logic/tokens/utils/tokenHelpers.ts b/src/logic/tokens/utils/tokenHelpers.ts index 4fab2c79..24ecffe4 100644 --- a/src/logic/tokens/utils/tokenHelpers.ts +++ b/src/logic/tokens/utils/tokenHelpers.ts @@ -10,6 +10,7 @@ import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' import { isEmptyData } from 'src/routes/safe/store/actions/transactions/utils/transactionHelpers' import { TxServiceModel } from 'src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions' +import { Map } from 'immutable' export const ETH_ADDRESS = '0x000' export const SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH = '42842e0e' @@ -39,11 +40,15 @@ export const isAddressAToken = async (tokenAddress: string): Promise => return call !== '0x' } -export const isTokenTransfer = (tx: any): boolean => { +export const isTokenTransfer = (tx: TxServiceModel): boolean => { return !isEmptyData(tx.data) && tx.data.substring(0, 10) === '0xa9059cbb' && Number(tx.value) === 0 } -export const isSendERC721Transaction = (tx: any, txCode: string, knownTokens: any) => { +export const isSendERC721Transaction = ( + tx: TxServiceModel, + txCode: string, + knownTokens: Map, +): boolean => { // "0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85" - ens token contract, includes safeTransferFrom // but no proper ERC721 standard implemented return ( @@ -79,9 +84,9 @@ export const getERC20DecimalsAndSymbol = async ( address: tokenAddress, methods: ['decimals', 'symbol'], }) - return { decimals: Number(tokenDecimals), symbol: tokenSymbol } } + return { decimals: storedTokenInfo.decimals as number, symbol: storedTokenInfo.symbol } } catch (err) { console.error(`Failed to retrieve token info for ERC20 token ${tokenAddress}`) } @@ -92,7 +97,7 @@ export const getERC20DecimalsAndSymbol = async ( export const isSendERC20Transaction = async ( tx: TxServiceModel, txCode: string, - knownTokens: any, + knownTokens: Map, ): Promise => { let isSendTokenTx = !isSendERC721Transaction(tx, txCode, knownTokens) && isTokenTransfer(tx) diff --git a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index 6c0f2736..b88911bc 100644 --- a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -66,7 +66,7 @@ export type OutgoingTxs = { export type BatchProcessTxsProps = OutgoingTxs & { currentUser?: string - knownTokens: Record + knownTokens: Map safe: SafeRecord } diff --git a/src/routes/safe/store/actions/transactions/utils/transactionHelpers.ts b/src/routes/safe/store/actions/transactions/utils/transactionHelpers.ts index ba8de692..6b96983d 100644 --- a/src/routes/safe/store/actions/transactions/utils/transactionHelpers.ts +++ b/src/routes/safe/store/actions/transactions/utils/transactionHelpers.ts @@ -85,7 +85,7 @@ export const isCustomTransaction = async ( tx: TxServiceModel, txCode: string, safeAddress: string, - knownTokens: Record, + knownTokens: Map, ): Promise => { return ( isOutgoingTransaction(tx, safeAddress) && @@ -340,7 +340,7 @@ export const mockTransaction = (tx: TxToMock, safeAddress: string, state): Promi ...tx, } - const knownTokens: Record = state[TOKEN_REDUCER_ID] + const knownTokens: Map = state[TOKEN_REDUCER_ID] const safe: SafeRecord = state[SAFE_REDUCER_ID].getIn([SAFE_REDUCER_ID, safeAddress]) const cancellationTxs = state[CANCELLATION_TRANSACTIONS_REDUCER_ID].get(safeAddress) || Map() const outgoingTxs = state[TRANSACTIONS_REDUCER_ID].get(safeAddress) || List() From 54ed00564bc312fb85b190537c13aab85e0b2669 Mon Sep 17 00:00:00 2001 From: Mikhail Mikheev Date: Mon, 6 Jul 2020 19:04:31 +0400 Subject: [PATCH 12/17] 2.5.1 Dev <- master backmerge (#1093) * check if there as a pending transaction before marking transaction as a cancellation one * update pkg.json --- package.json | 2 +- .../fetchTransactions/loadOutgoingTransactions.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b4170f76..9d374de8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "safe-react", - "version": "2.5.0", + "version": "2.5.1", "description": "Allowing crypto users manage funds in a safer way", "website": "https://github.com/gnosis/safe-react#readme", "bugs": { diff --git a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index 9b2f8000..6c0f2736 100644 --- a/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/routes/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -79,7 +79,10 @@ export type BatchProcessTxsProps = OutgoingTxs & { const extractCancelAndOutgoingTxs = (safeAddress: string, outgoingTxs: TxServiceModel[]): OutgoingTxs => { return outgoingTxs.reduce( (acc, transaction) => { - if (isCancelTransaction(transaction, safeAddress)) { + if ( + isCancelTransaction(transaction, safeAddress) && + outgoingTxs.find((tx) => tx.nonce === transaction.nonce && !isCancelTransaction(tx, safeAddress)) + ) { if (!isNaN(Number(transaction.nonce))) { acc.cancellationTxs[transaction.nonce] = transaction } From 26a358a3afb5c399a7e7610118b8a5891a6f1cc4 Mon Sep 17 00:00:00 2001 From: Agustin Pane Date: Mon, 6 Jul 2020 16:34:14 -0300 Subject: [PATCH 13/17] (Feature) - 1029 Improve Polling behaviour (#1047) * Adds exponential backOff for fetch methods * Avoid multiple requests before the last finished * Removes unused dependency * Adds try catch * Fix isFetchingData variable initialization * Add return type to fetchAllUserCollectiblesByCategoryAsync * Improve typings for fetchSafeTokens * Add more types * Improve types usage * Improve types usage * Refactor useCheckForUpdates to avoid calling the actions before they finished * Updates typing in OpenSea.ts * Update store types * Update store types * Remove unused promises * useCheckForUPdates & useFetchTokens refactor wip * enhanced safe state/selector types * refactor useCheckForUpdates * improve comment in useSafeScheduledUpdaates * type enhancements * use checksumAddress to checksum an address * dep bump Co-authored-by: Mikhail Mikheev Co-authored-by: Mati Dastugue --- package.json | 45 +- src/config/index.ts | 5 +- src/logic/collectibles/sources/OpenSea.ts | 62 +- src/logic/collectibles/sources/index.ts | 7 +- .../store/actions/fetchCollectibles.ts | 23 +- .../collectibles/store/selectors/index.ts | 6 +- .../tokens/store/actions/fetchSafeTokens.ts | 12 +- src/routes/load/container/Load.tsx | 13 +- src/routes/safe/components/Balances/index.tsx | 2 +- .../container/hooks/useCheckForUpdates.tsx | 31 - .../safe/container/hooks/useFetchTokens.tsx | 16 +- .../hooks/useSafeScheduledUpdates.tsx | 46 + .../safe/container/{index.jsx => index.tsx} | 6 +- .../safe/store/actions/fetchEtherBalance.ts | 10 +- src/routes/safe/store/actions/fetchSafe.ts | 3 +- .../transactions/fetchTransactions/index.ts | 43 +- src/routes/safe/store/reducer/safe.ts | 25 +- src/routes/safe/store/reducer/types/safe.d.ts | 19 + src/routes/safe/store/selectors/index.ts | 60 +- src/store/index.ts | 27 +- src/utils/checksumAddress.ts | 2 +- yarn.lock | 909 ++++++++---------- 22 files changed, 688 insertions(+), 684 deletions(-) delete mode 100644 src/routes/safe/container/hooks/useCheckForUpdates.tsx create mode 100644 src/routes/safe/container/hooks/useSafeScheduledUpdates.tsx rename src/routes/safe/container/{index.jsx => index.tsx} (91%) create mode 100644 src/routes/safe/store/reducer/types/safe.d.ts diff --git a/package.json b/package.json index 9d374de8..2099c2b3 100644 --- a/package.json +++ b/package.json @@ -151,28 +151,29 @@ "@gnosis.pm/safe-contracts": "1.1.1-dev.2", "@gnosis.pm/safe-react-components": "^0.1.3", "@gnosis.pm/util-contracts": "2.0.6", - "@ledgerhq/hw-transport-node-hid": "5.16.0", - "@material-ui/core": "4.10.1", + "@ledgerhq/hw-transport-node-hid": "5.19.0", + "@material-ui/core": "4.11.0", "@material-ui/icons": "4.9.1", "@material-ui/lab": "4.0.0-alpha.39", - "@openzeppelin/contracts": "3.0.2", + "@openzeppelin/contracts": "3.1.0", "async-sema": "^3.1.0", "axios": "0.19.2", "bignumber.js": "9.0.0", - "bnc-onboard": "1.10.0", + "bnc-onboard": "1.10.2", "classnames": "^2.2.6", "concurrently": "^5.2.0", "connected-react-router": "6.8.0", "currency-flags": "2.1.2", "date-fns": "2.14.0", "electron-is-dev": "^1.1.0", - "electron-log": "4.2.1", - "electron-settings": "^4.0.0", + "electron-log": "4.2.2", + "electron-settings": "4.0.2", "electron-updater": "4.3.1", "eth-sig-util": "^2.5.3", "ethereum-blockies-base64": "^1.0.2", + "exponential-backoff": "^3.0.1", "express": "^4.17.1", - "final-form": "^4.20.0", + "final-form": "4.20.1", "final-form-calculate": "^1.3.1", "history": "4.10.1", "immortal-db": "^1.0.2", @@ -182,9 +183,9 @@ "material-ui-search-bar": "^1.0.0-beta.13", "notistack": "https://github.com/gnosis/notistack.git#v0.9.4", "open": "^7.0.3", - "polished": "3.6.4", + "polished": "3.6.5", "qrcode.react": "1.0.0", - "query-string": "6.13.0", + "query-string": "6.13.1", "react": "16.13.1", "react-dom": "16.13.1", "react-final-form": "^6.5.0", @@ -204,20 +205,20 @@ "semver": "7.3.2", "styled-components": "^5.0.1", "truffle-contract": "4.0.31", - "web3": "1.2.8" + "web3": "1.2.9" }, "devDependencies": { - "@testing-library/jest-dom": "5.9.0", - "@testing-library/react": "10.2.1", + "@testing-library/jest-dom": "5.11.0", + "@testing-library/react": "10.4.3", "@testing-library/user-event": "11.3.1", "@types/jest": "^25.2.1", - "@types/node": "14.0.12", + "@types/node": "14.0.14", "@types/react": "^16.9.32", "@types/react-dom": "^16.9.6", "@types/styled-components": "^5.1.0", - "@typescript-eslint/eslint-plugin": "3.2.0", - "@typescript-eslint/parser": "3.2.0", - "autoprefixer": "9.8.0", + "@typescript-eslint/eslint-plugin": "3.5.0", + "@typescript-eslint/parser": "3.5.0", + "autoprefixer": "9.8.4", "cross-env": "^7.0.2", "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", @@ -226,19 +227,19 @@ "electron-notarize": "0.3.0", "eslint": "6.8.0", "eslint-config-prettier": "6.11.0", - "eslint-plugin-import": "2.21.1", + "eslint-plugin-import": "2.22.0", "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.18.3", - "eslint-plugin-sort-destructure-keys": "1.3.4", + "eslint-plugin-react": "7.20.3", + "eslint-plugin-sort-destructure-keys": "1.3.5", "ethereumjs-abi": "0.6.8", "husky": "^4.2.2", - "lint-staged": "10.2.9", + "lint-staged": "10.2.11", "node-sass": "^4.14.1", "prettier": "2.0.5", "react-app-rewired": "^2.1.6", - "truffle": "5.1.29", - "typescript": "^3.9.5", + "truffle": "5.1.33", + "typescript": "3.9.6", "wait-on": "5.0.1", "web3-eth-contract": "^1.2.9", "web3-utils": "^1.2.8" diff --git a/src/config/index.ts b/src/config/index.ts index 9a826a98..8409d2b8 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,5 +1,6 @@ +import { checksumAddress } from 'src/utils/checksumAddress'; import { ensureOnce } from 'src/utils/singleton' -import { ETHEREUM_NETWORK, getWeb3 } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { RELAY_API_URL, SIGNATURES_VIA_METAMASK, @@ -90,7 +91,7 @@ export const getSafeLastVersion = () => process.env.REACT_APP_LATEST_SAFE_VERSIO export const buildSafeCreationTxUrl = (safeAddress) => { const host = getTxServiceHost() - const address = getWeb3().utils.toChecksumAddress(safeAddress) + const address = checksumAddress(safeAddress) const base = getSafeCreationTxUri(address) return `${host}${base}` diff --git a/src/logic/collectibles/sources/OpenSea.ts b/src/logic/collectibles/sources/OpenSea.ts index 2fc74225..270db9e5 100644 --- a/src/logic/collectibles/sources/OpenSea.ts +++ b/src/logic/collectibles/sources/OpenSea.ts @@ -4,6 +4,58 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import NFTIcon from 'src/routes/safe/components/Balances/assets/nft_icon.png' import { OPENSEA_API_KEY } from 'src/utils/constants' +export interface OpenSeaAssetContract { + address: string + name: string + image_url: string + symbol: string +} + +export interface OpenSeaCollection { + name: string + slug: string +} + +export interface OpenSeaAsset { + asset_contract: OpenSeaAssetContract + background_color: string + collection: OpenSeaCollection + description: string + image_thumbnail_url: string + name: string + token_id: string +} + +export type OpenSeaAssets = Array + +export interface NFTAsset { + address: string + assetContract: OpenSeaAssetContract + collection: OpenSeaCollection + description: string + image: string + name: string + numberOfTokens: number + slug: string + symbol: string +} +export type NFTAssets = Record + +export interface NFTToken { + assetAddress: string + color: string + description: string + image: string + name: string + tokenId: number | string +} +export type NFTTokens = Array + +export interface Collectibles { + nftAssets: NFTAssets + nftTokens: NFTTokens +} + class OpenSea { _rateLimit = async () => {} @@ -29,7 +81,7 @@ class OpenSea { this._rateLimit = RateLimit(options.rps, { timeUnit: 60 * 1000, uniformDistribution: true }) } - static extractAssets(assets) { + static extractAssets(assets: OpenSeaAssets): NFTAssets { const extractNFTAsset = (asset) => ({ address: asset.asset_contract.address, assetContract: asset.asset_contract, @@ -59,7 +111,7 @@ class OpenSea { }, {}) } - static extractTokens(assets) { + static extractTokens(assets: OpenSeaAssets): NFTTokens { return assets.map((asset) => ({ assetAddress: asset.asset_contract.address, color: asset.background_color, @@ -70,7 +122,7 @@ class OpenSea { })) } - static extractCollectiblesInfo(assetResponseJson) { + static extractCollectiblesInfo(assetResponseJson: { assets: OpenSeaAssets }): Collectibles { return { nftAssets: OpenSea.extractAssets(assetResponseJson.assets), nftTokens: OpenSea.extractTokens(assetResponseJson.assets), @@ -82,9 +134,9 @@ class OpenSea { * for the provided Safe Address in the specified Network * @param {string} safeAddress * @param {string} network - * @returns {Promise<{ nftAssets: Map, nftTokens: Array }>} + * @returns {Promise} */ - async fetchAllUserCollectiblesByCategoryAsync(safeAddress, network) { + async fetchAllUserCollectiblesByCategoryAsync(safeAddress: string, network: string): Promise { // eslint-disable-next-line no-underscore-dangle const metadataSourceUrl = this._endpointsUrls[network] const url = `${metadataSourceUrl}/assets/?owner=${safeAddress}` diff --git a/src/logic/collectibles/sources/index.ts b/src/logic/collectibles/sources/index.ts index 2b49e0a7..14636bd2 100644 --- a/src/logic/collectibles/sources/index.ts +++ b/src/logic/collectibles/sources/index.ts @@ -2,9 +2,12 @@ import MockedOpenSea from 'src/logic/collectibles/sources/MockedOpenSea' import OpenSea from 'src/logic/collectibles/sources/OpenSea' import { COLLECTIBLES_SOURCE } from 'src/utils/constants' -const sources = { +const SOURCES = { opensea: new OpenSea({ rps: 4 }), mockedopensea: new MockedOpenSea({ rps: 4 }), } -export const getConfiguredSource = () => sources[COLLECTIBLES_SOURCE.toLowerCase()] +type Sources = typeof SOURCES + +export const getConfiguredSource = (): Sources['opensea'] | Sources['mockedopensea'] => + SOURCES[COLLECTIBLES_SOURCE.toLowerCase()] diff --git a/src/logic/collectibles/store/actions/fetchCollectibles.ts b/src/logic/collectibles/store/actions/fetchCollectibles.ts index c42db3fb..c87e51df 100644 --- a/src/logic/collectibles/store/actions/fetchCollectibles.ts +++ b/src/logic/collectibles/store/actions/fetchCollectibles.ts @@ -3,18 +3,21 @@ import { batch } from 'react-redux' import { getNetwork } from 'src/config' import { getConfiguredSource } from 'src/logic/collectibles/sources' import { addNftAssets, addNftTokens } from 'src/logic/collectibles/store/actions/addCollectibles' -import { safeParamAddressFromStateSelector } from 'src/routes/safe/store/selectors' +import { Dispatch } from 'redux' -const fetchCollectibles = () => async (dispatch, getState) => { - const network = getNetwork() - const safeAddress = safeParamAddressFromStateSelector(getState()) || '' - const source = getConfiguredSource() - const collectibles = await source.fetchAllUserCollectiblesByCategoryAsync(safeAddress, network) +const fetchCollectibles = (safeAddress: string) => async (dispatch: Dispatch): Promise => { + try { + const network = getNetwork() + const source = getConfiguredSource() + const collectibles = await source.fetchAllUserCollectiblesByCategoryAsync(safeAddress, network) - batch(() => { - dispatch(addNftAssets(collectibles.nftAssets)) - dispatch(addNftTokens(collectibles.nftTokens)) - }) + batch(() => { + dispatch(addNftAssets(collectibles.nftAssets)) + dispatch(addNftTokens(collectibles.nftTokens)) + }) + } catch (error) { + console.log('Error fetching collectibles:', error) + } } export default fetchCollectibles diff --git a/src/logic/collectibles/store/selectors/index.ts b/src/logic/collectibles/store/selectors/index.ts index c9a80c14..fb517812 100644 --- a/src/logic/collectibles/store/selectors/index.ts +++ b/src/logic/collectibles/store/selectors/index.ts @@ -1,11 +1,13 @@ import { List } from 'immutable' import { createSelector } from 'reselect' +import { NFTAssets, NFTTokens } from 'src/logic/collectibles/sources/OpenSea' +import { AppReduxState } from 'src/store' import { NFT_ASSETS_REDUCER_ID, NFT_TOKENS_REDUCER_ID } from 'src/logic/collectibles/store/reducer/collectibles' import { safeActiveAssetsSelector } from 'src/routes/safe/store/selectors' -export const nftAssetsSelector = (state) => state[NFT_ASSETS_REDUCER_ID] -export const nftTokensSelector = (state) => state[NFT_TOKENS_REDUCER_ID] +export const nftAssetsSelector = (state: AppReduxState): NFTAssets => state[NFT_ASSETS_REDUCER_ID] +export const nftTokensSelector = (state: AppReduxState): NFTTokens => state[NFT_TOKENS_REDUCER_ID] export const nftAssetsListSelector = createSelector(nftAssetsSelector, (assets) => { return assets ? List(Object.entries(assets).map((item) => item[1])) : List([]) diff --git a/src/logic/tokens/store/actions/fetchSafeTokens.ts b/src/logic/tokens/store/actions/fetchSafeTokens.ts index f8192404..c4e08d09 100644 --- a/src/logic/tokens/store/actions/fetchSafeTokens.ts +++ b/src/logic/tokens/store/actions/fetchSafeTokens.ts @@ -11,12 +11,18 @@ import { makeToken } from 'src/logic/tokens/store/model/token' import { TOKEN_REDUCER_ID } from 'src/logic/tokens/store/reducer/tokens' import updateSafe from 'src/routes/safe/store/actions/updateSafe' import { SAFE_REDUCER_ID } from 'src/routes/safe/store/reducer/safe' +import { Dispatch } from 'redux' +import { backOff } from 'exponential-backoff' +import { AppReduxState } from 'src/store' const humanReadableBalance = (balance, decimals) => new BigNumber(balance).times(`1e-${decimals}`).toFixed() const noFunc = () => {} const updateSafeValue = (address) => (valueToUpdate) => updateSafe({ address, ...valueToUpdate }) -const fetchSafeTokens = (safeAddress) => async (dispatch, getState) => { +const fetchSafeTokens = (safeAddress: string) => async ( + dispatch: Dispatch, + getState: () => AppReduxState, +): Promise => { try { const state = getState() const safe = state[SAFE_REDUCER_ID].getIn([SAFE_REDUCER_ID, safeAddress]) @@ -26,7 +32,7 @@ const fetchSafeTokens = (safeAddress) => async (dispatch, getState) => { return } - const result = await fetchTokenCurrenciesBalances(safeAddress) + const result = await backOff(() => fetchTokenCurrenciesBalances(safeAddress)) const currentEthBalance = safe.get('ethBalance') const safeBalances = safe.get('balances') const alreadyActiveTokens = safe.get('activeTokens') @@ -95,8 +101,6 @@ const fetchSafeTokens = (safeAddress) => async (dispatch, getState) => { } catch (err) { console.error('Error fetching active token list', err) } - - return null } export default fetchSafeTokens diff --git a/src/routes/load/container/Load.tsx b/src/routes/load/container/Load.tsx index ff96a306..0e3a6500 100644 --- a/src/routes/load/container/Load.tsx +++ b/src/routes/load/container/Load.tsx @@ -10,7 +10,6 @@ import selector from './selector' import Page from 'src/components/layout/Page' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { SAFES_KEY, saveSafes } from 'src/logic/safe/utils' -import { getWeb3 } from 'src/logic/wallets/getWeb3' import { getNamesFrom, getOwnersFrom } from 'src/routes/open/utils/safeDataExtractor' import { SAFELIST_ADDRESS } from 'src/routes/routes' import { buildSafe } from 'src/routes/safe/store/actions/fetchSafe' @@ -19,6 +18,7 @@ import { loadFromStorage } from 'src/utils/storage' import { Dispatch } from 'redux' import { SafeOwner } from '../../safe/store/models/safe' import { List } from 'immutable' +import { checksumAddress } from 'src/utils/checksumAddress' export const loadSafe = async ( safeName: string, @@ -39,14 +39,15 @@ export const loadSafe = async ( class Load extends React.Component { onLoadSafeSubmit = async (values) => { + let safeAddress = values[FIELD_LOAD_ADDRESS] + if (safeAddress) { + return + } + try { const { addSafe } = this.props - const web3 = getWeb3() const safeName = values[FIELD_LOAD_NAME] - let safeAddress = values[FIELD_LOAD_ADDRESS] - if (safeAddress) { - safeAddress = web3.utils.toChecksumAddress(safeAddress) - } + safeAddress = checksumAddress(safeAddress) const ownerNames = getNamesFrom(values) const gnosisSafe = await getGnosisSafeInstanceAt(safeAddress) diff --git a/src/routes/safe/components/Balances/index.tsx b/src/routes/safe/components/Balances/index.tsx index 64923354..52763fea 100644 --- a/src/routes/safe/components/Balances/index.tsx +++ b/src/routes/safe/components/Balances/index.tsx @@ -47,7 +47,7 @@ const Balances = (props) => { const address = useSelector(safeParamAddressFromStateSelector) const featuresEnabled = useSelector(safeFeaturesEnabledSelector) - useFetchTokens() + useFetchTokens(address) useEffect(() => { const erc721Enabled = featuresEnabled && featuresEnabled.includes('ERC721') diff --git a/src/routes/safe/container/hooks/useCheckForUpdates.tsx b/src/routes/safe/container/hooks/useCheckForUpdates.tsx deleted file mode 100644 index 62a0da70..00000000 --- a/src/routes/safe/container/hooks/useCheckForUpdates.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useEffect } from 'react' -import { batch, useDispatch, useSelector } from 'react-redux' - -import fetchCollectibles from 'src/logic/collectibles/store/actions/fetchCollectibles' -import fetchSafeTokens from 'src/logic/tokens/store/actions/fetchSafeTokens' -import fetchEtherBalance from 'src/routes/safe/store/actions/fetchEtherBalance' -import { checkAndUpdateSafe } from 'src/routes/safe/store/actions/fetchSafe' -import fetchTransactions from 'src/routes/safe/store/actions/transactions/fetchTransactions' -import { safeParamAddressFromStateSelector } from 'src/routes/safe/store/selectors' -import { TIMEOUT } from 'src/utils/constants' - -export const useCheckForUpdates = () => { - const dispatch = useDispatch() - const safeAddress = useSelector(safeParamAddressFromStateSelector) - useEffect(() => { - if (safeAddress) { - const collectiblesInterval = setInterval(() => { - batch(() => { - dispatch(fetchEtherBalance(safeAddress)) - dispatch(fetchSafeTokens(safeAddress)) - dispatch(fetchTransactions(safeAddress)) - dispatch(fetchCollectibles) - dispatch(checkAndUpdateSafe(safeAddress)) - }) - }, TIMEOUT * 3) - return () => { - clearInterval(collectiblesInterval) - } - } - }, [dispatch, safeAddress]) -} diff --git a/src/routes/safe/container/hooks/useFetchTokens.tsx b/src/routes/safe/container/hooks/useFetchTokens.tsx index bab4bcf2..538ae235 100644 --- a/src/routes/safe/container/hooks/useFetchTokens.tsx +++ b/src/routes/safe/container/hooks/useFetchTokens.tsx @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import { batch, useDispatch, useSelector } from 'react-redux' +import { batch, useDispatch } from 'react-redux' import { useLocation } from 'react-router-dom' import fetchCollectibles from 'src/logic/collectibles/store/actions/fetchCollectibles' @@ -8,11 +8,9 @@ import activateAssetsByBalance from 'src/logic/tokens/store/actions/activateAsse import fetchSafeTokens from 'src/logic/tokens/store/actions/fetchSafeTokens' import { fetchTokens } from 'src/logic/tokens/store/actions/fetchTokens' import { COINS_LOCATION_REGEX, COLLECTIBLES_LOCATION_REGEX } from 'src/routes/safe/components/Balances' -import { safeParamAddressFromStateSelector } from 'src/routes/safe/store/selectors' -export const useFetchTokens = (): void => { +export const useFetchTokens = (safeAddress: string): void => { const dispatch = useDispatch() - const address: string | null = useSelector(safeParamAddressFromStateSelector) const location = useLocation() useMemo(() => { @@ -20,17 +18,17 @@ export const useFetchTokens = (): void => { batch(() => { // fetch tokens there to get symbols for tokens in TXs list dispatch(fetchTokens()) - dispatch(fetchCurrencyValues(address)) - dispatch(fetchSafeTokens(address)) + dispatch(fetchCurrencyValues(safeAddress)) + dispatch(fetchSafeTokens(safeAddress)) }) } if (COLLECTIBLES_LOCATION_REGEX.test(location.pathname)) { batch(() => { - dispatch(fetchCollectibles()).then(() => { - dispatch(activateAssetsByBalance(address)) + dispatch(fetchCollectibles(safeAddress)).then(() => { + dispatch(activateAssetsByBalance(safeAddress)) }) }) } - }, [address, dispatch, location]) + }, [dispatch, location.pathname, safeAddress]) } diff --git a/src/routes/safe/container/hooks/useSafeScheduledUpdates.tsx b/src/routes/safe/container/hooks/useSafeScheduledUpdates.tsx new file mode 100644 index 00000000..8ba8806d --- /dev/null +++ b/src/routes/safe/container/hooks/useSafeScheduledUpdates.tsx @@ -0,0 +1,46 @@ +import { useEffect, useRef } from 'react' +import { batch, useDispatch } from 'react-redux' + +import fetchCollectibles from 'src/logic/collectibles/store/actions/fetchCollectibles' +import fetchSafeTokens from 'src/logic/tokens/store/actions/fetchSafeTokens' +import fetchEtherBalance from 'src/routes/safe/store/actions/fetchEtherBalance' +import { checkAndUpdateSafe } from 'src/routes/safe/store/actions/fetchSafe' +import fetchTransactions from 'src/routes/safe/store/actions/transactions/fetchTransactions' +import { TIMEOUT } from 'src/utils/constants' + +export const useSafeScheduledUpdates = (safeAddress: string): void => { + const dispatch = useDispatch() + const timer = useRef(null) + + useEffect(() => { + // using this variable to prevent setting a timeout when the component is already unmounted or the effect + // has to run again + let mounted = true + const fetchSafeData = async (address: string): Promise => { + await batch(async () => { + await Promise.all([ + dispatch(fetchEtherBalance(address)), + dispatch(fetchSafeTokens(address)), + dispatch(fetchTransactions(address)), + dispatch(fetchCollectibles(address)), + dispatch(checkAndUpdateSafe(address)), + ]) + }) + + if (mounted) { + timer.current = setTimeout(() => { + fetchSafeData(safeAddress) + }, TIMEOUT * 3) + } + } + + if (safeAddress) { + fetchSafeData(safeAddress) + + return () => { + mounted = false + clearTimeout(timer.current) + } + } + }, [dispatch, safeAddress]) +} diff --git a/src/routes/safe/container/index.jsx b/src/routes/safe/container/index.tsx similarity index 91% rename from src/routes/safe/container/index.jsx rename to src/routes/safe/container/index.tsx index 672cf317..8bb4ef28 100644 --- a/src/routes/safe/container/index.jsx +++ b/src/routes/safe/container/index.tsx @@ -7,7 +7,7 @@ import Page from 'src/components/layout/Page' import Layout from 'src/routes/safe/components/Layout' import { safeParamAddressFromStateSelector } from 'src/routes/safe/store/selectors' import { useLoadSafe } from './hooks/useLoadSafe' -import { useCheckForUpdates } from './hooks/useCheckForUpdates' +import { useSafeScheduledUpdates } from './hooks/useSafeScheduledUpdates' const INITIAL_STATE = { sendFunds: { @@ -17,12 +17,12 @@ const INITIAL_STATE = { showReceive: false, } -const SafeView = () => { +const SafeView = (): JSX.Element => { const [state, setState] = useState(INITIAL_STATE) const safeAddress = useSelector(safeParamAddressFromStateSelector) useLoadSafe(safeAddress) - useCheckForUpdates() + useSafeScheduledUpdates(safeAddress) const onShow = (action) => () => { setState((prevState) => ({ diff --git a/src/routes/safe/store/actions/fetchEtherBalance.ts b/src/routes/safe/store/actions/fetchEtherBalance.ts index f045ec2b..0b0e421e 100644 --- a/src/routes/safe/store/actions/fetchEtherBalance.ts +++ b/src/routes/safe/store/actions/fetchEtherBalance.ts @@ -1,12 +1,18 @@ import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' import updateSafe from 'src/routes/safe/store/actions/updateSafe' import { SAFE_REDUCER_ID } from 'src/routes/safe/store/reducer/safe' +import { Dispatch } from 'redux' +import { backOff } from 'exponential-backoff' +import { AppReduxState } from 'src/store' -const fetchEtherBalance = (safeAddress) => async (dispatch, getState) => { +const fetchEtherBalance = (safeAddress: string) => async ( + dispatch: Dispatch, + getState: () => AppReduxState, +): Promise => { try { const state = getState() const ethBalance = state[SAFE_REDUCER_ID].getIn([SAFE_REDUCER_ID, safeAddress, 'ethBalance']) - const newEthBalance = await getBalanceInEtherOf(safeAddress) + const newEthBalance = await backOff(() => getBalanceInEtherOf(safeAddress)) if (newEthBalance !== ethBalance) { dispatch(updateSafe({ address: safeAddress, ethBalance: newEthBalance })) } diff --git a/src/routes/safe/store/actions/fetchSafe.ts b/src/routes/safe/store/actions/fetchSafe.ts index ed8dca20..11297b44 100644 --- a/src/routes/safe/store/actions/fetchSafe.ts +++ b/src/routes/safe/store/actions/fetchSafe.ts @@ -14,6 +14,7 @@ import { makeOwner } from 'src/routes/safe/store/models/owner' import { checksumAddress } from 'src/utils/checksumAddress' import { SafeOwner } from '../models/safe' +import { Dispatch } from 'redux' const buildOwnersFrom = ( safeOwners, @@ -71,7 +72,7 @@ export const buildSafe = async (safeAdd, safeName, latestMasterContractVersion?: return safe } -export const checkAndUpdateSafe = (safeAdd) => async (dispatch) => { +export const checkAndUpdateSafe = (safeAdd: string) => async (dispatch: Dispatch): Promise => { const safeAddress = checksumAddress(safeAdd) // Check if the owner's safe did change and update them const safeParams = ['getThreshold', 'nonce', 'getOwners'] diff --git a/src/routes/safe/store/actions/transactions/fetchTransactions/index.ts b/src/routes/safe/store/actions/transactions/fetchTransactions/index.ts index 6e20a5c4..c927a4a0 100644 --- a/src/routes/safe/store/actions/transactions/fetchTransactions/index.ts +++ b/src/routes/safe/store/actions/transactions/fetchTransactions/index.ts @@ -7,28 +7,39 @@ import { loadOutgoingTransactions } from './loadOutgoingTransactions' import { addOrUpdateCancellationTransactions } from 'src/routes/safe/store/actions/transactions/addOrUpdateCancellationTransactions' import { addOrUpdateTransactions } from 'src/routes/safe/store/actions/transactions/addOrUpdateTransactions' +import { Dispatch } from 'redux' +import { backOff } from 'exponential-backoff' const noFunc = () => {} -export default (safeAddress: string) => async (dispatch) => { - const transactions = await loadOutgoingTransactions(safeAddress) +export default (safeAddress: string) => async (dispatch: Dispatch): Promise => { + try { + const transactions = await backOff(() => loadOutgoingTransactions(safeAddress)) - if (transactions) { - const { cancel, outgoing } = transactions - const updateCancellationTxs = cancel.size - ? addOrUpdateCancellationTransactions({ safeAddress, transactions: cancel }) - : noFunc - const updateOutgoingTxs = outgoing.size ? addOrUpdateTransactions({ safeAddress, transactions: outgoing }) : noFunc + if (transactions) { + const { cancel, outgoing } = transactions + const updateCancellationTxs = cancel.size + ? addOrUpdateCancellationTransactions({ safeAddress, transactions: cancel }) + : noFunc + const updateOutgoingTxs = outgoing.size + ? addOrUpdateTransactions({ + safeAddress, + transactions: outgoing, + }) + : noFunc - batch(() => { - dispatch(updateCancellationTxs) - dispatch(updateOutgoingTxs) - }) - } + batch(() => { + dispatch(updateCancellationTxs) + dispatch(updateOutgoingTxs) + }) + } - const incomingTransactions = await loadIncomingTransactions(safeAddress) + const incomingTransactions = await loadIncomingTransactions(safeAddress) - if (incomingTransactions.get(safeAddress).size) { - dispatch(addIncomingTransactions(incomingTransactions)) + if (incomingTransactions.get(safeAddress).size) { + dispatch(addIncomingTransactions(incomingTransactions)) + } + } catch (error) { + console.log('Error fetching transactions:', error) } } diff --git a/src/routes/safe/store/reducer/safe.ts b/src/routes/safe/store/reducer/safe.ts index 8b3e23ec..4bdeac13 100644 --- a/src/routes/safe/store/reducer/safe.ts +++ b/src/routes/safe/store/reducer/safe.ts @@ -14,6 +14,7 @@ import { UPDATE_SAFE } from 'src/routes/safe/store/actions/updateSafe' import { makeOwner } from 'src/routes/safe/store/models/owner' import makeSafe from 'src/routes/safe/store/models/safe' import { checksumAddress } from 'src/utils/checksumAddress' +import { SafeReducerMap } from './types/safe' export const SAFE_REDUCER_ID = 'safes' export const DEFAULT_SAFE_INITIAL_STATE = 'NOT_ASKED' @@ -43,13 +44,17 @@ export const buildSafe = (storedSafe) => { export default handleActions( { - [UPDATE_SAFE]: (state, action) => { + [UPDATE_SAFE]: (state: SafeReducerMap, action) => { const safe = action.payload const safeAddress = safe.address - return state.updateIn([SAFE_REDUCER_ID, safeAddress], (prevSafe) => prevSafe.merge(safe)) + return state.updateIn( + [SAFE_REDUCER_ID, safeAddress], + makeSafe({ name: 'LOADED SAFE', address: safeAddress }), + (prevSafe) => prevSafe.merge(safe), + ) }, - [ACTIVATE_TOKEN_FOR_ALL_SAFES]: (state, action) => { + [ACTIVATE_TOKEN_FOR_ALL_SAFES]: (state: SafeReducerMap, action) => { const tokenAddress = action.payload return state.withMutations((map) => { @@ -64,7 +69,7 @@ export default handleActions( }) }) }, - [ADD_SAFE]: (state, action) => { + [ADD_SAFE]: (state: SafeReducerMap, action) => { const { safe } = action.payload // if you add a new Safe it needs to be set as a record @@ -77,12 +82,12 @@ export default handleActions( return state.setIn([SAFE_REDUCER_ID, safe.address], makeSafe(safe)) }, - [REMOVE_SAFE]: (state, action) => { + [REMOVE_SAFE]: (state: SafeReducerMap, action) => { const safeAddress = action.payload return state.deleteIn([SAFE_REDUCER_ID, safeAddress]) }, - [ADD_SAFE_OWNER]: (state, action) => { + [ADD_SAFE_OWNER]: (state: SafeReducerMap, action) => { const { ownerAddress, ownerName, safeAddress } = action.payload return state.updateIn([SAFE_REDUCER_ID, safeAddress], (prevSafe) => @@ -91,7 +96,7 @@ export default handleActions( }), ) }, - [REMOVE_SAFE_OWNER]: (state, action) => { + [REMOVE_SAFE_OWNER]: (state: SafeReducerMap, action) => { const { ownerAddress, safeAddress } = action.payload return state.updateIn([SAFE_REDUCER_ID, safeAddress], (prevSafe) => @@ -100,7 +105,7 @@ export default handleActions( }), ) }, - [REPLACE_SAFE_OWNER]: (state, action) => { + [REPLACE_SAFE_OWNER]: (state: SafeReducerMap, action) => { const { oldOwnerAddress, ownerAddress, ownerName, safeAddress } = action.payload return state.updateIn([SAFE_REDUCER_ID, safeAddress], (prevSafe) => @@ -111,7 +116,7 @@ export default handleActions( }), ) }, - [EDIT_SAFE_OWNER]: (state, action) => { + [EDIT_SAFE_OWNER]: (state: SafeReducerMap, action) => { const { ownerAddress, ownerName, safeAddress } = action.payload return state.updateIn([SAFE_REDUCER_ID, safeAddress], (prevSafe) => { @@ -131,3 +136,5 @@ export default handleActions( latestMasterContractVersion: '', }), ) + +export * from './types/safe.d' diff --git a/src/routes/safe/store/reducer/types/safe.d.ts b/src/routes/safe/store/reducer/types/safe.d.ts new file mode 100644 index 00000000..e5347bf7 --- /dev/null +++ b/src/routes/safe/store/reducer/types/safe.d.ts @@ -0,0 +1,19 @@ +import { SafeRecord } from 'src/routes/safe/store/models/safe' +import { Map } from 'immutable' + +export type SafesMap = Map + +export interface SafeReducerState { + defaultSafe: 'NOT_ASKED' | string | undefined + safes: SafesMap + latestMasterContractVersion: string +} + +interface SafeReducerStateSerialized extends SafeReducerState { + safes: Record +} + +export interface SafeReducerMap extends Map { + toJS(): SafeReducerStateSerialized + get(key: K): SafeReducerState[K] +} diff --git a/src/routes/safe/store/selectors/index.ts b/src/routes/safe/store/selectors/index.ts index ed26ffe0..8d63988e 100644 --- a/src/routes/safe/store/selectors/index.ts +++ b/src/routes/safe/store/selectors/index.ts @@ -1,20 +1,20 @@ import { List, Map, Set } from 'immutable' import { matchPath } from 'react-router-dom' import { createSelector } from 'reselect' - -import { getWeb3 } from 'src/logic/wallets/getWeb3' import { SAFELIST_ADDRESS, SAFE_PARAM_ADDRESS } from 'src/routes/routes' import { CANCELLATION_TRANSACTIONS_REDUCER_ID } from 'src/routes/safe/store/reducer/cancellationTransactions' import { INCOMING_TRANSACTIONS_REDUCER_ID } from 'src/routes/safe/store/reducer/incomingTransactions' -import { SAFE_REDUCER_ID } from 'src/routes/safe/store/reducer/safe' +import { SAFE_REDUCER_ID, SafesMap } from 'src/routes/safe/store/reducer/safe' import { TRANSACTIONS_REDUCER_ID } from 'src/routes/safe/store/reducer/transactions' +import { AppReduxState } from 'src/store' import { checksumAddress } from 'src/utils/checksumAddress' +import { SafeRecord } from 'src/routes/safe/store/models/safe' -const safesStateSelector = (state) => state[SAFE_REDUCER_ID] +const safesStateSelector = (state: AppReduxState) => state[SAFE_REDUCER_ID] -export const safesMapSelector = (state) => state[SAFE_REDUCER_ID].get('safes') +export const safesMapSelector = (state: AppReduxState): SafesMap => state[SAFE_REDUCER_ID].get('safes') export const safesListSelector = createSelector(safesMapSelector, (safes) => safes.toList()) @@ -26,18 +26,17 @@ export const latestMasterContractVersionSelector = createSelector(safesStateSele safeState.get('latestMasterContractVersion'), ) -const transactionsSelector = (state) => state[TRANSACTIONS_REDUCER_ID] +const transactionsSelector = (state: AppReduxState) => state[TRANSACTIONS_REDUCER_ID] -const cancellationTransactionsSelector = (state) => state[CANCELLATION_TRANSACTIONS_REDUCER_ID] +const cancellationTransactionsSelector = (state: AppReduxState) => state[CANCELLATION_TRANSACTIONS_REDUCER_ID] -const incomingTransactionsSelector = (state) => state[INCOMING_TRANSACTIONS_REDUCER_ID] +const incomingTransactionsSelector = (state: AppReduxState) => state[INCOMING_TRANSACTIONS_REDUCER_ID] -export const safeParamAddressFromStateSelector = (state): string | null => { +export const safeParamAddressFromStateSelector = (state: AppReduxState): string | null => { const match = matchPath(state.router.location.pathname, { path: `${SAFELIST_ADDRESS}/:safeAddress` }) if (match) { - const web3 = getWeb3() - return web3.utils.toChecksumAddress(match.params.safeAddress) + return checksumAddress(match.params.safeAddress) } return null @@ -64,7 +63,7 @@ export const safeTransactionsSelector = createSelector( }, ) -export const addressBookQueryParamsSelector = (state) => { +export const addressBookQueryParamsSelector = (state: AppReduxState): string | null => { const { location } = state.router let entryAddressToEditOrCreateNew = null if (location && location.query) { @@ -116,20 +115,26 @@ export const safeSelector = createSelector(safesMapSelector, safeParamAddressFro return safe }) -export const safeActiveTokensSelector = createSelector(safeSelector, (safe) => { - if (!safe) { - return List() - } +export const safeActiveTokensSelector = createSelector( + safeSelector, + (safe): Set => { + if (!safe) { + return Set() + } - return safe.activeTokens -}) + return safe.activeTokens + }, +) -export const safeActiveAssetsSelector = createSelector(safeSelector, (safe) => { - if (!safe) { - return List() - } - return safe.activeAssets -}) +export const safeActiveAssetsSelector = createSelector( + safeSelector, + (safe): Set => { + if (!safe) { + return Set() + } + return safe.activeAssets + }, +) export const safeActiveAssetsListSelector = createSelector(safeActiveAssetsSelector, (safeList) => { if (!safeList) { @@ -154,20 +159,21 @@ export const safeBlacklistedAssetsSelector = createSelector(safeSelector, (safe) return safe.blacklistedAssets }) -export const safeActiveAssetsSelectorBySafe = (safeAddress, safes) => safes.get(safeAddress).get('activeAssets') +export const safeActiveAssetsSelectorBySafe = (safeAddress: string, safes: SafesMap) => + safes.get(safeAddress).get('activeAssets') export const safeBlacklistedAssetsSelectorBySafe = (safeAddress, safes) => safes.get(safeAddress).get('blacklistedAssets') export const safeBalancesSelector = createSelector(safeSelector, (safe) => { if (!safe) { - return List() + return Map() } return safe.balances }) -export const safeFieldSelector = (field) => (safe) => safe?.[field] +export const safeFieldSelector = (field: string) => (safe: SafeRecord) => safe?.[field] export const safeNameSelector = createSelector(safeSelector, safeFieldSelector('name')) diff --git a/src/store/index.ts b/src/store/index.ts index 8574ecc4..ea870736 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,6 +1,6 @@ -import { connectRouter, routerMiddleware } from 'connected-react-router' +import { connectRouter, routerMiddleware, RouterState } from 'connected-react-router' import { createHashHistory } from 'history' -import { applyMiddleware, combineReducers, compose, createStore } from 'redux' +import { applyMiddleware, CombinedState, combineReducers, compose, createStore } from 'redux' import thunk from 'redux-thunk' import addressBookMiddleware from 'src/logic/addressBook/store/middleware/addressBookMiddleware' @@ -27,8 +27,12 @@ import cancellationTransactions, { import incomingTransactions, { INCOMING_TRANSACTIONS_REDUCER_ID, } from 'src/routes/safe/store/reducer/incomingTransactions' -import safe, { SAFE_REDUCER_ID } from 'src/routes/safe/store/reducer/safe' +import safe, { SAFE_REDUCER_ID, SafeReducerMap } from 'src/routes/safe/store/reducer/safe' import transactions, { TRANSACTIONS_REDUCER_ID } from 'src/routes/safe/store/reducer/transactions' +import { Map } from 'immutable' +import { NFTAssets, NFTTokens } from '../logic/collectibles/sources/OpenSea' +import { ProviderRecord } from '../logic/wallets/store/model/provider' +import { Token } from 'src/logic/tokens/store/model/token' export const history = createHashHistory({ hashType: 'slash' }) @@ -63,6 +67,23 @@ const reducers = combineReducers({ [CURRENT_SESSION_REDUCER_ID]: currentSession, }) +export type AppReduxState = CombinedState<{ + [PROVIDER_REDUCER_ID]?: ProviderRecord + [SAFE_REDUCER_ID]: SafeReducerMap + [NFT_ASSETS_REDUCER_ID]?: NFTAssets + [NFT_TOKENS_REDUCER_ID]?: NFTTokens + [TOKEN_REDUCER_ID]?: Map + [TRANSACTIONS_REDUCER_ID]: Map + [CANCELLATION_TRANSACTIONS_REDUCER_ID]: Map + [INCOMING_TRANSACTIONS_REDUCER_ID]: Map + [NOTIFICATIONS_REDUCER_ID]: Map + [CURRENCY_VALUES_KEY]: Map + [COOKIES_REDUCER_ID]: Map + [ADDRESS_BOOK_REDUCER_ID]: Map + [CURRENT_SESSION_REDUCER_ID]: Map + router: RouterState +}> + export const store: any = createStore(reducers, finalCreateStore) export const aNewStore = (localState?: any) => createStore(reducers, localState, finalCreateStore) diff --git a/src/utils/checksumAddress.ts b/src/utils/checksumAddress.ts index 234cbec3..674509a3 100644 --- a/src/utils/checksumAddress.ts +++ b/src/utils/checksumAddress.ts @@ -1,6 +1,6 @@ import { getWeb3 } from 'src/logic/wallets/getWeb3' -export const checksumAddress = (address) => { +export const checksumAddress = (address: string): string => { if (!address) return null return getWeb3().utils.toChecksumAddress(address) } diff --git a/yarn.lock b/yarn.lock index b22e17a2..48179765 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1588,88 +1588,89 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@ledgerhq/devices@^5.15.0", "@ledgerhq/devices@^5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.17.0.tgz#ed1752b8588cc5d0aba34741a9635fd142841fe0" - integrity sha512-GBog+x/vkyt/RB722rm7VW7GMW0nHpOeFSJBad6padjAXkPQZr0LD34yTrIuZjA7y9aGjOB/RK9CjnVDyWODGQ== +"@ledgerhq/devices@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.19.0.tgz#6b55980628181da7e1b02ae668657821b2011209" + integrity sha512-b8isGErLpGOYnAIswav54j7EWmynTQOvnXriny3eqgzpLt8HOJ9g+C6+67RDzFidwz+5RZW+Qn+ZWAQ3Xo5e/g== dependencies: - "@ledgerhq/errors" "^5.17.0" - "@ledgerhq/logs" "^5.17.0" - rxjs "^6.5.5" + "@ledgerhq/errors" "^5.19.0" + "@ledgerhq/logs" "^5.19.0" + rxjs "^6.6.0" -"@ledgerhq/errors@^5.15.0", "@ledgerhq/errors@^5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.17.0.tgz#806490c7da04a94a1e791e46faf099c3cbc06a0d" - integrity sha512-m+es6OwqqhHPFGnSZOxGgn7kucWNS6Ep/khCS/avYx/LNz+SRZVRvHT4GuH9Qy6sB9Lg0W7ZEJpKqEzvLGvNoQ== +"@ledgerhq/errors@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.19.0.tgz#b5580c084a2b9bd8efb21cb50f69a712e3a02b2d" + integrity sha512-UrRS1xZ/UidIrGyM+h/T/h57DpiFgfqMtlu5VBic1LbekNUojBPx0cMb099p07uyEwKggfawzbdLmxv4j9Ct+g== -"@ledgerhq/hw-app-eth@^5.7.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.17.0.tgz#5580e4c758794a770b0c5b7e489b08b2e4a6b0b7" - integrity sha512-eal+NLJ7cUKWY4ZNLKzVKIt7M4QbZB6q875NwT97hksRXe+oY9RExpTZ1sePN2Mp3D/tHkL+LWeVaFm0XBcVlg== +"@ledgerhq/hw-app-eth@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.19.0.tgz#f1ea5cdbc1d9afff086efcab71afe43785e680f7" + integrity sha512-iq5ErfG9uV3CkCIvlzehHfghvED/geXraE5LQon4bsdvrmL5V9BI7GkSAF/ZkTbvB9+PCiBthiSIdcqvJhABQA== dependencies: - "@ledgerhq/errors" "^5.17.0" - "@ledgerhq/hw-transport" "^5.17.0" + "@ledgerhq/errors" "^5.19.0" + "@ledgerhq/hw-transport" "^5.19.0" bignumber.js "^9.0.0" + rlp "^2.2.5" -"@ledgerhq/hw-transport-node-hid-noevents@^5.16.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.17.0.tgz#2770244d7f949642013dc9e07438f7e2b6519fdc" - integrity sha512-XQ2Wf4NXXjpIe/Xj6ImWkRdItKjc5jzkNCqV0U51fxzZnSmt2kWINQPLDHQXF1s0AxBzOaas+iE0pAfVd8GRYQ== +"@ledgerhq/hw-transport-node-hid-noevents@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.19.0.tgz#c1dd6cf07470cc0c76258aa8007dfa33418ac87d" + integrity sha512-YciDuOBIYD6tytpY/68tZ/64yF35wLxkUJhzMPQHoXMqahzKSOjq2vVQZg/ddoR5K4cJnqO4hGWB34Vizun1oA== dependencies: - "@ledgerhq/devices" "^5.17.0" - "@ledgerhq/errors" "^5.17.0" - "@ledgerhq/hw-transport" "^5.17.0" - "@ledgerhq/logs" "^5.17.0" - node-hid "^1.2.0" + "@ledgerhq/devices" "^5.19.0" + "@ledgerhq/errors" "^5.19.0" + "@ledgerhq/hw-transport" "^5.19.0" + "@ledgerhq/logs" "^5.19.0" + node-hid "^1.3.0" -"@ledgerhq/hw-transport-node-hid@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.16.0.tgz#94a4097ed9e1e85d5adf98ba2d359de3081cf4c9" - integrity sha512-vug7aVGtt5IG3SE2rRxYX1YTFh8HqJ71p9yW4XNL6Jn5TJvHkPnvK8JApXSIIog3h9UZr028zwD22qDCyAbyOg== +"@ledgerhq/hw-transport-node-hid@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.19.0.tgz#4e4a44d88c572dbdbee51608474c62573278243c" + integrity sha512-yzRfMBC6viD/qEyWiDV7yZN7GGwqO284Ologx0u2ayihqrm03sqpo+55wgjBWC/pPeqmJb4sg2tF9T3Zfh+kew== dependencies: - "@ledgerhq/devices" "^5.15.0" - "@ledgerhq/errors" "^5.15.0" - "@ledgerhq/hw-transport" "^5.15.0" - "@ledgerhq/hw-transport-node-hid-noevents" "^5.16.0" - "@ledgerhq/logs" "^5.15.0" + "@ledgerhq/devices" "^5.19.0" + "@ledgerhq/errors" "^5.19.0" + "@ledgerhq/hw-transport" "^5.19.0" + "@ledgerhq/hw-transport-node-hid-noevents" "^5.19.0" + "@ledgerhq/logs" "^5.19.0" lodash "^4.17.15" - node-hid "^1.2.0" + node-hid "^1.3.0" usb "^1.6.3" -"@ledgerhq/hw-transport-u2f@^5.7.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.17.0.tgz#cae0772a302974002fe278b9d21fd572059ec0c2" - integrity sha512-xnyJYZpi5UB+ZBMwlViFAd5A/StojA0OQIYmp+Vcf9ytoU51BaGV4GjAyN6vWsv2ZClGIOK0gTdD/qnUNIqWiQ== +"@ledgerhq/hw-transport-u2f@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.19.0.tgz#20d4e1420423b7a01a3e1abfcf7e2d7b63fc6634" + integrity sha512-jr97Tdo7vEz4WOktvzhTTE8ggNtRty+vWIwRdzLwpKu5C7R/zBbNS3njB2LG8b9H8q9IOHtQQD1PKdz/JV4KdQ== dependencies: - "@ledgerhq/errors" "^5.17.0" - "@ledgerhq/hw-transport" "^5.17.0" - "@ledgerhq/logs" "^5.17.0" + "@ledgerhq/errors" "^5.19.0" + "@ledgerhq/hw-transport" "^5.19.0" + "@ledgerhq/logs" "^5.19.0" u2f-api "0.2.7" -"@ledgerhq/hw-transport@^5.15.0", "@ledgerhq/hw-transport@^5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.17.0.tgz#f21b80d3906d103e987599295a9138b7542e9678" - integrity sha512-Z+9D1WHGBxMv1lwOYS9R4NmdlCFECwbUy/Zwc56uKGnk6r59MBwjS2yuIV2zEw4p602xeP2X76+k9c55JM2o5g== +"@ledgerhq/hw-transport@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.19.0.tgz#0b82185728ac5fe397a9a160aeef1de302399dd9" + integrity sha512-MpIut+ZX88PPKmiqX+Df1lch930/Io0SqvjNPtXbYSg1SVZjxW8t85OuAwzukkaXr3tfUTb6IFlSHKC+QYCSBA== dependencies: - "@ledgerhq/devices" "^5.17.0" - "@ledgerhq/errors" "^5.17.0" + "@ledgerhq/devices" "^5.19.0" + "@ledgerhq/errors" "^5.19.0" events "^3.1.0" -"@ledgerhq/logs@^5.15.0", "@ledgerhq/logs@^5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.17.0.tgz#a3e946d915abf9c1f168bfba357a4c18a5431bfe" - integrity sha512-cY3aL9hLdQONFJihQDaO3szmyo53nLdMYisVLfjxJ2SBH5SOyoAtg6Utwz4u6Y3Cf464BJ0wZu3/SlVO0kboBQ== +"@ledgerhq/logs@^5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.19.0.tgz#78268722135cf2c0c8596295a2c34c40f3fe2663" + integrity sha512-gShImyBi0UQUc3Oo3nNwhGDovo1SNRKZYkhA2OKgeUe7PPiKBGuRqfD+cCvvgxcaoTbWlRYeOWbtShnRLRT8HA== -"@material-ui/core@4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.10.1.tgz#e3db4ca55d2af6cc23a1159ef5c32ad97c43c39c" - integrity sha512-bJb/07JFTht0oSjoWMu0j7r1mx4EbJ2ZHx+OKiY+i6IYW/4JPZ1J6rZuFS2b9jT+slSONPZaZq/kHitbE5lcig== +"@material-ui/core@4.11.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a" + integrity sha512-bYo9uIub8wGhZySHqLQ833zi4ZML+XCBE1XwJ8EuUVSpTWWG57Pm+YugQToJNFsEyiKFhPh8DPD0bgupz8n01g== dependencies: "@babel/runtime" "^7.4.4" "@material-ui/styles" "^4.10.0" "@material-ui/system" "^4.9.14" "@material-ui/types" "^5.1.0" - "@material-ui/utils" "^4.9.12" + "@material-ui/utils" "^4.10.2" "@types/react-transition-group" "^4.2.0" clsx "^1.0.4" hoist-non-react-statics "^3.3.2" @@ -1733,7 +1734,7 @@ resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== -"@material-ui/utils@^4.7.1", "@material-ui/utils@^4.9.12", "@material-ui/utils@^4.9.6": +"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.7.1", "@material-ui/utils@^4.9.6": version "4.10.2" resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321" integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw== @@ -1755,10 +1756,10 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@openzeppelin/contracts@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.0.2.tgz#7f3e7f234b8d3f1ad818581c71b6cccc7fdc35f5" - integrity sha512-eK9F3jEbjQeRYLiqrHUrXCZBxE+7L4Ve5scYInsLezuasoFkrrEFlnDWD8gbN+6e5NgdgJP9fTWxjxWmaHh7dA== +"@openzeppelin/contracts@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.1.0.tgz#bcea457ef89069fbe5a617f50b25b6a8272895d5" + integrity sha512-dVXDnUKxrAKLzPdCRkz+N8qsVkK1XxJ6kk3zuI6zaQmcKxN7CkizoDP7lXxcs/Mi2I0mxceTRjJBqlzFffLJrQ== "@portis/eth-json-rpc-middleware@^4.1.2": version "4.1.2" @@ -1808,7 +1809,7 @@ xhr "^2.2.0" xtend "^4.0.1" -"@portis/web3@^2.0.0-beta.42": +"@portis/web3@^2.0.0-beta.55": version "2.0.0-beta.55" resolved "https://registry.yarnpkg.com/@portis/web3/-/web3-2.0.0-beta.55.tgz#5a1667b11766acc8de82f65c7273566c96853a98" integrity sha512-qBqetbtTYlO8TjinYkrDUzwsHvFCZGGAeRfyMuq5Prila9h84irhBL8d3WamSG/4wqaw7aBhJbslQvVMWpMg5A== @@ -1943,23 +1944,25 @@ dependencies: defer-to-connect "^1.0.1" -"@testing-library/dom@^7.9.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.18.0.tgz#fc883ba993f35cd00c863099cfcf314395f0a9eb" - integrity sha512-OD6jgGc4nwM4GNXZJlVcI6wwP5hcJ4T8g752wbtK/Ub7jdATvAdnVSauODdoBMsEZejb1VoWNQsTDc4C9bgrsw== +"@testing-library/dom@^7.17.1": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.20.0.tgz#2bab85e90f0221a56256c5d4741c2a36b7c45f4d" + integrity sha512-TywaC+qDGm/Ro34kRYkFQPdT+pxSF4UjZGLIqcGfFQH5IGR43Y7sGLPnkieIW/GNsu337oxNsLUAgpI0JWhXHw== dependencies: "@babel/runtime" "^7.10.3" + "@types/aria-query" "^4.2.0" aria-query "^4.2.2" dom-accessibility-api "^0.4.5" pretty-format "^25.5.0" -"@testing-library/jest-dom@5.9.0": - version "5.9.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.9.0.tgz#86464c66cbe75e632b8adb636f539bfd0efc2c9c" - integrity sha512-uZ68dyILuM2VL13lGz4ehFEAgxzvLKRu8wQxyAZfejWnyMhmipJ60w4eG81NQikJHBfaYXx+Or8EaPQTDwGfPA== +"@testing-library/jest-dom@5.11.0": + version "5.11.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.0.tgz#1439f08dc85ce7c6d3bbad0ee5d53b2206f55768" + integrity sha512-mhaCySy7dZlyfcxcYy+0jLllODHEiHkVdmwQ00wD0HrWiSx0fSVHz/0WmdlRkvhfSOuqsRsBUreXOtBvruWGQA== dependencies: "@babel/runtime" "^7.9.2" - "@types/testing-library__jest-dom" "^5.0.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^4.2.2" chalk "^3.0.0" css "^2.2.4" css.escape "^1.5.1" @@ -1968,13 +1971,13 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@10.2.1": - version "10.2.1" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.2.1.tgz#f0c5ac9072ad54c29672150943f35d6617263f26" - integrity sha512-pv2jZhiZgN1/alz1aImhSasZAOPg3er2Kgcfg9fzuw7aKPLxVengqqR1n0CJANeErR1DqORauQaod+gGUgAJOQ== +"@testing-library/react@10.4.3": + version "10.4.3" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.3.tgz#c6f356688cffc51f6b35385583d664bb11a161f4" + integrity sha512-A/ydYXcwAcfY7vkPrfUkUTf9HQLL3/GtixTefcu3OyGQtAYQ7XBQj1S9FWbLEhfWa0BLwFwTBFS3Ao1O0tbMJg== dependencies: - "@babel/runtime" "^7.10.2" - "@testing-library/dom" "^7.9.0" + "@babel/runtime" "^7.10.3" + "@testing-library/dom" "^7.17.1" "@testing-library/user-event@11.3.1": version "11.3.1" @@ -2060,6 +2063,11 @@ web3 "1.2.1" web3-provider-engine "https://github.com/trufflesuite/provider-engine#web3-one" +"@types/aria-query@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" + integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== + "@types/babel__core@^7.1.0": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" @@ -2189,16 +2197,11 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*": +"@types/node@*", "@types/node@14.0.14": version "14.0.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== -"@types/node@14.0.12": - version "14.0.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.12.tgz#9c1d8ffb8084e8936603a6122a7649e40e68e04b" - integrity sha512-/sjzehvjkkpvLpYtN6/2dv5kg41otMGuHQUt9T2aiAuIfleCQRQHXXzF1eAw/qkZTj5Kcf4JSTf7EIizHocy6Q== - "@types/node@^10.12.18", "@types/node@^10.3.2": version "10.17.26" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.26.tgz#a8a119960bff16b823be4c617da028570779bcfd" @@ -2275,7 +2278,7 @@ "@types/react-native" "*" csstype "^2.2.0" -"@types/testing-library__jest-dom@^5.0.2": +"@types/testing-library__jest-dom@^5.9.1": version "5.9.1" resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.1.tgz#aba5ee062b7880f69c212ef769389f30752806e5" integrity sha512-yYn5EKHO3MPEMSOrcAb1dLWY+68CG29LiXKsWmmpVHqoP5+ZRiAVLyUHvPNrO2dABDdUGZvavMsaGpWNjM6N2g== @@ -2301,12 +2304,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.2.0.tgz#7fb997f391af32ae6ca1dbe56bcefe4dd30bda14" - integrity sha512-t9RTk/GyYilIXt6BmZurhBzuMT9kLKw3fQoJtK9ayv0tXTlznXEAnx07sCLXdkN3/tZDep1s1CEV95CWuARYWA== +"@typescript-eslint/eslint-plugin@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.5.0.tgz#e7736e0808b5fb947a5f9dd949ae6736a7226b84" + integrity sha512-m4erZ8AkSjoIUOf8s4k2V1xdL2c1Vy0D3dN6/jC9d7+nEqjY3gxXCkgi3gW/GAxPaA4hV8biaCoTVdQmfAeTCQ== dependencies: - "@typescript-eslint/experimental-utils" "3.2.0" + "@typescript-eslint/experimental-utils" "3.5.0" + debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" @@ -2332,24 +2336,26 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.2.0.tgz#4dab8fc9f44f059ec073470a81bb4d7d7d51e6c5" - integrity sha512-UbJBsk+xO9dIFKtj16+m42EvUvsjZbbgQ2O5xSTSfVT1Z3yGkL90DVu0Hd3029FZ5/uBgl+F3Vo8FAcEcqc6aQ== +"@typescript-eslint/experimental-utils@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.5.0.tgz#d09f9ffb890d1b15a7ffa9975fae92eee05597c4" + integrity sha512-zGNOrVi5Wz0jcjUnFZ6QUD0MCox5hBuVwemGCew2qJzUX5xPoyR+0EzS5qD5qQXL/vnQ8Eu+nv03tpeFRwLrDg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "3.2.0" + "@typescript-eslint/types" "3.5.0" + "@typescript-eslint/typescript-estree" "3.5.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.2.0.tgz#d9d7867456b1b8ecae9e724269b0bc932f06cbca" - integrity sha512-Vhu+wwdevDLVDjK1lIcoD6ZbuOa93fzqszkaO3iCnmrScmKwyW/AGkzc2UvfE5TCoCXqq7Jyt6SOXjsIlpqF4A== +"@typescript-eslint/parser@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.5.0.tgz#9ff8c11877c48df24e10e19d7bf542ee0359500d" + integrity sha512-sU07VbYB70WZHtgOjH/qfAp1+OwaWgrvD1Km1VXqRpcVxt971PMTU7gJtlrCje0M+Sdz7xKAbtiyIu+Y6QdnVA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.2.0" - "@typescript-eslint/typescript-estree" "3.2.0" + "@typescript-eslint/experimental-utils" "3.5.0" + "@typescript-eslint/types" "3.5.0" + "@typescript-eslint/typescript-estree" "3.5.0" eslint-visitor-keys "^1.1.0" "@typescript-eslint/parser@^2.10.0": @@ -2362,6 +2368,11 @@ "@typescript-eslint/typescript-estree" "2.34.0" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/types@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.5.0.tgz#4e3d2a2272268d8ec3e3e4a37152a64956682639" + integrity sha512-Dreqb5idi66VVs1QkbAwVeDmdJG+sDtofJtKwKCZXIaBsINuCN7Jv5eDIHrS0hFMMiOvPH9UuOs4splW0iZe4Q== + "@typescript-eslint/typescript-estree@2.34.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" @@ -2375,19 +2386,27 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/typescript-estree@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.2.0.tgz#c735f1ca6b4d3cd671f30de8c9bde30843e7ead8" - integrity sha512-uh+Y2QO7dxNrdLw7mVnjUqkwO/InxEqwN0wF+Za6eo3coxls9aH9kQ/5rSvW2GcNanebRTmsT5w1/92lAOb1bA== +"@typescript-eslint/typescript-estree@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.5.0.tgz#dfc895db21a381b84f24c2a719f5bf9c600dcfdc" + integrity sha512-Na71ezI6QP5WVR4EHxwcBJgYiD+Sre9BZO5iJK2QhrmRPo/42+b0no/HZIrdD1sjghzlYv7t+7Jis05M1uMxQg== dependencies: + "@typescript-eslint/types" "3.5.0" + "@typescript-eslint/visitor-keys" "3.5.0" debug "^4.1.1" - eslint-visitor-keys "^1.1.0" glob "^7.1.6" is-glob "^4.0.1" lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/visitor-keys@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.5.0.tgz#73c1ea2582f814735e4afdc1cf6f5e3af78db60a" + integrity sha512-7cTp9rcX2sz9Z+zua9MCOX4cqp5rYyFD5o8LlbSpXrMTXoRdngTtotRZEkm8+FNMHPWYFhitFK+qt/brK8BVJQ== + dependencies: + eslint-visitor-keys "^1.1.0" + "@unilogin/provider@^0.5.21": version "0.5.21" resolved "https://registry.yarnpkg.com/@unilogin/provider/-/provider-0.5.21.tgz#bc3aa74750c3fcd2ddcb763279fb58d88f5bc8f5" @@ -2396,111 +2415,93 @@ "@restless/sanitizers" "^0.2.4" reactive-properties "^0.1.11" -"@walletconnect/client@^1.0.5": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.0.11.tgz#ee58d2662e433cb67c5d2157c1b4525f864ab6ec" - integrity sha512-NVMDRUuLMqRPmzR7xjVfRcuXegvrCTtzuVyU8iYEnriZ3fFZcFj3PWVzN44RvLYQ4yUxWzeUkXIVRmmecOLMbQ== +"@walletconnect/client@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.0.13.tgz#591f7f3ab7d859659afb472a98c2681383ecd092" + integrity sha512-Gt7cLyqQbyalQCsmXXLRwvnSqNYMR65z7CmiI2hGT3ZTdEVomFMhYBHUE8pjwMhtwsWIbaU7cKvvnxk9rf6i9Q== dependencies: - "@walletconnect/core" "^1.0.11" - "@walletconnect/iso-crypto" "^1.0.11" - "@walletconnect/types" "^1.0.11" - "@walletconnect/utils" "^1.0.11" + "@walletconnect/core" "^1.0.13" + "@walletconnect/iso-crypto" "^1.0.13" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" -"@walletconnect/core@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.0.11.tgz#486eaf680fb697d9f35b02fc91392eb8c4a60116" - integrity sha512-hrr7oFgQrQaNbCKlh+4lXVz9pLjt1RVMEyftA5Q+hWNdgrBV0NDvrp2SV7XaHBg/z/D37JA6we+zGPkkBZ8CRA== +"@walletconnect/core@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.0.13.tgz#03a0783c8a485fc253e41fa9876c2afc1315b7f8" + integrity sha512-NIZoMhne//AnH3H1g8EMIsLWnPf1kIFccSMF9C+32NUKMuSUz0k2AedRbXY1OK7E8hdz6B45YwVx9R3dYGB5Mw== dependencies: - "@walletconnect/socket-transport" "^1.0.11" - "@walletconnect/types" "^1.0.11" - "@walletconnect/utils" "^1.0.11" + "@walletconnect/socket-transport" "^1.0.13" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" -"@walletconnect/http-connection@^1.0.5": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.0.11.tgz#3c00ab02b4e6f4ffa1aa346b19569e585609dfa2" - integrity sha512-kT9tKfp0KfKO+WkufSEi2Ppcgni2LB1Qly66uV3xZEwqouY+8Fs7Rf/BQ9o8KmosnP9WxBjgO+S4OMDWNLHCdA== +"@walletconnect/http-connection@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.0.13.tgz#bf1b0dab7993b1ee80e63f32f62997460c962cbe" + integrity sha512-cWAaeGcAvK6EQwPvaZIQ2MKtQoH8dz+hbwhDWnocxEFRSuoIeNAG2urb9k4LRDGuKVvt9hCAuQVE58T+4H6ReQ== dependencies: - "@walletconnect/types" "^1.0.11" - "@walletconnect/utils" "^1.0.11" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" xhr2-cookies "1.1.0" -"@walletconnect/iso-crypto@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.0.11.tgz#cb989e6257d4e8595f3bf15950ee82ec67727c11" - integrity sha512-yYww/lrbseTD+ZphQzkxUx4Ufyx4fotTv/XK62p4Qb6SYFDR2/1bXTsbN2KitfeF0rpomyF0ouWujOF671p23w== +"@walletconnect/iso-crypto@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.0.13.tgz#e5e96e9f8a96108bd754b394c2a70bfa553e6105" + integrity sha512-G3b5PIS/h/LxHSHPG/yKc5CrJLxN56/d08Q241q+qBvBVaRXF3u4zjNTFqjsDcKWbkKqmMgwCcjxgvZ+4aPnlQ== dependencies: - "@walletconnect/types" "^1.0.11" - "@walletconnect/utils" "^1.0.11" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" eccrypto-js "5.2.0" -"@walletconnect/mobile-registry@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.0.11.tgz#55a060fb113524e75ed675fce1ab50bb6c5aa1ce" - integrity sha512-E78BfSr4RNSUPl/4Qpfg4bPO+QynMqUj55X20S41z1aGIYhXNM33sUVWGkbxO5rHuHYLB9Z5O/ob0sENKCXAfA== +"@walletconnect/mobile-registry@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.0.13.tgz#bdbe8fa994e9a7e77758c86c331588c57f3c28ea" + integrity sha512-PSPPYMXGy/uafSZR/RIZdG62Hp2KYw0Q7mPVoH3tp3HMifIPtLprHv4uUBDykg/tO3hi9DQnKOD5zQ/ZjYNmYw== -"@walletconnect/qrcode-modal@^1.0.5": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.0.11.tgz#5b34d583c034aed74307350797c66ddce6193744" - integrity sha512-GsSQ/E3ixBEiQz3EOFypW2FCFIS6G37crpJunkLhefi9w2/CMeQ5bk4SIFKyGsAv6uEtwAcPVh7tNkoiGEsb2A== +"@walletconnect/qrcode-modal@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.0.13.tgz#bc7a09481e269403d2acd98186f763a1f40ebde3" + integrity sha512-zTN+9N6vqh+20Rw0l4LGAs3EHhufPC5GaOXL3hfJR7G5+VXN92KSdACvcZlN2bfmXw7NEStKQMNrZ3uIQjcOlQ== dependencies: - "@walletconnect/mobile-registry" "^1.0.11" - "@walletconnect/types" "^1.0.11" - "@walletconnect/utils" "^1.0.11" + "@walletconnect/mobile-registry" "^1.0.13" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" preact "10.4.1" qrcode "1.4.4" -"@walletconnect/socket-transport@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.0.11.tgz#de1f473f37d7b6af813338cd17a4eb0f46553d19" - integrity sha512-96Xy8GHoO8nHxmGfUcLflkv2KtRNwkAkWay8uRAHLGpYQJ5kaKCvHfaSraNPvwKBwQydbWGn50n5aIFiR/lShg== +"@walletconnect/socket-transport@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.0.13.tgz#57de4555308dae4134d508b81c130363cf955c4e" + integrity sha512-w85/UVaAi7ya8r9AZg6l3g76dzIQ13UkMP4+HZjh+oXu9g0akasaKdqBdjVND0eOBv2COfTwuSlpyajSnJOjfQ== dependencies: - "@walletconnect/types" "^1.0.11" + "@walletconnect/types" "^1.0.13" ws "7.3.0" -"@walletconnect/types@^1.0.11", "@walletconnect/types@^1.0.5": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.0.11.tgz#6dd23eb3a8dd2824f76cc2c54217ecca8229d0a2" - integrity sha512-ysIQI6DsMELQAAt5zk2ZMKKyOwgk+XP4KeOhmDk+sIQskBugFl0ARl5iQZzGz9pcrHdlg1Fi7ucGw3UaExqIVA== +"@walletconnect/types@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.0.13.tgz#dcb46722485cf534ed35d16f1a335bd431152507" + integrity sha512-IvfCWjbdRVXFE4ugje7BQV6F4aRDIbVhM+y2x5coKGCiwZ4JcQBFXuY9ZjG3Hwj2wlgIJaQkyVcQ5l2a9kMY/Q== -"@walletconnect/utils@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.0.11.tgz#a6c8bb8b9cf9600684d5825d4b54e1d85ff61230" - integrity sha512-Hgcjq/YYmzrNenpNhftD+I2MqT/f73qwjPYWfubQs2zPN4Hd/xb4cC2fKqIMeuVmoee9MJaLhZGnr+dxcDaH4w== +"@walletconnect/utils@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.0.13.tgz#d8331f3bee7ff4054115e5696607ac35fd29ae4c" + integrity sha512-wBezX/xXAJXS1UpKtv9X0uT2BMDqzG4eyiLSz6hMf1pVdlLYnn+gY7rz0a/P3fS1CxNR/wnt4pXh4qg73GWoQA== dependencies: - "@walletconnect/types" "^1.0.11" + "@walletconnect/types" "^1.0.13" detect-browser "5.1.0" enc-utils "2.1.0" js-sha3 "0.8.0" -"@walletconnect/web3-provider@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.0.5.tgz#c7e3d1a1449b3f1fd6125e3fabd361394dd1ecdd" - integrity sha512-oxrkE1kMZl7mlno7lmupLZS+slDC83nZh5UbE4B2Gr0aOTfT1lqyQMkvSXYOcl0fjR+p0x6iJ4sh0nvhV6Loug== +"@walletconnect/web3-provider@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.0.13.tgz#71aae6975bf281900123331ea24a3ce59d3be598" + integrity sha512-ckmn96H2WZHJsy7StPOCOi7D2bqHwJx5aWuVzbhFPG7fjK/gEg0mPdujoIlbskXv2K5LFV1ZHFaoGrjt38rNOw== dependencies: - "@walletconnect/client" "^1.0.5" - "@walletconnect/http-connection" "^1.0.5" - "@walletconnect/qrcode-modal" "^1.0.5" - "@walletconnect/types" "^1.0.5" - web3-provider-engine "15.0.7" - -"@web3-js/scrypt-shim@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@web3-js/scrypt-shim/-/scrypt-shim-0.1.0.tgz#0bf7529ab6788311d3e07586f7d89107c3bea2cc" - integrity sha512-ZtZeWCc/s0nMcdx/+rZwY1EcuRdemOK9ag21ty9UsHkFxsNb/AaoucUz0iPuyGe0Ku+PFuRmWZG7Z7462p9xPw== - dependencies: - scryptsy "^2.1.0" - semver "^6.3.0" - -"@web3-js/websocket@^1.0.29": - version "1.0.30" - resolved "https://registry.yarnpkg.com/@web3-js/websocket/-/websocket-1.0.30.tgz#9ea15b7b582cf3bf3e8bc1f4d3d54c0731a87f87" - integrity sha512-fDwrD47MiDrzcJdSeTLF75aCcxVVt8B1N74rA+vh2XCAvFy4tEWJjtnUtj2QG7/zlQ6g9cQ88bZFBxwd9/FmtA== - dependencies: - debug "^2.2.0" - es5-ext "^0.10.50" - nan "^2.14.0" - typedarray-to-buffer "^3.1.5" - yaeti "^0.0.6" + "@walletconnect/client" "^1.0.13" + "@walletconnect/http-connection" "^1.0.13" + "@walletconnect/qrcode-modal" "^1.0.13" + "@walletconnect/types" "^1.0.13" + "@walletconnect/utils" "^1.0.13" + web3-provider-engine "15.0.12" "@webassemblyjs/ast@1.8.5": version "1.8.5" @@ -3121,6 +3122,15 @@ array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +array.prototype.flatmap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3293,20 +3303,7 @@ authereum@^0.0.4-beta.157: web3-provider-engine "15.0.4" web3-utils "1.2.1" -autoprefixer@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" - integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001061" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.30" - postcss-value-parser "^4.1.0" - -autoprefixer@^9.6.1: +autoprefixer@9.8.4, autoprefixer@^9.6.1: version "9.8.4" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.4.tgz#736f1012673a70fa3464671d78d41abd54512863" integrity sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A== @@ -4193,17 +4190,17 @@ bn.js@^5.1.1, bn.js@^5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== -bnc-onboard@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.10.0.tgz#f1c2797b10060808a20b46fa072c57a466bb5f6a" - integrity sha512-d/Xj1RxoDOL3IN7bdD0ZENjSkbMXcvn+cWLLOi/7XbI+H+elDZS/knAnYLa99j54Mu+odTSXuBy94EwvXbey0w== +bnc-onboard@1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.10.2.tgz#d3b0efe41253fe7fee8b5bbcccc1ab840a48f443" + integrity sha512-mUXs7EX7zs4khKaxMsDZoqAh5j1yW+Ss0Eu3lUlUXKxggugjDDiErw4QBvO1o/Z+SfJ1X7RzUQbv3bHHIN3teg== dependencies: - "@ledgerhq/hw-app-eth" "^5.7.0" - "@ledgerhq/hw-transport-u2f" "^5.7.0" - "@portis/web3" "^2.0.0-beta.42" + "@ledgerhq/hw-app-eth" "^5.19.0" + "@ledgerhq/hw-transport-u2f" "^5.19.0" + "@portis/web3" "^2.0.0-beta.55" "@toruslabs/torus-embed" "^1.3.0" "@unilogin/provider" "^0.5.21" - "@walletconnect/web3-provider" "^1.0.5" + "@walletconnect/web3-provider" "^1.0.13" authereum "^0.0.4-beta.157" bignumber.js "^9.0.0" bnc-sdk "^2.1.4" @@ -4745,7 +4742,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001087, caniuse-lite@^1.0.30001088: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001087, caniuse-lite@^1.0.30001088: version "1.0.30001088" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz#23a6b9e192106107458528858f2c0e0dba0d9073" integrity sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg== @@ -6463,10 +6460,10 @@ electron-is-dev@^1.1.0: resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-1.2.0.tgz#2e5cea0a1b3ccf1c86f577cee77363ef55deb05e" integrity sha512-R1oD5gMBPS7PVU8gJwH6CtT0e6VSoD0+SzSnYpNm+dBkcijgA+K7VAMHDfnRq/lkKPZArpzplTW6jfiMYosdzw== -electron-log@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.2.1.tgz#a5e9f5b7a9c8cffb6ae5af78b76e68012d5e68da" - integrity sha512-tUI9w3kUP3qhwXJ92RDUPFVZfwtBwKCy/1TsSHndXYLlNCB/7+vkiQG0uxv9D2Leuxc/DJKfYyrdEBpzi/vyZg== +electron-log@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.2.2.tgz#b358dc6d1e4772465609ee3d8ad9f594d9e742c8" + integrity sha512-lBpLh1Q8qayrTxFIrTPcNjSHsosvUfOYyZ8glhiLcx7zCNPDGuj8+nXlEaaSS6LRiQQbLgLG+wKpuvztNzBIrA== electron-notarize@0.3.0: version "0.3.0" @@ -6490,10 +6487,10 @@ electron-publish@22.7.0: lazy-val "^1.0.4" mime "^2.4.5" -electron-settings@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/electron-settings/-/electron-settings-4.0.1.tgz#1b4118679a0316c60705036ab94ae59ab09ca671" - integrity sha512-SLyTCCEbPs7tUU9smWNfs3dWDpVbCaEvOF7kSUJOgV3nZ/22vQUvcHLIKmBMv+AEpHCQMySZRLPvEvIAGSlbFQ== +electron-settings@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/electron-settings/-/electron-settings-4.0.2.tgz#26ef242397393e0e69119f6fb879fc2287d0f508" + integrity sha512-WnUlrnBsO784oXcag0ym+A3ySoIwonz5GhYFsWroMHVzslzmsP+81f/Fof41T9UrRUxuPPKiZPZMwGO+yvWChg== dependencies: lodash.get "^4.4.2" lodash.has "^4.5.2" @@ -6856,10 +6853,10 @@ eslint-plugin-import@2.20.1: read-pkg-up "^2.0.0" resolve "^1.12.0" -eslint-plugin-import@2.21.1: - version "2.21.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.1.tgz#3398318e5e4abbd23395c4964ce61538705154c8" - integrity sha512-qYOOsgUv63vHof7BqbzuD+Ud34bXHxFJxntuAC1ZappFZXYbRIek3aJ7jc9i2dHDGDyZ/0zlO0cpioES265Lsw== +eslint-plugin-import@2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" + integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" @@ -6937,27 +6934,27 @@ eslint-plugin-react@7.19.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" -eslint-plugin-react@^7.18.3: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" - integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA== +eslint-plugin-react@7.20.3: + version "7.20.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz#0590525e7eb83890ce71f73c2cf836284ad8c2f1" + integrity sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg== dependencies: array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" doctrine "^2.1.0" has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" + jsx-ast-utils "^2.4.1" + object.entries "^1.1.2" object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.15.1" + resolve "^1.17.0" string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" -eslint-plugin-sort-destructure-keys@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.3.4.tgz#0e564bec2bcada21a64f1be9eb243b80a880149b" - integrity sha512-isdXh0LxE6WEUkkmNtpXX0W95wqCyYI6PY3w9aEcrWQ2IqUzgHQpCfMcb8BD5Wlp2Y9i91kk2leDiII43C1kww== +eslint-plugin-sort-destructure-keys@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.3.5.tgz#c6f45c3e58d4435564025a6ca5f4a838010800fd" + integrity sha512-JmVpidhDsLwZsmRDV7Tf/vZgOAOEQGkLtwToSvX5mD8fuWYS/xkgMRBsalW1fGlc8CgJJwnzropt4oMQ7YCHLg== dependencies: natural-compare-lite "^1.4.0" @@ -7655,6 +7652,11 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" +exponential-backoff@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.0.1.tgz#c83c5036fea44bcf7274cd40ae207ae234a0c215" + integrity sha512-YOpmVqDXqyLgYrfU2k/RFVvSjy3p0A32aGDmwbR+lbmhROVmeCg6WSGqBgr4HB5AZNElg7Oj4Cm/vIbodLu2Ig== + express@^4.14.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -7944,13 +7946,12 @@ final-form-calculate@^1.3.1: resolved "https://registry.yarnpkg.com/final-form-calculate/-/final-form-calculate-1.3.1.tgz#463089114245afa97fea94712bfbfca11da8413e" integrity sha512-vZCvQ08w9FIoHLkZMcJSIXQr5TAVLxHfLD0thmm50zcNyJESruqhgvurSjWYPLoJGnIgbIb94Rumdg5ZXX5WiQ== -final-form@^4.20.0: - version "4.20.0" - resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.0.tgz#454ba46f783a4c4404ad875cf36f470395ad5efa" - integrity sha512-kdPGNlR/23M2p7ccVwE/vCBQH9TH1NAhhMVkETHbaQXkTWIJdEii3ZdHrOgYvFY7O87myEhcqzx3zjMERtoNJg== +final-form@4.20.1: + version "4.20.1" + resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.1.tgz#525a7f7f27f55c28d8994b157b24d6104fc560e9" + integrity sha512-IIsOK3JRxJrN72OBj7vFWZxtGt3xc1bYwJVPchjVWmDol9DlzMSAOPB+vwe75TUYsw1JaH0fTQnIgwSQZQ9Acg== dependencies: "@babel/runtime" "^7.10.0" - "@scarf/scarf" "^1.0.5" finalhandler@~1.1.2: version "1.1.2" @@ -11000,10 +11001,10 @@ 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.9: - version "10.2.9" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.2.9.tgz#6013ecfa80829cd422446b545fd30a96bca3098c" - integrity sha512-ziRAuXEqvJLSXg43ezBpHxRW8FOJCXISaXU//BWrxRrp5cBdRkIx7g5IsB3OI45xYGE0S6cOacfekSjDyDKF2g== +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== dependencies: chalk "^4.0.0" cli-truncate "2.1.0" @@ -12020,7 +12021,7 @@ node-gyp@^3.8.0, node-gyp@^5.1.0: tar "^4.4.12" which "^1.3.1" -node-hid@^1.2.0: +node-hid@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/node-hid/-/node-hid-1.3.0.tgz#346a468505cee13d69ccd760052cbaf749f66a41" integrity sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g== @@ -12346,7 +12347,7 @@ object.defaults@^1.0.0, object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.entries@^1.1.0, object.entries@^1.1.1: +object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== @@ -13052,10 +13053,10 @@ polished@3.6.3: dependencies: "@babel/runtime" "^7.9.2" -polished@3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.4.tgz#cec6bc0fbffc5d6ce5799c85bcc1bca5e63f1dee" - integrity sha512-21moJXCm/7EvjeKQz5w89QDDKNPCoimc83CqwZZGJluFdMXsFlMQl9lPA/OMRkoceZ19kU0anKlMgZmY7LJSJw== +polished@3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.5.tgz#dbefdde64c675935ec55119fe2a2ab627ca82e9c" + integrity sha512-VwhC9MlhW7O5dg/z7k32dabcAFW1VI2+7fSe8cE/kXcfL7mVdoa5UxciYGW2sJU78ldDLT6+ROEKIZKFNTnUXQ== dependencies: "@babel/runtime" "^7.9.2" @@ -13737,7 +13738,7 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -14050,10 +14051,10 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.0.tgz#8d875f66581c854d7480ac79478abb847de742f6" - integrity sha512-KJe8p8EUcixhPCp4cJoTYVfmgKHjnAB/Pq3fiqlmyNHvpHnOL5U4YE7iI2PYivGHp4HFocWz300906BAQX0H7g== +query-string@6.13.1: + version "6.13.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.1.tgz#d913ccfce3b4b3a713989fe6d39466d92e71ccad" + integrity sha512-RfoButmcK+yCta1+FuU8REvisx1oEzhMKwhLUNcepQTPGcNMp1sIqjnfCtfnvGSQZQEhaBHvccujtWoUV3TTbA== dependencies: decode-uri-component "^0.2.0" split-on-first "^1.0.0" @@ -15074,7 +15075,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.3: +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.5.tgz#b0577b763e909f21a9dea31b4b235b2393f15ef1" integrity sha512-y1QxTQOp0OZnjn19FxBmped4p+BSKPHwGndaqrESseyd2xXZtcgR3yuTIosh8CaMaOii9SKIYerBXnV/CpJ3qw== @@ -15129,6 +15130,13 @@ rxjs@^6.5.2, rxjs@^6.5.3, rxjs@^6.5.4, rxjs@^6.5.5: dependencies: tslib "^1.9.0" +rxjs@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" + integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -15254,7 +15262,12 @@ scrypt-js@2.0.4: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== -scryptsy@2.1.0, scryptsy@^2.1.0: +scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +scryptsy@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== @@ -16829,10 +16842,10 @@ truffle-interface-adapter@^0.2.5: lodash "^4.17.13" web3 "1.2.1" -truffle@5.1.29: - version "5.1.29" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.29.tgz#28073476a9cf68c42dcf608c241e6d96cfb9141c" - integrity sha512-/j5MjilyB7+W81Ssga8gruh3Cm9e1ed3HSdLzfOR8kQJ2u5HTCPYhXrjw89vWmydMUXWd+rha/6Y3mqQm1d+JQ== +truffle@5.1.33: + version "5.1.33" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.1.33.tgz#6cd202f288d35b30a31ffec3e1b96fb367debbdf" + integrity sha512-zV220OC6YtKSOViA+eQpU61orAlNX4msDogecUsjsxjH0MZGIVPMfsh1LiA817KXIg1uEM7G5XPjTaCJeRB8iw== dependencies: app-module-path "^2.2.0" mocha "5.2.0" @@ -16975,10 +16988,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.9.5: - version "3.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" - integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== +typescript@3.9.6: + version "3.9.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a" + integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw== u2f-api@0.2.7: version "0.2.7" @@ -17521,10 +17534,10 @@ web3-bzz@1.2.1: swarm-js "0.1.39" underscore "1.9.1" -web3-bzz@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.8.tgz#7ff2c2de362f82ae3825e48c70ec63b3aca2b8ef" - integrity sha512-jbi24/s2tT7FYuN+ktRvTa5em0GxhqcIYQ8FnD3Zb/ZoEPi+/7rH0Hh+WDol0pSZL+wdz/iM+Z2C9NE42z6EmQ== +web3-bzz@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" + integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== dependencies: "@types/node" "^10.12.18" got "9.6.0" @@ -17540,15 +17553,6 @@ web3-core-helpers@1.2.1: web3-eth-iban "1.2.1" web3-utils "1.2.1" -web3-core-helpers@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.8.tgz#86776d8f658b63bb630c84a314686661e599aa68" - integrity sha512-Wrl7ZPKn3Xyg0Hl5+shDnJcLP+EtTfThmQ1eCJLcg/BZqvLUR1SkOslNlhEojcYeBwhhymAKs8dfQbtYi+HMnw== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.8" - web3-utils "1.2.8" - web3-core-helpers@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" @@ -17569,17 +17573,6 @@ web3-core-method@1.2.1: web3-core-subscriptions "1.2.1" web3-utils "1.2.1" -web3-core-method@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.8.tgz#f28a79935432aebfa019e4a50f9b6ae6c9ef4297" - integrity sha512-69qbvOgx0Frw46dXvEKzYgtaPXpUaQAlQmczgb0ZUBHsEU2K7jTtFgBy6kVBgAwsXDvoZ99AX4SjpY2dTMwPkw== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.8" - web3-core-promievent "1.2.8" - web3-core-subscriptions "1.2.8" - web3-utils "1.2.8" - web3-core-method@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" @@ -17600,13 +17593,6 @@ web3-core-promievent@1.2.1: any-promise "1.3.0" eventemitter3 "3.1.2" -web3-core-promievent@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.8.tgz#a93ca2a19cae8b60883412619e04e69e11804eb5" - integrity sha512-3EdRieaHpBVVhfGjoREQfdoCM3xC0WwWjXXzT6oTldotfYC38kwk/GW8c8txYiLP/KxhslAN1cJSlXNOJjKSog== - dependencies: - eventemitter3 "3.1.2" - web3-core-promievent@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" @@ -17625,17 +17611,6 @@ web3-core-requestmanager@1.2.1: web3-providers-ipc "1.2.1" web3-providers-ws "1.2.1" -web3-core-requestmanager@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.8.tgz#da7259e72a433858d04c59b999c5116bfb797c09" - integrity sha512-bwc2ABG6yzgTy28fv4t59g+tf6+UmTRMoF8HqTeiNDffoMKP2akyKFZeu1oD2gE7j/7GA75TAUjwJ7pH9ek1MA== - dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.8" - web3-providers-http "1.2.8" - web3-providers-ipc "1.2.8" - web3-providers-ws "1.2.8" - web3-core-requestmanager@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" @@ -17656,15 +17631,6 @@ web3-core-subscriptions@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" -web3-core-subscriptions@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.8.tgz#50945498fb0bd655f842cbcc13873d96956aa93e" - integrity sha512-wmsRJ4ipwoF1mlOR+Oo8JdKigpkoVNQtqiRUuyQrTVhJx7GBuSaAIenpBYlkucC+RgByoGybR7Q3tTNJ6z/2tQ== - dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.8" - web3-core-subscriptions@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" @@ -17684,19 +17650,6 @@ web3-core@1.2.1: web3-core-requestmanager "1.2.1" web3-utils "1.2.1" -web3-core@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.8.tgz#2a488bb11519b71e7738265329bddc00fc200dd3" - integrity sha512-hvlYWyE1UcLoGa6qF1GoxGgi1quFsZOdwIUIVsAp+sp0plXp/Nqva2lAjJ+FFyWtVKbC7Zq+qwTJ4iP1aN0vTg== - dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" - bignumber.js "^9.0.0" - web3-core-helpers "1.2.8" - web3-core-method "1.2.8" - web3-core-requestmanager "1.2.8" - web3-utils "1.2.8" - web3-core@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" @@ -17719,15 +17672,6 @@ web3-eth-abi@1.2.1: underscore "1.9.1" web3-utils "1.2.1" -web3-eth-abi@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.8.tgz#7537138f3e5cd1ccf98233fa07f388aa8dc1fff1" - integrity sha512-OKp/maLdKHPpQxZhEd0HgnCJFQajsGe42WOG6SVftlgzyR8Jjv4KNm46TKvb3hv5OJTKZWU7nZIxkEG+fyI58w== - dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.8" - web3-eth-abi@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" @@ -17754,22 +17698,22 @@ web3-eth-accounts@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -web3-eth-accounts@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.8.tgz#e63afc6d4902f2beb0cf60e6b755c86fa5b5ccd7" - integrity sha512-QODqSD4SZN/1oWfvlvsuum6Ud9+2FUTW4VTPJh245YTewCpa0M5+Fzug3UTeUZNv88STwC//dV72zReITNh4ZQ== +web3-eth-accounts@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" + integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== dependencies: - "@web3-js/scrypt-shim" "^0.1.0" crypto-browserify "3.12.0" eth-lib "^0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" + scrypt-js "^3.0.1" underscore "1.9.1" uuid "3.3.2" - web3-core "1.2.8" - web3-core-helpers "1.2.8" - web3-core-method "1.2.8" - web3-utils "1.2.8" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-utils "1.2.9" web3-eth-contract@1.2.1: version "1.2.1" @@ -17785,22 +17729,7 @@ web3-eth-contract@1.2.1: web3-eth-abi "1.2.1" web3-utils "1.2.1" -web3-eth-contract@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.8.tgz#ff75920ac698a70781edcebbf75287a6d0f14499" - integrity sha512-EWRLVhZksbzGAyHd7RaOsakjCJBA2BREWiJmBDlrxDBqw8HltXFzKdkRug/mwVNa5ZYMabKSRF/MMh0Sx06CFw== - dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.8" - web3-core-helpers "1.2.8" - web3-core-method "1.2.8" - web3-core-promievent "1.2.8" - web3-core-subscriptions "1.2.8" - web3-eth-abi "1.2.8" - web3-utils "1.2.8" - -web3-eth-contract@^1.2.9: +web3-eth-contract@1.2.9, web3-eth-contract@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== @@ -17829,20 +17758,20 @@ web3-eth-ens@1.2.1: web3-eth-contract "1.2.1" web3-utils "1.2.1" -web3-eth-ens@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.8.tgz#247daddfdbf7533adb0f45cd2f75c75e52f7e678" - integrity sha512-zsFXY26BMGkihPkEO5qj9AEqyxPH4mclbzYs1dyrw7sHFmrUvhZc+jLGT9WyQGoujq37RN2l/tlOpCaFVVR8ng== +web3-eth-ens@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" + integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" underscore "1.9.1" - web3-core "1.2.8" - web3-core-helpers "1.2.8" - web3-core-promievent "1.2.8" - web3-eth-abi "1.2.8" - web3-eth-contract "1.2.8" - web3-utils "1.2.8" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-promievent "1.2.9" + web3-eth-abi "1.2.9" + web3-eth-contract "1.2.9" + web3-utils "1.2.9" web3-eth-iban@1.2.1: version "1.2.1" @@ -17852,14 +17781,6 @@ web3-eth-iban@1.2.1: bn.js "4.11.8" web3-utils "1.2.1" -web3-eth-iban@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.8.tgz#414e80a7fb2d1ea16490bc2c8fc29a996aec5612" - integrity sha512-xgPUOuDOQJYloUS334/wot6jvp6K8JBz8UvQ1tAxU9LO2v2DW+IDTJ5gQ6TdutTmzdDi97KdwhwnQwhQh5Z1PA== - dependencies: - bn.js "4.11.8" - web3-utils "1.2.8" - web3-eth-iban@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" @@ -17879,17 +17800,17 @@ web3-eth-personal@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" -web3-eth-personal@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.8.tgz#8ebb27210b4c9c9555a30c5bb2ce8db12f84cd24" - integrity sha512-sWhxF1cpF9pB1wMISrOSy/i8IB1NWtvoXT9dfkWtvByGf3JfC2DlnllLaA1f9ohyvxnR+QTgPKgOQDknmqDstw== +web3-eth-personal@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" + integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== dependencies: "@types/node" "^12.6.1" - web3-core "1.2.8" - web3-core-helpers "1.2.8" - web3-core-method "1.2.8" - web3-net "1.2.8" - web3-utils "1.2.8" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-net "1.2.9" + web3-utils "1.2.9" web3-eth@1.2.1: version "1.2.1" @@ -17910,24 +17831,24 @@ web3-eth@1.2.1: web3-net "1.2.1" web3-utils "1.2.1" -web3-eth@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.8.tgz#cf6a16fae4d7c12b90cfb6ef570cb1a2acc34c1b" - integrity sha512-CEnVIIR1zZQ9vQh/kPFAUbvbbHYkC84y15jdhRUDDGR6bs4FxO2NNWR2YDtNe038lrz747tZahsC9kEiGkJFZQ== +web3-eth@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" + integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== dependencies: underscore "1.9.1" - web3-core "1.2.8" - web3-core-helpers "1.2.8" - web3-core-method "1.2.8" - web3-core-subscriptions "1.2.8" - web3-eth-abi "1.2.8" - web3-eth-accounts "1.2.8" - web3-eth-contract "1.2.8" - web3-eth-ens "1.2.8" - web3-eth-iban "1.2.8" - web3-eth-personal "1.2.8" - web3-net "1.2.8" - web3-utils "1.2.8" + web3-core "1.2.9" + web3-core-helpers "1.2.9" + web3-core-method "1.2.9" + web3-core-subscriptions "1.2.9" + web3-eth-abi "1.2.9" + web3-eth-accounts "1.2.9" + web3-eth-contract "1.2.9" + web3-eth-ens "1.2.9" + web3-eth-iban "1.2.9" + web3-eth-personal "1.2.9" + web3-net "1.2.9" + web3-utils "1.2.9" web3-net@1.2.1: version "1.2.1" @@ -17938,14 +17859,42 @@ web3-net@1.2.1: web3-core-method "1.2.1" web3-utils "1.2.1" -web3-net@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.8.tgz#582fc2d4ba32c2e5c7761624e4be7c5434142d66" - integrity sha512-Nsq6qgncvvThOjC+sQ+NfDH8L7jclQCFzLFYa9wsd5J6HJ6f5gJl/mv6rsZQX9iDEYDPKkDfyqHktynOBgKWMQ== +web3-net@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" + integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== dependencies: - web3-core "1.2.8" - web3-core-method "1.2.8" - web3-utils "1.2.8" + web3-core "1.2.9" + web3-core-method "1.2.9" + web3-utils "1.2.9" + +web3-provider-engine@15.0.12, web3-provider-engine@^15.0.4: + version "15.0.12" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.12.tgz#24d7f2f6fb6de856824c7306291018c4fc543ac3" + integrity sha512-/OfhQalKPND1iB5ggvGuYF0+SIb2Qj5OFTrT2VrZWP79UhMTdP7T+L2FtblmRdCeOetoAzZHdBaIwLOZsmIX+w== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^4.4.2" + eth-json-rpc-errors "^2.0.2" + eth-json-rpc-filters "^4.1.1" + eth-json-rpc-infura "^4.0.1" + eth-json-rpc-middleware "^4.1.5" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" web3-provider-engine@15.0.4: version "15.0.4" @@ -17975,62 +17924,6 @@ web3-provider-engine@15.0.4: xhr "^2.2.0" xtend "^4.0.1" -web3-provider-engine@15.0.7: - version "15.0.7" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.7.tgz#2439cdb145140660eb1007e7c6acd2d2d867b432" - integrity sha512-0NN0JTc4O/J9NFBtdqc4Ug+ujnniIBTCvauw3OlgZzfjnwr4irDU5CpviS5v33arYpC+WMnaDunad/OFrO/Wcw== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^2.0.2" - eth-json-rpc-filters "^4.1.1" - eth-json-rpc-infura "^4.0.1" - eth-json-rpc-middleware "^4.1.5" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - -web3-provider-engine@^15.0.4: - version "15.0.12" - resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.12.tgz#24d7f2f6fb6de856824c7306291018c4fc543ac3" - integrity sha512-/OfhQalKPND1iB5ggvGuYF0+SIb2Qj5OFTrT2VrZWP79UhMTdP7T+L2FtblmRdCeOetoAzZHdBaIwLOZsmIX+w== - dependencies: - async "^2.5.0" - backoff "^2.5.0" - clone "^2.0.0" - cross-fetch "^2.1.0" - eth-block-tracker "^4.4.2" - eth-json-rpc-errors "^2.0.2" - eth-json-rpc-filters "^4.1.1" - eth-json-rpc-infura "^4.0.1" - eth-json-rpc-middleware "^4.1.5" - eth-sig-util "^1.4.2" - ethereumjs-block "^1.2.2" - ethereumjs-tx "^1.2.0" - ethereumjs-util "^5.1.5" - ethereumjs-vm "^2.3.4" - json-stable-stringify "^1.0.1" - promise-to-callback "^1.0.0" - readable-stream "^2.2.9" - request "^2.85.0" - semaphore "^1.0.3" - ws "^5.1.1" - xhr "^2.2.0" - xtend "^4.0.1" - "web3-provider-engine@https://github.com/trufflesuite/provider-engine#web3-one": version "14.0.6" resolved "https://github.com/trufflesuite/provider-engine#9694f5b4e5500651bd2ff689df8529bb5cf6b96f" @@ -18066,14 +17959,6 @@ web3-providers-http@1.2.1: web3-core-helpers "1.2.1" xhr2-cookies "1.1.0" -web3-providers-http@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.8.tgz#cd7fc4d49df6980b5dd0fb1b5a808bc4b6a0069d" - integrity sha512-Esj4SpgabmBDOR4QD3qYapzwFYWHigcdgdjvt/VWT5/7TD10o52hr+Nsvp3/XV5AFrcCMdY+lzKFLVH24u0sww== - dependencies: - web3-core-helpers "1.2.8" - xhr2-cookies "1.1.0" - web3-providers-http@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" @@ -18091,15 +17976,6 @@ web3-providers-ipc@1.2.1: underscore "1.9.1" web3-core-helpers "1.2.1" -web3-providers-ipc@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.8.tgz#47be918ddd077999aa14703169b76c807f45d894" - integrity sha512-ts3/UXCTRADPASdJ27vBVmcfM+lfG9QVBxGedY6+oNIo5EPxBUtsz94R32sfvFd6ofPsz6gOhK/M/ZKiJoi1sg== - dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.8" - web3-providers-ipc@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" @@ -18118,16 +17994,6 @@ web3-providers-ws@1.2.1: web3-core-helpers "1.2.1" websocket "github:web3-js/WebSocket-Node#polyfill/globalThis" -web3-providers-ws@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.8.tgz#9e6454edc82d753d398c8d1e044632c234434a46" - integrity sha512-Gcm0n82wd/XVeGFGTx+v56UqyrV9EyB2r1QFaBx4mS+VHbW2MCOdiRbNDfoZQslflnCWl8oHsivJ8Tya9kqlTQ== - dependencies: - "@web3-js/websocket" "^1.0.29" - eventemitter3 "^4.0.0" - underscore "1.9.1" - web3-core-helpers "1.2.8" - web3-providers-ws@1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" @@ -18148,15 +18014,15 @@ web3-shh@1.2.1: web3-core-subscriptions "1.2.1" web3-net "1.2.1" -web3-shh@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.8.tgz#5162d9d13bc6838d390df1cd39e5f87235c1c2ae" - integrity sha512-e29qKSfuZWDmxCG/uB48Nth6DCFFr2h2U+uI/fHEuhEjAEkBHopPNLc3ixrCTc6pqMocfJRPHJq/yET9PYN3oQ== +web3-shh@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" + integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== dependencies: - web3-core "1.2.8" - web3-core-method "1.2.8" - web3-core-subscriptions "1.2.8" - web3-net "1.2.8" + web3-core "1.2.9" + web3-core-method "1.2.9" + web3-core-subscriptions "1.2.9" + web3-net "1.2.9" web3-utils@1.2.1: version "1.2.1" @@ -18171,20 +18037,6 @@ web3-utils@1.2.1: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.8.tgz#5321d91715cd4c0869005705a33c4c042a532b18" - integrity sha512-9SIVGFLajwlmo5joC4DGxuy2OeDkRCXVWT8JWcDQ+BayNVHyAWGvn0oGkQ0ys14Un0KK6bjjKoD0xYs4k+FaVw== - dependencies: - bn.js "4.11.8" - eth-lib "0.2.7" - ethereum-bloom-filters "^1.0.6" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - underscore "1.9.1" - utf8 "3.0.0" - web3-utils@1.2.9, web3-utils@^1.2.8, web3-utils@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3" @@ -18212,18 +18064,18 @@ web3@1.2.1: web3-shh "1.2.1" web3-utils "1.2.1" -web3@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.8.tgz#20b24baa769e0224a708ef5bf196a5b83d19540b" - integrity sha512-rXUn16VKxn2aIe9v0KX+bSm2JXdq/Vnj3lZ0Rub2Q5YUSycHdCBaDtJRukl/jB5ygAdyr5/cUwvJzhNDJSYsGw== +web3@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" + integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== dependencies: - web3-bzz "1.2.8" - web3-core "1.2.8" - web3-eth "1.2.8" - web3-eth-personal "1.2.8" - web3-net "1.2.8" - web3-shh "1.2.8" - web3-utils "1.2.8" + web3-bzz "1.2.9" + web3-core "1.2.9" + web3-eth "1.2.9" + web3-eth-personal "1.2.9" + web3-net "1.2.9" + web3-shh "1.2.9" + web3-utils "1.2.9" web3@^0.20.7: version "0.20.7" @@ -18395,6 +18247,7 @@ websocket@^1.0.31: dependencies: debug "^2.2.0" es5-ext "^0.10.50" + gulp "^4.0.2" nan "^2.14.0" typedarray-to-buffer "^3.1.5" yaeti "^0.0.6" From fe5daf9e7cf9e0449723af75d7c53778dfd036e7 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Mon, 6 Jul 2020 18:10:07 -0300 Subject: [PATCH 14/17] Add icon for windows --- .gitignore | 3 +-- public/build/icon.ico | Bin 0 -> 109037 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 public/build/icon.ico diff --git a/.gitignore b/.gitignore index 78cf7778..ab9cb3f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ node_modules/ -build/ +./build .DS_Store yarn-error.log .env* -.idea/ dist electron-builder.yml .yalc/ diff --git a/public/build/icon.ico b/public/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8039e7963dcf3e9fb45bb7fb2dbbd93ed9b46b4e GIT binary patch literal 109037 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 literal 0 HcmV?d00001 From cc9ce543c924be5ec5be72e054ef2241e8c38e6e Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Mon, 6 Jul 2020 18:18:31 -0300 Subject: [PATCH 15/17] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ab9cb3f7..8b241ad0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules/ .DS_Store yarn-error.log .env* +.idea dist electron-builder.yml .yalc/ From 521354206fc8055e397641ee8cbc106a2e777de3 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Mon, 6 Jul 2020 18:18:43 -0300 Subject: [PATCH 16/17] Update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8b241ad0..57e7baa0 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ node_modules/ .DS_Store yarn-error.log .env* -.idea +.idea/ dist electron-builder.yml .yalc/ From 9a1948547dbf9ca3b115707808d5ea9dc2c12ce8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jul 2020 03:37:57 +0000 Subject: [PATCH 17/17] Bump electron from 7.1.8 to 7.2.4 Bumps [electron](https://github.com/electron/electron) from 7.1.8 to 7.2.4. - [Release notes](https://github.com/electron/electron/releases) - [Changelog](https://github.com/electron/electron/blob/master/docs/breaking-changes.md) - [Commits](https://github.com/electron/electron/compare/v7.1.8...v7.2.4) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2099c2b3..65ceb57f 100644 --- a/package.json +++ b/package.json @@ -222,7 +222,7 @@ "cross-env": "^7.0.2", "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", - "electron": "7.1.8", + "electron": "7.2.4", "electron-builder": "22.7.0", "electron-notarize": "0.3.0", "eslint": "6.8.0", diff --git a/yarn.lock b/yarn.lock index 48179765..d2c8aa7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6517,10 +6517,10 @@ electron-updater@4.3.1: lodash.isequal "^4.5.0" semver "^7.1.3" -electron@7.1.8: - version "7.1.8" - resolved "https://registry.yarnpkg.com/electron/-/electron-7.1.8.tgz#7cd50fdf42c55c9de86ab126e983d23fd89d5d99" - integrity sha512-1cWT7toVcSTKu3HdnhDQpbTmI5QCSKtIbg+wHUkSZCdAqjPcuH+dpm+j21g38LbE2DoIzdryaN0RTZOqTPebMA== +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== dependencies: "@electron/get" "^1.0.1" "@types/node" "^12.0.12"