diff --git a/apps/cowswap-frontend/src/common/containers/TradeApprove/TradeApproveButton.tsx b/apps/cowswap-frontend/src/common/containers/TradeApprove/TradeApproveButton.tsx index a896666091..9346f099fd 100644 --- a/apps/cowswap-frontend/src/common/containers/TradeApprove/TradeApproveButton.tsx +++ b/apps/cowswap-frontend/src/common/containers/TradeApprove/TradeApproveButton.tsx @@ -1,10 +1,12 @@ -import React, { useCallback } from 'react' +import React, { useCallback, useState } from 'react' import { Currency, CurrencyAmount } from '@uniswap/sdk-core' import { useShouldZeroApprove } from 'common/hooks/useShouldZeroApprove' import { useZeroApprove } from 'common/hooks/useZeroApprove' import { ApproveButton } from 'common/pure/ApproveButton' +import { CowModal } from 'common/pure/Modal' +import { TransactionErrorContent } from 'common/pure/TransactionErrorContent' import { useTradeApproveCallback } from './useTradeApproveCallback' import { useTradeApproveState } from './useTradeApproveState' @@ -24,16 +26,26 @@ export function TradeApproveButton(props: TradeApproveButtonProps) { const tradeApproveCallback = useTradeApproveCallback(amountToApprove) const shouldZeroApprove = useShouldZeroApprove(amountToApprove) const zeroApprove = useZeroApprove(amountToApprove.currency) + const [error, setError] = useState(null) + const onDismissError = () => setError(null) const handleApprove = useCallback(async () => { - if (shouldZeroApprove) { - await zeroApprove() + try { + if (shouldZeroApprove) { + await zeroApprove() + } + await tradeApproveCallback() + } catch (error) { + setError(typeof error === 'string' ? error : error.message || error.toString()) } - await tradeApproveCallback() - }, [tradeApproveCallback, zeroApprove, shouldZeroApprove]) + }, [tradeApproveCallback, zeroApprove, shouldZeroApprove, setError]) return ( <> + + {error && } + + {children} diff --git a/apps/cowswap-frontend/src/legacy/components/TransactionConfirmationModal/LegacyConfirmationPendingContent.tsx b/apps/cowswap-frontend/src/legacy/components/TransactionConfirmationModal/LegacyConfirmationPendingContent.tsx index da53678344..b85cbee668 100644 --- a/apps/cowswap-frontend/src/legacy/components/TransactionConfirmationModal/LegacyConfirmationPendingContent.tsx +++ b/apps/cowswap-frontend/src/legacy/components/TransactionConfirmationModal/LegacyConfirmationPendingContent.tsx @@ -17,7 +17,7 @@ import { getStatusIcon } from 'modules/account/containers/AccountDetails' import { useGnosisSafeInfo, useWalletDetails, useWalletInfo } from 'modules/wallet' import { getIsMetaMask } from 'modules/wallet/api/utils/connection' import { getWeb3ReactConnection } from 'modules/wallet/web3-react/connection' -import { walletConnectConnection } from 'modules/wallet/web3-react/connection/walletConnect' +import { injectedConnection } from 'modules/wallet/web3-react/connection/injected' import { ApproveComparison, @@ -144,7 +144,7 @@ export function LegacyConfirmationPendingContent({ operationType === ConfirmOperationType.APPROVE_TOKEN && isMetaMask && isNotMobile && - connectionType !== walletConnectConnection + connectionType === injectedConnection return ( diff --git a/apps/cowswap-frontend/src/legacy/state/gas/hooks.ts b/apps/cowswap-frontend/src/legacy/state/gas/hooks.ts index 03f26ce3ff..753bedece7 100644 --- a/apps/cowswap-frontend/src/legacy/state/gas/hooks.ts +++ b/apps/cowswap-frontend/src/legacy/state/gas/hooks.ts @@ -1,3 +1,4 @@ +import { useSetAtom } from 'jotai' import { useCallback } from 'react' import { SupportedChainId as ChainId } from '@cowprotocol/cow-sdk' @@ -7,6 +8,8 @@ import { useSelector, useDispatch } from 'react-redux' import { AppDispatch } from 'legacy/state' import { AppState } from 'legacy/state' +import { gasPriceAtom } from 'modules/gasPirce' + import { updateGasPrices, UpdateGasPrices } from './actions' import { GasState } from './reducer' @@ -18,5 +21,13 @@ export function useGasPrices(chainId?: ChainId) { export function useUpdateGasPrices() { const dispatch = useDispatch() - return useCallback((gasParams: UpdateGasPrices) => dispatch(updateGasPrices(gasParams)), [dispatch]) + const setGasPrice = useSetAtom(gasPriceAtom) + + return useCallback( + (gasParams: UpdateGasPrices) => { + dispatch(updateGasPrices(gasParams)) + setGasPrice(gasParams) + }, + [dispatch, setGasPrice] + ) } diff --git a/apps/cowswap-frontend/src/modules/account/containers/AccountDetails/index.tsx b/apps/cowswap-frontend/src/modules/account/containers/AccountDetails/index.tsx index 0b7fe48ba6..c250531586 100644 --- a/apps/cowswap-frontend/src/modules/account/containers/AccountDetails/index.tsx +++ b/apps/cowswap-frontend/src/modules/account/containers/AccountDetails/index.tsx @@ -1,4 +1,4 @@ -import { Fragment } from 'react' +import { Fragment, useMemo } from 'react' import { SupportedChainId as ChainId } from '@cowprotocol/cow-sdk' import { useWeb3React } from '@web3-react/core' @@ -20,29 +20,19 @@ import { isMobile } from 'legacy/utils/userAgent' import Activity from 'modules/account/containers/Transaction' import { ConnectionType, useDisconnectWallet, useWalletInfo, WalletDetails } from 'modules/wallet' +import { HwAccountIndexSelector } from 'modules/wallet' import CoinbaseWalletIcon from 'modules/wallet/api/assets/coinbase.svg' import FortmaticIcon from 'modules/wallet/api/assets/formatic.png' import KeystoneImage from 'modules/wallet/api/assets/keystone.svg' import LedgerIcon from 'modules/wallet/api/assets/ledger.svg' import TallyIcon from 'modules/wallet/api/assets/tally.svg' +import TrezorIcon from 'modules/wallet/api/assets/trezor.svg' import TrustIcon from 'modules/wallet/api/assets/trust.svg' import WalletConnectIcon from 'modules/wallet/api/assets/walletConnectIcon.svg' import { Identicon } from 'modules/wallet/api/container/Identicon' import { useWalletDetails } from 'modules/wallet/api/hooks' -import { - getConnectionName, - getIsCoinbaseWallet, - getIsMetaMask, - getIsTrustWallet, -} from 'modules/wallet/api/utils/connection' -import { getWeb3ReactConnection } from 'modules/wallet/web3-react/connection' -import { coinbaseWalletConnection } from 'modules/wallet/web3-react/connection/coinbase' -import { fortmaticConnection } from 'modules/wallet/web3-react/connection/formatic' -import { injectedConnection } from 'modules/wallet/web3-react/connection/injected' -import { keystoneConnection } from 'modules/wallet/web3-react/connection/keystone' -import { ledgerConnection } from 'modules/wallet/web3-react/connection/ledger' -import { tallyWalletConnection } from 'modules/wallet/web3-react/connection/tally' -import { trustWalletConnection } from 'modules/wallet/web3-react/connection/trust' +import { getConnectionName, getIsCoinbaseWallet, getIsMetaMask } from 'modules/wallet/api/utils/connection' +import { getIsHardWareWallet, getWeb3ReactConnection } from 'modules/wallet/web3-react/connection' import { walletConnectConnection } from 'modules/wallet/web3-react/connection/walletConnect' import { walletConnectConnectionV2 } from 'modules/wallet/web3-react/connection/walletConnectV2' @@ -91,11 +81,28 @@ export function renderActivities(activities: ActivityDescriptors[]) { ) } -export function getStatusIcon(connector?: Connector | ConnectionType, walletDetails?: WalletDetails, size?: number) { - if (!connector) { - return null - } +const IDENTICON_KEY = 'Identicon' + +const walletIcons: Record = { + [ConnectionType.INJECTED]: IDENTICON_KEY, + [ConnectionType.INJECTED_WIDGET]: IDENTICON_KEY, + [ConnectionType.GNOSIS_SAFE]: IDENTICON_KEY, + [ConnectionType.NETWORK]: IDENTICON_KEY, + [ConnectionType.ZENGO]: IDENTICON_KEY, + [ConnectionType.AMBIRE]: IDENTICON_KEY, + [ConnectionType.ALPHA]: IDENTICON_KEY, + [ConnectionType.COINBASE_WALLET]: CoinbaseWalletIcon, + [ConnectionType.FORTMATIC]: FortmaticIcon, + [ConnectionType.TRUST]: TrustIcon, + [ConnectionType.TALLY]: TallyIcon, + [ConnectionType.LEDGER]: LedgerIcon, + [ConnectionType.TREZOR]: TrezorIcon, + [ConnectionType.KEYSTONE]: KeystoneImage, + [ConnectionType.WALLET_CONNECT]: WalletConnectIcon, + [ConnectionType.WALLET_CONNECT_V2]: WalletConnectIcon, +} +export function getStatusIcon(connector: Connector, walletDetails?: WalletDetails, size?: number) { const connectionType = getWeb3ReactConnection(connector) if (walletDetails && !walletDetails.isSupportedWallet) { @@ -108,64 +115,26 @@ export function getStatusIcon(connector?: Connector | ConnectionType, walletDeta ) /* eslint-enable jsx-a11y/accessible-emoji */ - } else if (walletDetails?.icon) { + } + if (walletDetails?.icon) { return ( {`${walletDetails?.walletName ) - } else if (connectionType === injectedConnection) { + } + + const icon = walletIcons[connectionType.type] + + if (icon === IDENTICON_KEY) { return - } else if (connectionType === coinbaseWalletConnection) { - return ( - - {'Coinbase - - ) - } else if (connectionType === fortmaticConnection) { - return ( - - {'Fortmatic - - ) - } else if (connectionType === tallyWalletConnection) { - return ( - - {'Tally - - ) - } else if (connectionType === trustWalletConnection || getIsTrustWallet(null, walletDetails?.walletName)) { - return ( - - {'Trust - - ) - } else if (connectionType === tallyWalletConnection) { - return ( - - {'tally - - ) - } else if (connectionType === ledgerConnection) { - return ( - - {'Ledger - - ) - } else if (connectionType === keystoneConnection) { - return ( - - {'Keystone - - ) - } else if (connectionType === walletConnectConnection) { - return ( - - {'Wallet - - ) } - return null + + return ( + + {`${connectionType.type} + + ) } export interface AccountDetailsProps { @@ -201,12 +170,13 @@ export function AccountDetails({ const isCoinbaseWallet = getIsCoinbaseWallet() const isInjectedMobileBrowser = (isMetaMask || isCoinbaseWallet) && isMobile + const connectionType = useMemo(() => getWeb3ReactConnection(connector), [connector]) + function formatConnectorName() { const name = walletDetails?.walletName || getConnectionName(connection.type, getIsMetaMask()) // In case the wallet is connected via WalletConnect and has wallet name set, add the suffix to be clear // This to avoid confusion for instance when using Metamask mobile // When name is not set, it defaults to WalletConnect already - const connectionType = getWeb3ReactConnection(connector) const isWalletConnect = connectionType === walletConnectConnection || connectionType === walletConnectConnectionV2 const walletConnectSuffix = isWalletConnect && walletDetails?.walletName ? ' (via WalletConnect)' : '' @@ -225,6 +195,8 @@ export function AccountDetails({ const networkLabel = NETWORK_LABELS[chainId] + const isHardWareWallet = getIsHardWareWallet(connectionType.type) + return ( @@ -240,6 +212,8 @@ export function AccountDetails({ )} + {isHardWareWallet && } + {' '} {networkLabel && !isChainIdUnsupported && ( diff --git a/apps/cowswap-frontend/src/modules/application/containers/App/Updaters.tsx b/apps/cowswap-frontend/src/modules/application/containers/App/Updaters.tsx index d2a1a29ab2..73f794ddbd 100644 --- a/apps/cowswap-frontend/src/modules/application/containers/App/Updaters.tsx +++ b/apps/cowswap-frontend/src/modules/application/containers/App/Updaters.tsx @@ -20,7 +20,7 @@ import { UploadToIpfsUpdater } from 'modules/appData/updater/UploadToIpfsUpdater import { InjectedWidgetUpdater } from 'modules/injectedWidget' import { EthFlowDeadlineUpdater, EthFlowSlippageUpdater } from 'modules/swap/state/EthFlow/updaters' import { TokensListUpdater } from 'modules/tokensList/updaters/TokensListUpdater' -import { WalletUpdater } from 'modules/wallet' +import { WalletUpdater, HwAccountIndexUpdater } from 'modules/wallet' import { TotalSurplusUpdater } from 'common/state/totalSurplusState' import { ThemeFromUrlUpdater } from 'common/updaters/ThemeFromUrlUpdater' @@ -30,6 +30,7 @@ export function Updaters() { return ( <> + diff --git a/apps/cowswap-frontend/src/modules/gasPirce/index.ts b/apps/cowswap-frontend/src/modules/gasPirce/index.ts new file mode 100644 index 0000000000..d155ada24e --- /dev/null +++ b/apps/cowswap-frontend/src/modules/gasPirce/index.ts @@ -0,0 +1 @@ +export * from './state/gasPriceAtom' diff --git a/apps/cowswap-frontend/src/modules/gasPirce/state/gasPriceAtom.ts b/apps/cowswap-frontend/src/modules/gasPirce/state/gasPriceAtom.ts new file mode 100644 index 0000000000..afa3e2144f --- /dev/null +++ b/apps/cowswap-frontend/src/modules/gasPirce/state/gasPriceAtom.ts @@ -0,0 +1,10 @@ +import { atom } from 'jotai' + +interface GasPriceState { + lastUpdate: string + average: string | null + fast: string | null + slow: string | null +} + +export const gasPriceAtom = atom(null) diff --git a/apps/cowswap-frontend/src/modules/tokens/hooks/useCurrencyBalance.ts b/apps/cowswap-frontend/src/modules/tokens/hooks/useCurrencyBalance.ts index 14e6febb2d..dfc031323e 100644 --- a/apps/cowswap-frontend/src/modules/tokens/hooks/useCurrencyBalance.ts +++ b/apps/cowswap-frontend/src/modules/tokens/hooks/useCurrencyBalance.ts @@ -20,7 +20,10 @@ import { useSingleContractMultipleData } from 'lib/hooks/multicall' /** * Returns a map of the given addresses to their eventually consistent ETH balances. */ -export function useNativeCurrencyBalances(uncheckedAddresses?: (string | undefined)[]): { +export function useNativeCurrencyBalances( + uncheckedAddresses?: (string | undefined)[], + lowerCaseAddress = false +): { [address: string]: CurrencyAmount | undefined } { const { chainId } = useWalletInfo() @@ -45,10 +48,13 @@ export function useNativeCurrencyBalances(uncheckedAddresses?: (string | undefin validAddressInputs.reduce<{ [address: string]: CurrencyAmount }>((memo, [address], i) => { const value = results?.[i]?.result?.[0] if (value && chainId) - memo[address] = CurrencyAmount.fromRawAmount(nativeOnChain(chainId), JSBI.BigInt(value.toString())) + memo[lowerCaseAddress ? address.toLowerCase() : address] = CurrencyAmount.fromRawAmount( + nativeOnChain(chainId), + JSBI.BigInt(value.toString()) + ) return memo }, {}), - [validAddressInputs, chainId, results] + [validAddressInputs, chainId, results, lowerCaseAddress] ) } diff --git a/apps/cowswap-frontend/src/modules/wallet/api/assets/trezor.svg b/apps/cowswap-frontend/src/modules/wallet/api/assets/trezor.svg new file mode 100644 index 0000000000..c8a746a76c --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/assets/trezor.svg @@ -0,0 +1,11 @@ + + + Layer 1 + + + + + + + + diff --git a/apps/cowswap-frontend/src/modules/wallet/api/container/HwAccountIndexSelector/index.tsx b/apps/cowswap-frontend/src/modules/wallet/api/container/HwAccountIndexSelector/index.tsx new file mode 100644 index 0000000000..f40a564da3 --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/container/HwAccountIndexSelector/index.tsx @@ -0,0 +1,43 @@ +import { useAtom } from 'jotai' +import { useMemo } from 'react' + +import { useWeb3React } from '@web3-react/core' + +import { useNativeCurrencyBalances } from 'modules/tokens/hooks/useCurrencyBalance' + +import { getWeb3ReactConnection, HardWareWallet } from '../../../web3-react/connection' +import { trezorConnection } from '../../../web3-react/connection/trezor' +import { AccountIndexSelect } from '../../pure/AccountIndexSelect' +import { hwAccountIndexAtom } from '../../state' +import { ConnectionType } from '../../types' + +const accountsLoaders: Record string[] | null> = { + [ConnectionType.TREZOR]: () => trezorConnection.connector.getAccounts(), +} + +// TODO: add styles +export function HwAccountIndexSelector() { + const [hwAccountIndex, setHwAccountIndex] = useAtom(hwAccountIndexAtom) + const { connector } = useWeb3React() + + const accountsList = useMemo(() => { + const loader = accountsLoaders[getWeb3ReactConnection(connector).type as HardWareWallet] + + if (!loader) return null + + return loader() + }, [connector]) + + const balances = useNativeCurrencyBalances(accountsList || undefined, true) + + if (!accountsList) return null + + return ( + + ) +} diff --git a/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.cosmos.tsx b/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.cosmos.tsx new file mode 100644 index 0000000000..69a515c0ef --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.cosmos.tsx @@ -0,0 +1,32 @@ +import { CurrencyAmount } from '@uniswap/sdk-core' + +import { WETH_GOERLI } from 'legacy/utils/goerli/constants' + +import { AccountIndexSelect } from './index' + +const accountsList = [ + '0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5', + '0x4675c7e5baafbffbca748158becba61ef3b0a263', + '0x8e501693b6197d85fd26b93bbf5c0911f79f0979', + '0xefcce23bfbef24cc4fb2dcb2bbc4f6f83c6bda98', +] + +const balances = { + '0x95222290dd7278aa3ddd389cc1e1d165cc4bafe5': CurrencyAmount.fromRawAmount(WETH_GOERLI, 10_000_000), + '0x4675c7e5baafbffbca748158becba61ef3b0a263': CurrencyAmount.fromRawAmount(WETH_GOERLI, 20_000_000), + '0x8e501693b6197d85fd26b93bbf5c0911f79f0979': CurrencyAmount.fromRawAmount(WETH_GOERLI, 30_000_000), + '0xefcce23bfbef24cc4fb2dcb2bbc4f6f83c6bda98': CurrencyAmount.fromRawAmount(WETH_GOERLI, 40_000_000), +} + +const Fixtures = { + default: ( + console.log('onAccountIndexChange', index)} + /> + ), +} + +export default Fixtures diff --git a/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.tsx b/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.tsx new file mode 100644 index 0000000000..390ec198af --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/pure/AccountIndexSelect/index.tsx @@ -0,0 +1,50 @@ +import { ChangeEvent, useCallback } from 'react' + +import { Currency, CurrencyAmount } from '@uniswap/sdk-core' + +import styled from 'styled-components/macro' + +import { TokenAmount } from 'common/pure/TokenAmount' + +const Wrapper = styled.form` + font-size: 14px; + margin: 10px 0; +` + +export interface AccountIndexSelectProps { + accountsList: string[] + currentIndex: number + balances: { [account: string]: CurrencyAmount | undefined } + onAccountIndexChange(index: number): void +} + +export function AccountIndexSelect(props: AccountIndexSelectProps) { + const { currentIndex, accountsList, balances, onAccountIndexChange } = props + + const onAccountIndexChangeCallback = useCallback( + (event: ChangeEvent) => { + event.preventDefault() + const index = +(event.target.value || 0) + onAccountIndexChange(index) + }, + [onAccountIndexChange] + ) + + return ( + +

Hardware account index:

+ +
+ ) +} diff --git a/apps/cowswap-frontend/src/modules/wallet/api/pure/PendingView/index.tsx b/apps/cowswap-frontend/src/modules/wallet/api/pure/PendingView/index.tsx index 8e07e6b720..17bd20276a 100644 --- a/apps/cowswap-frontend/src/modules/wallet/api/pure/PendingView/index.tsx +++ b/apps/cowswap-frontend/src/modules/wallet/api/pure/PendingView/index.tsx @@ -1,4 +1,5 @@ import { Trans } from '@lingui/macro' +import { transparentize } from 'polished' import styled from 'styled-components/macro' import { ButtonEmpty, ButtonPrimary } from 'legacy/components/Button' @@ -45,12 +46,21 @@ const LoadingWrapper = styled.div` justify-content: center; ` +const WalletError = styled.div` + width: 100%; + padding: 1rem; + text-align: center; + border-radius: 12px; + background: ${({ theme }) => transparentize(0.7, theme.disabled)}; + margin: -15px 0 20px 0; +` + export function PendingView({ - error = false, + error, tryConnection, openOptions, }: { - error?: boolean + error: string | undefined tryConnection: () => void openOptions: () => void }) { @@ -68,6 +78,9 @@ export function PendingView({ The connection attempt failed. Please click try again and follow the steps to connect in your wallet. + + {error} + Try Again diff --git a/apps/cowswap-frontend/src/modules/wallet/api/pure/WalletModal/index.tsx b/apps/cowswap-frontend/src/modules/wallet/api/pure/WalletModal/index.tsx index dc1cb9abac..15df6fd701 100644 --- a/apps/cowswap-frontend/src/modules/wallet/api/pure/WalletModal/index.tsx +++ b/apps/cowswap-frontend/src/modules/wallet/api/pure/WalletModal/index.tsx @@ -66,7 +66,7 @@ export function WalletModal(props: WalletModalProps) { {isPending && pendingConnector && ( - + )} {!isPending && ( diff --git a/apps/cowswap-frontend/src/modules/wallet/api/state.ts b/apps/cowswap-frontend/src/modules/wallet/api/state.ts index 338fda41b9..3246caa096 100644 --- a/apps/cowswap-frontend/src/modules/wallet/api/state.ts +++ b/apps/cowswap-frontend/src/modules/wallet/api/state.ts @@ -1,4 +1,5 @@ import { atom } from 'jotai' +import { atomWithStorage } from 'jotai/utils' import { shortenAddress } from 'legacy/utils' @@ -30,3 +31,5 @@ export const walletDisplayedAddress = atom((get) => { return ensName || (account ? shortenAddress(account) : '') }) + +export const hwAccountIndexAtom = atomWithStorage('hw-account-index:v1', 0) diff --git a/apps/cowswap-frontend/src/modules/wallet/api/types.ts b/apps/cowswap-frontend/src/modules/wallet/api/types.ts index 1321850bdb..c0e936ce63 100644 --- a/apps/cowswap-frontend/src/modules/wallet/api/types.ts +++ b/apps/cowswap-frontend/src/modules/wallet/api/types.ts @@ -17,6 +17,7 @@ export enum ConnectionType { TRUST = 'TRUST', LEDGER = 'LEDGER', KEYSTONE = 'KEYSTONE', + TREZOR = 'TREZOR', } export const BACKFILLABLE_WALLETS = [ConnectionType.INJECTED, ConnectionType.WALLET_CONNECT] diff --git a/apps/cowswap-frontend/src/modules/wallet/api/updaters/HwAccountIndexUpdater.tsx b/apps/cowswap-frontend/src/modules/wallet/api/updaters/HwAccountIndexUpdater.tsx new file mode 100644 index 0000000000..3430a75b4e --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/updaters/HwAccountIndexUpdater.tsx @@ -0,0 +1,52 @@ +import { useAtom } from 'jotai' +import { useEffect, useMemo, useRef } from 'react' + +import { useWeb3React } from '@web3-react/core' + +import { useAppSelector } from 'legacy/state/hooks' + +import { getIsHardWareWallet, getWeb3ReactConnection } from '../../web3-react/connection' +import { useWalletInfo } from '../hooks' +import { hwAccountIndexAtom } from '../state' + +const indexChanged = true + +export function HwAccountIndexUpdater() { + const [hwAccountIndex, setHwAccountIndex] = useAtom(hwAccountIndexAtom) + const { chainId } = useWalletInfo() + const { connector, isActive } = useWeb3React() + const connectorRef = useRef(connector) + const selectedWallet = useAppSelector((state) => state.user.selectedWallet) + + connectorRef.current = connector + + const connectionType = useMemo(() => { + const connection = getWeb3ReactConnection(connector) + + return connection.type + }, [connector]) + + /** + * Reactivate connector each time when account index is changed from HwAccountIndexSelector + * A hardware wallet connector should take into account the second parameter (indexChanged = true) for activate() method + */ + useEffect(() => { + if (!isActive) return + + const isHardWare = getIsHardWareWallet(connectionType) + + if (!isHardWare) return + + console.debug('[Hardware wallet] account index changed', hwAccountIndex) + connectorRef.current?.activate(chainId, indexChanged) + }, [isActive, hwAccountIndex, connectionType, chainId]) + + useEffect(() => { + if (selectedWallet) return + + console.debug('[Hardware wallet] reset account index to 0') + setHwAccountIndex(0) + }, [setHwAccountIndex, selectedWallet]) + + return null +} diff --git a/apps/cowswap-frontend/src/modules/wallet/api/utils/connection.ts b/apps/cowswap-frontend/src/modules/wallet/api/utils/connection.ts index df3c9f5611..b8a3d1c241 100644 --- a/apps/cowswap-frontend/src/modules/wallet/api/utils/connection.ts +++ b/apps/cowswap-frontend/src/modules/wallet/api/utils/connection.ts @@ -1,38 +1,28 @@ import { ConnectionType } from '../types' -export function getConnectionName(connectionType: ConnectionType, isMetaMask?: boolean) { - switch (connectionType) { - case ConnectionType.INJECTED: - return isMetaMask ? 'MetaMask' : 'Injected' - case ConnectionType.COINBASE_WALLET: - return 'Coinbase Wallet' - case ConnectionType.WALLET_CONNECT: - return 'WalletConnect' - case ConnectionType.WALLET_CONNECT_V2: - return 'WalletConnect v2' - case ConnectionType.FORTMATIC: - return 'Fortmatic' - case ConnectionType.NETWORK: - return 'Network' - case ConnectionType.GNOSIS_SAFE: - return 'Safe' - case ConnectionType.ZENGO: - return 'Zengo' - case ConnectionType.AMBIRE: - return 'Ambire' - case ConnectionType.ALPHA: - return 'Alpha' - case ConnectionType.TALLY: - return 'Tally' - case ConnectionType.TRUST: - return 'Trust' - case ConnectionType.LEDGER: - return 'Ledger' - case ConnectionType.KEYSTONE: - return 'Keystone' - case ConnectionType.INJECTED_WIDGET: - return 'CowSwap widget' - } +const connectionTypeToName: Record = { + [ConnectionType.INJECTED]: 'injected', + [ConnectionType.INJECTED_WIDGET]: 'CowSwap widget', + [ConnectionType.COINBASE_WALLET]: 'Coinbase Wallet', + [ConnectionType.WALLET_CONNECT]: 'WalletConnect', + [ConnectionType.WALLET_CONNECT_V2]: 'WalletConnect v2', + [ConnectionType.FORTMATIC]: 'Fortmatic', + [ConnectionType.NETWORK]: 'Network', + [ConnectionType.GNOSIS_SAFE]: 'Safe', + [ConnectionType.ZENGO]: 'Zengo', + [ConnectionType.AMBIRE]: 'Ambire', + [ConnectionType.ALPHA]: 'Alpha', + [ConnectionType.TALLY]: 'Tally', + [ConnectionType.TRUST]: 'Trust', + [ConnectionType.LEDGER]: 'Ledger', + [ConnectionType.KEYSTONE]: 'Keystone', + [ConnectionType.TREZOR]: 'Trezor', +} + +export function getConnectionName(connectionType: ConnectionType, isMetaMask?: boolean): string { + if (connectionType === ConnectionType.INJECTED && isMetaMask) return 'MetaMask' + + return connectionTypeToName[connectionType] } export function getIsInjected(): boolean { diff --git a/apps/cowswap-frontend/src/modules/wallet/api/utils/getHwAccount.ts b/apps/cowswap-frontend/src/modules/wallet/api/utils/getHwAccount.ts new file mode 100644 index 0000000000..9c61de9b53 --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/api/utils/getHwAccount.ts @@ -0,0 +1,12 @@ +import { jotaiStore } from 'jotaiStore' + +import { hwAccountIndexAtom } from '../state' + +export const TREZOR_DERIVATION_PATH = `m/44'/60'/0'/0` + +export function getHwAccount(): { index: number; path: string } { + const index = jotaiStore.get(hwAccountIndexAtom) + const path = `${TREZOR_DERIVATION_PATH}/${index}` + + return { index, path } +} diff --git a/apps/cowswap-frontend/src/modules/wallet/index.ts b/apps/cowswap-frontend/src/modules/wallet/index.ts index d300612157..9201947eda 100644 --- a/apps/cowswap-frontend/src/modules/wallet/index.ts +++ b/apps/cowswap-frontend/src/modules/wallet/index.ts @@ -9,9 +9,11 @@ export * from './web3-react/hooks/useOrderedConnections' // Updater export * from './web3-react/updater' +export * from './api/updaters/HwAccountIndexUpdater' // Components export * from './web3-react/containers/Web3Status' export * from './web3-react/containers/WalletModal' export * from './api/container/Identicon' export * from './web3-react/containers/AddToMetamask' +export * from './api/container/HwAccountIndexSelector' diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/index.tsx b/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/index.tsx index 6729550608..ddd5c5c003 100644 --- a/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/index.tsx +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/index.tsx @@ -25,50 +25,68 @@ import { ledgerConnection, LedgerOption } from './ledger' import { networkConnection } from './network' import { gnosisSafeConnection } from './safe' import { tallyWalletConnection } from './tally' +import { trezorConnection, TrezorOption } from './trezor' import { trustWalletConnection, TrustWalletOption } from './trust' import { walletConnectConnection, WalletConnectOption } from './walletConnect' import { walletConnectConnectionV2, WalletConnectV2Option } from './walletConnectV2' -// import { ZengoOption } from './zengo' import { ConnectionType } from '../../api/types' import { Web3ReactConnection } from '../types' -const CONNECTIONS: Web3ReactConnection[] = [ - gnosisSafeConnection, - injectedConnection, - coinbaseWalletConnection, - walletConnectConnection, - walletConnectConnectionV2, - fortmaticConnection, - networkConnection, - tallyWalletConnection, - trustWalletConnection, - ledgerConnection, - keystoneConnection, - injectedWidgetConnection, -] - -export function isChainAllowed(connector: Connector, chainId: number) { - switch (connector) { - case fortmaticConnection.connector: - return chainId === SupportedChainId.MAINNET - case injectedConnection.connector: - case coinbaseWalletConnection.connector: - case walletConnectConnection.connector: - case networkConnection.connector: - case gnosisSafeConnection.connector: - case tallyWalletConnection.connector: - case trustWalletConnection.connector: - case injectedWidgetConnection.connector: - case ledgerConnection.connector: - case keystoneConnection.connector: - case walletConnectConnectionV2.connector: - return ALL_SUPPORTED_CHAIN_IDS.includes(chainId) - default: - return false - } +const allowedChainsByWallet: Record = { + [ConnectionType.FORTMATIC]: [SupportedChainId.MAINNET], + [ConnectionType.INJECTED]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.INJECTED_WIDGET]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.COINBASE_WALLET]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.WALLET_CONNECT]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.WALLET_CONNECT_V2]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.NETWORK]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.GNOSIS_SAFE]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.TALLY]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.TRUST]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.LEDGER]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.TREZOR]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.KEYSTONE]: ALL_SUPPORTED_CHAIN_IDS, + [ConnectionType.ALPHA]: [], + [ConnectionType.AMBIRE]: [], + [ConnectionType.ZENGO]: [], +} + +export function isChainAllowed(connector: Connector, chainId: number): boolean { + const connection = getWeb3ReactConnection(connector) + + return allowedChainsByWallet[connection.type].includes(chainId) +} + +const connectionTypeToConnection: Record = { + [ConnectionType.INJECTED]: injectedConnection, + [ConnectionType.COINBASE_WALLET]: coinbaseWalletConnection, + [ConnectionType.WALLET_CONNECT]: walletConnectConnection, + [ConnectionType.WALLET_CONNECT_V2]: walletConnectConnectionV2, + [ConnectionType.ZENGO]: walletConnectConnection, + [ConnectionType.FORTMATIC]: fortmaticConnection, + [ConnectionType.NETWORK]: networkConnection, + [ConnectionType.GNOSIS_SAFE]: gnosisSafeConnection, + [ConnectionType.AMBIRE]: walletConnectConnection, + [ConnectionType.ALPHA]: walletConnectConnection, + [ConnectionType.TALLY]: tallyWalletConnection, + [ConnectionType.TRUST]: trustWalletConnection, + [ConnectionType.LEDGER]: ledgerConnection, + [ConnectionType.KEYSTONE]: keystoneConnection, + [ConnectionType.INJECTED_WIDGET]: injectedWidgetConnection, + [ConnectionType.TREZOR]: trezorConnection, } +const CONNECTIONS: Web3ReactConnection[] = Object.values(connectionTypeToConnection) + +// TODO: add others +export const HARDWARE_WALLETS = [ConnectionType.TREZOR] as const + +export type HardWareWallet = (typeof HARDWARE_WALLETS)[number] + +export const getIsHardWareWallet = (connectionType: ConnectionType) => + HARDWARE_WALLETS.includes(connectionType as HardWareWallet) + export function getWeb3ReactConnection(c: Connector | ConnectionType): Web3ReactConnection { if (c instanceof Connector) { const connection = CONNECTIONS.find((connection) => connection.connector === c) @@ -76,40 +94,9 @@ export function getWeb3ReactConnection(c: Connector | ConnectionType): Web3React throw Error('unsupported connector') } return connection - } else { - switch (c) { - case ConnectionType.INJECTED: - return injectedConnection - case ConnectionType.COINBASE_WALLET: - return coinbaseWalletConnection - case ConnectionType.WALLET_CONNECT: - return walletConnectConnection - case ConnectionType.WALLET_CONNECT_V2: - return walletConnectConnectionV2 - case ConnectionType.ZENGO: - return walletConnectConnection - case ConnectionType.FORTMATIC: - return fortmaticConnection - case ConnectionType.NETWORK: - return networkConnection - case ConnectionType.GNOSIS_SAFE: - return gnosisSafeConnection - case ConnectionType.AMBIRE: - return walletConnectConnection - case ConnectionType.ALPHA: - return walletConnectConnection - case ConnectionType.TALLY: - return tallyWalletConnection - case ConnectionType.TRUST: - return trustWalletConnection - case ConnectionType.LEDGER: - return ledgerConnection - case ConnectionType.KEYSTONE: - return keystoneConnection - case ConnectionType.INJECTED_WIDGET: - return injectedWidgetConnection - } } + + return connectionTypeToConnection[c] } export type TryActivation = (connector: Connector) => void @@ -156,6 +143,7 @@ export function ConnectWalletOptions({ tryActivation }: { tryActivation: TryActi const ambireOption = (!isInjectedMobileBrowser && ) ?? null const alphaOption = (!isInjectedMobileBrowser && ) ?? null const ledgerOption = (!isInjectedMobileBrowser && !isMobile && ) ?? null + const trezorOption = (!isInjectedMobileBrowser && !isMobile && ) ?? null const keystoneOption = (showKeystone && ) || (!isMobile && ) @@ -170,6 +158,7 @@ export function ConnectWalletOptions({ tryActivation }: { tryActivation: TryActi {walletConnectionV2Option} {coinbaseWalletOption} {ledgerOption} + {trezorOption} {/*{zengoOption}*/} {ambireOption} {alphaOption} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/trezor.tsx b/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/trezor.tsx new file mode 100644 index 0000000000..ec2958318b --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connection/trezor.tsx @@ -0,0 +1,38 @@ +import { initializeConnector } from '@web3-react/core' +import { Connector } from '@web3-react/types' + +import { useIsActiveWallet } from 'legacy/hooks/useIsActiveWallet' + +import { default as TrezorImage } from '../../api/assets/trezor.svg' +import { ConnectWalletOption } from '../../api/pure/ConnectWalletOption' +import { ConnectionType } from '../../api/types' +import { getConnectionName } from '../../api/utils/connection' +import { TrezorConnector } from '../connectors/TrezorConnector' +import { Web3ReactConnection } from '../types' + +const BASE_PROPS = { + color: '#4196FC', + icon: TrezorImage, + id: 'trezor', +} + +const [trezor, trezorHooks] = initializeConnector((actions) => new TrezorConnector(actions)) + +export const trezorConnection: Web3ReactConnection = { + connector: trezor, + hooks: trezorHooks, + type: ConnectionType.TREZOR, +} + +export function TrezorOption({ tryActivation }: { tryActivation: (connector: Connector) => void }) { + const isActive = useIsActiveWallet(trezorConnection) + + return ( + tryActivation(trezorConnection.connector)} + header={getConnectionName(ConnectionType.TREZOR)} + /> + ) +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/TrezorProvider.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/TrezorProvider.ts new file mode 100644 index 0000000000..36ccbc8c69 --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/TrezorProvider.ts @@ -0,0 +1,49 @@ +import { JsonRpcProvider } from '@ethersproject/providers' + +import { sendTransactionHandler } from './sendTransactionHandler' +import { signTypedDataHandler } from './signTypedDataHandler' + +import { getHwAccount } from '../../../api/utils/getHwAccount' + +import type transformTypedData from '@trezor/connect-plugin-ethereum' +import type { TrezorConnect } from '@trezor/connect-web' + +export class TrezorProvider extends JsonRpcProvider { + constructor( + url: string, + public readonly accounts: string[], + public readonly trezorConnect: TrezorConnect, + public readonly _transformTypedData: typeof transformTypedData + ) { + super(url) + } + + async send(method: string, params: Array): Promise { + if (method === 'eth_accounts') { + return [this.getCurrentAccount()] + } + + if (method.startsWith('eth_signTypedData')) { + const { domain, types, message, primaryType } = JSON.parse(params[1]) + + return signTypedDataHandler(domain, types, message, primaryType, this.trezorConnect, this._transformTypedData) + } + + if (method === 'eth_sendTransaction') { + return sendTransactionHandler( + params as Parameters[0], + this.getCurrentAccount(), + this, + this.trezorConnect + ) + } + + return super.send(method, params) + } + + private getCurrentAccount(): string { + const currentAccountIndex = getHwAccount().index + + return this.accounts[currentAccountIndex] + } +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/getAccountsList.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/getAccountsList.ts new file mode 100644 index 0000000000..72919df33e --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/getAccountsList.ts @@ -0,0 +1,96 @@ +import { publicToAddress } from 'ethereumjs-util' +import HDNode from 'hdkey' + +import { TREZOR_DERIVATION_PATH } from 'modules/wallet/api/utils/getHwAccount' + +import type { TrezorConnect } from '@trezor/connect-web' + +/** + * This file contains cherry-picked code from import { TrezorSubprovider } from '@0x/subproviders' + */ + +export async function getAccountsAsync(trezorConnect: TrezorConnect, numberOfAccounts = 100): Promise { + const initialDerivedKeyInfo = await initialDerivedKeyInfoAsync(trezorConnect) + + if (!initialDerivedKeyInfo) return null + + const derivedKeyInfos = calculateDerivedHDKeyInfos(initialDerivedKeyInfo, numberOfAccounts) + + return derivedKeyInfos.map((k) => k.address) +} + +interface DerivedHDKeyInfo { + hdKey: HDNode + address: string + derivationPath: string + baseDerivationPath: string +} + +class DerivedHDKeyInfoIterator { + private index = 0 + + constructor(private parentDerivedKeyInfo: DerivedHDKeyInfo, private searchLimit = 1000) {} + next() { + const baseDerivationPath = this.parentDerivedKeyInfo.baseDerivationPath + const derivationIndex = this.index + const fullDerivationPath = `m/${baseDerivationPath}/${derivationIndex}` + const path = `m/${derivationIndex}` + const hdKey = this.parentDerivedKeyInfo.hdKey.derive(path) + const address = addressOfHDKey(hdKey) + const derivedKey = { + address, + hdKey, + baseDerivationPath, + derivationPath: fullDerivationPath, + } + const isDone = this.index === this.searchLimit + this.index++ + return { + done: isDone, + value: derivedKey, + } + } + [Symbol.iterator]() { + return this + } +} + +async function initialDerivedKeyInfoAsync(trezorConnect: TrezorConnect): Promise { + const response = await trezorConnect.getPublicKey({ + path: TREZOR_DERIVATION_PATH, + }) + + if (!response.success) return null + + const payload = response.payload + const hdKey = new HDNode() + hdKey.publicKey = new Buffer(payload.publicKey, 'hex') + hdKey.chainCode = new Buffer(payload.chainCode, 'hex') + const address = addressOfHDKey(hdKey) + + return { + hdKey, + address, + derivationPath: TREZOR_DERIVATION_PATH, + baseDerivationPath: TREZOR_DERIVATION_PATH.slice(2), + } +} + +function calculateDerivedHDKeyInfos(parentDerivedKeyInfo: DerivedHDKeyInfo, numberOfKeys: number): DerivedHDKeyInfo[] { + const derivedKeys: DerivedHDKeyInfo[] = [] + const derivedKeyIterator = new DerivedHDKeyInfoIterator(parentDerivedKeyInfo, numberOfKeys) + + for (const key of derivedKeyIterator) { + derivedKeys.push(key) + } + + return derivedKeys +} + +function addressOfHDKey(hdKey: HDNode): string { + const shouldSanitizePublicKey = true + const derivedPublicKey = hdKey.publicKey + const ethereumAddressUnprefixed = publicToAddress(derivedPublicKey, shouldSanitizePublicKey).toString('hex') + + return '0x' + ethereumAddressUnprefixed.toLowerCase() +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/index.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/index.ts new file mode 100644 index 0000000000..0de402a4ea --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/index.ts @@ -0,0 +1,141 @@ +import { SupportedChainId } from '@cowprotocol/cow-sdk' +import { Connector } from '@web3-react/types' + +import { RPC_URLS } from 'legacy/constants/networks' + +import { getCurrentChainIdFromUrl } from 'utils/getCurrentChainIdFromUrl' + +import { TrezorProvider } from './TrezorProvider' + +import { getHwAccount } from '../../../api/utils/getHwAccount' + +import type transformTypedData from '@trezor/connect-plugin-ethereum' +import type { TrezorConnect } from '@trezor/connect-web' + +const defaultChainId = getCurrentChainIdFromUrl() + +const trezorConfig: Parameters[0] = { + env: 'web', + manifest: { + email: 'dev@cow.fi', + appUrl: 'https://cow.fi', + }, +} + +export class TrezorConnector extends Connector { + public customProvider?: TrezorProvider + + private currentAccountIndex = 0 + + private activatedNetwork: SupportedChainId | null = null + + private trezorConnect: TrezorConnect | null = null + + private accounts: string[] | null = null + + private cancelActivation: () => void = () => void 0 + + connectEagerly(...args: unknown[]) { + return this.activate(args[0] as SupportedChainId) + } + + getAccounts(): string[] | null { + return this.accounts + } + + async activate( + chainId: SupportedChainId | { chainId: SupportedChainId } = defaultChainId, + indexChanged = false + ): Promise { + const desiredChainId = typeof chainId === 'object' ? chainId.chainId : chainId + + // Skip when wallet already has the index set + if (indexChanged) { + if (this.currentAccountIndex === getHwAccount().index) { + return + } + + const account = this.getCurrentAccount() + this.actions.update({ accounts: [account] }) + return + } + + // Skip when wallet already on the requested network + if (this.activatedNetwork === desiredChainId && !indexChanged) { + return + } + + const url = RPC_URLS[desiredChainId] + const initialConnect = this.activatedNetwork === null + + try { + this.activatedNetwork = desiredChainId + + const { default: trezorConnect } = await import('@trezor/connect-web') + const { default: transformTypedData } = await import('@trezor/connect-plugin-ethereum') + + this.trezorConnect = trezorConnect + + if (initialConnect) { + this.cancelActivation = this.actions.startActivation() + await trezorConnect.init(trezorConfig) + } + + await this.installProvider(url, trezorConnect, transformTypedData) + } catch (error) { + await this.deactivate() + + console.error('Trezor activation error:', error) + + throw error + } + } + + deactivate(): Promise | void { + this.activatedNetwork = null + this.cancelActivation() + + return this.trezorConnect?.dispose() + } + + private getCurrentAccount(): string { + if (!this.accounts) { + throw new Error('Cannot load Trezor accounts') + } + + const currentAccountIndex = getHwAccount().index + const account = this.accounts[currentAccountIndex] + + if (!account) { + throw new Error('Current Trezor account index is out of bounds') + } + + return account + } + + private async installProvider( + url: string, + trezorConnect: TrezorConnect, + _transformTypedData: typeof transformTypedData + ) { + this.accounts = await import('./getAccountsList').then((module) => module.getAccountsAsync(trezorConnect)) + + const account = this.getCurrentAccount() + const customProvider = new TrezorProvider(url, this.accounts!, trezorConnect, _transformTypedData) + + this.customProvider = customProvider + + const network = await customProvider.getNetwork() + const { chainId } = network + + trezorConnect.on('DEVICE_EVENT', (event) => { + if (event.type === 'device-disconnect') { + this.actions.resetState() + this.deactivate() + } + }) + + this.currentAccountIndex = getHwAccount().index + this.actions.update({ accounts: [account], chainId }) + } +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/sendTransactionHandler.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/sendTransactionHandler.ts new file mode 100644 index 0000000000..4dd13e7c77 --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/sendTransactionHandler.ts @@ -0,0 +1,59 @@ +import { SupportedChainId } from '@cowprotocol/cow-sdk' +import { JsonRpcProvider } from '@ethersproject/providers' +import { serialize } from '@ethersproject/transactions' + +import { EthereumTransaction } from '@trezor/connect' +import { jotaiStore } from 'jotaiStore' + +import { gasPriceAtom } from 'modules/gasPirce' + +import { getHwAccount } from '../../../api/utils/getHwAccount' + +import type { TrezorConnect } from '@trezor/connect-web' + +// TODO: use API or Oracle for gas price +const DEFAULT_GOERLI_GAS_PRICE = 40 * 10 ** 9 // 40 GWEI + +export async function sendTransactionHandler( + params: [{ to: string; value: string | undefined; data: string | undefined }], + account: string, + provider: JsonRpcProvider, + trezorConnect: TrezorConnect +) { + const { chainId } = await provider.getNetwork() + const nonce = await provider.send('eth_getTransactionCount', [account, 'latest']) + + const originalTx = params[0] + const estimation = await provider.estimateGas(originalTx) + const gasPrice = chainId === SupportedChainId.GOERLI ? DEFAULT_GOERLI_GAS_PRICE : jotaiStore.get(gasPriceAtom)?.fast + + const transaction: EthereumTransaction = { + to: originalTx.to, + value: originalTx.value || '0x0', + data: originalTx.data || '0x', + gasPrice: gasPrice ? `0x${BigInt(gasPrice).toString(16)}` : '0x0', + gasLimit: estimation.toHexString(), + nonce, + chainId, + } + + const { success, payload } = await trezorConnect.ethereumSignTransaction({ + path: getHwAccount().path, + transaction, + }) + + if (!success) { + console.error('Trezor tx signing error: ', payload) + throw new Error(payload.error) + } + + const serialized = serialize( + { ...transaction, nonce: +transaction.nonce }, + { + ...payload, + v: +payload.v, + } + ) + + return provider.send('eth_sendRawTransaction', [serialized]) +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/signTypedDataHandler.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/signTypedDataHandler.ts new file mode 100644 index 0000000000..c285dfb496 --- /dev/null +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/connectors/TrezorConnector/signTypedDataHandler.ts @@ -0,0 +1,41 @@ +import type { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' + +import { getHwAccount } from '../../../api/utils/getHwAccount' + +import type transformTypedData from '@trezor/connect-plugin-ethereum' +import type { TrezorConnect } from '@trezor/connect-web' + +export async function signTypedDataHandler( + domain: TypedDataDomain, + types: Record>, + message: Record, + primaryType: string, + trezorConnect: TrezorConnect, + _transformTypedData: typeof transformTypedData +): Promise { + const eip712Data = { + domain, + types, + message, + primaryType, + } as Parameters[0] + + const { domain_separator_hash, message_hash } = _transformTypedData(eip712Data, true) + + if (!message_hash) throw new Error('Trezor sign typed data no message hash: ' + JSON.stringify(eip712Data)) + + const result = await trezorConnect.ethereumSignTypedData({ + path: getHwAccount().path, + data: eip712Data, + metamask_v4_compat: true, + // These are optional, but required for T1 compatibility + domain_separator_hash, + message_hash, + }) + + if (!result.success) throw new Error(result.payload.error) + + const { signature } = result.payload + + return signature +} diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/containers/WalletModal/index.tsx b/apps/cowswap-frontend/src/modules/wallet/web3-react/containers/WalletModal/index.tsx index c69dc6eb75..58021c25c3 100644 --- a/apps/cowswap-frontend/src/modules/wallet/web3-react/containers/WalletModal/index.tsx +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/containers/WalletModal/index.tsx @@ -105,7 +105,15 @@ export function WalletModal() { } catch (error: any) { console.error(`[tryActivation] web3-react connection error`, error) dispatch(updateSelectedWallet({ wallet: undefined })) - dispatch(updateConnectionError({ connectionType, error: error.message })) + dispatch( + updateConnectionError({ + connectionType, + error: + typeof error === 'string' + ? error + : error.message || (typeof error === 'object' ? JSON.stringify(error) : error.toString()), + }) + ) } }, [dispatch, toggleWalletModal] diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/hooks/useEagerlyConnect.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/hooks/useEagerlyConnect.ts index b67bf7bf6e..7087c988c3 100644 --- a/apps/cowswap-frontend/src/modules/wallet/web3-react/hooks/useEagerlyConnect.ts +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/hooks/useEagerlyConnect.ts @@ -7,6 +7,7 @@ import { useAppSelector } from 'legacy/state/hooks' import { BACKFILLABLE_WALLETS } from 'modules/wallet/api/types' import { isInjectedWidget } from 'common/utils/isInjectedWidget' +import { getCurrentChainIdFromUrl } from 'utils/getCurrentChainIdFromUrl' import { getWeb3ReactConnection } from '../connection' import { injectedWidgetConnection } from '../connection/injectedWidget' @@ -14,11 +15,12 @@ import { networkConnection } from '../connection/network' import { gnosisSafeConnection } from '../connection/safe' async function connect(connector: Connector) { + const chainId = getCurrentChainIdFromUrl() try { if (connector.connectEagerly) { - await connector.connectEagerly() + await connector.connectEagerly(chainId) } else { - await connector.activate() + await connector.activate(chainId) } } catch (error: any) { console.debug(`web3-react eager connection error: ${error}`) @@ -34,7 +36,11 @@ export function useEagerlyConnect() { connect(injectedWidgetConnection.connector) } - connect(gnosisSafeConnection.connector) + // Try to connect to Gnosis Safe only when the app is opened in an iframe + if (window.top !== window.self) { + connect(gnosisSafeConnection.connector) + } + connect(networkConnection.connector) if (selectedWallet) { diff --git a/apps/cowswap-frontend/src/modules/wallet/web3-react/types.ts b/apps/cowswap-frontend/src/modules/wallet/web3-react/types.ts index 49c2ae4e82..4942151354 100644 --- a/apps/cowswap-frontend/src/modules/wallet/web3-react/types.ts +++ b/apps/cowswap-frontend/src/modules/wallet/web3-react/types.ts @@ -3,8 +3,8 @@ import { Connector } from '@web3-react/types' import { ConnectionType } from 'modules/wallet' -export interface Web3ReactConnection { - connector: Connector +export interface Web3ReactConnection { + connector: T hooks: Web3ReactHooks type: ConnectionType } diff --git a/apps/cowswap-frontend/vite.config.ts b/apps/cowswap-frontend/vite.config.ts index 41986d5318..df15ed4650 100644 --- a/apps/cowswap-frontend/vite.config.ts +++ b/apps/cowswap-frontend/vite.config.ts @@ -1,14 +1,21 @@ /// import { lingui } from '@lingui/vite-plugin' import react from '@vitejs/plugin-react-swc' +import stdLibBrowser from 'node-stdlib-browser' import { defineConfig, loadEnv, searchForWorkspaceRoot, splitVendorChunkPlugin } from 'vite' import macrosPlugin from 'vite-plugin-babel-macros' +import { ModuleNameWithoutNodePrefix, nodePolyfills } from 'vite-plugin-node-polyfills' import { VitePWA } from 'vite-plugin-pwa' import svgr from 'vite-plugin-svgr' import viteTsConfigPaths from 'vite-tsconfig-paths' import * as path from 'path' +const allNodeDeps = Object.keys(stdLibBrowser).map((key) => key.replace('node:', '')) as ModuleNameWithoutNodePrefix[] + +// Trezor getAccountsAsync() requires crypto and stream (the module is lazy-loaded) +const nodeDepsToInclude = ['crypto', 'stream'] + export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ['REACT_APP_']) @@ -81,6 +88,15 @@ export default defineConfig(({ mode }) => { }, plugins: [ + nodePolyfills({ + exclude: allNodeDeps.filter((dep) => !nodeDepsToInclude.includes(dep)), + globals: { + Buffer: true, + global: true, + process: true, + }, + protocolImports: true, + }), splitVendorChunkPlugin(), react({ plugins: [['@lingui/swc-plugin', {}]], diff --git a/package.json b/package.json index 6eba04b4d7..e9977ac36e 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "@lingui/core": "^4.3.0", "@lingui/macro": "^4.3.0", "@lingui/react": "^4.3.0", + "@metamask/eth-sig-util": "^5.0.2", "@metamask/jazzicon": "^2.0.0", "@popperjs/core": "^2.4.4", "@reach/dialog": "^0.18.0", @@ -77,6 +78,9 @@ "@sentry/tracing": "^7.3.0", "@sentry/webpack-plugin": "^1.17.1", "@swc/helpers": "~0.5.0", + "@trezor/connect-plugin-ethereum": "^9.0.1", + "@trezor/connect-web": "^9.0.11", + "@types/hdkey": "^2.0.1", "@uniswap/governance": "^1.0.2", "@uniswap/liquidity-staker": "^1.0.2", "@uniswap/merkle-distributor": "1.0.1", @@ -117,6 +121,7 @@ "fast-safe-stringify": "^2.0.8", "fortmatic": "^2.2.1", "fraction.js": "^4.2.0", + "hdkey": "^2.1.0", "immer": "^10.0.2", "inter-ui": "^3.19.3", "ipfs-deploy": "^8.0.1", @@ -231,6 +236,7 @@ "jest-fetch-mock": "^3.0.3", "jest-styled-components": "^7.1.1", "jsdom": "~22.1.0", + "node-stdlib-browser": "^1.2.0", "nx": "16.4.0", "nx-cloud": "latest", "patch-package": "^8.0.0", @@ -244,6 +250,7 @@ "vite": "~4.3.9", "vite-plugin-babel-macros": "^1.0.6", "vite-plugin-dts": "~2.3.0", + "vite-plugin-node-polyfills": "^0.11.1", "vite-plugin-pwa": "^0.16.4", "vite-plugin-svgr": "^3.2.0", "vite-tsconfig-paths": "~4.2.0", diff --git a/yarn.lock b/yarn.lock index 27ddc8a44c..bb5882878e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2040,6 +2040,11 @@ crc-32 "^1.2.0" ethereumjs-util "^7.1.5" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + "@ethereumjs/tx@3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" @@ -2048,6 +2053,15 @@ "@ethereumjs/common" "^2.5.0" ethereumjs-util "^7.1.2" +"@ethereumjs/util@^8.0.6": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -3186,6 +3200,18 @@ resolved "https://registry.yarnpkg.com/@metamask/detect-provider/-/detect-provider-1.2.0.tgz#3667a7531f2a682e3c3a43eaf3a1958bdb42a696" integrity sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ== +"@metamask/eth-sig-util@^5.0.2": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-5.1.0.tgz#a47f62800ee1917fef976ba67544a0ccd7d1bd6b" + integrity sha512-mlgziIHYlA9pi/XZerChqg4NocdOgBPB9NmxgXWQO2U2hH8RGOJQrz6j/AIKkYxgCMIE2PY000+joOwXfzeTDQ== + dependencies: + "@ethereumjs/util" "^8.0.6" + bn.js "^4.12.0" + ethereum-cryptography "^2.0.0" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + "@metamask/jazzicon@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@metamask/jazzicon/-/jazzicon-2.0.0.tgz#5615528e91c0fc5c9d79202d1f0954a7922525a0" @@ -3353,7 +3379,7 @@ dependencies: "@noble/hashes" "1.3.0" -"@noble/curves@^1.0.0": +"@noble/curves@1.1.0", "@noble/curves@^1.0.0", "@noble/curves@~1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== @@ -3365,7 +3391,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== -"@noble/hashes@1.3.1", "@noble/hashes@^1.3.0", "@noble/hashes@~1.3.0": +"@noble/hashes@1.3.1", "@noble/hashes@^1.2.0", "@noble/hashes@^1.3.0", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== @@ -4131,6 +4157,15 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" +"@rollup/plugin-inject@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz#0783711efd93a9547d52971db73b2fb6140a67b1" + integrity sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA== + dependencies: + "@rollup/pluginutils" "^5.0.1" + estree-walker "^2.0.2" + magic-string "^0.27.0" + "@rollup/plugin-node-resolve@^11.2.1": version "11.2.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" @@ -4160,6 +4195,15 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.1": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.3.tgz#183126d69aeb1cfa23401d5a71cb4b8c16c4a4e0" + integrity sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@rollup/pluginutils@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" @@ -4313,6 +4357,15 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + "@scure/bip39@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.0.tgz#a207e2ef96de354de7d0002292ba1503538fc77b" @@ -4321,6 +4374,14 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@sentry-internal/tracing@7.60.1": version "7.60.1" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.60.1.tgz#c20766a7e31589962ffe9ea9dc58b6f475432303" @@ -5182,6 +5243,141 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@trezor/analytics@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@trezor/analytics/-/analytics-1.0.3.tgz#a150efae76ca912e1331f0a5754317368ec1fac4" + integrity sha512-7a0bHkY/+z6cDRoh1ZkhffHGw7iaVayD1UpP3fm4lPzrRpGQeH9ksRg8ZT0mBs6Pj+TLETzZRrS5ZBpDK0Piug== + dependencies: + "@trezor/utils" "9.0.9" + +"@trezor/blockchain-link-types@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-types/-/blockchain-link-types-1.0.2.tgz#00e254acef04c7575e8d0efe2f05e17d1fb6ef52" + integrity sha512-ON3A2Anu5k3BkMFtG0LWO48ZxikyWgSORqQ12ki3KDbTbqZV5BwAZTeFchUq8cv1kDlqkG7AtMV2nY9G3KfYOA== + +"@trezor/blockchain-link-utils@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link-utils/-/blockchain-link-utils-1.0.3.tgz#e0fdc9ceb3b357a926f9c766fbea0b2f74886adb" + integrity sha512-/mti1QY8n053P11wQwnQyBAASS+nNVBKu2kSZo8KAESwdnFGcnZwH0okXHTlUQZFud5ppg9EYJk9mpk0jf91tQ== + dependencies: + "@trezor/utils" "9.0.8" + bignumber.js "^9.1.1" + +"@trezor/blockchain-link@2.1.13": + version "2.1.13" + resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-2.1.13.tgz#0f355910239f7ec863f373ec2f97c4f271e294fa" + integrity sha512-5yRvP8cFKjYd3FBRmUS6VJxHRLm8IuQg237hcRF8RbYRgW6ev7dwkjYmcVYz2iWXGaz+/FV8G0/xB/pmHhrpPQ== + dependencies: + "@trezor/blockchain-link-types" "1.0.2" + "@trezor/blockchain-link-utils" "1.0.3" + "@trezor/utils" "9.0.9" + "@trezor/utxo-lib" "1.0.7" + "@types/web" "^0.0.99" + bignumber.js "^9.1.1" + events "^3.3.0" + ripple-lib "^1.10.1" + socks-proxy-agent "6.1.1" + ws "7.5.9" + +"@trezor/connect-analytics@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@trezor/connect-analytics/-/connect-analytics-1.0.2.tgz#a9017f5f41f36bdddfd23ca1f3b05b213a51e064" + integrity sha512-eUAWb1nc5wGAKmNVTmiOc9DlFr+mbG+1JevzVUFB2q3VLQzcjf0st+RWE5DuDnPUVJiJFxBQWTqWlzACtq/HzQ== + dependencies: + "@trezor/analytics" "1.0.3" + +"@trezor/connect-common@0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@trezor/connect-common/-/connect-common-0.0.16.tgz#372395136f9f53ddc02348b74c8f7771c84262be" + integrity sha512-DPGWhNYTe8SQO/XzqvVtY5YCOtRGHChN01J2Z5p3xD6aFGceou7SE0ROOcqU0ceSzMgl13+I9I0qXq/OLTGBGw== + dependencies: + "@trezor/env-utils" "1.0.2" + +"@trezor/connect-plugin-ethereum@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@trezor/connect-plugin-ethereum/-/connect-plugin-ethereum-9.0.1.tgz#89e940b546ade20dfc810ad0cde968b14dec17ee" + integrity sha512-gxTclyM7blS+WUw1hqRXaGMcBN4y9Qr3zZzRCTSUneLPob0yZU9lFHpylXVXNgVoCXA3ogKdudJdRSYBUdlMdA== + +"@trezor/connect-web@^9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@trezor/connect-web/-/connect-web-9.0.11.tgz#7526eef7a0b7d33b431613e80529312e78d8b1c4" + integrity sha512-9398lmzxPGm/aZGM9OvkjasQ4kUQQs5bYz79eDtFz3jf24SyMM1yf2KvdvdssIyIfvcAbyJLZ+DK1qw2HxWn/Q== + dependencies: + "@trezor/connect" "9.0.11" + "@trezor/utils" "9.0.9" + events "^3.3.0" + +"@trezor/connect@9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@trezor/connect/-/connect-9.0.11.tgz#99b341bdabf16a1216c3343b659bcca9c44a5854" + integrity sha512-8fifMt3xtqIQ4122aHNb8e3l0uisVujsWXUJ/LQS6N+t6SnilohBZ8nfzUBQaCxo2JuorLuXmxQ1ngNpaL45TA== + dependencies: + "@trezor/blockchain-link" "2.1.13" + "@trezor/connect-analytics" "1.0.2" + "@trezor/connect-common" "0.0.16" + "@trezor/transport" "1.1.12" + "@trezor/utils" "9.0.9" + "@trezor/utxo-lib" "1.0.7" + bignumber.js "^9.1.1" + blakejs "^1.2.1" + cross-fetch "^3.1.6" + events "^3.3.0" + randombytes "2.1.0" + tslib "2.5.2" + +"@trezor/env-utils@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@trezor/env-utils/-/env-utils-1.0.2.tgz#b68cef4b1f9e4959f16290aef04b48a09c52e5ce" + integrity sha512-fPrX6EjaMHnRwAje7h2H3Qgu5/sBoewE8441j8cbBzxfJRgRuQJYZaGCy7lDALjxEwp7g02ZZ/FWavIhWGZIcQ== + dependencies: + ua-parser-js "^1.0.34" + +"@trezor/transport@1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@trezor/transport/-/transport-1.1.12.tgz#ba88abcfc47b2c1b34392fdde7aa8dffce4129b7" + integrity sha512-RInOSOmgJ383QOBJbPzjyQW9BoWZ6HTneUmPkdzqydLxn9eyD3Ui13+W9fWFmxoMmljxJKct93twgxgHKUkhCg== + dependencies: + "@trezor/utils" "9.0.9" + bytebuffer "^5.0.1" + json-stable-stringify "^1.0.2" + long "^4.0.0" + prettier "2.8.7" + protobufjs "6.11.3" + +"@trezor/utils@9.0.8": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.0.8.tgz#0fe7fd954869c309c22662908077c4800467caa6" + integrity sha512-XsX+VXP2UxanYo+LbY7zcjeIumEWFs5lArTAfK1fdWTIdiV8Od2htNO+D9lnCytvuu04LeJx7RihxinsQQVDvA== + +"@trezor/utils@9.0.9": + version "9.0.9" + resolved "https://registry.yarnpkg.com/@trezor/utils/-/utils-9.0.9.tgz#2082d0ed4d3bbda83403be43f3cf56ae50b7805f" + integrity sha512-+jzHy+YG3zJsnB11YfudT1a5u5lcwNX/tKoW9VmPU+isuW725M6uUOL+MSgW1aHucCJPyBAp0XUUssLE/ifqBw== + +"@trezor/utxo-lib@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-1.0.7.tgz#0bfaf053ee06bf2a2c778101fceee608325c1493" + integrity sha512-brC5xqGgT6yloHz3RWUK1CdEYkOSEjrhYM18GAzAaqS4MBULWDBPDD5Qt2XcYTOaoR/+8PKUXHdHVm+olbRSlA== + dependencies: + "@trezor/utils" "9.0.9" + bchaddrjs "^0.5.2" + bech32 "^2.0.0" + bip66 "^1.1.5" + bitcoin-ops "^1.4.1" + blake-hash "^2.0.0" + blakejs "^1.2.1" + bn.js "^5.2.1" + bs58 "^5.0.0" + bs58check "^3.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + int64-buffer "^1.0.1" + pushdata-bitcoin "^1.0.1" + tiny-secp256k1 "^1.1.6" + typeforce "^1.18.0" + varuint-bitcoin "^1.1.2" + wif "^2.0.6" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -5607,6 +5803,13 @@ dependencies: "@types/node" "*" +"@types/hdkey@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/hdkey/-/hdkey-2.0.1.tgz#ab46597562d977b229704c7f19949953b936b6a3" + integrity sha512-4s6jhP0BT3sWBaRo0BfA3BpFllQvuRlXUzIqnuvSNmPhmMCZYjhrDe31nJb8kJLc0ZVdqj9Ep9eH2RGBNCK9Sw== + dependencies: + "@types/node" "*" + "@types/history@^4.7.11": version "4.7.11" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" @@ -5686,6 +5889,11 @@ dependencies: "@types/node" "*" +"@types/lodash@^4.14.136": + version "4.14.197" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" + integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== + "@types/long@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" @@ -6033,7 +6241,12 @@ resolved "https://registry.yarnpkg.com/@types/wcag-contrast/-/wcag-contrast-3.0.0.tgz#640a4c36a6b62d54f1dd64a74322595df465148d" integrity sha512-RDinJW4P1bg+dWA6C0/looxA0zyi24gIDHrewzFW/xyU2v97D38KRzXdxMbiVpqovrjTa/xsX8abj3/hpASklg== -"@types/ws@^7.4.4": +"@types/web@^0.0.99": + version "0.0.99" + resolved "https://registry.yarnpkg.com/@types/web/-/web-0.0.99.tgz#a9c3a088e4634f6b08977f4fc733c916c2b0d50e" + integrity sha512-xMz3tOvtkZzc7RpQrDNiLe5sfMmP+fz8bOxHIZ/U8qXyvzDX4L4Ss1HCjor/O9DSelba+1iXK1VM7lruX28hiQ== + +"@types/ws@^7.2.0", "@types/ws@^7.4.4": version "7.4.7" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== @@ -7431,7 +7644,7 @@ aes-js@^3.1.2: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== -agent-base@6: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -7755,6 +7968,16 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -7767,6 +7990,16 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -8146,13 +8379,18 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2, base-x@^3.0.8: +base-x@^3.0.2, base-x@^3.0.8, base-x@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -8175,6 +8413,16 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +bchaddrjs@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0" + integrity sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ== + dependencies: + bs58check "2.1.2" + buffer "^6.0.3" + cashaddrjs "0.4.4" + stream-browserify "^3.0.0" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -8187,6 +8435,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + bfj@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2" @@ -8197,6 +8450,16 @@ bfj@^7.0.2: hoopy "^0.1.4" tryer "^1.0.1" +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + +big-integer@^1.6.48: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -8209,7 +8472,7 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" -bignumber.js@^9.0.0: +bignumber.js@^9.0.0, bignumber.js@^9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -8256,6 +8519,18 @@ bindings@^1.3.0: dependencies: file-uri-to-path "1.0.0" +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw== + dependencies: + safe-buffer "^5.0.1" + +bitcoin-ops@^1.3.0, bitcoin-ops@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz#e45de620398e22fd4ca6023de43974ff42240278" + integrity sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow== + bl@^4.0.0, bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -8274,7 +8549,16 @@ bl@^5.0.0: inherits "^2.0.4" readable-stream "^3.4.0" -blakejs@^1.1.0: +blake-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/blake-hash/-/blake-hash-2.0.0.tgz#af184dce641951126d05b7d1c3de3224f538d66e" + integrity sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w== + dependencies: + node-addon-api "^3.0.0" + node-gyp-build "^4.2.2" + readable-stream "^3.6.0" + +blakejs@^1.1.0, blakejs@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== @@ -8318,7 +8602,7 @@ bn.js@4.11.8: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bn.js@^4.11.6, bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.12.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== @@ -8447,7 +8731,7 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.1.0: +brorand@^1.0.1, brorand@^1.0.5, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== @@ -8467,7 +8751,14 @@ browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" integrity sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw== -browserify-aes@^1.2.0: +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -8479,6 +8770,55 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: version "4.21.10" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" @@ -8503,7 +8843,14 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58check@^2.1.2: +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + +bs58check@2.1.2, bs58check@<3.0.0, bs58check@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== @@ -8512,6 +8859,14 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" +bs58check@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" + integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== + dependencies: + "@noble/hashes" "^1.2.0" + bs58 "^5.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -8552,6 +8907,14 @@ buffer-from@^1.0.0, buffer-from@^1.1.1: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +"buffer-polyfill@npm:buffer@^6.0.3", buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" @@ -8562,15 +8925,7 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^5.0.5, buffer@^5.2.0, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0: +buffer@^5.0.5, buffer@^5.2.0, buffer@^5.4.3, buffer@^5.5.0, buffer@^5.6.0, buffer@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -8617,6 +8972,13 @@ byte-size@^7.0.0: resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== +bytebuffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" + integrity sha512-IuzSdmADppkZ6DlpycMkm8l9zeEq16fWtLvunEwFiYciR/BHo4E8/xs5piFquG+Za8OWmMqHF8zuRviz2LHvRQ== + dependencies: + long "~3" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -8780,6 +9142,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +cashaddrjs@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.4.4.tgz#169f1ae620d325db77700273d972282adeeee331" + integrity sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA== + dependencies: + big-integer "1.6.36" + cborg@^1.5.4: version "1.10.2" resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" @@ -9349,6 +9718,16 @@ connect-history-api-fallback@^2.0.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== + content-disposition@0.5.4, content-disposition@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -9508,6 +9887,14 @@ crc-32@^1.2.0: resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -9519,7 +9906,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.4, create-hmac@^1.1.7: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -9531,7 +9918,7 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-require@^1.1.0: +create-require@^1.1.0, create-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== @@ -9543,7 +9930,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@^3.0.4, cross-fetch@^3.0.6, cross-fetch@^3.1.4, cross-fetch@^3.1.5: +cross-fetch@^3.0.4, cross-fetch@^3.0.6, cross-fetch@^3.1.4, cross-fetch@^3.1.5, cross-fetch@^3.1.6: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== @@ -9584,6 +9971,23 @@ crypt@0.0.2: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-es@^1.2.2: version "1.2.7" resolved "https://registry.yarnpkg.com/crypto-es/-/crypto-es-1.2.7.tgz#754a6d52319a94fb4eb1f119297f17196b360f88" @@ -10249,7 +10653,7 @@ decimal.js-light@^2.5.0: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@^10.2.1, decimal.js@^10.4.3: +decimal.js@^10.2.0, decimal.js@^10.2.1, decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -10403,6 +10807,14 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +des.js@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -10469,6 +10881,15 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dijkstrajs@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" @@ -10585,6 +11006,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +domain-browser@^4.22.0: + version "4.22.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.22.0.tgz#6ddd34220ec281f9a65d3386d267ddd35c491f9f" + integrity sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw== + domelementtype@1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -10762,7 +11188,7 @@ electron-to-chromium@^1.4.477: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.477.tgz#05669aa6f161ee9076a6805457e9bd9fe6d0dfd1" integrity sha512-shUVy6Eawp33dFBFIoYbIwLHrX0IZ857AlH9ug2o4rvbWmpaCUdBpQ5Zw39HRrfzAFm4APJE9V+E2A/WB0YqJw== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -11004,6 +11430,11 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + es6-promise@^4.0.3, es6-promise@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -11618,6 +12049,16 @@ ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" @@ -11673,6 +12114,14 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" +ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -11698,12 +12147,12 @@ events.once@^2.0.2: resolved "https://registry.yarnpkg.com/events.once/-/events.once-2.0.2.tgz#9e84ac14ef238c070ebc0f44556c24225fa9c7a4" integrity sha512-yt0HxZ3PPiOVsyo9b74bQ07mSKyNeoVHzyakCBFJzSC8WhMUYomvq/naaJNks+wWJ1jv8JYTxO5vaw8wLnmZxw== -events@^3.2.0, events@^3.3.0: +events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -evp_bytestokey@^1.0.3: +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== @@ -12923,6 +13372,16 @@ 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@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-2.1.0.tgz#755b30b73f54e93c31919c1b2f19205a8e57cb92" + integrity sha512-i9Wzi0Dy49bNS4tXXeGeu0vIcn86xXdPQUpEYg+SO1YiO8HtomjmmRMaRyqL0r59QfcD4PfVbSF3qmsWFwAemA== + dependencies: + bs58check "^2.1.2" + ripemd160 "^2.0.2" + safe-buffer "^5.1.1" + secp256k1 "^4.0.0" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -13190,6 +13649,11 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== + https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -13385,6 +13849,11 @@ inspect-with-kind@^1.0.5: dependencies: kind-of "^6.0.2" +int64-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.0.1.tgz#c78d841b444cadf036cd04f8683696c740f15dca" + integrity sha512-+3azY4pXrjAupJHU1V9uGERWlhoqNswJNji6aD/02xac7oxol508AsMC5lxKhEqyZeDFy3enq5OGWXF4u75hiw== + inter-ui@^3.19.3: version "3.19.3" resolved "https://registry.yarnpkg.com/inter-ui/-/inter-ui-3.19.3.tgz#cf4b4b6d30de8d5463e2462588654b325206488c" @@ -13455,6 +13924,11 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -13882,6 +14356,13 @@ is-core-module@^2.1.0, is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-m dependencies: has "^1.0.3" +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -13998,6 +14479,14 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -14242,6 +14731,11 @@ isomorphic-fetch@^3.0.0: node-fetch "^2.6.1" whatwg-fetch "^3.4.1" +isomorphic-timers-promises@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz#e4137c24dbc54892de8abae3a4b5c1ffff381598" + integrity sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ== + isomorphic-ws@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" @@ -15539,6 +16033,11 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +jsonschema@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.2.2.tgz#83ab9c63d65bf4d596f91d81195e78772f6452bc" + integrity sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA== + jsprim@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" @@ -15943,7 +16442,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.15: +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -15978,6 +16477,11 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +long@~3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + integrity sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -16061,6 +16565,13 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + magic-string@^0.29.0: version "0.29.0" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.29.0.tgz#f034f79f8c43dba4ae1730ffb5e8c4e084b16cf3" @@ -16317,6 +16828,11 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + micromark@~2.11.0: version "2.11.4" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" @@ -16341,6 +16857,14 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -16791,7 +17315,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.14.0: +nan@^2.13.2, nan@^2.14.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -16884,7 +17408,7 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-addon-api@^3.2.1: +node-addon-api@^3.0.0, node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== @@ -16920,7 +17444,7 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: +node-gyp-build@^4.2.0, node-gyp-build@^4.2.2, node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== @@ -16940,6 +17464,39 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-stdlib-browser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz#5ddcfdf4063b88fb282979a1aa6ddab9728d5e4c" + integrity sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg== + dependencies: + assert "^2.0.0" + browser-resolve "^2.0.0" + browserify-zlib "^0.2.0" + buffer "^5.7.1" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + create-require "^1.1.1" + crypto-browserify "^3.11.0" + domain-browser "^4.22.0" + events "^3.0.0" + https-browserify "^1.0.0" + isomorphic-timers-promises "^1.0.1" + os-browserify "^0.3.0" + path-browserify "^1.0.1" + pkg-dir "^5.0.0" + process "^0.11.10" + punycode "^1.4.1" + querystring-es3 "^0.2.1" + readable-stream "^3.6.0" + stream-browserify "^3.0.0" + stream-http "^3.2.0" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.1" + url "^0.11.0" + util "^0.12.4" + vm-browserify "^1.0.1" + node-vibrant@^3.2.1-alpha.1: version "3.2.1-alpha.1" resolved "https://registry.yarnpkg.com/node-vibrant/-/node-vibrant-3.2.1-alpha.1.tgz#d80a3dd22741150b804ae0d3eb99ceaf9f79980a" @@ -17172,7 +17729,7 @@ object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.1.5: +object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -17372,6 +17929,11 @@ ora@^5.1.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== + os-filter-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16" @@ -17520,7 +18082,7 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -pako@^1.0.5: +pako@^1.0.5, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -17540,6 +18102,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-bmfont-ascii@^1.0.3: version "1.0.6" resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" @@ -17724,7 +18297,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17: +pbkdf2@^3.0.17, pbkdf2@^3.0.3: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -17849,6 +18422,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + pkg-types@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" @@ -18485,6 +19065,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== +prettier@2.8.7: + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + prettier@^2.6.2: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" @@ -18541,16 +19126,16 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +"process-polyfill@npm:process@^0.11.10", process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + process-warning@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -18590,7 +19175,7 @@ prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -protobufjs@^6.10.2: +protobufjs@6.11.3, protobufjs@^6.10.2: version "6.11.3" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.3.tgz#637a527205a35caa4f3e2a9a4a13ddffe0e7af74" integrity sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg== @@ -18664,6 +19249,18 @@ psl@^1.1.28, psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pull-to-stream@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pull-to-stream/-/pull-to-stream-0.1.1.tgz#fa2058528528e3542b81d6f17cbc42288508ff37" @@ -18706,6 +19303,13 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== +pushdata-bitcoin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7" + integrity sha512-hw7rcYTJRAl4olM8Owe8x0fBuJJ+WGbMhQuLWOXEMN3PxPCKQHRkhfL+XG0+iXUmSHjkMmb3Ba55Mt21cZc9kQ== + dependencies: + bitcoin-ops "^1.3.0" + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -18788,6 +19392,11 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystring-es3@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -18842,13 +19451,21 @@ ramda@^0.27.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== -randombytes@^2.1.0: +randombytes@2.1.0, randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -19684,6 +20301,15 @@ resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.17.0: + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.22.3: version "1.22.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" @@ -19773,7 +20399,7 @@ rimraf@~2.4.0: dependencies: glob "^6.0.1" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -19781,6 +20407,62 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +ripple-address-codec@^4.1.1, ripple-address-codec@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ripple-address-codec/-/ripple-address-codec-4.3.0.tgz#45edeb0312b4fe4607b37b7c4cff467802ad571d" + integrity sha512-Tvd81i7hpDmNqHvkj6iYlj8Tv3I1Romw5gfjni9eacewJvGV2xe+p2y0FAw39z72qfciRMhQyHvpnviBcWVBNw== + dependencies: + base-x "^3.0.9" + create-hash "^1.1.2" + +ripple-binary-codec@^1.1.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ripple-binary-codec/-/ripple-binary-codec-1.8.0.tgz#ecff1d6f4250f0c48622c602267ef7c4393ae63e" + integrity sha512-rtnLT6x1wKCRVWc/SL7jKD6lM5Nzf51HyM8A3AluBGTR8ubzAoAL3wzexCILKXbPhiBorrHRjLgB8L6IB2jhjw== + dependencies: + assert "^2.0.0" + big-integer "^1.6.48" + buffer "6.0.3" + create-hash "^1.2.0" + decimal.js "^10.2.0" + ripple-address-codec "^4.3.0" + +ripple-keypairs@^1.0.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ripple-keypairs/-/ripple-keypairs-1.3.0.tgz#fb28f15d0c764e36af7b25c4c782c3997abf84ad" + integrity sha512-LzM3Up9Pwz3dYqnczzNptimN3AxtjeGbDGeiOzREzbkslKiZcJ615b/ghBN4H23SC6W1GAL95juEzzimDi4THw== + dependencies: + bn.js "^5.1.1" + brorand "^1.0.5" + elliptic "^6.5.4" + hash.js "^1.0.3" + ripple-address-codec "^4.3.0" + +ripple-lib-transactionparser@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/ripple-lib-transactionparser/-/ripple-lib-transactionparser-0.8.2.tgz#7aaad3ba1e1aeee1d5bcff32334a7a838f834dce" + integrity sha512-1teosQLjYHLyOQrKUQfYyMjDR3MAq/Ga+MJuLUfpBMypl4LZB4bEoMcmG99/+WVTEiZOezJmH9iCSvm/MyxD+g== + dependencies: + bignumber.js "^9.0.0" + lodash "^4.17.15" + +ripple-lib@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/ripple-lib/-/ripple-lib-1.10.1.tgz#9c353702792b25465cdb269265d6f5bb27b1471b" + integrity sha512-OQk+Syl2JfxKxV2KuF/kBMtnh012I5tNnziP3G4WDGCGSIAgeqkOgkR59IQ0YDNrs1YW8GbApxrdMSRi/QClcA== + dependencies: + "@types/lodash" "^4.14.136" + "@types/ws" "^7.2.0" + bignumber.js "^9.0.0" + https-proxy-agent "^5.0.0" + jsonschema "1.2.2" + lodash "^4.17.4" + ripple-address-codec "^4.1.1" + ripple-binary-codec "^1.1.3" + ripple-keypairs "^1.0.3" + ripple-lib-transactionparser "0.8.2" + ws "^7.2.0" + rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" @@ -19996,7 +20678,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== -secp256k1@^4.0.1: +secp256k1@^4.0.0, secp256k1@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== @@ -20144,7 +20826,7 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -20312,6 +20994,11 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -20329,6 +21016,23 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +socks-proxy-agent@6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== + dependencies: + agent-base "^6.0.2" + debug "^4.3.1" + socks "^2.6.1" + +socks@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + sonic-boom@^2.2.1: version "2.8.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" @@ -20582,6 +21286,16 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" +stream-http@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" + integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -20706,7 +21420,7 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -21283,6 +21997,13 @@ timeout-abort-controller@^1.1.1: abort-controller "^3.0.0" retimer "^2.0.0" +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + timm@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" @@ -21293,6 +22014,17 @@ tiny-invariant@^1.1.0, tiny-invariant@^1.2.0: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tiny-secp256k1@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" + integrity sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA== + dependencies: + bindings "^1.3.0" + bn.js "^4.11.8" + create-hmac "^1.1.7" + elliptic "^6.4.0" + nan "^2.13.2" + tiny-warning@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -21567,6 +22299,11 @@ tslib@1.14.1, tslib@^1.0.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, "tslib@^2.4.1 || ^1.9.3": version "2.6.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" @@ -21579,6 +22316,11 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -21591,11 +22333,21 @@ tween-functions@^1.2.0: resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -21712,6 +22464,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typeforce@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== + "typescript@^4.6.4 || ^5.0.0", typescript@~5.1.3: version "5.1.6" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" @@ -21727,7 +22484,7 @@ ua-parser-js@^0.7.24: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== -ua-parser-js@^1.0.32: +ua-parser-js@^1.0.32, ua-parser-js@^1.0.34: version "1.0.35" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== @@ -22034,7 +22791,7 @@ util.promisify@~1.0.0: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.0" -util@^0.12.4, util@^0.12.5: +util@^0.12.0, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -22129,6 +22886,13 @@ varint@^6.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== +varuint-bitcoin@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" + integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== + dependencies: + safe-buffer "^5.1.1" + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -22215,6 +22979,16 @@ vite-plugin-dts@~2.3.0: magic-string "^0.29.0" ts-morph "18.0.0" +vite-plugin-node-polyfills@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.11.1.tgz#5f947258a7025d9f22b72f45075fabc6763ed61b" + integrity sha512-9bIZGzMhaGk2s/UC0fpDyIsPo5e33xAUAgZOav2GMgxC5KD48lgTecMmWgL326idrXmLGI12ef52CsKHSvSV6Q== + dependencies: + "@rollup/plugin-inject" "^5.0.3" + buffer-polyfill "npm:buffer@^6.0.3" + node-stdlib-browser "^1.2.0" + process-polyfill "npm:process@^0.11.10" + vite-plugin-pwa@^0.16.4: version "0.16.4" resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.16.4.tgz#cd2618c8b4f83eac1493f2ed7b05f72552a2b735" @@ -22296,6 +23070,11 @@ vitest@~0.32.0: vite-node "0.32.4" why-is-node-running "^2.2.2" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -22880,6 +23659,13 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" +wif@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704" + integrity sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ== + dependencies: + bs58check "<3.0.0" + workbox-background-sync@6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" @@ -23285,6 +24071,11 @@ ws@7.5.3: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@7.5.9, ws@^7.2.0, ws@^7.4.0, ws@^7.4.5, ws@^7.4.6, ws@^7.5.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + ws@8.12.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" @@ -23299,11 +24090,6 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.4.0, ws@^7.4.5, ws@^7.4.6, ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - ws@^8.13.0, ws@^8.5.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" @@ -23377,7 +24163,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==