mirror of
https://github.com/status-im/safe-react.git
synced 2025-02-27 00:40:38 +00:00
Merge branch 'development' into hotfix/v2.15.1
This commit is contained in:
commit
9ef6d36ba1
41
package.json
41
package.json
@ -16,7 +16,7 @@
|
||||
"email": "safe@gnosis.io"
|
||||
},
|
||||
"main": "public/electron.js",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
"postinstall": "patch-package electron-builder install-app-deps",
|
||||
"scripts": {
|
||||
"analyze": "source-map-explorer 'build/static/js/*.js'",
|
||||
"build-desktop": "cross-env REACT_APP_BUILD_FOR_DESKTOP=true REACT_APP_ENV=production yarn build-mainnet",
|
||||
@ -30,7 +30,7 @@
|
||||
"generate-types:contracts": "cross-env typechain --target=web3-v1 --outDir './src/types/contracts' './node_modules/@gnosis.pm/safe-contracts/build/contracts/*.json'",
|
||||
"lint:check": "eslint './src/**/*.{js,jsx,ts,tsx}'",
|
||||
"lint:fix": "yarn lint:check --fix",
|
||||
"postinstall": "electron-builder install-app-deps && yarn generate-types",
|
||||
"postinstall": "patch-package && electron-builder install-app-deps && yarn generate-types",
|
||||
"preelectron-pack": "yarn build",
|
||||
"prettier:check": "yarn prettier --check",
|
||||
"prettier:fix": "yarn prettier --write",
|
||||
@ -170,18 +170,18 @@
|
||||
"@gnosis.pm/safe-contracts": "1.1.1-dev.2",
|
||||
"@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#03ff672d6f73366297986d58631f9582fe2ed4a3",
|
||||
"@gnosis.pm/util-contracts": "2.0.6",
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "5.29.0",
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "5.30.0",
|
||||
"@material-ui/core": "4.11.0",
|
||||
"@material-ui/icons": "4.9.1",
|
||||
"@material-ui/lab": "4.0.0-alpha.56",
|
||||
"@openzeppelin/contracts": "3.1.0",
|
||||
"@sentry/react": "^5.27.3",
|
||||
"@sentry/tracing": "^5.27.3",
|
||||
"@truffle/contract": "4.2.28",
|
||||
"@sentry/react": "^5.27.0",
|
||||
"@sentry/tracing": "^5.27.0",
|
||||
"@truffle/contract": "4.2.30",
|
||||
"async-sema": "^3.1.0",
|
||||
"axios": "0.21.0",
|
||||
"bignumber.js": "9.0.1",
|
||||
"bnc-onboard": "1.14.0",
|
||||
"bnc-onboard": "1.15.0",
|
||||
"classnames": "^2.2.6",
|
||||
"concurrently": "^5.3.0",
|
||||
"connected-react-router": "6.8.0",
|
||||
@ -209,25 +209,25 @@
|
||||
"material-ui-search-bar": "^1.0.0",
|
||||
"notistack": "https://github.com/gnosis/notistack.git#v0.9.4",
|
||||
"qrcode.react": "1.0.0",
|
||||
"query-string": "6.13.6",
|
||||
"query-string": "6.13.7",
|
||||
"react": "16.13.1",
|
||||
"react-dom": "16.13.1",
|
||||
"react-final-form": "^6.5.2",
|
||||
"react-final-form-listeners": "^1.0.2",
|
||||
"react-ga": "3.2.0",
|
||||
"react-ga": "3.2.1",
|
||||
"react-hot-loader": "4.13.0",
|
||||
"react-qr-reader": "^2.2.1",
|
||||
"react-redux": "7.2.1",
|
||||
"react-redux": "7.2.2",
|
||||
"react-router-dom": "5.2.0",
|
||||
"react-scripts": "^3.4.3",
|
||||
"react-window": "^1.8.5",
|
||||
"react-window": "^1.8.6",
|
||||
"recompose": "^0.30.0",
|
||||
"redux": "4.0.5",
|
||||
"redux-actions": "^2.6.5",
|
||||
"redux-thunk": "^2.3.0",
|
||||
"reselect": "^4.0.0",
|
||||
"semver": "7.3.2",
|
||||
"styled-components": "^5.2.0",
|
||||
"styled-components": "^5.2.1",
|
||||
"web3": "1.2.11",
|
||||
"web3-core": "^1.2.11",
|
||||
"web3-eth-contract": "^1.2.11",
|
||||
@ -238,7 +238,7 @@
|
||||
"@storybook/addon-actions": "^5.3.19",
|
||||
"@storybook/addon-links": "^5.3.19",
|
||||
"@storybook/addons": "^5.3.19",
|
||||
"@storybook/preset-create-react-app": "^3.1.4",
|
||||
"@storybook/preset-create-react-app": "^3.1.5",
|
||||
"@storybook/react": "^5.3.19",
|
||||
"@testing-library/jest-dom": "5.11.5",
|
||||
"@testing-library/react": "10.4.9",
|
||||
@ -258,24 +258,25 @@
|
||||
"cross-env": "^7.0.2",
|
||||
"dotenv": "^8.2.0",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"electron": "9.3.3",
|
||||
"electron": "^9.3.3",
|
||||
"electron-builder": "22.9.1",
|
||||
"electron-notarize": "1.0.0",
|
||||
"eslint": "6.8.0",
|
||||
"eslint-config-prettier": "6.14.0",
|
||||
"eslint-plugin-import": "2.22.1",
|
||||
"eslint-config-prettier": "^6.14.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-jsx-a11y": "^6.3.1",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"eslint-plugin-react": "^7.21.5",
|
||||
"eslint-plugin-sort-destructure-keys": "1.3.5",
|
||||
"eslint-plugin-sort-destructure-keys": "^1.3.5",
|
||||
"ethereumjs-abi": "0.6.8",
|
||||
"husky": "^4.3.0",
|
||||
"lint-staged": "^10.5.1",
|
||||
"node-sass": "^4.14.1",
|
||||
"prettier": "2.1.2",
|
||||
"patch-package": "^6.2.2",
|
||||
"postinstall-postinstall": "^2.1.0",
|
||||
"prettier": "^2.1.2",
|
||||
"react-app-rewired": "^2.1.6",
|
||||
"react-docgen-typescript-loader": "^3.7.2",
|
||||
"typechain": "^2.0.0",
|
||||
"typechain": "^4.0.0",
|
||||
"typescript": "4.0.5",
|
||||
"wait-on": "5.2.0"
|
||||
}
|
||||
|
19
patches/web3-eth+1.2.11.patch
Normal file
19
patches/web3-eth+1.2.11.patch
Normal file
@ -0,0 +1,19 @@
|
||||
diff --git a/node_modules/web3-eth/src/getNetworkType.js b/node_modules/web3-eth/src/getNetworkType.js
|
||||
index 3be3a20..88edbd9 100644
|
||||
--- a/node_modules/web3-eth/src/getNetworkType.js
|
||||
+++ b/node_modules/web3-eth/src/getNetworkType.js
|
||||
@@ -63,6 +63,14 @@ var getNetworkType = function (callback) {
|
||||
id === 42) {
|
||||
returnValue = 'kovan';
|
||||
}
|
||||
+ if (genesis.hash === '0x0b6d3e680af2fc525392c720666cce58e3d8e6fe75ba4b48cb36bcc69039229b' &&
|
||||
+ id === 246) {
|
||||
+ returnValue = 'energyWebChain';
|
||||
+ }
|
||||
+ if (genesis.hash === '0xebd8b413ca7b7f84a8dd20d17519ce2b01954c74d94a0a739a3e416abe0e43e5' &&
|
||||
+ id === 73799) {
|
||||
+ returnValue = 'volta';
|
||||
+ }
|
||||
|
||||
if (_.isFunction(callback)) {
|
||||
callback(null, returnValue);
|
15
patches/web3-eth-ens+1.2.11.patch
Normal file
15
patches/web3-eth-ens+1.2.11.patch
Normal file
@ -0,0 +1,15 @@
|
||||
diff --git a/node_modules/web3-eth-ens/src/config.js b/node_modules/web3-eth-ens/src/config.js
|
||||
index b12e5f5..e0abf2d 100644
|
||||
--- a/node_modules/web3-eth-ens/src/config.js
|
||||
+++ b/node_modules/web3-eth-ens/src/config.js
|
||||
@@ -30,7 +30,9 @@ var config = {
|
||||
main: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
||||
ropsten: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
||||
rinkeby: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
||||
- goerli: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
|
||||
+ goerli: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
|
||||
+ energyWebChain: "0x0A6d64413c07E10E890220BBE1c49170080C6Ca0",
|
||||
+ volta: "0xd7CeF70Ba7efc2035256d828d5287e2D285CD1ac",
|
||||
},
|
||||
// These ids obtained at ensdomains docs:
|
||||
// https://docs.ens.domains/contract-developer-guide/writing-a-resolver
|
@ -130,10 +130,13 @@ const SafeHeader = ({
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* Network */}
|
||||
<StyledTextLabel size="sm" networkInfo={networkInfo}>
|
||||
{networkInfo.label}
|
||||
</StyledTextLabel>
|
||||
|
||||
<Container>
|
||||
{/* Identicon */}
|
||||
<IdenticonContainer>
|
||||
<FlexSpacer />
|
||||
<Identicon address={address} size="lg" />
|
||||
@ -142,6 +145,7 @@ const SafeHeader = ({
|
||||
</UnStyledButton>
|
||||
</IdenticonContainer>
|
||||
|
||||
{/* SafeInfo */}
|
||||
<Text size="xl">{safeName}</Text>
|
||||
<StyledEthHashInfo hash={address} shortenHash={4} textSize="sm" />
|
||||
<IconContainer>
|
||||
|
@ -16,7 +16,7 @@ const HelpContainer = styled.div`
|
||||
const HelpCenterLink = styled.a`
|
||||
height: 30px;
|
||||
width: 166px;
|
||||
padding: 6px 0 0 16px;
|
||||
padding: 8px 0 8px 16px;
|
||||
margin: 14px 0px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
|
@ -6,53 +6,62 @@ import Header from './Header'
|
||||
import Footer from './Footer'
|
||||
import Sidebar from './Sidebar'
|
||||
|
||||
const Grid = styled.div`
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
const Container = styled.div`
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
background-color: ${({ theme }) => theme.colors.background};
|
||||
display: grid;
|
||||
grid-template-columns: 200px 1fr;
|
||||
grid-template-rows: 54px 1fr;
|
||||
grid-template-areas:
|
||||
'topbar topbar'
|
||||
'sidebar body';
|
||||
`
|
||||
|
||||
const GridTopbarWrapper = styled.nav`
|
||||
const HeaderWrapper = styled.nav`
|
||||
height: 54px;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
background-color: white;
|
||||
box-shadow: 0 2px 4px 0 rgba(212, 212, 211, 0.59);
|
||||
border-bottom: 2px solid ${({ theme }) => theme.colors.separator};
|
||||
z-index: 999;
|
||||
grid-area: topbar;
|
||||
box-shadow: 0 0 4px 0 rgba(212, 212, 211, 0.59);
|
||||
`
|
||||
|
||||
const GridSidebarWrapper = styled.aside`
|
||||
width: 200px;
|
||||
padding: 62px 8px 0 8px;
|
||||
const BodyWrapper = styled.div`
|
||||
height: calc(100% - 54px);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
`
|
||||
|
||||
const SidebarWrapper = styled.aside`
|
||||
height: 100%;
|
||||
width: 200px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 1;
|
||||
|
||||
padding: 8px;
|
||||
background-color: ${({ theme }) => theme.colors.white};
|
||||
border-right: 2px solid ${({ theme }) => theme.colors.separator};
|
||||
`
|
||||
|
||||
const ContentWrapper = styled.section`
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
grid-area: sidebar;
|
||||
`
|
||||
overflow-x: auto;
|
||||
|
||||
const GridBodyWrapper = styled.section`
|
||||
margin: 0 16px 0 16px;
|
||||
grid-area: body;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-content: stretch;
|
||||
`
|
||||
padding: 0 16px;
|
||||
|
||||
export const BodyWrapper = styled.div`
|
||||
flex: 1 100%;
|
||||
`
|
||||
> :nth-child(1) {
|
||||
flex-grow: 1;
|
||||
width: 100%;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
export const FooterWrapper = styled.footer`
|
||||
margin: 0 16px;
|
||||
> :nth-child(2) {
|
||||
width: 100%;
|
||||
height: 59px;
|
||||
}
|
||||
`
|
||||
|
||||
type Props = {
|
||||
@ -77,11 +86,12 @@ const Layout: React.FC<Props> = ({
|
||||
children,
|
||||
sidebarItems,
|
||||
}): React.ReactElement => (
|
||||
<Grid>
|
||||
<GridTopbarWrapper>
|
||||
<Container>
|
||||
<HeaderWrapper>
|
||||
<Header />
|
||||
</GridTopbarWrapper>
|
||||
<GridSidebarWrapper>
|
||||
</HeaderWrapper>
|
||||
<BodyWrapper>
|
||||
<SidebarWrapper>
|
||||
<Sidebar
|
||||
items={sidebarItems}
|
||||
safeAddress={safeAddress}
|
||||
@ -92,14 +102,13 @@ const Layout: React.FC<Props> = ({
|
||||
onReceiveClick={onReceiveClick}
|
||||
onNewTransactionClick={onNewTransactionClick}
|
||||
/>
|
||||
</GridSidebarWrapper>
|
||||
<GridBodyWrapper>
|
||||
<BodyWrapper>{children}</BodyWrapper>
|
||||
<FooterWrapper>
|
||||
</SidebarWrapper>
|
||||
<ContentWrapper>
|
||||
<div>{children}</div>
|
||||
<Footer />
|
||||
</FooterWrapper>
|
||||
</GridBodyWrapper>
|
||||
</Grid>
|
||||
</ContentWrapper>
|
||||
</BodyWrapper>
|
||||
</Container>
|
||||
)
|
||||
|
||||
export default Layout
|
||||
|
@ -16,7 +16,7 @@ const styles = () => ({
|
||||
position: 'absolute',
|
||||
top: '120px',
|
||||
width: '500px',
|
||||
height: '530px',
|
||||
height: '540px',
|
||||
borderRadius: sm,
|
||||
backgroundColor: '#ffffff',
|
||||
boxShadow: '0 0 5px 0 rgba(74, 85, 121, 0.5)',
|
||||
|
@ -3,7 +3,7 @@ import { useState } from 'react'
|
||||
import * as React from 'react'
|
||||
|
||||
import QRIcon from 'src/assets/icons/qrcode.svg'
|
||||
import ScanQRModal from 'src/components/ScanQRModal'
|
||||
import { ScanQRModal } from 'src/components/ScanQRModal'
|
||||
import Img from 'src/components/layout/Img'
|
||||
|
||||
const useStyles = makeStyles({
|
||||
@ -12,7 +12,11 @@ const useStyles = makeStyles({
|
||||
},
|
||||
})
|
||||
|
||||
export const ScanQRWrapper = (props) => {
|
||||
type Props = {
|
||||
handleScan: (dataResult: string, closeQrModal: () => void) => void
|
||||
}
|
||||
|
||||
export const ScanQRWrapper = ({ handleScan }: Props): React.ReactElement => {
|
||||
const classes = useStyles()
|
||||
const [qrModalOpen, setQrModalOpen] = useState(false)
|
||||
|
||||
@ -25,7 +29,7 @@ export const ScanQRWrapper = (props) => {
|
||||
}
|
||||
|
||||
const onScanFinished = (value) => {
|
||||
props.handleScan(value, closeQrModal)
|
||||
handleScan(value, closeQrModal)
|
||||
}
|
||||
|
||||
return (
|
||||
@ -34,9 +38,7 @@ export const ScanQRWrapper = (props) => {
|
||||
alt="Scan QR"
|
||||
className={classes.qrCodeBtn}
|
||||
height={20}
|
||||
onClick={() => {
|
||||
openQrModal()
|
||||
}}
|
||||
onClick={() => openQrModal()}
|
||||
role="button"
|
||||
src={QRIcon}
|
||||
testId="qr-icon"
|
||||
|
@ -1,6 +1,6 @@
|
||||
import CircularProgress from '@material-ui/core/CircularProgress'
|
||||
import IconButton from '@material-ui/core/IconButton'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import { makeStyles } from '@material-ui/core/styles'
|
||||
import Close from '@material-ui/icons/Close'
|
||||
import * as React from 'react'
|
||||
import QrReader from 'react-qr-reader'
|
||||
@ -15,11 +15,21 @@ import Col from 'src/components/layout/Col'
|
||||
import Hairline from 'src/components/layout/Hairline'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
const { useEffect, useState } = React
|
||||
const useStyles = makeStyles(styles)
|
||||
|
||||
const ScanQRModal = ({ classes, isOpen, onClose, onScan }) => {
|
||||
const [hasWebcam, setHasWebcam] = useState<any>(null)
|
||||
type Props = {
|
||||
isOpen: boolean
|
||||
onClose: () => void
|
||||
onScan: (value: string) => void
|
||||
}
|
||||
|
||||
export const ScanQRModal = ({ isOpen, onClose, onScan }: Props): React.ReactElement => {
|
||||
const classes = useStyles()
|
||||
const [useWebcam, setUseWebcam] = useState<boolean | null>(null)
|
||||
const [fileUploadModalOpen, setFileUploadModalOpen] = useState<boolean>(false)
|
||||
const [error, setError] = useState<string | null>(null)
|
||||
const scannerRef: any = React.createRef()
|
||||
const openImageDialog = React.useCallback(() => {
|
||||
scannerRef.current.openImageDialog()
|
||||
@ -28,22 +38,35 @@ const ScanQRModal = ({ classes, isOpen, onClose, onScan }) => {
|
||||
useEffect(() => {
|
||||
checkWebcam(
|
||||
() => {
|
||||
setHasWebcam(true)
|
||||
setUseWebcam(true)
|
||||
},
|
||||
() => {
|
||||
setHasWebcam(false)
|
||||
setUseWebcam(false)
|
||||
},
|
||||
)
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
// this fires only when the hasWebcam changes to false (null > false (user doesn't have webcam)
|
||||
// , true > false (user switched from webcam to file upload))
|
||||
// Doesn't fire on re-render
|
||||
if (hasWebcam === false) {
|
||||
if (useWebcam === false && !fileUploadModalOpen && !error) {
|
||||
setFileUploadModalOpen(true)
|
||||
openImageDialog()
|
||||
}
|
||||
}, [hasWebcam, openImageDialog])
|
||||
}, [useWebcam, openImageDialog, fileUploadModalOpen, setFileUploadModalOpen, error])
|
||||
|
||||
const onFileScannedResolve = (error: string | null, successData: string | null) => {
|
||||
if (successData) {
|
||||
onScan(successData)
|
||||
}
|
||||
if (error) {
|
||||
console.error('Error uploading file', error)
|
||||
setError(`The QR could not be read`)
|
||||
}
|
||||
if (!useWebcam) {
|
||||
setError(`The QR could not be read`)
|
||||
}
|
||||
|
||||
setFileUploadModalOpen(false)
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal description="Receive Tokens Form" handleClose={onClose} open={isOpen} title="Receive Tokens">
|
||||
@ -57,19 +80,16 @@ const ScanQRModal = ({ classes, isOpen, onClose, onScan }) => {
|
||||
</Row>
|
||||
<Hairline />
|
||||
<Col className={classes.detailsContainer} layout="column" middle="xs">
|
||||
{hasWebcam === null ? (
|
||||
{error}
|
||||
{useWebcam === null ? (
|
||||
<Block className={classes.loaderContainer} justify="center">
|
||||
<CircularProgress />
|
||||
</Block>
|
||||
) : (
|
||||
<QrReader
|
||||
legacyMode={!hasWebcam}
|
||||
onError={(err) => {
|
||||
console.error(err)
|
||||
}}
|
||||
onScan={(data) => {
|
||||
if (data) onScan(data)
|
||||
}}
|
||||
legacyMode={!useWebcam}
|
||||
onError={(err) => onFileScannedResolve(err, null)}
|
||||
onScan={(data) => onFileScannedResolve(null, data)}
|
||||
ref={scannerRef}
|
||||
style={{ width: '400px', height: '400px' }}
|
||||
/>
|
||||
@ -85,11 +105,9 @@ const ScanQRModal = ({ classes, isOpen, onClose, onScan }) => {
|
||||
color="primary"
|
||||
minWidth={154}
|
||||
onClick={() => {
|
||||
if (hasWebcam) {
|
||||
setHasWebcam(false)
|
||||
} else {
|
||||
openImageDialog()
|
||||
}
|
||||
setUseWebcam(false)
|
||||
setError(null)
|
||||
setFileUploadModalOpen(false)
|
||||
}}
|
||||
variant="contained"
|
||||
>
|
||||
@ -99,5 +117,3 @@ const ScanQRModal = ({ classes, isOpen, onClose, onScan }) => {
|
||||
</Modal>
|
||||
)
|
||||
}
|
||||
|
||||
export default withStyles(styles as any)(ScanQRModal)
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { background, lg, secondaryText, sm } from 'src/theme/variables'
|
||||
import { createStyles } from '@material-ui/core'
|
||||
|
||||
export const styles = () => ({
|
||||
export const styles = createStyles({
|
||||
heading: {
|
||||
padding: lg,
|
||||
justifyContent: 'space-between',
|
||||
|
@ -169,13 +169,19 @@ describe('Forms > Validators', () => {
|
||||
it('Returns undefined for an address not contained in the passed array', async () => {
|
||||
const addresses = ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe']
|
||||
|
||||
expect(uniqueAddress(addresses)('0xe7e3272a84cf3fe180345b9f7234ba705eB5E2CA')).toBeUndefined()
|
||||
expect(uniqueAddress(addresses)()).toBeUndefined()
|
||||
})
|
||||
|
||||
it('Returns an error message for an address already contained in the array', async () => {
|
||||
const addresses = ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe']
|
||||
it('Returns an error message for an array with duplicated values', async () => {
|
||||
const addresses = ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe']
|
||||
|
||||
expect(uniqueAddress(addresses)(addresses[0])).toEqual(ADDRESS_REPEATED_ERROR)
|
||||
expect(uniqueAddress(addresses)()).toEqual(ADDRESS_REPEATED_ERROR)
|
||||
})
|
||||
|
||||
it('Returns an error message for an array with duplicated checksum and not checksum values', async () => {
|
||||
const addresses = ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae']
|
||||
|
||||
expect(uniqueAddress(addresses)()).toEqual(ADDRESS_REPEATED_ERROR)
|
||||
})
|
||||
})
|
||||
|
||||
|
@ -1,13 +1,11 @@
|
||||
import { List } from 'immutable'
|
||||
import { getWeb3 } from 'src/logic/wallets/getWeb3'
|
||||
import memoize from 'lodash.memoize'
|
||||
import { isFeatureEnabled } from 'src/config'
|
||||
import { FEATURES } from 'src/config/networks/network.d'
|
||||
|
||||
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
||||
import { getWeb3 } from 'src/logic/wallets/getWeb3'
|
||||
import { List } from 'immutable'
|
||||
|
||||
type ValidatorReturnType = string | undefined
|
||||
type GenericValidatorType = (...args: unknown[]) => ValidatorReturnType
|
||||
export type GenericValidatorType = (...args: unknown[]) => ValidatorReturnType
|
||||
type AsyncValidator = (...args: unknown[]) => Promise<ValidatorReturnType>
|
||||
export type Validator = GenericValidatorType | AsyncValidator
|
||||
|
||||
@ -89,13 +87,18 @@ export const minMaxLength = (minLen: number, maxLen: number) => (value: string):
|
||||
|
||||
export const ADDRESS_REPEATED_ERROR = 'Address already introduced'
|
||||
|
||||
export const uniqueAddress = (addresses: string[] | List<string>): GenericValidatorType =>
|
||||
memoize(
|
||||
(value: string): ValidatorReturnType => {
|
||||
const addressAlreadyExists = addresses.some((address) => sameAddress(value, address))
|
||||
return addressAlreadyExists ? ADDRESS_REPEATED_ERROR : undefined
|
||||
},
|
||||
)
|
||||
export const uniqueAddress = (addresses: string[] | List<string>): GenericValidatorType => (): ValidatorReturnType => {
|
||||
// @ts-expect-error both list and array have signatures for map but TS thinks they're not compatible
|
||||
const lowercaseAddresses = addresses.map((address) => address.toLowerCase())
|
||||
const uniqueAddresses = new Set(lowercaseAddresses)
|
||||
const lengthPropName = 'size' in addresses ? 'size' : 'length'
|
||||
|
||||
if (uniqueAddresses.size !== addresses?.[lengthPropName]) {
|
||||
return ADDRESS_REPEATED_ERROR
|
||||
}
|
||||
|
||||
return undefined
|
||||
}
|
||||
|
||||
export const composeValidators = (...validators: Validator[]) => (value: unknown): ValidatorReturnType =>
|
||||
validators.reduce(
|
||||
|
@ -1,5 +1,5 @@
|
||||
import EwcLogo from 'src/config/assets/token_ewc.svg'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, FEATURES, NetworkConfig, WALLETS } from 'src/config/networks/network.d'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig, WALLETS } from 'src/config/networks/network.d'
|
||||
|
||||
// @todo (agustin) we need to use fixed gasPrice because the oracle is not working right now and it's returning 0
|
||||
// once the oracle is fixed we need to remove the fixed value
|
||||
@ -60,10 +60,7 @@ const mainnet: NetworkConfig = {
|
||||
WALLETS.WALLET_LINK,
|
||||
WALLETS.AUTHEREUM,
|
||||
WALLETS.LATTICE,
|
||||
],
|
||||
disabledFeatures: [
|
||||
FEATURES.ENS_LOOKUP,
|
||||
],
|
||||
]
|
||||
}
|
||||
|
||||
export default mainnet
|
||||
|
@ -1,5 +1,5 @@
|
||||
import EwcLogo from 'src/config/assets/token_ewc.svg'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, FEATURES, NetworkConfig, WALLETS } from 'src/config/networks/network.d'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig, WALLETS } from 'src/config/networks/network.d'
|
||||
|
||||
const baseConfig: EnvironmentSettings = {
|
||||
txServiceUrl: 'https://safe-transaction.volta.gnosis.io/api/v1',
|
||||
@ -58,9 +58,6 @@ const mainnet: NetworkConfig = {
|
||||
WALLETS.AUTHEREUM,
|
||||
WALLETS.LATTICE,
|
||||
],
|
||||
disabledFeatures: [
|
||||
FEATURES.ENS_LOOKUP,
|
||||
],
|
||||
}
|
||||
|
||||
export default mainnet
|
||||
|
@ -8,6 +8,10 @@ import { AddressBookState } from 'src/logic/addressBook/model/addressBook'
|
||||
|
||||
export const addressBookSelector = (state: AppReduxState): AddressBookState => state[ADDRESS_BOOK_REDUCER_ID]
|
||||
|
||||
export const addressBookAddressesListSelector = createSelector(addressBookSelector, (addressBook): string[] => {
|
||||
return addressBook.map((entry) => entry.address)
|
||||
})
|
||||
|
||||
export const getNameFromAddressBookSelector = createSelector(
|
||||
addressBookSelector,
|
||||
(_, address) => address,
|
||||
|
@ -2,7 +2,6 @@ import { List } from 'immutable'
|
||||
import {
|
||||
checkIfEntryWasDeletedFromAddressBook,
|
||||
getAddressBookFromStorage,
|
||||
getAddressesListFromAddressBook,
|
||||
getNameFromAddressBook,
|
||||
getOwnersWithNameFromAddressBook,
|
||||
isValidAddressBookName,
|
||||
@ -28,24 +27,6 @@ const getMockOldAddressBookEntry = ({ address = '', name = '', isOwner = false }
|
||||
}
|
||||
}
|
||||
|
||||
describe('getAddressesListFromAdbk', () => {
|
||||
const entry1 = getMockAddressBookEntry('123456', 'test1')
|
||||
const entry2 = getMockAddressBookEntry('78910', 'test2')
|
||||
const entry3 = getMockAddressBookEntry('4781321', 'test3')
|
||||
|
||||
it('It should returns the list of addresses within the addressBook given a safeAddressBook', () => {
|
||||
// given
|
||||
const safeAddressBook = [entry1, entry2, entry3]
|
||||
const expectedResult = [entry1.address, entry2.address, entry3.address]
|
||||
|
||||
// when
|
||||
const result = getAddressesListFromAddressBook(safeAddressBook)
|
||||
|
||||
// then
|
||||
expect(result).toStrictEqual(expectedResult)
|
||||
})
|
||||
})
|
||||
|
||||
describe('getNameFromSafeAddressBook', () => {
|
||||
const entry1 = getMockAddressBookEntry('123456', 'test1')
|
||||
const entry2 = getMockAddressBookEntry('78910', 'test2')
|
||||
|
@ -56,9 +56,6 @@ export const saveAddressBook = async (addressBook: AddressBookState): Promise<vo
|
||||
}
|
||||
}
|
||||
|
||||
export const getAddressesListFromAddressBook = (addressBook: AddressBookState): string[] =>
|
||||
addressBook.map((entry) => entry.address)
|
||||
|
||||
type GetNameFromAddressBookOptions = {
|
||||
filterOnlyValidName: boolean
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { getNetworkId } from 'src/config'
|
||||
import { getNetworkId, getNetworkInfo } from 'src/config'
|
||||
import { ETHEREUM_NETWORK } from 'src/config/networks/network.d'
|
||||
import { nftAssetsListAddressesSelector } from 'src/logic/collectibles/store/selectors'
|
||||
import { TxServiceModel } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions'
|
||||
@ -18,6 +18,14 @@ export const CK_ADDRESS = {
|
||||
[ETHEREUM_NETWORK.RINKEBY]: '0x16baf0de678e52367adc69fd067e5edd1d33e3bf',
|
||||
}
|
||||
|
||||
// Note: xDAI ENS is missing, once we have it we need to add it here
|
||||
const ENS_CONTRACT_ADDRESS = {
|
||||
[ETHEREUM_NETWORK.MAINNET]: '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85',
|
||||
[ETHEREUM_NETWORK.RINKEBY]: '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85',
|
||||
[ETHEREUM_NETWORK.ENERGY_WEB_CHAIN]: '0x0A6d64413c07E10E890220BBE1c49170080C6Ca0',
|
||||
[ETHEREUM_NETWORK.VOLTA]: '0xd7CeF70Ba7efc2035256d828d5287e2D285CD1ac',
|
||||
}
|
||||
|
||||
// safeTransferFrom(address,address,uint256)
|
||||
export const SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH = '42842e0e'
|
||||
|
||||
@ -50,12 +58,11 @@ export const getERC721Symbol = async (contractAddress: string): Promise<string>
|
||||
try {
|
||||
const ERC721token = await getERC721TokenContract()
|
||||
const tokenInstance = await ERC721token.at(contractAddress)
|
||||
tokenSymbol = tokenInstance.symbol()
|
||||
tokenSymbol = await tokenInstance.symbol()
|
||||
} catch (err) {
|
||||
// If the contract address is an ENS token contract, we know that the ERC721 standard is not proper implemented
|
||||
// The method symbol() is missing
|
||||
const ENS_TOKEN_CONTRACT = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85'
|
||||
if (sameAddress(contractAddress, ENS_TOKEN_CONTRACT)) {
|
||||
if (isENSContract(contractAddress)) {
|
||||
return 'ENS'
|
||||
}
|
||||
console.error(`Failed to retrieve token symbol for ERC721 token ${contractAddress}`)
|
||||
@ -64,6 +71,11 @@ export const getERC721Symbol = async (contractAddress: string): Promise<string>
|
||||
return tokenSymbol
|
||||
}
|
||||
|
||||
export const isENSContract = (contractAddress: string): boolean => {
|
||||
const { id } = getNetworkInfo()
|
||||
return sameAddress(contractAddress, ENS_CONTRACT_ADDRESS[id])
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies if the provided contract is a valid ERC721
|
||||
* @param {string} contractAddress
|
||||
|
@ -74,24 +74,25 @@ export const getSafeMasterContract = async () => {
|
||||
return safeMaster
|
||||
}
|
||||
|
||||
export const getSafeDeploymentTransaction = (safeAccounts, numConfirmations) => {
|
||||
export const getSafeDeploymentTransaction = (safeAccounts: string[], numConfirmations: number, safeCreationSalt: number) => {
|
||||
const gnosisSafeData = safeMaster.methods
|
||||
.setup(safeAccounts, numConfirmations, ZERO_ADDRESS, '0x', DEFAULT_FALLBACK_HANDLER_ADDRESS, ZERO_ADDRESS, 0, ZERO_ADDRESS)
|
||||
.encodeABI()
|
||||
|
||||
return proxyFactoryMaster.methods.createProxy(safeMaster.options.address, gnosisSafeData)
|
||||
return proxyFactoryMaster.methods.createProxyWithNonce(safeMaster.options.address, gnosisSafeData, safeCreationSalt)
|
||||
}
|
||||
|
||||
export const estimateGasForDeployingSafe = async (
|
||||
safeAccounts,
|
||||
numConfirmations,
|
||||
userAccount,
|
||||
safeAccounts: string[],
|
||||
numConfirmations: number,
|
||||
userAccount: string,
|
||||
safeCreationSalt: number
|
||||
) => {
|
||||
const gnosisSafeData = await safeMaster.methods
|
||||
.setup(safeAccounts, numConfirmations, ZERO_ADDRESS, '0x', DEFAULT_FALLBACK_HANDLER_ADDRESS, ZERO_ADDRESS, 0, ZERO_ADDRESS)
|
||||
.encodeABI()
|
||||
const proxyFactoryData = proxyFactoryMaster.methods
|
||||
.createProxy(safeMaster.options.address, gnosisSafeData)
|
||||
.createProxyWithNonce(safeMaster.options.address, gnosisSafeData, safeCreationSalt)
|
||||
.encodeABI()
|
||||
const gas = await calculateGasOf(proxyFactoryData, userAccount, proxyFactoryMaster.options.address)
|
||||
const gasPrice = await calculateGasPrice()
|
||||
|
@ -10,6 +10,7 @@ import { web3ReadOnly } from 'src/logic/wallets/getWeb3'
|
||||
import { makeIncomingTransaction } from 'src/logic/safe/store/models/incomingTransaction'
|
||||
import fetchTransactions from 'src/logic/safe/store/actions/transactions/fetchTransactions/fetchTransactions'
|
||||
import { TransactionTypes } from 'src/logic/safe/store/models/types/transaction'
|
||||
import { isENSContract } from 'src/logic/collectibles/utils'
|
||||
|
||||
export type IncomingTxServiceModel = {
|
||||
blockNumber: number
|
||||
@ -76,12 +77,18 @@ const batchIncomingTxsTokenDataRequest = (txs: IncomingTxServiceModel[]) => {
|
||||
batch.execute()
|
||||
|
||||
return Promise.all(whenTxsValues).then((txsValues) =>
|
||||
txsValues.map(([tx, symbol, decimals, ethTx, ethTxReceipt]) => [
|
||||
txsValues.map(([tx, symbolFetched, decimals, ethTx, ethTxReceipt]) => {
|
||||
let symbol = symbolFetched
|
||||
if (!symbolFetched) {
|
||||
symbol = isENSContract(tx.tokenAddress) ? 'ENS' : nativeCoin.symbol
|
||||
}
|
||||
return [
|
||||
tx,
|
||||
symbol ? symbol : nativeCoin.symbol,
|
||||
symbol,
|
||||
decimals ? decimals : nativeCoin.decimals,
|
||||
new bn(ethTx?.gasPrice ?? 0).times(ethTxReceipt?.gasUsed ?? 0),
|
||||
]),
|
||||
]
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -208,6 +208,17 @@ export const safeModulesSelector = createSelector(safeSelector, safeFieldSelecto
|
||||
|
||||
export const safeFeaturesEnabledSelector = createSelector(safeSelector, safeFieldSelector('featuresEnabled'))
|
||||
|
||||
export const safeOwnersAddressesListSelector = createSelector(
|
||||
safeOwnersSelector,
|
||||
(owners): List<string> => {
|
||||
if (!owners) {
|
||||
return List([])
|
||||
}
|
||||
|
||||
return owners?.map(({ address }) => address)
|
||||
},
|
||||
)
|
||||
|
||||
export const getActiveTokensAddressesForAllSafes = createSelector(safesListSelector, (safes) => {
|
||||
const addresses = Set().withMutations((set) => {
|
||||
safes.forEach((safe) => {
|
||||
|
@ -9,6 +9,7 @@ import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi'
|
||||
import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3'
|
||||
import { isEmptyData } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers'
|
||||
import { TxServiceModel } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions'
|
||||
import { CALL } from 'src/logic/safe/transactions'
|
||||
|
||||
export const getEthAsToken = (balance: string | number): Token => {
|
||||
const { nativeCoin } = getNetworkInfo()
|
||||
@ -33,7 +34,13 @@ export const isAddressAToken = async (tokenAddress: string): Promise<boolean> =>
|
||||
}
|
||||
|
||||
export const isTokenTransfer = (tx: TxServiceModel): boolean => {
|
||||
return !isEmptyData(tx.data) && tx.data?.substring(0, 10) === '0xa9059cbb' && Number(tx.value) === 0
|
||||
return (
|
||||
!isEmptyData(tx.data) &&
|
||||
// Check if contains 'transfer' method code
|
||||
tx.data?.substring(0, 10) === '0xa9059cbb' &&
|
||||
Number(tx.value) === 0 &&
|
||||
tx.operation === CALL
|
||||
)
|
||||
}
|
||||
|
||||
export const getERC20DecimalsAndSymbol = async (
|
||||
|
@ -40,4 +40,4 @@ export const isUserAnOwner = (safe: SafeRecord, userAccount: string): boolean =>
|
||||
export const isUserAnOwnerOfAnySafe = (safes: List<SafeRecord> | SafeRecord[], userAccount: string): boolean =>
|
||||
safes.some((safe: SafeRecord) => isUserAnOwner(safe, userAccount))
|
||||
|
||||
export const isValidEnsName = (name: string): boolean => /^([\w-]+\.)+(eth|test|xyz|luxe)$/.test(name)
|
||||
export const isValidEnsName = (name: string): boolean => /^([\w-]+\.)+(eth|test|xyz|luxe|ewc)$/.test(name)
|
||||
|
@ -7,11 +7,12 @@ import Block from 'src/components/layout/Block'
|
||||
import Heading from 'src/components/layout/Heading'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import { initContracts } from 'src/logic/contracts/safeContracts'
|
||||
import Review from 'src/routes/open/components/ReviewInformation'
|
||||
import { Review } from 'src/routes/open/components/ReviewInformation'
|
||||
import SafeNameField from 'src/routes/open/components/SafeNameForm'
|
||||
import SafeOwnersFields from 'src/routes/open/components/SafeOwnersConfirmationsForm'
|
||||
import { SafeOwnersPage } from 'src/routes/open/components/SafeOwnersConfirmationsForm'
|
||||
import {
|
||||
FIELD_CONFIRMATIONS,
|
||||
FIELD_CREATION_PROXY_SALT,
|
||||
FIELD_SAFE_NAME,
|
||||
getOwnerAddressBy,
|
||||
getOwnerNameBy,
|
||||
@ -40,6 +41,7 @@ type InitialValuesForm = {
|
||||
owner0Name?: string
|
||||
confirmations: string
|
||||
safeName?: string
|
||||
safeCreationSalt: number
|
||||
}
|
||||
|
||||
const useInitialValuesFrom = (userAccount: string, safeProps?: SafeProps): InitialValuesForm => {
|
||||
@ -51,6 +53,7 @@ const useInitialValuesFrom = (userAccount: string, safeProps?: SafeProps): Initi
|
||||
[getOwnerNameBy(0)]: ownerName || 'My Wallet',
|
||||
[getOwnerAddressBy(0)]: userAccount,
|
||||
[FIELD_CONFIRMATIONS]: '1',
|
||||
[FIELD_CREATION_PROXY_SALT]: Date.now(),
|
||||
}
|
||||
}
|
||||
let obj = {}
|
||||
@ -68,6 +71,7 @@ const useInitialValuesFrom = (userAccount: string, safeProps?: SafeProps): Initi
|
||||
...obj,
|
||||
[FIELD_CONFIRMATIONS]: threshold || '1',
|
||||
[FIELD_SAFE_NAME]: name,
|
||||
[FIELD_CREATION_PROXY_SALT]: Date.now(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,7 +96,7 @@ type LayoutProps = {
|
||||
safeProps?: SafeProps
|
||||
}
|
||||
|
||||
const Layout = (props: LayoutProps): React.ReactElement => {
|
||||
export const Layout = (props: LayoutProps): React.ReactElement => {
|
||||
const { onCallSafeContractSubmit, safeProps } = props
|
||||
|
||||
const provider = useSelector(providerNameSelector)
|
||||
@ -129,7 +133,7 @@ const Layout = (props: LayoutProps): React.ReactElement => {
|
||||
testId="create-safe-form"
|
||||
>
|
||||
<StepperPage component={SafeNameField} />
|
||||
<StepperPage component={SafeOwnersFields} />
|
||||
<StepperPage component={SafeOwnersPage} />
|
||||
<StepperPage network={network} userAccount={userAccount} component={Review} />
|
||||
</Stepper>
|
||||
</Block>
|
||||
@ -139,5 +143,3 @@ const Layout = (props: LayoutProps): React.ReactElement => {
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Layout
|
||||
|
@ -13,7 +13,7 @@ import Row from 'src/components/layout/Row'
|
||||
import OpenPaper from 'src/components/Stepper/OpenPaper'
|
||||
import { estimateGasForDeployingSafe } from 'src/logic/contracts/safeContracts'
|
||||
import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
import { getAccountsFrom, getNamesFrom } from 'src/routes/open/utils/safeDataExtractor'
|
||||
import { getAccountsFrom, getNamesFrom, getSafeCreationSaltFrom } from 'src/routes/open/utils/safeDataExtractor'
|
||||
|
||||
import { FIELD_CONFIRMATIONS, FIELD_NAME, getNumOwnersFrom } from '../fields'
|
||||
import { useStyles } from './styles'
|
||||
@ -33,20 +33,23 @@ const ReviewComponent = ({ userAccount, values }: ReviewComponentProps) => {
|
||||
const names = getNamesFrom(values)
|
||||
const addresses = getAccountsFrom(values)
|
||||
const numOwners = getNumOwnersFrom(values)
|
||||
const safeCreationSalt = getSafeCreationSaltFrom(values)
|
||||
|
||||
useEffect(() => {
|
||||
const estimateGas = async () => {
|
||||
if (!addresses.length || !numOwners || !userAccount) {
|
||||
return
|
||||
}
|
||||
const estimatedGasCosts = (await estimateGasForDeployingSafe(addresses, numOwners, userAccount)).toString()
|
||||
const estimatedGasCosts = (
|
||||
await estimateGasForDeployingSafe(addresses, numOwners, userAccount, safeCreationSalt)
|
||||
).toString()
|
||||
const gasCosts = fromTokenUnit(estimatedGasCosts, nativeCoin.decimals)
|
||||
const formattedGasCosts = formatAmount(gasCosts)
|
||||
setGasCosts(formattedGasCosts)
|
||||
}
|
||||
|
||||
estimateGas()
|
||||
}, [addresses, numOwners, userAccount])
|
||||
}, [addresses, numOwners, safeCreationSalt, userAccount])
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -140,7 +143,7 @@ const ReviewComponent = ({ userAccount, values }: ReviewComponentProps) => {
|
||||
)
|
||||
}
|
||||
|
||||
const Review = () =>
|
||||
export const Review = () =>
|
||||
function ReviewPage(controls, props): React.ReactElement {
|
||||
return (
|
||||
<>
|
||||
@ -150,5 +153,3 @@ const Review = () =>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default Review
|
||||
|
@ -8,7 +8,7 @@ import { getAddressValidator } from './validators'
|
||||
|
||||
import QRIcon from 'src/assets/icons/qrcode.svg'
|
||||
import trash from 'src/assets/icons/trash.svg'
|
||||
import ScanQRModal from 'src/components/ScanQRModal'
|
||||
import { ScanQRModal } from 'src/components/ScanQRModal'
|
||||
import OpenPaper from 'src/components/Stepper/OpenPaper'
|
||||
import AddressInput from 'src/components/forms/AddressInput'
|
||||
import Field from 'src/components/forms/Field'
|
||||
@ -97,10 +97,10 @@ const SafeOwnersForm = (props): React.ReactElement => {
|
||||
setNumOwners(numOwners + 1)
|
||||
}
|
||||
|
||||
const handleScan = (value) => {
|
||||
const handleScan = (value: string | null) => {
|
||||
let scannedAddress = value
|
||||
|
||||
if (scannedAddress.startsWith('ethereum:')) {
|
||||
if (scannedAddress?.startsWith('ethereum:')) {
|
||||
scannedAddress = scannedAddress.replace('ethereum:', '')
|
||||
}
|
||||
|
||||
@ -236,21 +236,13 @@ const SafeOwnersForm = (props): React.ReactElement => {
|
||||
)
|
||||
}
|
||||
|
||||
const SafeOwnersPage = ({ updateInitialProps }) =>
|
||||
export const SafeOwnersPage = () =>
|
||||
function OpenSafeOwnersPage(controls, { errors, form, values }) {
|
||||
return (
|
||||
<>
|
||||
<OpenPaper controls={controls} padding={false}>
|
||||
<SafeOwnersForm
|
||||
errors={errors}
|
||||
form={form}
|
||||
otherAccounts={getAccountsFrom(values)}
|
||||
updateInitialProps={updateInitialProps}
|
||||
values={values}
|
||||
/>
|
||||
<SafeOwnersForm errors={errors} form={form} otherAccounts={getAccountsFrom(values)} values={values} />
|
||||
</OpenPaper>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default SafeOwnersPage
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { uniqueAddress } from 'src/components/forms/validator'
|
||||
import { GenericValidatorType, uniqueAddress } from 'src/components/forms/validator'
|
||||
|
||||
export const getAddressValidator = (addresses, position) => {
|
||||
export const getAddressValidator = (addresses: string[], position: number): GenericValidatorType => {
|
||||
// thanks Rich Harris
|
||||
// https://twitter.com/Rich_Harris/status/1125850391155965952
|
||||
const copy = addresses.slice()
|
||||
|
@ -2,6 +2,7 @@ export const FIELD_NAME = 'name'
|
||||
export const FIELD_CONFIRMATIONS = 'confirmations'
|
||||
export const FIELD_OWNERS = 'owners'
|
||||
export const FIELD_SAFE_NAME = 'safeName'
|
||||
export const FIELD_CREATION_PROXY_SALT = 'safeCreationSalt'
|
||||
|
||||
export const getOwnerNameBy = (index) => `owner${index}Name`
|
||||
export const getOwnerAddressBy = (index) => `owner${index}Address`
|
||||
|
@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react'
|
||||
import ReactGA from 'react-ga'
|
||||
import { useDispatch, useSelector } from 'react-redux'
|
||||
import Opening from 'src/routes/opening'
|
||||
import Layout from 'src/routes/open/components/Layout'
|
||||
import { Layout } from 'src/routes/open/components/Layout'
|
||||
import Page from 'src/components/layout/Page'
|
||||
import { getSafeDeploymentTransaction } from 'src/logic/contracts/safeContracts'
|
||||
import { checkReceiptStatus } from 'src/logic/wallets/ethTransactions'
|
||||
@ -12,6 +12,7 @@ import {
|
||||
getAccountsFrom,
|
||||
getNamesFrom,
|
||||
getOwnersFrom,
|
||||
getSafeCreationSaltFrom,
|
||||
getSafeNameFrom,
|
||||
getThresholdFrom,
|
||||
} from 'src/routes/open/utils/safeDataExtractor'
|
||||
@ -58,8 +59,9 @@ export const createSafe = (values, userAccount) => {
|
||||
const name = getSafeNameFrom(values)
|
||||
const ownersNames = getNamesFrom(values)
|
||||
const ownerAddresses = getAccountsFrom(values)
|
||||
const safeCreationSalt = getSafeCreationSaltFrom(values)
|
||||
|
||||
const deploymentTx = getSafeDeploymentTransaction(ownerAddresses, confirmations)
|
||||
const deploymentTx = getSafeDeploymentTransaction(ownerAddresses, confirmations, safeCreationSalt)
|
||||
|
||||
const promiEvent = deploymentTx.send({ from: userAccount })
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { List } from 'immutable'
|
||||
|
||||
import { makeOwner } from 'src/logic/safe/store/models/owner'
|
||||
import { SafeOwner } from '../../../logic/safe/store/models/safe'
|
||||
import { SafeOwner } from 'src/logic/safe/store/models/safe'
|
||||
|
||||
export const getAccountsFrom = (values) => {
|
||||
const accounts = Object.keys(values)
|
||||
@ -28,3 +28,5 @@ export const getOwnersFrom = (names, addresses): List<SafeOwner> => {
|
||||
export const getThresholdFrom = (values) => Number(values.confirmations)
|
||||
|
||||
export const getSafeNameFrom = (values) => values.name
|
||||
|
||||
export const getSafeCreationSaltFrom = (values) => values.safeCreationSalt
|
||||
|
@ -19,8 +19,7 @@ import Col from 'src/components/layout/Col'
|
||||
import Hairline from 'src/components/layout/Hairline'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import { addressBookSelector } from 'src/logic/addressBook/store/selectors'
|
||||
import { getAddressesListFromAddressBook } from 'src/logic/addressBook/utils'
|
||||
import { addressBookAddressesListSelector } from 'src/logic/addressBook/store/selectors'
|
||||
|
||||
export const CREATE_ENTRY_INPUT_NAME_ID = 'create-entry-input-name'
|
||||
export const CREATE_ENTRY_INPUT_ADDRESS_ID = 'create-entry-input-address'
|
||||
@ -42,8 +41,7 @@ const CreateEditEntryModalComponent = ({
|
||||
}
|
||||
}
|
||||
|
||||
const addressBook = useSelector(addressBookSelector)
|
||||
const addressBookAddressesList = getAddressesListFromAddressBook(addressBook)
|
||||
const addressBookAddressesList = useSelector(addressBookAddressesListSelector)
|
||||
const entryDoesntExist = uniqueAddress(addressBookAddressesList)
|
||||
|
||||
const formMutators = {
|
||||
|
@ -211,7 +211,10 @@ const Apps = (): React.ReactElement => {
|
||||
color="secondary"
|
||||
iconSize="sm"
|
||||
iconType="info"
|
||||
text="These are third-party apps, which means they are not owned, controlled, maintained or audited by Gnosis. Interacting with the apps is at your own risk."
|
||||
text="
|
||||
These are third-party apps, which means they are not owned, controlled, maintained or audited by Gnosis.
|
||||
Interacting with the apps is at your own risk.
|
||||
Any communication within the Apps is for informational purposes only and must not be construed as investment advice to engage in any transaction."
|
||||
textSize="sm"
|
||||
/>
|
||||
</CenteredMT>
|
||||
|
@ -9,7 +9,7 @@ import { CustomTx } from './screens/ContractInteraction/ReviewCustomTx'
|
||||
import { ContractInteractionTx } from './screens/ContractInteraction'
|
||||
import { CustomTxProps } from './screens/ContractInteraction/SendCustomTx'
|
||||
import { ReviewTxProp } from './screens/ReviewTx'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles.d'
|
||||
import { SendCollectibleTxInfo } from './screens/SendCollectible'
|
||||
|
||||
const ChooseTxType = React.lazy(() => import('./screens/ChooseTxType'))
|
||||
|
@ -27,7 +27,7 @@ export interface EthAddressInputProps {
|
||||
text: string
|
||||
}
|
||||
|
||||
const EthAddressInput = ({
|
||||
export const EthAddressInput = ({
|
||||
isContract = true,
|
||||
isRequired = true,
|
||||
name,
|
||||
@ -57,6 +57,7 @@ const EthAddressInput = ({
|
||||
scannedAddress = scannedAddress.replace('ethereum:', '')
|
||||
}
|
||||
|
||||
setSelectedEntry({ address: scannedAddress })
|
||||
onScannedValue(scannedAddress)
|
||||
closeQrModal()
|
||||
}
|
||||
@ -97,5 +98,3 @@ const EthAddressInput = ({
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default EthAddressInput
|
||||
|
@ -22,7 +22,7 @@ import Hairline from 'src/components/layout/Hairline'
|
||||
import Img from 'src/components/layout/Img'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import ScanQRModal from 'src/components/ScanQRModal'
|
||||
import { ScanQRModal } from 'src/components/ScanQRModal'
|
||||
import { safeSelector } from 'src/logic/safe/store/selectors'
|
||||
import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo'
|
||||
import { ContractsAddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput'
|
||||
|
@ -11,7 +11,7 @@ import { safeSelector } from 'src/logic/safe/store/selectors'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Buttons from './Buttons'
|
||||
import ContractABI from './ContractABI'
|
||||
import EthAddressInput from './EthAddressInput'
|
||||
import { EthAddressInput } from './EthAddressInput'
|
||||
import FormDivisor from './FormDivisor'
|
||||
import FormErrorMessage from './FormErrorMessage'
|
||||
import Header from './Header'
|
||||
|
@ -13,7 +13,7 @@ import Img from 'src/components/layout/Img'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils'
|
||||
import { textShortener } from 'src/utils/strings'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles.d'
|
||||
|
||||
const useSelectedCollectibleStyles = makeStyles(selectedTokenStyles)
|
||||
|
||||
|
@ -14,7 +14,7 @@ import Paragraph from 'src/components/layout/Paragraph'
|
||||
import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils'
|
||||
import { textShortener } from 'src/utils/strings'
|
||||
import { NFTAssets } from 'src/logic/collectibles/sources/collectibles'
|
||||
import { NFTAssets } from 'src/logic/collectibles/sources/collectibles.d'
|
||||
|
||||
const useSelectedTokenStyles = makeStyles(selectedTokenStyles)
|
||||
|
||||
|
@ -21,7 +21,7 @@ import { getNameFromAddressBook } from 'src/logic/addressBook/utils'
|
||||
import { nftTokensSelector, safeActiveSelectorMap } from 'src/logic/collectibles/store/selectors'
|
||||
import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo'
|
||||
import { AddressBookInput } from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles.d'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
||||
import { sm } from 'src/theme/variables'
|
||||
|
@ -2,7 +2,7 @@ import { createStyles, makeStyles } from '@material-ui/core/styles'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { useDispatch, useSelector } from 'react-redux'
|
||||
|
||||
import OwnerForm from './screens/OwnerForm'
|
||||
import { OwnerForm } from './screens/OwnerForm'
|
||||
import ReviewAddOwner from './screens/Review'
|
||||
import ThresholdForm from './screens/ThresholdForm'
|
||||
|
||||
@ -16,7 +16,7 @@ import createTransaction from 'src/logic/safe/store/actions/createTransaction'
|
||||
import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors'
|
||||
import { checksumAddress } from 'src/utils/checksumAddress'
|
||||
import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types.d'
|
||||
|
||||
const styles = createStyles({
|
||||
biggerModalWindow: {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import IconButton from '@material-ui/core/IconButton'
|
||||
import { withStyles } from '@material-ui/core/styles'
|
||||
import { makeStyles } from '@material-ui/core/styles'
|
||||
import Close from '@material-ui/icons/Close'
|
||||
import React from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
@ -18,7 +18,7 @@ import Col from 'src/components/layout/Col'
|
||||
import Hairline from 'src/components/layout/Hairline'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import { safeOwnersSelector } from 'src/logic/safe/store/selectors'
|
||||
import { safeOwnersAddressesListSelector } from 'src/logic/safe/store/selectors'
|
||||
|
||||
export const ADD_OWNER_NAME_INPUT_TEST_ID = 'add-owner-name-input'
|
||||
export const ADD_OWNER_ADDRESS_INPUT_TEST_ID = 'add-owner-address-testid'
|
||||
@ -30,12 +30,20 @@ const formMutators = {
|
||||
},
|
||||
}
|
||||
|
||||
const OwnerForm = ({ classes, onClose, onSubmit }) => {
|
||||
const useStyles = makeStyles(styles)
|
||||
|
||||
type OwnerFormProps = {
|
||||
onClose: () => void
|
||||
onSubmit: (values) => void
|
||||
}
|
||||
|
||||
export const OwnerForm = ({ onClose, onSubmit }: OwnerFormProps): React.ReactElement => {
|
||||
const classes = useStyles()
|
||||
const handleSubmit = (values) => {
|
||||
onSubmit(values)
|
||||
}
|
||||
const owners = useSelector(safeOwnersSelector)
|
||||
const ownerDoesntExist = uniqueAddress(owners?.map((o) => o.address) || [])
|
||||
const owners = useSelector(safeOwnersAddressesListSelector)
|
||||
const ownerDoesntExist = uniqueAddress(owners)
|
||||
|
||||
return (
|
||||
<>
|
||||
@ -72,7 +80,6 @@ const OwnerForm = ({ classes, onClose, onSubmit }) => {
|
||||
<Row margin="md">
|
||||
<Col xs={8}>
|
||||
<Field
|
||||
className={classes.addressInput}
|
||||
component={TextField}
|
||||
name="ownerName"
|
||||
placeholder="Owner name*"
|
||||
@ -86,7 +93,6 @@ const OwnerForm = ({ classes, onClose, onSubmit }) => {
|
||||
<Row margin="md">
|
||||
<Col xs={8}>
|
||||
<AddressInput
|
||||
className={classes.addressInput}
|
||||
fieldMutator={mutators.setOwnerAddress}
|
||||
name="ownerAddress"
|
||||
placeholder="Owner address*"
|
||||
@ -102,11 +108,10 @@ const OwnerForm = ({ classes, onClose, onSubmit }) => {
|
||||
</Block>
|
||||
<Hairline />
|
||||
<Row align="center" className={classes.buttonRow}>
|
||||
<Button className={classes.button} minWidth={140} onClick={onClose}>
|
||||
<Button minWidth={140} onClick={onClose}>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button
|
||||
className={classes.button}
|
||||
color="primary"
|
||||
minWidth={140}
|
||||
testId={ADD_OWNER_NEXT_BTN_TEST_ID}
|
||||
@ -123,5 +128,3 @@ const OwnerForm = ({ classes, onClose, onSubmit }) => {
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default withStyles(styles as any)(OwnerForm)
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { lg, md, secondaryText, sm } from 'src/theme/variables'
|
||||
import { createStyles } from '@material-ui/core'
|
||||
|
||||
export const styles = () => ({
|
||||
export const styles = createStyles({
|
||||
heading: {
|
||||
padding: `${sm} ${lg}`,
|
||||
justifyContent: 'flex-start',
|
||||
|
@ -13,7 +13,7 @@ import createTransaction from 'src/logic/safe/store/actions/createTransaction'
|
||||
import removeSafeOwner from 'src/logic/safe/store/actions/removeSafeOwner'
|
||||
|
||||
import { safeParamAddressFromStateSelector, safeThresholdSelector } from 'src/logic/safe/store/selectors'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types.d'
|
||||
|
||||
const styles = createStyles({
|
||||
biggerModalWindow: {
|
||||
|
@ -21,6 +21,9 @@ import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
import { getOwnersWithNameFromAddressBook } from 'src/logic/addressBook/utils'
|
||||
import { List } from 'immutable'
|
||||
import { addressBookSelector } from 'src/logic/addressBook/store/selectors'
|
||||
|
||||
export const REMOVE_OWNER_REVIEW_BTN_TEST_ID = 'remove-owner-review-btn'
|
||||
|
||||
@ -31,6 +34,9 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
||||
const safeAddress = useSelector(safeParamAddressFromStateSelector) as string
|
||||
const safeName = useSelector(safeNameSelector)
|
||||
const owners = useSelector(safeOwnersSelector)
|
||||
const addressBook = useSelector(addressBookSelector)
|
||||
const ownersWithAddressBookName = owners ? getOwnersWithNameFromAddressBook(addressBook, owners) : List([])
|
||||
|
||||
useEffect(() => {
|
||||
let isCurrent = true
|
||||
|
||||
@ -101,7 +107,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
||||
</Paragraph>
|
||||
</Row>
|
||||
<Hairline />
|
||||
{owners?.map(
|
||||
{ownersWithAddressBookName?.map(
|
||||
(owner) =>
|
||||
owner.address !== ownerAddress && (
|
||||
<React.Fragment key={owner.address}>
|
||||
|
@ -15,7 +15,7 @@ import { safeParamAddressFromStateSelector, safeThresholdSelector } from 'src/lo
|
||||
import { checksumAddress } from 'src/utils/checksumAddress'
|
||||
import { makeAddressBookEntry } from 'src/logic/addressBook/model/addressBook'
|
||||
import { sameAddress } from 'src/logic/wallets/ethAddresses'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types'
|
||||
import { Dispatch } from 'src/logic/safe/store/actions/types.d'
|
||||
|
||||
const styles = createStyles({
|
||||
biggerModalWindow: {
|
||||
|
@ -19,7 +19,7 @@ import Hairline from 'src/components/layout/Hairline'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import Row from 'src/components/layout/Row'
|
||||
import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper'
|
||||
import { safeOwnersSelector } from 'src/logic/safe/store/selectors'
|
||||
import { safeOwnersAddressesListSelector } from 'src/logic/safe/store/selectors'
|
||||
|
||||
import { styles } from './style'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
@ -39,8 +39,8 @@ const OwnerForm = ({ classes, onClose, onSubmit, ownerAddress, ownerName }) => {
|
||||
const handleSubmit = (values) => {
|
||||
onSubmit(values)
|
||||
}
|
||||
const owners = useSelector(safeOwnersSelector)
|
||||
const ownerDoesntExist = uniqueAddress(owners?.map((o) => o.address) || [])
|
||||
const owners = useSelector(safeOwnersAddressesListSelector)
|
||||
const ownerDoesntExist = uniqueAddress(owners)
|
||||
|
||||
return (
|
||||
<>
|
||||
|
411
yarn.lock
411
yarn.lock
@ -1777,20 +1777,25 @@
|
||||
"@ledgerhq/logs" "^5.28.0"
|
||||
rxjs "^6.6.3"
|
||||
|
||||
"@ledgerhq/devices@^5.29.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.29.0.tgz#c808e65c9d3b96c29903980790a3cf0fb43f79ac"
|
||||
integrity sha512-Ln2f2n6A/JyFLQbKRMIGCKjgJFSAVaJbwO1W+LOSiQLNL1oLXypWRxrcbeyehQjxSMT2rTkeISOK9BaweWnJFg==
|
||||
"@ledgerhq/devices@^5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.30.0.tgz#0e81970988a033316fc936517d4191fe75cde589"
|
||||
integrity sha512-2ubefpOcw7SpU/6E1MM7JNLihOuwvQ73dCSPmxLloxPf1T4S6gOBh4RgB9mal/gwoOwWGVNaR3wGHvqJI8z1Gg==
|
||||
dependencies:
|
||||
"@ledgerhq/errors" "^5.29.0"
|
||||
"@ledgerhq/logs" "^5.29.0"
|
||||
"@ledgerhq/errors" "^5.30.0"
|
||||
"@ledgerhq/logs" "^5.30.0"
|
||||
rxjs "^6.6.3"
|
||||
|
||||
"@ledgerhq/errors@^5.28.0", "@ledgerhq/errors@^5.29.0":
|
||||
"@ledgerhq/errors@^5.28.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.29.0.tgz#2e2c5b953e45d9b9f90563d67218549be84eaaed"
|
||||
integrity sha512-gYit3aWS8BHtE7tt4gMy2FzOl+azKDR4C6CISmeAZrT2euDHB8YOKZcqsrYqeQRUxABXXT81ZIkYx/3hSYeHfQ==
|
||||
|
||||
"@ledgerhq/errors@^5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.30.0.tgz#f8baaf9d0a326abc567f66bbdb0b740674143182"
|
||||
integrity sha512-pSX50OEQqK56WiZG2lIxGijy5QUwiWNDFXzAoPCh2BOGGWhBq6LaYSKQyQaRIpUXzAubt0s1lUj3sHNYTOA9vg==
|
||||
|
||||
"@ledgerhq/hw-app-eth@^5.21.0":
|
||||
version "5.28.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.28.0.tgz#77bb550fd5fed7c249d4bfec7d4141f474366d35"
|
||||
@ -1802,27 +1807,27 @@
|
||||
bignumber.js "^9.0.1"
|
||||
rlp "^2.2.6"
|
||||
|
||||
"@ledgerhq/hw-transport-node-hid-noevents@^5.29.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.29.0.tgz#fe6d71ea5182cd5fb8efc62889e83aa823cc1d52"
|
||||
integrity sha512-rBtAgLoiMvqpxCQZ6VkMCiM4TFcYlQ9o9HPY0PY4RGOFTefWMbpt67CgsIzU+1T7+gbToajlJrSFR/W7ws6Hqw==
|
||||
"@ledgerhq/hw-transport-node-hid-noevents@^5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.30.0.tgz#b8eb2a6f9e2b00e826252acdf4be16f601160ed0"
|
||||
integrity sha512-pvApZQnIEJxHtOituz9ehbpTzDYwqUXRmqbUe757inkhQ3EhvmZzWmg2zJAt1yKLRcTs5Si/t7PTvK/UW4p20A==
|
||||
dependencies:
|
||||
"@ledgerhq/devices" "^5.29.0"
|
||||
"@ledgerhq/errors" "^5.29.0"
|
||||
"@ledgerhq/hw-transport" "^5.29.0"
|
||||
"@ledgerhq/logs" "^5.29.0"
|
||||
"@ledgerhq/devices" "^5.30.0"
|
||||
"@ledgerhq/errors" "^5.30.0"
|
||||
"@ledgerhq/hw-transport" "^5.30.0"
|
||||
"@ledgerhq/logs" "^5.30.0"
|
||||
node-hid "1.3.0"
|
||||
|
||||
"@ledgerhq/hw-transport-node-hid-singleton@5.29.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-singleton/-/hw-transport-node-hid-singleton-5.29.0.tgz#a450bddede78982f16aa15917eb434839f27542f"
|
||||
integrity sha512-gbNCi+0oaDg9P+Jk59bAl0u5BVglRrouLKpw8TOmwnV9w+WIYVn+yMguwpZ5bidTmbxoM4ypEWbIFRhk8SdZew==
|
||||
"@ledgerhq/hw-transport-node-hid-singleton@5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid-singleton/-/hw-transport-node-hid-singleton-5.30.0.tgz#3242ca2df98abc0ad16d25ee03f620d3b987caca"
|
||||
integrity sha512-V12eblyV0upjkDJiPWFe4bJeogWY9vBAG2p1Kl7dIPOIc4CUn7q+OxtT1EW4hNIsWPr4ONW6Uf2BPYKfLi12cg==
|
||||
dependencies:
|
||||
"@ledgerhq/devices" "^5.29.0"
|
||||
"@ledgerhq/errors" "^5.29.0"
|
||||
"@ledgerhq/hw-transport" "^5.29.0"
|
||||
"@ledgerhq/hw-transport-node-hid-noevents" "^5.29.0"
|
||||
"@ledgerhq/logs" "^5.29.0"
|
||||
"@ledgerhq/devices" "^5.30.0"
|
||||
"@ledgerhq/errors" "^5.30.0"
|
||||
"@ledgerhq/hw-transport" "^5.30.0"
|
||||
"@ledgerhq/hw-transport-node-hid-noevents" "^5.30.0"
|
||||
"@ledgerhq/logs" "^5.30.0"
|
||||
lodash "^4.17.20"
|
||||
node-hid "1.3.0"
|
||||
usb-detection "^4.10.0"
|
||||
@ -1846,20 +1851,25 @@
|
||||
"@ledgerhq/errors" "^5.28.0"
|
||||
events "^3.2.0"
|
||||
|
||||
"@ledgerhq/hw-transport@^5.29.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.29.0.tgz#9830f0c921cda8530169e3710273480b0c1f7532"
|
||||
integrity sha512-sONhoZ6rvVnnMtwzc2u+k0uTGyr9OLjFemoQzYrXWRdm1w1D7UbKCl+13o1VYz2LBanh7JaYRUj0uWOahAGorQ==
|
||||
"@ledgerhq/hw-transport@^5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.30.0.tgz#6c98c00a5594dc38f4046e2ebdd342f6b14e57b7"
|
||||
integrity sha512-86cKX9yIHP9C/wnVRhm5QnaBPqTWaSxb0Z2BlMLT0xWqQf0RVb9e4pUtfAsGNDhTyN2exQF54+G4IkspsplnKg==
|
||||
dependencies:
|
||||
"@ledgerhq/devices" "^5.29.0"
|
||||
"@ledgerhq/errors" "^5.29.0"
|
||||
"@ledgerhq/devices" "^5.30.0"
|
||||
"@ledgerhq/errors" "^5.30.0"
|
||||
events "^3.2.0"
|
||||
|
||||
"@ledgerhq/logs@^5.28.0", "@ledgerhq/logs@^5.29.0":
|
||||
"@ledgerhq/logs@^5.28.0":
|
||||
version "5.29.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.29.0.tgz#92e0ac8856ac59f9e7e2c286cb4531b724f837bd"
|
||||
integrity sha512-bYWLCO/Wnwfd47kD5JRiCdBVMAAArFEbisqnZY3J5ZyxUE0va8Ta3z8RO6ClsBEbrtEut+7Xv3R0ejxmPXXYiQ==
|
||||
|
||||
"@ledgerhq/logs@^5.30.0":
|
||||
version "5.30.0"
|
||||
resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.30.0.tgz#76e8d7e5a06a73c9b99da51fa5befd5cfd5309d4"
|
||||
integrity sha512-wUhg2VTfUrWihjdGqKkH/s7TBzdIM1yyd2LiscYsfTX2I0xYDMnpE+NkMReeGU8PN3QhCPgnlg9/P9V6UWoJBA==
|
||||
|
||||
"@material-ui/core@4.11.0":
|
||||
version "4.11.0"
|
||||
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a"
|
||||
@ -2034,14 +2044,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@restless/sanitizers/-/sanitizers-0.2.5.tgz#96a5cfa3edb52abd8fa14e77798738f3a067dbec"
|
||||
integrity sha512-utsOFwv5owNnbj8HijF7uML/AURgUl5YvY4S2gpxQsrp2D1EP/4rQU/HSyYdIQaL89BoZ/5NHveRJrcFyuHo/w==
|
||||
|
||||
"@sentry/browser@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.3.tgz#02e78a4502ee99988d3cbb0075a11ec44b503871"
|
||||
integrity sha512-vczS+XTW4Nk2A7TIpAw8IVFHpp+NK6mV9euBG2I61Bs2QbQY9yKLfbjiln/yH2Q8X4THX6MKa0GuiPoCEeq3uw==
|
||||
"@sentry/browser@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.4.tgz#241dedc7d82d3ed2769bfc8e4fb193d10e6a1d4d"
|
||||
integrity sha512-L8Fsnkl3PIak4zJ1pcGDmV92XTQjS2/H6EBgp1rhuOF4OE3L59K8RR73C9w+wVtsIi7nyfYg/FIe8lvG++3Mow==
|
||||
dependencies:
|
||||
"@sentry/core" "5.27.3"
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/utils" "5.27.3"
|
||||
"@sentry/core" "5.27.4"
|
||||
"@sentry/types" "5.27.4"
|
||||
"@sentry/utils" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/cli@^1.59.0":
|
||||
@ -2055,69 +2065,69 @@
|
||||
progress "^2.0.3"
|
||||
proxy-from-env "^1.1.0"
|
||||
|
||||
"@sentry/core@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.27.3.tgz#d7a175b71596b7eb4b2e8b4cd1858a60d95813bb"
|
||||
integrity sha512-yqepQO88jSt5hy0awpk61AxI4oHB09LjVbUEk4nJDg+1YXuND23cuZvH+Sp2jCZX2vrsw2tefwflToYfA8/U2w==
|
||||
"@sentry/core@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.27.4.tgz#4155ee09ee4deed7364918094bf81654dcf681c0"
|
||||
integrity sha512-IbI37cIZU/qBQouuUXaLbGF/9xYFp5STqmj1Gv64l0IZe4JnEp06V3yD5GxQ/mJ78vSfOqfwLooVCUw9FA61sQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.3"
|
||||
"@sentry/minimal" "5.27.3"
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/utils" "5.27.3"
|
||||
"@sentry/hub" "5.27.4"
|
||||
"@sentry/minimal" "5.27.4"
|
||||
"@sentry/types" "5.27.4"
|
||||
"@sentry/utils" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/hub@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.27.3.tgz#f509c2fd38f500afef6030504e82510dbd0649d6"
|
||||
integrity sha512-icEH3hr6NVQkpowXZcPOs9IgJZP5lMKtvud4mVioSpkd+NxtRdKrGEX4eF2TCviOJc9Md0mV4K+aL5Au7hxggQ==
|
||||
"@sentry/hub@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.27.4.tgz#15db6f504672edd70b793e4b3d370dca9cb2fef6"
|
||||
integrity sha512-Ba1AqcjvSd2S+fpdXtXCrVXdrzq9E2Etb2eHUOkEYwSsq7StMOw7E8YHDPAo+to8zUbpMPz/Z9XGhFkyAbImGQ==
|
||||
dependencies:
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/utils" "5.27.3"
|
||||
"@sentry/types" "5.27.4"
|
||||
"@sentry/utils" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/minimal@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.27.3.tgz#c9263bdd6270bfeae64137177448911dff568e53"
|
||||
integrity sha512-ng01cM0rsE1RMjqVTpPLN0ZVkTo0I675usM1krkpQe8ddW6tfQ6EJWpt02/BrpQZRQzTtfWp6/RyB1KFXg6icg==
|
||||
"@sentry/minimal@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.27.4.tgz#2b331ed43d5f8999606fe9f8bf26a85155e8286c"
|
||||
integrity sha512-biw5YfIQwvDoaRhLarfeRQ6MJ9UJOoDTmu8Kgg18prJy4rtfDowNJP0OBs5XAsTk6SWAXiE3g7vqUJBXgs7BWA==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.3"
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/hub" "5.27.4"
|
||||
"@sentry/types" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/react@^5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.27.3.tgz#aefff1cb2249a4e7f123c7467d1da205d5c02e92"
|
||||
integrity sha512-p7E+djSUVKz02HoRVDX+zamjV8+RL4bqoPnS9JQESweB0sRTYlpvi+CqWLYWNWnamWQWOl97hOw/lLDpo4kUSA==
|
||||
"@sentry/react@^5.27.0":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.27.4.tgz#757983dda2b2c8782d4c3a73c85806bb21ec93ed"
|
||||
integrity sha512-nRv/u2nP4cQMWu1Gybv7izIl2VwcM6s6P2hco9RlxrCJUpQIUuHRo4yWqDn+G1Xxdr511yY8p4JR+ESBaRGJFg==
|
||||
dependencies:
|
||||
"@sentry/browser" "5.27.3"
|
||||
"@sentry/minimal" "5.27.3"
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/utils" "5.27.3"
|
||||
"@sentry/browser" "5.27.4"
|
||||
"@sentry/minimal" "5.27.4"
|
||||
"@sentry/types" "5.27.4"
|
||||
"@sentry/utils" "5.27.4"
|
||||
hoist-non-react-statics "^3.3.2"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/tracing@^5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.27.3.tgz#787e57a2f7071e375f4fad0f3c3a5ff3381928e7"
|
||||
integrity sha512-UWrHMdGxPfx1u558CWm1tptc2z0BuqCHVe2+BNN7POahq5BkpbGqaotyPQTBHbfmcs6QGfsMG57ou8HQFrBxyA==
|
||||
"@sentry/tracing@^5.27.0":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.27.4.tgz#0f6b0ebfa90b9f5bf5bac1fcf0f196010dbdddac"
|
||||
integrity sha512-f3nG8ozCdcbFOzsnBCZ8w+/WfoNiAd0Ctr643L0rsFbaSzPWxbPMe3LNVrWwFVo6mHacG3/2HYmJ3CYMiWyTKQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.3"
|
||||
"@sentry/minimal" "5.27.3"
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/utils" "5.27.3"
|
||||
"@sentry/hub" "5.27.4"
|
||||
"@sentry/minimal" "5.27.4"
|
||||
"@sentry/types" "5.27.4"
|
||||
"@sentry/utils" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/types@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.27.3.tgz#d377508769bc658d672c287166c7f6c5db45660c"
|
||||
integrity sha512-PkWhMArFMxBb1g3HtMEL8Ea9PYae2MU0z9CMIWiqzerFy2ZpKG98IU3pt8ic4JkmKQdwB8hDiZpRPMHhW0WYwQ==
|
||||
"@sentry/types@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.27.4.tgz#ba7cefae6f77bb39a0ac59aeba1bb23ce4ad5216"
|
||||
integrity sha512-41h3c7tgtSS8UBmfvEckSr+7V7/IVOjt/EiydyOd6s0N18zSFfGY5HdA6g+eFtIJK3DhWkUHCHZNanD5IY5YCQ==
|
||||
|
||||
"@sentry/utils@5.27.3":
|
||||
version "5.27.3"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.27.3.tgz#1fc45dfad1f1e4398bee58684d8947666d8d3003"
|
||||
integrity sha512-R9WvFrRBALZvCzu/9BsuXBCfkNxz4MwdBNSXaBsJo4afQw1ljkjIc9DpHzlL9S9goIwXo81Buwmr5gGDO6aH+Q==
|
||||
"@sentry/utils@5.27.4":
|
||||
version "5.27.4"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.27.4.tgz#d57ccd72a56e2f97e109d632957f6cd11806e992"
|
||||
integrity sha512-shV1I/q+Tob3hUxRj11DfMhe9PNDiv85hUUoRloZGGwu275dMwpswb2uwgSmjc2Ao4pnMKVx8TL1hC3kGLVHTQ==
|
||||
dependencies:
|
||||
"@sentry/types" "5.27.3"
|
||||
"@sentry/types" "5.27.4"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sideway/address@^4.1.0":
|
||||
@ -2397,16 +2407,16 @@
|
||||
pretty-hrtime "^1.0.3"
|
||||
regenerator-runtime "^0.13.3"
|
||||
|
||||
"@storybook/preset-create-react-app@^3.1.4":
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/preset-create-react-app/-/preset-create-react-app-3.1.4.tgz#64bb674f69fe860ef1a4909e686775adf6c05fdd"
|
||||
integrity sha512-VwzGCvv+HnEDXxSwF6ITRIZ4EaMhiMu1Mxrwm+nb49XTT2VME8VTzmbDjrdpZXPXUJrwLYmvqzaBT/qGZoMlgA==
|
||||
"@storybook/preset-create-react-app@^3.1.5":
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/preset-create-react-app/-/preset-create-react-app-3.1.5.tgz#af46c9d64c384980d458fe99c10dcbaa623f93fd"
|
||||
integrity sha512-tzYcCRD5j22/HoDZ1tvsKaVnzyd4qqTE9sn3cx56Reb0XHcm4XkvG87jx0NvBGPCZrsThyBAtB3+XNxoFbI+9Q==
|
||||
dependencies:
|
||||
"@types/babel__core" "^7.1.7"
|
||||
"@types/webpack" "^4.41.13"
|
||||
babel-plugin-react-docgen "^4.1.0"
|
||||
pnp-webpack-plugin "^1.6.4"
|
||||
react-docgen-typescript-plugin "^0.5.0"
|
||||
react-docgen-typescript-plugin "^0.6.2"
|
||||
semver "^7.3.2"
|
||||
|
||||
"@storybook/react@^5.3.19":
|
||||
@ -2728,10 +2738,10 @@
|
||||
dependencies:
|
||||
source-map-support "^0.5.19"
|
||||
|
||||
"@truffle/codec@^0.7.1":
|
||||
version "0.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.7.1.tgz#2ef0fa40109040796afbebb8812c872122100ae4"
|
||||
integrity sha512-mNd6KnW6J0UB1zafGBXDlTEbCMvWpmPAJmzv7aF/nAIaN/F8UePSCiQ1OTQP39Rprj6GFiCCaWVnBAwum6UGSg==
|
||||
"@truffle/codec@^0.8.1":
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.8.1.tgz#1f7b62a9d4063ed1b91ecb81d2d83be4ff97389d"
|
||||
integrity sha512-X6BcpS97zpmLWRoAg9zJJIPoEiAJ3MRRJd5zf+qTmLbYXVhek9frreDMhs4WoaQSe3/DOYjVxtPmwmY4+alVvw==
|
||||
dependencies:
|
||||
big.js "^5.2.2"
|
||||
bn.js "^4.11.8"
|
||||
@ -2746,23 +2756,23 @@
|
||||
utf8 "^3.0.0"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
"@truffle/contract-schema@^3.3.1":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.3.1.tgz#66385613d54d76df68a7a2c431fa9d352145a74b"
|
||||
integrity sha512-xGBiYiCCW8hKuD/G8xb9w0WUuhdJDmQuz18A2Ens3Y8MO+jWA+Zw7xxZjCtiXAu9440Fj2V/BCXWcV6RxGKgBQ==
|
||||
"@truffle/contract-schema@^3.3.2":
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.3.2.tgz#6450738c35859ed087760d826031a8247f7bc907"
|
||||
integrity sha512-PFNUHlcMFh6CDLDXTYCpm1G5rM5EJlneA9ml5y1TbkLgjLMICI2XLilimFZ/DC0THQekHpoQC+W/QMD/OTiTiw==
|
||||
dependencies:
|
||||
ajv "^6.10.0"
|
||||
crypto-js "^3.1.9-1"
|
||||
debug "^4.1.0"
|
||||
|
||||
"@truffle/contract@4.2.28":
|
||||
version "4.2.28"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.2.28.tgz#1cde9706b41b77ac9070de1aa0f1bd7663705ddc"
|
||||
integrity sha512-fjHcrVx/ZsAJD2ICNbn2dytwAqzcQUjHBB2k9/laCnk0S59TOK2md/NPGdapzXrbmlRzqWoWBNJXvbPHPbuACA==
|
||||
"@truffle/contract@4.2.30":
|
||||
version "4.2.30"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.2.30.tgz#44a2a20e4baa6b40cbb0748a6bce997c22865bcd"
|
||||
integrity sha512-BXQC+ddH18W9cVoRTlKH7hqnyrOo0HN7/Hyv7UiAgPh4JNpkZVUxFSd+/MLaE5r8NEG2hykDusOVJ3OaR9wvmw==
|
||||
dependencies:
|
||||
"@truffle/blockchain-utils" "^0.0.25"
|
||||
"@truffle/contract-schema" "^3.3.1"
|
||||
"@truffle/debug-utils" "^4.2.14"
|
||||
"@truffle/contract-schema" "^3.3.2"
|
||||
"@truffle/debug-utils" "^5.0.1"
|
||||
"@truffle/error" "^0.0.11"
|
||||
"@truffle/interface-adapter" "^0.4.18"
|
||||
bignumber.js "^7.2.1"
|
||||
@ -2775,12 +2785,12 @@
|
||||
web3-eth-abi "1.2.9"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
"@truffle/debug-utils@^4.2.14":
|
||||
version "4.2.14"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-4.2.14.tgz#28431691bc3a96bad19e31733d957ac79059d4e7"
|
||||
integrity sha512-g5UTX2DPTzrjRjBJkviGI2IrQRTTSvqjmNWCNZNXP+vgQKNxL9maLZhQ6oA3BuuByVW/kusgYeXt8+W1zynC8g==
|
||||
"@truffle/debug-utils@^5.0.1":
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.0.1.tgz#7650f273ddba704377f3a25bd4a10ffb338da8e0"
|
||||
integrity sha512-CDt92c6YmCE72TMxmXMcbK3MPXHPRzhrYshFKY0jlo0T3IhLn3xBMqdqXi7SL9y0gV5U386R2l2lK5a+TGE6vw==
|
||||
dependencies:
|
||||
"@truffle/codec" "^0.7.1"
|
||||
"@truffle/codec" "^0.8.1"
|
||||
"@trufflesuite/chromafi" "^2.2.1"
|
||||
chalk "^2.4.2"
|
||||
debug "^4.1.0"
|
||||
@ -3096,7 +3106,7 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*", "@types/node@^14.14.6":
|
||||
"@types/node@*":
|
||||
version "14.14.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f"
|
||||
integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==
|
||||
@ -3111,6 +3121,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.67.tgz#4f86badb292e822e3b13730a1f9713ed2377f789"
|
||||
integrity sha512-R48tgL2izApf+9rYNH+3RBMbRpPeW3N8f0I9HMhggeq4UXwBDqumJ14SDs4ctTMhG11pIOduZ4z3QWGOiMc9Vg==
|
||||
|
||||
"@types/node@^14.14.6":
|
||||
version "14.14.8"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.8.tgz#2127bd81949a95c8b7d3240f3254352d72563aec"
|
||||
integrity sha512-z/5Yd59dCKI5kbxauAJgw6dLPzW+TNOItNE00PkpzNwUIEwdj/Lsqwq94H5DdYBX7C13aRA0CY32BK76+neEUA==
|
||||
|
||||
"@types/npmlog@^4.1.2":
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.2.tgz#d070fe6a6b78755d1092a3dc492d34c3d8f871c4"
|
||||
@ -3128,10 +3143,10 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/prettier@^1.13.2":
|
||||
version "1.19.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
|
||||
integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
|
||||
"@types/prettier@^2.1.1":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00"
|
||||
integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==
|
||||
|
||||
"@types/prop-types@*":
|
||||
version "15.7.3"
|
||||
@ -3222,9 +3237,9 @@
|
||||
csstype "^3.0.2"
|
||||
|
||||
"@types/react@^16.9.55":
|
||||
version "16.9.55"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.55.tgz#47078587f5bfe028a23b6b46c7b94ac0d436acff"
|
||||
integrity sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg==
|
||||
version "16.9.56"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.56.tgz#ea25847b53c5bec064933095fc366b1462e2adf0"
|
||||
integrity sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
csstype "^3.0.2"
|
||||
@ -3893,6 +3908,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
|
||||
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
|
||||
|
||||
"@yarnpkg/lockfile@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
|
||||
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
|
||||
|
||||
abab@^2.0.0:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
||||
@ -5612,10 +5632,10 @@ bn.js@^5.1.1, bn.js@^5.1.2:
|
||||
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b"
|
||||
integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==
|
||||
|
||||
bnc-onboard@1.14.0:
|
||||
version "1.14.0"
|
||||
resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.14.0.tgz#7ab5000a4541be5ff6545edb86c8dc76d5f1f054"
|
||||
integrity sha512-++wK33BMWLvogo+k4BaHOn25LC7RBT0qsECQh8llv1jHd8r53OKF19PzanZ1J9MH+tB7EQkb8/mInbGKJSlU3w==
|
||||
bnc-onboard@1.15.0:
|
||||
version "1.15.0"
|
||||
resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.15.0.tgz#5de6b30160024f2889e8463ef72b9004bc56800f"
|
||||
integrity sha512-gy4STqY9G3qNR/TZgUF6wwmEWWo4bOC1x+aawF7fVCFVJz9/nmhwCVj+NCjaTNZYOwepfOnJWsiADDHxiuAaoQ==
|
||||
dependencies:
|
||||
"@ledgerhq/hw-app-eth" "^5.21.0"
|
||||
"@ledgerhq/hw-transport-u2f" "^5.21.0"
|
||||
@ -7336,9 +7356,9 @@ csstype@^2.5.2, csstype@^2.5.7:
|
||||
integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==
|
||||
|
||||
csstype@^3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.4.tgz#b156d7be03b84ff425c9a0a4b1e5f4da9c5ca888"
|
||||
integrity sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8"
|
||||
integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ==
|
||||
|
||||
currency-flags@2.1.2:
|
||||
version "2.1.2"
|
||||
@ -8048,10 +8068,10 @@ electron-updater@4.3.5:
|
||||
lodash.isequal "^4.5.0"
|
||||
semver "^7.3.2"
|
||||
|
||||
electron@9.3.3:
|
||||
version "9.3.3"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.3.tgz#99a6619d5df68f97697a5d1d82ef3a8a63fcdf36"
|
||||
integrity sha512-xghKeUY1qgnEcJ5w2rXo/toH+8NT2Dktx2aAxBNPV7CIJr3mejJJAPwLbycwtddzr37tgKxHeHlc8ivfKtMkJQ==
|
||||
electron@^9.3.3:
|
||||
version "9.3.4"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.4.tgz#d62dd9f8abc93c009878714de9e60db030361a05"
|
||||
integrity sha512-OHP8qMKgW8D8GtH+altB22WJw/lBOyyVdoz5e8D0/iPBmJU3Jm93vO4z4Eh/9DvdSXlH8bMHUCMLL9PVW6f+tw==
|
||||
dependencies:
|
||||
"@electron/get" "^1.0.1"
|
||||
"@types/node" "^12.0.12"
|
||||
@ -8356,10 +8376,10 @@ escodegen@^1.11.0, escodegen@^1.9.1:
|
||||
optionalDependencies:
|
||||
source-map "~0.6.1"
|
||||
|
||||
eslint-config-prettier@6.14.0:
|
||||
version "6.14.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz#390e7863a8ae99970981933826476169285b3a27"
|
||||
integrity sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==
|
||||
eslint-config-prettier@^6.14.0:
|
||||
version "6.15.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
|
||||
integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
|
||||
dependencies:
|
||||
get-stdin "^6.0.0"
|
||||
|
||||
@ -8422,7 +8442,7 @@ eslint-plugin-import@2.20.1:
|
||||
read-pkg-up "^2.0.0"
|
||||
resolve "^1.12.0"
|
||||
|
||||
eslint-plugin-import@2.22.1:
|
||||
eslint-plugin-import@^2.22.1:
|
||||
version "2.22.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
|
||||
integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
|
||||
@ -8520,7 +8540,7 @@ eslint-plugin-react@^7.21.5:
|
||||
resolve "^1.18.1"
|
||||
string.prototype.matchall "^4.0.2"
|
||||
|
||||
eslint-plugin-sort-destructure-keys@1.3.5:
|
||||
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==
|
||||
@ -9749,6 +9769,14 @@ find-versions@^3.2.0:
|
||||
dependencies:
|
||||
semver-regex "^2.0.0"
|
||||
|
||||
find-yarn-workspace-root@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
|
||||
integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==
|
||||
dependencies:
|
||||
fs-extra "^4.0.3"
|
||||
micromatch "^3.1.4"
|
||||
|
||||
flat-cache@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
|
||||
@ -9931,7 +9959,7 @@ fs-extra@^0.30.0:
|
||||
path-is-absolute "^1.0.0"
|
||||
rimraf "^2.2.8"
|
||||
|
||||
fs-extra@^4.0.2:
|
||||
fs-extra@^4.0.2, fs-extra@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
|
||||
integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
|
||||
@ -9940,7 +9968,7 @@ fs-extra@^4.0.2:
|
||||
jsonfile "^4.0.0"
|
||||
universalify "^0.1.0"
|
||||
|
||||
fs-extra@^7.0.0:
|
||||
fs-extra@^7.0.0, fs-extra@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
|
||||
integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
|
||||
@ -12607,6 +12635,13 @@ kind-of@^6.0.0, kind-of@^6.0.2:
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
|
||||
|
||||
klaw-sync@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c"
|
||||
integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.11"
|
||||
|
||||
klaw@^1.0.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
|
||||
@ -14619,6 +14654,24 @@ pascalcase@^0.1.1:
|
||||
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
||||
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
|
||||
|
||||
patch-package@^6.2.2:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.2.tgz#71d170d650c65c26556f0d0fbbb48d92b6cc5f39"
|
||||
integrity sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==
|
||||
dependencies:
|
||||
"@yarnpkg/lockfile" "^1.1.0"
|
||||
chalk "^2.4.2"
|
||||
cross-spawn "^6.0.5"
|
||||
find-yarn-workspace-root "^1.2.1"
|
||||
fs-extra "^7.0.1"
|
||||
is-ci "^2.0.0"
|
||||
klaw-sync "^6.0.0"
|
||||
minimist "^1.2.0"
|
||||
rimraf "^2.6.3"
|
||||
semver "^5.6.0"
|
||||
slash "^2.0.0"
|
||||
tmp "^0.0.33"
|
||||
|
||||
path-browserify@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
|
||||
@ -15573,6 +15626,11 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, po
|
||||
source-map "^0.6.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
postinstall-postinstall@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3"
|
||||
integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==
|
||||
|
||||
preact@10.4.1:
|
||||
version "10.4.1"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431"
|
||||
@ -15652,16 +15710,11 @@ prettier-linter-helpers@^1.0.0:
|
||||
dependencies:
|
||||
fast-diff "^1.1.2"
|
||||
|
||||
prettier@2.1.2:
|
||||
prettier@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5"
|
||||
integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==
|
||||
|
||||
prettier@^1.14.2:
|
||||
version "1.19.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb"
|
||||
integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==
|
||||
|
||||
pretty-bytes@^5.1.0:
|
||||
version "5.4.1"
|
||||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b"
|
||||
@ -15988,10 +16041,10 @@ query-string@6.13.5:
|
||||
split-on-first "^1.0.0"
|
||||
strict-uri-encode "^2.0.0"
|
||||
|
||||
query-string@6.13.6:
|
||||
version "6.13.6"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.6.tgz#e5ac7c74f2a5da43fbca0b883b4f0bafba439966"
|
||||
integrity sha512-/WWZ7d9na6s2wMEGdVCVgKWE9Rt7nYyNIf7k8xmHXcesPMlEzicWo3lbYwHyA4wBktI2KrXxxZeACLbE84hvSQ==
|
||||
query-string@6.13.7:
|
||||
version "6.13.7"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.7.tgz#af53802ff6ed56f3345f92d40a056f93681026ee"
|
||||
integrity sha512-CsGs8ZYb39zu0WLkeOhe0NMePqgYdAuCqxOYKDR5LVCytDZYMGx3Bb+xypvQvPHVPijRXB0HZNFllCzHRe4gEA==
|
||||
dependencies:
|
||||
decode-uri-component "^0.2.0"
|
||||
split-on-first "^1.0.0"
|
||||
@ -16195,10 +16248,10 @@ react-docgen-typescript-loader@^3.7.2:
|
||||
loader-utils "^1.2.3"
|
||||
react-docgen-typescript "^1.15.0"
|
||||
|
||||
react-docgen-typescript-plugin@^0.5.0:
|
||||
version "0.5.2"
|
||||
resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.5.2.tgz#2b294d75ef3145c36303da82be5d447cb67dc0dc"
|
||||
integrity sha512-NQfWyWLmzUnedkiN2nPDb6Nkm68ik6fqbC3UvgjqYSeZsbKijXUA4bmV6aU7qICOXdop9PevPdjEgJuAN0nNVQ==
|
||||
react-docgen-typescript-plugin@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.6.2.tgz#c83305206c61d5c7e004eaf2dc4661367ddc105d"
|
||||
integrity sha512-Orw0WKdJGAg5eMZGbEMw/rKonoxbi8epU6RJWTW3ukWuTarxckFXTltGvm8XADAWlBHak30KD71XThtJruxfTg==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
endent "^2.0.1"
|
||||
@ -16290,10 +16343,10 @@ react-focus-lock@^2.1.0:
|
||||
use-callback-ref "^1.2.1"
|
||||
use-sidecar "^1.0.1"
|
||||
|
||||
react-ga@3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.2.0.tgz#a8ea91e8e681f49d30afcee72d71fc5c71b67d57"
|
||||
integrity sha512-YHHG5QIzRdDToB9ST1/BrGQhLZPzkrNjoeTu3SZLgwdqzeA9F2XOStuOGXAp1ak/SAo9pyR1Uo/hY0C5wZwfqA==
|
||||
react-ga@3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.2.1.tgz#ad2a6f848cc9555d63c188d37d6e11798393e4ed"
|
||||
integrity sha512-uRwNVd7seL2I2lZBE7et8Ul0r/xNDIQkZ43QmnMrcZwY8dNB5UgPjPJA6E18xFtArLgDK/dy/O0TzYqWCsMHDg==
|
||||
|
||||
react-helmet-async@^1.0.2:
|
||||
version "1.0.7"
|
||||
@ -16336,7 +16389,7 @@ react-inspector@^4.0.0:
|
||||
is-dom "^1.0.9"
|
||||
prop-types "^15.6.1"
|
||||
|
||||
react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0:
|
||||
react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0:
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
@ -16391,16 +16444,16 @@ react-qr-reader@^2.2.1:
|
||||
prop-types "^15.7.2"
|
||||
webrtc-adapter "^7.2.1"
|
||||
|
||||
react-redux@7.2.1:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.1.tgz#8dedf784901014db2feca1ab633864dee68ad985"
|
||||
integrity sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg==
|
||||
react-redux@7.2.2:
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736"
|
||||
integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.5.5"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
"@babel/runtime" "^7.12.1"
|
||||
hoist-non-react-statics "^3.3.2"
|
||||
loose-envify "^1.4.0"
|
||||
prop-types "^15.7.2"
|
||||
react-is "^16.9.0"
|
||||
react-is "^16.13.1"
|
||||
|
||||
react-router-dom@5.2.0:
|
||||
version "5.2.0"
|
||||
@ -16530,10 +16583,10 @@ react-transition-group@^4.4.0:
|
||||
loose-envify "^1.4.0"
|
||||
prop-types "^15.6.2"
|
||||
|
||||
react-window@^1.8.5:
|
||||
version "1.8.5"
|
||||
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.5.tgz#a56b39307e79979721021f5d06a67742ecca52d1"
|
||||
integrity sha512-HeTwlNa37AFa8MDZFZOKcNEkuF2YflA0hpGPiTT9vR7OawEt+GZbfM6wqkBahD3D3pUjIabQYzsnY/BSJbgq6Q==
|
||||
react-window@^1.8.6:
|
||||
version "1.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-window/-/react-window-1.8.6.tgz#d011950ac643a994118632665aad0c6382e2a112"
|
||||
integrity sha512-8VwEEYyjz6DCnGBsd+MgkD0KJ2/OXFULyDtorIiTz+QzwoP94tBoA7CnbtyXMm+cCeAUER5KJcPtWl9cpKbOBg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.0.0"
|
||||
memoize-one ">=3.1.1 <6"
|
||||
@ -18470,10 +18523,10 @@ style-loader@^1.0.0:
|
||||
loader-utils "^2.0.0"
|
||||
schema-utils "^2.7.0"
|
||||
|
||||
styled-components@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.0.tgz#6dcb5aa8a629c84b8d5ab34b7167e3e0c6f7ed74"
|
||||
integrity sha512-9qE8Vgp8C5cpGAIdFaQVAl89Zgx1TDM4Yf4tlHbO9cPijtpSXTMLHy9lmP0lb+yImhgPFb1AmZ1qMUubmg3HLg==
|
||||
styled-components@^5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.2.1.tgz#6ed7fad2dc233825f64c719ffbdedd84ad79101a"
|
||||
integrity sha512-sBdgLWrCFTKtmZm/9x7jkIabjFNVzCUeKfoQsM6R3saImkUnjx0QYdLwJHBjY9ifEcmjDamJDVfknWm1yxZPxQ==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
"@babel/traverse" "^7.4.5"
|
||||
@ -19028,18 +19081,18 @@ ts-essentials@^6.0.3:
|
||||
resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-6.0.7.tgz#5f4880911b7581a873783740ce8b94da163d18a6"
|
||||
integrity sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==
|
||||
|
||||
ts-generator@^0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.0.8.tgz#7bd48ca064db026d9520bcb682b69efc20971d6a"
|
||||
integrity sha512-Gi+aZCELpVL7Mqb+GuMgM+n8JZ/arZZib1iD/R9Ok8JDjOCOCrqS9b1lr72ku7J45WeDCFZxyJoRsiQvhokCnw==
|
||||
ts-generator@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ts-generator/-/ts-generator-0.1.1.tgz#af46f2fb88a6db1f9785977e9590e7bcd79220ab"
|
||||
integrity sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==
|
||||
dependencies:
|
||||
"@types/mkdirp" "^0.5.2"
|
||||
"@types/prettier" "^1.13.2"
|
||||
"@types/prettier" "^2.1.1"
|
||||
"@types/resolve" "^0.0.8"
|
||||
chalk "^2.4.1"
|
||||
glob "^7.1.2"
|
||||
mkdirp "^0.5.1"
|
||||
prettier "^1.14.2"
|
||||
prettier "^2.1.2"
|
||||
resolve "^1.8.1"
|
||||
ts-essentials "^1.0.0"
|
||||
|
||||
@ -19152,10 +19205,10 @@ type@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f"
|
||||
integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==
|
||||
|
||||
typechain@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/typechain/-/typechain-2.0.1.tgz#4fa91006d871e5805d41f265880603d0817b74d6"
|
||||
integrity sha512-GVigpARnr2tV9L+8WecF5huK+qEonNgh+Vp9UR/EayoTV4+3G8Yabhvf+p/QJVOz3JLM4Eo3ERxYmjjJMRXc/A==
|
||||
typechain@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/typechain/-/typechain-4.0.0.tgz#8a81fe40c4020b370f0c4671b7f966134d20c58c"
|
||||
integrity sha512-XQUojf02bXyxXNGI0WeCphnh++5eWr9wYH8jm0XqHNv8yENpFrRyX8ffVlkhCnDOOB/jEJJVQytLAOU+Qn0N9Q==
|
||||
dependencies:
|
||||
command-line-args "^4.0.7"
|
||||
debug "^4.1.1"
|
||||
@ -19163,7 +19216,7 @@ typechain@^2.0.0:
|
||||
js-sha3 "^0.8.0"
|
||||
lodash "^4.17.15"
|
||||
ts-essentials "^6.0.3"
|
||||
ts-generator "^0.0.8"
|
||||
ts-generator "^0.1.1"
|
||||
|
||||
typed-styles@^0.0.7:
|
||||
version "0.0.7"
|
||||
|
Loading…
x
Reference in New Issue
Block a user