1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Add support for multiple Ledger & Trezor hardware accounts (#10505)

This commit is contained in:
David Walsh 2021-03-09 14:39:16 -06:00 committed by GitHub
parent 444d8dd51a
commit 92680cf56f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 423 additions and 202 deletions

View File

@ -817,6 +817,10 @@
"hardwareWalletConnected": { "hardwareWalletConnected": {
"message": "Hardware wallet connected" "message": "Hardware wallet connected"
}, },
"hardwareWalletLegacyDescription": {
"message": "(legacy)",
"description": "Text representing the MEW path"
},
"hardwareWallets": { "hardwareWallets": {
"message": "Connect a hardware wallet" "message": "Connect a hardware wallet"
}, },
@ -1480,6 +1484,9 @@
"selectAnAccount": { "selectAnAccount": {
"message": "Select an Account" "message": "Select an Account"
}, },
"selectAnAccountAlreadyConnected": {
"message": "This account has already been connected to MetaMask"
},
"selectAnAccountHelp": { "selectAnAccountHelp": {
"message": "Select the account to view in MetaMask" "message": "Select the account to view in MetaMask"
}, },

View File

@ -1289,11 +1289,16 @@ export default class MetamaskController extends EventEmitter {
} }
/** /**
* Imports an account from a trezor device. * Imports an account from a Trezor or Ledger device.
* *
* @returns {} keyState * @returns {} keyState
*/ */
async unlockHardwareWalletAccount(index, deviceName, hdPath) { async unlockHardwareWalletAccount(
index,
deviceName,
hdPath,
hdPathDescription,
) {
const keyring = await this.getKeyringForDevice(deviceName, hdPath); const keyring = await this.getKeyringForDevice(deviceName, hdPath);
keyring.setAccountToUnlock(index); keyring.setAccountToUnlock(index);
@ -1303,13 +1308,11 @@ export default class MetamaskController extends EventEmitter {
this.preferencesController.setAddresses(newAccounts); this.preferencesController.setAddresses(newAccounts);
newAccounts.forEach((address) => { newAccounts.forEach((address) => {
if (!oldAccounts.includes(address)) { if (!oldAccounts.includes(address)) {
const label = `${deviceName[0].toUpperCase()}${deviceName.slice(1)} ${
parseInt(index, 10) + 1
} ${hdPathDescription || ''}`.trim();
// Set the account label to Trezor 1 / Ledger 1, etc // Set the account label to Trezor 1 / Ledger 1, etc
this.preferencesController.setAccountLabel( this.preferencesController.setAccountLabel(address, label);
address,
`${deviceName[0].toUpperCase()}${deviceName.slice(1)} ${
parseInt(index, 10) + 1
}`,
);
// Select the account // Select the account
this.preferencesController.setSelectedAddress(address); this.preferencesController.setSelectedAddress(address);
} }

View File

@ -84,7 +84,7 @@
"@material-ui/core": "^4.11.0", "@material-ui/core": "^4.11.0",
"@metamask/contract-metadata": "^1.22.0", "@metamask/contract-metadata": "^1.22.0",
"@metamask/controllers": "^5.1.0", "@metamask/controllers": "^5.1.0",
"@metamask/eth-ledger-bridge-keyring": "^0.2.6", "@metamask/eth-ledger-bridge-keyring": "^0.3.0",
"@metamask/eth-token-tracker": "^3.0.1", "@metamask/eth-token-tracker": "^3.0.1",
"@metamask/etherscan-link": "^1.5.0", "@metamask/etherscan-link": "^1.5.0",
"@metamask/inpage-provider": "^8.0.4", "@metamask/inpage-provider": "^8.0.4",
@ -120,7 +120,7 @@
"eth-query": "^2.1.2", "eth-query": "^2.1.2",
"eth-rpc-errors": "^4.0.2", "eth-rpc-errors": "^4.0.2",
"eth-sig-util": "^3.0.0", "eth-sig-util": "^3.0.0",
"eth-trezor-keyring": "^0.5.2", "eth-trezor-keyring": "^0.6.0",
"ethereum-ens-network-map": "^1.0.2", "ethereum-ens-network-map": "^1.0.2",
"ethereumjs-abi": "^0.6.4", "ethereumjs-abi": "^0.6.4",
"ethereumjs-tx": "1.3.7", "ethereumjs-tx": "1.3.7",

View File

@ -588,13 +588,18 @@ describe('Actions', function () {
it('calls unlockHardwareWalletAccount in background', async function () { it('calls unlockHardwareWalletAccount in background', async function () {
const store = mockStore(); const store = mockStore();
const unlockHardwareWalletAccount = background.unlockHardwareWalletAccount.callsFake( const unlockHardwareWalletAccount = background.unlockHardwareWalletAccount.callsFake(
(_, __, ___, cb) => cb(), (_, __, ___, ____, cb) => cb(),
); );
actions._setBackgroundConnection(background); actions._setBackgroundConnection(background);
await store.dispatch( await store.dispatch(
actions.unlockHardwareWalletAccount('ledger', 0, `m/44'/60'/0'/0`), actions.unlockHardwareWalletAccounts(
[0],
'ledger',
`m/44'/60'/0'/0`,
'',
),
); );
assert(unlockHardwareWalletAccount.calledOnce); assert(unlockHardwareWalletAccount.calledOnce);
}); });
@ -602,7 +607,7 @@ describe('Actions', function () {
it('shows loading indicator and displays error', async function () { it('shows loading indicator and displays error', async function () {
const store = mockStore(); const store = mockStore();
background.unlockHardwareWalletAccount.callsFake((_, __, ___, cb) => background.unlockHardwareWalletAccount.callsFake((_, __, ___, ____, cb) =>
cb(new Error('error')), cb(new Error('error')),
); );
@ -610,12 +615,12 @@ describe('Actions', function () {
const expectedActions = [ const expectedActions = [
{ type: 'SHOW_LOADING_INDICATION', value: undefined }, { type: 'SHOW_LOADING_INDICATION', value: undefined },
{ type: 'HIDE_LOADING_INDICATION' },
{ type: 'DISPLAY_WARNING', value: 'error' }, { type: 'DISPLAY_WARNING', value: 'error' },
{ type: 'HIDE_LOADING_INDICATION' },
]; ];
try { try {
await store.dispatch(actions.unlockHardwareWalletAccount()); await store.dispatch(actions.unlockHardwareWalletAccounts([null]));
assert.fail('Should have thrown error'); assert.fail('Should have thrown error');
} catch (error) { } catch (error) {
assert.deepStrictEqual(store.getActions(), expectedActions); assert.deepStrictEqual(store.getActions(), expectedActions);

View File

@ -2,25 +2,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import getAccountLink from '../../../../lib/account-link'; import getAccountLink from '../../../../lib/account-link';
import Button from '../../../components/ui/button'; import Button from '../../../components/ui/button';
import Checkbox from '../../../components/ui/check-box';
import Dropdown from '../../../components/ui/dropdown'; import Dropdown from '../../../components/ui/dropdown';
class AccountList extends Component { class AccountList extends Component {
getHdPaths() {
const ledgerLiveKey = `m/44'/60'/0'/0/0`;
const mewKey = `m/44'/60'/0'`;
return [
{
name: `Ledger Live`,
value: ledgerLiveKey,
},
{
name: `Legacy (MEW / MyCrypto)`,
value: mewKey,
},
];
}
goToNextPage = () => { goToNextPage = () => {
// If we have < 5 accounts, it's restricted by BIP-44 // If we have < 5 accounts, it's restricted by BIP-44
if (this.props.accounts.length === 5) { if (this.props.accounts.length === 5) {
@ -35,8 +20,7 @@ class AccountList extends Component {
}; };
renderHdPathSelector() { renderHdPathSelector() {
const { onPathChange, selectedPath } = this.props; const { onPathChange, selectedPath, hdPaths } = this.props;
const options = this.getHdPaths();
return ( return (
<div> <div>
@ -47,7 +31,7 @@ class AccountList extends Component {
<div className="hw-connect__hdPath"> <div className="hw-connect__hdPath">
<Dropdown <Dropdown
className="hw-connect__hdPath__select" className="hw-connect__hdPath__select"
options={options} options={hdPaths}
selectedOption={selectedPath} selectedOption={selectedPath}
onChange={(value) => { onChange={(value) => {
onPathChange(value); onPathChange(value);
@ -81,45 +65,63 @@ class AccountList extends Component {
} }
renderAccounts() { renderAccounts() {
const { accounts, connectedAccounts } = this.props;
return ( return (
<div className="hw-account-list"> <div className="hw-account-list">
{this.props.accounts.map((account, idx) => ( {accounts.map((account, idx) => {
<div className="hw-account-list__item" key={account.address}> const accountAlreadyConnected = connectedAccounts.includes(
<div className="hw-account-list__item__radio"> account.address.toLowerCase(),
<input );
type="radio" const value = account.index;
name="selectedAccount" const checked =
id={`address-${idx}`} this.props.selectedAccounts.includes(account.index) ||
value={account.index} accountAlreadyConnected;
onClick={(e) => this.props.onAccountChange(e.target.value)}
checked={ return (
this.props.selectedAccount === account.index.toString() <div
} className="hw-account-list__item"
/> key={account.address}
<label title={
className="hw-account-list__item__label" accountAlreadyConnected
htmlFor={`address-${idx}`} ? this.context.t('selectAnAccountAlreadyConnected')
> : ''
<span className="hw-account-list__item__index"> }
{account.index + 1}
</span>
{`${account.address.slice(0, 4)}...${account.address.slice(
-4,
)}`}
<span className="hw-account-list__item__balance">{`${account.balance}`}</span>
</label>
</div>
<a
className="hw-account-list__item__link"
href={getAccountLink(account.address, this.props.network)}
target="_blank"
rel="noopener noreferrer"
title={this.context.t('etherscanView')}
> >
<img src="images/popout.svg" alt="" /> <div className="hw-account-list__item__checkbox">
</a> <Checkbox
</div> id={`address-${idx}`}
))} checked={checked}
disabled={accountAlreadyConnected}
onClick={() => {
this.props.onAccountChange(value);
}}
/>
<label
className="hw-account-list__item__label"
htmlFor={`address-${idx}`}
>
<span className="hw-account-list__item__index">
{account.index + 1}
</span>
{`${account.address.slice(0, 4)}...${account.address.slice(
-4,
)}`}
<span className="hw-account-list__item__balance">{`${account.balance}`}</span>
</label>
</div>
<a
className="hw-account-list__item__link"
href={getAccountLink(account.address, this.props.network)}
target="_blank"
rel="noopener noreferrer"
title={this.context.t('etherscanView')}
>
<img src="images/popout.svg" alt="" />
</a>
</div>
);
})}
</div> </div>
); );
} }
@ -144,7 +146,7 @@ class AccountList extends Component {
} }
renderButtons() { renderButtons() {
const disabled = this.props.selectedAccount === null; const disabled = this.props.selectedAccounts.length === 0;
const buttonProps = {}; const buttonProps = {};
if (disabled) { if (disabled) {
buttonProps.disabled = true; buttonProps.disabled = true;
@ -165,7 +167,11 @@ class AccountList extends Component {
large large
className="new-external-account-form__button unlock" className="new-external-account-form__button unlock"
disabled={disabled} disabled={disabled}
onClick={this.props.onUnlockAccount.bind(this, this.props.device)} onClick={this.props.onUnlockAccounts.bind(
this,
this.props.device,
this.props.selectedPath,
)}
> >
{this.context.t('unlock')} {this.context.t('unlock')}
</Button> </Button>
@ -201,14 +207,16 @@ AccountList.propTypes = {
selectedPath: PropTypes.string.isRequired, selectedPath: PropTypes.string.isRequired,
device: PropTypes.string.isRequired, device: PropTypes.string.isRequired,
accounts: PropTypes.array.isRequired, accounts: PropTypes.array.isRequired,
connectedAccounts: PropTypes.array.isRequired,
onAccountChange: PropTypes.func.isRequired, onAccountChange: PropTypes.func.isRequired,
onForgetDevice: PropTypes.func.isRequired, onForgetDevice: PropTypes.func.isRequired,
getPage: PropTypes.func.isRequired, getPage: PropTypes.func.isRequired,
network: PropTypes.string, network: PropTypes.string,
selectedAccount: PropTypes.string, selectedAccounts: PropTypes.array.isRequired,
onUnlockAccount: PropTypes.func, onUnlockAccounts: PropTypes.func,
onCancel: PropTypes.func, onCancel: PropTypes.func,
onAccountRestriction: PropTypes.func, onAccountRestriction: PropTypes.func,
hdPaths: PropTypes.array.isRequired,
}; };
AccountList.contextTypes = { AccountList.contextTypes = {

View File

@ -2,7 +2,10 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import * as actions from '../../../store/actions'; import * as actions from '../../../store/actions';
import { getMetaMaskAccounts } from '../../../selectors'; import {
getMetaMaskAccounts,
getMetaMaskAccountsConnected,
} from '../../../selectors';
import { formatBalance } from '../../../helpers/utils/util'; import { formatBalance } from '../../../helpers/utils/util';
import { getMostRecentOverviewPage } from '../../../ducks/history/history'; import { getMostRecentOverviewPage } from '../../../ducks/history/history';
import SelectHardware from './select-hardware'; import SelectHardware from './select-hardware';
@ -10,10 +13,17 @@ import AccountList from './account-list';
const U2F_ERROR = 'U2F'; const U2F_ERROR = 'U2F';
const LEDGER_LIVE_PATH = `m/44'/60'/0'/0/0`;
const MEW_PATH = `m/44'/60'/0'`;
const HD_PATHS = [
{ name: 'Ledger Live', value: LEDGER_LIVE_PATH },
{ name: 'Legacy (MEW / MyCrypto)', value: MEW_PATH },
];
class ConnectHardwareForm extends Component { class ConnectHardwareForm extends Component {
state = { state = {
error: null, error: null,
selectedAccount: null, selectedAccounts: [],
accounts: [], accounts: [],
browserSupported: true, browserSupported: true,
unlocked: false, unlocked: false,
@ -24,9 +34,7 @@ class ConnectHardwareForm extends Component {
const { accounts } = nextProps; const { accounts } = nextProps;
const newAccounts = this.state.accounts.map((a) => { const newAccounts = this.state.accounts.map((a) => {
const normalizedAddress = a.address.toLowerCase(); const normalizedAddress = a.address.toLowerCase();
const balanceValue = const balanceValue = accounts[normalizedAddress]?.balance || null;
(accounts[normalizedAddress] && accounts[normalizedAddress].balance) ||
null;
a.balance = balanceValue ? formatBalance(balanceValue, 6) : '...'; a.balance = balanceValue ? formatBalance(balanceValue, 6) : '...';
return a; return a;
}); });
@ -39,13 +47,11 @@ class ConnectHardwareForm extends Component {
async checkIfUnlocked() { async checkIfUnlocked() {
for (const device of ['trezor', 'ledger']) { for (const device of ['trezor', 'ledger']) {
const unlocked = await this.props.checkHardwareStatus( const path = this.props.defaultHdPaths[device];
device, const unlocked = await this.props.checkHardwareStatus(device, path);
this.props.defaultHdPaths[device],
);
if (unlocked) { if (unlocked) {
this.setState({ unlocked: true }); this.setState({ unlocked: true });
this.getPage(device, 0, this.props.defaultHdPaths[device]); this.getPage(device, 0, path);
} }
} }
} }
@ -65,11 +71,20 @@ class ConnectHardwareForm extends Component {
device: this.state.device, device: this.state.device,
path, path,
}); });
this.setState({
selectedAccounts: [],
});
this.getPage(this.state.device, 0, path); this.getPage(this.state.device, 0, path);
}; };
onAccountChange = (account) => { onAccountChange = (account) => {
this.setState({ selectedAccount: account.toString(), error: null }); let { selectedAccounts } = this.state;
if (selectedAccounts.includes(account)) {
selectedAccounts = selectedAccounts.filter((acc) => account !== acc);
} else {
selectedAccounts.push(account);
}
this.setState({ selectedAccounts, error: null });
}; };
onAccountRestriction = () => { onAccountRestriction = () => {
@ -95,37 +110,23 @@ class ConnectHardwareForm extends Component {
this.showTemporaryAlert(); this.showTemporaryAlert();
} }
const newState = { unlocked: true, device, error: null };
// Default to the first account
if (this.state.selectedAccount === null) {
accounts.forEach((a) => {
if (a.address.toLowerCase() === this.props.address) {
newState.selectedAccount = a.index.toString();
}
});
// If the page doesn't contain the selected account, let's deselect it
} else if (
!accounts.filter(
(a) => a.index.toString() === this.state.selectedAccount,
).length
) {
newState.selectedAccount = null;
}
// Map accounts with balances // Map accounts with balances
newState.accounts = accounts.map((account) => { const newAccounts = accounts.map((account) => {
const normalizedAddress = account.address.toLowerCase(); const normalizedAddress = account.address.toLowerCase();
const balanceValue = const balanceValue =
(this.props.accounts[normalizedAddress] && this.props.accounts[normalizedAddress]?.balance || null;
this.props.accounts[normalizedAddress].balance) ||
null;
account.balance = balanceValue account.balance = balanceValue
? formatBalance(balanceValue, 6) ? formatBalance(balanceValue, 6)
: '...'; : '...';
return account; return account;
}); });
this.setState(newState); this.setState({
accounts: newAccounts,
unlocked: true,
device,
error: null,
});
} }
}) })
.catch((e) => { .catch((e) => {
@ -149,7 +150,7 @@ class ConnectHardwareForm extends Component {
.then((_) => { .then((_) => {
this.setState({ this.setState({
error: null, error: null,
selectedAccount: null, selectedAccounts: [],
accounts: [], accounts: [],
unlocked: false, unlocked: false,
}); });
@ -159,18 +160,28 @@ class ConnectHardwareForm extends Component {
}); });
}; };
onUnlockAccount = (device) => { onUnlockAccounts = (device, path) => {
const { const {
history, history,
mostRecentOverviewPage, mostRecentOverviewPage,
unlockHardwareWalletAccount, unlockHardwareWalletAccounts,
} = this.props; } = this.props;
const { selectedAccounts } = this.state;
if (this.state.selectedAccount === null) { if (selectedAccounts.length === 0) {
this.setState({ error: this.context.t('accountSelectionRequired') }); this.setState({ error: this.context.t('accountSelectionRequired') });
} }
unlockHardwareWalletAccount(this.state.selectedAccount, device) const description =
MEW_PATH === path
? this.context.t('hardwareWalletLegacyDescription')
: '';
return unlockHardwareWalletAccounts(
selectedAccounts,
device,
path || null,
description,
)
.then((_) => { .then((_) => {
this.context.metricsEvent({ this.context.metricsEvent({
eventOpts: { eventOpts: {
@ -243,14 +254,16 @@ class ConnectHardwareForm extends Component {
selectedPath={this.props.defaultHdPaths[this.state.device]} selectedPath={this.props.defaultHdPaths[this.state.device]}
device={this.state.device} device={this.state.device}
accounts={this.state.accounts} accounts={this.state.accounts}
selectedAccount={this.state.selectedAccount} connectedAccounts={this.props.connectedAccounts}
selectedAccounts={this.state.selectedAccounts}
onAccountChange={this.onAccountChange} onAccountChange={this.onAccountChange}
network={this.props.network} network={this.props.network}
getPage={this.getPage} getPage={this.getPage}
onUnlockAccount={this.onUnlockAccount} onUnlockAccounts={this.onUnlockAccounts}
onForgetDevice={this.onForgetDevice} onForgetDevice={this.onForgetDevice}
onCancel={this.onCancel} onCancel={this.onCancel}
onAccountRestriction={this.onAccountRestriction} onAccountRestriction={this.onAccountRestriction}
hdPaths={HD_PATHS}
/> />
); );
} }
@ -271,21 +284,22 @@ ConnectHardwareForm.propTypes = {
forgetDevice: PropTypes.func, forgetDevice: PropTypes.func,
showAlert: PropTypes.func, showAlert: PropTypes.func,
hideAlert: PropTypes.func, hideAlert: PropTypes.func,
unlockHardwareWalletAccount: PropTypes.func, unlockHardwareWalletAccounts: PropTypes.func,
setHardwareWalletDefaultHdPath: PropTypes.func, setHardwareWalletDefaultHdPath: PropTypes.func,
history: PropTypes.object, history: PropTypes.object,
network: PropTypes.string, network: PropTypes.string,
accounts: PropTypes.object, accounts: PropTypes.object,
address: PropTypes.string, connectedAccounts: PropTypes.array.isRequired,
defaultHdPaths: PropTypes.object, defaultHdPaths: PropTypes.object,
mostRecentOverviewPage: PropTypes.string.isRequired, mostRecentOverviewPage: PropTypes.string.isRequired,
}; };
const mapStateToProps = (state) => { const mapStateToProps = (state) => {
const { const {
metamask: { network, selectedAddress }, metamask: { network },
} = state; } = state;
const accounts = getMetaMaskAccounts(state); const accounts = getMetaMaskAccounts(state);
const connectedAccounts = getMetaMaskAccountsConnected(state);
const { const {
appState: { defaultHdPaths }, appState: { defaultHdPaths },
} = state; } = state;
@ -293,7 +307,7 @@ const mapStateToProps = (state) => {
return { return {
network, network,
accounts, accounts,
address: selectedAddress, connectedAccounts,
defaultHdPaths, defaultHdPaths,
mostRecentOverviewPage: getMostRecentOverviewPage(state), mostRecentOverviewPage: getMostRecentOverviewPage(state),
}; };
@ -313,9 +327,19 @@ const mapDispatchToProps = (dispatch) => {
forgetDevice: (deviceName) => { forgetDevice: (deviceName) => {
return dispatch(actions.forgetDevice(deviceName)); return dispatch(actions.forgetDevice(deviceName));
}, },
unlockHardwareWalletAccount: (index, deviceName, hdPath) => { unlockHardwareWalletAccounts: (
indexes,
deviceName,
hdPath,
hdPathDescription,
) => {
return dispatch( return dispatch(
actions.unlockHardwareWalletAccount(index, deviceName, hdPath), actions.unlockHardwareWalletAccounts(
indexes,
deviceName,
hdPath,
hdPathDescription,
),
); );
}, },
showAlert: (msg) => dispatch(actions.showAlert(msg)), showAlert: (msg) => dispatch(actions.showAlert(msg)),

View File

@ -256,12 +256,11 @@
width: 24px; width: 24px;
} }
&__item__radio { &__item__checkbox {
display: flex; display: flex;
flex: 1; flex: 1;
input { input {
padding: 10px;
margin-top: 13px; margin-top: 13px;
} }
} }

View File

@ -158,6 +158,12 @@ export const getMetaMaskAccountsOrdered = createSelector(
.map((address) => ({ ...identities[address], ...accounts[address] })), .map((address) => ({ ...identities[address], ...accounts[address] })),
); );
export const getMetaMaskAccountsConnected = createSelector(
getMetaMaskAccountsOrdered,
(connectedAccounts) =>
connectedAccounts.map(({ address }) => address.toLowerCase()),
);
export function isBalanceCached(state) { export function isBalanceCached(state) {
const selectedAccountBalance = const selectedAccountBalance =
state.metamask.accounts[getSelectedAddress(state)].balance; state.metamask.accounts[getSelectedAddress(state)].balance;

View File

@ -422,33 +422,40 @@ export function connectHardware(deviceName, page, hdPath) {
}; };
} }
export function unlockHardwareWalletAccount(index, deviceName, hdPath) { export function unlockHardwareWalletAccounts(
indexes,
deviceName,
hdPath,
hdPathDescription,
) {
log.debug( log.debug(
`background.unlockHardwareWalletAccount`, `background.unlockHardwareWalletAccount`,
index, indexes,
deviceName, deviceName,
hdPath, hdPath,
hdPathDescription,
); );
return (dispatch) => { return async (dispatch) => {
dispatch(showLoadingIndication()); dispatch(showLoadingIndication());
return new Promise((resolve, reject) => {
background.unlockHardwareWalletAccount(
index,
deviceName,
hdPath,
(err) => {
dispatch(hideLoadingIndication());
if (err) {
log.error(err);
dispatch(displayWarning(err.message));
reject(err);
return;
}
resolve(); for (const index of indexes) {
}, try {
); await promisifiedBackground.unlockHardwareWalletAccount(
}); index,
deviceName,
hdPath,
hdPathDescription,
);
} catch (e) {
log.error(e);
dispatch(displayWarning(e.message));
dispatch(hideLoadingIndication());
throw e;
}
}
dispatch(hideLoadingIndication());
return undefined;
}; };
} }

282
yarn.lock
View File

@ -2247,10 +2247,10 @@
resolved "https://registry.yarnpkg.com/@metamask/eslint-config/-/eslint-config-5.0.0.tgz#70c1ca854ce9b3b1cabd89cb736e8bb36127d164" resolved "https://registry.yarnpkg.com/@metamask/eslint-config/-/eslint-config-5.0.0.tgz#70c1ca854ce9b3b1cabd89cb736e8bb36127d164"
integrity sha512-eZt17NofPMmtoNjmBGOhUdAmyL0C+2/smtqAkVhpzZsU2ZGv+4Kekn8p8gcNONOYN8EotpWUxGkN1CTdVLdWZw== integrity sha512-eZt17NofPMmtoNjmBGOhUdAmyL0C+2/smtqAkVhpzZsU2ZGv+4Kekn8p8gcNONOYN8EotpWUxGkN1CTdVLdWZw==
"@metamask/eth-ledger-bridge-keyring@^0.2.6": "@metamask/eth-ledger-bridge-keyring@^0.3.0":
version "0.2.6" version "0.3.0"
resolved "https://registry.yarnpkg.com/@metamask/eth-ledger-bridge-keyring/-/eth-ledger-bridge-keyring-0.2.6.tgz#2721c118a5eeb3685d372d0258f2a3b03dd01315" resolved "https://registry.yarnpkg.com/@metamask/eth-ledger-bridge-keyring/-/eth-ledger-bridge-keyring-0.3.0.tgz#4fc2a6345199e18f94c098d8c632d3d55add5c36"
integrity sha512-7OtX24lHSCioFZM+x4ZCsndT1wkI7cf8+ua3UntYqHFSRu/SDf6xVNBuD8isvWidNbVdcJKhfJuO3vFCDNsPBw== integrity sha512-Iv9fmxPClBohIK6ciy0ZVYNTUodlmrdQt19cZDAicSfFdR2Gcgbq2FDA75o63+fW8TwPEohhDRV/vWQ0MU5esw==
dependencies: dependencies:
eth-sig-util "^1.4.2" eth-sig-util "^1.4.2"
ethereumjs-tx "^1.3.4" ethereumjs-tx "^1.3.4"
@ -3069,10 +3069,10 @@
"@babel/runtime" "^7.10.3" "@babel/runtime" "^7.10.3"
"@testing-library/dom" "^7.17.1" "@testing-library/dom" "^7.17.1"
"@trezor/blockchain-link@^1.0.15": "@trezor/blockchain-link@^1.0.17":
version "1.0.15" version "1.0.17"
resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-1.0.15.tgz#a3f7c1122d568a1a945f7f0c43de217cdc2d3c7a" resolved "https://registry.yarnpkg.com/@trezor/blockchain-link/-/blockchain-link-1.0.17.tgz#3155b44ee9beb71326986d404385ede673519b3c"
integrity sha512-qcGHa1OXHdQb6SoPW6yfXyomkKwtd/JpFXL4eSGvAl08roxtgmtXNHmQaJ8F0oRSClbPEprqf/qR3BPdK33HoQ== integrity sha512-o1ZmZVdhXM8K4OY61A6l/pvmasC6OTGDeDliVlVnNdy3eVDVlnEivQVnMD7CvQr0Crxl1Flox0mp90Ljp/DIkA==
dependencies: dependencies:
bignumber.js "^9.0.1" bignumber.js "^9.0.1"
es6-promise "^4.2.8" es6-promise "^4.2.8"
@ -3081,7 +3081,7 @@
tiny-worker "^2.3.0" tiny-worker "^2.3.0"
ws "^7.4.0" ws "^7.4.0"
"@trezor/rollout@^1.0.4": "@trezor/rollout@1.0.7":
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/@trezor/rollout/-/rollout-1.0.7.tgz#e4ee8281866ab6712ccc8873f3a383621b1a18ca" resolved "https://registry.yarnpkg.com/@trezor/rollout/-/rollout-1.0.7.tgz#e4ee8281866ab6712ccc8873f3a383621b1a18ca"
integrity sha512-yFN2J/g3Epv1dM0dCsRnOagK7lrsfs7vDy1uc4T7DF9qtN0ZGO/tdCjSdgRGUZECRdXRcPrzRUsZDXGOkPcLoA== integrity sha512-yFN2J/g3Epv1dM0dCsRnOagK7lrsfs7vDy1uc4T7DF9qtN0ZGO/tdCjSdgRGUZECRdXRcPrzRUsZDXGOkPcLoA==
@ -3089,10 +3089,10 @@
cross-fetch "^3.0.6" cross-fetch "^3.0.6"
runtypes "^5.0.1" runtypes "^5.0.1"
"@trezor/utxo-lib@0.1.1", "@trezor/utxo-lib@^0.1.1": "@trezor/utxo-lib@0.1.2", "@trezor/utxo-lib@^0.1.2":
version "0.1.1" version "0.1.2"
resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-0.1.1.tgz#63cb4b3accc90352a42a1c866fce8bfbb1c94b26" resolved "https://registry.yarnpkg.com/@trezor/utxo-lib/-/utxo-lib-0.1.2.tgz#19319a424b0d0c648b0df456f1849eb08697fb44"
integrity sha512-Wonj9ldKCeoajCV6lSE6+hJ2hdPxmVaysWRO9GxhnKyiOdRhiOIQcdKOiXYqpcxwkIbbL9eLGDg73tfn3MUa6w== integrity sha512-ONAsg8LAyZY9g6X/qgqloUHwWsqtRmrx2Wt3wkz+7LO2VdE69HktAHWUjJLK9drskNwly3Fp0GKK6ZbbtX+Ghw==
dependencies: dependencies:
bech32 "0.0.3" bech32 "0.0.3"
bigi "^1.4.0" bigi "^1.4.0"
@ -3104,6 +3104,7 @@
create-hmac "^1.1.3" create-hmac "^1.1.3"
debug "~3.1.0" debug "~3.1.0"
ecurve "^1.0.0" ecurve "^1.0.0"
int64-buffer "0.99.1007"
merkle-lib "^2.0.10" merkle-lib "^2.0.10"
pushdata-bitcoin "^1.0.1" pushdata-bitcoin "^1.0.1"
randombytes "^2.0.1" randombytes "^2.0.1"
@ -5669,21 +5670,15 @@ batch-processor@1.0.0:
resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8"
integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=
bchaddrjs@0.4.9: bchaddrjs@^0.5.2:
version "0.4.9" version "0.5.2"
resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.4.9.tgz#c17036bf5bab31bfbb9f3cec432c7c578f0faf46" resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.5.2.tgz#1f52b5077329774e7c82d4882964628106bb11a0"
integrity sha512-Mf5Uf+P452ltYg1b/NncX/eAEKW+iAfUs8rO1mcgro8S+/WG6gRh8OqgBtyCK1jBHViajovWoAG+ZCkKbhZbNg== integrity sha512-OO7gIn3m7ea4FVx4cT8gdlWQR2+++EquhdpWQJH9BQjK63tJJ6ngB3QMZDO6DiBoXiIGUsTPHjlrHVxPGcGxLQ==
dependencies: dependencies:
bs58check "^2.1.2" bs58check "2.1.2"
cashaddrjs "^0.3.12" buffer "^6.0.3"
cashaddrjs "0.4.4"
bchaddrjs@^0.3.2: stream-browserify "^3.0.0"
version "0.3.2"
resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.3.2.tgz#62d4915f8f69012b7a16ae9fd0c99eca3a8ccf91"
integrity sha512-jpoq2GX6PphcCpuvvrQG4oQmEzn4nGQSm5dT208W72r9GDdbmNPi0hG9TY/dFF3r9sNtdl0qKwNsh8dNL3Q62g==
dependencies:
bs58check "^2.1.2"
cashaddrjs "^0.3.3"
bcrypt-pbkdf@^1.0.0: bcrypt-pbkdf@^1.0.0:
version "1.0.2" version "1.0.2"
@ -6280,7 +6275,7 @@ bs58@^2.0.1:
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40= integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40=
bs58check@<3.0.0, bs58check@^2.0.0, bs58check@^2.1.1, bs58check@^2.1.2: bs58check@2.1.2, bs58check@<3.0.0, bs58check@^2.0.0, bs58check@^2.1.1, bs58check@^2.1.2:
version "2.1.2" version "2.1.2"
resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
@ -6385,6 +6380,14 @@ buffer@^5.0.5, buffer@^5.2.1:
base64-js "^1.3.1" base64-js "^1.3.1"
ieee754 "^1.1.13" ieee754 "^1.1.13"
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.2.1: buffer@~5.2.1:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
@ -6556,6 +6559,14 @@ caching-transform@^4.0.0:
package-hash "^4.0.0" package-hash "^4.0.0"
write-file-atomic "^3.0.0" write-file-atomic "^3.0.0"
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
dependencies:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
call-me-maybe@^1.0.1: call-me-maybe@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
@ -6658,10 +6669,10 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
cashaddrjs@^0.3.12, cashaddrjs@^0.3.3: cashaddrjs@0.4.4:
version "0.3.12" version "0.4.4"
resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.3.12.tgz#73089588113459741e854aa842db1f7816d8428d" resolved "https://registry.yarnpkg.com/cashaddrjs/-/cashaddrjs-0.4.4.tgz#169f1ae620d325db77700273d972282adeeee331"
integrity sha512-GdjCYMVwd86HXcFcxyEZQLPLFv8a/u0ccYPsO0PpnUW26LhZzHX9l9QA+DjaeUah7tnebwPs33NWDbbUy8iVYQ== integrity sha512-xZkuWdNOh0uq/mxJIng6vYWfTowZLd9F4GMAlp2DwFHlcCqCm91NtuAc47RuV4L7r4PYcY5p6Cr2OKNb4hnkWA==
dependencies: dependencies:
big-integer "1.6.36" big-integer "1.6.36"
@ -9139,6 +9150,28 @@ es-abstract@^1.18.0-next.0:
string.prototype.trimend "^1.0.1" string.prototype.trimend "^1.0.1"
string.prototype.trimstart "^1.0.1" string.prototype.trimstart "^1.0.1"
es-abstract@^1.18.0-next.2:
version "1.18.0"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
dependencies:
call-bind "^1.0.2"
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
get-intrinsic "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.2"
is-callable "^1.2.3"
is-negative-zero "^2.0.1"
is-regex "^1.1.2"
is-string "^1.0.5"
object-inspect "^1.9.0"
object-keys "^1.1.1"
object.assign "^4.1.2"
string.prototype.trimend "^1.0.4"
string.prototype.trimstart "^1.0.4"
unbox-primitive "^1.0.0"
es-to-primitive@^1.2.1: es-to-primitive@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
@ -9902,16 +9935,16 @@ eth-simple-keyring@^3.5.0:
events "^1.1.1" events "^1.1.1"
xtend "^4.0.1" xtend "^4.0.1"
eth-trezor-keyring@^0.5.2: eth-trezor-keyring@^0.6.0:
version "0.5.2" version "0.6.0"
resolved "https://registry.yarnpkg.com/eth-trezor-keyring/-/eth-trezor-keyring-0.5.2.tgz#b2bbb52701e382e831d9889bc4dd71faaf8000c3" resolved "https://registry.yarnpkg.com/eth-trezor-keyring/-/eth-trezor-keyring-0.6.0.tgz#85192ab5d98be28512a58b0bc731e4e6a124ba27"
integrity sha512-ciTDHBdKJQciNdGnoEdiORRcbHLUX1NvGmesup6EsW5eD023kvw2xVQlfDj8YxuUsA+sX47IDbS/SwWxvN/PiQ== integrity sha512-10r2uYbrNdYlzgHy2VFEyoGmGw3YIBa21WDT365cTzIQ7C6ozAvfZ9t5YZkTVY2AQP5TVS41UZJdbj0R2DG2Lg==
dependencies: dependencies:
eth-sig-util "^1.4.2" eth-sig-util "^1.4.2"
ethereumjs-tx "^1.3.4" ethereumjs-tx "^1.3.4"
ethereumjs-util "^5.1.5" ethereumjs-util "^5.1.5"
hdkey "0.8.0" hdkey "0.8.0"
trezor-connect "8.1.19-extended" trezor-connect "8.1.23-extended"
eth-tx-summary@^3.1.2: eth-tx-summary@^3.1.2:
version "3.2.4" version "3.2.4"
@ -11670,6 +11703,15 @@ get-folder-size@^2.0.0:
gar "^1.0.4" gar "^1.0.4"
tiny-each-async "2.0.3" tiny-each-async "2.0.3"
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.1"
get-iterator@^1.0.2: get-iterator@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82"
@ -12440,6 +12482,11 @@ has-ansi@^2.0.0:
dependencies: dependencies:
ansi-regex "^2.0.0" ansi-regex "^2.0.0"
has-bigints@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113"
integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==
has-binary2@~1.0.2: has-binary2@~1.0.2:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d"
@ -12489,6 +12536,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
has-symbols@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
has-to-string-tag-x@^1.2.0: has-to-string-tag-x@^1.2.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d"
@ -12597,13 +12649,13 @@ hastscript@^6.0.0:
property-information "^5.0.0" property-information "^5.0.0"
space-separated-tokens "^1.0.0" space-separated-tokens "^1.0.0"
hd-wallet@9.1.0: hd-wallet@9.1.1:
version "9.1.0" version "9.1.1"
resolved "https://registry.yarnpkg.com/hd-wallet/-/hd-wallet-9.1.0.tgz#0cfdae4e0d7147438c7802fedce29b7d049c0f5f" resolved "https://registry.yarnpkg.com/hd-wallet/-/hd-wallet-9.1.1.tgz#4a6e49ff09e8cb4bbe0127133cfaf80e24142096"
integrity sha512-Oto94Q1e9C9wPsrxErky8TFoOqERiL6EZEo3jZ3BSPu36hpz1KfsB3MqPorvoOWQt6AjC5FoIy/lIPLx3aDMew== integrity sha512-Z1UhEcFv6aGrPL2fDDkEzO3MwPuiAKbLAs8MSNQ1BxeW9c2HxXjTWMEfx8xhQ0gv10Blf1bmXLm+itOe1+nh6Q==
dependencies: dependencies:
"@trezor/utxo-lib" "0.1.1" "@trezor/utxo-lib" "0.1.2"
bchaddrjs "^0.3.2" bchaddrjs "^0.5.2"
bignumber.js "^9.0.1" bignumber.js "^9.0.1"
queue "^6.0.1" queue "^6.0.1"
socket.io-client "^2.2.0" socket.io-client "^2.2.0"
@ -12947,7 +12999,7 @@ idna-uts46@^1.0.1:
dependencies: dependencies:
punycode "^2.1.0" punycode "^2.1.0"
ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.1.8: ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.1.8, ieee754@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@ -13195,6 +13247,11 @@ insert-module-globals@^7.0.0:
undeclared-identifiers "^1.1.2" undeclared-identifiers "^1.1.2"
xtend "^4.0.0" xtend "^4.0.0"
int64-buffer@0.99.1007:
version "0.99.1007"
resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-0.99.1007.tgz#211ea089a2fdb960070a2e77cd6d17dc456a5220"
integrity sha512-XDBEu44oSTqlvCSiOZ/0FoUkpWu/vwjJLGSKDabNISPQNZ5wub1FodGHBljRsrR0IXRPq7SslshZYMuA55CgTQ==
interface-connection@~0.3.2, interface-connection@~0.3.3: interface-connection@~0.3.2, interface-connection@~0.3.3:
version "0.3.3" version "0.3.3"
resolved "https://registry.yarnpkg.com/interface-connection/-/interface-connection-0.3.3.tgz#d82dd81efee5f2d40d7cb0fd75e6e858f92fa199" resolved "https://registry.yarnpkg.com/interface-connection/-/interface-connection-0.3.3.tgz#d82dd81efee5f2d40d7cb0fd75e6e858f92fa199"
@ -13861,6 +13918,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-bigint@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2"
integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==
is-binary-path@^1.0.0: is-binary-path@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
@ -13880,6 +13942,13 @@ is-boolean-object@^1.0.0:
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93"
integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=
is-boolean-object@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
dependencies:
call-bind "^1.0.0"
is-buffer@^1.0.2, is-buffer@^1.1.0, is-buffer@^1.1.5, is-buffer@~1.1.6: is-buffer@^1.0.2, is-buffer@^1.1.0, is-buffer@^1.1.5, is-buffer@~1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@ -13895,6 +13964,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==
is-callable@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
is-ci@^1.0.10: is-ci@^1.0.10:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
@ -14177,6 +14251,11 @@ is-negative-zero@^2.0.0:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461"
integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=
is-negative-zero@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-npm@^1.0.0: is-npm@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
@ -14192,6 +14271,11 @@ is-number-object@^1.0.3:
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799"
integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=
is-number-object@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
is-number@^2.1.0: is-number@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@ -14330,6 +14414,14 @@ is-regex@^1.0.4, is-regex@^1.1.1:
dependencies: dependencies:
has-symbols "^1.0.1" has-symbols "^1.0.1"
is-regex@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251"
integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==
dependencies:
call-bind "^1.0.2"
has-symbols "^1.0.1"
is-regexp@^2.0.0: is-regexp@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
@ -18165,6 +18257,11 @@ object-inspect@^1.6.0, object-inspect@^1.7.0, object-inspect@^1.8.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0"
integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==
object-inspect@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
object-inspect@~1.6.0: object-inspect@~1.6.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b"
@ -18212,6 +18309,16 @@ object.assign@^4.0.4, object.assign@^4.1.0, object.assign@^4.1.1:
has-symbols "^1.0.1" has-symbols "^1.0.1"
object-keys "^1.1.1" object-keys "^1.1.1"
object.assign@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
dependencies:
call-bind "^1.0.0"
define-properties "^1.1.3"
has-symbols "^1.0.1"
object-keys "^1.1.1"
object.defaults@^1.0.0, object.defaults@^1.1.0: object.defaults@^1.0.0, object.defaults@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
@ -18290,6 +18397,16 @@ object.values@^1.0.4, object.values@^1.1.0, object.values@^1.1.1:
function-bind "^1.1.1" function-bind "^1.1.1"
has "^1.0.3" has "^1.0.3"
object.values@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
es-abstract "^1.18.0-next.2"
has "^1.0.3"
objectorarray@^1.0.4: objectorarray@^1.0.4:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483" resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483"
@ -21024,7 +21141,7 @@ readable-stream@1.1.x, readable-stream@^1.0.33:
isarray "0.0.1" isarray "0.0.1"
string_decoder "~0.10.x" string_decoder "~0.10.x"
"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.5, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: "readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.0.5, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
version "3.6.0" version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@ -23158,6 +23275,14 @@ stream-browserify@^2.0.0, stream-browserify@^2.0.1:
inherits "~2.0.1" inherits "~2.0.1"
readable-stream "^2.0.2" readable-stream "^2.0.2"
stream-browserify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f"
integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==
dependencies:
inherits "~2.0.4"
readable-stream "^3.5.0"
stream-combiner2@^1.1.1: stream-combiner2@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
@ -23353,6 +23478,14 @@ string.prototype.trimend@^1.0.1:
define-properties "^1.1.3" define-properties "^1.1.3"
es-abstract "^1.17.5" es-abstract "^1.17.5"
string.prototype.trimend@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80"
integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
string.prototype.trimstart@^1.0.1: string.prototype.trimstart@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
@ -23361,6 +23494,14 @@ string.prototype.trimstart@^1.0.1:
define-properties "^1.1.3" define-properties "^1.1.3"
es-abstract "^1.17.5" es-abstract "^1.17.5"
string.prototype.trimstart@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed"
integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
string_decoder@0.10, string_decoder@~0.10.x: string_decoder@0.10, string_decoder@~0.10.x:
version "0.10.31" version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
@ -24236,37 +24377,37 @@ tree-kill@^1.2.2:
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
trezor-connect@8.1.19-extended: trezor-connect@8.1.23-extended:
version "8.1.19-extended" version "8.1.23-extended"
resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.1.19-extended.tgz#2b5f7f232f2064121f9b3adc05cbf2bc2f7c08cc" resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.1.23-extended.tgz#353369a9f136216630b9673a239dcdb140abe49e"
integrity sha512-elm4fgPB79q5e+q8/i7pW2ms3mwkSQjYrgUD2nV40yP4cP8Cp7DYtu0bh4ZYhMNN0+BFwIYw86fvPSCo6D7OQA== integrity sha512-Otlim+/tPiywWcuK7uIVP9UDUPvIhkvdBOPHzV6UKVylbqecTKb1LcUNq3tSfHq78CIsWvTa6g5AQrHq1wSPAw==
dependencies: dependencies:
"@babel/runtime" "^7.12.5" "@babel/runtime" "^7.12.5"
"@trezor/blockchain-link" "^1.0.15" "@trezor/blockchain-link" "^1.0.17"
"@trezor/rollout" "^1.0.4" "@trezor/rollout" "1.0.7"
"@trezor/utxo-lib" "^0.1.1" "@trezor/utxo-lib" "^0.1.2"
bchaddrjs "0.4.9" bchaddrjs "^0.5.2"
bignumber.js "^9.0.1" bignumber.js "^9.0.1"
bowser "^2.11.0" bowser "^2.11.0"
events "^3.2.0" events "^3.2.0"
hd-wallet "9.1.0" hd-wallet "9.1.1"
keccak "^3.0.1" keccak "^3.0.1"
node-fetch "^2.6.1" node-fetch "^2.6.1"
parse-uri "^1.0.3" parse-uri "^1.0.3"
tiny-worker "^2.3.0" tiny-worker "^2.3.0"
trezor-link "1.7.1" trezor-link "1.7.3"
whatwg-fetch "^3.5.0" whatwg-fetch "^3.5.0"
trezor-link@1.7.1: trezor-link@1.7.3:
version "1.7.1" version "1.7.3"
resolved "https://registry.yarnpkg.com/trezor-link/-/trezor-link-1.7.1.tgz#8ad08f59ae4c9d49c44d1ed8be0bdb6a3e4bbe5b" resolved "https://registry.yarnpkg.com/trezor-link/-/trezor-link-1.7.3.tgz#33c4b558913a3da395243018c04ee1804affcdc3"
integrity sha512-2oEEUJgs4RmwifFaE+B14z4zUBVoekkXyT7S6U6667Fnqg40tpGC+gqbqwaeU/2ARsAXvbD5YBhPdTLsL9Up9w== integrity sha512-KaVYcK96BLD+cBuYmJmsxr6G9Z0ZeO6VYPhcYQyFxJ7jvc6/UvTmdACZdHjlUD7U5VuJEGMI4G8L3IGxFTFv4Q==
dependencies: dependencies:
bigi "^1.4.1" bigi "^1.4.1"
ecurve "^1.0.3" ecurve "^1.0.3"
json-stable-stringify "^1.0.1" json-stable-stringify "^1.0.1"
node-fetch "^2.6.1" node-fetch "^2.6.1"
object.values "^1.1.1" object.values "^1.1.2"
protobufjs-old-fixed-webpack "3.8.5" protobufjs-old-fixed-webpack "3.8.5"
semver-compare "^1.0.0" semver-compare "^1.0.0"
whatwg-fetch "^3.5.0" whatwg-fetch "^3.5.0"
@ -24535,6 +24676,16 @@ umd@^3.0.0:
resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
unbox-primitive@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.0.tgz#eeacbc4affa28e9b3d36b5eaeccc50b3251b1d3f"
integrity sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==
dependencies:
function-bind "^1.1.1"
has-bigints "^1.0.0"
has-symbols "^1.0.0"
which-boxed-primitive "^1.0.1"
unc-path-regex@^0.1.2: unc-path-regex@^0.1.2:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
@ -25751,6 +25902,17 @@ whatwg-url@^6.3.0:
tr46 "^1.0.0" tr46 "^1.0.0"
webidl-conversions "^4.0.1" webidl-conversions "^4.0.1"
which-boxed-primitive@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
dependencies:
is-bigint "^1.0.1"
is-boolean-object "^1.1.0"
is-number-object "^1.0.4"
is-string "^1.0.5"
is-symbol "^1.0.3"
which-module@^1.0.0: which-module@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"