Safe apps: Extract Iframe messenger to a hook (#1219)

* add useLegalConsent hook in apps

* useAppList hook wip

* fix selecting first app

* update persisting app logic

* update saveToStorage type

* fix crash on apps tab

* add appframe comp

* add handleIframeLoad func

* reuse selectedApp variable in hook

* remove initialAppSelected

* add types for apps component

* fix history types

* extract useIframeMessenger hook

* fix safe-react-components version

* useIframeMessageHandler

* update safe-apps-sdk

* Fix alignment between app list and app iframe

* send safe info on handshake

* fix naming/types for url utils

* fix types and code cleanup

* remove operations

* dep bump

Co-authored-by: Daniel Sanchez <daniel.sanchez@gnosis.pm>
This commit is contained in:
Mikhail Mikheev 2020-08-13 15:37:34 +04:00 committed by GitHub
parent 883111f9b9
commit 7a4773511c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 613 additions and 496 deletions

View File

@ -162,8 +162,9 @@
]
},
"dependencies": {
"@gnosis.pm/safe-apps-sdk": "0.3.1",
"@gnosis.pm/safe-contracts": "1.1.1-dev.2",
"@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#45c746a",
"@gnosis.pm/safe-react-components": "https://github.com/gnosis/safe-react-components.git#45c746a12661b9c38e839e76022b6a0a92285db7",
"@gnosis.pm/util-contracts": "2.0.6",
"@ledgerhq/hw-transport-node-hid": "5.19.1",
"@material-ui/core": "4.11.0",
@ -173,7 +174,7 @@
"async-sema": "^3.1.0",
"axios": "0.19.2",
"bignumber.js": "9.0.0",
"bnc-onboard": "1.10.3",
"bnc-onboard": "1.11.0",
"classnames": "^2.2.6",
"concurrently": "^5.2.0",
"connected-react-router": "6.8.0",
@ -229,21 +230,21 @@
},
"devDependencies": {
"@testing-library/jest-dom": "5.11.2",
"@testing-library/react": "10.4.7",
"@testing-library/user-event": "12.0.17",
"@testing-library/react": "10.4.8",
"@testing-library/user-event": "12.1.0",
"@typechain/web3-v1": "^1.0.0",
"@types/history": "4.6.2",
"@types/jest": "^26.0.7",
"@types/jest": "^26.0.9",
"@types/lodash.memoize": "^4.1.6",
"@types/node": "14.0.27",
"@types/react": "^16.9.43",
"@types/react": "^16.9.44",
"@types/react-dom": "^16.9.6",
"@types/react-redux": "^7.1.9",
"@types/react-router-dom": "^5.1.5",
"@types/styled-components": "^5.1.1",
"@typescript-eslint/eslint-plugin": "3.7.1",
"@typescript-eslint/parser": "3.7.1",
"autoprefixer": "9.8.5",
"@types/styled-components": "^5.1.2",
"@typescript-eslint/eslint-plugin": "3.8.0",
"@typescript-eslint/parser": "3.8.0",
"autoprefixer": "9.8.6",
"cross-env": "^7.0.2",
"dotenv": "^8.2.0",
"dotenv-expand": "^5.1.0",

View File

@ -11,6 +11,10 @@ const Wrapper = styled.div``
const Item = styled.div`
border-bottom: solid 2px rgb(232, 231, 230);
&:last-child {
border-bottom: none;
}
.container {
display: flex;
align-items: flex-end;

View File

@ -7,17 +7,17 @@ import { SafeApp } from 'src/routes/safe/components/Apps/types.d'
import { getAppInfoFromUrl, getIpfsLinkFromEns, uniqueApp } from 'src/routes/safe/components/Apps/utils'
import { composeValidators, required } from 'src/components/forms/validator'
import Field from 'src/components/forms/Field'
import { isValid as isURLValid } from 'src/utils/url'
import { isValidURL } from 'src/utils/url'
import { isValidEnsName } from 'src/logic/wallets/ethAddresses'
import { useDebounce } from 'src/routes/safe/container/hooks/useDebounce'
const validateUrl = (url: string): string | undefined => (isURLValid(url) ? undefined : 'Invalid URL')
const validateUrl = (url: string): string | undefined => (isValidURL(url) ? undefined : 'Invalid URL')
export const appUrlResolver = createDecorator({
field: 'appUrl',
updates: {
appUrl: async (appUrl: string): Promise<string | undefined> => {
const ensContent = !isURLValid(appUrl) && isValidEnsName(appUrl) && (await getIpfsLinkFromEns(appUrl))
const ensContent = !isValidURL(appUrl) && isValidEnsName(appUrl) && (await getIpfsLinkFromEns(appUrl))
if (ensContent) {
return ensContent
@ -40,7 +40,7 @@ export const AppInfoUpdater = ({ onAppInfo }: { onAppInfo: (appInfo: SafeApp) =>
onAppInfo({ ...appInfo })
}
if (isURLValid(debouncedValue)) {
if (isValidURL(debouncedValue)) {
updateAppInfo()
}
}, [debouncedValue, onAppInfo])

View File

@ -0,0 +1,92 @@
import React, { forwardRef } from 'react'
import styled from 'styled-components'
import { FixedIcon, Loader, Title } from '@gnosis.pm/safe-react-components'
import { useHistory } from 'react-router-dom'
import { SAFELIST_ADDRESS } from 'src/routes/routes'
import { useLegalConsent } from '../hooks/useLegalConsent'
import { SafeApp } from '../types'
import LegalDisclaimer from './LegalDisclaimer'
const StyledIframe = styled.iframe`
padding: 15px;
box-sizing: border-box;
width: 100%;
height: 100%;
`
const LoadingContainer = styled.div`
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
`
const IframeWrapper = styled.div`
position: relative;
height: 100%;
width: 100%;
overflow: hidden;
`
const Centered = styled.div`
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
`
type AppFrameProps = {
selectedApp: SafeApp | undefined
safeAddress: string
network: string
granted: boolean
appIsLoading: boolean
onIframeLoad: () => void
}
const AppFrame = forwardRef<HTMLIFrameElement, AppFrameProps>(function AppFrameComponent(
{ selectedApp, safeAddress, network, appIsLoading, granted, onIframeLoad },
iframeRef,
): React.ReactElement {
const history = useHistory()
const { consentReceived, onConsentReceipt } = useLegalConsent()
const redirectToBalance = () => history.push(`${SAFELIST_ADDRESS}/${safeAddress}/balances`)
if (!selectedApp) {
return null
}
if (!consentReceived) {
return <LegalDisclaimer onCancel={redirectToBalance} onConfirm={onConsentReceipt} />
}
if (network === 'UNKNOWN' || !granted) {
return (
<Centered style={{ height: '476px' }}>
<FixedIcon type="notOwner" />
<Title size="xs">To use apps, you must be an owner of this Safe</Title>
</Centered>
)
}
return (
<IframeWrapper>
{appIsLoading && (
<LoadingContainer>
<Loader size="md" />
</LoadingContainer>
)}
<StyledIframe
frameBorder="0"
id={`iframe-${selectedApp.name}`}
ref={iframeRef}
src={selectedApp.url}
title={selectedApp.name}
onLoad={onIframeLoad}
/>
</IframeWrapper>
)
})
export default AppFrame

View File

@ -1,5 +1,6 @@
import { Icon, ModalFooterConfirmation, Text, Title } from '@gnosis.pm/safe-react-components'
import React, { ReactElement } from 'react'
import { Transaction } from '@gnosis.pm/safe-apps-sdk'
import React from 'react'
import styled from 'styled-components'
import AddressInfo from 'src/components/AddressInfo'
@ -12,22 +13,9 @@ import Bold from 'src/components/layout/Bold'
import Heading from 'src/components/layout/Heading'
import Img from 'src/components/layout/Img'
import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers'
import { OpenModalArgs } from 'src/routes/safe/components/Layout/interfaces'
import { humanReadableValue } from 'src/logic/tokens/utils/humanReadableValue'
export type SafeAppTx = {
to: string
value: string | number
data: string
}
// TODO: This should be exported by safe-rect-components
type GenericModalProps = {
title: ReactElement
body: ReactElement
footer: ReactElement
onClose: () => void
}
const Wrapper = styled.div`
margin-bottom: 15px;
`
@ -56,7 +44,7 @@ const StyledTextBox = styled(TextBox)`
max-width: 444px;
`
const isTxValid = (t: SafeAppTx): boolean => {
const isTxValid = (t: Transaction): boolean => {
if (!['string', 'number'].includes(typeof t.value)) {
return false
}
@ -75,11 +63,11 @@ const confirmTransactions = (
ethBalance: string,
nameApp: string,
iconApp: string,
txs: SafeAppTx[],
openModal: (modalInfo: GenericModalProps) => void,
txs: Transaction[],
openModal: (modalInfo: OpenModalArgs) => void,
closeModal: () => void,
onConfirm: () => void,
): any => {
): void => {
const areTxsMalformed = txs.some((t) => !isTxValid(t))
const title = <ModalTitle iconUrl={iconApp} title={nameApp} />

View File

@ -1,52 +1,131 @@
import { useEffect } from 'react'
import { useSnackbar } from 'notistack'
import {
InterfaceMessages,
InterfaceMessageToPayload,
SDKMessages,
SDKMessageToPayload,
SDK_MESSAGES,
INTERFACE_MESSAGES,
} from '@gnosis.pm/safe-apps-sdk'
import { useDispatch, useSelector } from 'react-redux'
import { useEffect, useCallback, MutableRefObject } from 'react'
import { OpenModalArgs } from 'src/routes/safe/components/Layout/interfaces'
import {
safeEthBalanceSelector,
safeNameSelector,
safeParamAddressFromStateSelector,
} from 'src/routes/safe/store/selectors'
import { networkSelector } from 'src/logic/wallets/store/selectors'
import { SafeApp } from 'src/routes/safe/components/Apps/types'
import sendTransactions from '../sendTransactions'
import confirmTransactions from '../confirmTransactions'
type ReturnType = {
sendMessageToIframe: <T extends keyof InterfaceMessages>(messageId: T, data: InterfaceMessageToPayload[T]) => void
}
interface CustomMessageEvent extends MessageEvent {
data: {
messageId: keyof SDKMessages
data: SDKMessageToPayload[keyof SDKMessages]
}
}
const useIframeMessageHandler = (
selectedApp: SafeApp | undefined,
openModal: (modal: OpenModalArgs) => void,
closeModal: () => void,
iframeRef: MutableRefObject<HTMLIFrameElement>,
): ReturnType => {
const { enqueueSnackbar, closeSnackbar } = useSnackbar()
const safeName = useSelector(safeNameSelector)
const safeAddress = useSelector(safeParamAddressFromStateSelector)
const ethBalance = useSelector(safeEthBalanceSelector)
const network = useSelector(networkSelector)
const dispatch = useDispatch()
const sendMessageToIframe = useCallback(
function <T extends keyof InterfaceMessages>(messageId: T, data: InterfaceMessageToPayload[T]) {
if (iframeRef?.current && selectedApp) {
iframeRef.current.contentWindow.postMessage({ messageId, data }, selectedApp.url)
}
},
[iframeRef, selectedApp],
)
const useIframeMessageHandler = (): void => {
useEffect(() => {
// const handleIframeMessage = (data) => {
// if (!data || !data.messageId) {
// console.error('ThirdPartyApp: A message was received without message id.')
// return
// }
// switch (data.messageId) {
// case operations.SEND_TRANSACTIONS: {
// const onConfirm = async () => {
// closeModal()
// await sendTransactions(dispatch, safeAddress, data.data, enqueueSnackbar, closeSnackbar, selectedApp.id)
// }
// confirmTransactions(
// safeAddress,
// safeName,
// ethBalance,
// selectedApp.name,
// selectedApp.iconUrl,
// data.data,
// openModal,
// closeModal,
// onConfirm,
// )
// break
// }
// default: {
// console.error(`ThirdPartyApp: A message was received with an unknown message id ${data.messageId}.`)
// break
// }
// }
// }
// const onIframeMessage = async ({ data, origin }) => {
// if (origin === window.origin) {
// return
// }
// if (!selectedApp.url.includes(origin)) {
// console.error(`ThirdPartyApp: A message was received from an unknown origin ${origin}`)
// return
// }
// handleIframeMessage(data)
// }
// window.addEventListener('message', onIframeMessage)
// return () => {
// window.removeEventListener('message', onIframeMessage)
// }
}, [])
const handleIframeMessage = (msg: CustomMessageEvent) => {
if (!msg?.data.messageId) {
console.error('ThirdPartyApp: A message was received without message id.')
return
}
switch (msg.data.messageId) {
case SDK_MESSAGES.SEND_TRANSACTIONS: {
const onConfirm = async () => {
closeModal()
await sendTransactions(dispatch, safeAddress, msg.data.data, enqueueSnackbar, closeSnackbar, selectedApp.id)
}
confirmTransactions(
safeAddress,
safeName,
ethBalance,
selectedApp.name,
selectedApp.iconUrl,
msg.data.data,
openModal,
closeModal,
onConfirm,
)
break
}
case SDK_MESSAGES.SAFE_APP_SDK_INITIALIZED: {
sendMessageToIframe(INTERFACE_MESSAGES.ON_SAFE_INFO, {
safeAddress,
network: network,
ethBalance,
})
break
}
default: {
console.error(`ThirdPartyApp: A message was received with an unknown message id ${msg.data.messageId}.`)
break
}
}
}
const onIframeMessage = async (message: CustomMessageEvent) => {
if (message.origin === window.origin) {
return
}
if (!selectedApp.url.includes(message.origin)) {
console.error(`ThirdPartyApp: A message was received from an unknown origin ${message.origin}`)
return
}
handleIframeMessage(message)
}
window.addEventListener('message', onIframeMessage)
return () => {
window.removeEventListener('message', onIframeMessage)
}
}, [
closeModal,
closeSnackbar,
dispatch,
enqueueSnackbar,
ethBalance,
network,
openModal,
safeAddress,
safeName,
selectedApp,
sendMessageToIframe,
])
return {
sendMessageToIframe,
}
}
export { useIframeMessageHandler }

View File

@ -1,85 +1,63 @@
import { Card, FixedIcon, IconText, Loader, Menu, Title } from '@gnosis.pm/safe-react-components'
import { withSnackbar } from 'notistack'
import React, { useCallback, useEffect, useState, useMemo } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { useHistory } from 'react-router-dom'
import styled from 'styled-components'
import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react'
import { Networks, INTERFACE_MESSAGES } from '@gnosis.pm/safe-apps-sdk'
import { Card, IconText, Loader, Menu, Title } from '@gnosis.pm/safe-react-components'
import { useSelector } from 'react-redux'
import styled, { css } from 'styled-components'
import ManageApps from './components/ManageApps'
import confirmTransactions from './confirmTransactions'
import sendTransactions from './sendTransactions'
import LegalDisclaimer from './components/LegalDisclaimer'
import { useLegalConsent } from './hooks/useLegalConsent'
import AppFrame from './components/AppFrame'
import { useAppList } from './hooks/useAppList'
import { OpenModalArgs } from 'src/routes/safe/components/Layout/interfaces'
import LCL from 'src/components/ListContentLayout'
import { networkSelector } from 'src/logic/wallets/store/selectors'
import { SAFELIST_ADDRESS } from 'src/routes/routes'
import { grantedSelector } from 'src/routes/safe/container/selector'
import {
safeEthBalanceSelector,
safeNameSelector,
safeParamAddressFromStateSelector,
} from 'src/routes/safe/store/selectors'
import { isSameHref } from 'src/utils/url'
import { safeEthBalanceSelector, safeParamAddressFromStateSelector } from 'src/routes/safe/store/selectors'
import { isSameURL } from 'src/utils/url'
import { useIframeMessageHandler } from './hooks/useIframeMessageHandler'
const StyledCard = styled(Card)`
margin-bottom: 24px;
`
const StyledIframe = styled.iframe`
padding: 15px;
box-sizing: border-box;
width: 100%;
height: 100%;
`
const Centered = styled.div`
const centerCSS = css`
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
`
const LoadingContainer = styled.div`
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
${centerCSS};
`
const CenteredMT = styled(Centered)`
const StyledCard = styled(Card)`
margin-bottom: 24px;
${centerCSS};
`
const CenteredMT = styled.div`
${centerCSS};
margin-top: 5px;
`
const IframeWrapper = styled.div`
position: relative;
height: 100%;
width: 100%;
overflow: hidden;
`
const operations = {
ON_SAFE_INFO: 'ON_SAFE_INFO',
SAFE_APP_SDK_INITIALIZED: 'SAFE_APP_SDK_INITIALIZED',
SEND_TRANSACTIONS: 'SEND_TRANSACTIONS',
type AppsProps = {
closeModal: () => void
openModal: (modal: OpenModalArgs) => void
}
function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
const Apps = ({ closeModal, openModal }: AppsProps): React.ReactElement => {
const { appList, loadingAppList, onAppToggle, onAppAdded } = useAppList()
const [appIsLoading, setAppIsLoading] = useState<boolean>(true)
const [selectedAppId, setSelectedAppId] = useState<string>()
const [iframeEl, setIframeEl] = useState<HTMLIFrameElement | null>(null)
const iframeRef = useRef<HTMLIFrameElement>()
const history = useHistory()
const granted = useSelector(grantedSelector)
const safeName = useSelector(safeNameSelector)
const safeAddress = useSelector(safeParamAddressFromStateSelector)
const network = useSelector(networkSelector)
const ethBalance = useSelector(safeEthBalanceSelector)
const dispatch = useDispatch()
const { consentReceived, onConsentReceipt } = useLegalConsent()
const selectedApp = useMemo(() => appList.find((app) => app.id === selectedAppId), [appList, selectedAppId])
const enabledApps = useMemo(() => appList.filter((a) => !a.disabled), [appList])
const { sendMessageToIframe } = useIframeMessageHandler(selectedApp, openModal, closeModal, iframeRef)
const onSelectApp = useCallback(
(appId) => {
@ -108,151 +86,19 @@ function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
}
}, [appList, selectedApp, selectedAppId])
const iframeRef = useCallback((node) => {
if (node !== null) {
setIframeEl(node)
}
}, [])
const redirectToBalance = () => history.push(`${SAFELIST_ADDRESS}/${safeAddress}/balances`)
const getContent = () => {
if (!selectedApp) {
return null
}
if (!consentReceived) {
return <LegalDisclaimer onCancel={redirectToBalance} onConfirm={onConsentReceipt} />
}
if (network === 'UNKNOWN' || !granted) {
return (
<Centered style={{ height: '476px' }}>
<FixedIcon type="notOwner" />
<Title size="xs">To use apps, you must be an owner of this Safe</Title>
</Centered>
)
}
return (
<IframeWrapper>
{appIsLoading && (
<LoadingContainer>
<Loader size="md" />
</LoadingContainer>
)}
<StyledIframe
frameBorder="0"
id={`iframe-${selectedApp.name}`}
ref={iframeRef}
src={selectedApp.url}
title={selectedApp.name}
/>
</IframeWrapper>
)
}
const enabledApps = useMemo(() => appList.filter((a) => !a.disabled), [appList])
const sendMessageToIframe = useCallback(
(messageId, data) => {
if (iframeEl && selectedApp) {
iframeEl.contentWindow.postMessage({ messageId, data }, selectedApp.url)
}
},
[iframeEl, selectedApp],
)
// handle messages from iframe
useEffect(() => {
const handleIframeMessage = (data) => {
if (!data || !data.messageId) {
console.error('ThirdPartyApp: A message was received without message id.')
const handleIframeLoad = useCallback(() => {
const iframe = iframeRef.current
if (!iframe || !selectedApp || !isSameURL(iframe.src, selectedApp.url)) {
return
}
switch (data.messageId) {
case operations.SEND_TRANSACTIONS: {
const onConfirm = async () => {
closeModal()
await sendTransactions(dispatch, safeAddress, data.data, enqueueSnackbar, closeSnackbar, selectedApp.id)
}
confirmTransactions(
safeAddress,
safeName,
ethBalance,
selectedApp.name,
selectedApp.iconUrl,
data.data,
openModal,
closeModal,
onConfirm,
)
break
}
case operations.SAFE_APP_SDK_INITIALIZED: {
sendMessageToIframe(operations.ON_SAFE_INFO, {
safeAddress,
network,
ethBalance,
})
break
}
default: {
console.error(`ThirdPartyApp: A message was received with an unknown message id ${data.messageId}.`)
break
}
}
}
const onIframeMessage = async ({ data, origin }) => {
if (origin === window.origin) {
return
}
if (!selectedApp.url.includes(origin)) {
console.error(`ThirdPartyApp: A message was received from an unknown origin ${origin}`)
return
}
handleIframeMessage(data)
}
window.addEventListener('message', onIframeMessage)
return () => {
window.removeEventListener('message', onIframeMessage)
}
})
// on iframe change
useEffect(() => {
const sendMessageToIframe = (messageId, data) => {
iframeEl.contentWindow.postMessage({ messageId, data }, selectedApp.url)
}
const onIframeLoaded = () => {
setAppIsLoading(false)
sendMessageToIframe(operations.ON_SAFE_INFO, {
sendMessageToIframe(INTERFACE_MESSAGES.ON_SAFE_INFO, {
safeAddress,
network,
network: network as Networks,
ethBalance,
})
}
if (!iframeEl || !selectedApp || !isSameHref(iframeEl.src, selectedApp.url)) {
return
}
iframeEl.addEventListener('load', onIframeLoaded)
return () => {
iframeEl.removeEventListener('load', onIframeLoaded)
}
}, [ethBalance, iframeEl, network, safeAddress, selectedApp])
}, [ethBalance, network, safeAddress, selectedApp, sendMessageToIframe])
if (loadingAppList || !appList.length) {
return (
@ -272,13 +118,21 @@ function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
<LCL.Menu>
<LCL.List activeItem={selectedAppId} items={enabledApps} onItemClick={onSelectApp} />
</LCL.Menu>
<LCL.Content>{getContent()}</LCL.Content>
<LCL.Content>
<AppFrame
ref={iframeRef}
granted={granted}
selectedApp={selectedApp}
safeAddress={safeAddress}
network={network}
appIsLoading={appIsLoading}
onIframeLoad={handleIframeLoad}
/>
</LCL.Content>
</LCL.Wrapper>
) : (
<StyledCard>
<Centered>
<Title size="xs">No Apps Enabled</Title>
</Centered>
</StyledCard>
)}
<CenteredMT>
@ -294,4 +148,4 @@ function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
)
}
export default withSnackbar(Apps)
export default Apps

View File

@ -7,6 +7,7 @@ import { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom'
import Receive from '../Balances/Receive'
import { styles } from './style'
import { ModalState, OpenModalArgs } from './interfaces'
import Modal from 'src/components/Modal'
import NoSafe from 'src/components/NoSafe'
@ -48,9 +49,9 @@ const Layout = (props: Props): React.ReactElement => {
const { hideSendFunds, onHide, onShow, sendFunds, showReceive, showSendFunds } = props
const match = useRouteMatch()
const [modal, setModal] = useState({
const [modal, setModal] = useState<ModalState>({
isOpen: false,
title: null,
title: '',
body: null,
footer: null,
onClose: null,
@ -62,14 +63,12 @@ const Layout = (props: Props): React.ReactElement => {
return <NoSafe provider={provider} text="Safe not found" />
}
const openGenericModal = (modalConfig) => {
const openGenericModal = (modalConfig: OpenModalArgs): void => {
setModal({ ...modalConfig, isOpen: true })
}
const closeGenericModal = () => {
if (modal.onClose) {
modal.onClose()
}
const closeGenericModal = (): void => {
modal.onClose?.()
setModal({
isOpen: false,

View File

@ -0,0 +1,14 @@
export interface ModalState {
isOpen: boolean
title: string | React.ReactElement
body: React.ReactNode | null
footer: React.ReactNode | null
onClose: () => unknown
}
export interface OpenModalArgs {
title: string | React.ReactElement
body: React.ReactNode | null
footer: React.ReactNode | null
onClose: () => unknown
}

View File

@ -1,4 +1,4 @@
export const isValid = (url, protocolsAllowed = ['https:', 'http:']) => {
export const isValidURL = (url: string, protocolsAllowed = ['https:', 'http:']): boolean => {
try {
const urlInfo = new URL(url)
return protocolsAllowed.includes(urlInfo.protocol)
@ -7,7 +7,7 @@ export const isValid = (url, protocolsAllowed = ['https:', 'http:']) => {
}
}
export const isSameHref = (url1, url2) => {
export const isSameURL = (url1: string, url2: string): boolean => {
try {
const a = new URL(url1)
const b = new URL(url2)

508
yarn.lock
View File

@ -1075,13 +1075,6 @@
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
"@babel/runtime@7.3.4":
version "7.3.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83"
integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==
dependencies:
regenerator-runtime "^0.12.0"
"@babel/runtime@7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b"
@ -1096,6 +1089,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.11.0":
version "7.11.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736"
integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/template@^7.10.4", "@babel/template@^7.4.0", "@babel/template@^7.8.6":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
@ -1325,6 +1325,11 @@
"@ethersproject/rlp" "^5.0.0"
"@ethersproject/signing-key" "^5.0.0"
"@gnosis.pm/safe-apps-sdk@0.3.1":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-0.3.1.tgz#ebec9ffecfd8a6dbe061ef85a2fc68a3b92ee398"
integrity sha512-2nsmoaPa/C3X+g6EThc4DD7ptSy9fV+RQ507Ly1y01uIzVMRCT0sFcOm0z8oNwCWc5qtY2X4hn00+oR6JdmhUw==
"@gnosis.pm/safe-contracts@1.1.1-dev.2":
version "1.1.1-dev.2"
resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.1.1-dev.2.tgz#4a5b9a9befe66d15df87d2216237d4ea4f64118f"
@ -1337,7 +1342,7 @@
solc "0.5.14"
truffle "^5.1.21"
"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#45c746a":
"@gnosis.pm/safe-react-components@https://github.com/gnosis/safe-react-components.git#45c746a12661b9c38e839e76022b6a0a92285db7":
version "0.2.0"
resolved "https://github.com/gnosis/safe-react-components.git#45c746a12661b9c38e839e76022b6a0a92285db7"
dependencies:
@ -1593,18 +1598,32 @@
"@ledgerhq/logs" "^5.19.1"
rxjs "^6.6.0"
"@ledgerhq/devices@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/devices/-/devices-5.21.0.tgz#b6dc274536e70513a3ae7df7a9f956ea87adcc49"
integrity sha512-65XZgD2ykK7AJkcJuNEP8WD43HDkudA7NfB34U1T6pmPC6AgWoRYDNpJ23XQ8eiAImETlxv7FaDGUXSEpIQMGQ==
dependencies:
"@ledgerhq/errors" "^5.21.0"
"@ledgerhq/logs" "^5.21.0"
rxjs "^6.6.0"
"@ledgerhq/errors@^5.19.1":
version "5.19.1"
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.19.1.tgz#3d25cc0ee92feee35415236c741ef668a106e275"
integrity sha512-9v4ishxc2doiR06E/87uJdT7LjnSpnWPftDaBXBm/6KEgjPGtGBCcRW3fkmQTWNE115e6TG9JYRiVRPuqs6GHg==
"@ledgerhq/hw-app-eth@^5.19.0":
version "5.20.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.20.0.tgz#59306601c1309e15a948c9b3d06e7dc85480f48e"
integrity sha512-kL+oEJGhkd0A6GahRiDTp8RbheHYV+CQv04O+enQqIPuT++IZvSRlv03lBQNyNziX8b64/ZM+kQHWGesN7w7xg==
"@ledgerhq/errors@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/errors/-/errors-5.21.0.tgz#2a7bdea62fe7e0bd9ccc3b786d2c179f8f65bc02"
integrity sha512-sGfXoaVGfzrhnexu2TEdgL2FAjM7PUeobWdDBx3DJKE+ARje1y+i5+qg7gyvQL+9k4FV7mW2xMOcnUI3T2Zw0Q==
"@ledgerhq/hw-app-eth@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-5.21.0.tgz#a6857df45cddf29b5e7623237171d7ffba42a44c"
integrity sha512-FKwwqp7IDgCq9ToL/JwO4S3HXr4LSI+Vr6KqeCtpCwRGNdvtiUHF3S9g2LtUroCcGXx9HTr2XL4hZzfrj+2jfg==
dependencies:
"@ledgerhq/errors" "^5.19.1"
"@ledgerhq/hw-transport" "^5.19.1"
"@ledgerhq/errors" "^5.21.0"
"@ledgerhq/hw-transport" "^5.21.0"
bignumber.js "^9.0.0"
rlp "^2.2.6"
@ -1633,14 +1652,14 @@
node-hid "^1.3.0"
usb "^1.6.3"
"@ledgerhq/hw-transport-u2f@^5.19.0":
version "5.19.1"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.19.1.tgz#327a98aa9a932114c3d530dabd77459e249b7091"
integrity sha512-jCDx+ZJdHhB+I/aoUZHhgE5aiZdrKkvUHfeUGScR/Ya3MfOHq7otIS+gEi4AIuxK08gXUOWAm1ygKzTCo+KPpw==
"@ledgerhq/hw-transport-u2f@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.21.0.tgz#7bb14e6a334eccff0e51c3346702561cebc99941"
integrity sha512-D9bbi0ubvNmHbqTAcaxtbgrXRRnoc6qW34m+IO/FRqdPrJTYw3o9y2f0udv8WQZkbNnBvXEksROEvADkr4dj+Q==
dependencies:
"@ledgerhq/errors" "^5.19.1"
"@ledgerhq/hw-transport" "^5.19.1"
"@ledgerhq/logs" "^5.19.1"
"@ledgerhq/errors" "^5.21.0"
"@ledgerhq/hw-transport" "^5.21.0"
"@ledgerhq/logs" "^5.21.0"
u2f-api "0.2.7"
"@ledgerhq/hw-transport@^5.19.1":
@ -1652,11 +1671,25 @@
"@ledgerhq/errors" "^5.19.1"
events "^3.1.0"
"@ledgerhq/hw-transport@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-5.21.0.tgz#c94d13397a26e0755824e05613e2257a3d2b450b"
integrity sha512-emVoy+ZEA19z+g6CsDcliVRRYDn4RzdH+zW9F37Z22uoMWslx2VNa+KdcKijmS3V3mkSLjle1cjwprPh61G8hQ==
dependencies:
"@ledgerhq/devices" "^5.21.0"
"@ledgerhq/errors" "^5.21.0"
events "^3.2.0"
"@ledgerhq/logs@^5.19.1":
version "5.19.1"
resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.19.1.tgz#c3df2b307331ccd373abc78b8ccea02377049256"
integrity sha512-nz33IoR3dG3DtJ46AyfLfpdMjGMkwmi21H49wcqVfNAteEe74fzO4cw9fcGMb4ENspYYtmB4LWTSp4gVPRglcg==
"@ledgerhq/logs@^5.21.0":
version "5.21.0"
resolved "https://registry.yarnpkg.com/@ledgerhq/logs/-/logs-5.21.0.tgz#19629222e44b4d312e232c2dfbe0d067ecc12830"
integrity sha512-eyPXrKfQ+HSLcITB5MdSWhXlImE2qKWTLT2u6l+a9wiCZl5yimSqn0uC5evxaP0McKOW0wSntgfj+gOoKv+Paw==
"@material-ui/core@4.11.0":
version "4.11.0"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.11.0.tgz#b69b26e4553c9e53f2bfaf1053e216a0af9be15a"
@ -1805,17 +1838,17 @@
xhr "^2.2.0"
xtend "^4.0.1"
"@portis/web3@^2.0.0-beta.55":
version "2.0.0-beta.56"
resolved "https://registry.yarnpkg.com/@portis/web3/-/web3-2.0.0-beta.56.tgz#90ef7f0a63f68d80e10cb87aa08acbb92e433af6"
integrity sha512-likffGhd9lKMOiI657rV62NM0ewxLBOQGPoUJPIX2rCx25P9FQ+4CiqEsqCUeofaNra6q+/4EPZgSscNWHa6BQ==
"@portis/web3@^2.0.0-beta.57":
version "2.0.0-beta.57"
resolved "https://registry.yarnpkg.com/@portis/web3/-/web3-2.0.0-beta.57.tgz#45692bffc07687d50fa5204d514590d438b759de"
integrity sha512-OYmt0a171AJECYT/vTkPb4uc1x7xFASMfn+MN3EAjo7DRhY8WfTAMNoMJDhuFARRLC7an2HrRIsT7D4q9GNrnQ==
dependencies:
"@portis/web3-provider-engine" "1.1.0"
ethereumjs-util "5.2.0"
penpal "3.0.7"
pocket-js-core "0.0.3"
"@restless/sanitizers@^0.2.4":
"@restless/sanitizers@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@restless/sanitizers/-/sanitizers-0.2.5.tgz#96a5cfa3edb52abd8fa14e77798738f3a067dbec"
integrity sha512-utsOFwv5owNnbj8HijF7uML/AURgUl5YvY4S2gpxQsrp2D1EP/4rQU/HSyYdIQaL89BoZ/5NHveRJrcFyuHo/w==
@ -1962,27 +1995,27 @@
lodash "^4.17.15"
redent "^3.0.0"
"@testing-library/react@10.4.7":
version "10.4.7"
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.7.tgz#fc14847fb70a5e93576b8f7f0d1490ead02a9061"
integrity sha512-hUYbum3X2f1ZKusKfPaooKNYqE/GtPiQ+D2HJaJ4pkxeNJQFVUEvAvEh9+3QuLdBeTWkDMNY5NSijc5+pGdM4Q==
"@testing-library/react@10.4.8":
version "10.4.8"
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-10.4.8.tgz#5eb730291b8fd81cdb2d8877770d060b044ae4a4"
integrity sha512-clgpFR6QHiRRcdhFfAKDhH8UXpNASyfkkANhtCsCVBnai+O+mK1rGtMES+Apc7ql5Wyxu7j8dcLiC4pV5VblHA==
dependencies:
"@babel/runtime" "^7.10.3"
"@testing-library/dom" "^7.17.1"
"@testing-library/user-event@12.0.17":
version "12.0.17"
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.0.17.tgz#51f48905d62b3c6960fe5ea7a46152d8440f1586"
integrity sha512-Et22bfgnLdowY0VSP8MQuCP9wdrqWMrm9OCXSi3q3rx7ctSvEsC/jYNbgK/MJdDSpVhNVnB+fqm1VhVlDDRN6A==
"@testing-library/user-event@12.1.0":
version "12.1.0"
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-12.1.0.tgz#a2597419466a93e338c91baa7bb22d4da0309d1d"
integrity sha512-aH/XuNFpPD6dA+fh754EGqKeAzpH66HpLJYkv9vOAih2yGmTM8JiZ8uisQDGWRPkc6sxE2zCqDwLR4ZskhRCxw==
dependencies:
"@babel/runtime" "^7.10.2"
"@toruslabs/eccrypto@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.3.tgz#6dcee86670149501efee4865d0acb25366f72237"
integrity sha512-hoLACz9Z6RP/ZH41Ba0iImJpl1f4Zx7pi/d3R7UIrOyt4IOgnWrlkzh2IqQYw4ouae4WZQYSZlyeYv81EWkoxQ==
"@toruslabs/eccrypto@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-1.1.4.tgz#2b32e0da10b28a316d08984afcda303536954cd8"
integrity sha512-AQYcd7AM6ePb+V6CZTb6Lb/iaZ/BKpZ66AFdF1YLvMnyBeRY1JgdFOnjQfhtrUAYRMdcc8pBfvjFoWWK7EcggA==
dependencies:
acorn "^7.3.1"
acorn "^7.4.0"
elliptic "^6.5.3"
es6-promise "^4.2.8"
nan "^2.14.1"
@ -1997,26 +2030,28 @@
web3-eth-contract "^1.2.9"
web3-utils "^1.2.9"
"@toruslabs/http-helpers@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-1.3.3.tgz#8564665a0cb9d4f868e5eaf814bbac71926623a2"
integrity sha512-bM0NyFCA+K8DOlhciDLIUQ05/VzuM9lgdwnNSr/gociRhPWbUDc8PkSVKYT3MshXj/ZtLvN9UvcTvY1hddN5UQ==
"@toruslabs/http-helpers@^1.3.4":
version "1.3.4"
resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-1.3.4.tgz#8811cff562fb792267f79ca5cb5c1bf1bc517e34"
integrity sha512-2Hm34F3GOwg41jEaZs1rVF4b+SGwC2mPeR7WhkkkM1cQNlXyCtcgLNLqlCVrww9e6pfBCZ2h3aEQVw+p4cT4fw==
dependencies:
deepmerge "^4.2.2"
loglevel "^1.6.8"
"@toruslabs/torus-embed@^1.3.0":
version "1.7.3"
resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.7.3.tgz#1be2f3404a59cb145b5dd11c82da80cec1d360eb"
integrity sha512-PMmksmG9mgRmFvliHccxV2LdDjrNKQfLojlYG3WMXB0OF3Bj3B7Y94ItSEvVf3XI+Q9xadq1cTAN+wLV3km/BA==
"@toruslabs/torus-embed@^1.8.2":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@toruslabs/torus-embed/-/torus-embed-1.8.2.tgz#6652b8f751c5f041749ccbfcaa0c08ced5f4f278"
integrity sha512-SlApK4BavoQYNenoQxjUs9/rrqrGDK5+Z9coABA6J7pLcbSL7QnBl8bKwTTYhI9Hri2GRbUM8XzNNpZfy5RiIQ==
dependencies:
"@chaitanyapotti/random-id" "^1.0.3"
"@toruslabs/fetch-node-details" "^2.3.0"
"@toruslabs/torus.js" "^2.2.2"
"@toruslabs/http-helpers" "^1.3.4"
"@toruslabs/torus.js" "^2.2.4"
create-hash "^1.2.0"
deepmerge "^4.2.2"
eth-json-rpc-errors "^2.0.2"
fast-deep-equal "^3.1.3"
is-stream "^2.0.0"
json-rpc-engine "^5.1.8"
json-rpc-middleware-stream "^2.1.1"
loglevel "^1.6.8"
@ -2027,19 +2062,19 @@
safe-event-emitter "^1.0.1"
web3 "^0.20.7"
"@toruslabs/torus.js@^2.2.2":
version "2.2.3"
resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-2.2.3.tgz#525456e01cddfecf29a7b70b640d0188ffbf819e"
integrity sha512-GryzcqY5/iumfCy0LNUIdjo9iKYRHof6UQzHYK/u2oc4XtCWVKnwk+6OZfuYeurEoW/VDYU+b1MEa7qqOKV9RQ==
"@toruslabs/torus.js@^2.2.4":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-2.2.5.tgz#8994ae7727d980e2c0600b1154d547260ea52ec4"
integrity sha512-fxrIQmtNo4p3uEy5KdiIrZiB32KGPtaV70PoPg/vQB4IL/gjrQSYSIcC0VyP04yBfjHLccJe/HKOhlofpKcjAg==
dependencies:
"@toruslabs/eccrypto" "^1.1.3"
"@toruslabs/http-helpers" "^1.3.3"
"@toruslabs/eccrypto" "^1.1.4"
"@toruslabs/http-helpers" "^1.3.4"
bn.js "^5.1.2"
elliptic "^6.5.3"
json-stable-stringify "^1.0.1"
loglevel "^1.6.8"
memory-cache "^0.2.0"
web3-utils "^1.2.9"
web3-utils "^1.2.11"
"@truffle/blockchain-utils@^0.0.11":
version "0.0.11"
@ -2270,10 +2305,10 @@
jest-diff "^25.2.1"
pretty-format "^25.2.1"
"@types/jest@^26.0.7":
version "26.0.7"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.7.tgz#495cb1d1818c1699dbc3b8b046baf1c86ef5e324"
integrity sha512-+x0077/LoN6MjqBcVOe1y9dpryWnfDZ+Xfo3EqGeBcfPRJlQp3Lw62RvNlWxuGv7kOEwlHriAa54updi3Jvvwg==
"@types/jest@^26.0.9":
version "26.0.9"
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.9.tgz#0543b57da5f0cd949c5f423a00c56c492289c989"
integrity sha512-k4qFfJ5AUKrWok5KYXp2EPm89b0P/KZpl7Vg4XuOTVVQEhLDBDBU3iBFrjjdgd8fLw96aAtmnwhXHl63bWeBQQ==
dependencies:
jest-diff "^25.2.1"
pretty-format "^25.2.1"
@ -2422,7 +2457,7 @@
dependencies:
"@types/react" "*"
"@types/react@*", "@types/react@^16.9.43":
"@types/react@*":
version "16.9.43"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b"
integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==
@ -2430,6 +2465,14 @@
"@types/prop-types" "*"
csstype "^2.2.0"
"@types/react@^16.9.44":
version "16.9.44"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.44.tgz#da84b179c031aef67dc92c33bd3401f1da2fa3bc"
integrity sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
"@types/resolve@^0.0.8":
version "0.0.8"
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
@ -2456,15 +2499,15 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
"@types/styled-components@^5.1.1":
version "5.1.1"
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.1.tgz#17c3b3a299aa38254189e04a72a8ee009a22e42d"
integrity sha512-fIjKvDU1LJExBZWEQilHqzfpOK4KUwBsj5zC79lxa94ekz8oDQSBNcayMACBImxIuevF+NbBGL9O/2CQ67Zhig==
"@types/styled-components@^5.1.2":
version "5.1.2"
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.2.tgz#652af475b4af917b355ea1c3068acae63d46455f"
integrity sha512-HNocYLfrsnNNm8NTS/W53OERSjRA8dx5Bn6wBd2rXXwt4Z3s+oqvY6/PbVt3e6sgtzI63GX//WiWiRhWur08qQ==
dependencies:
"@types/hoist-non-react-statics" "*"
"@types/react" "*"
"@types/react-native" "*"
csstype "^2.2.0"
csstype "^3.0.2"
"@types/testing-library__jest-dom@^5.9.1":
version "5.9.1"
@ -2492,12 +2535,12 @@
dependencies:
"@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.1.tgz#d144c49a9a0ffe8dd704bb179c243df76c111bc9"
integrity sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg==
"@typescript-eslint/eslint-plugin@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.8.0.tgz#f82947bcdd9a4e42be7ad80dfd61f1dc411dd1df"
integrity sha512-lFb4VCDleFSR+eo4Ew+HvrJ37ZH1Y9ZyE+qyP7EiwBpcCVxwmUc5PAqhShCQ8N8U5vqYydm74nss+a0wrrCErw==
dependencies:
"@typescript-eslint/experimental-utils" "3.7.1"
"@typescript-eslint/experimental-utils" "3.8.0"
debug "^4.1.1"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
@ -2524,26 +2567,26 @@
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/experimental-utils@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.1.tgz#ab036caaed4c870d22531d41f9352f3147364d61"
integrity sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng==
"@typescript-eslint/experimental-utils@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.8.0.tgz#ac1f7c88322dcfb7635ece6f0441516dd951099a"
integrity sha512-o8T1blo1lAJE0QDsW7nSyvZHbiDzQDjINJKyB44Z3sSL39qBy5L10ScI/XwDtaiunoyKGLiY9bzRk4YjsUZl8w==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/typescript-estree" "3.7.1"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/typescript-estree" "3.8.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.1.tgz#5d9ccecb116d12d9c6073e9861c57c9b1aa88128"
integrity sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ==
"@typescript-eslint/parser@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.8.0.tgz#8e1dcd404299bf79492409c81c415fa95a7c622b"
integrity sha512-u5vjOBaCsnMVQOvkKCXAmmOhyyMmFFf5dbkM3TIbg3MZ2pyv5peE4gj81UAbTHwTOXEwf7eCQTUMKrDl/+qGnA==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
"@typescript-eslint/experimental-utils" "3.7.1"
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/typescript-estree" "3.7.1"
"@typescript-eslint/experimental-utils" "3.8.0"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/typescript-estree" "3.8.0"
eslint-visitor-keys "^1.1.0"
"@typescript-eslint/parser@^2.10.0":
@ -2556,10 +2599,10 @@
"@typescript-eslint/typescript-estree" "2.34.0"
eslint-visitor-keys "^1.1.0"
"@typescript-eslint/types@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.1.tgz#90375606b2fd73c1224fe9e397ee151e28fa1e0c"
integrity sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg==
"@typescript-eslint/types@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.8.0.tgz#58581dd863f86e0cd23353d94362bb90b4bea796"
integrity sha512-8kROmEQkv6ss9kdQ44vCN1dTrgu4Qxrd2kXr10kz2NP5T8/7JnEfYNxCpPkArbLIhhkGLZV3aVMplH1RXQRF7Q==
"@typescript-eslint/typescript-estree@2.34.0":
version "2.34.0"
@ -2574,13 +2617,13 @@
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/typescript-estree@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.1.tgz#ce1ffbd0fa53f34d4ce851a7a364e392432f6eb3"
integrity sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA==
"@typescript-eslint/typescript-estree@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.8.0.tgz#0606d19f629f813dbdd5a34c7a1e895d6191cac6"
integrity sha512-MTv9nPDhlKfclwnplRNDL44mP2SY96YmPGxmMbMy6x12I+pERcxpIUht7DXZaj4mOKKtet53wYYXU0ABaiXrLw==
dependencies:
"@typescript-eslint/types" "3.7.1"
"@typescript-eslint/visitor-keys" "3.7.1"
"@typescript-eslint/types" "3.8.0"
"@typescript-eslint/visitor-keys" "3.8.0"
debug "^4.1.1"
glob "^7.1.6"
is-glob "^4.0.1"
@ -2588,107 +2631,107 @@
semver "^7.3.2"
tsutils "^3.17.1"
"@typescript-eslint/visitor-keys@3.7.1":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.1.tgz#b90191e74efdee656be8c5a30f428ed16dda46d1"
integrity sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA==
"@typescript-eslint/visitor-keys@3.8.0":
version "3.8.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.8.0.tgz#ad35110249fb3fc30a36bfcbfeea93e710cfaab1"
integrity sha512-gfqQWyVPpT9NpLREXNR820AYwgz+Kr1GuF3nf1wxpHD6hdxI62tq03ToomFnDxY0m3pUB39IF7sil7D5TQexLA==
dependencies:
eslint-visitor-keys "^1.1.0"
"@unilogin/provider@^0.5.21":
version "0.5.21"
resolved "https://registry.yarnpkg.com/@unilogin/provider/-/provider-0.5.21.tgz#bc3aa74750c3fcd2ddcb763279fb58d88f5bc8f5"
integrity sha512-HVMrFIKc6ysxj5F1dz0UFaSIvSMtqw5JBYEzomvtthsw/fNwbT8/I/mA4OCaAJcpuaI1d66X9bZhOrP5GWcwVg==
"@unilogin/provider@^0.6.1":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@unilogin/provider/-/provider-0.6.1.tgz#427247f0cb0899d8b0d00c04a4b90ae2a3c2cb40"
integrity sha512-S96uBfoh+/nk8L6Yr+YgEV+FwQgtRnozWhgJpOhmRz128ri5Qv2SXLx5Sac33NGbs8g27PgKOyHX3dKJCvcP3g==
dependencies:
"@restless/sanitizers" "^0.2.4"
"@restless/sanitizers" "^0.2.5"
reactive-properties "^0.1.11"
"@walletconnect/client@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.0.18.tgz#e3316fc53c0218d69e03bcdbb3c4c9759579b151"
integrity sha512-VgxS4mdsYfp6PQ/W4jVtWGhiQb2wf8hWM+kYMHV21N9UUkOuRBBjDay1Gxq2Tv99+BOF4VI+cpmvjTvsGaT/0A==
"@walletconnect/client@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/client/-/client-1.1.0.tgz#f2454cba82da3d8c7375b2a5d9d47f34ed7348ec"
integrity sha512-pHxvUDCkD4oP3AFxYLU7yeE+qDZtcHF20b2K8/HNvyuyu3eWFX4jpHgx6FdvcIcFcAXGs5nk24zBUEO8p+axWg==
dependencies:
"@walletconnect/core" "^1.0.18"
"@walletconnect/iso-crypto" "^1.0.18"
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/core" "^1.1.0"
"@walletconnect/iso-crypto" "^1.1.0"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
"@walletconnect/core@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.0.18.tgz#3632998f8bb8280d64b40506cdbfef51df24d729"
integrity sha512-lpkD8P7l3EDLJswG0L8BrHMck70s+G/KncUnpr0r7eQ4t9Rh+waDBi4g2JBPj9LbRxFZYKiLEcW4r+Oh/85Yhw==
"@walletconnect/core@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-1.1.0.tgz#053f08b0ccfdfb14ccd27b7fd425d9849cedba14"
integrity sha512-Bhe4gnR6Az11u7OAOw0UDZKM6emUjIQtQ2PVdPDWke6ryC0DWMg9vTYbVPf3lDHBv5hy5eAyDst30N5E91SuYw==
dependencies:
"@walletconnect/socket-transport" "^1.0.18"
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/socket-transport" "^1.1.0"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
"@walletconnect/http-connection@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.0.18.tgz#eaad192e8262de2b23c4ac8c092d3816eefc7a83"
integrity sha512-ifGNtNglOEU/EwehEFODUuYSV8yS8IW+uzIDVRQC0gK7FIaaQEVwkwmD0ksN8wrgj4z6/8V1JHi7lct+Eo4S0w==
"@walletconnect/http-connection@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/http-connection/-/http-connection-1.1.0.tgz#c6650c12a07244d30f20647420cdcd8c69c6daca"
integrity sha512-ugxDW/NaSgn7rmdPZhrpJIS79gASLvzBnGHScMs8zpYDHwcFxh2DP3HTspC8o5FyMqjRlEGtNi4zSGKY6EOrkw==
dependencies:
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
xhr2-cookies "1.1.0"
"@walletconnect/iso-crypto@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.0.18.tgz#4aa5f4c9912048e9880fe945ff7ff7520a6ec347"
integrity sha512-ABpN3Hcwv7AT9N55C/whTz/lWX2RnuhQf4timzbgaawqZ0vJlFlYI9fNdag0T54S8NcWvKXTiwDxRJ8hOiR+3A==
"@walletconnect/iso-crypto@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/iso-crypto/-/iso-crypto-1.1.0.tgz#a8235049c1b239adcf9fc6a6c38b7e9ad13004a6"
integrity sha512-ttWLj4rTy2NGQnSAKnAar1LSrsJuCQ2JnQUl8hsgc9oTwXKgnRvtxGy2Kajoih/tNKnK959Ilj4WI2HaSJ9G1g==
dependencies:
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
eccrypto-js "5.2.0"
"@walletconnect/mobile-registry@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.0.18.tgz#6ca311c8a1ad7f803682d3135f61635a8c6f98e1"
integrity sha512-SmBg2t/ucrkXM3624Gn2/8DupsR8984JVscet1xyHTwr78hj69gpJc4yO8+gADpaHKgA2eCQCbKLupqruwqWdA==
"@walletconnect/mobile-registry@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/mobile-registry/-/mobile-registry-1.1.0.tgz#72173a4fcee61f4f8819f6d9fc7cfbf824ed3548"
integrity sha512-OOHQa4NeK2lbfI9WD2d+hTHGwSDzBLoTCeofdLNO2ibaTltQ6S+WNDAVuho6U8CkUTzs5cHPFgLJ6nxYZ8sr/g==
"@walletconnect/qrcode-modal@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.0.18.tgz#4461d31c92ba6b0ad3deb454f91d246c95c7a0c9"
integrity sha512-50XdgUiQPlx95VnBOs8afjLKvvGn4kBT9RrbsDLQ52m/Sn2/yzyoLoEEuk+Wv3t5VkZxTBZ5BeQNpCxTRfYR1Q==
"@walletconnect/qrcode-modal@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/qrcode-modal/-/qrcode-modal-1.1.0.tgz#4cd0c2c2c713be3f49ef00293a1b23a079d4c7b7"
integrity sha512-vYsu1MBE0D+kx1+xdXmaCs7JqhhWPw8orKk9Br64YIPF5pv/48i+Yi/m28/0myJm54YPlVcgzTnuf8PzAH7jgA==
dependencies:
"@walletconnect/mobile-registry" "^1.0.18"
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/mobile-registry" "^1.1.0"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
preact "10.4.1"
qrcode "1.4.4"
"@walletconnect/socket-transport@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.0.18.tgz#49395772b17de9f2ee42312db5cd692b0eabe16b"
integrity sha512-UQclrEM4uExqbF3snAxhZil0XMlxufmlMZUNgfFe+io9K3H/FH7kILIMqow0Y7EhxUL++bVsVGTEjurDz4sYzw==
"@walletconnect/socket-transport@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/socket-transport/-/socket-transport-1.1.0.tgz#d80b5e6b3b904f131961259ca16de816ae2b003b"
integrity sha512-plo5WHjL3RTDENH7MTgs7D/ePGHfSuc/HLzkVGvgZSOtoPlRR916nSZNeL4bStYF1ZRJCrds10x36C0DlZjpQg==
dependencies:
"@walletconnect/types" "^1.0.18"
"@walletconnect/types" "^1.1.0"
ws "7.3.0"
"@walletconnect/types@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.0.18.tgz#7b5b2bffe4451f3128f34d3c31bb99a6fd023152"
integrity sha512-gGu3rAcmdeauLxOZo5X4KYzBhxoxpGCHzd7LEcgcsLIhx/4cUqk3lirElO4WozeUkQyy28yEBTLUA6bASFsFpQ==
"@walletconnect/types@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-1.1.0.tgz#1e4efbf033ad89910cbb86f1f381cd5fe7e764fd"
integrity sha512-cgDEuYHZZTiaXFRwQs3Zhhar+l2T58/YjhWrfZTMKWuc77geIbF7682i9lE9bNEQqQvQ76jjKxJfSLGjCu++sA==
"@walletconnect/utils@^1.0.18":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.0.18.tgz#730a8dbccbce9582b74761cb3faa1cc1cc4328d7"
integrity sha512-isq7brCnZJj82QEd/34TjM4qrZcTe2PjvFuvrkhtS0c3T+Qaq0sZ6HzJA2Mctu0Uv33vqI7VDgsIkuecD0KYWw==
"@walletconnect/utils@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-1.1.0.tgz#7b0bcf5c77e8079ac055013537a9620244db2da9"
integrity sha512-y5v8PCmd/2kASOncYaz5QJiAzwBRT5MK398PmIkImX9tNEeBh00ifeQGZKkCGi6JYXbde0UC5jsGTGkH8hdxeg==
dependencies:
"@walletconnect/types" "^1.0.18"
"@walletconnect/types" "^1.1.0"
detect-browser "5.1.0"
enc-utils "2.1.0"
js-sha3 "0.8.0"
"@walletconnect/web3-provider@^1.0.13":
version "1.0.18"
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.0.18.tgz#4ca86a3841dfdb1854681bd6da7b7466cf03ae20"
integrity sha512-XvbdvMJq8P977uYpCsibt2wpZgQ5qRPBMK22jO0kmUuHdxuctqVQI+zqrnpeFzjQQi5wRvBRb3x15aSFUCo+Lg==
"@walletconnect/web3-provider@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@walletconnect/web3-provider/-/web3-provider-1.1.0.tgz#c8a30c4121d3ade159022b10d3a18ecd804c8993"
integrity sha512-1DaYG+aK2pjCBKXrB0c2JKeFk27ObUsu09LlZN1VvIi1+zvHftaubNsSGViLmrq25w72yPle/SDjhgmxvKVMQQ==
dependencies:
"@walletconnect/client" "^1.0.18"
"@walletconnect/http-connection" "^1.0.18"
"@walletconnect/qrcode-modal" "^1.0.18"
"@walletconnect/types" "^1.0.18"
"@walletconnect/utils" "^1.0.18"
"@walletconnect/client" "^1.1.0"
"@walletconnect/http-connection" "^1.1.0"
"@walletconnect/qrcode-modal" "^1.1.0"
"@walletconnect/types" "^1.1.0"
"@walletconnect/utils" "^1.1.0"
web3-provider-engine "15.0.12"
"@webassemblyjs/ast@1.8.5":
@ -2919,11 +2962,16 @@ acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.1.1, acorn@^7.3.1:
acorn@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd"
integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
acorn@^7.4.0:
version "7.4.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
address@1.1.2, address@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
@ -3419,7 +3467,20 @@ authereum@^0.0.4-beta.157:
web3-provider-engine "15.0.4"
web3-utils "1.2.1"
autoprefixer@9.8.5, autoprefixer@^9.6.1:
autoprefixer@9.8.6:
version "9.8.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f"
integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==
dependencies:
browserslist "^4.12.0"
caniuse-lite "^1.0.30001109"
colorette "^1.2.1"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^7.0.32"
postcss-value-parser "^4.1.0"
autoprefixer@^9.6.1:
version "9.8.5"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.5.tgz#2c225de229ddafe1d1424c02791d0c3e10ccccaa"
integrity sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==
@ -4285,29 +4346,28 @@ bn.js@^5.1.1, bn.js@^5.1.2:
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
bnc-onboard@1.10.3:
version "1.10.3"
resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.10.3.tgz#c05ce2af4d5538f0be51a08eea30e2264f830fd2"
integrity sha512-4zH1CNaiyn6cYkAak4swaVa+1EpFzgJI8ZA8GL1A/SJqyig699h9gq60P+0R8Ga5xo2Pzr/WaVpy4jMUgcXPbQ==
bnc-onboard@1.11.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/bnc-onboard/-/bnc-onboard-1.11.0.tgz#cb3d79b702a15d12114aa649beddb2ec5ea83e70"
integrity sha512-hHB+xb6SULRxQh/Bm5DBEfg/4/QLI/B9q/h3AyMf+21FMmJ66DUODDsoIwbiq1fh3IrwHpoSmNLdb2nTeN0Wog==
dependencies:
"@ledgerhq/hw-app-eth" "^5.19.0"
"@ledgerhq/hw-transport-u2f" "^5.19.0"
"@portis/web3" "^2.0.0-beta.55"
"@toruslabs/torus-embed" "^1.3.0"
"@unilogin/provider" "^0.5.21"
"@walletconnect/web3-provider" "^1.0.13"
"@ledgerhq/hw-app-eth" "^5.21.0"
"@ledgerhq/hw-transport-u2f" "^5.21.0"
"@portis/web3" "^2.0.0-beta.57"
"@toruslabs/torus-embed" "^1.8.2"
"@unilogin/provider" "^0.6.1"
"@walletconnect/web3-provider" "^1.1.0"
authereum "^0.0.4-beta.157"
bignumber.js "^9.0.0"
bnc-sdk "^2.1.4"
bowser "^2.5.2"
bowser "^2.10.0"
ethereumjs-tx "^2.1.2"
ethereumjs-util "^6.2.0"
ethereumjs-wallet "^0.6.3"
fortmatic "^0.8.2"
hdkey "^1.1.1"
regenerator-runtime "^0.13.3"
ethereumjs-util "^7.0.3"
fortmatic "^2.2.1"
hdkey "^2.0.1"
regenerator-runtime "^0.13.7"
squarelink "^1.1.4"
trezor-connect "^8.1.2"
trezor-connect "^8.1.9"
walletlink "^2.0.2"
web3-provider-engine "^15.0.4"
@ -4357,7 +4417,7 @@ boolean@^3.0.0, boolean@^3.0.1:
resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f"
integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==
bowser@^2.5.2:
bowser@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.10.0.tgz#be3736f161c4bb8b10958027ab99465d2a811198"
integrity sha512-OCsqTQboTEWWsUjcp5jLSw2ZHsBiv2C105iFs61bOT0Hnwi9p7/uuXdd7mu8RYcarREfdjNN+8LitmEHATsLYg==
@ -4837,6 +4897,11 @@ caniuse-lite@^1.0.30001097:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001104.tgz#4e3d5b3b1dd3c3529f10cb7f519c62ba3e579f5d"
integrity sha512-pkpCg7dmI/a7WcqM2yfdOiT4Xx5tzyoHAXWsX5/HxZ3TemwDZs0QXdqbE0UPLPVy/7BeK7693YfzfRYfu1YVpg==
caniuse-lite@^1.0.30001109:
version "1.0.30001111"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001111.tgz#dd0ce822c70eb6c7c068e4a55c22e19ec1501298"
integrity sha512-xnDje2wchd/8mlJu8sXvWxOGvMgv+uT3iZ3bkIAynKOzToCssWCmkz/ZIkQBs/2pUB4uwnJKVORWQ31UkbVjOg==
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@ -5190,7 +5255,7 @@ color@^3.0.0:
color-convert "^1.9.1"
color-string "^1.5.2"
colorette@^1.2.0:
colorette@^1.2.0, colorette@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
@ -5887,6 +5952,11 @@ csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5"
integrity sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw==
csstype@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.2.tgz#ee5ff8f208c8cd613b389f7b222c9801ca62b3f7"
integrity sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw==
currency-flags@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/currency-flags/-/currency-flags-2.1.2.tgz#483bbc69fcc7f0de00ec3a781047767311feba9d"
@ -7529,7 +7599,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum
rlp "^2.0.0"
safe-buffer "^5.1.1"
ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0:
ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0:
version "6.2.1"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69"
integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==
@ -7542,6 +7612,18 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0:
ethjs-util "0.1.6"
rlp "^2.2.3"
ethereumjs-util@^7.0.3:
version "7.0.4"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.4.tgz#f4b2022a91416bf421b35b0d5b81c21e8abd8b7f"
integrity sha512-isldtbCn9fdnhBPxedMNbFkNWVZ8ZdQvKRDSrdflame/AycAPKMer+vEpndpBxYIB3qxN6bd3Gh1YCQW9LDkCQ==
dependencies:
"@types/bn.js" "^4.11.3"
bn.js "^5.1.2"
create-hash "^1.1.2"
ethereum-cryptography "^0.1.3"
ethjs-util "0.1.6"
rlp "^2.2.4"
ethereumjs-vm@2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.2.2.tgz#786317d2c63e547d936c1a468607510e70b4c262"
@ -7652,7 +7734,7 @@ eventemitter3@4.0.4, eventemitter3@^4.0.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
events@^3.0.0, events@^3.1.0:
events@^3.0.0, events@^3.1.0, events@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
@ -8214,12 +8296,10 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
fortmatic@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/fortmatic/-/fortmatic-0.8.2.tgz#a93fc97d1a1808faf82210d6554e1ebdcb6c5379"
integrity sha512-eIuoTpDzK0CN92yOQyEbKoFuaBgxqXjmNMmUbvTphirKPkufSyYkqgHHuAJzgFe3HC5JFuWb/IlrMvqWoe/gKQ==
dependencies:
"@babel/runtime" "7.3.4"
fortmatic@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/fortmatic/-/fortmatic-2.2.1.tgz#91ce9159c1fe539bd87e483125fca5c27a410a86"
integrity sha512-PEfPoErJSErU2A8iYD2Mab2c8eJK5dCdCr1jR/8yc49aEAlyQ4UXnZXyeO6MU5zBGkDAZmg9brnRSPzc+8MKPQ==
forwarded@~0.1.2:
version "0.1.2"
@ -8797,14 +8877,14 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
hdkey@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.2.tgz#c60f9cf6f90fbf24a8a52ea06893f36a0108cd3e"
integrity sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ==
hdkey@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-2.0.1.tgz#0a211d0c510bfc44fa3ec9d44b13b634641cad74"
integrity sha512-c+tl9PHG9/XkGgG0tD7CJpRVaE0jfZizDNmnErUAKQ4EjQSOcOUcV3EN9ZEZS8pZ4usaeiiK0H7stzuzna8feA==
dependencies:
bs58check "^2.1.2"
safe-buffer "^5.1.1"
secp256k1 "^3.0.1"
secp256k1 "^4.0.0"
he@1.2.0, he@^1.2.0:
version "1.2.0"
@ -14481,16 +14561,16 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-runtime@^0.12.0:
version "0.12.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4:
version "0.13.6"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.6.tgz#d236043c46ffab2968c1ef651803d8acdea8ed65"
integrity sha512-GmwlGiazQEbOwQWDdbbaP10i15pGtScYWLbMZuu+RKRz0cZ+g8IUONazBnaZqe7j1670IV1HgE4/8iy7CQPf4Q==
regenerator-runtime@^0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
regenerator-transform@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
@ -14846,7 +14926,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.6:
rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4, rlp@^2.2.6:
version "2.2.6"
resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c"
integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==
@ -15070,7 +15150,7 @@ secp256k1@3.8.0, secp256k1@^3.0.1, secp256k1@^3.7.1, secp256k1@^3.8.0:
nan "^2.14.0"
safe-buffer "^5.1.2"
secp256k1@^4.0.1:
secp256k1@^4.0.0, secp256k1@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
@ -16505,14 +16585,14 @@ tree-kill@^1.2.2:
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
trezor-connect@^8.1.2:
version "8.1.8"
resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.1.8.tgz#db46f2637047fa45fef3f5a7c6f16a792cc2067a"
integrity sha512-ZTgKmSd5scbUAdHwz6DLwILVoNRe//6fQcuaVDL0tbWHvB5MNajGlLDzPG/TM7y156mzXmXF2Y4LJQqLDQhaIw==
trezor-connect@^8.1.9:
version "8.1.10"
resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.1.10.tgz#1f80525c91684e7dc062f2e5eb6d93502e61172b"
integrity sha512-q1Hscxjyr1PtZj02yRu9rKps9VrSZ4koXgE8DM1QES2Sc7buhNqHwvRZQLQopUDXSoZh2vgObQNBrJsNHbWBpg==
dependencies:
"@babel/runtime" "^7.10.2"
events "^3.1.0"
whatwg-fetch "^3.0.0"
"@babel/runtime" "^7.11.0"
events "^3.2.0"
whatwg-fetch "^3.3.1"
trim-newlines@^1.0.0:
version "1.0.0"
@ -18014,6 +18094,7 @@ websocket@^1.0.31:
dependencies:
debug "^2.2.0"
es5-ext "^0.10.50"
gulp "^4.0.2"
nan "^2.14.0"
typedarray-to-buffer "^3.1.5"
yaeti "^0.0.6"
@ -18035,6 +18116,11 @@ whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.2.0.tgz#8e134f701f0a4ab5fda82626f113e2b647fd16dc"
integrity sha512-SdGPoQMMnzVYThUbSrEvqTlkvC1Ux27NehaJ/GUHBfNrh5Mjg+1/uRyFMwVnxO2MrikMWvWAqUGgQOfVU4hT7w==
whatwg-fetch@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.3.1.tgz#6c1acf37dec176b0fd6bc9a74b616bec2f612935"
integrity sha512-faXTmGDcLuEPBpJwb5LQfyxvubKiE+RlbmmweFGKjvIPFj4uHTTfdtTIkdTRhC6OSH9S9eyYbx8kZ0UEaQqYTA==
whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"