Allow to load Safe Apps with ENS names (#911)
* Remove ethereum-ens in favour of web3.eth.ens * Allow load Apps from ENS names * remove comment * review changes * replace REACT_APP_IPFS_NODE by REACT_APP_IPFS_GATEWAY * review fixes * TS Errors * fix paths * Fix validtor * Apps: Move App form to a separate file * re-build * review changes * fix iframeEl type * remove validation * fix type * update web3 version * remove type in getContentFromENS Co-authored-by: lukasschor <lukas.schor@gnosis.pm> Co-authored-by: Mati Dastugue <matias.dastugue@altoros.com> Co-authored-by: Fernando <fernando.greco@gmail.com> Co-authored-by: Mikhail Mikheev <mmvsha73@gmail.com>
This commit is contained in:
parent
7a20aaac42
commit
4065d5a007
|
@ -9,6 +9,7 @@ REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET=
|
||||||
|
|
||||||
# For all environments
|
# For all environments
|
||||||
REACT_APP_INFURA_TOKEN=
|
REACT_APP_INFURA_TOKEN=
|
||||||
|
REACT_APP_IPFS_GATEWAY=https://ipfs.io/ipfs
|
||||||
PUBLIC_URL=/app/
|
PUBLIC_URL=/app/
|
||||||
|
|
||||||
# For production environments
|
# For production environments
|
||||||
|
|
35
package.json
35
package.json
|
@ -161,20 +161,19 @@
|
||||||
"bignumber.js": "9.0.0",
|
"bignumber.js": "9.0.0",
|
||||||
"bnc-onboard": "1.9.0",
|
"bnc-onboard": "1.9.0",
|
||||||
"classnames": "^2.2.6",
|
"classnames": "^2.2.6",
|
||||||
"connected-react-router": "6.8.0",
|
"connected-react-router": "6.8.0",
|
||||||
"currency-flags": "2.1.2",
|
"currency-flags": "2.1.2",
|
||||||
"date-fns": "2.13.0",
|
"date-fns": "2.13.0",
|
||||||
"electron-is-dev": "^1.1.0",
|
"electron-is-dev": "^1.1.0",
|
||||||
"electron-log": "4.1.2",
|
"electron-log": "4.1.2",
|
||||||
"electron-updater": "4.3.1",
|
"electron-updater": "4.3.1",
|
||||||
"ethereum-ens": "0.8.0",
|
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"final-form-calculate": "^1.3.1",
|
|
||||||
"final-form": "4.19.1",
|
"final-form": "4.19.1",
|
||||||
|
"final-form-calculate": "^1.3.1",
|
||||||
"history": "4.10.1",
|
"history": "4.10.1",
|
||||||
"immortal-db": "^1.0.2",
|
"immortal-db": "^1.0.2",
|
||||||
"immutable": "^4.0.0-rc.9",
|
"immutable": "^4.0.0-rc.9",
|
||||||
"js-cookie": "^2.2.1",
|
"js-cookie": "^2.2.1",
|
||||||
"lodash.memoize": "^4.1.2",
|
"lodash.memoize": "^4.1.2",
|
||||||
"material-ui-search-bar": "^1.0.0-beta.13",
|
"material-ui-search-bar": "^1.0.0-beta.13",
|
||||||
"notistack": "https://github.com/gnosis/notistack.git#v0.9.4",
|
"notistack": "https://github.com/gnosis/notistack.git#v0.9.4",
|
||||||
|
@ -182,9 +181,10 @@
|
||||||
"polished": "3.6.3",
|
"polished": "3.6.3",
|
||||||
"qrcode.react": "1.0.0",
|
"qrcode.react": "1.0.0",
|
||||||
"query-string": "6.12.1",
|
"query-string": "6.12.1",
|
||||||
|
"react": "16.13.1",
|
||||||
"react-dom": "16.13.1",
|
"react-dom": "16.13.1",
|
||||||
"react-final-form-listeners": "^1.0.2",
|
|
||||||
"react-final-form": "6.4.0",
|
"react-final-form": "6.4.0",
|
||||||
|
"react-final-form-listeners": "^1.0.2",
|
||||||
"react-ga": "^2.7.0",
|
"react-ga": "^2.7.0",
|
||||||
"react-hot-loader": "4.12.21",
|
"react-hot-loader": "4.12.21",
|
||||||
"react-qr-reader": "^2.2.1",
|
"react-qr-reader": "^2.2.1",
|
||||||
|
@ -192,16 +192,15 @@
|
||||||
"react-router-dom": "5.2.0",
|
"react-router-dom": "5.2.0",
|
||||||
"react-scripts": "^3.4.1",
|
"react-scripts": "^3.4.1",
|
||||||
"react-window": "^1.8.5",
|
"react-window": "^1.8.5",
|
||||||
"react": "16.13.1",
|
|
||||||
"recompose": "^0.30.0",
|
"recompose": "^0.30.0",
|
||||||
|
"redux": "4.0.5",
|
||||||
"redux-actions": "^2.6.5",
|
"redux-actions": "^2.6.5",
|
||||||
"redux-thunk": "^2.3.0",
|
"redux-thunk": "^2.3.0",
|
||||||
"redux": "4.0.5",
|
|
||||||
"reselect": "^4.0.0",
|
"reselect": "^4.0.0",
|
||||||
"semver": "7.3.2",
|
"semver": "7.3.2",
|
||||||
"styled-components": "^5.0.1",
|
"styled-components": "^5.0.1",
|
||||||
"truffle-contract": "4.0.31",
|
"truffle-contract": "4.0.31",
|
||||||
"web3": "1.2.7"
|
"web3": "1.2.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@testing-library/jest-dom": "^4.2.4",
|
"@testing-library/jest-dom": "^4.2.4",
|
||||||
|
@ -209,24 +208,24 @@
|
||||||
"@testing-library/user-event": "^7.1.2",
|
"@testing-library/user-event": "^7.1.2",
|
||||||
"@types/jest": "^25.2.1",
|
"@types/jest": "^25.2.1",
|
||||||
"@types/node": "^13.11.0",
|
"@types/node": "^13.11.0",
|
||||||
"@types/react-dom": "^16.9.6",
|
|
||||||
"@types/react": "^16.9.32",
|
"@types/react": "^16.9.32",
|
||||||
|
"@types/react-dom": "^16.9.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.34.0",
|
"@typescript-eslint/eslint-plugin": "^2.34.0",
|
||||||
"@typescript-eslint/parser": "^2.34.0",
|
"@typescript-eslint/parser": "^2.34.0",
|
||||||
"autoprefixer": "9.7.6",
|
"autoprefixer": "9.7.6",
|
||||||
"cross-env": "^7.0.2",
|
"cross-env": "^7.0.2",
|
||||||
"dotenv-expand": "^5.1.0",
|
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
|
"dotenv-expand": "^5.1.0",
|
||||||
|
"electron": "7.1.8",
|
||||||
"electron-builder": "22.2.0",
|
"electron-builder": "22.2.0",
|
||||||
"electron-notarize": "^0.2.1",
|
"electron-notarize": "^0.2.1",
|
||||||
"electron": "7.1.8",
|
"eslint": "^6.8.0",
|
||||||
"eslint-config-prettier": "6.11.0",
|
"eslint-config-prettier": "6.11.0",
|
||||||
"eslint-plugin-import": "2.20.2",
|
"eslint-plugin-import": "2.20.2",
|
||||||
"eslint-plugin-jsx-a11y": "^6.2.3",
|
"eslint-plugin-jsx-a11y": "^6.2.3",
|
||||||
"eslint-plugin-prettier": "^3.1.2",
|
"eslint-plugin-prettier": "^3.1.2",
|
||||||
"eslint-plugin-react": "^7.18.3",
|
"eslint-plugin-react": "^7.18.3",
|
||||||
"eslint-plugin-sort-destructure-keys": "1.3.4",
|
"eslint-plugin-sort-destructure-keys": "1.3.4",
|
||||||
"eslint": "^6.8.0",
|
|
||||||
"ethereumjs-abi": "0.6.8",
|
"ethereumjs-abi": "0.6.8",
|
||||||
"husky": "^4.2.2",
|
"husky": "^4.2.2",
|
||||||
"lint-staged": "10.2.2",
|
"lint-staged": "10.2.2",
|
||||||
|
@ -234,7 +233,7 @@
|
||||||
"prettier": "2.0.5",
|
"prettier": "2.0.5",
|
||||||
"react-app-rewired": "^2.1.6",
|
"react-app-rewired": "^2.1.6",
|
||||||
"truffle": "5.1.23",
|
"truffle": "5.1.23",
|
||||||
"typescript": "~3.7.2" ,
|
"typescript": "~3.7.2",
|
||||||
"wait-on": "5.0.0"
|
"wait-on": "5.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,19 @@ export const simpleMemoize = (fn) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const required = (value?: string) => (value && value.trim() !== '' ? undefined : 'Required')
|
export const required = (value?: string) => {
|
||||||
|
const required = 'Required'
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
return required
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === 'string' && !value.trim().length) {
|
||||||
|
return required
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
export const mustBeInteger = (value: string) =>
|
export const mustBeInteger = (value: string) =>
|
||||||
!Number.isInteger(Number(value)) || value.includes('.') ? 'Must be an integer' : undefined
|
!Number.isInteger(Number(value)) || value.includes('.') ? 'Must be an integer' : undefined
|
||||||
|
|
|
@ -13,7 +13,7 @@ import { getWeb3 } from 'src/logic/wallets/getWeb3'
|
||||||
*/
|
*/
|
||||||
const generateBatchRequests = ({ abi, address, batch, context, methods }: any): any => {
|
const generateBatchRequests = ({ abi, address, batch, context, methods }: any): any => {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const contractInstance = new web3.eth.Contract(abi, address)
|
const contractInstance: any = new web3.eth.Contract(abi, address)
|
||||||
const localBatch = batch ? null : new web3.BatchRequest()
|
const localBatch = batch ? null : new web3.BatchRequest()
|
||||||
|
|
||||||
const values = methods.map((methodObject) => {
|
const values = methods.map((methodObject) => {
|
||||||
|
|
|
@ -29,7 +29,7 @@ export const estimateTxGasCosts = async (safeAddress, to, data, tx?: any, preApp
|
||||||
try {
|
try {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const from = await getAccountFrom(web3)
|
const from = await getAccountFrom(web3)
|
||||||
const safeInstance = new web3.eth.Contract(GnosisSafeSol.abi as any, safeAddress)
|
const safeInstance: any = new web3.eth.Contract(GnosisSafeSol.abi as any, safeAddress)
|
||||||
const nonce = await safeInstance.methods.nonce().call()
|
const nonce = await safeInstance.methods.nonce().call()
|
||||||
const threshold = await safeInstance.methods.getThreshold().call()
|
const threshold = await safeInstance.methods.getThreshold().call()
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ export const getApprovalTransaction = async ({
|
||||||
try {
|
try {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
|
|
||||||
const contract = new web3.eth.Contract(GnosisSafeSol.abi as any, safeInstance.address)
|
const contract: any = new web3.eth.Contract(GnosisSafeSol.abi as any, safeInstance.address)
|
||||||
|
|
||||||
return contract.methods.approveHash(txHash)
|
return contract.methods.approveHash(txHash)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -64,7 +64,7 @@ export const getExecutionTransaction = async ({
|
||||||
}) => {
|
}) => {
|
||||||
try {
|
try {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const contract = new web3.eth.Contract(GnosisSafeSol.abi as any, safeInstance.address)
|
const contract: any = new web3.eth.Contract(GnosisSafeSol.abi as any, safeInstance.address)
|
||||||
|
|
||||||
return contract.methods.execTransaction(
|
return contract.methods.execTransaction(
|
||||||
to,
|
to,
|
||||||
|
|
|
@ -59,7 +59,7 @@ export const isAddressAToken = async (tokenAddress) => {
|
||||||
export const hasDecimalsMethod = async (address) => {
|
export const hasDecimalsMethod = async (address) => {
|
||||||
try {
|
try {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const token = new web3.eth.Contract(ERC20Detailed.abi as any, address)
|
const token: any = new web3.eth.Contract(ERC20Detailed.abi as any, address)
|
||||||
await token.methods.decimals().call()
|
await token.methods.decimals().call()
|
||||||
return true
|
return true
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import ENS from 'ethereum-ens'
|
|
||||||
import Web3 from 'web3'
|
import Web3 from 'web3'
|
||||||
|
|
||||||
import { sameAddress } from './ethAddresses'
|
import { sameAddress } from './ethAddresses'
|
||||||
|
@ -116,10 +115,9 @@ export const getProviderInfo = async (web3Provider, providerName = 'Wallet') =>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getAddressFromENS = async (name) => {
|
export const getAddressFromENS = (name: string) => web3.eth.ens.getAddress(name)
|
||||||
const ens = new ENS(web3)
|
|
||||||
return await ens.resolver(name).addr()
|
export const getContentFromENS = (name: string) => web3.eth.ens.getContenthash(name)
|
||||||
}
|
|
||||||
|
|
||||||
export const setWeb3 = (provider) => {
|
export const setWeb3 = (provider) => {
|
||||||
web3 = new Web3(provider)
|
web3 = new Web3(provider)
|
||||||
|
|
|
@ -0,0 +1,203 @@
|
||||||
|
import { Checkbox, Text, TextField } from '@gnosis.pm/safe-react-components'
|
||||||
|
import memoize from 'lodash.memoize'
|
||||||
|
import React, { useState } from 'react'
|
||||||
|
import { FormSpy } from 'react-final-form'
|
||||||
|
import styled from 'styled-components'
|
||||||
|
|
||||||
|
import Field from 'src/components/forms/Field'
|
||||||
|
import DebounceValidationField from 'src/components/forms/Field/DebounceValidationField'
|
||||||
|
import GnoForm from 'src/components/forms/GnoForm'
|
||||||
|
import { required } from 'src/components/forms/validator'
|
||||||
|
import Img from 'src/components/layout/Img'
|
||||||
|
import { getContentFromENS } from 'src/logic/wallets/getWeb3'
|
||||||
|
import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg'
|
||||||
|
import { isValid as isURLValid } from 'src/utils/url'
|
||||||
|
|
||||||
|
import { getAppInfoFromUrl } from './utils'
|
||||||
|
import { SafeApp } from './types'
|
||||||
|
|
||||||
|
const APP_INFO: SafeApp = {
|
||||||
|
id: undefined,
|
||||||
|
url: '',
|
||||||
|
name: '',
|
||||||
|
iconUrl: appsIconSvg,
|
||||||
|
error: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
const StyledText = styled(Text)`
|
||||||
|
margin-bottom: 19px;
|
||||||
|
`
|
||||||
|
|
||||||
|
const StyledTextFileAppName = styled(TextField)`
|
||||||
|
&& {
|
||||||
|
width: 335px;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
const AppInfo = styled.div`
|
||||||
|
margin: 36px 0 24px 0;
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
const StyledCheckbox = styled(Checkbox)`
|
||||||
|
margin: 0;
|
||||||
|
`
|
||||||
|
|
||||||
|
const uniqueAppValidator = memoize((appList, value) => {
|
||||||
|
const exists = appList.some((a) => {
|
||||||
|
try {
|
||||||
|
const currentUrl = new URL(a.url)
|
||||||
|
const newUrl = new URL(value)
|
||||||
|
return currentUrl.href === newUrl.href
|
||||||
|
} catch (error) {
|
||||||
|
return 'There was a problem trying to validate the URL existence.'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return exists ? 'This app is already registered.' : undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const getIpfsLinkFromEns = memoize(async (name) => {
|
||||||
|
try {
|
||||||
|
const content = await getContentFromENS(name)
|
||||||
|
if (content && content.protocolType === 'ipfs') {
|
||||||
|
return `${process.env.REACT_APP_IPFS_GATEWAY}/${content.decoded}/`
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const getUrlFromFormValue = memoize(async (value: string) => {
|
||||||
|
const isUrlValid = isURLValid(value)
|
||||||
|
let ensContent
|
||||||
|
if (!isUrlValid) {
|
||||||
|
ensContent = await getIpfsLinkFromEns(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isUrlValid && ensContent === undefined) {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
return isUrlValid ? value : ensContent
|
||||||
|
})
|
||||||
|
|
||||||
|
const curriedSafeAppValidator = memoize((appList) => async (value: string) => {
|
||||||
|
const url = await getUrlFromFormValue(value)
|
||||||
|
|
||||||
|
if (!url) {
|
||||||
|
return 'Provide a valid url or ENS name.'
|
||||||
|
}
|
||||||
|
|
||||||
|
const appExistsRes = uniqueAppValidator(appList, url)
|
||||||
|
if (appExistsRes) {
|
||||||
|
return appExistsRes
|
||||||
|
}
|
||||||
|
|
||||||
|
const appInfo = await getAppInfoFromUrl(url)
|
||||||
|
if (appInfo.error) {
|
||||||
|
return 'This is not a valid Safe app.'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const composeValidatorsApps = (...validators: Function[]) => (value, values, meta) => {
|
||||||
|
if (!meta.modified) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return validators.reduce((error, validator) => error || validator(value), undefined)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
formId: string
|
||||||
|
appList: Array<SafeApp>
|
||||||
|
closeModal: () => void
|
||||||
|
onAppAdded: (app: SafeApp) => void
|
||||||
|
setIsSubmitDisabled: (status: boolean) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const AddAppForm = ({ appList, formId, closeModal, onAppAdded, setIsSubmitDisabled }: Props) => {
|
||||||
|
const [appInfo, setAppInfo] = useState<SafeApp>(APP_INFO)
|
||||||
|
const safeAppValidator = curriedSafeAppValidator(appList)
|
||||||
|
|
||||||
|
const onFormStatusChange = async ({ pristine, valid, validating, values, errors }) => {
|
||||||
|
if (!pristine) {
|
||||||
|
setIsSubmitDisabled(validating || !valid)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validating) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!values.appUrl || !values.appUrl.length || errors.appUrl) {
|
||||||
|
setAppInfo(APP_INFO)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const url = await getUrlFromFormValue(values.appUrl)
|
||||||
|
const appInfo = await getAppInfoFromUrl(url)
|
||||||
|
setAppInfo({ ...appInfo })
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSubmit = () => {
|
||||||
|
closeModal()
|
||||||
|
onAppAdded(appInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GnoForm
|
||||||
|
initialValues={{
|
||||||
|
appUrl: '',
|
||||||
|
agreed: false,
|
||||||
|
}}
|
||||||
|
// submit is triggered from ManageApps Component
|
||||||
|
onSubmit={handleSubmit}
|
||||||
|
testId={formId}
|
||||||
|
>
|
||||||
|
{() => (
|
||||||
|
<>
|
||||||
|
<StyledText size="xl">Add custom app</StyledText>
|
||||||
|
<DebounceValidationField
|
||||||
|
component={TextField}
|
||||||
|
label="App URL"
|
||||||
|
name="appUrl"
|
||||||
|
placeholder="App URL"
|
||||||
|
type="text"
|
||||||
|
validate={composeValidatorsApps(required, safeAppValidator)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<AppInfo>
|
||||||
|
<Img alt="Token image" height={55} src={appInfo.iconUrl} />
|
||||||
|
<StyledTextFileAppName label="App name" readOnly value={appInfo.name} />
|
||||||
|
</AppInfo>
|
||||||
|
|
||||||
|
<FormSpy
|
||||||
|
onChange={onFormStatusChange}
|
||||||
|
subscription={{
|
||||||
|
values: true,
|
||||||
|
valid: true,
|
||||||
|
errors: true,
|
||||||
|
pristine: true,
|
||||||
|
validating: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Field
|
||||||
|
component={StyledCheckbox}
|
||||||
|
label={
|
||||||
|
<p>
|
||||||
|
This app is not a Gnosis product and I agree to use this app <br /> at my own risk.
|
||||||
|
</p>
|
||||||
|
}
|
||||||
|
name="agreed"
|
||||||
|
type="checkbox"
|
||||||
|
validate={required}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</GnoForm>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AddAppForm
|
|
@ -1,166 +1,22 @@
|
||||||
import { ButtonLink, Checkbox, ManageListModal, Text, TextField } from '@gnosis.pm/safe-react-components'
|
import { ButtonLink, ManageListModal } from '@gnosis.pm/safe-react-components'
|
||||||
import React, { useState } from 'react'
|
import React, { useState } from 'react'
|
||||||
import { FormSpy } from 'react-final-form'
|
|
||||||
import styled from 'styled-components'
|
|
||||||
|
|
||||||
import { getAppInfoFromUrl } from './utils'
|
|
||||||
|
|
||||||
import Field from 'src/components/forms/Field'
|
|
||||||
import DebounceValidationField from 'src/components/forms/Field/DebounceValidationField'
|
|
||||||
import GnoForm from 'src/components/forms/GnoForm'
|
|
||||||
import { required } from 'src/components/forms/validator'
|
|
||||||
import Img from 'src/components/layout/Img'
|
|
||||||
import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg'
|
import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg'
|
||||||
import { isValid as isURLValid } from 'src/utils/url'
|
import AddAppFrom from './AddAppForm'
|
||||||
|
import { SafeApp } from './types'
|
||||||
|
|
||||||
const FORM_ID = 'add-apps-form'
|
const FORM_ID = 'add-apps-form'
|
||||||
|
|
||||||
const StyledText = styled(Text)`
|
type Props = {
|
||||||
margin-bottom: 19px;
|
appList: Array<SafeApp>
|
||||||
`
|
onAppAdded: (app: any) => void
|
||||||
|
onAppToggle: (appId: string, enabled: boolean) => void
|
||||||
const StyledTextFileAppName = styled(TextField)`
|
|
||||||
&& {
|
|
||||||
width: 335px;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const AppInfo = styled.div`
|
|
||||||
margin: 36px 0 24px 0;
|
|
||||||
|
|
||||||
img {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
`
|
|
||||||
|
|
||||||
const StyledCheckbox = styled(Checkbox)`
|
|
||||||
margin: 0;
|
|
||||||
`
|
|
||||||
const APP_INFO = { iconUrl: appsIconSvg, name: '', error: false }
|
|
||||||
|
|
||||||
const urlValidator = (value) => {
|
|
||||||
return isURLValid(value) ? undefined : 'Please, provide a valid url'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const composeValidatorsApps = (...validators) => (value, values, meta) => {
|
const ManageApps = ({ appList, onAppAdded, onAppToggle }: Props) => {
|
||||||
if (!meta.modified) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
return validators.reduce((error, validator) => error || validator(value), undefined)
|
|
||||||
}
|
|
||||||
|
|
||||||
const ManageApps = ({ appList, onAppAdded, onAppToggle }) => {
|
|
||||||
const [isOpen, setIsOpen] = useState(false)
|
const [isOpen, setIsOpen] = useState(false)
|
||||||
|
|
||||||
const [appInfo, setAppInfo] = useState(APP_INFO)
|
|
||||||
const [isSubmitDisabled, setIsSubmitDisabled] = useState(true)
|
const [isSubmitDisabled, setIsSubmitDisabled] = useState(true)
|
||||||
|
|
||||||
const onItemToggle = (itemId, checked) => {
|
|
||||||
onAppToggle(itemId, checked)
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleSubmit = () => {
|
|
||||||
setIsOpen(false)
|
|
||||||
onAppAdded(appInfo)
|
|
||||||
}
|
|
||||||
|
|
||||||
const cleanAppInfo = () => setAppInfo(APP_INFO)
|
|
||||||
|
|
||||||
const safeAppValidator = async (value) => {
|
|
||||||
const appInfo = await getAppInfoFromUrl(value)
|
|
||||||
|
|
||||||
if (appInfo.error) {
|
|
||||||
setAppInfo(APP_INFO)
|
|
||||||
return 'This is not a valid Safe app.'
|
|
||||||
}
|
|
||||||
|
|
||||||
setAppInfo({ ...appInfo })
|
|
||||||
}
|
|
||||||
|
|
||||||
const uniqueAppValidator = (value) => {
|
|
||||||
const exists = appList.find((a) => {
|
|
||||||
try {
|
|
||||||
const currentUrl = new URL(a.url)
|
|
||||||
const newUrl = new URL(value)
|
|
||||||
return currentUrl.href === newUrl.href
|
|
||||||
} catch (error) {
|
|
||||||
return 'There was a problem trying to validate the URL existence.'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return exists ? 'This app is already registered.' : undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
const onFormStatusChange = ({ pristine, valid, validating }) => {
|
|
||||||
if (!pristine) {
|
|
||||||
setIsSubmitDisabled(validating || !valid || appInfo.error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const customRequiredValidator = (value) => {
|
|
||||||
if (!value || !value.length) {
|
|
||||||
setAppInfo(APP_INFO)
|
|
||||||
return 'Required'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getAddAppForm = () => {
|
|
||||||
return (
|
|
||||||
<GnoForm
|
|
||||||
initialValues={{
|
|
||||||
appUrl: '',
|
|
||||||
agreed: false,
|
|
||||||
}}
|
|
||||||
onSubmit={handleSubmit}
|
|
||||||
testId={FORM_ID}
|
|
||||||
>
|
|
||||||
{() => (
|
|
||||||
<>
|
|
||||||
<StyledText size="xl">Add custom app</StyledText>
|
|
||||||
<DebounceValidationField
|
|
||||||
component={TextField}
|
|
||||||
label="App URL"
|
|
||||||
name="appUrl"
|
|
||||||
placeholder="App URL"
|
|
||||||
type="text"
|
|
||||||
validate={composeValidatorsApps(
|
|
||||||
customRequiredValidator,
|
|
||||||
urlValidator,
|
|
||||||
uniqueAppValidator,
|
|
||||||
safeAppValidator,
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<AppInfo>
|
|
||||||
<Img alt="Token image" height={55} src={appInfo.iconUrl} />
|
|
||||||
<StyledTextFileAppName label="App name" readOnly value={appInfo.name} />
|
|
||||||
</AppInfo>
|
|
||||||
|
|
||||||
<FormSpy
|
|
||||||
onChange={onFormStatusChange}
|
|
||||||
subscription={{
|
|
||||||
valid: true,
|
|
||||||
pristine: true,
|
|
||||||
validating: true,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<Field
|
|
||||||
component={StyledCheckbox}
|
|
||||||
label={
|
|
||||||
<p>
|
|
||||||
This app is not a Gnosis product and I agree to use this app <br /> at my own risk.
|
|
||||||
</p>
|
|
||||||
}
|
|
||||||
name="agreed"
|
|
||||||
type="checkbox"
|
|
||||||
validate={required}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</GnoForm>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
const onSubmitForm = () => {
|
const onSubmitForm = () => {
|
||||||
// This sucks, but it's the way the docs suggest
|
// This sucks, but it's the way the docs suggest
|
||||||
// https://github.com/final-form/react-final-form/blob/master/docs/faq.md#via-documentgetelementbyid
|
// https://github.com/final-form/react-final-form/blob/master/docs/faq.md#via-documentgetelementbyid
|
||||||
|
@ -169,16 +25,17 @@ const ManageApps = ({ appList, onAppAdded, onAppToggle }) => {
|
||||||
|
|
||||||
const toggleOpen = () => setIsOpen(!isOpen)
|
const toggleOpen = () => setIsOpen(!isOpen)
|
||||||
|
|
||||||
const closeModal = () => {
|
const closeModal = () => setIsOpen(false)
|
||||||
setIsOpen(false)
|
|
||||||
cleanAppInfo()
|
|
||||||
}
|
|
||||||
|
|
||||||
const getItemList = () =>
|
const getItemList = () =>
|
||||||
appList.map((a) => {
|
appList.map((a) => {
|
||||||
return { ...a, checked: !a.disabled }
|
return { ...a, checked: !a.disabled }
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const onItemToggle = (itemId, checked) => {
|
||||||
|
onAppToggle(itemId, checked)
|
||||||
|
}
|
||||||
|
|
||||||
const ButtonLinkAux: any = ButtonLink
|
const ButtonLinkAux: any = ButtonLink
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -190,7 +47,15 @@ const ManageApps = ({ appList, onAppAdded, onAppToggle }) => {
|
||||||
<ManageListModal
|
<ManageListModal
|
||||||
addButtonLabel="Add custom app"
|
addButtonLabel="Add custom app"
|
||||||
defaultIconUrl={appsIconSvg}
|
defaultIconUrl={appsIconSvg}
|
||||||
formBody={getAddAppForm()}
|
formBody={
|
||||||
|
<AddAppFrom
|
||||||
|
formId={FORM_ID}
|
||||||
|
appList={appList}
|
||||||
|
closeModal={closeModal}
|
||||||
|
onAppAdded={onAppAdded}
|
||||||
|
setIsSubmitDisabled={setIsSubmitDisabled}
|
||||||
|
/>
|
||||||
|
}
|
||||||
isSubmitFormDisabled={isSubmitDisabled}
|
isSubmitFormDisabled={isSubmitDisabled}
|
||||||
itemList={getItemList()}
|
itemList={getItemList()}
|
||||||
onClose={closeModal}
|
onClose={closeModal}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import {
|
||||||
} from 'src/routes/safe/store/selectors'
|
} from 'src/routes/safe/store/selectors'
|
||||||
import { loadFromStorage, saveToStorage } from 'src/utils/storage'
|
import { loadFromStorage, saveToStorage } from 'src/utils/storage'
|
||||||
import { isSameHref } from 'src/utils/url'
|
import { isSameHref } from 'src/utils/url'
|
||||||
|
import { SafeApp } from './types'
|
||||||
|
|
||||||
const APPS_STORAGE_KEY = 'APPS_STORAGE_KEY'
|
const APPS_STORAGE_KEY = 'APPS_STORAGE_KEY'
|
||||||
const APPS_LEGAL_DISCLAIMER_STORAGE_KEY = 'APPS_LEGAL_DISCLAIMER_STORAGE_KEY'
|
const APPS_LEGAL_DISCLAIMER_STORAGE_KEY = 'APPS_LEGAL_DISCLAIMER_STORAGE_KEY'
|
||||||
|
@ -43,12 +44,13 @@ const operations = {
|
||||||
}
|
}
|
||||||
|
|
||||||
function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
|
function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
|
||||||
const [appList, setAppList] = useState([])
|
const [appList, setAppList] = useState<Array<SafeApp>>([])
|
||||||
const [legalDisclaimerAccepted, setLegalDisclaimerAccepted] = useState(false)
|
const [legalDisclaimerAccepted, setLegalDisclaimerAccepted] = useState(false)
|
||||||
const [selectedApp, setSelectedApp] = useState()
|
const [selectedApp, setSelectedApp] = useState<string>()
|
||||||
const [loading, setLoading] = useState(true)
|
const [loading, setLoading] = useState(true)
|
||||||
const [appIsLoading, setAppIsLoading] = useState(true)
|
const [appIsLoading, setAppIsLoading] = useState(true)
|
||||||
const [iframeEl, setIframeEl] = useState(null)
|
const [iframeEl, setIframeEl] = useState<HTMLIFrameElement | null>(null)
|
||||||
|
|
||||||
const history = useHistory()
|
const history = useHistory()
|
||||||
const granted = useSelector(grantedSelector)
|
const granted = useSelector(grantedSelector)
|
||||||
const safeName = useSelector(safeNameSelector)
|
const safeName = useSelector(safeNameSelector)
|
||||||
|
@ -145,7 +147,7 @@ function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onAppAdded = (app) => {
|
const onAppAdded = (app: SafeApp) => {
|
||||||
const newAppList = [
|
const newAppList = [
|
||||||
{ url: app.url, disabled: false },
|
{ url: app.url, disabled: false },
|
||||||
...appList.map((a) => ({
|
...appList.map((a) => ({
|
||||||
|
|
|
@ -17,7 +17,7 @@ const multiSendAbi = [
|
||||||
|
|
||||||
const sendTransactions = (dispatch, safeAddress, txs, enqueueSnackbar, closeSnackbar, origin) => {
|
const sendTransactions = (dispatch, safeAddress, txs, enqueueSnackbar, closeSnackbar, origin) => {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const multiSend = new web3.eth.Contract(multiSendAbi as any, multiSendAddress)
|
const multiSend: any = new web3.eth.Contract(multiSendAbi as any, multiSendAddress)
|
||||||
|
|
||||||
const joinedTxs = txs
|
const joinedTxs = txs
|
||||||
.map((tx) =>
|
.map((tx) =>
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
export type SafeApp = {
|
||||||
|
id: string | undefined
|
||||||
|
url: string
|
||||||
|
name: string
|
||||||
|
iconUrl: string
|
||||||
|
disabled?: boolean
|
||||||
|
error: boolean
|
||||||
|
}
|
|
@ -2,6 +2,8 @@ import axios from 'axios'
|
||||||
|
|
||||||
import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg'
|
import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg'
|
||||||
|
|
||||||
|
import { SafeApp } from './types'
|
||||||
|
|
||||||
const removeLastTrailingSlash = (url) => {
|
const removeLastTrailingSlash = (url) => {
|
||||||
if (url.substr(-1) === '/') {
|
if (url.substr(-1) === '/') {
|
||||||
return url.substr(0, url.length - 1)
|
return url.substr(0, url.length - 1)
|
||||||
|
@ -10,7 +12,7 @@ const removeLastTrailingSlash = (url) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const gnosisAppsUrl = removeLastTrailingSlash(process.env.REACT_APP_GNOSIS_APPS_URL)
|
const gnosisAppsUrl = removeLastTrailingSlash(process.env.REACT_APP_GNOSIS_APPS_URL)
|
||||||
export const staticAppsList = [
|
export const staticAppsList: Array<{ url: string; disabled: boolean }> = [
|
||||||
{ url: `${gnosisAppsUrl}/compound`, disabled: false },
|
{ url: `${gnosisAppsUrl}/compound`, disabled: false },
|
||||||
{ url: `${gnosisAppsUrl}/aave`, disabled: false },
|
{ url: `${gnosisAppsUrl}/aave`, disabled: false },
|
||||||
{ url: `${gnosisAppsUrl}/pool-together`, disabled: false },
|
{ url: `${gnosisAppsUrl}/pool-together`, disabled: false },
|
||||||
|
@ -28,10 +30,10 @@ export const getAppInfoFromOrigin = (origin) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getAppInfoFromUrl = async (appUrl) => {
|
export const getAppInfoFromUrl = async (appUrl: string): Promise<SafeApp> => {
|
||||||
let res = { id: undefined, url: appUrl, name: 'unknown', iconUrl: appsIconSvg, error: true }
|
let res = { id: undefined, url: appUrl, name: 'unknown', iconUrl: appsIconSvg, error: true }
|
||||||
|
|
||||||
if (!appUrl) {
|
if (!appUrl.length) {
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ export const formMutators = {
|
||||||
|
|
||||||
export const createTxObject = (method, contractAddress, values) => {
|
export const createTxObject = (method, contractAddress, values) => {
|
||||||
const web3 = getWeb3()
|
const web3 = getWeb3()
|
||||||
const contract = new web3.eth.Contract([method], contractAddress)
|
const contract: any = new web3.eth.Contract([method], contractAddress)
|
||||||
const { inputs, name } = method
|
const { inputs, name } = method
|
||||||
const args = inputs.map(({ type }, index) => values[`methodInput-${name}_${index}_${type}`])
|
const args = inputs.map(({ type }, index) => values[`methodInput-${name}_${index}_${type}`])
|
||||||
|
|
||||||
|
|
284
yarn.lock
284
yarn.lock
|
@ -3918,7 +3918,7 @@ bluebird-lst@^1.0.9:
|
||||||
dependencies:
|
dependencies:
|
||||||
bluebird "^3.5.5"
|
bluebird "^3.5.5"
|
||||||
|
|
||||||
bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.5:
|
bluebird@^3.5.0, bluebird@^3.5.5:
|
||||||
version "3.7.2"
|
version "3.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
||||||
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
||||||
|
@ -6722,7 +6722,7 @@ eth-block-tracker@^4.2.0, eth-block-tracker@^4.4.1, eth-block-tracker@^4.4.2:
|
||||||
pify "^3.0.0"
|
pify "^3.0.0"
|
||||||
safe-event-emitter "^1.0.1"
|
safe-event-emitter "^1.0.1"
|
||||||
|
|
||||||
eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0:
|
eth-ens-namehash@2.0.8:
|
||||||
version "2.0.8"
|
version "2.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf"
|
resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf"
|
||||||
integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88=
|
integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88=
|
||||||
|
@ -6907,18 +6907,6 @@ ethereum-common@0.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca"
|
resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca"
|
||||||
integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==
|
integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==
|
||||||
|
|
||||||
ethereum-ens@0.8.0:
|
|
||||||
version "0.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/ethereum-ens/-/ethereum-ens-0.8.0.tgz#6d0f79acaa61fdbc87d2821779c4e550243d4c57"
|
|
||||||
integrity sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==
|
|
||||||
dependencies:
|
|
||||||
bluebird "^3.4.7"
|
|
||||||
eth-ens-namehash "^2.0.0"
|
|
||||||
js-sha3 "^0.5.7"
|
|
||||||
pako "^1.0.4"
|
|
||||||
underscore "^1.8.3"
|
|
||||||
web3 "^1.0.0-beta.34"
|
|
||||||
|
|
||||||
ethereum-private-key-to-address@0.0.3:
|
ethereum-private-key-to-address@0.0.3:
|
||||||
version "0.0.3"
|
version "0.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/ethereum-private-key-to-address/-/ethereum-private-key-to-address-0.0.3.tgz#1f1dccaefd1198c2dcde55501f331a846bd0aad0"
|
resolved "https://registry.yarnpkg.com/ethereum-private-key-to-address/-/ethereum-private-key-to-address-0.0.3.tgz#1f1dccaefd1198c2dcde55501f331a846bd0aad0"
|
||||||
|
@ -11935,7 +11923,7 @@ pad@^3.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
wcwidth "^1.0.1"
|
wcwidth "^1.0.1"
|
||||||
|
|
||||||
pako@^1.0.4, pako@~1.0.5:
|
pako@~1.0.5:
|
||||||
version "1.0.11"
|
version "1.0.11"
|
||||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
|
||||||
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
|
||||||
|
@ -16094,11 +16082,6 @@ underscore@1.9.1:
|
||||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
|
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
|
||||||
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
|
integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
|
||||||
|
|
||||||
underscore@^1.8.3:
|
|
||||||
version "1.10.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf"
|
|
||||||
integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==
|
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@^1.0.4:
|
unicode-canonical-property-names-ecmascript@^1.0.4:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
|
||||||
|
@ -16535,16 +16518,6 @@ web3-bzz@1.2.1:
|
||||||
swarm-js "0.1.39"
|
swarm-js "0.1.39"
|
||||||
underscore "1.9.1"
|
underscore "1.9.1"
|
||||||
|
|
||||||
web3-bzz@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.7.tgz#aa0f3d162f0777a5f35367dc5b70012dd1e129d0"
|
|
||||||
integrity sha512-iTIWBR+Z+Bn09WprtKm46LmyNOasg2lUn++AjXkBTB8UNxlUybxtza84yl2ETTZUs0zuFzdSSAEgbjhygG+9oA==
|
|
||||||
dependencies:
|
|
||||||
"@types/node" "^10.12.18"
|
|
||||||
got "9.6.0"
|
|
||||||
swarm-js "^0.1.40"
|
|
||||||
underscore "1.9.1"
|
|
||||||
|
|
||||||
web3-bzz@1.2.8:
|
web3-bzz@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.8.tgz#7ff2c2de362f82ae3825e48c70ec63b3aca2b8ef"
|
resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.8.tgz#7ff2c2de362f82ae3825e48c70ec63b3aca2b8ef"
|
||||||
|
@ -16564,15 +16537,6 @@ web3-core-helpers@1.2.1:
|
||||||
web3-eth-iban "1.2.1"
|
web3-eth-iban "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-core-helpers@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.7.tgz#522f859775ea0d15e7e40359c46d4efc5da92aee"
|
|
||||||
integrity sha512-bdU++9QATGeCetVrMp8pV97aQtVkN5oLBf/TWu/qumC6jK/YqrvLlBJLdwbz0QveU8zOSap6GCvJbqKvmmbV2A==
|
|
||||||
dependencies:
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-eth-iban "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-core-helpers@1.2.8:
|
web3-core-helpers@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.8.tgz#86776d8f658b63bb630c84a314686661e599aa68"
|
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.8.tgz#86776d8f658b63bb630c84a314686661e599aa68"
|
||||||
|
@ -16593,17 +16557,6 @@ web3-core-method@1.2.1:
|
||||||
web3-core-subscriptions "1.2.1"
|
web3-core-subscriptions "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-core-method@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.7.tgz#73fd80d2bf0765ff6efc454db49ac83d1769a45e"
|
|
||||||
integrity sha512-e1TI0QUnByDMbQ8QHwnjxfjKw0LIgVRY4TYrlPijET9ebqUJU1HCayn/BHIMpV6LKyR1fQj9EldWyT64wZQXkg==
|
|
||||||
dependencies:
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-promievent "1.2.7"
|
|
||||||
web3-core-subscriptions "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-core-method@1.2.8:
|
web3-core-method@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.8.tgz#f28a79935432aebfa019e4a50f9b6ae6c9ef4297"
|
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.8.tgz#f28a79935432aebfa019e4a50f9b6ae6c9ef4297"
|
||||||
|
@ -16623,13 +16576,6 @@ web3-core-promievent@1.2.1:
|
||||||
any-promise "1.3.0"
|
any-promise "1.3.0"
|
||||||
eventemitter3 "3.1.2"
|
eventemitter3 "3.1.2"
|
||||||
|
|
||||||
web3-core-promievent@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.7.tgz#fc7fa489f4cf76a040800f3dfd4b45c51bd3a39f"
|
|
||||||
integrity sha512-jNmsM/czCeMGQqKKwM9/HZVTJVIF96hdMVNN/V9TGvp+EEE7vDhB4pUocDnc/QF9Z/5QFBCVmvNWttlRgZmU0A==
|
|
||||||
dependencies:
|
|
||||||
eventemitter3 "3.1.2"
|
|
||||||
|
|
||||||
web3-core-promievent@1.2.8:
|
web3-core-promievent@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.8.tgz#a93ca2a19cae8b60883412619e04e69e11804eb5"
|
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.8.tgz#a93ca2a19cae8b60883412619e04e69e11804eb5"
|
||||||
|
@ -16648,17 +16594,6 @@ web3-core-requestmanager@1.2.1:
|
||||||
web3-providers-ipc "1.2.1"
|
web3-providers-ipc "1.2.1"
|
||||||
web3-providers-ws "1.2.1"
|
web3-providers-ws "1.2.1"
|
||||||
|
|
||||||
web3-core-requestmanager@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.7.tgz#9da0efce898ead7004d4ac50f748f5131cfe4d79"
|
|
||||||
integrity sha512-HJb/txjHixu1dxIebiZQKBoJCaNu4gsh7mq/uj6Z/w6tIHbybL90s/7ADyMED353yyJ2tDWtYJqeMVAR+KtdaA==
|
|
||||||
dependencies:
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-providers-http "1.2.7"
|
|
||||||
web3-providers-ipc "1.2.7"
|
|
||||||
web3-providers-ws "1.2.7"
|
|
||||||
|
|
||||||
web3-core-requestmanager@1.2.8:
|
web3-core-requestmanager@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.8.tgz#da7259e72a433858d04c59b999c5116bfb797c09"
|
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.8.tgz#da7259e72a433858d04c59b999c5116bfb797c09"
|
||||||
|
@ -16679,15 +16614,6 @@ web3-core-subscriptions@1.2.1:
|
||||||
underscore "1.9.1"
|
underscore "1.9.1"
|
||||||
web3-core-helpers "1.2.1"
|
web3-core-helpers "1.2.1"
|
||||||
|
|
||||||
web3-core-subscriptions@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.7.tgz#30c64aede03182832883b17c77e21cbb0933c86e"
|
|
||||||
integrity sha512-W/CzQYOUawdMDvkgA/fmLsnG5aMpbjrs78LZMbc0MFXLpH3ofqAgO2by4QZrrTShUUTeWS0ZuEkFFL/iFrSObw==
|
|
||||||
dependencies:
|
|
||||||
eventemitter3 "3.1.2"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
|
|
||||||
web3-core-subscriptions@1.2.8:
|
web3-core-subscriptions@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.8.tgz#50945498fb0bd655f842cbcc13873d96956aa93e"
|
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.8.tgz#50945498fb0bd655f842cbcc13873d96956aa93e"
|
||||||
|
@ -16707,19 +16633,6 @@ web3-core@1.2.1:
|
||||||
web3-core-requestmanager "1.2.1"
|
web3-core-requestmanager "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-core@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.7.tgz#9248b04331e458c76263d758c51b0cc612953900"
|
|
||||||
integrity sha512-QA0MTae0gXcr3KHe3cQ4x56+Wh43ZKWfMwg1gfCc3NNxPRM1jJ8qudzyptCAUcxUGXWpDG8syLIn1APDz5J8BQ==
|
|
||||||
dependencies:
|
|
||||||
"@types/bn.js" "^4.11.4"
|
|
||||||
"@types/node" "^12.6.1"
|
|
||||||
bignumber.js "^9.0.0"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-core-requestmanager "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-core@1.2.8:
|
web3-core@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.8.tgz#2a488bb11519b71e7738265329bddc00fc200dd3"
|
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.8.tgz#2a488bb11519b71e7738265329bddc00fc200dd3"
|
||||||
|
@ -16742,15 +16655,6 @@ web3-eth-abi@1.2.1:
|
||||||
underscore "1.9.1"
|
underscore "1.9.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-abi@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.7.tgz#6f3471b578649fddd844a14d397a3dd430fc44a5"
|
|
||||||
integrity sha512-4FnlT1q+D0XBkxSMXlIb/eG337uQeMaUdtVQ4PZ3XzxqpcoDuMgXm4o+3NRxnWmr4AMm6QKjM+hcC7c0mBKcyg==
|
|
||||||
dependencies:
|
|
||||||
ethers "4.0.0-beta.3"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-abi@1.2.8:
|
web3-eth-abi@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.8.tgz#7537138f3e5cd1ccf98233fa07f388aa8dc1fff1"
|
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.8.tgz#7537138f3e5cd1ccf98233fa07f388aa8dc1fff1"
|
||||||
|
@ -16777,23 +16681,6 @@ web3-eth-accounts@1.2.1:
|
||||||
web3-core-method "1.2.1"
|
web3-core-method "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-accounts@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.7.tgz#087f55d04a01b815b93151aac2fc1677436b9c59"
|
|
||||||
integrity sha512-AE7QWi/iIQIjXwlAPtlMabm/OPFF0a1PhxT1EiTckpYNP8fYs6jW7lYxEtJPPJIKqfMjoi1xkEqTVR1YZQ88lg==
|
|
||||||
dependencies:
|
|
||||||
"@web3-js/scrypt-shim" "^0.1.0"
|
|
||||||
crypto-browserify "3.12.0"
|
|
||||||
eth-lib "^0.2.8"
|
|
||||||
ethereumjs-common "^1.3.2"
|
|
||||||
ethereumjs-tx "^2.1.1"
|
|
||||||
underscore "1.9.1"
|
|
||||||
uuid "3.3.2"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-accounts@1.2.8:
|
web3-eth-accounts@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.8.tgz#e63afc6d4902f2beb0cf60e6b755c86fa5b5ccd7"
|
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.8.tgz#e63afc6d4902f2beb0cf60e6b755c86fa5b5ccd7"
|
||||||
|
@ -16825,21 +16712,6 @@ web3-eth-contract@1.2.1:
|
||||||
web3-eth-abi "1.2.1"
|
web3-eth-abi "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-contract@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.7.tgz#13d7f6003d6221f9a5fd61c2d3b5d039477c9674"
|
|
||||||
integrity sha512-uW23Y0iL7XroRNbf9fWZ1N6OYhEYTJX8gTuYASuRnpYrISN5QGiQML6pq/NCzqypR1bl5E0fuINZQSK/xefIVw==
|
|
||||||
dependencies:
|
|
||||||
"@types/bn.js" "^4.11.4"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-core-promievent "1.2.7"
|
|
||||||
web3-core-subscriptions "1.2.7"
|
|
||||||
web3-eth-abi "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-contract@1.2.8, web3-eth-contract@^1.2.7:
|
web3-eth-contract@1.2.8, web3-eth-contract@^1.2.7:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.8.tgz#ff75920ac698a70781edcebbf75287a6d0f14499"
|
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.8.tgz#ff75920ac698a70781edcebbf75287a6d0f14499"
|
||||||
|
@ -16869,20 +16741,6 @@ web3-eth-ens@1.2.1:
|
||||||
web3-eth-contract "1.2.1"
|
web3-eth-contract "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-ens@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.7.tgz#0bfa7d4b6c7753abbb31a2eb01a364b538f4c860"
|
|
||||||
integrity sha512-SPRnvUNWQ0CnnTDBteGIJkvFWEizJcAHlVsrFLICwcwFZu+appjX1UOaoGu2h3GXWtc/XZlu7B451Gi+Os2cTg==
|
|
||||||
dependencies:
|
|
||||||
eth-ens-namehash "2.0.8"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-promievent "1.2.7"
|
|
||||||
web3-eth-abi "1.2.7"
|
|
||||||
web3-eth-contract "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-ens@1.2.8:
|
web3-eth-ens@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.8.tgz#247daddfdbf7533adb0f45cd2f75c75e52f7e678"
|
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.8.tgz#247daddfdbf7533adb0f45cd2f75c75e52f7e678"
|
||||||
|
@ -16906,14 +16764,6 @@ web3-eth-iban@1.2.1:
|
||||||
bn.js "4.11.8"
|
bn.js "4.11.8"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-iban@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.7.tgz#832809c28586be3c667a713b77a2bcba11b7970f"
|
|
||||||
integrity sha512-2NrClz1PoQ3nSJBd+91ylCOVga9qbTxjRofq/oSCoHVAEvz3WZyttx9k5DC+0rWqwJF1h69ufFvdHAAlmN/4lg==
|
|
||||||
dependencies:
|
|
||||||
bn.js "4.11.8"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-iban@1.2.8:
|
web3-eth-iban@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.8.tgz#414e80a7fb2d1ea16490bc2c8fc29a996aec5612"
|
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.8.tgz#414e80a7fb2d1ea16490bc2c8fc29a996aec5612"
|
||||||
|
@ -16933,18 +16783,6 @@ web3-eth-personal@1.2.1:
|
||||||
web3-net "1.2.1"
|
web3-net "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth-personal@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.7.tgz#322cc2b14c37737b21772a53e4185686a04bf9be"
|
|
||||||
integrity sha512-2OAa1Spz0uB29dwCM8+1y0So7E47A4gKznjBEwXIYEcUIsvwT5X7ofFhC2XxyRpqlIWZSQAxRSSJFyupRRXzyw==
|
|
||||||
dependencies:
|
|
||||||
"@types/node" "^12.6.1"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-net "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth-personal@1.2.8:
|
web3-eth-personal@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.8.tgz#8ebb27210b4c9c9555a30c5bb2ce8db12f84cd24"
|
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.8.tgz#8ebb27210b4c9c9555a30c5bb2ce8db12f84cd24"
|
||||||
|
@ -16976,25 +16814,6 @@ web3-eth@1.2.1:
|
||||||
web3-net "1.2.1"
|
web3-net "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-eth@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.7.tgz#9427daefd3641200679c2946f77fc184dbfb5b4c"
|
|
||||||
integrity sha512-ljLd0oB4IjWkzFGVan4HkYhJXhSXgn9iaSaxdJixKGntZPgWMJfxeA+uLwTrlxrWzhvy4f+39WnT7wCh5e9TGg==
|
|
||||||
dependencies:
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-core-subscriptions "1.2.7"
|
|
||||||
web3-eth-abi "1.2.7"
|
|
||||||
web3-eth-accounts "1.2.7"
|
|
||||||
web3-eth-contract "1.2.7"
|
|
||||||
web3-eth-ens "1.2.7"
|
|
||||||
web3-eth-iban "1.2.7"
|
|
||||||
web3-eth-personal "1.2.7"
|
|
||||||
web3-net "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-eth@1.2.8:
|
web3-eth@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.8.tgz#cf6a16fae4d7c12b90cfb6ef570cb1a2acc34c1b"
|
resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.8.tgz#cf6a16fae4d7c12b90cfb6ef570cb1a2acc34c1b"
|
||||||
|
@ -17023,15 +16842,6 @@ web3-net@1.2.1:
|
||||||
web3-core-method "1.2.1"
|
web3-core-method "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3-net@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.7.tgz#c355621a8769c9c1a967c801e7db90c92a0e3808"
|
|
||||||
integrity sha512-j9qeZrS1FNyCeA0BfdLojkxOZQz3FKa1DJI+Dw9fEVhZS68vLOFANu2RB96gR9BoPHo5+k5D3NsKOoxt1gw3Gg==
|
|
||||||
dependencies:
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3-net@1.2.8:
|
web3-net@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.8.tgz#582fc2d4ba32c2e5c7761624e4be7c5434142d66"
|
resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.8.tgz#582fc2d4ba32c2e5c7761624e4be7c5434142d66"
|
||||||
|
@ -17130,14 +16940,6 @@ web3-providers-http@1.2.1:
|
||||||
web3-core-helpers "1.2.1"
|
web3-core-helpers "1.2.1"
|
||||||
xhr2-cookies "1.1.0"
|
xhr2-cookies "1.1.0"
|
||||||
|
|
||||||
web3-providers-http@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.7.tgz#31eb15390c103169b3d7d31bdb1ccae9e3f1629d"
|
|
||||||
integrity sha512-vazGx5onuH/zogrwkUaLFJwFcJ6CckP65VFSHoiV+GTQdkOqgoDIha7StKkslvDz4XJ2FuY/zOZHbtuOYeltXQ==
|
|
||||||
dependencies:
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
xhr2-cookies "1.1.0"
|
|
||||||
|
|
||||||
web3-providers-http@1.2.8:
|
web3-providers-http@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.8.tgz#cd7fc4d49df6980b5dd0fb1b5a808bc4b6a0069d"
|
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.8.tgz#cd7fc4d49df6980b5dd0fb1b5a808bc4b6a0069d"
|
||||||
|
@ -17155,15 +16957,6 @@ web3-providers-ipc@1.2.1:
|
||||||
underscore "1.9.1"
|
underscore "1.9.1"
|
||||||
web3-core-helpers "1.2.1"
|
web3-core-helpers "1.2.1"
|
||||||
|
|
||||||
web3-providers-ipc@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.7.tgz#4e6716e8723d431df3d6bfa1acd2f7c04e7071ad"
|
|
||||||
integrity sha512-/zc0y724H2zbkV4UbGGMhsEiLfafjagIzfrsWZnyTZUlSB0OGRmmFm2EkLJAgtXrLiodaHHyXKM0vB8S24bxdA==
|
|
||||||
dependencies:
|
|
||||||
oboe "2.1.4"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
|
|
||||||
web3-providers-ipc@1.2.8:
|
web3-providers-ipc@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.8.tgz#47be918ddd077999aa14703169b76c807f45d894"
|
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.8.tgz#47be918ddd077999aa14703169b76c807f45d894"
|
||||||
|
@ -17182,16 +16975,6 @@ web3-providers-ws@1.2.1:
|
||||||
web3-core-helpers "1.2.1"
|
web3-core-helpers "1.2.1"
|
||||||
websocket "github:web3-js/WebSocket-Node#polyfill/globalThis"
|
websocket "github:web3-js/WebSocket-Node#polyfill/globalThis"
|
||||||
|
|
||||||
web3-providers-ws@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.7.tgz#95b1cc5dc25e9b9d6630d6754f9354313b62f532"
|
|
||||||
integrity sha512-b5XzqDpRkNVe6MFs5K6iqOEyjQikHtg3KuU2/ClCDV37hm0WN4xCRVMC0LwegulbDXZej3zT9+1CYzGaGFREzA==
|
|
||||||
dependencies:
|
|
||||||
"@web3-js/websocket" "^1.0.29"
|
|
||||||
eventemitter3 "^4.0.0"
|
|
||||||
underscore "1.9.1"
|
|
||||||
web3-core-helpers "1.2.7"
|
|
||||||
|
|
||||||
web3-providers-ws@1.2.8:
|
web3-providers-ws@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.8.tgz#9e6454edc82d753d398c8d1e044632c234434a46"
|
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.8.tgz#9e6454edc82d753d398c8d1e044632c234434a46"
|
||||||
|
@ -17212,16 +16995,6 @@ web3-shh@1.2.1:
|
||||||
web3-core-subscriptions "1.2.1"
|
web3-core-subscriptions "1.2.1"
|
||||||
web3-net "1.2.1"
|
web3-net "1.2.1"
|
||||||
|
|
||||||
web3-shh@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.7.tgz#5382c7bc2f39539eb2841c4576d23ade25720461"
|
|
||||||
integrity sha512-f6PAgcpG0ZAo98KqCmeHoDEx5qzm3d5plet18DkT4U6WIeYowKdec8vZaLPRR7c2XreXFJ2gQf45CB7oqR7U/w==
|
|
||||||
dependencies:
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-core-method "1.2.7"
|
|
||||||
web3-core-subscriptions "1.2.7"
|
|
||||||
web3-net "1.2.7"
|
|
||||||
|
|
||||||
web3-shh@1.2.8:
|
web3-shh@1.2.8:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.8.tgz#5162d9d13bc6838d390df1cd39e5f87235c1c2ae"
|
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.8.tgz#5162d9d13bc6838d390df1cd39e5f87235c1c2ae"
|
||||||
|
@ -17245,20 +17018,6 @@ web3-utils@1.2.1:
|
||||||
underscore "1.9.1"
|
underscore "1.9.1"
|
||||||
utf8 "3.0.0"
|
utf8 "3.0.0"
|
||||||
|
|
||||||
web3-utils@1.2.7:
|
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.7.tgz#b68e232917e4376f81cf38ef79878e5903d18e93"
|
|
||||||
integrity sha512-FBh/CPJND+eiPeUF9KVbTyTZtXNWxPWtByBaWS6e2x4ACazPX711EeNaZaChIOGSLGe6se2n7kg6wnawe/MjuQ==
|
|
||||||
dependencies:
|
|
||||||
bn.js "4.11.8"
|
|
||||||
eth-lib "0.2.7"
|
|
||||||
ethereum-bloom-filters "^1.0.6"
|
|
||||||
ethjs-unit "0.1.6"
|
|
||||||
number-to-bn "1.7.0"
|
|
||||||
randombytes "^2.1.0"
|
|
||||||
underscore "1.9.1"
|
|
||||||
utf8 "3.0.0"
|
|
||||||
|
|
||||||
web3-utils@1.2.8, web3-utils@^1.2.7:
|
web3-utils@1.2.8, web3-utils@^1.2.7:
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.8.tgz#5321d91715cd4c0869005705a33c4c042a532b18"
|
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.8.tgz#5321d91715cd4c0869005705a33c4c042a532b18"
|
||||||
|
@ -17286,31 +17045,7 @@ web3@1.2.1:
|
||||||
web3-shh "1.2.1"
|
web3-shh "1.2.1"
|
||||||
web3-utils "1.2.1"
|
web3-utils "1.2.1"
|
||||||
|
|
||||||
web3@1.2.7:
|
web3@1.2.8:
|
||||||
version "1.2.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.7.tgz#fcb83571036c1c6f475bc984785982a444e8d78e"
|
|
||||||
integrity sha512-jAAJHMfUlTps+jH2li1ckDFEpPrEEriU/ubegSTGRl3KRdNhEqT93+3kd7FHJTn3NgjcyURo2+f7Da1YcZL8Mw==
|
|
||||||
dependencies:
|
|
||||||
web3-bzz "1.2.7"
|
|
||||||
web3-core "1.2.7"
|
|
||||||
web3-eth "1.2.7"
|
|
||||||
web3-eth-personal "1.2.7"
|
|
||||||
web3-net "1.2.7"
|
|
||||||
web3-shh "1.2.7"
|
|
||||||
web3-utils "1.2.7"
|
|
||||||
|
|
||||||
web3@^0.20.7:
|
|
||||||
version "0.20.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7"
|
|
||||||
integrity sha512-VU6/DSUX93d1fCzBz7WP/SGCQizO1rKZi4Px9j/3yRyfssHyFcZamMw2/sj4E8TlfMXONvZLoforR8B4bRoyTQ==
|
|
||||||
dependencies:
|
|
||||||
bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git"
|
|
||||||
crypto-js "^3.1.4"
|
|
||||||
utf8 "^2.1.1"
|
|
||||||
xhr2-cookies "^1.1.0"
|
|
||||||
xmlhttprequest "*"
|
|
||||||
|
|
||||||
web3@^1.0.0-beta.34:
|
|
||||||
version "1.2.8"
|
version "1.2.8"
|
||||||
resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.8.tgz#20b24baa769e0224a708ef5bf196a5b83d19540b"
|
resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.8.tgz#20b24baa769e0224a708ef5bf196a5b83d19540b"
|
||||||
integrity sha512-rXUn16VKxn2aIe9v0KX+bSm2JXdq/Vnj3lZ0Rub2Q5YUSycHdCBaDtJRukl/jB5ygAdyr5/cUwvJzhNDJSYsGw==
|
integrity sha512-rXUn16VKxn2aIe9v0KX+bSm2JXdq/Vnj3lZ0Rub2Q5YUSycHdCBaDtJRukl/jB5ygAdyr5/cUwvJzhNDJSYsGw==
|
||||||
|
@ -17323,6 +17058,17 @@ web3@^1.0.0-beta.34:
|
||||||
web3-shh "1.2.8"
|
web3-shh "1.2.8"
|
||||||
web3-utils "1.2.8"
|
web3-utils "1.2.8"
|
||||||
|
|
||||||
|
web3@^0.20.7:
|
||||||
|
version "0.20.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7"
|
||||||
|
integrity sha512-VU6/DSUX93d1fCzBz7WP/SGCQizO1rKZi4Px9j/3yRyfssHyFcZamMw2/sj4E8TlfMXONvZLoforR8B4bRoyTQ==
|
||||||
|
dependencies:
|
||||||
|
bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git"
|
||||||
|
crypto-js "^3.1.4"
|
||||||
|
utf8 "^2.1.1"
|
||||||
|
xhr2-cookies "^1.1.0"
|
||||||
|
xmlhttprequest "*"
|
||||||
|
|
||||||
webidl-conversions@^4.0.2:
|
webidl-conversions@^4.0.2:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
||||||
|
|
Loading…
Reference in New Issue