Merge pull request #1566 from gnosis/release/v2.14.0
Backmerge v2.14.0 to development
This commit is contained in:
commit
81192859e9
|
@ -6,6 +6,7 @@ REACT_APP_GOOGLE_ANALYTICS=
|
|||
REACT_APP_INFURA_TOKEN=
|
||||
REACT_APP_IPFS_GATEWAY=https://ipfs.io/ipfs
|
||||
PUBLIC_URL=/app/
|
||||
REACT_APP_SENTRY_DSN=
|
||||
|
||||
# For production environments
|
||||
REACT_APP_BLOCKNATIVE_KEY=
|
||||
|
|
35
.travis.yml
35
.travis.yml
|
@ -1,4 +1,4 @@
|
|||
if: (branch = development) OR (branch = master) OR (branch = release/2.14.0) OR (type = pull_request) OR (tag IS present)
|
||||
if: (branch = development) OR (branch = master) OR (type = pull_request) OR (tag IS present)
|
||||
sudo: required
|
||||
dist: bionic
|
||||
language: node_js
|
||||
|
@ -10,30 +10,38 @@ matrix:
|
|||
include:
|
||||
- env:
|
||||
- REACT_APP_NETWORK='mainnet'
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET}
|
||||
- STAGING_BUCKET_NAME=${STAGING_MAINNET_BUCKET_NAME}
|
||||
- REACT_APP_SENTRY_DSN=${SENTRY_DSN_MAINNET}
|
||||
- SENTRY_PROJECT=${SENTRY_PROJECT_MAINNET}
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET}
|
||||
- REACT_APP_GNOSIS_APPS_URL=${REACT_APP_GNOSIS_APPS_URL_PROD}
|
||||
if: (branch = master AND NOT type = pull_request) OR tag IS present
|
||||
- env:
|
||||
- REACT_APP_NETWORK='rinkeby'
|
||||
- REACT_APP_SENTRY_DSN=${SENTRY_DSN_RINKEBY}
|
||||
- SENTRY_PROJECT=${SENTRY_PROJECT_RINKEBY}
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY}
|
||||
- REACT_APP_GNOSIS_APPS_URL=${REACT_APP_GNOSIS_APPS_URL_STAGING}
|
||||
- env:
|
||||
- REACT_APP_NETWORK='xdai'
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_XDAI}
|
||||
- STAGING_BUCKET_NAME=${STAGING_XDAI_BUCKET_NAME}
|
||||
if: (branch = master AND NOT type = pull_request) OR tag IS present
|
||||
- REACT_APP_SENTRY_DSN=${SENTRY_DSN_XDAI}
|
||||
- SENTRY_PROJECT=${SENTRY_PROJECT_XDAI}
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_XDAI}
|
||||
if: (branch = master) OR tag IS present
|
||||
- env:
|
||||
- REACT_APP_NETWORK='volta'
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_VOLTA}
|
||||
- STAGING_BUCKET_NAME=${STAGING_VOLTA_BUCKET_NAME}
|
||||
if: (branch = master AND NOT type = pull_request) OR tag IS present
|
||||
- REACT_APP_SENTRY_DSN=${SENTRY_DSN_VOLTA}
|
||||
- SENTRY_PROJECT=${SENTRY_PROJECT_VOLTA}
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_VOLTA}
|
||||
- env:
|
||||
- REACT_APP_NETWORK='energy_web_chain'
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_EWC}
|
||||
- STAGING_BUCKET_NAME=${STAGING_EWC_BUCKET_NAME}
|
||||
if: ((branch = master OR branch = release/2.14.0) AND NOT type = pull_request) OR tag IS present
|
||||
|
||||
- REACT_APP_SENTRY_DSN=${SENTRY_DSN_EWC}
|
||||
- SENTRY_PROJECT=${SENTRY_PROJECT_EWC}
|
||||
- REACT_APP_GOOGLE_ANALYTICS=${REACT_APP_GOOGLE_ANALYTICS_ID_EWC}
|
||||
if: (branch = master AND NOT type = pull_request) OR tag IS present
|
||||
cache:
|
||||
yarn: true
|
||||
before_script:
|
||||
|
@ -49,7 +57,12 @@ script:
|
|||
- yarn prettier:check
|
||||
- yarn test:coverage
|
||||
- yarn build
|
||||
#- bash ./config/travis/build.sh
|
||||
- if [[ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]] || [ -n "$TRAVIS_TAG" ]; then
|
||||
echo "Upload sentry source maps";
|
||||
yarn sentry-upload-sourcemaps;
|
||||
else
|
||||
echo "Skip source map upload";
|
||||
fi;
|
||||
after_success:
|
||||
# Pull Request - Deploy it to a review environment
|
||||
# Travis doesn't do deploy step with pull requests builds
|
||||
|
@ -93,7 +106,7 @@ deploy:
|
|||
upload_dir: current/app
|
||||
region: $AWS_DEFAULT_REGION
|
||||
on:
|
||||
branch: release/2.14.0
|
||||
branch: release/v2.14.0
|
||||
condition: $REACT_APP_NETWORK = energy_web_chain
|
||||
|
||||
# Prepare production deployment
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
export NODE_ENV=production;
|
||||
|
||||
if [[ -n "$TRAVIS_TAG" ]]; then export REACT_APP_ENV='production'; fi
|
||||
|
||||
yarn lint:check
|
||||
yarn prettier:check
|
||||
yarn test:coverage
|
||||
yarn build
|
10
package.json
10
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "safe-react",
|
||||
"version": "2.13.1",
|
||||
"version": "2.14.0",
|
||||
"description": "Allowing crypto users manage funds in a safer way",
|
||||
"website": "https://github.com/gnosis/safe-react#readme",
|
||||
"bugs": {
|
||||
|
@ -42,7 +42,8 @@
|
|||
"test:coverage": "yarn test --coverage --watchAll=false",
|
||||
"coveralls": "cat ./coverage/lcov.info | coveralls",
|
||||
"storybook": "start-storybook -p 9009 -s public",
|
||||
"build-storybook": "build-storybook -s public"
|
||||
"build-storybook": "build-storybook -s public",
|
||||
"sentry-upload-sourcemaps": "sentry-cli --auth-token $SENTRY_AUTH_TOKEN releases -o $SENTRY_ORG -p $SENTRY_PROJECT files $npm_package_version upload-sourcemaps ./build/static/js/"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
|
@ -167,13 +168,15 @@
|
|||
"dependencies": {
|
||||
"@gnosis.pm/safe-apps-sdk": "https://github.com/gnosis/safe-apps-sdk.git#3f0689f",
|
||||
"@gnosis.pm/safe-contracts": "1.1.1-dev.2",
|
||||
"@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#70e57bdd1e0fd5dfdf5768076577c1e000b5fe28",
|
||||
"@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#8d8508e",
|
||||
"@gnosis.pm/util-contracts": "2.0.6",
|
||||
"@ledgerhq/hw-transport-node-hid": "5.26.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.1",
|
||||
"@sentry/tracing": "^5.27.1",
|
||||
"@truffle/contract": "4.2.26",
|
||||
"async-sema": "^3.1.0",
|
||||
"axios": "0.20.0",
|
||||
|
@ -232,6 +235,7 @@
|
|||
"web3-utils": "^1.2.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@sentry/cli": "^1.58.0",
|
||||
"@storybook/addon-actions": "^5.3.19",
|
||||
"@storybook/addon-links": "^5.3.19",
|
||||
"@storybook/addons": "^5.3.19",
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import React from 'react'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Bold from 'src/components/layout/Bold'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import { border, xs } from 'src/theme/variables'
|
||||
import styled from 'styled-components'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const Wrapper = styled.div`
|
||||
display: flex;
|
||||
|
@ -61,7 +61,7 @@ const AddressInfo = ({ ethBalance, safeAddress, safeName }: Props): React.ReactE
|
|||
{safeAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={safeAddress} />
|
||||
<EtherscanBtn value={safeAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(safeAddress)} />
|
||||
</div>
|
||||
{ethBalance && (
|
||||
<StyledBlock>
|
||||
|
|
|
@ -5,7 +5,6 @@ import QRCode from 'qrcode.react'
|
|||
import React, { ReactElement } from 'react'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -15,7 +14,8 @@ import Paragraph from 'src/components/layout/Paragraph'
|
|||
import Row from 'src/components/layout/Row'
|
||||
import { border, fontColor, lg, md, screenSm, secondaryText, sm } from 'src/theme/variables'
|
||||
import { copyToClipboard } from 'src/utils/clipboard'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const networkInfo = getNetworkInfo()
|
||||
const useStyles = makeStyles(
|
||||
|
@ -126,7 +126,7 @@ const ReceiveModal = ({ onClose, safeAddress, safeName }: Props): ReactElement =
|
|||
{safeAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={safeAddress} />
|
||||
<EtherscanBtn value={safeAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(safeAddress)} />
|
||||
</Block>
|
||||
</Col>
|
||||
<Hairline />
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#B2B5B2" fill-rule="nonzero" d="M17 17v-2a1 1 0 0 1 2 0v2a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2a1 1 0 1 1 0 2H7v10h10z"/>
|
||||
<path fill="#B2B5B2" d="M15.586 7H13a1 1 0 0 1 0-2h5a.997.997 0 0 1 1 1v5a1 1 0 0 1-2 0V8.414l-6.243 6.243a1 1 0 1 1-1.414-1.414L15.586 7z"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 442 B |
|
@ -1,59 +0,0 @@
|
|||
import Tooltip from '@material-ui/core/Tooltip'
|
||||
import { makeStyles } from '@material-ui/core/styles'
|
||||
import cn from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import EtherscanOpenIcon from './img/etherscan-open.svg'
|
||||
|
||||
import Img from 'src/components/layout/Img'
|
||||
import { xs } from 'src/theme/variables'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
|
||||
const useStyles = makeStyles({
|
||||
container: {
|
||||
alignItems: 'center',
|
||||
borderRadius: '50%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
margin: `0 ${xs}`,
|
||||
padding: '0',
|
||||
transition: 'background-color .2s ease-in-out',
|
||||
'&:hover': {
|
||||
backgroundColor: '#F0EFEE',
|
||||
},
|
||||
},
|
||||
increasedPopperZindex: {
|
||||
zIndex: 2001,
|
||||
},
|
||||
})
|
||||
|
||||
interface EtherscanBtnProps {
|
||||
className?: string
|
||||
increaseZindex?: boolean
|
||||
value: string
|
||||
}
|
||||
|
||||
const EtherscanBtn = ({ className = '', increaseZindex = false, value }: EtherscanBtnProps): React.ReactElement => {
|
||||
const classes = useStyles()
|
||||
const customClasses = increaseZindex ? { popper: classes.increasedPopperZindex } : {}
|
||||
|
||||
const explorerInfo = getExplorerInfo(value)
|
||||
const { url } = explorerInfo()
|
||||
|
||||
return (
|
||||
<Tooltip classes={customClasses} placement="top" title="Show details on Etherscan">
|
||||
<a
|
||||
aria-label="Show details on Etherscan"
|
||||
className={cn(classes.container, className)}
|
||||
onClick={(event) => event.stopPropagation()}
|
||||
href={url}
|
||||
rel="noopener noreferrer"
|
||||
target="_blank"
|
||||
>
|
||||
<Img alt="Show on Etherscan" height={20} src={EtherscanOpenIcon} />
|
||||
</a>
|
||||
</Tooltip>
|
||||
)
|
||||
}
|
||||
|
||||
export default EtherscanBtn
|
|
@ -5,11 +5,12 @@ import React from 'react'
|
|||
import { styles } from './style'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Span from 'src/components/layout/Span'
|
||||
import { shortVersionOf } from 'src/logic/wallets/ethAddresses'
|
||||
import EllipsisTransactionDetails from 'src/routes/safe/components/AddressBook/EllipsisTransactionDetails'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
|
||||
const useStyles = makeStyles(styles)
|
||||
|
||||
|
@ -20,7 +21,7 @@ interface EtherscanLinkProps {
|
|||
value: string
|
||||
}
|
||||
|
||||
const EtherscanLink = ({ className, cut, knownAddress, value }: EtherscanLinkProps): React.ReactElement => {
|
||||
export const EtherscanLink = ({ className, cut, knownAddress, value }: EtherscanLinkProps): React.ReactElement => {
|
||||
const classes = useStyles()
|
||||
|
||||
return (
|
||||
|
@ -29,10 +30,8 @@ const EtherscanLink = ({ className, cut, knownAddress, value }: EtherscanLinkPro
|
|||
{cut ? shortVersionOf(value, cut) : value}
|
||||
</Span>
|
||||
<CopyBtn className={cn(classes.button, classes.firstButton)} content={value} />
|
||||
<EtherscanBtn className={classes.button} value={value} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(value)} />
|
||||
{knownAddress !== undefined ? <EllipsisTransactionDetails address={value} knownAddress={knownAddress} /> : null}
|
||||
</Block>
|
||||
)
|
||||
}
|
||||
|
||||
export default EtherscanLink
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
import React from 'react'
|
||||
import styled from 'styled-components'
|
||||
import { Text, Link, Icon, FixedIcon, Title } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
import { IS_PRODUCTION } from 'src/utils/constants'
|
||||
|
||||
const Wrapper = styled.div`
|
||||
width: 100%;
|
||||
margin-top: 50px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
`
|
||||
|
||||
const Content = styled.div`
|
||||
width: 400px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
|
||||
> * {
|
||||
margin-top: 10px;
|
||||
}
|
||||
`
|
||||
|
||||
const LinkWrapper = styled.div`
|
||||
display: inline-flex;
|
||||
margin-bottom: 10px;
|
||||
|
||||
> :first-of-type {
|
||||
margin-right: 5px;
|
||||
}
|
||||
`
|
||||
|
||||
const LinkContent = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
> span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
`
|
||||
|
||||
type Props = {
|
||||
error: Error
|
||||
componentStack: string
|
||||
resetError: () => void
|
||||
}
|
||||
|
||||
const GlobalErrorBoundaryFallback = ({ error, componentStack }: Props): React.ReactElement => {
|
||||
return (
|
||||
<Wrapper>
|
||||
<Content>
|
||||
<Title size="md">Something went wrong, please try again.</Title>
|
||||
<FixedIcon type="networkError" />
|
||||
{IS_PRODUCTION && (
|
||||
<div>
|
||||
<Text size="xl" as="span">
|
||||
In case the problem persists, please reach out to us via{' '}
|
||||
</Text>
|
||||
<LinkWrapper>
|
||||
<a target="_blank" href="email: mailto:safe@gnosis.io" rel="noopener noreferrer">
|
||||
<Text color="primary" size="lg" as="span">
|
||||
Email
|
||||
</Text>
|
||||
</a>
|
||||
<Icon type="externalLink" color="primary" size="sm" />
|
||||
</LinkWrapper>
|
||||
or{' '}
|
||||
<LinkWrapper>
|
||||
<a target="_blank" href="https://discordapp.com/invite/FPMRAwK" rel="noopener noreferrer">
|
||||
<Text color="primary" size="lg" as="span">
|
||||
Discord
|
||||
</Text>
|
||||
</a>
|
||||
<Icon type="externalLink" color="primary" size="sm" />
|
||||
</LinkWrapper>
|
||||
</div>
|
||||
)}
|
||||
{!IS_PRODUCTION && (
|
||||
<>
|
||||
<Text size="xl" color="error">
|
||||
{error.toString()}
|
||||
</Text>
|
||||
<Text size="md" color="error">
|
||||
{componentStack}
|
||||
</Text>
|
||||
</>
|
||||
)}
|
||||
<Link size="lg" color="primary" href="/app/">
|
||||
<LinkContent>
|
||||
<Icon size="md" type="home" color="primary" />
|
||||
Go to Home
|
||||
</LinkContent>
|
||||
</Link>
|
||||
</Content>
|
||||
</Wrapper>
|
||||
)
|
||||
}
|
||||
|
||||
export default GlobalErrorBoundaryFallback
|
|
@ -4,10 +4,11 @@ import { ConnectedRouter } from 'connected-react-router'
|
|||
import React from 'react'
|
||||
import { Provider } from 'react-redux'
|
||||
import { ThemeProvider } from 'styled-components'
|
||||
import * as Sentry from '@sentry/react'
|
||||
|
||||
import Loader from 'src/components/Loader'
|
||||
import App from 'src/components/App'
|
||||
|
||||
import GlobalErrorBoundary from 'src/components/GlobalErrorBoundary'
|
||||
import AppRoutes from 'src/routes'
|
||||
import { history, store } from 'src/store'
|
||||
import theme from 'src/theme/mui'
|
||||
|
@ -20,7 +21,11 @@ const Root = (): React.ReactElement => (
|
|||
<ThemeProvider theme={styledTheme}>
|
||||
<Provider store={store}>
|
||||
<MuiThemeProvider theme={theme}>
|
||||
<ConnectedRouter history={history}>{<App>{wrapInSuspense(<AppRoutes />, <Loader />)}</App>}</ConnectedRouter>
|
||||
<ConnectedRouter history={history}>
|
||||
<Sentry.ErrorBoundary fallback={GlobalErrorBoundary}>
|
||||
<App>{wrapInSuspense(<AppRoutes />, <Loader />)}</App>
|
||||
</Sentry.ErrorBoundary>
|
||||
</ConnectedRouter>
|
||||
</MuiThemeProvider>
|
||||
</Provider>
|
||||
</ThemeProvider>
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
import EwcLogo from 'src/config/assets/token_ewc.svg'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } 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
|
||||
const baseConfig: EnvironmentSettings = {
|
||||
txServiceUrl: 'https://safe-transaction.ewc.gnosis.io/api/v1',
|
||||
safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com',
|
||||
txServiceUrl: 'https://safe-transaction.ewc.gnosis.io/api/v1',
|
||||
safeAppsUrl: 'https://safe-apps-ewc.staging.gnosisdev.com',
|
||||
gasPriceOracle: {
|
||||
url: 'https://station.energyweb.org',
|
||||
gasParameter: 'standard',
|
||||
},
|
||||
gasPrice: 1e6,
|
||||
rpcServiceUrl: 'https://rpc.energyweb.org',
|
||||
networkExplorerName: 'Energy web explorer',
|
||||
networkExplorerUrl: 'https://explorer.energyweb.org',
|
||||
|
@ -21,11 +24,10 @@ const mainnet: NetworkConfig = {
|
|||
},
|
||||
staging: {
|
||||
...baseConfig,
|
||||
safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com',
|
||||
},
|
||||
production: {
|
||||
...baseConfig,
|
||||
safeAppsUrl: 'https://apps.gnosis-safe.io',
|
||||
safeAppsUrl: 'https://apps-ewc.gnosis-safe.io',
|
||||
},
|
||||
},
|
||||
network: {
|
||||
|
@ -41,7 +43,23 @@ const mainnet: NetworkConfig = {
|
|||
decimals: 18,
|
||||
logoUri: EwcLogo,
|
||||
},
|
||||
}
|
||||
},
|
||||
disabledWallets:[
|
||||
WALLETS.TREZOR,
|
||||
WALLETS.LEDGER,
|
||||
WALLETS.COINBASE,
|
||||
WALLETS.DAPPER,
|
||||
WALLETS.FORTMATIC,
|
||||
WALLETS.OPERA,
|
||||
WALLETS.OPERA_TOUCH,
|
||||
WALLETS.PORTIS,
|
||||
WALLETS.TORUS,
|
||||
WALLETS.TRUST,
|
||||
WALLETS.UNILOGIN,
|
||||
WALLETS.WALLET_CONNECT,
|
||||
WALLETS.WALLET_LINK,
|
||||
WALLETS.AUTHEREUM
|
||||
]
|
||||
}
|
||||
|
||||
export default mainnet
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import EwcLogo from 'src/config/assets/token_ewc.svg'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d'
|
||||
import { EnvironmentSettings, ETHEREUM_NETWORK, WALLETS, NetworkConfig } from 'src/config/networks/network.d'
|
||||
|
||||
const baseConfig: EnvironmentSettings = {
|
||||
txServiceUrl: 'https://safe-transaction.volta.gnosis.io/api/v1',
|
||||
safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com',
|
||||
safeAppsUrl: 'https://safe-apps-volta.staging.gnosisdev.com',
|
||||
gasPriceOracle: {
|
||||
url: 'https://station.energyweb.org',
|
||||
gasParameter: 'standard',
|
||||
|
@ -21,11 +21,10 @@ const mainnet: NetworkConfig = {
|
|||
},
|
||||
staging: {
|
||||
...baseConfig,
|
||||
safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com',
|
||||
},
|
||||
production: {
|
||||
...baseConfig,
|
||||
safeAppsUrl: 'https://apps.gnosis-safe.io',
|
||||
safeAppsUrl: 'https://apps-volta.gnosis-safe.io',
|
||||
},
|
||||
},
|
||||
network: {
|
||||
|
@ -41,7 +40,23 @@ const mainnet: NetworkConfig = {
|
|||
decimals: 18,
|
||||
logoUri: EwcLogo,
|
||||
},
|
||||
}
|
||||
},
|
||||
disabledWallets:[
|
||||
WALLETS.TREZOR,
|
||||
WALLETS.LEDGER,
|
||||
WALLETS.COINBASE,
|
||||
WALLETS.DAPPER,
|
||||
WALLETS.FORTMATIC,
|
||||
WALLETS.OPERA,
|
||||
WALLETS.OPERA_TOUCH,
|
||||
WALLETS.PORTIS,
|
||||
WALLETS.TORUS,
|
||||
WALLETS.TRUST,
|
||||
WALLETS.UNILOGIN,
|
||||
WALLETS.WALLET_CONNECT,
|
||||
WALLETS.WALLET_LINK,
|
||||
WALLETS.AUTHEREUM
|
||||
]
|
||||
}
|
||||
|
||||
export default mainnet
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import { BigNumber } from 'bignumber.js'
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
import * as Sentry from '@sentry/react'
|
||||
import { Integrations } from '@sentry/tracing'
|
||||
|
||||
import Root from 'src/components/Root'
|
||||
import loadCurrentSessionFromStorage from 'src/logic/currentSession/store/actions/loadCurrentSessionFromStorage'
|
||||
|
@ -8,6 +10,7 @@ import loadActiveTokens from 'src/logic/tokens/store/actions/loadActiveTokens'
|
|||
import loadDefaultSafe from 'src/logic/safe/store/actions/loadDefaultSafe'
|
||||
import loadSafesFromStorage from 'src/logic/safe/store/actions/loadSafesFromStorage'
|
||||
import { store } from 'src/store'
|
||||
import { SENTRY_DSN } from './utils/constants'
|
||||
|
||||
BigNumber.set({ EXPONENTIAL_AT: [-7, 255] })
|
||||
|
||||
|
@ -16,6 +19,13 @@ store.dispatch(loadSafesFromStorage())
|
|||
store.dispatch(loadDefaultSafe())
|
||||
store.dispatch(loadCurrentSessionFromStorage())
|
||||
|
||||
Sentry.init({
|
||||
dsn: SENTRY_DSN,
|
||||
release: `safe-react@${process.env.REACT_APP_APP_VERSION}`,
|
||||
integrations: [new Integrations.BrowserTracing()],
|
||||
sampleRate: 1,
|
||||
})
|
||||
|
||||
const root = document.getElementById('root')
|
||||
|
||||
if (root !== null) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import { BigNumber } from 'bignumber.js'
|
|||
import { getWeb3, web3ReadOnly } from 'src/logic/wallets/getWeb3'
|
||||
import { getGasPrice, getGasPriceOracle } from 'src/config'
|
||||
|
||||
// const MAINNET_NETWORK = 1
|
||||
export const EMPTY_DATA = '0x'
|
||||
|
||||
export const checkReceiptStatus = async (hash) => {
|
||||
|
@ -28,16 +27,6 @@ export const checkReceiptStatus = async (hash) => {
|
|||
}
|
||||
|
||||
export const calculateGasPrice = async (): Promise<string> => {
|
||||
/*
|
||||
const web3 = getWeb3()
|
||||
const { network } = web3.version
|
||||
const isMainnet = MAINNET_NETWORK === network
|
||||
|
||||
const url = isMainnet
|
||||
? 'https://safe-relay.staging.gnosisdev.com/api/v1/gas-station/'
|
||||
: 'https://safe-relay.dev.gnosisdev.com/'
|
||||
*/
|
||||
|
||||
if (process.env.NODE_ENV === 'test') {
|
||||
return '20000000000'
|
||||
}
|
||||
|
@ -61,7 +50,7 @@ export const calculateGasPrice = async (): Promise<string> => {
|
|||
}
|
||||
}
|
||||
|
||||
export const calculateGasOf = async (data, from, to) => {
|
||||
export const calculateGasOf = async (data: string, from: string, to: string): Promise<number> => {
|
||||
const web3 = getWeb3()
|
||||
try {
|
||||
const gas = await web3.eth.estimateGas({ data, from, to })
|
||||
|
|
|
@ -5,7 +5,6 @@ import React, { useEffect, useState } from 'react'
|
|||
import { useSelector } from 'react-redux'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Field from 'src/components/forms/Field'
|
||||
import TextField from 'src/components/forms/TextField'
|
||||
import { composeValidators, minMaxLength, required } from 'src/components/forms/validator'
|
||||
|
@ -24,6 +23,8 @@ import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts'
|
|||
import { FIELD_LOAD_ADDRESS, THRESHOLD } from 'src/routes/load/components/fields'
|
||||
import { getOwnerAddressBy, getOwnerNameBy } from 'src/routes/open/components/fields'
|
||||
import { styles } from './styles'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const calculateSafeValues = (owners, threshold, values) => {
|
||||
const initialValues = { ...values }
|
||||
|
@ -112,7 +113,7 @@ const OwnerListComponent = (props) => {
|
|||
{address}
|
||||
</Paragraph>
|
||||
<CopyBtn content={address} />
|
||||
<EtherscanBtn value={address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(address)} />
|
||||
</Row>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -3,7 +3,6 @@ import classNames from 'classnames'
|
|||
import React from 'react'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Col from 'src/components/layout/Col'
|
||||
|
@ -16,6 +15,8 @@ import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME, THRESHOLD } from 'src/routes/load/
|
|||
import { getNumOwnersFrom, getOwnerAddressBy, getOwnerNameBy } from 'src/routes/open/components/fields'
|
||||
import { getAccountsFrom } from 'src/routes/open/utils/safeDataExtractor'
|
||||
import { useStyles } from './styles'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const checkIfUserAddressIsAnOwner = (values: Record<string, string>, userAddress: string): boolean => {
|
||||
let isOwner = false
|
||||
|
@ -76,7 +77,7 @@ const ReviewComponent = ({ userAddress, values }: Props): React.ReactElement =>
|
|||
{shortVersionOf(safeAddress, 4)}
|
||||
</Paragraph>
|
||||
<CopyBtn content={safeAddress} />
|
||||
<EtherscanBtn value={safeAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(safeAddress)} />
|
||||
</Row>
|
||||
</Block>
|
||||
<Block margin="lg">
|
||||
|
@ -121,7 +122,7 @@ const ReviewComponent = ({ userAddress, values }: Props): React.ReactElement =>
|
|||
{address}
|
||||
</Paragraph>
|
||||
<CopyBtn content={address} />
|
||||
<EtherscanBtn value={address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(address)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -2,9 +2,8 @@ import TableContainer from '@material-ui/core/TableContainer'
|
|||
import classNames from 'classnames'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Col from 'src/components/layout/Col'
|
||||
|
@ -18,6 +17,7 @@ import { getAccountsFrom, getNamesFrom } from 'src/routes/open/utils/safeDataExt
|
|||
|
||||
import { FIELD_CONFIRMATIONS, FIELD_NAME, getNumOwnersFrom } from '../fields'
|
||||
import { useStyles } from './styles'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
type ReviewComponentProps = {
|
||||
userAccount: string
|
||||
|
@ -118,7 +118,7 @@ const ReviewComponent = ({ userAccount, values }: ReviewComponentProps) => {
|
|||
{addresses[index]}
|
||||
</Paragraph>
|
||||
<CopyBtn content={addresses[index]} />
|
||||
<EtherscanBtn value={addresses[index]} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(addresses[index])} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -25,7 +25,7 @@ export const staticAppsList: Array<{ url: string; disabled: boolean; networks: n
|
|||
},
|
||||
// Aave
|
||||
{
|
||||
url: `${process.env.REACT_APP_IPFS_GATEWAY}/QmY1MUZo44UkT8EokYHs7xDvWEziYSn7n3c4ojVB6qo3SM`,
|
||||
url: `${process.env.REACT_APP_IPFS_GATEWAY}/QmX1NUtvm9WjbvT79sTdeg3sw1NxZAM273y44nBy5d2jZb`,
|
||||
disabled: false,
|
||||
networks: [ETHEREUM_NETWORK.MAINNET],
|
||||
},
|
||||
|
|
|
@ -4,10 +4,9 @@ import IconButton from '@material-ui/core/IconButton'
|
|||
import { makeStyles } from '@material-ui/core/styles'
|
||||
import Close from '@material-ui/icons/Close'
|
||||
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import { fromTokenUnit, toTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -29,6 +28,7 @@ import { sm } from 'src/theme/variables'
|
|||
import ArrowDown from '../../assets/arrow-down.svg'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export type CustomTx = {
|
||||
contractAddress?: string
|
||||
|
@ -132,7 +132,7 @@ const ReviewCustomTx = ({ onClose, onPrev, tx }: Props): React.ReactElement => {
|
|||
{tx.contractAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={tx.contractAddress as string} />
|
||||
<EtherscanBtn value={tx.contractAddress as string} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(tx.contractAddress as string)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -8,7 +8,6 @@ import Close from '@material-ui/icons/Close'
|
|||
|
||||
import QRIcon from 'src/assets/icons/qrcode.svg'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Field from 'src/components/forms/Field'
|
||||
import GnoForm from 'src/components/forms/GnoForm'
|
||||
import TextareaField from 'src/components/forms/TextareaField'
|
||||
|
@ -32,7 +31,8 @@ import { sm } from 'src/theme/variables'
|
|||
import ArrowDown from '../../assets/arrow-down.svg'
|
||||
|
||||
import { styles } from './style'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export interface CreatedTx {
|
||||
contractAddress: string
|
||||
|
@ -184,7 +184,7 @@ const SendCustomTx: React.FC<Props> = ({ initialValues, onClose, onNext, contrac
|
|||
</Paragraph>
|
||||
</Block>
|
||||
<CopyBtn content={selectedEntry.address} />
|
||||
<EtherscanBtn value={selectedEntry.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(selectedEntry.address)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -5,9 +5,8 @@ import { makeStyles } from '@material-ui/core/styles'
|
|||
import Close from '@material-ui/icons/Close'
|
||||
|
||||
import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -32,6 +31,7 @@ import { textShortener } from 'src/utils/strings'
|
|||
import ArrowDown from '../assets/arrow-down.svg'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const { nativeCoin } = getNetworkInfo()
|
||||
|
||||
|
@ -153,7 +153,7 @@ const ReviewCollectible = ({ onClose, onPrev, tx }: Props): React.ReactElement =
|
|||
{tx.recipientAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={tx.recipientAddress} />
|
||||
<EtherscanBtn value={tx.recipientAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(tx.recipientAddress)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -5,10 +5,9 @@ import { BigNumber } from 'bignumber.js'
|
|||
import React, { useEffect, useMemo, useState } from 'react'
|
||||
import { useDispatch, useSelector } from 'react-redux'
|
||||
import { toTokenUnit, fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -32,6 +31,7 @@ import { sm } from 'src/theme/variables'
|
|||
import ArrowDown from '../assets/arrow-down.svg'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const useStyles = makeStyles(styles)
|
||||
|
||||
|
@ -162,7 +162,7 @@ const ReviewTx = ({ onClose, onPrev, tx }: ReviewTxProps): React.ReactElement =>
|
|||
{tx.recipientAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={tx.recipientAddress} />
|
||||
<EtherscanBtn value={tx.recipientAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(tx.recipientAddress)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -5,7 +5,6 @@ import React, { useState } from 'react'
|
|||
import { useSelector } from 'react-redux'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import GnoForm from 'src/components/forms/GnoForm'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
|
@ -29,6 +28,8 @@ import ArrowDown from '../assets/arrow-down.svg'
|
|||
|
||||
import { styles } from './style'
|
||||
import { NFTToken } from 'src/logic/collectibles/sources/collectibles'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
|
||||
const formMutators = {
|
||||
setMax: (args, state, utils) => {
|
||||
|
@ -187,7 +188,7 @@ const SendCollectible = ({
|
|||
</Paragraph>
|
||||
</Block>
|
||||
<CopyBtn content={selectedEntry.address} />
|
||||
<EtherscanBtn value={selectedEntry.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(selectedEntry.address)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -2,13 +2,12 @@ import IconButton from '@material-ui/core/IconButton'
|
|||
import InputAdornment from '@material-ui/core/InputAdornment'
|
||||
import { makeStyles } from '@material-ui/core/styles'
|
||||
import Close from '@material-ui/icons/Close'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import React, { useState } from 'react'
|
||||
import { OnChange } from 'react-final-form-listeners'
|
||||
import { useSelector } from 'react-redux'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Field from 'src/components/forms/Field'
|
||||
import GnoForm from 'src/components/forms/GnoForm'
|
||||
import TextField from 'src/components/forms/TextField'
|
||||
|
@ -34,6 +33,7 @@ import { sm } from 'src/theme/variables'
|
|||
import ArrowDown from '../assets/arrow-down.svg'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
const formMutators = {
|
||||
setMax: (args, state, utils) => {
|
||||
|
@ -189,7 +189,7 @@ const SendFunds = ({
|
|||
</Paragraph>
|
||||
</Block>
|
||||
<CopyBtn content={selectedEntry.address} />
|
||||
<EtherscanBtn value={selectedEntry.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(selectedEntry.address)} />
|
||||
</Block>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -5,9 +5,8 @@ import classNames from 'classnames'
|
|||
import React, { useEffect, useState } from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -21,6 +20,7 @@ import { estimateTxGasCosts } from 'src/logic/safe/transactions/gas'
|
|||
import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export const ADD_OWNER_SUBMIT_BTN_TEST_ID = 'add-owner-submit-btn'
|
||||
|
||||
|
@ -118,7 +118,7 @@ const ReviewAddOwner = ({ classes, onClickBack, onClose, onSubmit, values }) =>
|
|||
{owner.address}
|
||||
</Paragraph>
|
||||
<CopyBtn content={owner.address} />
|
||||
<EtherscanBtn value={owner.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(owner.address)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
@ -146,7 +146,7 @@ const ReviewAddOwner = ({ classes, onClickBack, onClose, onSubmit, values }) =>
|
|||
{values.ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={values.ownerAddress} />
|
||||
<EtherscanBtn value={values.ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(values.ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -5,7 +5,6 @@ import React from 'react'
|
|||
import { useDispatch, useSelector } from 'react-redux'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Field from 'src/components/forms/Field'
|
||||
import GnoForm from 'src/components/forms/GnoForm'
|
||||
import TextField from 'src/components/forms/TextField'
|
||||
|
@ -26,6 +25,8 @@ import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selector
|
|||
import { sm } from 'src/theme/variables'
|
||||
|
||||
import { styles } from './style'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export const RENAME_OWNER_INPUT_TEST_ID = 'rename-owner-input'
|
||||
export const SAVE_OWNER_CHANGES_BTN_TEST_ID = 'save-owner-changes-btn'
|
||||
|
@ -93,7 +94,7 @@ const EditOwnerComponent = ({ isOpen, onClose, ownerAddress, selectedOwnerName }
|
|||
{ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={safeAddress} />
|
||||
<EtherscanBtn value={safeAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(safeAddress)} />
|
||||
</Block>
|
||||
</Row>
|
||||
</Block>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import * as React from 'react'
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
import EtherScanLink from 'src/components/EtherscanLink'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
import { getValidAddressBookName } from 'src/logic/addressBook/utils'
|
||||
import { useWindowDimensions } from 'src/logic/hooks/useWindowDimensions'
|
||||
import { EtherscanLink } from 'src/components/EtherscanLink'
|
||||
|
||||
type OwnerAddressTableCellProps = {
|
||||
address: string
|
||||
|
@ -36,7 +36,7 @@ const OwnerAddressTableCell = (props: OwnerAddressTableCellProps): React.ReactEl
|
|||
{showLinks ? (
|
||||
<div style={{ marginLeft: 10, flexShrink: 1, minWidth: 0 }}>
|
||||
{userName && getValidAddressBookName(userName)}
|
||||
<EtherScanLink knownAddress={knownAddress} value={address} cut={cut} />
|
||||
<EtherscanLink knownAddress={knownAddress} value={address} cut={cut} />
|
||||
</div>
|
||||
) : (
|
||||
<Paragraph style={{ marginLeft: 10 }}>{address}</Paragraph>
|
||||
|
|
|
@ -5,7 +5,6 @@ import classNames from 'classnames/bind'
|
|||
import React from 'react'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -15,6 +14,8 @@ import Paragraph from 'src/components/layout/Paragraph'
|
|||
import Row from 'src/components/layout/Row'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
|
||||
export const REMOVE_OWNER_MODAL_NEXT_BTN_TEST_ID = 'remove-owner-next-btn'
|
||||
|
||||
|
@ -53,7 +54,7 @@ const CheckOwner = ({ classes, onClose, onSubmit, ownerAddress, ownerName }) =>
|
|||
{ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={ownerAddress} />
|
||||
<EtherscanBtn value={ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -5,9 +5,8 @@ import classNames from 'classnames'
|
|||
import React, { useEffect, useState } from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -21,6 +20,7 @@ import { estimateTxGasCosts } from 'src/logic/safe/transactions/gas'
|
|||
import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export const REMOVE_OWNER_REVIEW_BTN_TEST_ID = 'remove-owner-review-btn'
|
||||
|
||||
|
@ -119,7 +119,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
|||
{owner.address}
|
||||
</Paragraph>
|
||||
<CopyBtn content={owner.address} />
|
||||
<EtherscanBtn value={owner.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(owner.address)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
@ -148,7 +148,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
|||
{ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={ownerAddress} />
|
||||
<EtherscanBtn value={ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -6,7 +6,6 @@ import React from 'react'
|
|||
import { useSelector } from 'react-redux'
|
||||
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import AddressInput from 'src/components/forms/AddressInput'
|
||||
import Field from 'src/components/forms/Field'
|
||||
import GnoForm from 'src/components/forms/GnoForm'
|
||||
|
@ -23,6 +22,8 @@ import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper'
|
|||
import { safeOwnersSelector } from 'src/logic/safe/store/selectors'
|
||||
|
||||
import { styles } from './style'
|
||||
import { getExplorerInfo } from 'src/config'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export const REPLACE_OWNER_NAME_INPUT_TEST_ID = 'replace-owner-name-input'
|
||||
export const REPLACE_OWNER_ADDRESS_INPUT_TEST_ID = 'replace-owner-address-testid'
|
||||
|
@ -94,7 +95,7 @@ const OwnerForm = ({ classes, onClose, onSubmit, ownerAddress, ownerName }) => {
|
|||
{ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={ownerAddress} />
|
||||
<EtherscanBtn value={ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -5,9 +5,8 @@ import classNames from 'classnames'
|
|||
import React, { useEffect, useState } from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { fromTokenUnit } from 'src/logic/tokens/utils/humanReadableValue'
|
||||
import { getNetworkInfo } from 'src/config'
|
||||
import { getExplorerInfo, getNetworkInfo } from 'src/config'
|
||||
import CopyBtn from 'src/components/CopyBtn'
|
||||
import EtherscanBtn from 'src/components/EtherscanBtn'
|
||||
import Identicon from 'src/components/Identicon'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Button from 'src/components/layout/Button'
|
||||
|
@ -26,6 +25,7 @@ import { estimateTxGasCosts } from 'src/logic/safe/transactions/gas'
|
|||
import { formatAmount } from 'src/logic/tokens/utils/formatAmount'
|
||||
|
||||
import { styles } from './style'
|
||||
import { ExplorerButton } from '@gnosis.pm/safe-react-components'
|
||||
|
||||
export const REPLACE_OWNER_SUBMIT_BTN_TEST_ID = 'replace-owner-submit-btn'
|
||||
|
||||
|
@ -124,7 +124,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
|||
{owner.address}
|
||||
</Paragraph>
|
||||
<CopyBtn content={owner.address} />
|
||||
<EtherscanBtn value={owner.address} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(owner.address)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
@ -153,7 +153,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
|||
{ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={ownerAddress} />
|
||||
<EtherscanBtn value={ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
@ -178,7 +178,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre
|
|||
{values.ownerAddress}
|
||||
</Paragraph>
|
||||
<CopyBtn content={values.ownerAddress} />
|
||||
<EtherscanBtn value={values.ownerAddress} />
|
||||
<ExplorerButton explorerUrl={getExplorerInfo(values.ownerAddress)} />
|
||||
</Block>
|
||||
</Block>
|
||||
</Col>
|
||||
|
|
|
@ -2,7 +2,7 @@ import { makeStyles } from '@material-ui/core/styles'
|
|||
import React from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
|
||||
import EtherscanLink from 'src/components/EtherscanLink'
|
||||
import { EtherscanLink } from 'src/components/EtherscanLink'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Bold from 'src/components/layout/Bold'
|
||||
import { getNameFromAddressBookSelector } from 'src/logic/addressBook/store/selectors'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import EtherscanLink from 'src/components/EtherscanLink'
|
||||
import { EtherscanLink } from 'src/components/EtherscanLink'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Bold from 'src/components/layout/Bold'
|
||||
import Paragraph from 'src/components/layout/Paragraph'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import EtherscanLink from 'src/components/EtherscanLink'
|
||||
import { EtherscanLink } from 'src/components/EtherscanLink'
|
||||
import Block from 'src/components/layout/Block'
|
||||
import Bold from 'src/components/layout/Bold'
|
||||
import { getNameFromAddressBookSelector } from 'src/logic/addressBook/store/selectors'
|
||||
|
|
|
@ -101,7 +101,7 @@ const Container = (): React.ReactElement => {
|
|||
path={`${matchSafeWithAddress?.path}/address-book`}
|
||||
render={() => wrapInSuspense(<AddressBookTable />, null)}
|
||||
/>
|
||||
<Redirect to={`${matchSafeWithAddress?.path}/balances`} />
|
||||
<Redirect to={`${matchSafeWithAddress?.url}/balances`} />
|
||||
</Switch>
|
||||
{modal.isOpen && <GenericModal {...modal} onClose={closeGenericModal} />}
|
||||
</>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
export const APP_ENV = process.env.REACT_APP_ENV
|
||||
export const NODE_ENV = process.env.NODE_ENV
|
||||
export const IS_PRODUCTION = process.env.NODE_ENV === 'production'
|
||||
export const NETWORK = process.env.REACT_APP_NETWORK?.toUpperCase() || 'RINKEBY'
|
||||
export const INTERCOM_ID = APP_ENV === 'production' ? process.env.REACT_APP_INTERCOM_ID : 'plssl1fl'
|
||||
export const GOOGLE_ANALYTICS_ID = process.env.REACT_APP_GOOGLE_ANALYTICS || ''
|
||||
export const SENTRY_DSN = process.env.REACT_APP_SENTRY_DSN || ''
|
||||
export const PORTIS_ID = process.env.REACT_APP_PORTIS_ID ?? '852b763d-f28b-4463-80cb-846d7ec5806b'
|
||||
export const FORTMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY ?? 'pk_test_CAD437AA29BE0A40'
|
||||
export const BLOCKNATIVE_KEY = process.env.REACT_APP_BLOCKNATIVE_KEY ?? '7fbb9cee-7e97-4436-8770-8b29a9a8814c'
|
||||
|
|
124
yarn.lock
124
yarn.lock
|
@ -1484,9 +1484,9 @@
|
|||
solc "0.5.14"
|
||||
truffle "^5.1.21"
|
||||
|
||||
"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#70e57bdd1e0fd5dfdf5768076577c1e000b5fe28":
|
||||
"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#8d8508e":
|
||||
version "0.4.0"
|
||||
resolved "https://github.com/gnosis/safe-react-components.git#70e57bdd1e0fd5dfdf5768076577c1e000b5fe28"
|
||||
resolved "https://github.com/gnosis/safe-react-components.git#8d8508ea01bf660bfd75a95ed7fff277caa9ac30"
|
||||
dependencies:
|
||||
classnames "^2.2.6"
|
||||
polished "3.6.5"
|
||||
|
@ -1997,6 +1997,92 @@
|
|||
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.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.27.1.tgz#67da0cb9680ed54ecdb56a66abd8183b5a8ee174"
|
||||
integrity sha512-OPBtKKJDgpJOJILaXntGp0z5KT2I1fmtePnHDdgPd7uNqXfTw0E6bvSjY9bR0pSJSooSwqZAAnsAZg8t4772ow==
|
||||
dependencies:
|
||||
"@sentry/core" "5.27.1"
|
||||
"@sentry/types" "5.27.1"
|
||||
"@sentry/utils" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/cli@^1.58.0":
|
||||
version "1.58.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.58.0.tgz#b1609f10e71539951499866502b13bf3a270fe79"
|
||||
integrity sha512-bUBKBYyKVzjNhQpAfPJ3XAvAyNNvrD2Rtpo6B0MR3Okw3prdLFgv9Ta8TN19IXT7u9w13B2EdMnNA6dQDtrD4g==
|
||||
dependencies:
|
||||
https-proxy-agent "^5.0.0"
|
||||
mkdirp "^0.5.5"
|
||||
node-fetch "^2.6.0"
|
||||
progress "^2.0.3"
|
||||
proxy-from-env "^1.1.0"
|
||||
|
||||
"@sentry/core@5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.27.1.tgz#489604054d821e1de155f80fe650085b37cad235"
|
||||
integrity sha512-n5CxzMbOAT6HZK4U4cOUAAikkRnnHhMNhInrjfZh7BoiuX1k63Hru2H5xk5WDuEaTTr5RaBA/fqPl7wxHySlwQ==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.1"
|
||||
"@sentry/minimal" "5.27.1"
|
||||
"@sentry/types" "5.27.1"
|
||||
"@sentry/utils" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/hub@5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.27.1.tgz#c95faaf18257c365acc09246fafd27276bfd6a2f"
|
||||
integrity sha512-RBHo3T92s6s4Ian1pZcPlmNtFqB+HAP6xitU+ZNA48bYUK+R1vvqEcI8Xs83FyNaRGCgclp9erDFQYyAuxY4vw==
|
||||
dependencies:
|
||||
"@sentry/types" "5.27.1"
|
||||
"@sentry/utils" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/minimal@5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.27.1.tgz#d6ce881ba3c262db29520177a4c1f0e0f5388697"
|
||||
integrity sha512-MHXCeJdA1NAvaJuippcM8nrWScul8iTN0Q5nnFkGctGIGmmiZHTXAYkObqJk7H3AK+CP7r1jqN2aQj5Nd9CtyA==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.1"
|
||||
"@sentry/types" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/react@^5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-5.27.1.tgz#1accad75dd7302d6486b8d4657673d56ebfb7fa7"
|
||||
integrity sha512-iKJgF3ZfIbKC9pCTip+xnu7JYAYryDgobknj/NmT7nbfeSE2oJHFZYsMk+BzxxKaEFcYfMeJvtm3Ijq1Nm1Khw==
|
||||
dependencies:
|
||||
"@sentry/browser" "5.27.1"
|
||||
"@sentry/minimal" "5.27.1"
|
||||
"@sentry/types" "5.27.1"
|
||||
"@sentry/utils" "5.27.1"
|
||||
hoist-non-react-statics "^3.3.2"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/tracing@^5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.27.1.tgz#198cd97514363369d29eef9b597be9332ab170c4"
|
||||
integrity sha512-GBmdR8Ky/nv4KOa6+DEnOSBkFOFhM+asR8Y/gw2qSUWCwzKuWHh9BEnDwxtSI8CMvgUwOIZ5wiiqJGc1unYfCw==
|
||||
dependencies:
|
||||
"@sentry/hub" "5.27.1"
|
||||
"@sentry/minimal" "5.27.1"
|
||||
"@sentry/types" "5.27.1"
|
||||
"@sentry/utils" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sentry/types@5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.27.1.tgz#031480a4cf8f0b6e6337fb03ee884deedcef6f40"
|
||||
integrity sha512-g1aX0V0fz5BTo0mjgSVY9XmPLGZ6p+8OEzq3ubKzDUf59VHl+Vt8viZ8VXw/vsNtfAjBHn7BzSuzJo7cXJJBtA==
|
||||
|
||||
"@sentry/utils@5.27.1":
|
||||
version "5.27.1"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.27.1.tgz#0ed9d9685aae6f4ef9eb6b9ebb81e361fd1c5452"
|
||||
integrity sha512-VIzK8utuvFO9EogZcKJPgmLnlJtYbaPQ0jCw7od9HRw1ckrSBc84sA0uuuY6pB6KSM+7k6EjJ5IdIBaCz5ep/A==
|
||||
dependencies:
|
||||
"@sentry/types" "5.27.1"
|
||||
tslib "^1.9.3"
|
||||
|
||||
"@sindresorhus/is@^0.14.0":
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
|
||||
|
@ -3780,6 +3866,13 @@ aes-js@3.1.2, aes-js@^3.1.1:
|
|||
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
|
||||
integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==
|
||||
|
||||
agent-base@6:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
|
||||
dependencies:
|
||||
debug "4"
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
|
||||
|
@ -7213,6 +7306,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
|
||||
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
|
@ -7234,13 +7334,6 @@ debug@^3.0.0, debug@^3.1.1, debug@^3.2.5:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
|
||||
integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
decamelize-keys@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
|
||||
|
@ -10666,6 +10759,14 @@ https-browserify@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
|
||||
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
|
||||
|
||||
https-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
|
||||
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
|
||||
dependencies:
|
||||
agent-base "6"
|
||||
debug "4"
|
||||
|
||||
human-signals@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
|
||||
|
@ -15728,6 +15829,11 @@ proxy-addr@~2.0.5:
|
|||
forwarded "~0.1.2"
|
||||
ipaddr.js "1.9.1"
|
||||
|
||||
proxy-from-env@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
||||
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
||||
|
||||
prr@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||
|
|
Loading…
Reference in New Issue