From 006242f09677a7a034a8caa0e320d75ad6af3864 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Thu, 9 Feb 2023 20:41:43 +0000 Subject: [PATCH 01/36] Version v10.26.0 --- CHANGELOG.md | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 175 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ec228737..929827745 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,178 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.26.0] +### Uncategorized +- Sync `master` with `develop` ([#17665](https://github.com/MetaMask/metamask-extension/pull/17665)) +- Deprecating Typography component ([#17672](https://github.com/MetaMask/metamask-extension/pull/17672)) +- remove siwe feature flag ([#17690](https://github.com/MetaMask/metamask-extension/pull/17690)) +- Fix recent recipient order ([#16346](https://github.com/MetaMask/metamask-extension/pull/16346)) +- Add testing documentation ([#17411](https://github.com/MetaMask/metamask-extension/pull/17411)) +- Merge branch 'develop' into master-sync +- Fix for error during sending to multisig address ([#17651](https://github.com/MetaMask/metamask-extension/pull/17651)) +- UX: Update block explorer icon ([#17562](https://github.com/MetaMask/metamask-extension/pull/17562)) +- Merge branch 'develop' into master-sync +- fix test of useTransactionDisplayData for different timezone ([#17063](https://github.com/MetaMask/metamask-extension/pull/17063)) +- Sanitising string on signature request pages ([#17571](https://github.com/MetaMask/metamask-extension/pull/17571)) +- Conflict cleanup 10.25.0 master-sync +- Merge remote-tracking branch 'origin/develop' into master-sync +- Expand network controller unit test coverage ([#17498](https://github.com/MetaMask/metamask-extension/pull/17498)) +- Detect and track UI customizations on Personal Sign Requests ([#16222](https://github.com/MetaMask/metamask-extension/pull/16222)) +- Sign-in with Ethereum Domain Binding ([#16616](https://github.com/MetaMask/metamask-extension/pull/16616)) +- Update `json-rpc-middleware-stream` from v2 to v4 ([#17588](https://github.com/MetaMask/metamask-extension/pull/17588)) +- converted collectibles files to nfts ([#17658](https://github.com/MetaMask/metamask-extension/pull/17658)) +- E2e test insights ([#17535](https://github.com/MetaMask/metamask-extension/pull/17535)) +- [TS dashboard] Reorganize files slightly ([#17335](https://github.com/MetaMask/metamask-extension/pull/17335)) +- add brad-decker as codeowner of .circle/ folder ([#17648](https://github.com/MetaMask/metamask-extension/pull/17648)) +- Sort permissions based on weight ([#17660](https://github.com/MetaMask/metamask-extension/pull/17660)) +- Refactor ConfirmTransaction to Functional Component ([#17473](https://github.com/MetaMask/metamask-extension/pull/17473)) +- Add desktop build type ([#17592](https://github.com/MetaMask/metamask-extension/pull/17592)) +- add double arrow icons ([#17654](https://github.com/MetaMask/metamask-extension/pull/17654)) +- Add e2e test: send nft ([#17638](https://github.com/MetaMask/metamask-extension/pull/17638)) +- Adding docs for layout and spacing for Icon component ([#17612](https://github.com/MetaMask/metamask-extension/pull/17612)) +- Collectible Unit Tests ([#17632](https://github.com/MetaMask/metamask-extension/pull/17632)) +- Update BannerAlert component ([#17586](https://github.com/MetaMask/metamask-extension/pull/17586)) +- fix: update ledger logo ([#17616](https://github.com/MetaMask/metamask-extension/pull/17616)) +- Add hardcoded list of human-readable snap derivation paths ([#17627](https://github.com/MetaMask/metamask-extension/pull/17627)) +- [FLASK] Create E2E test for RPC endowment ([#17525](https://github.com/MetaMask/metamask-extension/pull/17525)) +- Added metric Phishing Page Displayed for phishing warning page ([#17462](https://github.com/MetaMask/metamask-extension/pull/17462)) +- updated assets and phishing controller packages ([#17569](https://github.com/MetaMask/metamask-extension/pull/17569)) +- UX: Fix token image not displaying in asset listing ([#17575](https://github.com/MetaMask/metamask-extension/pull/17575)) +- Prevent lint warning in ActionableMessage ([#17598](https://github.com/MetaMask/metamask-extension/pull/17598)) +- [doc] add Jest debugging guide (docs/tests/jest.md) ([#17594](https://github.com/MetaMask/metamask-extension/pull/17594)) +- Add hardcoded list of human-readable snap names ([#17595](https://github.com/MetaMask/metamask-extension/pull/17595)) +- NFTs: Update event name for Detect NFT settings ([#17597](https://github.com/MetaMask/metamask-extension/pull/17597)) +- Change COLORS reference to Color ([#17599](https://github.com/MetaMask/metamask-extension/pull/17599)) +- UX: Remove the IconCopy and IconCopied Components and their usages ([#17530](https://github.com/MetaMask/metamask-extension/pull/17530)) +- UX: Update support icon ([#17560](https://github.com/MetaMask/metamask-extension/pull/17560)) +- Convert actions.js to typescript ([#17446](https://github.com/MetaMask/metamask-extension/pull/17446)) +- Disable fiat conversion in Approve Screen when `Show balance and token price checker` is OFF ([#17443](https://github.com/MetaMask/metamask-extension/pull/17443)) +- Ensure the advanced gas modal displays a zero priority fee if that is how it is set in the transaction ([#17559](https://github.com/MetaMask/metamask-extension/pull/17559)) +- feature: convert ui/ducks/app/app.ts to typescript ([#17454](https://github.com/MetaMask/metamask-extension/pull/17454)) +- Fix speed up of 0 max priority fee transactions ([#17547](https://github.com/MetaMask/metamask-extension/pull/17547)) +- update banner base component ([#17582](https://github.com/MetaMask/metamask-extension/pull/17582)) +- updated tag icon ([#17540](https://github.com/MetaMask/metamask-extension/pull/17540)) +- decrease coverage threshold that requires bump ([#17544](https://github.com/MetaMask/metamask-extension/pull/17544)) +- Dead and redundant code removal ([#17512](https://github.com/MetaMask/metamask-extension/pull/17512)) +- initialize currentLocale in the locale slice upon app start ([#17579](https://github.com/MetaMask/metamask-extension/pull/17579)) +- fix: fix non-critical warning in tests ([#17567](https://github.com/MetaMask/metamask-extension/pull/17567)) +- feature: migrate design-system.ts ([#17518](https://github.com/MetaMask/metamask-extension/pull/17518)) +- Convert store.js to typescript and redux toolkit ([#17508](https://github.com/MetaMask/metamask-extension/pull/17508)) +- Add error module for safely handling errors ([#17511](https://github.com/MetaMask/metamask-extension/pull/17511)) +- Convert action-queue to TypeScript ([#17509](https://github.com/MetaMask/metamask-extension/pull/17509)) +- Add network client tests for methods not supported by Infura ([#17347](https://github.com/MetaMask/metamask-extension/pull/17347)) +- Add e2e test: import nft ([#17543](https://github.com/MetaMask/metamask-extension/pull/17543)) +- Adding browser outdated notification ([#17027](https://github.com/MetaMask/metamask-extension/pull/17027)) +- Convert confirm-tx.utils.js to typescript ([#17349](https://github.com/MetaMask/metamask-extension/pull/17349)) +- updated CollectibleDetail Storybook Coverage ([#17351](https://github.com/MetaMask/metamask-extension/pull/17351)) +- adding textfix on experimental tab ([#17306](https://github.com/MetaMask/metamask-extension/pull/17306)) +- Allow background to handle forgotten password flow ([#17501](https://github.com/MetaMask/metamask-extension/pull/17501)) +- GasDisplay: fix z-index for Confirm Approve warning ([#17470](https://github.com/MetaMask/metamask-extension/pull/17470)) +- Fix http-cache-semantics dependency vulnerability GHSA-rc47-6667-2j5j ([#17563](https://github.com/MetaMask/metamask-extension/pull/17563)) +- Detailed document for refactoring signature request pages in extension ([#17456](https://github.com/MetaMask/metamask-extension/pull/17456)) +- Move confirm-transaction/conf-tx.js to confirm-signature-request ([#17408](https://github.com/MetaMask/metamask-extension/pull/17408)) +- remove nft toaster on first autohide ([#17536](https://github.com/MetaMask/metamask-extension/pull/17536)) +- Convert ui/store/actionConstants.js -> Typescript ([#17442](https://github.com/MetaMask/metamask-extension/pull/17442)) +- Fixing yarn version command, adding yarn version plugin ([#17325](https://github.com/MetaMask/metamask-extension/pull/17325)) +- 🐛 Calldata validation ([#17326](https://github.com/MetaMask/metamask-extension/pull/17326)) +- remove unused banner base proptype ([#17531](https://github.com/MetaMask/metamask-extension/pull/17531)) +- Add tests for `retryOnEmpty` middleware ([#17364](https://github.com/MetaMask/metamask-extension/pull/17364)) +- prefer locale slice for locale state ([#17499](https://github.com/MetaMask/metamask-extension/pull/17499)) +- Fixing/extending type definitions for later usage ([#17514](https://github.com/MetaMask/metamask-extension/pull/17514)) +- TypeScript tooling fixes ([#17513](https://github.com/MetaMask/metamask-extension/pull/17513)) +- Onboarding V2: Remove old onboarding flow ([#17081](https://github.com/MetaMask/metamask-extension/pull/17081)) +- Fix build ([#17538](https://github.com/MetaMask/metamask-extension/pull/17538)) +- fix button text props ([#17478](https://github.com/MetaMask/metamask-extension/pull/17478)) +- Refactoring confirm-transaction-base component ([#17484](https://github.com/MetaMask/metamask-extension/pull/17484)) +- Refactor conf-tx.js ([#17380](https://github.com/MetaMask/metamask-extension/pull/17380)) +- Fix RPC Url editing issue of existing network ([#17451](https://github.com/MetaMask/metamask-extension/pull/17451)) +- Adjust 'Confirm' button color on setApprovalForAll revocations ([#17506](https://github.com/MetaMask/metamask-extension/pull/17506)) +- Move THEME_TYPE to new preferences.ts file ([#17515](https://github.com/MetaMask/metamask-extension/pull/17515)) +- Fix #17328 - Move NFT settings to Experimental ([#17400](https://github.com/MetaMask/metamask-extension/pull/17400)) +- UX - Update all copy icons ([#17445](https://github.com/MetaMask/metamask-extension/pull/17445)) +- Added navigation between multiple sign prompts and reject all sign prompts ([#17093](https://github.com/MetaMask/metamask-extension/pull/17093)) +- Fix #17439 - Prevent event error when user presses enter key during onboarding ([#17497](https://github.com/MetaMask/metamask-extension/pull/17497)) +- Update overview icons for buy, send, and swap ([#17492](https://github.com/MetaMask/metamask-extension/pull/17492)) +- New Icons: Replace instance of fa-qr-code icon ([#17474](https://github.com/MetaMask/metamask-extension/pull/17474)) +- Fix #17441 - Update all MenuItem instances to use new icons ([#17468](https://github.com/MetaMask/metamask-extension/pull/17468)) +- Fix #17393 - Fix NFT collection header image ([#17394](https://github.com/MetaMask/metamask-extension/pull/17394)) +- Add e2e test: add custome network during onboarding ([#17436](https://github.com/MetaMask/metamask-extension/pull/17436)) +- feat(mme-17214): migrate L33 files to typescript ([#17372](https://github.com/MetaMask/metamask-extension/pull/17372)) +- Update copy when revoking setApprovalForAll ([#17500](https://github.com/MetaMask/metamask-extension/pull/17500)) +- master sync following v10.24.2 ([#17504](https://github.com/MetaMask/metamask-extension/pull/17504)) +- Merge remote-tracking branch 'origin/develop' into master-sync +- Update home portfolio dapp icon to new icon ([#17471](https://github.com/MetaMask/metamask-extension/pull/17471)) +- Document `displayWarning` as deprecated ([#17465](https://github.com/MetaMask/metamask-extension/pull/17465)) +- Ignore `storybook-build` lint errors ([#17373](https://github.com/MetaMask/metamask-extension/pull/17373)) +- remove snap notifications when uninstalled ([#17487](https://github.com/MetaMask/metamask-extension/pull/17487)) +- Nft build for e2e tests ([#17430](https://github.com/MetaMask/metamask-extension/pull/17430)) +- feature: convert level 32 files to typescript ([#17390](https://github.com/MetaMask/metamask-extension/pull/17390)) +- [e2e]Add e2e test for deleting custom network ([#17254](https://github.com/MetaMask/metamask-extension/pull/17254)) +- Fix #17362 - Ensure NFT icons are correct ([#17440](https://github.com/MetaMask/metamask-extension/pull/17440)) +- Fix #17385 - Provide autohide callback for ActionMessage ([#17392](https://github.com/MetaMask/metamask-extension/pull/17392)) +- button link housekeeping ([#16885](https://github.com/MetaMask/metamask-extension/pull/16885)) +- Bump lavapack version to 5 ([#17431](https://github.com/MetaMask/metamask-extension/pull/17431)) +- feature: convert shared/modules/contract-utils.test.js to typescript ([#17435](https://github.com/MetaMask/metamask-extension/pull/17435)) +- Refactor confirm page container component from class to functional component ([#16907](https://github.com/MetaMask/metamask-extension/pull/16907)) +- Test parameter change cache miss ([#17346](https://github.com/MetaMask/metamask-extension/pull/17346)) +- Document callback-style background calls as deprecated ([#17376](https://github.com/MetaMask/metamask-extension/pull/17376)) +- [GridPlus] Bumps `gridplus-sdk` to v2.4.1 ([#16847](https://github.com/MetaMask/metamask-extension/pull/16847)) +- Put hardware wallets behind an HARDWARE_WALLETS_MV3 flag ([#17354](https://github.com/MetaMask/metamask-extension/pull/17354)) +- Consolidated all component import paths ([#17368](https://github.com/MetaMask/metamask-extension/pull/17368)) +- updated new links for the stories ([#17369](https://github.com/MetaMask/metamask-extension/pull/17369)) +- Fix #17388 - Remove dismiss button from NFT notification ([#17389](https://github.com/MetaMask/metamask-extension/pull/17389)) +- Remove a notification for falling back from STX to regular swaps ([#17374](https://github.com/MetaMask/metamask-extension/pull/17374)) +- Feat/15086/add banner severities component ([#17307](https://github.com/MetaMask/metamask-extension/pull/17307)) +- fix icon names ([#17391](https://github.com/MetaMask/metamask-extension/pull/17391)) +- Fix Playwright install step ([#17415](https://github.com/MetaMask/metamask-extension/pull/17415)) +- Fix broken NFT import and auto-detect flows ([#17384](https://github.com/MetaMask/metamask-extension/pull/17384)) +- Convert ui/helpers/constants/common to typescript ([#17348](https://github.com/MetaMask/metamask-extension/pull/17348)) +- Copy update on Transaction breakdown for ApproveToken ([#17296](https://github.com/MetaMask/metamask-extension/pull/17296)) +- Add alt text for NFT images ([#17284](https://github.com/MetaMask/metamask-extension/pull/17284)) +- Nit fixes for story-test integration ([#17344](https://github.com/MetaMask/metamask-extension/pull/17344)) +- remove duplicate comment line ([#17381](https://github.com/MetaMask/metamask-extension/pull/17381)) +- Complete level 36 migration of TypeScript by converting conversion.utils.js and deprecate old conversion util ([#17262](https://github.com/MetaMask/metamask-extension/pull/17262)) +- icon audit, remove xxs icon size ([#17089](https://github.com/MetaMask/metamask-extension/pull/17089)) +- Activate LavaMoat scuttling security feature ([#17276](https://github.com/MetaMask/metamask-extension/pull/17276)) +- feat(mme-17212): convert shared/constants/swaps.js -> Typescript ([#17322](https://github.com/MetaMask/metamask-extension/pull/17322)) +- Add Firefox Snow support ([#17147](https://github.com/MetaMask/metamask-extension/pull/17147)) +- Move subject type enum to `@metamask/subject-metadata-controller` ([#16431](https://github.com/MetaMask/metamask-extension/pull/16431)) +- Replace usages of conversion util in rest of UI folder in favor of Numeric ([#17334](https://github.com/MetaMask/metamask-extension/pull/17334)) +- Fix/use etherjs specific imports ([#15461](https://github.com/MetaMask/metamask-extension/pull/15461)) +- Fix #17300, #16843 - Use proper source for image of IPFS NFTs ([#17302](https://github.com/MetaMask/metamask-extension/pull/17302)) +- Sync `master` with `develop` ([#17359](https://github.com/MetaMask/metamask-extension/pull/17359)) +- [FLASK] `snaps-monorepo@0.28.0` ([#17277](https://github.com/MetaMask/metamask-extension/pull/17277)) +- Remove usages of Conversion util in components folder in favor of Numeric ([#17333](https://github.com/MetaMask/metamask-extension/pull/17333)) +- Refactor Errors E2E test to no longer rely upon a real error ([#17332](https://github.com/MetaMask/metamask-extension/pull/17332)) +- Merge remote-tracking branch 'origin/develop' into master-sync +- Fix cookiejar dependency vulnerability ([#17355](https://github.com/MetaMask/metamask-extension/pull/17355)) +- [FLASK] Update onboarding text to fit new panel ([#17345](https://github.com/MetaMask/metamask-extension/pull/17345)) +- Refactor usages of conversion util in the app folder and shared folder in favor of Numeric ([#17331](https://github.com/MetaMask/metamask-extension/pull/17331)) +- Updated Icons in Title of NFTs ([#17205](https://github.com/MetaMask/metamask-extension/pull/17205)) +- Enable the Token Allowance flow by default for all users ([#16740](https://github.com/MetaMask/metamask-extension/pull/16740)) +- Convert app//scripts/lib/util.js to typescript ([#17330](https://github.com/MetaMask/metamask-extension/pull/17330)) +- Restore support for Chromium v78 ([#17251](https://github.com/MetaMask/metamask-extension/pull/17251)) +- Added fix for overlaping text in mozzila in activity tab ([#17235](https://github.com/MetaMask/metamask-extension/pull/17235)) +- Use PageContainerFooter to render footer on all confirmation pages ([#17316](https://github.com/MetaMask/metamask-extension/pull/17316)) +- chore: copy update for metamask fee on swaps ([#17133](https://github.com/MetaMask/metamask-extension/pull/17133)) +- Security provider check (OpenSea) ([#16584](https://github.com/MetaMask/metamask-extension/pull/16584)) +- Setup network controller mocks per-test ([#17250](https://github.com/MetaMask/metamask-extension/pull/17250)) +- Added toaster for removed NFTs ([#17297](https://github.com/MetaMask/metamask-extension/pull/17297)) +- Integrate `KeyringController` v10 ([#17056](https://github.com/MetaMask/metamask-extension/pull/17056)) +- add numeric module ([#17324](https://github.com/MetaMask/metamask-extension/pull/17324)) +- Convert app/scripts/constants -> Typescript ([#17327](https://github.com/MetaMask/metamask-extension/pull/17327)) +- Use async/await instead of Promise.resolve ([#16221](https://github.com/MetaMask/metamask-extension/pull/16221)) +- Added storybook check to CI ([#17092](https://github.com/MetaMask/metamask-extension/pull/17092)) +- feat(mme-17212): convert shared/module/string-utils.js -> Typescript ([#17320](https://github.com/MetaMask/metamask-extension/pull/17320)) +- Relocate conversion utils to shared/modules/conversion.utils.js ([#17319](https://github.com/MetaMask/metamask-extension/pull/17319)) +- Fix #17138 - Allow ActionMessage to be autohidden after a given number of milliseconds ([#17269](https://github.com/MetaMask/metamask-extension/pull/17269)) +- i18n: fix es privacy policy links ([#17315](https://github.com/MetaMask/metamask-extension/pull/17315)) +- fix script for linting changed files ([#17028](https://github.com/MetaMask/metamask-extension/pull/17028)) +- Convert shared/constants/hardware-wallets.js -> Typescript ([#17310](https://github.com/MetaMask/metamask-extension/pull/17310)) +- TransactionDecoding: rm unwanted cursor: pointer ([#17318](https://github.com/MetaMask/metamask-extension/pull/17318)) +- Convert shared/constants/labels.js -> Typescript ([#17309](https://github.com/MetaMask/metamask-extension/pull/17309)) +- Fix transaction decoding data types `string` and `bool` ([#17299](https://github.com/MetaMask/metamask-extension/pull/17299)) + ## [10.25.0] ### Added - Add new app translations ([#15999](https://github.com/MetaMask/metamask-extension/pull/15999)) @@ -3473,7 +3645,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.25.0...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.26.0...HEAD +[10.26.0]: https://github.com/MetaMask/metamask-extension/compare/v10.25.0...v10.26.0 [10.25.0]: https://github.com/MetaMask/metamask-extension/compare/v10.24.2...v10.25.0 [10.24.2]: https://github.com/MetaMask/metamask-extension/compare/v10.24.1...v10.24.2 [10.24.1]: https://github.com/MetaMask/metamask-extension/compare/v10.24.0...v10.24.1 diff --git a/package.json b/package.json index 29f7900bc..c20342130 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.25.0", + "version": "10.26.0", "private": true, "repository": { "type": "git", From 72ae54bfa3415b378727c56b85156bbf077b9656 Mon Sep 17 00:00:00 2001 From: David Walsh Date: Wed, 15 Feb 2023 10:26:21 -0600 Subject: [PATCH 02/36] UX: Icons: Use proper send icon on wallet and token overview pages (#17720) --- ui/components/app/wallet-overview/eth-overview.js | 2 +- ui/components/app/wallet-overview/token-overview.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/components/app/wallet-overview/eth-overview.js b/ui/components/app/wallet-overview/eth-overview.js index 17d03873b..e5357686f 100644 --- a/ui/components/app/wallet-overview/eth-overview.js +++ b/ui/components/app/wallet-overview/eth-overview.js @@ -130,7 +130,7 @@ const EthOverview = ({ className }) => { data-testid="eth-overview-send" Icon={ } diff --git a/ui/components/app/wallet-overview/token-overview.js b/ui/components/app/wallet-overview/token-overview.js index 8ff03dcbc..363a1b250 100644 --- a/ui/components/app/wallet-overview/token-overview.js +++ b/ui/components/app/wallet-overview/token-overview.js @@ -163,7 +163,7 @@ const TokenOverview = ({ className, token }) => { }} Icon={ } From 48251a4189f71f1678d07dcf1227f8fe5b3294f7 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Fri, 10 Feb 2023 07:15:54 -0800 Subject: [PATCH 03/36] Ensure simulation failure warning is shown on all networks and accounts (#17458) * Ensure simulation failure warning is shown on all networks and accounts * Add e2e test to cover failure warning behaviour on non-eip-1559 network * Fix new e2e test --- test/e2e/tests/failing-contract.spec.js | 88 +++++++++++++++++++ .../confirm-transaction-base.component.js | 4 +- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/test/e2e/tests/failing-contract.spec.js b/test/e2e/tests/failing-contract.spec.js index babd46e72..d7cff9c5e 100644 --- a/test/e2e/tests/failing-contract.spec.js +++ b/test/e2e/tests/failing-contract.spec.js @@ -85,3 +85,91 @@ describe('Failing contract interaction ', function () { ); }); }); + +describe('Failing contract interaction on non-EIP1559 network', function () { + const smartContract = SMART_CONTRACTS.FAILING; + const ganacheOptions = { + hardfork: 'berlin', + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: convertToHexValue(25000000000000000000), + }, + ], + }; + it('should display a warning when the contract interaction is expected to fail', async function () { + await withFixtures( + { + dapp: true, + fixtures: new FixtureBuilder() + .withPermissionControllerConnectedToTestDapp() + .build(), + ganacheOptions, + smartContract, + title: this.test.title, + }, + async ({ driver, contractRegistry }) => { + const contractAddress = await contractRegistry.getContractAddress( + smartContract, + ); + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + await driver.openNewPage( + `http://127.0.0.1:8080/?contract=${contractAddress}`, + ); + let windowHandles = await driver.getAllWindowHandles(); + const extension = windowHandles[0]; + // waits for deployed contract and calls failing contract method + await driver.findClickableElement('#deployButton'); + + await driver.fill('#toInput', contractAddress); + await driver.fill('#amountInput', '0'); + await driver.fill('#gasInput', '100'); + + await driver.clickElement('#submitForm'); + + await driver.waitUntilXWindowHandles(3); + windowHandles = await driver.getAllWindowHandles(); + await driver.switchToWindowWithTitle( + 'MetaMask Notification', + windowHandles, + ); + + // display warning when transaction is expected to fail + const warningText = + 'We were not able to estimate gas. There might be an error in the contract and this transaction may fail.'; + const warning = await driver.findElement( + '.actionable-message__message', + ); + const confirmButton = await driver.findElement( + '[data-testid="page-container-footer-next"]', + ); + assert.equal(await warning.getText(), warningText); + assert.equal(await confirmButton.isEnabled(), false); + + // dismiss warning and confirm the transaction + await driver.clickElement({ + text: 'I want to proceed anyway', + tag: 'button', + }); + await driver.clickElement({ text: 'Confirm', tag: 'button' }); + await driver.waitUntilXWindowHandles(2); + await driver.switchToWindow(extension); + await driver.clickElement({ text: 'Activity', tag: 'button' }); + await driver.waitForSelector( + '.transaction-list__completed-transactions .transaction-list-item:nth-of-type(1)', + { timeout: 10000 }, + ); + + // display the transaction status + const transactionStatus = await driver.findElement( + '.transaction-list-item:nth-of-type(1) .transaction-status-label', + ); + assert.equal(await transactionStatus.getText(), 'Failed'); + }, + ); + }); +}); diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js index b9a956dd0..0f38bfc77 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -595,9 +595,7 @@ export default class ConfirmTransactionBase extends Component { : () => this.handleEditGas() } rows={[ - renderSimulationFailureWarning && - !this.supportsEIP1559 && - simulationFailureWarning(), + renderSimulationFailureWarning && simulationFailureWarning(), !renderSimulationFailureWarning && !isMultiLayerFeeNetwork && renderGasDetailsItem(), From d0aa1432227db2f6e5dc0d894da4aff1439c384a Mon Sep 17 00:00:00 2001 From: Brad Decker Date: Wed, 15 Feb 2023 10:26:32 -0600 Subject: [PATCH 04/36] adds test and fix for conversion to use numeric (#17758) --- .../lib/transaction-controller-utils.test.js | 235 +++++++++++++++++- shared/lib/transactions-controller-utils.js | 6 +- 2 files changed, 233 insertions(+), 8 deletions(-) diff --git a/shared/lib/transaction-controller-utils.test.js b/shared/lib/transaction-controller-utils.test.js index 3920466ea..c1e661ed7 100644 --- a/shared/lib/transaction-controller-utils.test.js +++ b/shared/lib/transaction-controller-utils.test.js @@ -1,8 +1,233 @@ -import { calcGasTotal } from './transactions-controller-utils'; +import { EtherDenomination } from '../constants/common'; +import { CHAIN_IDS } from '../constants/network'; +import { TransactionEnvelopeType } from '../constants/transaction'; +import { Numeric } from '../modules/Numeric'; +import { + calcGasTotal, + calcTokenAmount, + getSwapsTokensReceivedFromTxMeta, + TOKEN_TRANSFER_LOG_TOPIC_HASH, +} from './transactions-controller-utils'; -describe('calcGasTotal()', () => { - it('should correctly compute gasTotal', () => { - const result = calcGasTotal(12, 15); - expect(result).toStrictEqual('17a'); +describe('transaction controller utils', () => { + describe('calcGasTotal()', () => { + it('should correctly compute gasTotal', () => { + const result = calcGasTotal(12, 15); + expect(result).toStrictEqual('17a'); + }); + }); + + describe('getSwapsTokensReceivedFromTxMeta', () => { + it('returns null if txMeta is not well formed', () => { + expect(getSwapsTokensReceivedFromTxMeta('ETH', {}, '0x00')).toBe(null); + }); + + it('returns null if tokenSymbol is the default for network but txMeta does not contain a receipt', () => { + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + {}, + '0x00', + '8', + {}, + CHAIN_IDS.MAINNET, + ), + ).toBe(null); + }); + + it('returns null if tokenSymbol is the default for network but txMeta does not contain a preTxBalance', () => { + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { txReceipt: {}, postTxBalance: '0xe' }, + '0x00', + '8', + {}, + CHAIN_IDS.MAINNET, + ), + ).toBe(null); + }); + + it('returns null if tokenSymbol is the default for network but txMeta does not contain a postTxBalance', () => { + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { txReceipt: {}, preTxBalance: '0xe' }, + '0x00', + '8', + {}, + CHAIN_IDS.MAINNET, + ), + ).toBe(null); + }); + + it('returns estimated receiving amount if post and pre tx balances are the same', () => { + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { + txReceipt: {}, + preTxBalance: '0xe', + postTxBalance: '0xe', + swapMetaData: { token_to_amount: '0x1' }, + }, + '0x00', + '0x00', + '8', + {}, + CHAIN_IDS.MAINNET, + ), + ).toBe('0x1'); + }); + + it('returns postTxBalance minus preTxBalance less the cost of gas of the transaction', () => { + const preTxBalance = new Numeric('5000000', 10, EtherDenomination.WEI); + const postTxBalance = new Numeric('5500000', 10, EtherDenomination.WEI); + const gasUsed = new Numeric('28000', 10).toPrefixedHexString(); + const effectiveGasPrice = new Numeric('21', 10).toPrefixedHexString(); + const gasCost = calcGasTotal(gasUsed, effectiveGasPrice); + const ethReceived = postTxBalance + .minus(preTxBalance.minus(gasCost, 16)) + .toDenomination(EtherDenomination.ETH) + .round(6); + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { + txReceipt: { + gasUsed, + effectiveGasPrice, + type: TransactionEnvelopeType.feeMarket, + }, + preTxBalance: preTxBalance.toPrefixedHexString(), + postTxBalance: postTxBalance.toPrefixedHexString(), + swapMetaData: { token_to_amount: '0x1' }, + }, + '0x00', + '0x00', + '8', + {}, + CHAIN_IDS.MAINNET, + ), + ).toBe(ethReceived.toString()); + }); + + it('returns postTxBalance minus preTxBalance less the cost of gas of the transaction and the approval tx', () => { + const preTxBalance = new Numeric('5000000', 10, EtherDenomination.WEI); + const postTxBalance = new Numeric('5500000', 10, EtherDenomination.WEI); + const gasUsed = new Numeric('28000', 10).toPrefixedHexString(); + const gasUsedApproval = new Numeric('75000', 10).toPrefixedHexString(); + const effectiveGasPrice = new Numeric('21', 10).toPrefixedHexString(); + const effectiveGasPriceApproval = new Numeric( + '15', + 10, + ).toPrefixedHexString(); + const gasCost = new Numeric( + calcGasTotal(gasUsed, effectiveGasPrice), + 16, + ).add(calcGasTotal(gasUsedApproval, effectiveGasPriceApproval), 16); + const ethReceived = postTxBalance + .minus(preTxBalance.minus(gasCost)) + .toDenomination(EtherDenomination.ETH) + .round(6); + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { + txReceipt: { + gasUsed, + effectiveGasPrice, + type: TransactionEnvelopeType.feeMarket, + }, + preTxBalance: preTxBalance.toPrefixedHexString(), + postTxBalance: postTxBalance.toPrefixedHexString(), + swapMetaData: { token_to_amount: '0x1' }, + }, + '0x00', + '0x00', + '8', + { + txReceipt: { + gasUsed: gasUsedApproval, + effectiveGasPrice: effectiveGasPriceApproval, + type: TransactionEnvelopeType.feeMarket, + }, + }, + CHAIN_IDS.MAINNET, + ), + ).toBe(ethReceived.toString()); + }); + + it('returns postTxBalance minus preTxBalance less the cost of gas of the transaction and the approval tx for legacy txs', () => { + const preTxBalance = new Numeric('5000000', 10, EtherDenomination.WEI); + const postTxBalance = new Numeric('5500000', 10, EtherDenomination.WEI); + const gasUsed = new Numeric('28000', 10).toPrefixedHexString(); + const gasUsedApproval = new Numeric('75000', 10).toPrefixedHexString(); + const gasPrice = new Numeric('21', 10).toPrefixedHexString(); + const gasPriceApproval = new Numeric('15', 10).toPrefixedHexString(); + const gasCost = new Numeric(calcGasTotal(gasUsed, gasPrice), 16).add( + calcGasTotal(gasUsedApproval, gasPriceApproval), + 16, + ); + const ethReceived = postTxBalance + .minus(preTxBalance.minus(gasCost)) + .toDenomination(EtherDenomination.ETH) + .round(6); + expect( + getSwapsTokensReceivedFromTxMeta( + 'ETH', + { + txReceipt: { + gasUsed, + type: TransactionEnvelopeType.legacy, + }, + txParams: { + gasPrice, + }, + preTxBalance: preTxBalance.toPrefixedHexString(), + postTxBalance: postTxBalance.toPrefixedHexString(), + swapMetaData: { token_to_amount: '0x1' }, + }, + '0x00', + '0x00', + '8', + { + txReceipt: { + gasUsed: gasUsedApproval, + type: TransactionEnvelopeType.feeMarket, + }, + txParams: { + gasPrice: gasPriceApproval, + }, + }, + CHAIN_IDS.MAINNET, + ), + ).toBe(ethReceived.toString()); + }); + + it('returns value from tokenTransferLogs if not default token for network', () => { + const logs = [ + { + topics: [TOKEN_TRANSFER_LOG_TOPIC_HASH, '', '0x00'], + address: '0x00', + data: new Numeric('10000', 10).toPrefixedHexString(), + }, + ]; + expect( + getSwapsTokensReceivedFromTxMeta( + 'USDC', + { + txReceipt: { logs, status: '0x1' }, + }, + '0x00', + '0x00', + '8', + { + txReceipt: {}, + }, + CHAIN_IDS.MAINNET, + ), + ).toBe(calcTokenAmount(logs[0].data, 8).toString(10), 6); + }); }); }); diff --git a/shared/lib/transactions-controller-utils.js b/shared/lib/transactions-controller-utils.js index 62cf3892b..3ee2484b6 100644 --- a/shared/lib/transactions-controller-utils.js +++ b/shared/lib/transactions-controller-utils.js @@ -4,7 +4,7 @@ import { TransactionEnvelopeType } from '../constants/transaction'; import { Numeric } from '../modules/Numeric'; import { isSwapsDefaultTokenSymbol } from '../modules/swaps.utils'; -const TOKEN_TRANSFER_LOG_TOPIC_HASH = +export const TOKEN_TRANSFER_LOG_TOPIC_HASH = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'; export const TRANSACTION_NO_CONTRACT_ERROR_KEY = 'transactionErrorNoContract'; @@ -82,7 +82,7 @@ export function getSwapsTokensReceivedFromTxMeta( ? txReceipt.effectiveGasPrice : txMeta.txParams.gasPrice, ); - const totalGasCost = new Numeric(gasCost, 16).plus(approvalTxGasCost); + const totalGasCost = new Numeric(gasCost, 16).add(approvalTxGasCost); const preTxBalanceLessGasCost = new Numeric(txMeta.preTxBalance, 16).minus( totalGasCost, @@ -93,7 +93,7 @@ export function getSwapsTokensReceivedFromTxMeta( 16, EtherDenomination.WEI, ) - .subtract(preTxBalanceLessGasCost) + .minus(preTxBalanceLessGasCost) .toDenomination(EtherDenomination.ETH) .toBase(10) .round(6); From 970a5d4a776b0ac113e2152a9e17b4dc5574dcba Mon Sep 17 00:00:00 2001 From: ryanml Date: Tue, 21 Feb 2023 06:08:47 -0700 Subject: [PATCH 05/36] Fix currency symbol in insufficient balance warning (#17820) --- ui/pages/send/gas-display/gas-display.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ui/pages/send/gas-display/gas-display.js b/ui/pages/send/gas-display/gas-display.js index bddeefdc6..7cd31230f 100644 --- a/ui/pages/send/gas-display/gas-display.js +++ b/ui/pages/send/gas-display/gas-display.js @@ -39,6 +39,7 @@ import { import { INSUFFICIENT_TOKENS_ERROR } from '../send.constants'; import { getCurrentDraftTransaction } from '../../../ducks/send'; +import { getNativeCurrency } from '../../../ducks/metamask/metamask'; import { showModal } from '../../../store/actions'; import { addHexes, @@ -61,7 +62,7 @@ export default function GasDisplay({ gasError }) { const { showFiatInTestnets, useNativeCurrencyAsPrimaryCurrency } = useSelector(getPreferences); const { provider, unapprovedTxs } = useSelector((state) => state.metamask); - const nativeCurrency = provider.ticker; + const nativeCurrency = useSelector(getNativeCurrency); const { chainId } = provider; const networkName = NETWORK_TO_NAME_MAP[chainId]; const isInsufficientTokenError = @@ -359,12 +360,9 @@ export default function GasDisplay({ gasError }) { ) : ( {t('insufficientCurrencyBuyOrReceive', [ - draftTransaction.asset.details?.symbol ?? nativeCurrency, + nativeCurrency, currentNetworkName, - `${t('buyAsset', [ - draftTransaction.asset.details?.symbol ?? - nativeCurrency, - ])}`, + `${t('buyAsset', [nativeCurrency])}`, {estimateUsed === 'custom' && ( diff --git a/ui/components/app/edit-gas-fee-button/index.scss b/ui/components/app/edit-gas-fee-button/index.scss index 448eab674..e2ca5e6d3 100644 --- a/ui/components/app/edit-gas-fee-button/index.scss +++ b/ui/components/app/edit-gas-fee-button/index.scss @@ -7,7 +7,7 @@ @include H7; display: flex; - align-items: baseline; + align-items: center; color: var(--color-primary-default); background: transparent; border: 0; @@ -15,19 +15,14 @@ white-space: pre; } - i { - color: var(--color-primary-default); - margin-right: 2px; - } - &__icon { font-size: 16px; - margin-right: 4px; + margin-right: 2px; } &__label { font-size: 12px; - margin-right: 8px; + margin-right: 4px; } .info-tooltip { diff --git a/ui/components/app/network-display/index.scss b/ui/components/app/network-display/index.scss index 1ca9b410a..16755aa5f 100644 --- a/ui/components/app/network-display/index.scss +++ b/ui/components/app/network-display/index.scss @@ -30,10 +30,6 @@ margin-right: 4px; } - &__icon { - display: block; - } - &--clickable { cursor: pointer; } diff --git a/ui/components/app/network-display/network-display.js b/ui/components/app/network-display/network-display.js index 669035f5e..2b7e53aec 100644 --- a/ui/components/app/network-display/network-display.js +++ b/ui/components/app/network-display/network-display.js @@ -16,9 +16,9 @@ import { TypographyVariant, } from '../../../helpers/constants/design-system'; import Chip from '../../ui/chip/chip'; -import IconCaretDown from '../../ui/icon/icon-caret-down'; import { useI18nContext } from '../../../hooks/useI18nContext'; import { isNetworkLoading } from '../../../selectors'; +import { Icon, ICON_NAMES, ICON_SIZES } from '../../component-library'; export default function NetworkDisplay({ indicatorSize, @@ -68,7 +68,7 @@ export default function NetworkDisplay({ } rightIcon={ onClick ? ( - + ) : null } label={ diff --git a/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap b/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap index 562938ccf..892e798e0 100644 --- a/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap +++ b/ui/components/app/nft-details/__snapshots__/nft-details.test.js.snap @@ -8,9 +8,10 @@ exports[`Collectible Details should match minimal props and state snapshot 1`] = ))} diff --git a/ui/components/app/token-cell/__snapshots__/token-cell.test.js.snap b/ui/components/app/token-cell/__snapshots__/token-cell.test.js.snap index efea9cda4..ee1ea8df5 100644 --- a/ui/components/app/token-cell/__snapshots__/token-cell.test.js.snap +++ b/ui/components/app/token-cell/__snapshots__/token-cell.test.js.snap @@ -80,8 +80,9 @@ exports[`Token Cell should match snapshot 1`] = `
- -
-
-
-
- {iconClassName ? ( - + {icon ? ( + ) : null}
); diff --git a/ui/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.stories.js b/ui/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.stories.js index 507652d54..b23e82f47 100644 --- a/ui/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.stories.js +++ b/ui/components/app/transaction-activity-log/transaction-activity-log-icon/transaction-activity-log-icon.stories.js @@ -1,5 +1,5 @@ import React from 'react'; -import { imageHash } from './transaction-activity-log-icon.component'; +import { ACTIVITY_ICONS } from './transaction-activity-log-icon.component'; import TransactionActivityLogIcon from '.'; export default { @@ -11,11 +11,11 @@ export default { }, eventKey: { control: 'select', - options: Object.keys(imageHash), + options: Object.keys(ACTIVITY_ICONS), }, }, args: { - eventKey: Object.keys(imageHash)[0], + eventKey: Object.keys(ACTIVITY_ICONS)[0], }, }; diff --git a/ui/components/ui/dropdown/dropdown.js b/ui/components/ui/dropdown/dropdown.js index 8bfde46ff..5cba69ad9 100644 --- a/ui/components/ui/dropdown/dropdown.js +++ b/ui/components/ui/dropdown/dropdown.js @@ -1,7 +1,7 @@ import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -import IconCaretDown from '../icon/icon-caret-down'; +import { Icon, ICON_NAMES, ICON_SIZES } from '../../component-library'; const Dropdown = ({ className, @@ -41,7 +41,11 @@ const Dropdown = ({ ); })} - + ); }; diff --git a/ui/components/ui/icon/README.mdx b/ui/components/ui/icon/README.mdx index 7b8ab0711..eb0254dc0 100644 --- a/ui/components/ui/icon/README.mdx +++ b/ui/components/ui/icon/README.mdx @@ -1,6 +1,5 @@ import { Story, Canvas, ArgsTable } from '@storybook/addon-docs'; -import IconCaretLeft from './icon-caret-left.js'; import Approve from './approve-icon.component'; import InfoIcon from './info-icon.component'; import InfoIconInverted from './info-icon-inverted.component'; @@ -20,7 +19,7 @@ A range of SVG icon components ## Props - + ## Usage diff --git a/ui/components/ui/icon/icon-caret-down.js b/ui/components/ui/icon/icon-caret-down.js deleted file mode 100644 index 64b40a31a..000000000 --- a/ui/components/ui/icon/icon-caret-down.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const IconCaretDown = ({ - size = 24, - color = 'currentColor', - ariaLabel, - className, -}) => ( - - - -); - -IconCaretDown.propTypes = { - /** - * The size of the Icon follows an 8px grid 2 = 16px, 3 = 24px etc - */ - size: PropTypes.number, - /** - * The color of the icon accepts design token css variables - */ - color: PropTypes.string, - /** - * An additional className to assign the Icon - */ - className: PropTypes.string, - /** - * The aria-label of the icon for accessibility purposes - */ - ariaLabel: PropTypes.string, -}; - -export default IconCaretDown; diff --git a/ui/components/ui/icon/icon-caret-left.js b/ui/components/ui/icon/icon-caret-left.js deleted file mode 100644 index 4fe22144e..000000000 --- a/ui/components/ui/icon/icon-caret-left.js +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const IconCaretLeft = ({ - size = 24, - color = 'currentColor', - ariaLabel, - className, - onClick, -}) => ( - - - -); - -IconCaretLeft.propTypes = { - /** - * The size of the Icon follows an 8px grid 2 = 16px, 3 = 24px etc - */ - size: PropTypes.number, - /** - * The color of the icon accepts design token css variables - */ - color: PropTypes.string, - /** - * An additional className to assign the Icon - */ - className: PropTypes.string, - /** - * The onClick handler - */ - onClick: PropTypes.func, - /** - * The aria-label of the icon for accessibility purposes - */ - ariaLabel: PropTypes.string, -}; - -export default IconCaretLeft; diff --git a/ui/components/ui/icon/icon-caret-right.js b/ui/components/ui/icon/icon-caret-right.js deleted file mode 100644 index 890f89171..000000000 --- a/ui/components/ui/icon/icon-caret-right.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const IconCaretRight = ({ - size = 24, - color = 'currentColor', - ariaLabel, - className, -}) => ( - - - -); - -IconCaretRight.propTypes = { - /** - * The size of the Icon follows an 8px grid 2 = 16px, 3 = 24px etc - */ - size: PropTypes.number, - /** - * The color of the icon accepts design token css variables - */ - color: PropTypes.string, - /** - * An additional className to assign the Icon - */ - className: PropTypes.string, - /** - * The aria-label of the icon for accessibility purposes - */ - ariaLabel: PropTypes.string, -}; - -export default IconCaretRight; diff --git a/ui/components/ui/icon/icon-caret-up.js b/ui/components/ui/icon/icon-caret-up.js deleted file mode 100644 index 8e455e638..000000000 --- a/ui/components/ui/icon/icon-caret-up.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -const IconCaretUp = ({ - size = 24, - color = 'currentColor', - ariaLabel, - className, -}) => ( - - - -); - -IconCaretUp.propTypes = { - /** - * The size of the Icon follows an 8px grid 2 = 16px, 3 = 24px etc - */ - size: PropTypes.number, - /** - * The color of the icon accepts design token css variables - */ - color: PropTypes.string, - /** - * An additional className to assign the Icon - */ - className: PropTypes.string, - /** - * The aria-label of the icon for accessibility purposes - */ - ariaLabel: PropTypes.string, -}; - -export default IconCaretUp; diff --git a/ui/components/ui/icon/icon.stories.js b/ui/components/ui/icon/icon.stories.js index 79ff63b2e..fa184c310 100644 --- a/ui/components/ui/icon/icon.stories.js +++ b/ui/components/ui/icon/icon.stories.js @@ -22,10 +22,6 @@ import SendIcon from './send-icon.component'; import Sign from './sign-icon.component'; import SunCheck from './sun-check-icon.component'; import Swap from './swap-icon-for-list.component'; -import IconCaretLeft from './icon-caret-left'; -import IconCaretRight from './icon-caret-right'; -import IconCaretDown from './icon-caret-down'; -import IconCaretUp from './icon-caret-up'; import IconCheck from './icon-check'; import IconCog from './icon-cog'; import IconConnect from './icon-connect'; @@ -116,10 +112,6 @@ export const DefaultStory = (args) => ( gridTemplateColumns: 'repeat(auto-fill, 176px)', }} > - } /> - } /> - } /> - } /> } /> } /> } /> @@ -174,9 +166,9 @@ DefaultStory.args = { export const Size = (args) => (
- - - + + +
); @@ -187,12 +179,12 @@ Size.args = { export const Color = (args) => ( <> {Object.values(validColors).map((color) => ( - + ))} ); -export const AriaLabel = (args) => ; +export const AriaLabel = (args) => ; AriaLabel.args = { ariaLabel: 'back', diff --git a/ui/components/ui/popover/index.scss b/ui/components/ui/popover/index.scss index 99077d5df..acb22a510 100644 --- a/ui/components/ui/popover/index.scss +++ b/ui/components/ui/popover/index.scss @@ -22,46 +22,6 @@ &-header { position: relative; - - &__title { - display: flex; - align-items: center; - justify-content: space-between; - - @include H4; - - font-weight: bold; - padding-bottom: 8px; - - h2 { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - button { - margin-right: 24px; - } - } - - &.center { - justify-content: center; - } - } - - &__subtitle { - @include H6; - } - - &__button { - background: none; - font-size: inherit; - padding: 0; - color: var(--color-icon-default); - } - - i { - cursor: pointer; - } } &-bg { diff --git a/ui/components/ui/popover/popover.component.js b/ui/components/ui/popover/popover.component.js index 119b5f40d..11a333aec 100644 --- a/ui/components/ui/popover/popover.component.js +++ b/ui/components/ui/popover/popover.component.js @@ -9,7 +9,12 @@ import { BackgroundColor, FLEX_DIRECTION, JustifyContent, + Color, + DISPLAY, + TextVariant, + Size, } from '../../../helpers/constants/design-system'; +import { ButtonIcon, Text, ICON_NAMES } from '../../component-library'; const defaultHeaderProps = { padding: [6, 4, 4], @@ -53,43 +58,44 @@ const Popover = ({ }) => { const t = useI18nContext(); const showHeader = title || onBack || subtitle || onClose; - const Header = () => { - return ( + const Header = () => ( + -
-

- {onBack ? ( -

- {onClose ? ( -
- {subtitle ? ( -

{subtitle}

+ {onBack ? ( + + ) : null} + + {title} + + {onClose ? ( + ) : null}
- ); - }; + {subtitle ? {subtitle} : null} +
+ ); return (
diff --git a/ui/components/ui/sender-to-recipient/sender-to-recipient.component.js b/ui/components/ui/sender-to-recipient/sender-to-recipient.component.js index 3254c9299..446f47c5b 100644 --- a/ui/components/ui/sender-to-recipient/sender-to-recipient.component.js +++ b/ui/components/ui/sender-to-recipient/sender-to-recipient.component.js @@ -3,13 +3,13 @@ import PropTypes from 'prop-types'; import classnames from 'classnames'; import copyToClipboard from 'copy-to-clipboard'; import Tooltip from '../tooltip'; -import IconCaretRight from '../icon/icon-caret-right'; import Identicon from '../identicon'; import { shortenAddress } from '../../../helpers/utils/util'; import AccountMismatchWarning from '../account-mismatch-warning/account-mismatch-warning.component'; import { useI18nContext } from '../../../hooks/useI18nContext'; import { toChecksumHexAddress } from '../../../../shared/modules/hexstring-utils'; import NicknamePopovers from '../../app/modals/nickname-popovers'; +import { Icon, ICON_NAMES } from '../../component-library'; import { DEFAULT_VARIANT, CARDS_VARIANT, @@ -199,7 +199,7 @@ function Arrow({ variant }) {
) : (
- +
); } diff --git a/ui/pages/asset/asset.scss b/ui/pages/asset/asset.scss index 0b1b8543e..4365547e3 100644 --- a/ui/pages/asset/asset.scss +++ b/ui/pages/asset/asset.scss @@ -22,11 +22,6 @@ color: var(--color-text-default); background-color: inherit; - &__chevron { - font-size: $font-size-paragraph; - padding: 0 10px 0 2px; - } - &__asset { font-weight: bold; } diff --git a/ui/pages/asset/components/asset-breadcrumb.js b/ui/pages/asset/components/asset-breadcrumb.js index ac11054c3..d66c20d33 100644 --- a/ui/pages/asset/components/asset-breadcrumb.js +++ b/ui/pages/asset/components/asset-breadcrumb.js @@ -1,12 +1,19 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { + Icon, + ICON_NAMES, + ICON_SIZES, +} from '../../../components/component-library'; const AssetBreadcrumb = ({ accountName, assetName, onBack }) => { return ( )} )} diff --git a/ui/pages/notifications/notifications.js b/ui/pages/notifications/notifications.js index 9e4fd64b8..75768cf3a 100644 --- a/ui/pages/notifications/notifications.js +++ b/ui/pages/notifications/notifications.js @@ -14,9 +14,14 @@ import { deleteExpiredNotifications, markNotificationsAsRead, } from '../../store/actions'; -import IconCaretLeft from '../../components/ui/icon/icon-caret-left'; import Button from '../../components/ui/button'; import { useI18nContext } from '../../hooks/useI18nContext'; +import { + ButtonIcon, + ICON_SIZES, + ICON_NAMES, +} from '../../components/component-library'; +import { Color } from '../../helpers/constants/design-system'; export function NotificationItem({ notification, snaps, onItemClick }) { const { message, origin, createdDate, readDate } = notification; @@ -85,10 +90,10 @@ export default function Notifications() {
- history.push(DEFAULT_ROUTE)} />
diff --git a/ui/pages/permissions-connect/index.scss b/ui/pages/permissions-connect/index.scss index f1bcb4910..1ca3c116a 100644 --- a/ui/pages/permissions-connect/index.scss +++ b/ui/pages/permissions-connect/index.scss @@ -31,10 +31,6 @@ color: var(--color-icon-default); font-weight: bold; cursor: pointer; - - i { - margin-right: 10px; - } } &__page-count { diff --git a/ui/pages/permissions-connect/permissions-connect.component.js b/ui/pages/permissions-connect/permissions-connect.component.js index c3bcf5f51..28c7b373e 100644 --- a/ui/pages/permissions-connect/permissions-connect.component.js +++ b/ui/pages/permissions-connect/permissions-connect.component.js @@ -9,6 +9,11 @@ import { ENVIRONMENT_TYPE_NOTIFICATION } from '../../../shared/constants/app'; import { MILLISECOND } from '../../../shared/constants/time'; import { DEFAULT_ROUTE } from '../../helpers/constants/routes'; import PermissionPageContainer from '../../components/app/permission-page-container'; +import { + Icon, + ICON_NAMES, + ICON_SIZES, +} from '../../components/component-library'; import ChooseAccount from './choose-account'; import PermissionsRedirect from './redirect'; ///: BEGIN:ONLY_INCLUDE_IN(flask) @@ -231,7 +236,11 @@ export default class PermissionConnect extends Component { className="permissions-connect__back" onClick={() => this.goBack()} > - + {t('back')}
) : null} diff --git a/ui/pages/send/send-content/add-recipient/__snapshots__/add-recipient.component.test.js.snap b/ui/pages/send/send-content/add-recipient/__snapshots__/add-recipient.component.test.js.snap index aa4293935..579abc354 100644 --- a/ui/pages/send/send-content/add-recipient/__snapshots__/add-recipient.component.test.js.snap +++ b/ui/pages/send/send-content/add-recipient/__snapshots__/add-recipient.component.test.js.snap @@ -80,18 +80,10 @@ exports[`Add Recipient Component Own Account Recipient Search should match snaps role="button" tabindex="0" > - - - +
Back to all
- + {t('backToAll')} {tabMessage(t)} -
{currentPath !== SETTINGS_ROUTE && ( - history.push(backRoute)} /> )} From d0bea6ccd521e47221d7b577e21f37b061325d1c Mon Sep 17 00:00:00 2001 From: ryanml Date: Thu, 2 Mar 2023 05:40:07 -0700 Subject: [PATCH 17/36] Fix incorrect balance in signature request header (#17829) * Fix incorrect balance in signature request header * Fix unit tests * Fix tests and increase unit test coverage * actually fix unit tests --------- Co-authored-by: Dan Miller --- .../signature-request.component.test.js.snap | 775 +++++++++++++++++- .../signature-request.component.js | 9 +- .../signature-request.component.test.js | 36 +- .../signature-request.container.js | 9 + .../signature-request.container.test.js | 3 + .../confirm-signature-request/index.test.js | 1 + 6 files changed, 830 insertions(+), 3 deletions(-) diff --git a/ui/components/app/signature-request/__snapshots__/signature-request.component.test.js.snap b/ui/components/app/signature-request/__snapshots__/signature-request.component.test.js.snap index 3b6d02fa5..df3631f5b 100644 --- a/ui/components/app/signature-request/__snapshots__/signature-request.component.test.js.snap +++ b/ui/components/app/signature-request/__snapshots__/signature-request.component.test.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Signature Request Component render should match snapshot 1`] = ` +exports[`Signature Request Component render should match snapshot when useNativeCurrencyAsPrimaryCurrency is false 1`] = `
0 + DEF + +
+
+
+
+
+
+
+
+
+ + T + +
+
+ + test + +
+
+
+

+ Signature request +

+
+ Only sign this message if you fully understand the content and trust the requesting site. +
+ +
+
+
+

+ Mail +

+
+
+ + Contents + : + + + + Hello, Bob! + +
+
+ + From + : + + +
+
+ + Name + : + + + + Cow + +
+
+ + Wallets + : + + +
+
+ + 0 + : + + + +
+
+
+
+
+
+ + + + + +
+
+
+
+
+ 0xCD2...D826 +
+
+
+
+
+
+ + 1 + : + + + +
+
+
+
+
+
+ + + + + +
+
+
+
+
+ 0xDea...beeF +
+
+
+
+
+
+
+
+
+
+ + To + : + + +
+
+ + 0 + : + + +
+
+ + Name + : + + + + Bob + +
+
+ + Wallets + : + + +
+
+ + 0 + : + + + +
+
+
+
+
+
+ + + + + +
+
+
+
+
+ 0xbBb...BBbB +
+
+
+
+
+
+ + 1 + : + + + +
+
+
+
+
+
+ + + + + +
+
+
+
+
+ 0xB0B...Ea57 +
+
+
+
+
+
+ + 2 + : + + + +
+
+
+
+
+
+ + + + + +
+
+
+
+
+ 0xB0B...0000 +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+`; + +exports[`Signature Request Component render should match snapshot when useNativeCurrencyAsPrimaryCurrency is true 1`] = ` +
+
+ + diff --git a/ui/components/app/signature-request/signature-request.component.test.js b/ui/components/app/signature-request/signature-request.component.test.js index 5a26ba073..8c21d71e7 100644 --- a/ui/components/app/signature-request/signature-request.component.test.js +++ b/ui/components/app/signature-request/signature-request.component.test.js @@ -62,7 +62,7 @@ describe('Signature Request Component', () => { }; }); - it('should match snapshot', () => { + it('should match snapshot when useNativeCurrencyAsPrimaryCurrency is false', () => { const msgParams = { data: JSON.stringify(messageData), version: 'V4', @@ -83,6 +83,40 @@ describe('Signature Request Component', () => { }} fromAccount={{ address: fromAddress }} provider={{ type: 'rpc' }} + useNativeCurrencyAsPrimaryCurrency={false} + nativeCurrency="ABC" + currentCurrency="DEF" + />, + store, + ); + + expect(container).toMatchSnapshot(); + }); + + it('should match snapshot when useNativeCurrencyAsPrimaryCurrency is true', () => { + const msgParams = { + data: JSON.stringify(messageData), + version: 'V4', + origin: 'test', + }; + const { container } = renderWithProvider( + undefined} + cancel={() => undefined} + cancelAll={() => undefined} + mostRecentOverviewPage="/" + showRejectTransactionsConfirmationModal={() => undefined} + history={{ push: '/' }} + sign={() => undefined} + txData={{ + msgParams, + }} + fromAccount={{ address: fromAddress }} + provider={{ type: 'rpc' }} + useNativeCurrencyAsPrimaryCurrency + nativeCurrency="ABC" + currentCurrency="DEF" />, store, ); diff --git a/ui/components/app/signature-request/signature-request.container.js b/ui/components/app/signature-request/signature-request.container.js index 52a67c1ec..ac3bd2d38 100644 --- a/ui/components/app/signature-request/signature-request.container.js +++ b/ui/components/app/signature-request/signature-request.container.js @@ -8,6 +8,8 @@ import { getSubjectMetadata, unconfirmedMessagesHashSelector, getTotalUnapprovedMessagesCount, + getCurrentCurrency, + getPreferences, } from '../../../selectors'; import { isAddressLedger, @@ -35,6 +37,7 @@ function mapStateToProps(state, ownProps) { const subjectMetadata = getSubjectMetadata(state); const unconfirmedMessagesList = unconfirmedMessagesHashSelector(state); const unapprovedMessagesCount = getTotalUnapprovedMessagesCount(state); + const { useNativeCurrencyAsPrimaryCurrency } = getPreferences(state); const { iconUrl: siteImage = '' } = subjectMetadata[txData.msgParams.origin] || {}; @@ -51,6 +54,8 @@ function mapStateToProps(state, ownProps) { mostRecentOverviewPage: getMostRecentOverviewPage(state), conversionRate: conversionRateSelector(state), nativeCurrency: getNativeCurrency(state), + currentCurrency: getCurrentCurrency(state), + useNativeCurrencyAsPrimaryCurrency, subjectMetadata: getSubjectMetadata(state), // not forwarded to component allAccounts: accountsWithSendEtherInfoSelector(state), @@ -88,6 +93,8 @@ function mergeProps(stateProps, dispatchProps, ownProps) { siteImage, conversionRate, nativeCurrency, + currentCurrency, + useNativeCurrencyAsPrimaryCurrency, provider, subjectMetadata, unconfirmedMessagesList, @@ -141,6 +148,8 @@ function mergeProps(stateProps, dispatchProps, ownProps) { siteImage, conversionRate, nativeCurrency, + currentCurrency, + useNativeCurrencyAsPrimaryCurrency, provider, subjectMetadata, unapprovedMessagesCount, diff --git a/ui/components/app/signature-request/signature-request.container.test.js b/ui/components/app/signature-request/signature-request.container.test.js index e8c4a1e1e..8e3411b86 100644 --- a/ui/components/app/signature-request/signature-request.container.test.js +++ b/ui/components/app/signature-request/signature-request.container.test.js @@ -51,6 +51,9 @@ describe('Signature Request', () => { provider: { type: 'rpc', }, + preferences: { + useNativeCurrencyAsPrimaryCurrency: true, + }, accounts: { '0xd8f6a2ffb0fc5952d16c9768b71cfd35b6399aa5': { address: '0xd8f6a2ffb0fc5952d16c9768b71cfd35b6399aa5', diff --git a/ui/pages/confirm-signature-request/index.test.js b/ui/pages/confirm-signature-request/index.test.js index 93c80b53a..417437a97 100644 --- a/ui/pages/confirm-signature-request/index.test.js +++ b/ui/pages/confirm-signature-request/index.test.js @@ -47,6 +47,7 @@ const mockState = { selectedAddress: '0x8eeee1781fd885ff5ddef7789486676961873d12', addressBook: {}, tokenList: {}, + preferences: {}, }, appState: { warning: null, From 27f322c7dba5a2a82160a1b42b1b513b3c3bebbc Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Mon, 27 Feb 2023 17:33:21 +0100 Subject: [PATCH 18/36] Selector performance improvements (#17410) * Stop checksumming addresses unnecesarily * Fix lint --- ui/selectors/selectors.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 05162d44d..3a3bd994e 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -49,7 +49,6 @@ import { import { TEMPLATED_CONFIRMATION_MESSAGE_TYPES } from '../pages/confirmation/templates'; import { STATIC_MAINNET_TOKEN_LIST } from '../../shared/constants/tokens'; -import { toChecksumHexAddress } from '../../shared/modules/hexstring-utils'; import { DAY } from '../../shared/constants/time'; import { getNativeCurrency, @@ -398,7 +397,7 @@ export function getEnsResolutionByAddress(state, address) { const entry = getAddressBookEntry(state, address) || Object.values(state.metamask.identities).find((identity) => - isEqualCaseInsensitive(identity.address, toChecksumHexAddress(address)), + isEqualCaseInsensitive(identity.address, address), ); return entry?.name || ''; @@ -407,7 +406,7 @@ export function getEnsResolutionByAddress(state, address) { export function getAddressBookEntry(state, address) { const addressBook = getAddressBook(state); const entry = addressBook.find((contact) => - isEqualCaseInsensitive(contact.address, toChecksumHexAddress(address)), + isEqualCaseInsensitive(contact.address, address), ); return entry; } @@ -416,14 +415,14 @@ export function getAddressBookEntryOrAccountName(state, address) { const entry = getAddressBookEntry(state, address) || Object.values(state.metamask.identities).find((identity) => - isEqualCaseInsensitive(identity.address, toChecksumHexAddress(address)), + isEqualCaseInsensitive(identity.address, address), ); return entry && entry.name !== '' ? entry.name : address; } export function getAccountName(identities, address) { const entry = Object.values(identities).find((identity) => - isEqualCaseInsensitive(identity.address, toChecksumHexAddress(address)), + isEqualCaseInsensitive(identity.address, address), ); return entry && entry.name !== '' ? entry.name : ''; } @@ -431,7 +430,7 @@ export function getAccountName(identities, address) { export function getMetadataContractName(state, address) { const tokenList = getTokenList(state); const entry = Object.values(tokenList).find((identity) => - isEqualCaseInsensitive(identity.address, toChecksumHexAddress(address)), + isEqualCaseInsensitive(identity.address, address), ); return entry && entry.name !== '' ? entry.name : ''; } @@ -844,9 +843,8 @@ export const getMemoizedMetadataContractName = createDeepEqualSelector( getTokenList, (_tokenList, address) => address, (tokenList, address) => { - const checksumHexAddress = toChecksumHexAddress(address); const entry = Object.values(tokenList).find((identity) => - isEqualCaseInsensitive(identity.address, checksumHexAddress), + isEqualCaseInsensitive(identity.address, address), ); return entry && entry.name !== '' ? entry.name : ''; }, From 5933dd1fd7b1f6224ff738faf8ef01042e18113b Mon Sep 17 00:00:00 2001 From: David Walsh Date: Fri, 3 Mar 2023 15:11:20 -0600 Subject: [PATCH 19/36] UX: Icon: Restore missing back chevron in settings (#17916) * UX: Icon: Restore missing back chevron in settings * Update ui/pages/settings/settings.component.js Co-authored-by: Nidhi Kumari * Fixing size and alignment --------- Co-authored-by: Nidhi Kumari Co-authored-by: georgewrmarshall Co-authored-by: Garrett Bear --- ui/pages/settings/index.scss | 14 ++++---------- ui/pages/settings/settings.component.js | 8 ++++---- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/ui/pages/settings/index.scss b/ui/pages/settings/index.scss index 21eb8b6e8..465b72f6d 100644 --- a/ui/pages/settings/index.scss +++ b/ui/pages/settings/index.scss @@ -216,17 +216,11 @@ } &__back-button { - display: none; + margin-right: 8px; - @include screen-sm-max { - display: block; - margin-right: 8px; - cursor: pointer; - - [dir='rtl'] & { - margin: 0 0 0 8px; - transform: rotate(180deg); - } + [dir='rtl'] & { + margin: 0 0 0 8px; + transform: rotate(180deg); } } diff --git a/ui/pages/settings/settings.component.js b/ui/pages/settings/settings.component.js index c7989d6e3..0ef390f70 100644 --- a/ui/pages/settings/settings.component.js +++ b/ui/pages/settings/settings.component.js @@ -30,10 +30,9 @@ import AddNetwork from '../../components/app/add-network/add-network'; import { Icon, ButtonIcon, - ICON_SIZES, ICON_NAMES, } from '../../components/component-library'; -import { Color } from '../../helpers/constants/design-system'; +import { Color, DISPLAY } from '../../helpers/constants/design-system'; import SettingsTab from './settings-tab'; import AlertsTab from './alerts-tab'; import NetworksTab from './networks-tab'; @@ -129,10 +128,11 @@ class SettingsPage extends PureComponent { {currentPath !== SETTINGS_ROUTE && ( history.push(backRoute)} + display={[DISPLAY.FLEX, DISPLAY.NONE]} /> )} From 353c9927b4b66d678d0907b20520af05c4dbf916 Mon Sep 17 00:00:00 2001 From: Danica Shen Date: Sat, 4 Mar 2023 12:14:20 +0000 Subject: [PATCH 20/36] fix(17857): show correctly converted account balance in sign&encrypt windows (#17973) Co-authored-by: Dan J Miller --- test/data/mock-state.json | 2 +- test/e2e/tests/encrypt-decrypt.spec.js | 17 +++++++++++++---- .../signature-request-original.test.js.snap | 2 +- .../signature-request.component.js | 3 --- .../signature-request.container.js | 4 ---- .../confirm-decrypt-message.component.js | 5 ++--- .../confirm-decrypt-message.container.js | 2 -- .../confirm-encryption-public-key.component.js | 4 +--- .../confirm-encryption-public-key.container.js | 2 -- .../confirm-encryption-public-key.stories.js | 6 ------ ui/selectors/selectors.test.js | 10 +++++++--- 11 files changed, 25 insertions(+), 32 deletions(-) diff --git a/test/data/mock-state.json b/test/data/mock-state.json index e2eb7d9fd..2b273dc01 100644 --- a/test/data/mock-state.json +++ b/test/data/mock-state.json @@ -193,7 +193,7 @@ "selectedAddress": "0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc", "accounts": { "0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc": { - "balance": "0x0", + "balance": "0x346ba7725f412cbfdb", "address": "0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc" }, "0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b": { diff --git a/test/e2e/tests/encrypt-decrypt.spec.js b/test/e2e/tests/encrypt-decrypt.spec.js index e34908117..0507bf527 100644 --- a/test/e2e/tests/encrypt-decrypt.spec.js +++ b/test/e2e/tests/encrypt-decrypt.spec.js @@ -30,7 +30,7 @@ describe('Encrypt Decrypt', function () { await driver.press('#password', driver.Key.ENTER); await driver.openNewPage('http://127.0.0.1:8080'); - // Get Encryption key + // ------ Get Encryption key ------ await driver.clickElement('#getEncryptionKeyButton'); await driver.waitUntilXWindowHandles(3); let windowHandles = await driver.getAllWindowHandles(); @@ -42,6 +42,11 @@ describe('Encrypt Decrypt', function () { css: '.request-encryption-public-key__header__text', text: 'Request encryption public key', }); + // Account balance is converted properly + const accountBalanceLabel = await driver.findElement( + '.request-encryption-public-key__balance-value', + ); + assert.equal(await accountBalanceLabel.getText(), '25 ETH'); await driver.clickElement({ text: 'Provide', tag: 'button' }); await driver.waitUntilXWindowHandles(2); windowHandles = await driver.getAllWindowHandles(); @@ -51,7 +56,7 @@ describe('Encrypt Decrypt', function () { ); assert.equal(await encryptionKeyLabel.getText(), encryptionKey); - // Encrypt + // ------ Encrypt ------ await driver.fill('#encryptMessageInput', message); await driver.clickElement('#encryptButton'); await driver.waitForSelector({ @@ -59,7 +64,7 @@ describe('Encrypt Decrypt', function () { text: '0x', }); - // Decrypt + // ------ Decrypt ------ await driver.clickElement('#decryptButton'); await driver.waitUntilXWindowHandles(3); windowHandles = await driver.getAllWindowHandles(); @@ -71,7 +76,11 @@ describe('Encrypt Decrypt', function () { css: '.request-decrypt-message__header__text', text: 'Decrypt request', }); - + // Account balance is converted properly + const decryptAccountBalanceLabel = await driver.findElement( + '.request-decrypt-message__balance-value', + ); + assert.equal(await decryptAccountBalanceLabel.getText(), '25 ETH'); // Verify message in MetaMask Notification await driver.clickElement({ text: 'Decrypt message', tag: 'div' }); const notificationMessage = await driver.isElementPresent({ diff --git a/ui/components/app/signature-request-original/__snapshots__/signature-request-original.test.js.snap b/ui/components/app/signature-request-original/__snapshots__/signature-request-original.test.js.snap index c225cfb88..00d474e50 100644 --- a/ui/components/app/signature-request-original/__snapshots__/signature-request-original.test.js.snap +++ b/ui/components/app/signature-request-original/__snapshots__/signature-request-original.test.js.snap @@ -167,7 +167,7 @@ exports[`SignatureRequestOriginal should match snapshot 1`] = `
- 0 + 966.987986 ETH
diff --git a/ui/components/app/signature-request/signature-request.component.js b/ui/components/app/signature-request/signature-request.component.js index 81a8fc989..5c83850cb 100644 --- a/ui/components/app/signature-request/signature-request.component.js +++ b/ui/components/app/signature-request/signature-request.component.js @@ -64,7 +64,6 @@ export default class SignatureRequest extends PureComponent { * Dapp image */ siteImage: PropTypes.string, - conversionRate: PropTypes.number, nativeCurrency: PropTypes.string, currentCurrency: PropTypes.string.isRequired, useNativeCurrencyAsPrimaryCurrency: PropTypes.bool.isRequired, @@ -160,7 +159,6 @@ export default class SignatureRequest extends PureComponent { siteImage, txData, subjectMetadata, - conversionRate, nativeCurrency, currentCurrency, useNativeCurrencyAsPrimaryCurrency, @@ -180,7 +178,6 @@ export default class SignatureRequest extends PureComponent { const balanceInBaseAsset = new Numeric(balance, 16, EtherDenomination.WEI) .toDenomination(EtherDenomination.ETH) - .applyConversionRate(conversionRate) .round(6) .toBase(10) .toString(); diff --git a/ui/components/app/signature-request/signature-request.container.js b/ui/components/app/signature-request/signature-request.container.js index ac3bd2d38..a9308197a 100644 --- a/ui/components/app/signature-request/signature-request.container.js +++ b/ui/components/app/signature-request/signature-request.container.js @@ -4,7 +4,6 @@ import { doesAddressRequireLedgerHidConnection, getCurrentChainId, getRpcPrefsForCurrentProvider, - conversionRateSelector, getSubjectMetadata, unconfirmedMessagesHashSelector, getTotalUnapprovedMessagesCount, @@ -52,7 +51,6 @@ function mapStateToProps(state, ownProps) { unconfirmedMessagesList, unapprovedMessagesCount, mostRecentOverviewPage: getMostRecentOverviewPage(state), - conversionRate: conversionRateSelector(state), nativeCurrency: getNativeCurrency(state), currentCurrency: getCurrentCurrency(state), useNativeCurrencyAsPrimaryCurrency, @@ -91,7 +89,6 @@ function mergeProps(stateProps, dispatchProps, ownProps) { chainId, rpcPrefs, siteImage, - conversionRate, nativeCurrency, currentCurrency, useNativeCurrencyAsPrimaryCurrency, @@ -146,7 +143,6 @@ function mergeProps(stateProps, dispatchProps, ownProps) { chainId, rpcPrefs, siteImage, - conversionRate, nativeCurrency, currentCurrency, useNativeCurrencyAsPrimaryCurrency, diff --git a/ui/pages/confirm-decrypt-message/confirm-decrypt-message.component.js b/ui/pages/confirm-decrypt-message/confirm-decrypt-message.component.js index e175638b5..6066c7fd0 100644 --- a/ui/pages/confirm-decrypt-message/confirm-decrypt-message.component.js +++ b/ui/pages/confirm-decrypt-message/confirm-decrypt-message.component.js @@ -32,7 +32,6 @@ export default class ConfirmDecryptMessage extends Component { cancelDecryptMessage: PropTypes.func.isRequired, decryptMessage: PropTypes.func.isRequired, decryptMessageInline: PropTypes.func.isRequired, - conversionRate: PropTypes.number, history: PropTypes.object.isRequired, mostRecentOverviewPage: PropTypes.string.isRequired, requesterAddress: PropTypes.string, @@ -95,7 +94,7 @@ export default class ConfirmDecryptMessage extends Component { }; renderBalance = () => { - const { conversionRate, nativeCurrency } = this.props; + const { nativeCurrency } = this.props; const { fromAccount: { balance }, } = this.state; @@ -106,7 +105,7 @@ export default class ConfirmDecryptMessage extends Component { 16, EtherDenomination.WEI, ) - .applyConversionRate(conversionRate) + .toDenomination(EtherDenomination.ETH) .round(6) .toBase(10); diff --git a/ui/pages/confirm-decrypt-message/confirm-decrypt-message.container.js b/ui/pages/confirm-decrypt-message/confirm-decrypt-message.container.js index 57358ecdd..4e59137b3 100644 --- a/ui/pages/confirm-decrypt-message/confirm-decrypt-message.container.js +++ b/ui/pages/confirm-decrypt-message/confirm-decrypt-message.container.js @@ -11,7 +11,6 @@ import { import { getTargetAccountWithSendEtherInfo, unconfirmedTransactionsListSelector, - conversionRateSelector, } from '../../selectors'; import { clearConfirmTransaction } from '../../ducks/confirm-transaction/confirm-transaction.duck'; import { getMostRecentOverviewPage } from '../../ducks/history/history'; @@ -38,7 +37,6 @@ function mapStateToProps(state) { fromAccount, requester: null, requesterAddress: null, - conversionRate: conversionRateSelector(state), mostRecentOverviewPage: getMostRecentOverviewPage(state), nativeCurrency: getNativeCurrency(state), }; diff --git a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js index f7f58258e..1ef3a9260 100644 --- a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js +++ b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.component.js @@ -26,7 +26,6 @@ export default class ConfirmEncryptionPublicKey extends Component { clearConfirmTransaction: PropTypes.func.isRequired, cancelEncryptionPublicKey: PropTypes.func.isRequired, encryptionPublicKey: PropTypes.func.isRequired, - conversionRate: PropTypes.number, history: PropTypes.object.isRequired, requesterAddress: PropTypes.string, txData: PropTypes.object, @@ -70,7 +69,6 @@ export default class ConfirmEncryptionPublicKey extends Component { renderBalance = () => { const { - conversionRate, nativeCurrency, fromAccount: { balance }, } = this.props; @@ -81,7 +79,7 @@ export default class ConfirmEncryptionPublicKey extends Component { 16, EtherDenomination.WEI, ) - .applyConversionRate(conversionRate) + .toDenomination(EtherDenomination.ETH) .round(6) .toBase(10); diff --git a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.container.js b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.container.js index 5fd0a07af..554ba41fd 100644 --- a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.container.js +++ b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.container.js @@ -9,7 +9,6 @@ import { } from '../../store/actions'; import { - conversionRateSelector, unconfirmedTransactionsListSelector, getTargetAccountWithSendEtherInfo, } from '../../selectors'; @@ -39,7 +38,6 @@ function mapStateToProps(state) { fromAccount, requester: null, requesterAddress: null, - conversionRate: conversionRateSelector(state), mostRecentOverviewPage: getMostRecentOverviewPage(state), nativeCurrency: getNativeCurrency(state), }; diff --git a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js index cbf8ce060..283b32d45 100644 --- a/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js +++ b/ui/pages/confirm-encryption-public-key/confirm-encryption-public-key.stories.js @@ -28,11 +28,6 @@ export default { encryptionPublicKey: { action: 'encryptionPublicKey', }, - conversionRate: { - control: { - type: 'number', - }, - }, history: { control: { type: 'object', @@ -66,7 +61,6 @@ export default { }, args: { fromAccount: metamask.accountArray[0], - conversionRate: metamask.conversionRate, history: { push: action('history.push()'), }, diff --git a/ui/selectors/selectors.test.js b/ui/selectors/selectors.test.js index c507c4f2d..d0add721b 100644 --- a/ui/selectors/selectors.test.js +++ b/ui/selectors/selectors.test.js @@ -63,7 +63,7 @@ describe('Selectors', () => { it('returns selected account', () => { const account = selectors.getSelectedAccount(mockState); - expect(account.balance).toStrictEqual('0x0'); + expect(account.balance).toStrictEqual('0x346ba7725f412cbfdb'); expect(account.address).toStrictEqual( '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', ); @@ -138,7 +138,9 @@ describe('Selectors', () => { const accountsWithSendEther = selectors.accountsWithSendEtherInfoSelector(mockState); expect(accountsWithSendEther).toHaveLength(4); - expect(accountsWithSendEther[0].balance).toStrictEqual('0x0'); + expect(accountsWithSendEther[0].balance).toStrictEqual( + '0x346ba7725f412cbfdb', + ); expect(accountsWithSendEther[0].address).toStrictEqual( '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', ); @@ -148,7 +150,9 @@ describe('Selectors', () => { it('returns selected account with balance, address, and name from accountsWithSendEtherInfoSelector', () => { const currentAccountwithSendEther = selectors.getCurrentAccountWithSendEtherInfo(mockState); - expect(currentAccountwithSendEther.balance).toStrictEqual('0x0'); + expect(currentAccountwithSendEther.balance).toStrictEqual( + '0x346ba7725f412cbfdb', + ); expect(currentAccountwithSendEther.address).toStrictEqual( '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', ); From ceab2a0b11649e51b95f5d2aa19dcefc1ddfe24e Mon Sep 17 00:00:00 2001 From: PeterYinusa Date: Mon, 6 Mar 2023 18:34:18 +0000 Subject: [PATCH 21/36] Update the PhishingController to v2 and update phishing warning page (#17835) The PhishingController has been updated to v2. This release should dramatically reduce network traffic and double the update speed of the phishing list. This was accomplished by combining both of our phishing configurations into one list (the "stalelist"), then creating a separate list of the changes just the past few days (the "hotlist"). Now users will download a smaller list more frequently (every 30 minutes rather than every hour), whereas the full list is only updated every 4 days. The combined configuration means that we no longer know which list was responsible for each block. The phishing warning page has been updated to dynamically look this information up, to ensure users are still directed to the correct place to dispute a block. This update to the phishing warning page also includes the recent redesign. --- app/scripts/contentscript.js | 7 +- .../metamask-controller.actions.test.js | 16 +- app/scripts/metamask-controller.js | 22 +- app/scripts/metamask-controller.test.js | 16 +- app/scripts/migrations/078.js | 38 ++++ app/scripts/migrations/078.test.js | 108 ++++++++++ app/scripts/migrations/index.js | 2 + lavamoat/browserify/beta/policy.json | 4 +- lavamoat/browserify/desktop/policy.json | 4 +- lavamoat/browserify/flask/policy.json | 4 +- lavamoat/browserify/main/policy.json | 4 +- package.json | 4 +- shared/constants/phishing.js | 4 - test/e2e/mock-e2e.js | 31 +++ test/e2e/tests/phishing-detection.spec.js | 191 +++++++++++++++--- yarn.lock | 48 ++--- 16 files changed, 395 insertions(+), 108 deletions(-) create mode 100644 app/scripts/migrations/078.js create mode 100644 app/scripts/migrations/078.test.js delete mode 100644 shared/constants/phishing.js diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js index 6fbdc741f..73bce1672 100644 --- a/app/scripts/contentscript.js +++ b/app/scripts/contentscript.js @@ -605,16 +605,13 @@ function notifyInpageOfStreamFailure() { /** * Redirects the current page to a phishing information page - * - * @param data */ -function redirectToPhishingWarning(data = {}) { +function redirectToPhishingWarning() { console.debug('MetaMask: Routing to Phishing Warning page.'); const { hostname, href } = window.location; - const { newIssueUrl } = data; const baseUrl = process.env.PHISHING_WARNING_PAGE_URL; - const querystring = new URLSearchParams({ hostname, href, newIssueUrl }); + const querystring = new URLSearchParams({ hostname, href }); window.location.href = `${baseUrl}#${querystring}`; } diff --git a/app/scripts/metamask-controller.actions.test.js b/app/scripts/metamask-controller.actions.test.js index 64d409ed7..e15a84580 100644 --- a/app/scripts/metamask-controller.actions.test.js +++ b/app/scripts/metamask-controller.actions.test.js @@ -62,19 +62,25 @@ describe('MetaMaskController', function () { beforeEach(function () { nock('https://static.metafi.codefi.network') .persist() - .get('/api/v1/lists/eth_phishing_detect_config.json') + .get('/api/v1/lists/stalelist.json') .reply( 200, JSON.stringify({ version: 2, tolerance: 2, fuzzylist: [], - whitelist: [], - blacklist: ['127.0.0.1'], + allowlist: [], + blocklist: ['127.0.0.1'], + lastUpdated: 0, }), ) - .get('/api/v1/lists/phishfort_hotlist.json') - .reply(200, JSON.stringify(['127.0.0.1'])); + .get('/api/v1/lists/hotlist.json') + .reply( + 200, + JSON.stringify([ + { url: '127.0.0.1', targetList: 'blocklist', timestamp: 0 }, + ]), + ); metamaskController = new MetaMaskController({ showUserConfirmation: noop, encryptor: { diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index b72c68741..fe7782bc6 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -69,7 +69,6 @@ import { TransactionStatus, TransactionType, } from '../../shared/constants/transaction'; -import { PHISHING_NEW_ISSUE_URLS } from '../../shared/constants/phishing'; import { GAS_API_BASE_URL, GAS_DEV_API_BASE_URL, @@ -509,10 +508,11 @@ export default class MetamaskController extends EventEmitter { initState.PhishingController, ); - this.phishingController.maybeUpdatePhishingLists(); + this.phishingController.maybeUpdateState(); if (process.env.IN_TEST) { - this.phishingController.setRefreshInterval(5 * SECOND); + this.phishingController.setHotlistRefreshInterval(5 * SECOND); + this.phishingController.setStalelistRefreshInterval(30 * SECOND); } this.announcementController = new AnnouncementController( @@ -3601,15 +3601,11 @@ export default class MetamaskController extends EventEmitter { if (sender.url) { const { hostname } = new URL(sender.url); - this.phishingController.maybeUpdatePhishingLists(); + this.phishingController.maybeUpdateState(); // Check if new connection is blocked if phishing detection is on const phishingTestResponse = this.phishingController.test(hostname); if (usePhishDetect && phishingTestResponse?.result) { - this.sendPhishingWarning( - connectionStream, - hostname, - phishingTestResponse, - ); + this.sendPhishingWarning(connectionStream, hostname); this.metaMetricsController.trackEvent({ event: EVENT_NAMES.PHISHING_PAGE_DISPLAYED, category: EVENT.CATEGORIES.PHISHING, @@ -3694,15 +3690,11 @@ export default class MetamaskController extends EventEmitter { * @param {*} connectionStream - The duplex stream to the per-page script, * for sending the reload attempt to. * @param {string} hostname - The hostname that triggered the suspicion. - * @param {object} phishingTestResponse - Result of calling `phishingController.test`, - * which is the result of calling eth-phishing-detects detector.check method https://github.com/MetaMask/eth-phishing-detect/blob/master/src/detector.js#L55-L112 */ - sendPhishingWarning(connectionStream, hostname, phishingTestResponse) { - const newIssueUrl = PHISHING_NEW_ISSUE_URLS[phishingTestResponse?.name]; - + sendPhishingWarning(connectionStream, hostname) { const mux = setupMultiplex(connectionStream); const phishingStream = mux.createStream('phishing'); - phishingStream.write({ hostname, newIssueUrl }); + phishingStream.write({ hostname }); } /** diff --git a/app/scripts/metamask-controller.test.js b/app/scripts/metamask-controller.test.js index 9a4c49684..ab78c3100 100644 --- a/app/scripts/metamask-controller.test.js +++ b/app/scripts/metamask-controller.test.js @@ -121,19 +121,25 @@ describe('MetaMaskController', function () { .reply(200, '{"JPY":12415.9}'); nock('https://static.metafi.codefi.network') .persist() - .get('/api/v1/lists/eth_phishing_detect_config.json') + .get('/api/v1/lists/stalelist.json') .reply( 200, JSON.stringify({ version: 2, tolerance: 2, fuzzylist: [], - whitelist: [], - blacklist: ['127.0.0.1'], + allowlist: [], + blocklist: ['127.0.0.1'], + lastUpdated: 0, }), ) - .get('/api/v1/lists/phishfort_hotlist.json') - .reply(200, JSON.stringify(['127.0.0.1'])); + .get('/api/v1/lists/hotlist.json') + .reply( + 200, + JSON.stringify([ + { url: '127.0.0.1', targetList: 'blocklist', timestamp: 0 }, + ]), + ); sandbox.replace(browser, 'runtime', { sendMessage: sandbox.stub().rejects(), diff --git a/app/scripts/migrations/078.js b/app/scripts/migrations/078.js new file mode 100644 index 000000000..7c4090574 --- /dev/null +++ b/app/scripts/migrations/078.js @@ -0,0 +1,38 @@ +import { cloneDeep } from 'lodash'; +import { hasProperty, isObject } from '@metamask/utils'; + +export const version = 78; + +/** + * The`@metamask/phishing-controller` state was updated in v2.0.0. + * + * @param originalVersionedData - Versioned MetaMask extension state, exactly what we persist to dist. + * @param originalVersionedData.meta - State metadata. + * @param originalVersionedData.meta.version - The current state version. + * @param originalVersionedData.data - The persisted MetaMask state, keyed by controller. + * @returns Updated versioned MetaMask extension state. + */ +export default { + version, + async migrate(originalVersionedData) { + const versionedData = cloneDeep(originalVersionedData); + versionedData.meta.version = version; + versionedData.data = transformState(versionedData.data); + return versionedData; + }, +}; + +function transformState(state) { + if ( + !hasProperty(state, 'PhishingController') || + !isObject(state.PhishingController) + ) { + return state; + } + const { PhishingController } = state; + + delete PhishingController.phishing; + delete PhishingController.lastFetched; + + return state; +} diff --git a/app/scripts/migrations/078.test.js b/app/scripts/migrations/078.test.js new file mode 100644 index 000000000..fb1c87a0b --- /dev/null +++ b/app/scripts/migrations/078.test.js @@ -0,0 +1,108 @@ +import { migrate, version } from './078'; + +describe('migration #78', () => { + it('updates the version metadata', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: {}, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.meta).toStrictEqual({ + version, + }); + }); + + it('does not change the state if the phishing controller state does not exist', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { test: '123' }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual(oldStorage.data); + }); + + const nonObjects = [undefined, null, 'test', 1, ['test']]; + + for (const invalidState of nonObjects) { + it(`does not change the state if the phishing controller state is ${invalidState}`, async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { PhishingController: invalidState }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual(oldStorage.data); + }); + } + + it('does not change the state if the phishing controller state does not include "phishing" or "lastFetched" properties', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { PhishingController: { test: '123' } }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual(oldStorage.data); + }); + + it('deletes the "phishing" property', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { PhishingController: { test: '123', phishing: [] } }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual({ + PhishingController: { test: '123' }, + }); + }); + + it('deletes the "lastFetched" property', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { PhishingController: { test: '123', lastFetched: 100 } }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual({ + PhishingController: { test: '123' }, + }); + }); + + it('deletes the "phishing" and "lastFetched" properties', async () => { + const oldStorage = { + meta: { + version: 77, + }, + data: { + PhishingController: { test: '123', lastFetched: 100, phishing: [] }, + }, + }; + + const newStorage = await migrate(oldStorage); + + expect(newStorage.data).toStrictEqual({ + PhishingController: { test: '123' }, + }); + }); +}); diff --git a/app/scripts/migrations/index.js b/app/scripts/migrations/index.js index d39595847..d4928f75e 100644 --- a/app/scripts/migrations/index.js +++ b/app/scripts/migrations/index.js @@ -81,6 +81,7 @@ import m074 from './074'; import m075 from './075'; import m076 from './076'; import m077 from './077'; +import m078 from './078'; const migrations = [ m002, @@ -159,6 +160,7 @@ const migrations = [ m075, m076, m077, + m078, ]; export default migrations; diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index fb29b869d..d71bd89a8 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -1266,7 +1266,7 @@ "@metamask/base-controller": true, "@metamask/controller-utils>isomorphic-fetch": true, "@metamask/phishing-controller>@metamask/controller-utils": true, - "@metamask/phishing-controller>eth-phishing-detect": true, + "@metamask/phishing-warning>eth-phishing-detect": true, "punycode": true } }, @@ -1285,7 +1285,7 @@ "ethjs>ethjs-unit": true } }, - "@metamask/phishing-controller>eth-phishing-detect": { + "@metamask/phishing-warning>eth-phishing-detect": { "packages": { "eslint>optionator>fast-levenshtein": true } diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 75fcd2212..62a1a9b39 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -1218,11 +1218,11 @@ "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/controller-utils>isomorphic-fetch": true, - "@metamask/phishing-controller>eth-phishing-detect": true, + "@metamask/phishing-warning>eth-phishing-detect": true, "punycode": true } }, - "@metamask/phishing-controller>eth-phishing-detect": { + "@metamask/phishing-warning>eth-phishing-detect": { "packages": { "eslint>optionator>fast-levenshtein": true } diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 50ea634e9..ba2c51431 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -1278,7 +1278,7 @@ "@metamask/base-controller": true, "@metamask/controller-utils>isomorphic-fetch": true, "@metamask/phishing-controller>@metamask/controller-utils": true, - "@metamask/phishing-controller>eth-phishing-detect": true, + "@metamask/phishing-warning>eth-phishing-detect": true, "punycode": true } }, @@ -1297,7 +1297,7 @@ "ethjs>ethjs-unit": true } }, - "@metamask/phishing-controller>eth-phishing-detect": { + "@metamask/phishing-warning>eth-phishing-detect": { "packages": { "eslint>optionator>fast-levenshtein": true } diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index fb29b869d..d71bd89a8 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -1266,7 +1266,7 @@ "@metamask/base-controller": true, "@metamask/controller-utils>isomorphic-fetch": true, "@metamask/phishing-controller>@metamask/controller-utils": true, - "@metamask/phishing-controller>eth-phishing-detect": true, + "@metamask/phishing-warning>eth-phishing-detect": true, "punycode": true } }, @@ -1285,7 +1285,7 @@ "ethjs>ethjs-unit": true } }, - "@metamask/phishing-controller>eth-phishing-detect": { + "@metamask/phishing-warning>eth-phishing-detect": { "packages": { "eslint>optionator>fast-levenshtein": true } diff --git a/package.json b/package.json index 9e1cf0818..a4e179b2d 100644 --- a/package.json +++ b/package.json @@ -242,7 +242,7 @@ "@metamask/notification-controller": "^1.0.0", "@metamask/obs-store": "^5.0.0", "@metamask/permission-controller": "^1.0.0", - "@metamask/phishing-controller": "^1.1.2", + "@metamask/phishing-controller": "^2.0.0", "@metamask/post-message-stream": "^6.0.0", "@metamask/providers": "^10.2.1", "@metamask/rate-limit-controller": "^1.0.0", @@ -371,7 +371,7 @@ "@metamask/eslint-config-nodejs": "^9.0.0", "@metamask/eslint-config-typescript": "^9.0.1", "@metamask/forwarder": "^1.1.0", - "@metamask/phishing-warning": "^1.2.1", + "@metamask/phishing-warning": "^2.0.1", "@metamask/test-dapp": "^5.4.0", "@sentry/cli": "^1.58.0", "@storybook/addon-a11y": "^6.5.13", diff --git a/shared/constants/phishing.js b/shared/constants/phishing.js deleted file mode 100644 index 63dea3706..000000000 --- a/shared/constants/phishing.js +++ /dev/null @@ -1,4 +0,0 @@ -export const PHISHING_NEW_ISSUE_URLS = { - MetaMask: 'https://github.com/metamask/eth-phishing-detect/issues/new', - PhishFort: 'https://github.com/phishfort/phishfort-lists/issues/new', -}; diff --git a/test/e2e/mock-e2e.js b/test/e2e/mock-e2e.js index c043bf570..e6da0333d 100644 --- a/test/e2e/mock-e2e.js +++ b/test/e2e/mock-e2e.js @@ -5,6 +5,21 @@ const blacklistedHosts = [ 'sepolia.infura.io', ]; +const HOTLIST_URL = + 'https://static.metafi.codefi.network/api/v1/lists/hotlist.json'; +const STALELIST_URL = + 'https://static.metafi.codefi.network/api/v1/lists/stalelist.json'; + +const emptyHotlist = []; +const emptyStalelist = { + version: 2, + tolerance: 2, + fuzzylist: [], + allowlist: [], + blocklist: [], + lastUpdated: 0, +}; + async function setupMocking(server, testSpecificMock) { await server.forAnyRequest().thenPassThrough({ beforeRequest: (req) => { @@ -341,6 +356,22 @@ async function setupMocking(server, testSpecificMock) { }); testSpecificMock(server); + + // Mocks below this line can be overridden by test-specific mocks + + await server.forGet(STALELIST_URL).thenCallback(() => { + return { + statusCode: 200, + json: emptyStalelist, + }; + }); + + await server.forGet(HOTLIST_URL).thenCallback(() => { + return { + statusCode: 200, + json: emptyHotlist, + }; + }); } module.exports = { setupMocking }; diff --git a/test/e2e/tests/phishing-detection.spec.js b/test/e2e/tests/phishing-detection.spec.js index 897ad66ac..cc30a5ca0 100644 --- a/test/e2e/tests/phishing-detection.spec.js +++ b/test/e2e/tests/phishing-detection.spec.js @@ -2,36 +2,87 @@ const { strict: assert } = require('assert'); const { convertToHexValue, withFixtures } = require('../helpers'); const FixtureBuilder = require('../fixture-builder'); -const PHISHFORT_CDN_URL = - 'https://static.metafi.codefi.network/api/v1/lists/phishfort_hotlist.json'; +const STALELIST_URL = + 'https://static.metafi.codefi.network/api/v1/lists/stalelist.json'; -describe('Phishing Detection', function () { - async function mockPhishingDetection(mockServer) { - await mockServer - .forGet( - 'https://static.metafi.codefi.network/api/v1/lists/eth_phishing_detect_config.json', - ) - .thenCallback(() => { - return { - statusCode: 200, - json: { - version: 2, - tolerance: 2, - fuzzylist: [], - whitelist: [], - blacklist: ['127.0.0.1'], - }, - }; - }); - } - async function mockPhishfortPhishingDetection(mockServer) { - await mockServer.forGet(PHISHFORT_CDN_URL).thenCallback(() => { +const emptyHtmlPage = ` + + + + title + + + Empty page + +`; + +/** + * Setup fetch mocks for the phishing detection feature. + * + * The mock configuration will show that "127.0.0.1" is blocked. The dynamic lookup on the warning + * page can be customized, so that we can test both the MetaMask and PhishFort block cases. + * + * @param {import('mockttp').Mockttp} mockServer - The mock server. + * @param {object} metamaskPhishingConfigResponse - The response for the dynamic phishing + * configuration lookup performed by the warning page. + */ +async function setupPhishingDetectionMocks( + mockServer, + metamaskPhishingConfigResponse, +) { + await mockServer.forGet(STALELIST_URL).thenCallback(() => { + return { + statusCode: 200, + json: { + version: 2, + tolerance: 2, + fuzzylist: [], + allowlist: [], + blocklist: ['127.0.0.1'], + lastUpdated: 0, + }, + }; + }); + + await mockServer + .forGet('https://github.com/MetaMask/eth-phishing-detect/issues/new') + .thenCallback(() => { return { statusCode: 200, - json: ['127.0.0.1'], + body: emptyHtmlPage, }; }); + await mockServer + .forGet('https://github.com/phishfort/phishfort-lists/issues/new') + .thenCallback(() => { + return { + statusCode: 200, + body: emptyHtmlPage, + }; + }); + + await mockServer + .forGet( + 'https://raw.githubusercontent.com/MetaMask/eth-phishing-detect/master/src/config.json', + ) + .thenCallback(() => metamaskPhishingConfigResponse); +} + +describe('Phishing Detection', function () { + function mockPhishingDetection(mockServer) { + setupPhishingDetectionMocks(mockServer, { + statusCode: 200, + json: { + version: 2, + tolerance: 2, + fuzzylist: [], + whitelist: [], + blacklist: ['127.0.0.1'], + lastUpdated: 0, + }, + }); } + const ganacheOptions = { accounts: [ { @@ -41,6 +92,7 @@ describe('Phishing Detection', function () { }, ], }; + it('should display the MetaMask Phishing Detection page and take the user to the blocked page if they continue', async function () { await withFixtures( { @@ -57,7 +109,7 @@ describe('Phishing Detection', function () { await driver.press('#password', driver.Key.ENTER); await driver.openNewPage('http://127.0.0.1:8080'); await driver.clickElement({ - text: 'continuing at your own risk', + text: 'continue to the site.', }); const header = await driver.findElement('h1'); assert.equal(await header.getText(), 'E2E Test Dapp'); @@ -93,7 +145,7 @@ describe('Phishing Detection', function () { }); await driver.switchToWindowWithTitle('MetaMask Phishing Detection'); await driver.clickElement({ - text: 'continuing at your own risk', + text: 'continue to the site.', }); const header = await driver.findElement('h1'); assert.equal(await header.getText(), 'E2E Test Dapp'); @@ -131,7 +183,7 @@ describe('Phishing Detection', function () { }); await driver.switchToWindowWithTitle('MetaMask Phishing Detection'); await driver.clickElement({ - text: 'continuing at your own risk', + text: 'continue to the site.', }); // Ensure we're not on the wallet home page @@ -140,13 +192,15 @@ describe('Phishing Detection', function () { ); }); - it('should display the MetaMask Phishing Detection page with the correct new issue link if the issue was detected from the phishfort list', async function () { + it('should navigate the user to eth-phishing-detect to dispute a block if the phishing warning page fails to identify the source', async function () { await withFixtures( { fixtures: new FixtureBuilder().build(), ganacheOptions, title: this.test.title, - testSpecificMock: mockPhishfortPhishingDetection, + testSpecificMock: (mockServer) => { + setupPhishingDetectionMocks(mockServer, { statusCode: 500 }); + }, dapp: true, failOnConsoleError: false, }, @@ -155,10 +209,83 @@ describe('Phishing Detection', function () { await driver.fill('#password', 'correct horse battery staple'); await driver.press('#password', driver.Key.ENTER); await driver.openNewPage('http://127.0.0.1:8080'); - const newIssueLink = await driver.findElements( - "a[href='https://github.com/phishfort/phishfort-lists/issues/new?title=[Legitimate%20Site%20Blocked]%20127.0.0.1&body=http%3A%2F%2F127.0.0.1%3A8080%2F']", + + await driver.clickElement({ text: 'report a detection problem.' }); + + // wait for page to load before checking URL. + await driver.findElement({ text: 'Empty page' }); + assert.equal( + await driver.getCurrentUrl(), + `https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20127.0.0.1&body=http%3A%2F%2F127.0.0.1%3A8080%2F`, + ); + }, + ); + }); + + it('should navigate the user to eth-phishing-detect to dispute a block from MetaMask', async function () { + await withFixtures( + { + fixtures: new FixtureBuilder().build(), + ganacheOptions, + title: this.test.title, + testSpecificMock: mockPhishingDetection, + dapp: true, + failOnConsoleError: false, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + await driver.openNewPage('http://127.0.0.1:8080'); + + await driver.clickElement({ text: 'report a detection problem.' }); + + // wait for page to load before checking URL. + await driver.findElement({ text: 'Empty page' }); + assert.equal( + await driver.getCurrentUrl(), + `https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20127.0.0.1&body=http%3A%2F%2F127.0.0.1%3A8080%2F`, + ); + }, + ); + }); + + it('should navigate the user to PhishFort to dispute a block from MetaMask', async function () { + await withFixtures( + { + fixtures: new FixtureBuilder().build(), + ganacheOptions, + title: this.test.title, + testSpecificMock: (mockServer) => { + setupPhishingDetectionMocks(mockServer, { + statusCode: 200, + json: { + version: 2, + tolerance: 2, + fuzzylist: [], + whitelist: [], + blacklist: [], + lastUpdated: 0, + }, + }); + }, + dapp: true, + failOnConsoleError: false, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + await driver.openNewPage('http://127.0.0.1:8080'); + + await driver.clickElement({ text: 'report a detection problem.' }); + + // wait for page to load before checking URL. + await driver.findElement({ text: 'Empty page' }); + assert.equal( + await driver.getCurrentUrl(), + `https://github.com/phishfort/phishfort-lists/issues/new?title=[Legitimate%20Site%20Blocked]%20127.0.0.1&body=http%3A%2F%2F127.0.0.1%3A8080%2F`, ); - assert.equal(newIssueLink.length, 1); }, ); }); diff --git a/yarn.lock b/yarn.lock index 4b20541e2..1936a9513 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4015,9 +4015,9 @@ __metadata: languageName: node linkType: hard -"@metamask/phishing-controller@npm:^1.1.2": - version: 1.1.2 - resolution: "@metamask/phishing-controller@npm:1.1.2" +"@metamask/phishing-controller@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/phishing-controller@npm:2.0.0" dependencies: "@metamask/base-controller": ^1.1.2 "@metamask/controller-utils": ^2.0.0 @@ -4025,31 +4025,24 @@ __metadata: eth-phishing-detect: ^1.2.0 isomorphic-fetch: ^3.0.0 punycode: ^2.1.1 - checksum: a85427c5c0adab2651c9fb0207cae9501597b820d0807c35177615533bba2626a4c2458b4863f0bef987cc5dfbd523d70a60d3c48bd332ebc8bd6b5a8f640c4e + checksum: 8ad20a7cdac8fc5f450bb157d19b0b780d82490571f4d33e1afde871ace078cf4f885e2e5be4abc6e1e551986d5f44a3200b076d5545764f5492dfaf005419e4 languageName: node linkType: hard -"@metamask/phishing-warning@npm:^1.2.1": - version: 1.2.1 - resolution: "@metamask/phishing-warning@npm:1.2.1" +"@metamask/phishing-warning@npm:^2.0.1": + version: 2.0.1 + resolution: "@metamask/phishing-warning@npm:2.0.1" dependencies: "@metamask/design-tokens": ^1.6.0 - "@metamask/post-message-stream": ^5.1.0 + "@metamask/post-message-stream": ^6.0.0 + "@types/punycode": ^2.1.0 + eth-phishing-detect: ^1.2.0 globalthis: 1.0.1 obj-multiplex: ^1.0.0 pump: ^3.0.0 - ses: 0.12.4 - checksum: 5cdf2f5fb12dbf774c6d54670051ecd02c489f3f0a5ae68a3facbb2135347be3fe308e260fb44e1a34310fe20cb8e26c3b7b0a3addfdd70ca26ff6ba22f22d92 - languageName: node - linkType: hard - -"@metamask/post-message-stream@npm:^5.1.0": - version: 5.1.0 - resolution: "@metamask/post-message-stream@npm:5.1.0" - dependencies: - "@metamask/utils": ^2.0.0 - readable-stream: 2.3.3 - checksum: d6c66d82b94970a0689f2d78e4011b891a48edb0f397b54d657c10506cfc066298f3198203a6e8ec090ba87705d62c0db5ba409fede209e1612c8028160059da + punycode: ^2.1.1 + ses: ^0.18.1 + checksum: caa3e596c3a67188e457307b43724c89121d60734353922d369932093f8618f96465ba7613b194dc2c57754399783dcdf1777c900afeff21bd5137f02688b686 languageName: node linkType: hard @@ -4286,15 +4279,6 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^2.0.0": - version: 2.1.0 - resolution: "@metamask/utils@npm:2.1.0" - dependencies: - fast-deep-equal: ^3.1.3 - checksum: 50970fe28cbf98fbc34fb4f69d9bc90f5db94929c69ab532f57b48f42163ea77fb080ab31854efd984361c3e29e67831a78d94d1211ac3bcc6b9557769c73127 - languageName: node - linkType: hard - "@metamask/utils@npm:^3.0.1, @metamask/utils@npm:^3.0.3, @metamask/utils@npm:^3.3.0, @metamask/utils@npm:^3.3.1, @metamask/utils@npm:^3.4.0, @metamask/utils@npm:^3.4.1": version: 3.4.1 resolution: "@metamask/utils@npm:3.4.1" @@ -24197,8 +24181,8 @@ __metadata: "@metamask/notification-controller": ^1.0.0 "@metamask/obs-store": ^5.0.0 "@metamask/permission-controller": ^1.0.0 - "@metamask/phishing-controller": ^1.1.2 - "@metamask/phishing-warning": ^1.2.1 + "@metamask/phishing-controller": ^2.0.0 + "@metamask/phishing-warning": ^2.0.1 "@metamask/post-message-stream": ^6.0.0 "@metamask/providers": ^10.2.1 "@metamask/rate-limit-controller": ^1.0.0 @@ -30872,7 +30856,7 @@ __metadata: languageName: node linkType: hard -"ses@npm:0.12.4, ses@npm:^0.12.4": +"ses@npm:^0.12.4": version: 0.12.4 resolution: "ses@npm:0.12.4" dependencies: From 64d8f359daeee5647fcba2621865888a34e4eee9 Mon Sep 17 00:00:00 2001 From: PeterYinusa Date: Mon, 6 Mar 2023 18:53:30 +0000 Subject: [PATCH 22/36] Update the PhishingController to v2 tests --- app/scripts/migrations/078.test.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/scripts/migrations/078.test.js b/app/scripts/migrations/078.test.js index fb1c87a0b..45b0789f0 100644 --- a/app/scripts/migrations/078.test.js +++ b/app/scripts/migrations/078.test.js @@ -1,4 +1,4 @@ -import { migrate, version } from './078'; +import migration78 from './078'; describe('migration #78', () => { it('updates the version metadata', async () => { @@ -9,10 +9,10 @@ describe('migration #78', () => { data: {}, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.meta).toStrictEqual({ - version, + version: 78, }); }); @@ -24,7 +24,7 @@ describe('migration #78', () => { data: { test: '123' }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual(oldStorage.data); }); @@ -40,7 +40,7 @@ describe('migration #78', () => { data: { PhishingController: invalidState }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual(oldStorage.data); }); @@ -54,7 +54,7 @@ describe('migration #78', () => { data: { PhishingController: { test: '123' } }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual(oldStorage.data); }); @@ -67,7 +67,7 @@ describe('migration #78', () => { data: { PhishingController: { test: '123', phishing: [] } }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual({ PhishingController: { test: '123' }, @@ -82,7 +82,7 @@ describe('migration #78', () => { data: { PhishingController: { test: '123', lastFetched: 100 } }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual({ PhishingController: { test: '123' }, @@ -99,7 +99,7 @@ describe('migration #78', () => { }, }; - const newStorage = await migrate(oldStorage); + const newStorage = await migration78.migrate(oldStorage); expect(newStorage.data).toStrictEqual({ PhishingController: { test: '123' }, From b5321c8b4f286ea26d1cadd13ddb810e5de5f408 Mon Sep 17 00:00:00 2001 From: PeterYinusa Date: Mon, 6 Mar 2023 19:16:30 +0000 Subject: [PATCH 23/36] bump test coverage --- coverage-targets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/coverage-targets.js b/coverage-targets.js index ada91d29a..d5bce3b6f 100644 --- a/coverage-targets.js +++ b/coverage-targets.js @@ -6,9 +6,9 @@ // subset of files to check against these targets. module.exports = { global: { - lines: 62.25, - branches: 50.5, - statements: 61.5, + lines: 63, + branches: 51, + statements: 62, functions: 55, }, transforms: { From 7586d1c3066453bd07d230d84d3e0a8a1b99c05b Mon Sep 17 00:00:00 2001 From: seaona Date: Tue, 7 Mar 2023 12:24:41 +0100 Subject: [PATCH 24/36] Policy updates --- lavamoat/browserify/desktop/policy.json | 9254 ++++++++++++----------- 1 file changed, 4643 insertions(+), 4611 deletions(-) diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 62a1a9b39..ba2c51431 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -1,4614 +1,4646 @@ { - "resources": { - "@babel/runtime": { - "globals": { - "regeneratorRuntime": "write" - } - }, - "@download/blockies": { - "globals": { - "document.createElement": true - } - }, - "@ensdomains/content-hash": { - "globals": { - "console.warn": true - }, - "packages": { - "@ensdomains/content-hash>cids": true, - "@ensdomains/content-hash>js-base64": true, - "@ensdomains/content-hash>multicodec": true, - "@ensdomains/content-hash>multihashes": true, - "browserify>buffer": true - } - }, - "@ensdomains/content-hash>cids": { - "packages": { - "@ensdomains/content-hash>cids>multibase": true, - "@ensdomains/content-hash>cids>multicodec": true, - "@ensdomains/content-hash>cids>multihashes": true, - "@ensdomains/content-hash>cids>uint8arrays": true - } - }, - "@ensdomains/content-hash>cids>multibase": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@ensdomains/content-hash>cids>multibase>@multiformats/base-x": true - } - }, - "@ensdomains/content-hash>cids>multicodec": { - "packages": { - "@ensdomains/content-hash>cids>multicodec>varint": true, - "@ensdomains/content-hash>cids>uint8arrays": true - } - }, - "@ensdomains/content-hash>cids>multihashes": { - "packages": { - "@ensdomains/content-hash>cids>multibase": true, - "@ensdomains/content-hash>cids>uint8arrays": true, - "@ensdomains/content-hash>multihashes>varint": true - } - }, - "@ensdomains/content-hash>cids>uint8arrays": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@ensdomains/content-hash>cids>multibase": true - } - }, - "@ensdomains/content-hash>js-base64": { - "globals": { - "Base64": "write", - "TextDecoder": true, - "TextEncoder": true, - "atob": true, - "btoa": true, - "define": true - }, - "packages": { - "browserify>buffer": true - } - }, - "@ensdomains/content-hash>multicodec": { - "packages": { - "@ensdomains/content-hash>multicodec>uint8arrays": true, - "@ensdomains/content-hash>multicodec>varint": true - } - }, - "@ensdomains/content-hash>multicodec>uint8arrays": { - "packages": { - "@ensdomains/content-hash>multicodec>uint8arrays>multibase": true, - "@ensdomains/content-hash>multihashes>web-encoding": true - } - }, - "@ensdomains/content-hash>multicodec>uint8arrays>multibase": { - "packages": { - "@ensdomains/content-hash>cids>multibase>@multiformats/base-x": true, - "@ensdomains/content-hash>multihashes>web-encoding": true - } - }, - "@ensdomains/content-hash>multihashes": { - "packages": { - "@ensdomains/content-hash>multihashes>multibase": true, - "@ensdomains/content-hash>multihashes>varint": true, - "@ensdomains/content-hash>multihashes>web-encoding": true, - "browserify>buffer": true - } - }, - "@ensdomains/content-hash>multihashes>multibase": { - "packages": { - "@ensdomains/content-hash>multihashes>web-encoding": true, - "browserify>buffer": true, - "ethereumjs-wallet>bs58check>bs58>base-x": true - } - }, - "@ensdomains/content-hash>multihashes>web-encoding": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>util": true - } - }, - "@ethereumjs/common": { - "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true - } - }, - "@ethereumjs/common>crc-32": { - "globals": { - "DO_NOT_EXPORT_CRC": true, - "define": true - } - }, - "@ethereumjs/tx": { - "packages": { - "@ethereumjs/common": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util": true - } - }, - "@ethersproject/abi": { - "globals": { - "console.log": true - }, - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/constants": true, - "@ethersproject/abi>@ethersproject/hash": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true - } - }, - "@ethersproject/abi>@ethersproject/address": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/bignumber": true, - "@ethersproject/providers>@ethersproject/rlp": true - } - }, - "@ethersproject/abi>@ethersproject/bytes": { - "packages": { - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/abi>@ethersproject/constants": { - "packages": { - "@ethersproject/bignumber": true - } - }, - "@ethersproject/abi>@ethersproject/hash": { - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true, - "@ethersproject/providers>@ethersproject/base64": true - } - }, - "@ethersproject/abi>@ethersproject/keccak256": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/keccak256>js-sha3": true - } - }, - "@ethersproject/abi>@ethersproject/keccak256>js-sha3": { - "globals": { - "define": true - }, - "packages": { - "browserify>process": true - } - }, - "@ethersproject/abi>@ethersproject/logger": { - "globals": { - "console": true - } - }, - "@ethersproject/abi>@ethersproject/properties": { - "packages": { - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/abi>@ethersproject/strings": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/constants": true, - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/bignumber": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/bignumber>bn.js": true - } - }, - "@ethersproject/bignumber>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@ethersproject/contracts": { - "globals": { - "setTimeout": true - }, - "packages": { - "@ethersproject/abi": true, - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/bignumber": true, - "@ethersproject/hdnode>@ethersproject/abstract-signer": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/providers>@ethersproject/abstract-provider": true - } - }, - "@ethersproject/hdnode": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true, - "@ethersproject/hdnode>@ethersproject/basex": true, - "@ethersproject/hdnode>@ethersproject/pbkdf2": true, - "@ethersproject/hdnode>@ethersproject/sha2": true, - "@ethersproject/hdnode>@ethersproject/signing-key": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/hdnode>@ethersproject/wordlists": true - } - }, - "@ethersproject/hdnode>@ethersproject/abstract-signer": { - "packages": { - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true - } - }, - "@ethersproject/hdnode>@ethersproject/basex": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/properties": true - } - }, - "@ethersproject/hdnode>@ethersproject/pbkdf2": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/hdnode>@ethersproject/sha2": true - } - }, - "@ethersproject/hdnode>@ethersproject/sha2": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "ethereumjs-util>ethereum-cryptography>hash.js": true - } - }, - "@ethersproject/hdnode>@ethersproject/signing-key": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "ganache>secp256k1>elliptic": true - } - }, - "@ethersproject/hdnode>@ethersproject/transactions": { - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/constants": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/bignumber": true, - "@ethersproject/hdnode>@ethersproject/signing-key": true, - "@ethersproject/providers>@ethersproject/rlp": true - } - }, - "@ethersproject/hdnode>@ethersproject/wordlists": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/hash": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true - } - }, - "@ethersproject/providers": { - "globals": { - "WebSocket": true, - "clearInterval": true, - "clearTimeout": true, - "console.log": true, - "console.warn": true, - "setInterval": true, - "setTimeout": true - }, - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/constants": true, - "@ethersproject/abi>@ethersproject/hash": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true, - "@ethersproject/hdnode>@ethersproject/abstract-signer": true, - "@ethersproject/hdnode>@ethersproject/basex": true, - "@ethersproject/hdnode>@ethersproject/sha2": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/providers>@ethersproject/abstract-provider": true, - "@ethersproject/providers>@ethersproject/base64": true, - "@ethersproject/providers>@ethersproject/networks": true, - "@ethersproject/providers>@ethersproject/random": true, - "@ethersproject/providers>@ethersproject/web": true, - "@ethersproject/providers>bech32": true - } - }, - "@ethersproject/providers>@ethersproject/abstract-provider": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/bignumber": true - } - }, - "@ethersproject/providers>@ethersproject/base64": { - "globals": { - "atob": true, - "btoa": true - }, - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true - } - }, - "@ethersproject/providers>@ethersproject/networks": { - "packages": { - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/providers>@ethersproject/random": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/providers>@ethersproject/rlp": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true - } - }, - "@ethersproject/providers>@ethersproject/web": { - "globals": { - "clearTimeout": true, - "fetch": true, - "setTimeout": true - }, - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/providers>@ethersproject/base64": true - } - }, - "@formatjs/intl-relativetimeformat": { - "globals": { - "Intl": true - }, - "packages": { - "@formatjs/intl-relativetimeformat>@formatjs/intl-utils": true - } - }, - "@formatjs/intl-relativetimeformat>@formatjs/intl-utils": { - "globals": { - "Intl.getCanonicalLocales": true - } - }, - "@keystonehq/bc-ur-registry-eth": { - "packages": { - "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "browserify>buffer": true, - "eth-lattice-keyring>@ethereumjs/util": true, - "uuid": true - } - }, - "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": { - "globals": { - "define": true - }, - "packages": { - "@ngraveio/bc-ur": true, - "browserify>buffer": true, - "enzyme>cheerio>tslib": true, - "ethereumjs-wallet>bs58check": true - } - }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>bs58check": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "@keystonehq/metamask-airgapped-keyring": { - "packages": { - "@ethereumjs/tx": true, - "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring": true, - "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util>rlp": true, - "uuid": true - } - }, - "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring": { - "packages": { - "@ethereumjs/tx": true, - "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, - "browserify>buffer": true, - "eth-lattice-keyring>@ethereumjs/util": true, - "uuid": true - } - }, - "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": { - "globals": { - "TextEncoder": true - } - }, - "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store": { - "packages": { - "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store>through2": true, - "browserify>stream-browserify": true, - "json-rpc-engine>@metamask/safe-event-emitter": true - } - }, - "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store>through2": { - "packages": { - "browserify>process": true, - "browserify>util": true, - "readable-stream": true, - "watchify>xtend": true - } - }, - "@material-ui/core": { - "globals": { - "Image": true, - "_formatMuiErrorMessage": true, - "addEventListener": true, - "clearInterval": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "document": true, - "getComputedStyle": true, - "getSelection": true, - "innerHeight": true, - "innerWidth": true, - "matchMedia": true, - "navigator": true, - "performance.now": true, - "removeEventListener": true, - "requestAnimationFrame": true, - "setInterval": true, - "setTimeout": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/styles": true, - "@material-ui/core>@material-ui/system": true, - "@material-ui/core>@material-ui/utils": true, - "@material-ui/core>clsx": true, - "@material-ui/core>popper.js": true, - "@material-ui/core>react-transition-group": true, - "prop-types": true, - "prop-types>react-is": true, - "react": true, - "react-dom": true, - "react-redux>hoist-non-react-statics": true - } - }, - "@material-ui/core>@material-ui/styles": { - "globals": { - "console.error": true, - "console.warn": true, - "document.createComment": true, - "document.head": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/styles>jss": true, - "@material-ui/core>@material-ui/styles>jss-plugin-camel-case": true, - "@material-ui/core>@material-ui/styles>jss-plugin-default-unit": true, - "@material-ui/core>@material-ui/styles>jss-plugin-global": true, - "@material-ui/core>@material-ui/styles>jss-plugin-nested": true, - "@material-ui/core>@material-ui/styles>jss-plugin-props-sort": true, - "@material-ui/core>@material-ui/styles>jss-plugin-rule-value-function": true, - "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer": true, - "@material-ui/core>@material-ui/utils": true, - "@material-ui/core>clsx": true, - "prop-types": true, - "react": true, - "react-redux>hoist-non-react-statics": true - } - }, - "@material-ui/core>@material-ui/styles>jss": { - "globals": { - "CSS": true, - "document.createElement": true, - "document.querySelector": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/styles>jss>is-in-browser": true, - "react-router-dom>tiny-warning": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-camel-case": { - "packages": { - "@material-ui/core>@material-ui/styles>jss-plugin-camel-case>hyphenate-style-name": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-default-unit": { - "globals": { - "CSS": true - }, - "packages": { - "@material-ui/core>@material-ui/styles>jss": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-global": { - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/styles>jss": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-nested": { - "packages": { - "@babel/runtime": true, - "react-router-dom>tiny-warning": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-rule-value-function": { - "packages": { - "@material-ui/core>@material-ui/styles>jss": true, - "react-router-dom>tiny-warning": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer": { - "packages": { - "@material-ui/core>@material-ui/styles>jss": true, - "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer>css-vendor": true - } - }, - "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer>css-vendor": { - "globals": { - "document.createElement": true, - "document.documentElement": true, - "getComputedStyle": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/styles>jss>is-in-browser": true - } - }, - "@material-ui/core>@material-ui/styles>jss>is-in-browser": { - "globals": { - "document": true - } - }, - "@material-ui/core>@material-ui/system": { - "globals": { - "console.error": true - }, - "packages": { - "@babel/runtime": true, - "@material-ui/core>@material-ui/utils": true, - "prop-types": true - } - }, - "@material-ui/core>@material-ui/utils": { - "packages": { - "@babel/runtime": true, - "prop-types": true, - "prop-types>react-is": true - } - }, - "@material-ui/core>popper.js": { - "globals": { - "MSInputMethodContext": true, - "Node.DOCUMENT_POSITION_FOLLOWING": true, - "cancelAnimationFrame": true, - "console.warn": true, - "define": true, - "devicePixelRatio": true, - "document": true, - "getComputedStyle": true, - "innerHeight": true, - "innerWidth": true, - "navigator": true, - "requestAnimationFrame": true, - "setTimeout": true - } - }, - "@material-ui/core>react-transition-group": { - "globals": { - "Element": true, - "setTimeout": true - }, - "packages": { - "@material-ui/core>react-transition-group>dom-helpers": true, - "prop-types": true, - "react": true, - "react-dom": true - } - }, - "@material-ui/core>react-transition-group>dom-helpers": { - "packages": { - "@babel/runtime": true - } - }, - "@metamask/address-book-controller": { - "packages": { - "@metamask/address-book-controller>@metamask/base-controller": true, - "@metamask/controller-utils": true - } - }, - "@metamask/address-book-controller>@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/announcement-controller": { - "packages": { - "@metamask/announcement-controller>@metamask/base-controller": true - } - }, - "@metamask/announcement-controller>@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/approval-controller": { - "packages": { - "@metamask/approval-controller>nanoid": true, - "@metamask/base-controller": true, - "eth-rpc-errors": true - } - }, - "@metamask/approval-controller>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/assets-controllers": { - "globals": { - "Headers": true, - "URL": true, - "clearInterval": true, - "clearTimeout": true, - "console.info": true, - "console.log": true, - "setInterval": true, - "setTimeout": true - }, - "packages": { - "@ethersproject/abi": true, - "@ethersproject/contracts": true, - "@ethersproject/providers": true, - "@metamask/assets-controllers>abort-controller": true, - "@metamask/assets-controllers>multiformats": true, - "@metamask/base-controller": true, - "@metamask/contract-metadata": true, - "@metamask/controller-utils": true, - "@metamask/metamask-eth-abis": true, - "browserify>events": true, - "eth-json-rpc-filters>async-mutex": true, - "eth-query": true, - "eth-rpc-errors": true, - "ethereumjs-util": true, - "single-call-balance-checker-abi": true, - "uuid": true - } - }, - "@metamask/assets-controllers>abort-controller": { - "globals": { - "AbortController": true - } - }, - "@metamask/assets-controllers>multiformats": { - "globals": { - "TextDecoder": true, - "TextEncoder": true, - "console.warn": true - } - }, - "@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/controller-utils": { - "globals": { - "console.error": true, - "fetch": true, - "setTimeout": true - }, - "packages": { - "@metamask/controller-utils>isomorphic-fetch": true, - "browserify>buffer": true, - "eslint>fast-deep-equal": true, - "eth-ens-namehash": true, - "ethereumjs-util": true, - "ethjs>ethjs-unit": true - } - }, - "@metamask/controller-utils>isomorphic-fetch": { - "globals": { - "fetch.bind": true - }, - "packages": { - "@metamask/controller-utils>isomorphic-fetch>whatwg-fetch": true - } - }, - "@metamask/controller-utils>isomorphic-fetch>whatwg-fetch": { - "globals": { - "Blob": true, - "FileReader": true, - "FormData": true, - "URLSearchParams.prototype.isPrototypeOf": true, - "XMLHttpRequest": true, - "define": true, - "setTimeout": true - } - }, - "@metamask/controllers>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/controllers>web3": { - "globals": { - "XMLHttpRequest": true - } - }, - "@metamask/controllers>web3-provider-engine>cross-fetch>node-fetch": { - "globals": { - "fetch": true - } - }, - "@metamask/controllers>web3-provider-engine>eth-json-rpc-middleware>node-fetch": { - "globals": { - "fetch": true - } - }, - "@metamask/eth-json-rpc-infura": { - "globals": { - "setTimeout": true - }, - "packages": { - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware": true, - "@metamask/utils": true, - "eth-rpc-errors": true, - "json-rpc-engine": true, - "node-fetch": true - } - }, - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware": { - "globals": { - "URL": true, - "btoa": true, - "console.error": true, - "fetch": true, - "setTimeout": true - }, - "packages": { - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util": true, - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>pify": true, - "browserify>browser-resolve": true, - "eth-rpc-errors": true, - "json-rpc-engine": true, - "json-rpc-engine>@metamask/safe-event-emitter": true, - "lavamoat>json-stable-stringify": true, - "vinyl>clone": true - } - }, - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util": { - "packages": { - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util": true, - "ethereumjs-abi": true - } - }, - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util": { - "packages": { - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>ethjs-util": true, - "bn.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true, - "ethereumjs-wallet>safe-buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "@metamask/eth-keyring-controller": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, - "@metamask/eth-keyring-controller>obs-store": true, - "@metamask/rpc-methods>@metamask/browser-passworder": true, - "browserify>events": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": { - "globals": { - "TextEncoder": true - }, - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/scure-bip39": true, - "browserify>buffer": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util": true, - "eth-lattice-keyring>@ethereumjs/util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@scure/bip32": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "browserify>buffer": true, - "browserify>events": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util": true, - "eth-lattice-keyring>@ethereumjs/util": true, - "ethereumjs-wallet>randombytes": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>obs-store": { - "packages": { - "safe-event-emitter": true, - "watchify>xtend": true - } - }, - "@metamask/eth-ledger-bridge-keyring": { - "globals": { - "addEventListener": true, - "console.log": true, - "document.createElement": true, - "document.head.appendChild": true, - "fetch": true, - "removeEventListener": true - }, - "packages": { - "@ethereumjs/tx": true, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util": true, - "@metamask/eth-ledger-bridge-keyring>hdkey": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true - } - }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util": { - "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true, - "ethereumjs-abi": true - } - }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { - "packages": { - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, - "bn.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true, - "ethereumjs-wallet>safe-buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "@metamask/eth-ledger-bridge-keyring>hdkey": { - "packages": { - "@metamask/eth-ledger-bridge-keyring>hdkey>secp256k1": true, - "browserify>assert": true, - "browserify>crypto-browserify": true, - "eth-trezor-keyring>hdkey>coinstring": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "@metamask/eth-ledger-bridge-keyring>hdkey>secp256k1": { - "packages": { - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-wallet>safe-buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "@metamask/eth-token-tracker": { - "globals": { - "console.warn": true - }, - "packages": { - "@babel/runtime": true, - "@metamask/eth-token-tracker>deep-equal": true, - "@metamask/eth-token-tracker>eth-block-tracker": true, - "@metamask/eth-token-tracker>ethjs": true, - "@metamask/eth-token-tracker>human-standard-token-abi": true, - "ethjs-contract": true, - "ethjs-query": true, - "safe-event-emitter": true - } - }, - "@metamask/eth-token-tracker>deep-equal": { - "packages": { - "@metamask/eth-token-tracker>deep-equal>is-arguments": true, - "@metamask/eth-token-tracker>deep-equal>is-date-object": true, - "enzyme>is-regex": true, - "enzyme>object-is": true, - "mocha>object.assign>object-keys": true, - "string.prototype.matchall>regexp.prototype.flags": true - } - }, - "@metamask/eth-token-tracker>deep-equal>is-arguments": { - "packages": { - "koa>is-generator-function>has-tostringtag": true, - "string.prototype.matchall>call-bind": true - } - }, - "@metamask/eth-token-tracker>deep-equal>is-date-object": { - "packages": { - "koa>is-generator-function>has-tostringtag": true - } - }, - "@metamask/eth-token-tracker>eth-block-tracker": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/eth-token-tracker>eth-block-tracker>pify": true, - "eth-query": true, - "safe-event-emitter": true - } - }, - "@metamask/eth-token-tracker>ethjs": { - "globals": { - "clearInterval": true, - "setInterval": true - }, - "packages": { - "@metamask/eth-token-tracker>ethjs>bn.js": true, - "@metamask/eth-token-tracker>ethjs>ethjs-abi": true, - "@metamask/eth-token-tracker>ethjs>ethjs-contract": true, - "@metamask/eth-token-tracker>ethjs>ethjs-query": true, - "browserify>buffer": true, - "ethjs>ethjs-filter": true, - "ethjs>ethjs-provider-http": true, - "ethjs>ethjs-unit": true, - "ethjs>ethjs-util": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "@metamask/eth-token-tracker>ethjs>ethjs-abi": { - "packages": { - "@metamask/eth-token-tracker>ethjs>bn.js": true, - "browserify>buffer": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "@metamask/eth-token-tracker>ethjs>ethjs-contract": { - "packages": { - "@metamask/eth-token-tracker>ethjs>ethjs-contract>ethjs-abi": true, - "ethjs-query>babel-runtime": true, - "ethjs>ethjs-filter": true, - "ethjs>ethjs-util": true, - "ethjs>js-sha3": true, - "promise-to-callback": true - } - }, - "@metamask/eth-token-tracker>ethjs>ethjs-contract>ethjs-abi": { - "packages": { - "@metamask/eth-token-tracker>ethjs>bn.js": true, - "browserify>buffer": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "@metamask/eth-token-tracker>ethjs>ethjs-query": { - "globals": { - "console": true - }, - "packages": { - "ethjs-query>babel-runtime": true, - "ethjs-query>ethjs-format": true, - "ethjs-query>ethjs-rpc": true, - "promise-to-callback": true - } - }, - "@metamask/etherscan-link": { - "globals": { - "URL": true - } - }, - "@metamask/gas-fee-controller": { - "globals": { - "clearInterval": true, - "console.error": true, - "setInterval": true - }, - "packages": { - "@metamask/controller-utils": true, - "@metamask/gas-fee-controller>@metamask/base-controller": true, - "eth-query": true, - "ethereumjs-util": true, - "ethjs>ethjs-unit": true, - "uuid": true - } - }, - "@metamask/gas-fee-controller>@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/jazzicon": { - "globals": { - "document.createElement": true, - "document.createElementNS": true - }, - "packages": { - "@metamask/jazzicon>color": true, - "@metamask/jazzicon>mersenne-twister": true - } - }, - "@metamask/jazzicon>color": { - "packages": { - "@metamask/jazzicon>color>clone": true, - "@metamask/jazzicon>color>color-convert": true, - "@metamask/jazzicon>color>color-string": true - } - }, - "@metamask/jazzicon>color>clone": { - "packages": { - "browserify>buffer": true - } - }, - "@metamask/jazzicon>color>color-convert": { - "packages": { - "@metamask/jazzicon>color>color-convert>color-name": true - } - }, - "@metamask/jazzicon>color>color-string": { - "packages": { - "jest-canvas-mock>moo-color>color-name": true - } - }, - "@metamask/logo": { - "globals": { - "addEventListener": true, - "document.body.appendChild": true, - "document.createElementNS": true, - "innerHeight": true, - "innerWidth": true, - "requestAnimationFrame": true - }, - "packages": { - "@metamask/logo>gl-mat4": true, - "@metamask/logo>gl-vec3": true - } - }, - "@metamask/notification-controller": { - "packages": { - "@metamask/controller-utils": true, - "@metamask/notification-controller>@metamask/base-controller": true, - "@metamask/notification-controller>nanoid": true - } - }, - "@metamask/notification-controller>@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/notification-controller>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/obs-store": { - "globals": { - "localStorage": true - }, - "packages": { - "@metamask/obs-store>through2": true, - "browserify>stream-browserify": true, - "json-rpc-engine>@metamask/safe-event-emitter": true - } - }, - "@metamask/obs-store>through2": { - "packages": { - "browserify>process": true, - "browserify>util": true, - "readable-stream": true, - "watchify>xtend": true - } - }, - "@metamask/permission-controller": { - "packages": { - "@metamask/base-controller": true, - "@metamask/controller-utils": true, - "@metamask/permission-controller>nanoid": true, - "deep-freeze-strict": true, - "eth-rpc-errors": true, - "immer": true, - "json-rpc-engine": true - } - }, - "@metamask/permission-controller>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/phishing-controller": { - "globals": { - "fetch": true - }, - "packages": { - "@metamask/base-controller": true, - "@metamask/controller-utils": true, - "@metamask/controller-utils>isomorphic-fetch": true, - "@metamask/phishing-warning>eth-phishing-detect": true, - "punycode": true - } - }, - "@metamask/phishing-warning>eth-phishing-detect": { - "packages": { - "eslint>optionator>fast-levenshtein": true - } - }, - "@metamask/post-message-stream": { - "globals": { - "WorkerGlobalScope": true, - "addEventListener": true, - "browser": true, - "chrome": true, - "location.origin": true, - "onmessage": "write", - "postMessage": true, - "removeEventListener": true - }, - "packages": { - "@metamask/post-message-stream>readable-stream": true, - "@metamask/utils": true - } - }, - "@metamask/post-message-stream>readable-stream": { - "packages": { - "@metamask/post-message-stream>readable-stream>process-nextick-args": true, - "@metamask/post-message-stream>readable-stream>safe-buffer": true, - "@metamask/post-message-stream>readable-stream>string_decoder": true, - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>events": true, - "browserify>process": true, - "browserify>timers-browserify": true, - "pumpify>inherits": true, - "readable-stream>core-util-is": true, - "readable-stream>isarray": true - } - }, - "@metamask/post-message-stream>readable-stream>process-nextick-args": { - "packages": { - "browserify>process": true - } - }, - "@metamask/post-message-stream>readable-stream>safe-buffer": { - "packages": { - "browserify>buffer": true - } - }, - "@metamask/post-message-stream>readable-stream>string_decoder": { - "packages": { - "@metamask/post-message-stream>readable-stream>safe-buffer": true - } - }, - "@metamask/providers>@metamask/object-multiplex": { - "globals": { - "console.warn": true - }, - "packages": { - "end-of-stream": true, - "pump>once": true, - "readable-stream": true - } - }, - "@metamask/rate-limit-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "@metamask/rate-limit-controller>@metamask/base-controller": true, - "eth-rpc-errors": true - } - }, - "@metamask/rate-limit-controller>@metamask/base-controller": { - "packages": { - "immer": true - } - }, - "@metamask/rpc-methods": { - "globals": { - "console.warn": true - }, - "packages": { - "@metamask/permission-controller": true, - "@metamask/rpc-methods>@metamask/browser-passworder": true, - "@metamask/rpc-methods>@metamask/key-tree": true, - "@metamask/rpc-methods>nanoid": true, - "@metamask/snaps-ui": true, - "@metamask/snaps-utils": true, - "@metamask/snaps-utils>@noble/hashes": true, - "@metamask/utils": true, - "@metamask/utils>superstruct": true, - "eth-rpc-errors": true - } - }, - "@metamask/rpc-methods>@metamask/browser-passworder": { - "globals": { - "btoa": true, - "crypto.getRandomValues": true, - "crypto.subtle.decrypt": true, - "crypto.subtle.deriveKey": true, - "crypto.subtle.encrypt": true, - "crypto.subtle.exportKey": true, - "crypto.subtle.importKey": true - }, - "packages": { - "browserify>buffer": true - } - }, - "@metamask/rpc-methods>@metamask/key-tree": { - "packages": { - "@metamask/rpc-methods>@metamask/key-tree>@noble/ed25519": true, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": true, - "@metamask/scure-bip39": true, - "@metamask/snaps-utils>@noble/hashes": true, - "@metamask/snaps-utils>@scure/base": true, - "@metamask/utils": true - } - }, - "@metamask/rpc-methods>@metamask/key-tree>@noble/ed25519": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/rpc-methods>@metamask/key-tree>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/rpc-methods>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/scure-bip39": { - "globals": { - "TextEncoder": true - }, - "packages": { - "@metamask/snaps-utils>@noble/hashes": true, - "@metamask/snaps-utils>@scure/base": true - } - }, - "@metamask/smart-transactions-controller": { - "globals": { - "URLSearchParams": true, - "clearInterval": true, - "console.error": true, - "console.log": true, - "fetch": true, - "setInterval": true - }, - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/bignumber": true, - "@ethersproject/providers": true, - "@metamask/base-controller": true, - "@metamask/controller-utils": true, - "@metamask/controller-utils>isomorphic-fetch": true, - "@metamask/smart-transactions-controller>bignumber.js": true, - "fast-json-patch": true, - "lodash": true - } - }, - "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/smart-transactions-controller>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "@metamask/snaps-controllers": { - "globals": { - "URL": true, - "chrome.offscreen.createDocument": true, - "chrome.offscreen.hasDocument": true, - "clearTimeout": true, - "console.error": true, - "console.info": true, - "console.log": true, - "console.warn": true, - "document.getElementById": true, - "fetch.bind": true, - "setTimeout": true - }, - "packages": { - "@metamask/base-controller": true, - "@metamask/permission-controller": true, - "@metamask/post-message-stream": true, - "@metamask/providers>@metamask/object-multiplex": true, - "@metamask/rpc-methods": true, - "@metamask/snaps-controllers>@xstate/fsm": true, - "@metamask/snaps-controllers>concat-stream": true, - "@metamask/snaps-controllers>gunzip-maybe": true, - "@metamask/snaps-controllers>json-rpc-middleware-stream": true, - "@metamask/snaps-controllers>nanoid": true, - "@metamask/snaps-controllers>readable-web-to-node-stream": true, - "@metamask/snaps-controllers>tar-stream": true, - "@metamask/snaps-utils": true, - "@metamask/subject-metadata-controller": true, - "@metamask/utils": true, - "eth-rpc-errors": true, - "json-rpc-engine": true, - "pump": true - } - }, - "@metamask/snaps-controllers>concat-stream": { - "packages": { - "@metamask/snaps-controllers>concat-stream>readable-stream": true, - "browserify>buffer": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-controllers>concat-stream>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe": { - "packages": { - "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib": true, - "@metamask/snaps-controllers>gunzip-maybe>is-deflate": true, - "@metamask/snaps-controllers>gunzip-maybe>is-gzip": true, - "@metamask/snaps-controllers>gunzip-maybe>peek-stream": true, - "@metamask/snaps-controllers>gunzip-maybe>pumpify": true, - "@metamask/snaps-controllers>gunzip-maybe>through2": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib": { - "packages": { - "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib>pako": true, - "browserify>assert": true, - "browserify>buffer": true, - "browserify>process": true, - "browserify>util": true, - "readable-stream": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>peek-stream": { - "packages": { - "@metamask/snaps-controllers>gunzip-maybe>peek-stream>duplexify": true, - "@metamask/snaps-controllers>gunzip-maybe>peek-stream>through2": true, - "browserify>buffer": true, - "terser>source-map-support>buffer-from": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>peek-stream>duplexify": { - "packages": { - "browserify>buffer": true, - "browserify>process": true, - "duplexify>stream-shift": true, - "end-of-stream": true, - "pumpify>inherits": true, - "readable-stream": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>peek-stream>through2": { - "packages": { - "browserify>process": true, - "browserify>util": true, - "readable-stream": true, - "watchify>xtend": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>pumpify": { - "packages": { - "@metamask/snaps-controllers>gunzip-maybe>pumpify>duplexify": true, - "@metamask/snaps-controllers>gunzip-maybe>pumpify>pump": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>pumpify>duplexify": { - "packages": { - "browserify>buffer": true, - "browserify>process": true, - "duplexify>stream-shift": true, - "end-of-stream": true, - "pumpify>inherits": true, - "readable-stream": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>pumpify>pump": { - "packages": { - "browserify>browser-resolve": true, - "end-of-stream": true, - "pump>once": true - } - }, - "@metamask/snaps-controllers>gunzip-maybe>through2": { - "packages": { - "browserify>process": true, - "browserify>util": true, - "readable-stream": true, - "watchify>xtend": true - } - }, - "@metamask/snaps-controllers>json-rpc-middleware-stream": { - "globals": { - "console.warn": true, - "setTimeout": true - }, - "packages": { - "json-rpc-engine>@metamask/safe-event-emitter": true, - "readable-stream": true - } - }, - "@metamask/snaps-controllers>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "@metamask/snaps-controllers>readable-web-to-node-stream": { - "packages": { - "@metamask/snaps-controllers>readable-web-to-node-stream>readable-stream": true - } - }, - "@metamask/snaps-controllers>readable-web-to-node-stream>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-controllers>tar-stream": { - "packages": { - "@metamask/snaps-controllers>tar-stream>fs-constants": true, - "@metamask/snaps-controllers>tar-stream>readable-stream": true, - "browserify>buffer": true, - "browserify>process": true, - "browserify>string_decoder": true, - "browserify>util": true, - "end-of-stream": true, - "madge>ora>bl": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-controllers>tar-stream>fs-constants": { - "packages": { - "browserify>constants-browserify": true - } - }, - "@metamask/snaps-controllers>tar-stream>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "@metamask/snaps-ui": { - "packages": { - "@metamask/utils": true, - "@metamask/utils>superstruct": true - } - }, - "@metamask/snaps-utils": { - "globals": { - "TextDecoder": true, - "URL": true, - "document.body.appendChild": true, - "document.createElement": true - }, - "packages": { - "@metamask/snaps-utils>@noble/hashes": true, - "@metamask/snaps-utils>@scure/base": true, - "@metamask/snaps-utils>cron-parser": true, - "@metamask/snaps-utils>rfdc": true, - "@metamask/snaps-utils>validate-npm-package-name": true, - "@metamask/utils": true, - "@metamask/utils>superstruct": true, - "semver": true - } - }, - "@metamask/snaps-utils>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/snaps-utils>@scure/base": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - } - }, - "@metamask/snaps-utils>cron-parser": { - "packages": { - "browserify>browser-resolve": true, - "luxon": true - } - }, - "@metamask/snaps-utils>rfdc": { - "packages": { - "browserify>buffer": true - } - }, - "@metamask/snaps-utils>validate-npm-package-name": { - "packages": { - "@metamask/snaps-utils>validate-npm-package-name>builtins": true - } - }, - "@metamask/snaps-utils>validate-npm-package-name>builtins": { - "packages": { - "browserify>process": true, - "semver": true - } - }, - "@metamask/subject-metadata-controller": { - "packages": { - "@metamask/base-controller": true - } - }, - "@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "@metamask/utils>superstruct": true, - "browserify>buffer": true, - "nock>debug": true, - "semver": true - } - }, - "@ngraveio/bc-ur": { - "packages": { - "@ngraveio/bc-ur>@apocentre/alias-sampling": true, - "@ngraveio/bc-ur>bignumber.js": true, - "@ngraveio/bc-ur>crc": true, - "@ngraveio/bc-ur>jsbi": true, - "addons-linter>sha.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "pubnub>cbor-sync": true - } - }, - "@ngraveio/bc-ur>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "@ngraveio/bc-ur>crc": { - "packages": { - "browserify>buffer": true - } - }, - "@ngraveio/bc-ur>jsbi": { - "globals": { - "define": true - } - }, - "@popperjs/core": { - "globals": { - "Element": true, - "HTMLElement": true, - "ShadowRoot": true, - "console.error": true, - "console.warn": true, - "document": true, - "navigator.userAgent": true - } - }, - "@reduxjs/toolkit": { - "globals": { - "AbortController": true, - "__REDUX_DEVTOOLS_EXTENSION_COMPOSE__": true, - "__REDUX_DEVTOOLS_EXTENSION__": true, - "console.error": true, - "console.info": true, - "console.warn": true - }, - "packages": { - "@reduxjs/toolkit>reselect": true, - "immer": true, - "redux": true, - "redux-thunk": true - } - }, - "@segment/loosely-validate-event": { - "packages": { - "@segment/loosely-validate-event>component-type": true, - "@segment/loosely-validate-event>join-component": true, - "browserify>assert": true, - "browserify>buffer": true - } - }, - "@sentry/browser": { - "globals": { - "XMLHttpRequest": true, - "setTimeout": true - }, - "packages": { - "@sentry/browser>@sentry/core": true, - "@sentry/browser>tslib": true, - "@sentry/types": true, - "@sentry/utils": true - } - }, - "@sentry/browser>@sentry/core": { - "globals": { - "clearInterval": true, - "setInterval": true - }, - "packages": { - "@sentry/browser>@sentry/core>@sentry/hub": true, - "@sentry/browser>@sentry/core>@sentry/minimal": true, - "@sentry/browser>@sentry/core>tslib": true, - "@sentry/types": true, - "@sentry/utils": true - } - }, - "@sentry/browser>@sentry/core>@sentry/hub": { - "globals": { - "clearInterval": true, - "setInterval": true - }, - "packages": { - "@sentry/browser>@sentry/core>@sentry/hub>tslib": true, - "@sentry/types": true, - "@sentry/utils": true - } - }, - "@sentry/browser>@sentry/core>@sentry/hub>tslib": { - "globals": { - "define": true - } - }, - "@sentry/browser>@sentry/core>@sentry/minimal": { - "packages": { - "@sentry/browser>@sentry/core>@sentry/hub": true, - "@sentry/browser>@sentry/core>@sentry/minimal>tslib": true - } - }, - "@sentry/browser>@sentry/core>@sentry/minimal>tslib": { - "globals": { - "define": true - } - }, - "@sentry/browser>@sentry/core>tslib": { - "globals": { - "define": true - } - }, - "@sentry/browser>tslib": { - "globals": { - "define": true - } - }, - "@sentry/integrations": { - "globals": { - "clearTimeout": true, - "console.error": true, - "console.log": true, - "setTimeout": true - }, - "packages": { - "@sentry/integrations>tslib": true, - "@sentry/types": true, - "@sentry/utils": true, - "localforage": true - } - }, - "@sentry/integrations>tslib": { - "globals": { - "define": true - } - }, - "@sentry/utils": { - "globals": { - "CustomEvent": true, - "DOMError": true, - "DOMException": true, - "Element": true, - "ErrorEvent": true, - "Event": true, - "Headers": true, - "Request": true, - "Response": true, - "XMLHttpRequest.prototype": true, - "clearTimeout": true, - "console.error": true, - "document": true, - "setTimeout": true - }, - "packages": { - "@sentry/utils>tslib": true, - "browserify>process": true - } - }, - "@sentry/utils>tslib": { - "globals": { - "define": true - } - }, - "@spruceid/siwe-parser": { - "globals": { - "console.error": true, - "console.log": true - }, - "packages": { - "@spruceid/siwe-parser>apg-js": true - } - }, - "@spruceid/siwe-parser>apg-js": { - "globals": { - "mode": true - }, - "packages": { - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true - } - }, - "@storybook/api>regenerator-runtime": { - "globals": { - "regeneratorRuntime": "write" - } - }, - "@storybook/api>util-deprecate": { - "globals": { - "console.trace": true, - "console.warn": true, - "localStorage": true - } - }, - "@truffle/codec": { - "packages": { - "@truffle/codec>@truffle/abi-utils": true, - "@truffle/codec>@truffle/compile-common": true, - "@truffle/codec>big.js": true, - "@truffle/codec>bn.js": true, - "@truffle/codec>cbor": true, - "@truffle/codec>semver": true, - "@truffle/codec>utf8": true, - "@truffle/codec>web3-utils": true, - "browserify>buffer": true, - "browserify>os-browserify": true, - "browserify>util": true, - "lodash": true, - "nock>debug": true - } - }, - "@truffle/codec>@truffle/abi-utils": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case": true, - "@truffle/codec>@truffle/abi-utils>fast-check": true, - "@truffle/codec>web3-utils": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>camel-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>constant-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>dot-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>header-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>is-lower-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>is-upper-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>lower-case-first": true, - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>param-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>pascal-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>path-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>sentence-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>snake-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>swap-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>title-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>camel-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>constant-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>snake-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>dot-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>header-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>is-lower-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>is-upper-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>lower-case-first": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>no-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>param-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>pascal-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>pascal-case>camel-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>pascal-case>camel-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>path-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>sentence-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>snake-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>swap-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>title-case": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": { - "packages": { - "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true - } - }, - "@truffle/codec>@truffle/abi-utils>fast-check": { - "globals": { - "clearTimeout": true, - "console.log": true, - "setTimeout": true - }, - "packages": { - "@truffle/codec>@truffle/abi-utils>fast-check>pure-rand": true, - "browserify>buffer": true - } - }, - "@truffle/codec>@truffle/compile-common": { - "packages": { - "@truffle/codec>@truffle/compile-common>@truffle/error": true, - "@truffle/codec>@truffle/compile-common>colors": true, - "browserify>path-browserify": true - } - }, - "@truffle/codec>@truffle/compile-common>colors": { - "globals": { - "console.log": true - }, - "packages": { - "browserify>os-browserify": true, - "browserify>process": true, - "browserify>util": true - } - }, - "@truffle/codec>big.js": { - "globals": { - "define": true - } - }, - "@truffle/codec>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@truffle/codec>cbor": { - "globals": { - "TextDecoder": true - }, - "packages": { - "@truffle/codec>cbor>bignumber.js": true, - "@truffle/codec>cbor>nofilter": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true, - "browserify>stream-browserify": true, - "browserify>url": true, - "browserify>util": true - } - }, - "@truffle/codec>cbor>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "@truffle/codec>cbor>nofilter": { - "packages": { - "browserify>buffer": true, - "browserify>stream-browserify": true, - "browserify>util": true - } - }, - "@truffle/codec>semver": { - "globals": { - "console.error": true - }, - "packages": { - "@truffle/codec>semver>lru-cache": true, - "browserify>process": true - } - }, - "@truffle/codec>semver>lru-cache": { - "packages": { - "semver>lru-cache>yallist": true - } - }, - "@truffle/codec>web3-utils": { - "globals": { - "setTimeout": true - }, - "packages": { - "@truffle/codec>utf8": true, - "@truffle/codec>web3-utils>bn.js": true, - "@truffle/codec>web3-utils>ethereum-bloom-filters": true, - "browserify>buffer": true, - "ethereumjs-util": true, - "ethereumjs-wallet>randombytes": true, - "ethjs>ethjs-unit": true, - "ethjs>number-to-bn": true - } - }, - "@truffle/codec>web3-utils>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@truffle/codec>web3-utils>ethereum-bloom-filters": { - "packages": { - "@truffle/codec>web3-utils>ethereum-bloom-filters>js-sha3": true - } - }, - "@truffle/codec>web3-utils>ethereum-bloom-filters>js-sha3": { - "globals": { - "define": true - }, - "packages": { - "browserify>process": true - } - }, - "@truffle/decoder": { - "packages": { - "@truffle/codec": true, - "@truffle/codec>@truffle/abi-utils": true, - "@truffle/codec>@truffle/compile-common": true, - "@truffle/codec>web3-utils": true, - "@truffle/decoder>@truffle/encoder": true, - "@truffle/decoder>@truffle/source-map-utils": true, - "@truffle/decoder>bn.js": true, - "nock>debug": true - } - }, - "@truffle/decoder>@truffle/encoder": { - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/bignumber": true, - "@truffle/codec": true, - "@truffle/codec>@truffle/abi-utils": true, - "@truffle/codec>@truffle/compile-common": true, - "@truffle/codec>web3-utils": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs": true, - "@truffle/decoder>@truffle/encoder>big.js": true, - "@truffle/decoder>@truffle/encoder>bignumber.js": true, - "lodash": true, - "nock>debug": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs": { - "globals": { - "console.log": true, - "console.warn": true, - "registries": true - }, - "packages": { - "@babel/runtime": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/address-encoder": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/ens": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/resolver": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>js-sha3": true, - "browserify>buffer": true, - "eth-ens-namehash": true, - "ethereumjs-wallet>bs58check>bs58": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/address-encoder": { - "globals": { - "console": true - }, - "packages": { - "bn.js": true, - "browserify>buffer": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash": { - "packages": { - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multicodec": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids": { - "packages": { - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>class-is": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multibase": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multicodec": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multibase": { - "packages": { - "browserify>buffer": true, - "ethereumjs-wallet>bs58check>bs58>base-x": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multicodec": { - "packages": { - "@ensdomains/content-hash>multihashes>varint": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multicodec": { - "packages": { - "@ensdomains/content-hash>multihashes>varint": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": { - "packages": { - "@ensdomains/content-hash>multihashes>varint": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes>multibase": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes>multibase": { - "packages": { - "browserify>buffer": true, - "ethereumjs-wallet>bs58check>bs58>base-x": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers": { - "packages": { - "@ethersproject/abi": true, - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/constants": true, - "@ethersproject/abi>@ethersproject/hash": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true, - "@ethersproject/contracts": true, - "@ethersproject/hdnode": true, - "@ethersproject/hdnode>@ethersproject/abstract-signer": true, - "@ethersproject/hdnode>@ethersproject/basex": true, - "@ethersproject/hdnode>@ethersproject/sha2": true, - "@ethersproject/hdnode>@ethersproject/signing-key": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/hdnode>@ethersproject/wordlists": true, - "@ethersproject/providers": true, - "@ethersproject/providers>@ethersproject/base64": true, - "@ethersproject/providers>@ethersproject/random": true, - "@ethersproject/providers>@ethersproject/rlp": true, - "@ethersproject/providers>@ethersproject/web": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/solidity": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/units": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/wallet": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": { - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/hdnode": true, - "@ethersproject/hdnode>@ethersproject/pbkdf2": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/providers>@ethersproject/random": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets>aes-js": true, - "ethereumjs-util>ethereum-cryptography>scrypt-js": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets>aes-js": { - "globals": { - "define": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/solidity": { - "packages": { - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/strings": true, - "@ethersproject/bignumber": true, - "@ethersproject/hdnode>@ethersproject/sha2": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/units": { - "packages": { - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/bignumber": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/wallet": { - "packages": { - "@ethersproject/abi>@ethersproject/address": true, - "@ethersproject/abi>@ethersproject/bytes": true, - "@ethersproject/abi>@ethersproject/hash": true, - "@ethersproject/abi>@ethersproject/keccak256": true, - "@ethersproject/abi>@ethersproject/logger": true, - "@ethersproject/abi>@ethersproject/properties": true, - "@ethersproject/hdnode": true, - "@ethersproject/hdnode>@ethersproject/abstract-signer": true, - "@ethersproject/hdnode>@ethersproject/signing-key": true, - "@ethersproject/hdnode>@ethersproject/transactions": true, - "@ethersproject/providers>@ethersproject/abstract-provider": true, - "@ethersproject/providers>@ethersproject/random": true, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": true - } - }, - "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>js-sha3": { - "globals": { - "define": true - }, - "packages": { - "browserify>process": true - } - }, - "@truffle/decoder>@truffle/encoder>big.js": { - "globals": { - "define": true - } - }, - "@truffle/decoder>@truffle/encoder>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "@truffle/decoder>@truffle/source-map-utils": { - "packages": { - "@truffle/codec": true, - "@truffle/codec>web3-utils": true, - "@truffle/decoder>@truffle/source-map-utils>@truffle/code-utils": true, - "@truffle/decoder>@truffle/source-map-utils>json-pointer": true, - "@truffle/decoder>@truffle/source-map-utils>node-interval-tree": true, - "nock>debug": true - } - }, - "@truffle/decoder>@truffle/source-map-utils>@truffle/code-utils": { - "packages": { - "@truffle/codec>cbor": true, - "browserify>buffer": true - } - }, - "@truffle/decoder>@truffle/source-map-utils>json-pointer": { - "packages": { - "@truffle/decoder>@truffle/source-map-utils>json-pointer>foreach": true - } - }, - "@truffle/decoder>@truffle/source-map-utils>node-interval-tree": { - "packages": { - "@storybook/addon-a11y>react-sizeme>shallowequal": true - } - }, - "@truffle/decoder>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@zxing/browser": { - "globals": { - "HTMLElement": true, - "HTMLImageElement": true, - "HTMLVideoElement": true, - "URL.createObjectURL": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "document": true, - "navigator": true, - "setTimeout": true - }, - "packages": { - "@zxing/library": true - } - }, - "@zxing/library": { - "globals": { - "TextDecoder": true, - "TextEncoder": true, - "btoa": true, - "clearTimeout": true, - "define": true, - "document.createElement": true, - "document.createElementNS": true, - "document.getElementById": true, - "navigator.mediaDevices.enumerateDevices": true, - "navigator.mediaDevices.getUserMedia": true, - "setTimeout": true - } - }, - "addons-linter>sha.js": { - "packages": { - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "await-semaphore": { - "packages": { - "browserify>process": true, - "browserify>timers-browserify": true - } - }, - "base32-encode": { - "packages": { - "base32-encode>to-data-view": true - } - }, - "bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "bowser": { - "globals": { - "define": true - } - }, - "browserify>assert": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>assert>util": true, - "react>object-assign": true - } - }, - "browserify>assert>util": { - "globals": { - "console.error": true, - "console.log": true, - "console.trace": true, - "process": true - }, - "packages": { - "browserify>assert>util>inherits": true, - "browserify>process": true - } - }, - "browserify>browser-resolve": { - "packages": { - "ethjs-query>babel-runtime>core-js": true - } - }, - "browserify>buffer": { - "globals": { - "console": true - }, - "packages": { - "base64-js": true, - "browserify>buffer>ieee754": true - } - }, - "browserify>crypto-browserify": { - "packages": { - "browserify>crypto-browserify>browserify-cipher": true, - "browserify>crypto-browserify>browserify-sign": true, - "browserify>crypto-browserify>create-ecdh": true, - "browserify>crypto-browserify>create-hmac": true, - "browserify>crypto-browserify>diffie-hellman": true, - "browserify>crypto-browserify>pbkdf2": true, - "browserify>crypto-browserify>public-encrypt": true, - "browserify>crypto-browserify>randomfill": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-wallet>randombytes": true - } - }, - "browserify>crypto-browserify>browserify-cipher": { - "packages": { - "browserify>crypto-browserify>browserify-cipher>browserify-des": true, - "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, - "ethereumjs-util>ethereum-cryptography>browserify-aes": true - } - }, - "browserify>crypto-browserify>browserify-cipher>browserify-des": { - "packages": { - "browserify>buffer": true, - "browserify>crypto-browserify>browserify-cipher>browserify-des>des.js": true, - "ethereumjs-util>create-hash>cipher-base": true, - "pumpify>inherits": true - } - }, - "browserify>crypto-browserify>browserify-cipher>browserify-des>des.js": { - "packages": { - "ganache>secp256k1>elliptic>minimalistic-assert": true, - "pumpify>inherits": true - } - }, - "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": { - "packages": { - "ethereumjs-util>create-hash>md5.js": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "browserify>crypto-browserify>browserify-sign": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "browserify>crypto-browserify>create-hmac": true, - "browserify>crypto-browserify>public-encrypt>browserify-rsa": true, - "browserify>crypto-browserify>public-encrypt>parse-asn1": true, - "browserify>stream-browserify": true, - "ethereumjs-util>create-hash": true, - "ganache>secp256k1>elliptic": true, - "pumpify>inherits": true - } - }, - "browserify>crypto-browserify>create-ecdh": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "browserify>crypto-browserify>create-hmac": { - "packages": { - "addons-linter>sha.js": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>create-hash>cipher-base": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "browserify>crypto-browserify>diffie-hellman": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "browserify>crypto-browserify>diffie-hellman>miller-rabin": true, - "ethereumjs-wallet>randombytes": true - } - }, - "browserify>crypto-browserify>diffie-hellman>miller-rabin": { - "packages": { - "bn.js": true, - "ganache>secp256k1>elliptic>brorand": true - } - }, - "browserify>crypto-browserify>pbkdf2": { - "globals": { - "crypto": true, - "process": true, - "queueMicrotask": true, - "setImmediate": true, - "setTimeout": true - }, - "packages": { - "addons-linter>sha.js": true, - "browserify>process": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "browserify>crypto-browserify>public-encrypt": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "browserify>crypto-browserify>public-encrypt>browserify-rsa": true, - "browserify>crypto-browserify>public-encrypt>parse-asn1": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-wallet>randombytes": true - } - }, - "browserify>crypto-browserify>public-encrypt>browserify-rsa": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "ethereumjs-wallet>randombytes": true - } - }, - "browserify>crypto-browserify>public-encrypt>parse-asn1": { - "packages": { - "browserify>buffer": true, - "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, - "browserify>crypto-browserify>pbkdf2": true, - "browserify>crypto-browserify>public-encrypt>parse-asn1>asn1.js": true, - "ethereumjs-util>ethereum-cryptography>browserify-aes": true - } - }, - "browserify>crypto-browserify>public-encrypt>parse-asn1>asn1.js": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "browserify>vm-browserify": true, - "ganache>secp256k1>elliptic>minimalistic-assert": true, - "pumpify>inherits": true - } - }, - "browserify>crypto-browserify>randomfill": { - "globals": { - "crypto": true, - "msCrypto": true - }, - "packages": { - "browserify>process": true, - "ethereumjs-wallet>randombytes": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "browserify>events": { - "globals": { - "console": true - } - }, - "browserify>os-browserify": { - "globals": { - "location": true, - "navigator": true - } - }, - "browserify>path-browserify": { - "packages": { - "browserify>process": true - } - }, - "browserify>process": { - "globals": { - "clearTimeout": true, - "setTimeout": true - } - }, - "browserify>punycode": { - "globals": { - "define": true - } - }, - "browserify>stream-browserify": { - "packages": { - "browserify>events": true, - "pumpify>inherits": true, - "readable-stream": true - } - }, - "browserify>string_decoder": { - "packages": { - "ethereumjs-wallet>safe-buffer": true - } - }, - "browserify>timers-browserify": { - "globals": { - "clearInterval": true, - "clearTimeout": true, - "setInterval": true, - "setTimeout": true - }, - "packages": { - "browserify>process": true - } - }, - "browserify>url": { - "packages": { - "browserify>punycode": true, - "browserify>querystring-es3": true - } - }, - "browserify>util": { - "globals": { - "console.error": true, - "console.log": true, - "console.trace": true, - "process": true - }, - "packages": { - "browserify>process": true, - "browserify>util>inherits": true - } - }, - "browserify>vm-browserify": { - "globals": { - "document.body.appendChild": true, - "document.body.removeChild": true, - "document.createElement": true - } - }, - "classnames": { - "globals": { - "classNames": "write", - "define": true - } - }, - "copy-to-clipboard": { - "globals": { - "clipboardData": true, - "console.error": true, - "console.warn": true, - "document.body.appendChild": true, - "document.body.removeChild": true, - "document.createElement": true, - "document.createRange": true, - "document.execCommand": true, - "document.getSelection": true, - "navigator.userAgent": true, - "prompt": true - }, - "packages": { - "copy-to-clipboard>toggle-selection": true - } - }, - "copy-to-clipboard>toggle-selection": { - "globals": { - "document.activeElement": true, - "document.getSelection": true - } - }, - "currency-formatter": { - "packages": { - "currency-formatter>accounting": true, - "currency-formatter>locale-currency": true, - "react>object-assign": true - } - }, - "currency-formatter>accounting": { - "globals": { - "define": true - } - }, - "currency-formatter>locale-currency": { - "globals": { - "countryCode": true - } - }, - "debounce-stream": { - "packages": { - "debounce-stream>debounce": true, - "debounce-stream>duplexer": true, - "debounce-stream>through": true - } - }, - "debounce-stream>debounce": { - "globals": { - "clearTimeout": true, - "setTimeout": true - } - }, - "debounce-stream>duplexer": { - "packages": { - "browserify>stream-browserify": true - } - }, - "debounce-stream>through": { - "packages": { - "browserify>process": true, - "browserify>stream-browserify": true - } - }, - "depcheck>@vue/compiler-sfc>postcss>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "dependency-tree>precinct>detective-postcss>postcss>nanoid": { - "globals": { - "crypto.getRandomValues": true - } - }, - "end-of-stream": { - "packages": { - "browserify>process": true, - "pump>once": true - } - }, - "enzyme>cheerio>tslib": { - "globals": { - "define": true - } - }, - "enzyme>has": { - "packages": { - "mocha>object.assign>function-bind": true - } - }, - "enzyme>is-regex": { - "packages": { - "koa>is-generator-function>has-tostringtag": true, - "string.prototype.matchall>call-bind": true - } - }, - "enzyme>object-is": { - "packages": { - "globalthis>define-properties": true, - "string.prototype.matchall>call-bind": true - } - }, - "eslint>optionator>fast-levenshtein": { - "globals": { - "Intl": true, - "Levenshtein": "write", - "console.log": true, - "define": true, - "importScripts": true, - "postMessage": true - } - }, - "eth-block-tracker": { - "globals": { - "clearTimeout": true, - "console.error": true, - "setTimeout": true - }, - "packages": { - "@metamask/utils": true, - "eth-block-tracker>pify": true, - "eth-query>json-rpc-random-id": true, - "json-rpc-engine>@metamask/safe-event-emitter": true - } - }, - "eth-ens-namehash": { - "globals": { - "name": "write" - }, - "packages": { - "browserify>buffer": true, - "eth-ens-namehash>idna-uts46-hx": true, - "eth-ens-namehash>js-sha3": true - } - }, - "eth-ens-namehash>idna-uts46-hx": { - "globals": { - "define": true - }, - "packages": { - "browserify>punycode": true - } - }, - "eth-ens-namehash>js-sha3": { - "packages": { - "browserify>process": true - } - }, - "eth-json-rpc-filters": { - "globals": { - "console.error": true - }, - "packages": { - "eth-json-rpc-filters>async-mutex": true, - "eth-query": true, - "json-rpc-engine": true, - "json-rpc-engine>@metamask/safe-event-emitter": true, - "pify": true - } - }, - "eth-json-rpc-filters>async-mutex": { - "globals": { - "setTimeout": true - }, - "packages": { - "enzyme>cheerio>tslib": true - } - }, - "eth-json-rpc-middleware": { - "globals": { - "URL": true, - "btoa": true, - "console.error": true, - "fetch": true, - "setTimeout": true - }, - "packages": { - "@metamask/utils": true, - "browserify>browser-resolve": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util": true, - "eth-json-rpc-middleware>pify": true, - "eth-rpc-errors": true, - "json-rpc-engine": true, - "json-rpc-engine>@metamask/safe-event-emitter": true, - "lavamoat>json-stable-stringify": true, - "vinyl>clone": true - } - }, - "eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethjs-util": true, - "eth-lattice-keyring>@ethereumjs/util": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true - } - }, - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "eth-json-rpc-middleware>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "eth-keyring-controller>@metamask/browser-passworder": { - "globals": { - "crypto": true - } - }, - "eth-lattice-keyring": { - "globals": { - "addEventListener": true, - "browser": true, - "clearInterval": true, - "fetch": true, - "open": true, - "setInterval": true - }, - "packages": { - "browserify>buffer": true, - "browserify>crypto-browserify": true, - "browserify>events": true, - "eth-lattice-keyring>@ethereumjs/tx": true, - "eth-lattice-keyring>@ethereumjs/util": true, - "eth-lattice-keyring>bn.js": true, - "eth-lattice-keyring>gridplus-sdk": true, - "eth-lattice-keyring>rlp": true - } - }, - "eth-lattice-keyring>@ethereumjs/tx": { - "packages": { - "@ethereumjs/common": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util": true - } - }, - "eth-lattice-keyring>@ethereumjs/util": { - "globals": { - "console.warn": true - }, - "packages": { - "browserify>buffer": true, - "browserify>events": true, - "browserify>insert-module-globals>is-buffer": true, - "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": true, - "eth-lattice-keyring>@ethereumjs/util>async": true, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": { - "globals": { - "TextEncoder": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>async": { - "globals": { - "clearTimeout": true, - "console": true, - "define": true, - "queueMicrotask": true, - "setTimeout": true - }, - "packages": { - "browserify>process": true, - "browserify>timers-browserify": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { - "globals": { - "TextDecoder": true, - "crypto": true - }, - "packages": { - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/hashes": true, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/snaps-utils>@noble/hashes": true, - "@metamask/snaps-utils>@scure/base": true, - "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true - } - }, - "eth-lattice-keyring>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "eth-lattice-keyring>gridplus-sdk": { - "globals": { - "AbortController": true, - "Request": true, - "__values": true, - "caches": true, - "clearTimeout": true, - "console.error": true, - "console.log": true, - "console.warn": true, - "fetch": true, - "setTimeout": true - }, - "packages": { - "@ethereumjs/common>crc-32": true, - "@ethersproject/abi": true, - "bn.js": true, - "browserify>buffer": true, - "browserify>process": true, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/common": true, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx": true, - "eth-lattice-keyring>gridplus-sdk>bech32": true, - "eth-lattice-keyring>gridplus-sdk>bignumber.js": true, - "eth-lattice-keyring>gridplus-sdk>bitwise": true, - "eth-lattice-keyring>gridplus-sdk>borc": true, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true, - "eth-lattice-keyring>gridplus-sdk>js-sha3": true, - "eth-lattice-keyring>gridplus-sdk>rlp": true, - "eth-lattice-keyring>gridplus-sdk>secp256k1": true, - "eth-lattice-keyring>gridplus-sdk>uuid": true, - "ethereumjs-util>ethereum-cryptography>hash.js": true, - "ethereumjs-wallet>aes-js": true, - "ethereumjs-wallet>bs58check": true, - "ganache>secp256k1>elliptic": true, - "lodash": true - } - }, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/common": { - "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true - } - }, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx": { - "packages": { - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx>@ethereumjs/common": true, - "ethereumjs-util": true - } - }, - "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx>@ethereumjs/common": { - "packages": { - "@ethereumjs/common>crc-32": true, - "browserify>buffer": true, - "browserify>events": true, - "ethereumjs-util": true - } - }, - "eth-lattice-keyring>gridplus-sdk>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "eth-lattice-keyring>gridplus-sdk>bitwise": { - "packages": { - "browserify>buffer": true - } - }, - "eth-lattice-keyring>gridplus-sdk>borc": { - "globals": { - "console": true - }, - "packages": { - "browserify>buffer": true, - "browserify>buffer>ieee754": true, - "eth-lattice-keyring>gridplus-sdk>borc>bignumber.js": true, - "eth-lattice-keyring>gridplus-sdk>borc>iso-url": true - } - }, - "eth-lattice-keyring>gridplus-sdk>borc>bignumber.js": { - "globals": { - "crypto": true, - "define": true - } - }, - "eth-lattice-keyring>gridplus-sdk>borc>iso-url": { - "globals": { - "URL": true, - "URLSearchParams": true, - "location": true - } - }, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": { - "globals": { - "intToBuffer": true - }, - "packages": { - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>bn.js": true, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>buffer": true, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>js-sha3": true - } - }, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>buffer": { - "globals": { - "console": true - }, - "packages": { - "base64-js": true, - "browserify>buffer>ieee754": true - } - }, - "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>js-sha3": { - "globals": { - "define": true - }, - "packages": { - "browserify>process": true - } - }, - "eth-lattice-keyring>gridplus-sdk>js-sha3": { - "globals": { - "define": true - }, - "packages": { - "browserify>process": true - } - }, - "eth-lattice-keyring>gridplus-sdk>rlp": { - "globals": { - "TextEncoder": true - } - }, - "eth-lattice-keyring>gridplus-sdk>secp256k1": { - "packages": { - "ganache>secp256k1>elliptic": true - } - }, - "eth-lattice-keyring>gridplus-sdk>uuid": { - "globals": { - "crypto": true - } - }, - "eth-lattice-keyring>rlp": { - "globals": { - "TextEncoder": true - } - }, - "eth-method-registry": { - "packages": { - "ethjs": true - } - }, - "eth-query": { - "packages": { - "eth-query>json-rpc-random-id": true, - "nock>debug": true, - "watchify>xtend": true - } - }, - "eth-rpc-errors": { - "packages": { - "eth-rpc-errors>fast-safe-stringify": true - } - }, - "eth-sig-util": { - "packages": { - "browserify>buffer": true, - "eth-sig-util>ethereumjs-util": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true, - "ethereumjs-abi": true - } - }, - "eth-sig-util>ethereumjs-util": { - "packages": { - "bn.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "eth-sig-util>ethereumjs-util>ethjs-util": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true, - "ethereumjs-wallet>safe-buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "eth-sig-util>ethereumjs-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "eth-sig-util>tweetnacl": { - "globals": { - "crypto": true, - "msCrypto": true, - "nacl": "write" - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "eth-sig-util>tweetnacl-util": { - "globals": { - "atob": true, - "btoa": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "eth-trezor-keyring": { - "globals": { - "setTimeout": true - }, - "packages": { - "@ethereumjs/tx": true, - "browserify>buffer": true, - "browserify>events": true, - "eth-trezor-keyring>hdkey": true, - "eth-trezor-keyring>trezor-connect": true, - "ethereumjs-util": true - } - }, - "eth-trezor-keyring>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "eth-trezor-keyring>hdkey>coinstring": true, - "eth-trezor-keyring>hdkey>secp256k1": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "browserify>buffer": true, - "eth-trezor-keyring>hdkey>coinstring>bs58": true, - "ethereumjs-util>create-hash": true - } - }, - "eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-wallet>safe-buffer": true, - "ganache>secp256k1>elliptic": true - } - }, - "eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { - "ethereumjs-wallet>safe-buffer": true - } - }, - "eth-trezor-keyring>trezor-connect": { - "globals": { - "__TREZOR_CONNECT_SRC": true, - "addEventListener": true, - "btoa": true, - "chrome": true, - "clearInterval": true, - "clearTimeout": true, - "console": true, - "document.body": true, - "document.createElement": true, - "document.createTextNode": true, - "document.getElementById": true, - "document.querySelectorAll": true, - "location": true, - "navigator": true, - "open": true, - "removeEventListener": true, - "setInterval": true, - "setTimeout": true - }, - "packages": { - "@babel/runtime": true, - "browserify>events": true, - "eth-json-rpc-middleware>@metamask/eth-sig-util": true, - "eth-trezor-keyring>trezor-connect>cross-fetch": true - } - }, - "eth-trezor-keyring>trezor-connect>cross-fetch": { - "globals": { - "Blob": true, - "FileReader": true, - "FormData": true, - "URLSearchParams.prototype.isPrototypeOf": true, - "XMLHttpRequest": true - } - }, - "ethereumjs-abi": { - "packages": { - "bn.js": true, - "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util": true - } - }, - "ethereumjs-abi>ethereumjs-util": { - "packages": { - "bn.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "ethereumjs-abi>ethereumjs-util>ethjs-util": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true, - "ganache>secp256k1>elliptic": true - } - }, - "ethereumjs-abi>ethereumjs-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "ethereumjs-util": { - "packages": { - "browserify>assert": true, - "browserify>buffer": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>bn.js": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true - } - }, - "ethereumjs-util>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "ethereumjs-util>create-hash": { - "packages": { - "addons-linter>sha.js": true, - "ethereumjs-util>create-hash>cipher-base": true, - "ethereumjs-util>create-hash>md5.js": true, - "ethereumjs-util>create-hash>ripemd160": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>create-hash>cipher-base": { - "packages": { - "browserify>stream-browserify": true, - "browserify>string_decoder": true, - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>create-hash>md5.js": { - "packages": { - "ethereumjs-util>create-hash>md5.js>hash-base": true, - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>create-hash>md5.js>hash-base": { - "packages": { - "ethereumjs-util>create-hash>md5.js>hash-base>readable-stream": true, - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>create-hash>md5.js>hash-base>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>create-hash>ripemd160": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>create-hash>md5.js>hash-base": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>ethereum-cryptography": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "ethereumjs-wallet>randombytes": true - } - }, - "ethereumjs-util>ethereum-cryptography>browserify-aes": { - "packages": { - "browserify>buffer": true, - "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, - "ethereumjs-util>create-hash>cipher-base": true, - "ethereumjs-util>ethereum-cryptography>browserify-aes>buffer-xor": true, - "ethereumjs-wallet>safe-buffer": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>ethereum-cryptography>browserify-aes>buffer-xor": { - "packages": { - "browserify>buffer": true - } - }, - "ethereumjs-util>ethereum-cryptography>hash.js": { - "packages": { - "ganache>secp256k1>elliptic>minimalistic-assert": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>ethereum-cryptography>keccak": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>ethereum-cryptography>keccak>readable-stream": true - } - }, - "ethereumjs-util>ethereum-cryptography>keccak>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "ethereumjs-util>ethereum-cryptography>scrypt-js": { - "globals": { - "define": true, - "setTimeout": true - }, - "packages": { - "browserify>timers-browserify": true - } - }, - "ethereumjs-util>ethereum-cryptography>secp256k1": { - "packages": { - "ganache>secp256k1>elliptic": true - } - }, - "ethereumjs-util>rlp": { - "packages": { - "browserify>buffer": true, - "ethereumjs-util>rlp>bn.js": true - } - }, - "ethereumjs-util>rlp>bn.js": { - "globals": { - "Buffer": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "ethereumjs-wallet": { - "packages": { - "@truffle/codec>utf8": true, - "browserify>crypto-browserify": true, - "ethereumjs-wallet>aes-js": true, - "ethereumjs-wallet>bs58check": true, - "ethereumjs-wallet>ethereumjs-util": true, - "ethereumjs-wallet>randombytes": true, - "ethereumjs-wallet>safe-buffer": true, - "ethereumjs-wallet>scryptsy": true, - "ethereumjs-wallet>uuid": true - } - }, - "ethereumjs-wallet>aes-js": { - "globals": { - "define": true - } - }, - "ethereumjs-wallet>bs58check": { - "packages": { - "ethereumjs-util>create-hash": true, - "ethereumjs-wallet>bs58check>bs58": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "ethereumjs-wallet>bs58check>bs58": { - "packages": { - "ethereumjs-wallet>bs58check>bs58>base-x": true - } - }, - "ethereumjs-wallet>bs58check>bs58>base-x": { - "packages": { - "ethereumjs-wallet>safe-buffer": true - } - }, - "ethereumjs-wallet>ethereumjs-util": { - "packages": { - "bn.js": true, - "browserify>assert": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true, - "ethereumjs-util>ethereum-cryptography": true, - "ethereumjs-util>rlp": true, - "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, - "ganache>secp256k1>elliptic": true - } - }, - "ethereumjs-wallet>ethereumjs-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "ethereumjs-wallet>randombytes": { - "globals": { - "crypto": true, - "msCrypto": true - }, - "packages": { - "browserify>process": true, - "ethereumjs-wallet>safe-buffer": true - } - }, - "ethereumjs-wallet>safe-buffer": { - "packages": { - "browserify>buffer": true - } - }, - "ethereumjs-wallet>scryptsy": { - "packages": { - "browserify>buffer": true, - "browserify>crypto-browserify>pbkdf2": true - } - }, - "ethereumjs-wallet>uuid": { - "globals": { - "crypto": true, - "msCrypto": true - } - }, - "ethers>@ethersproject/random": { - "globals": { - "crypto.getRandomValues": true - } - }, - "ethjs": { - "globals": { - "clearInterval": true, - "setInterval": true - }, - "packages": { - "browserify>buffer": true, - "ethjs-contract": true, - "ethjs-query": true, - "ethjs>bn.js": true, - "ethjs>ethjs-abi": true, - "ethjs>ethjs-filter": true, - "ethjs>ethjs-provider-http": true, - "ethjs>ethjs-unit": true, - "ethjs>ethjs-util": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "ethjs-contract": { - "packages": { - "ethjs-contract>ethjs-abi": true, - "ethjs-query>babel-runtime": true, - "ethjs>ethjs-filter": true, - "ethjs>ethjs-util": true, - "ethjs>js-sha3": true, - "promise-to-callback": true - } - }, - "ethjs-contract>ethjs-abi": { - "packages": { - "browserify>buffer": true, - "ethjs-contract>ethjs-abi>bn.js": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "ethjs-query": { - "globals": { - "console": true - }, - "packages": { - "ethjs-query>ethjs-format": true, - "ethjs-query>ethjs-rpc": true, - "promise-to-callback": true - } - }, - "ethjs-query>babel-runtime": { - "packages": { - "@babel/runtime": true, - "@storybook/api>regenerator-runtime": true, - "ethjs-query>babel-runtime>core-js": true - } - }, - "ethjs-query>babel-runtime>core-js": { - "globals": { - "PromiseRejectionEvent": true, - "__e": "write", - "__g": "write", - "document.createTextNode": true, - "postMessage": true, - "setTimeout": true - } - }, - "ethjs-query>ethjs-format": { - "packages": { - "ethjs-query>ethjs-format>ethjs-schema": true, - "ethjs>ethjs-util": true, - "ethjs>ethjs-util>strip-hex-prefix": true, - "ethjs>number-to-bn": true - } - }, - "ethjs-query>ethjs-rpc": { - "packages": { - "promise-to-callback": true - } - }, - "ethjs>ethjs-abi": { - "packages": { - "browserify>buffer": true, - "ethjs>bn.js": true, - "ethjs>js-sha3": true, - "ethjs>number-to-bn": true - } - }, - "ethjs>ethjs-filter": { - "globals": { - "clearInterval": true, - "setInterval": true - } - }, - "ethjs>ethjs-provider-http": { - "packages": { - "ethjs>ethjs-provider-http>xhr2": true - } - }, - "ethjs>ethjs-provider-http>xhr2": { - "globals": { - "XMLHttpRequest": true - } - }, - "ethjs>ethjs-unit": { - "packages": { - "ethjs>ethjs-unit>bn.js": true, - "ethjs>number-to-bn": true - } - }, - "ethjs>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, - "ethjs>ethjs-util>strip-hex-prefix": { - "packages": { - "ethjs>ethjs-util>is-hex-prefixed": true - } - }, - "ethjs>js-sha3": { - "packages": { - "browserify>process": true - } - }, - "ethjs>number-to-bn": { - "packages": { - "ethjs>ethjs-util>strip-hex-prefix": true, - "ethjs>number-to-bn>bn.js": true - } - }, - "extension-port-stream": { - "packages": { - "browserify>buffer": true, - "browserify>stream-browserify": true - } - }, - "fast-json-patch": { - "globals": { - "addEventListener": true, - "clearTimeout": true, - "removeEventListener": true, - "setTimeout": true - } - }, - "fuse.js": { - "globals": { - "console": true, - "define": true - } - }, - "ganache>secp256k1>elliptic": { - "packages": { - "bn.js": true, - "ethereumjs-util>ethereum-cryptography>hash.js": true, - "ganache>secp256k1>elliptic>brorand": true, - "ganache>secp256k1>elliptic>hmac-drbg": true, - "ganache>secp256k1>elliptic>minimalistic-assert": true, - "ganache>secp256k1>elliptic>minimalistic-crypto-utils": true, - "pumpify>inherits": true - } - }, - "ganache>secp256k1>elliptic>brorand": { - "globals": { - "crypto": true, - "msCrypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "ganache>secp256k1>elliptic>hmac-drbg": { - "packages": { - "ethereumjs-util>ethereum-cryptography>hash.js": true, - "ganache>secp256k1>elliptic>minimalistic-assert": true, - "ganache>secp256k1>elliptic>minimalistic-crypto-utils": true - } - }, - "globalthis>define-properties": { - "packages": { - "globalthis>define-properties>has-property-descriptors": true, - "mocha>object.assign>object-keys": true - } - }, - "globalthis>define-properties>has-property-descriptors": { - "packages": { - "string.prototype.matchall>get-intrinsic": true - } - }, - "json-rpc-engine": { - "packages": { - "eth-rpc-errors": true, - "json-rpc-engine>@metamask/safe-event-emitter": true - } - }, - "json-rpc-engine>@metamask/safe-event-emitter": { - "globals": { - "setTimeout": true - }, - "packages": { - "browserify>events": true - } - }, - "json-rpc-middleware-stream": { - "packages": { - "readable-stream": true - } - }, - "jsonschema": { - "packages": { - "browserify>url": true - } - }, - "koa>is-generator-function>has-tostringtag": { - "packages": { - "string.prototype.matchall>has-symbols": true - } - }, - "lavamoat>json-stable-stringify": { - "packages": { - "lavamoat>json-stable-stringify>jsonify": true - } - }, - "localforage": { - "globals": { - "Blob": true, - "BlobBuilder": true, - "FileReader": true, - "IDBKeyRange": true, - "MSBlobBuilder": true, - "MozBlobBuilder": true, - "OIndexedDB": true, - "WebKitBlobBuilder": true, - "atob": true, - "btoa": true, - "console.error": true, - "console.info": true, - "console.warn": true, - "define": true, - "fetch": true, - "indexedDB": true, - "localStorage": true, - "mozIndexedDB": true, - "msIndexedDB": true, - "navigator.platform": true, - "navigator.userAgent": true, - "openDatabase": true, - "setTimeout": true, - "webkitIndexedDB": true - } - }, - "lodash": { - "globals": { - "clearTimeout": true, - "define": true, - "setTimeout": true - } - }, - "loglevel": { - "globals": { - "console": true, - "define": true, - "document.cookie": true, - "localStorage": true, - "log": "write", - "navigator": true - } - }, - "luxon": { - "globals": { - "Intl": true - } - }, - "madge>ora>bl": { - "packages": { - "browserify>buffer": true, - "madge>ora>bl>readable-stream": true, - "pumpify>inherits": true - } - }, - "madge>ora>bl>readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>buffer": true, - "browserify>events": true, - "browserify>process": true, - "browserify>string_decoder": true, - "pumpify>inherits": true - } - }, - "nanoid": { - "globals": { - "crypto": true, - "msCrypto": true, - "navigator": true - } - }, - "nock>debug": { - "globals": { - "console": true, - "document": true, - "localStorage": true, - "navigator": true, - "process": true - }, - "packages": { - "browserify>process": true, - "nock>debug>ms": true - } - }, - "node-fetch": { - "globals": { - "Headers": true, - "Request": true, - "Response": true, - "fetch": true - } - }, - "nonce-tracker": { - "packages": { - "await-semaphore": true, - "browserify>assert": true, - "ethjs-query": true - } - }, - "obj-multiplex": { - "globals": { - "console.warn": true - }, - "packages": { - "end-of-stream": true, - "pump>once": true, - "readable-stream": true - } - }, - "promise-to-callback": { - "packages": { - "promise-to-callback>is-fn": true, - "promise-to-callback>set-immediate-shim": true - } - }, - "promise-to-callback>set-immediate-shim": { - "globals": { - "setTimeout.apply": true - }, - "packages": { - "browserify>timers-browserify": true - } - }, - "prop-types": { - "globals": { - "console": true - }, - "packages": { - "prop-types>react-is": true, - "react>object-assign": true - } - }, - "prop-types>react-is": { - "globals": { - "console": true - } - }, - "pubnub": { - "globals": { - "ActiveXObject": true, - "XMLHttpRequest": true, - "addEventListener": true, - "btoa": true, - "clearInterval": true, - "clearTimeout": true, - "console": true, - "define": true, - "localStorage.getItem": true, - "localStorage.setItem": true, - "location": true, - "navigator": true, - "setInterval": true, - "setTimeout": true - } - }, - "pubnub>cbor-sync": { - "globals": { - "define": true - }, - "packages": { - "browserify>buffer": true - } - }, - "pump": { - "packages": { - "browserify>browser-resolve": true, - "browserify>process": true, - "end-of-stream": true, - "pump>once": true - } - }, - "pump>once": { - "packages": { - "pump>once>wrappy": true - } - }, - "qrcode-generator": { - "globals": { - "define": true - } - }, - "qrcode.react": { - "globals": { - "Path2D": true, - "devicePixelRatio": true - }, - "packages": { - "prop-types": true, - "qrcode.react>qr.js": true, - "react": true - } - }, - "react": { - "globals": { - "console": true - }, - "packages": { - "prop-types": true, - "react>object-assign": true - } - }, - "react-devtools": { - "packages": { - "react-devtools>react-devtools-core": true - } - }, - "react-devtools>react-devtools-core": { - "globals": { - "WebSocket": true, - "setTimeout": true - } - }, - "react-dnd-html5-backend": { - "globals": { - "addEventListener": true, - "clearTimeout": true, - "removeEventListener": true - } - }, - "react-dom": { - "globals": { - "HTMLIFrameElement": true, - "MSApp": true, - "__REACT_DEVTOOLS_GLOBAL_HOOK__": true, - "addEventListener": true, - "clearTimeout": true, - "clipboardData": true, - "console": true, - "dispatchEvent": true, - "document": true, - "event": "write", - "jest": true, - "location.protocol": true, - "navigator.userAgent.indexOf": true, - "performance": true, - "removeEventListener": true, - "self": true, - "setTimeout": true, - "top": true, - "trustedTypes": true - }, - "packages": { - "prop-types": true, - "react": true, - "react-dom>scheduler": true, - "react>object-assign": true - } - }, - "react-dom>scheduler": { - "globals": { - "MessageChannel": true, - "cancelAnimationFrame": true, - "clearTimeout": true, - "console": true, - "navigator": true, - "performance": true, - "requestAnimationFrame": true, - "setTimeout": true - } - }, - "react-idle-timer": { - "globals": { - "clearTimeout": true, - "document": true, - "setTimeout": true - }, - "packages": { - "prop-types": true, - "react": true - } - }, - "react-inspector": { - "globals": { - "Node.CDATA_SECTION_NODE": true, - "Node.COMMENT_NODE": true, - "Node.DOCUMENT_FRAGMENT_NODE": true, - "Node.DOCUMENT_NODE": true, - "Node.DOCUMENT_TYPE_NODE": true, - "Node.ELEMENT_NODE": true, - "Node.PROCESSING_INSTRUCTION_NODE": true, - "Node.TEXT_NODE": true - }, - "packages": { - "ethjs-query>babel-runtime": true, - "prop-types": true, - "react": true, - "react-inspector>is-dom": true - } - }, - "react-inspector>is-dom": { - "globals": { - "Node": true - }, - "packages": { - "@lavamoat/snow>is-cross-origin>is-window": true, - "proxyquire>fill-keys>is-object": true - } - }, - "react-markdown": { - "globals": { - "console.warn": true - }, - "packages": { - "prop-types": true, - "react": true, - "react-markdown>comma-separated-tokens": true, - "react-markdown>property-information": true, - "react-markdown>react-is": true, - "react-markdown>remark-parse": true, - "react-markdown>remark-rehype": true, - "react-markdown>space-separated-tokens": true, - "react-markdown>style-to-object": true, - "react-markdown>unified": true, - "react-markdown>unist-util-visit": true, - "react-markdown>vfile": true - } - }, - "react-markdown>property-information": { - "packages": { - "watchify>xtend": true - } - }, - "react-markdown>react-is": { - "globals": { - "console": true - } - }, - "react-markdown>remark-parse": { - "packages": { - "react-markdown>remark-parse>mdast-util-from-markdown": true - } - }, - "react-markdown>remark-parse>mdast-util-from-markdown": { - "packages": { - "react-markdown>remark-parse>mdast-util-from-markdown>mdast-util-to-string": true, - "react-markdown>remark-parse>mdast-util-from-markdown>micromark": true, - "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": true, - "react-markdown>vfile>unist-util-stringify-position": true - } - }, - "react-markdown>remark-parse>mdast-util-from-markdown>micromark": { - "packages": { - "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": true - } - }, - "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": { - "globals": { - "document.createElement": true - } - }, - "react-markdown>remark-rehype": { - "packages": { - "react-markdown>remark-rehype>mdast-util-to-hast": true - } - }, - "react-markdown>remark-rehype>mdast-util-to-hast": { - "globals": { - "console.warn": true - }, - "packages": { - "react-markdown>remark-rehype>mdast-util-to-hast>mdast-util-definitions": true, - "react-markdown>remark-rehype>mdast-util-to-hast>mdurl": true, - "react-markdown>remark-rehype>mdast-util-to-hast>unist-builder": true, - "react-markdown>remark-rehype>mdast-util-to-hast>unist-util-generated": true, - "react-markdown>remark-rehype>mdast-util-to-hast>unist-util-position": true, - "react-markdown>unist-util-visit": true - } - }, - "react-markdown>remark-rehype>mdast-util-to-hast>mdast-util-definitions": { - "packages": { - "react-markdown>unist-util-visit": true - } - }, - "react-markdown>style-to-object": { - "packages": { - "react-markdown>style-to-object>inline-style-parser": true - } - }, - "react-markdown>unified": { - "packages": { - "jsdom>request>extend": true, - "react-markdown>unified>bail": true, - "react-markdown>unified>is-buffer": true, - "react-markdown>unified>is-plain-obj": true, - "react-markdown>unified>trough": true, - "react-markdown>vfile": true - } - }, - "react-markdown>unist-util-visit": { - "packages": { - "react-markdown>unist-util-visit>unist-util-visit-parents": true - } - }, - "react-markdown>unist-util-visit>unist-util-visit-parents": { - "packages": { - "react-markdown>unist-util-visit>unist-util-is": true - } - }, - "react-markdown>vfile": { - "packages": { - "browserify>path-browserify": true, - "browserify>process": true, - "react-markdown>vfile>is-buffer": true, - "react-markdown>vfile>vfile-message": true, - "vinyl>replace-ext": true - } - }, - "react-markdown>vfile>vfile-message": { - "packages": { - "react-markdown>vfile>unist-util-stringify-position": true - } - }, - "react-popper": { - "globals": { - "document": true - }, - "packages": { - "@popperjs/core": true, - "react": true, - "react-popper>react-fast-compare": true, - "react-popper>warning": true - } - }, - "react-popper>react-fast-compare": { - "globals": { - "Element": true, - "console.warn": true - } - }, - "react-popper>warning": { - "globals": { - "console": true - } - }, - "react-redux": { - "globals": { - "console": true, - "document": true - }, - "packages": { - "@babel/runtime": true, - "prop-types": true, - "prop-types>react-is": true, - "react": true, - "react-dom": true, - "react-redux>hoist-non-react-statics": true, - "redux": true - } - }, - "react-redux>hoist-non-react-statics": { - "packages": { - "prop-types>react-is": true - } - }, - "react-responsive-carousel": { - "globals": { - "HTMLElement": true, - "addEventListener": true, - "clearTimeout": true, - "console.warn": true, - "document": true, - "getComputedStyle": true, - "removeEventListener": true, - "setTimeout": true - }, - "packages": { - "classnames": true, - "react": true, - "react-dom": true, - "react-responsive-carousel>react-easy-swipe": true - } - }, - "react-responsive-carousel>react-easy-swipe": { - "globals": { - "addEventListener": true, - "define": true, - "document.addEventListener": true, - "document.removeEventListener": true - }, - "packages": { - "prop-types": true, - "react": true - } - }, - "react-router-dom": { - "packages": { - "prop-types": true, - "react": true, - "react-router-dom>history": true, - "react-router-dom>react-router": true, - "react-router-dom>tiny-invariant": true, - "react-router-dom>tiny-warning": true - } - }, - "react-router-dom>history": { - "globals": { - "addEventListener": true, - "confirm": true, - "document": true, - "history": true, - "location": true, - "navigator.userAgent": true, - "removeEventListener": true - }, - "packages": { - "react-router-dom>history>resolve-pathname": true, - "react-router-dom>history>value-equal": true, - "react-router-dom>tiny-invariant": true, - "react-router-dom>tiny-warning": true - } - }, - "react-router-dom>react-router": { - "packages": { - "prop-types": true, - "prop-types>react-is": true, - "react": true, - "react-redux>hoist-non-react-statics": true, - "react-router-dom>react-router>history": true, - "react-router-dom>react-router>mini-create-react-context": true, - "react-router-dom>tiny-invariant": true, - "react-router-dom>tiny-warning": true, - "sinon>nise>path-to-regexp": true - } - }, - "react-router-dom>react-router>history": { - "globals": { - "addEventListener": true, - "confirm": true, - "document": true, - "history": true, - "location": true, - "navigator.userAgent": true, - "removeEventListener": true - }, - "packages": { - "react-router-dom>history>resolve-pathname": true, - "react-router-dom>history>value-equal": true, - "react-router-dom>tiny-invariant": true, - "react-router-dom>tiny-warning": true - } - }, - "react-router-dom>react-router>mini-create-react-context": { - "packages": { - "@babel/runtime": true, - "prop-types": true, - "react": true, - "react-router-dom>react-router>mini-create-react-context>gud": true, - "react-router-dom>tiny-warning": true - } - }, - "react-router-dom>tiny-warning": { - "globals": { - "console": true - } - }, - "react-simple-file-input": { - "globals": { - "File": true, - "FileReader": true, - "console.warn": true - }, - "packages": { - "prop-types": true, - "react": true - } - }, - "react-tippy": { - "globals": { - "Element": true, - "MSStream": true, - "MutationObserver": true, - "addEventListener": true, - "clearTimeout": true, - "console.error": true, - "console.warn": true, - "define": true, - "document": true, - "getComputedStyle": true, - "innerHeight": true, - "innerWidth": true, - "navigator.maxTouchPoints": true, - "navigator.msMaxTouchPoints": true, - "navigator.userAgent": true, - "performance": true, - "requestAnimationFrame": true, - "setTimeout": true - }, - "packages": { - "react": true, - "react-dom": true, - "react-tippy>popper.js": true - } - }, - "react-tippy>popper.js": { - "globals": { - "MSInputMethodContext": true, - "Node.DOCUMENT_POSITION_FOLLOWING": true, - "cancelAnimationFrame": true, - "console.warn": true, - "define": true, - "devicePixelRatio": true, - "document": true, - "getComputedStyle": true, - "innerHeight": true, - "innerWidth": true, - "navigator.userAgent": true, - "requestAnimationFrame": true, - "setTimeout": true - } - }, - "react-toggle-button": { - "globals": { - "clearTimeout": true, - "console.warn": true, - "define": true, - "performance": true, - "setTimeout": true - }, - "packages": { - "react": true - } - }, - "react-transition-group": { - "globals": { - "clearTimeout": true, - "setTimeout": true - }, - "packages": { - "prop-types": true, - "react": true, - "react-dom": true, - "react-transition-group>chain-function": true, - "react-transition-group>dom-helpers": true, - "react-transition-group>warning": true - } - }, - "react-transition-group>dom-helpers": { - "globals": { - "document": true, - "setTimeout": true - }, - "packages": { - "@babel/runtime": true - } - }, - "react-transition-group>warning": { - "globals": { - "console": true - } - }, - "readable-stream": { - "packages": { - "@storybook/api>util-deprecate": true, - "browserify>browser-resolve": true, - "browserify>events": true, - "browserify>process": true, - "browserify>timers-browserify": true, - "pumpify>inherits": true, - "readable-stream>core-util-is": true, - "readable-stream>isarray": true, - "readable-stream>process-nextick-args": true, - "readable-stream>safe-buffer": true, - "readable-stream>string_decoder": true - } - }, - "readable-stream>core-util-is": { - "packages": { - "browserify>insert-module-globals>is-buffer": true - } - }, - "readable-stream>process-nextick-args": { - "packages": { - "browserify>process": true - } - }, - "readable-stream>safe-buffer": { - "packages": { - "browserify>buffer": true - } - }, - "readable-stream>string_decoder": { - "packages": { - "readable-stream>safe-buffer": true - } - }, - "redux": { - "globals": { - "console": true - }, - "packages": { - "@babel/runtime": true - } - }, - "safe-event-emitter": { - "globals": { - "setTimeout": true - }, - "packages": { - "browserify>util": true, - "webpack>events": true - } - }, - "semver": { - "globals": { - "console.error": true - }, - "packages": { - "browserify>process": true, - "semver>lru-cache": true - } - }, - "semver>lru-cache": { - "packages": { - "semver>lru-cache>yallist": true - } - }, - "sinon>nise>path-to-regexp": { - "packages": { - "sinon>nise>path-to-regexp>isarray": true - } - }, - "string.prototype.matchall>call-bind": { - "packages": { - "mocha>object.assign>function-bind": true, - "string.prototype.matchall>get-intrinsic": true - } - }, - "string.prototype.matchall>get-intrinsic": { - "globals": { - "AggregateError": true, - "FinalizationRegistry": true, - "WeakRef": true - }, - "packages": { - "enzyme>has": true, - "mocha>object.assign>function-bind": true, - "string.prototype.matchall>has-symbols": true - } - }, - "string.prototype.matchall>regexp.prototype.flags": { - "packages": { - "enzyme>function.prototype.name>functions-have-names": true, - "globalthis>define-properties": true, - "string.prototype.matchall>call-bind": true - } - }, - "terser>source-map-support>buffer-from": { - "packages": { - "browserify>buffer": true - } - }, - "uuid": { - "globals": { - "crypto": true, - "msCrypto": true - } - }, - "vinyl>clone": { - "packages": { - "browserify>buffer": true - } - }, - "vinyl>replace-ext": { - "packages": { - "browserify>path-browserify": true - } - }, - "web3": { - "globals": { - "XMLHttpRequest": true - } - }, - "web3-stream-provider": { - "globals": { - "setTimeout": true - }, - "packages": { - "browserify>util": true, - "readable-stream": true, - "web3-stream-provider>uuid": true - } - }, - "web3-stream-provider>uuid": { - "globals": { - "crypto": true, - "msCrypto": true - } - }, - "webextension-polyfill": { - "globals": { - "browser": true, - "chrome": true, - "console.error": true, - "console.warn": true, - "define": true - } - }, - "webpack>events": { - "globals": { - "console": true - } + "resources": { + "@babel/runtime": { + "globals": { + "regeneratorRuntime": "write" + } + }, + "@download/blockies": { + "globals": { + "document.createElement": true + } + }, + "@ensdomains/content-hash": { + "globals": { + "console.warn": true + }, + "packages": { + "@ensdomains/content-hash>cids": true, + "@ensdomains/content-hash>js-base64": true, + "@ensdomains/content-hash>multicodec": true, + "@ensdomains/content-hash>multihashes": true, + "browserify>buffer": true + } + }, + "@ensdomains/content-hash>cids": { + "packages": { + "@ensdomains/content-hash>cids>multibase": true, + "@ensdomains/content-hash>cids>multicodec": true, + "@ensdomains/content-hash>cids>multihashes": true, + "@ensdomains/content-hash>cids>uint8arrays": true + } + }, + "@ensdomains/content-hash>cids>multibase": { + "globals": { + "TextDecoder": true, + "TextEncoder": true + }, + "packages": { + "@ensdomains/content-hash>cids>multibase>@multiformats/base-x": true + } + }, + "@ensdomains/content-hash>cids>multicodec": { + "packages": { + "@ensdomains/content-hash>cids>multicodec>varint": true, + "@ensdomains/content-hash>cids>uint8arrays": true + } + }, + "@ensdomains/content-hash>cids>multihashes": { + "packages": { + "@ensdomains/content-hash>cids>multibase": true, + "@ensdomains/content-hash>cids>uint8arrays": true, + "@ensdomains/content-hash>multihashes>varint": true + } + }, + "@ensdomains/content-hash>cids>uint8arrays": { + "globals": { + "TextDecoder": true, + "TextEncoder": true + }, + "packages": { + "@ensdomains/content-hash>cids>multibase": true + } + }, + "@ensdomains/content-hash>js-base64": { + "globals": { + "Base64": "write", + "TextDecoder": true, + "TextEncoder": true, + "atob": true, + "btoa": true, + "define": true + }, + "packages": { + "browserify>buffer": true + } + }, + "@ensdomains/content-hash>multicodec": { + "packages": { + "@ensdomains/content-hash>multicodec>uint8arrays": true, + "@ensdomains/content-hash>multicodec>varint": true + } + }, + "@ensdomains/content-hash>multicodec>uint8arrays": { + "packages": { + "@ensdomains/content-hash>multicodec>uint8arrays>multibase": true, + "@ensdomains/content-hash>multihashes>web-encoding": true + } + }, + "@ensdomains/content-hash>multicodec>uint8arrays>multibase": { + "packages": { + "@ensdomains/content-hash>cids>multibase>@multiformats/base-x": true, + "@ensdomains/content-hash>multihashes>web-encoding": true + } + }, + "@ensdomains/content-hash>multihashes": { + "packages": { + "@ensdomains/content-hash>multihashes>multibase": true, + "@ensdomains/content-hash>multihashes>varint": true, + "@ensdomains/content-hash>multihashes>web-encoding": true, + "browserify>buffer": true + } + }, + "@ensdomains/content-hash>multihashes>multibase": { + "packages": { + "@ensdomains/content-hash>multihashes>web-encoding": true, + "browserify>buffer": true, + "ethereumjs-wallet>bs58check>bs58>base-x": true + } + }, + "@ensdomains/content-hash>multihashes>web-encoding": { + "globals": { + "TextDecoder": true, + "TextEncoder": true + }, + "packages": { + "browserify>util": true + } + }, + "@ethereumjs/common": { + "packages": { + "@ethereumjs/common>crc-32": true, + "browserify>buffer": true, + "browserify>events": true, + "ethereumjs-util": true + } + }, + "@ethereumjs/common>crc-32": { + "globals": { + "DO_NOT_EXPORT_CRC": true, + "define": true + } + }, + "@ethereumjs/tx": { + "packages": { + "@ethereumjs/common": true, + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true, + "ethereumjs-util": true + } + }, + "@ethersproject/abi": { + "globals": { + "console.log": true + }, + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/constants": true, + "@ethersproject/abi>@ethersproject/hash": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true + } + }, + "@ethersproject/abi>@ethersproject/address": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/bignumber": true, + "@ethersproject/providers>@ethersproject/rlp": true + } + }, + "@ethersproject/abi>@ethersproject/bytes": { + "packages": { + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/abi>@ethersproject/constants": { + "packages": { + "@ethersproject/bignumber": true + } + }, + "@ethersproject/abi>@ethersproject/hash": { + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true, + "@ethersproject/providers>@ethersproject/base64": true + } + }, + "@ethersproject/abi>@ethersproject/keccak256": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/keccak256>js-sha3": true + } + }, + "@ethersproject/abi>@ethersproject/keccak256>js-sha3": { + "globals": { + "define": true + }, + "packages": { + "browserify>process": true + } + }, + "@ethersproject/abi>@ethersproject/logger": { + "globals": { + "console": true + } + }, + "@ethersproject/abi>@ethersproject/properties": { + "packages": { + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/abi>@ethersproject/strings": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/constants": true, + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/bignumber": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/bignumber>bn.js": true + } + }, + "@ethersproject/bignumber>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@ethersproject/contracts": { + "globals": { + "setTimeout": true + }, + "packages": { + "@ethersproject/abi": true, + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/bignumber": true, + "@ethersproject/hdnode>@ethersproject/abstract-signer": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/providers>@ethersproject/abstract-provider": true + } + }, + "@ethersproject/hdnode": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true, + "@ethersproject/hdnode>@ethersproject/basex": true, + "@ethersproject/hdnode>@ethersproject/pbkdf2": true, + "@ethersproject/hdnode>@ethersproject/sha2": true, + "@ethersproject/hdnode>@ethersproject/signing-key": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/hdnode>@ethersproject/wordlists": true + } + }, + "@ethersproject/hdnode>@ethersproject/abstract-signer": { + "packages": { + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true + } + }, + "@ethersproject/hdnode>@ethersproject/basex": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/properties": true + } + }, + "@ethersproject/hdnode>@ethersproject/pbkdf2": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/hdnode>@ethersproject/sha2": true + } + }, + "@ethersproject/hdnode>@ethersproject/sha2": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "ethereumjs-util>ethereum-cryptography>hash.js": true + } + }, + "@ethersproject/hdnode>@ethersproject/signing-key": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "ganache>secp256k1>elliptic": true + } + }, + "@ethersproject/hdnode>@ethersproject/transactions": { + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/constants": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/bignumber": true, + "@ethersproject/hdnode>@ethersproject/signing-key": true, + "@ethersproject/providers>@ethersproject/rlp": true + } + }, + "@ethersproject/hdnode>@ethersproject/wordlists": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/hash": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true + } + }, + "@ethersproject/providers": { + "globals": { + "WebSocket": true, + "clearInterval": true, + "clearTimeout": true, + "console.log": true, + "console.warn": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/constants": true, + "@ethersproject/abi>@ethersproject/hash": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true, + "@ethersproject/hdnode>@ethersproject/abstract-signer": true, + "@ethersproject/hdnode>@ethersproject/basex": true, + "@ethersproject/hdnode>@ethersproject/sha2": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/providers>@ethersproject/abstract-provider": true, + "@ethersproject/providers>@ethersproject/base64": true, + "@ethersproject/providers>@ethersproject/networks": true, + "@ethersproject/providers>@ethersproject/random": true, + "@ethersproject/providers>@ethersproject/web": true, + "@ethersproject/providers>bech32": true + } + }, + "@ethersproject/providers>@ethersproject/abstract-provider": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/bignumber": true + } + }, + "@ethersproject/providers>@ethersproject/base64": { + "globals": { + "atob": true, + "btoa": true + }, + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true + } + }, + "@ethersproject/providers>@ethersproject/networks": { + "packages": { + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/providers>@ethersproject/random": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/providers>@ethersproject/rlp": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true + } + }, + "@ethersproject/providers>@ethersproject/web": { + "globals": { + "clearTimeout": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/providers>@ethersproject/base64": true + } + }, + "@formatjs/intl-relativetimeformat": { + "globals": { + "Intl": true + }, + "packages": { + "@formatjs/intl-relativetimeformat>@formatjs/intl-utils": true + } + }, + "@formatjs/intl-relativetimeformat>@formatjs/intl-utils": { + "globals": { + "Intl.getCanonicalLocales": true + } + }, + "@keystonehq/bc-ur-registry-eth": { + "packages": { + "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, + "@keystonehq/bc-ur-registry-eth>hdkey": true, + "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, + "uuid": true + } + }, + "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": { + "globals": { + "define": true + }, + "packages": { + "@ngraveio/bc-ur": true, + "browserify>buffer": true, + "enzyme>cheerio>tslib": true, + "ethereumjs-wallet>bs58check": true + } + }, + "@keystonehq/bc-ur-registry-eth>hdkey": { + "packages": { + "browserify>assert": true, + "browserify>crypto-browserify": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, + "ethereumjs-wallet>bs58check": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@keystonehq/metamask-airgapped-keyring": { + "packages": { + "@ethereumjs/tx": true, + "@keystonehq/bc-ur-registry-eth": true, + "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring": true, + "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store": true, + "browserify>buffer": true, + "browserify>events": true, + "ethereumjs-util>rlp": true, + "uuid": true + } + }, + "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring": { + "packages": { + "@ethereumjs/tx": true, + "@keystonehq/bc-ur-registry-eth": true, + "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "browserify>buffer": true, + "eth-lattice-keyring>@ethereumjs/util": true, + "uuid": true + } + }, + "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": { + "globals": { + "TextEncoder": true + } + }, + "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store": { + "packages": { + "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store>through2": true, + "browserify>stream-browserify": true, + "json-rpc-engine>@metamask/safe-event-emitter": true + } + }, + "@keystonehq/metamask-airgapped-keyring>@metamask/obs-store>through2": { + "packages": { + "browserify>process": true, + "browserify>util": true, + "readable-stream": true, + "watchify>xtend": true + } + }, + "@material-ui/core": { + "globals": { + "Image": true, + "_formatMuiErrorMessage": true, + "addEventListener": true, + "clearInterval": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "getSelection": true, + "innerHeight": true, + "innerWidth": true, + "matchMedia": true, + "navigator": true, + "performance.now": true, + "removeEventListener": true, + "requestAnimationFrame": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/styles": true, + "@material-ui/core>@material-ui/system": true, + "@material-ui/core>@material-ui/utils": true, + "@material-ui/core>clsx": true, + "@material-ui/core>popper.js": true, + "@material-ui/core>react-transition-group": true, + "prop-types": true, + "prop-types>react-is": true, + "react": true, + "react-dom": true, + "react-redux>hoist-non-react-statics": true + } + }, + "@material-ui/core>@material-ui/styles": { + "globals": { + "console.error": true, + "console.warn": true, + "document.createComment": true, + "document.head": true + }, + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/styles>jss": true, + "@material-ui/core>@material-ui/styles>jss-plugin-camel-case": true, + "@material-ui/core>@material-ui/styles>jss-plugin-default-unit": true, + "@material-ui/core>@material-ui/styles>jss-plugin-global": true, + "@material-ui/core>@material-ui/styles>jss-plugin-nested": true, + "@material-ui/core>@material-ui/styles>jss-plugin-props-sort": true, + "@material-ui/core>@material-ui/styles>jss-plugin-rule-value-function": true, + "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer": true, + "@material-ui/core>@material-ui/utils": true, + "@material-ui/core>clsx": true, + "prop-types": true, + "react": true, + "react-redux>hoist-non-react-statics": true + } + }, + "@material-ui/core>@material-ui/styles>jss": { + "globals": { + "CSS": true, + "document.createElement": true, + "document.querySelector": true + }, + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/styles>jss>is-in-browser": true, + "react-router-dom>tiny-warning": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-camel-case": { + "packages": { + "@material-ui/core>@material-ui/styles>jss-plugin-camel-case>hyphenate-style-name": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-default-unit": { + "globals": { + "CSS": true + }, + "packages": { + "@material-ui/core>@material-ui/styles>jss": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-global": { + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/styles>jss": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-nested": { + "packages": { + "@babel/runtime": true, + "react-router-dom>tiny-warning": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-rule-value-function": { + "packages": { + "@material-ui/core>@material-ui/styles>jss": true, + "react-router-dom>tiny-warning": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer": { + "packages": { + "@material-ui/core>@material-ui/styles>jss": true, + "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer>css-vendor": true + } + }, + "@material-ui/core>@material-ui/styles>jss-plugin-vendor-prefixer>css-vendor": { + "globals": { + "document.createElement": true, + "document.documentElement": true, + "getComputedStyle": true + }, + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/styles>jss>is-in-browser": true + } + }, + "@material-ui/core>@material-ui/styles>jss>is-in-browser": { + "globals": { + "document": true + } + }, + "@material-ui/core>@material-ui/system": { + "globals": { + "console.error": true + }, + "packages": { + "@babel/runtime": true, + "@material-ui/core>@material-ui/utils": true, + "prop-types": true + } + }, + "@material-ui/core>@material-ui/utils": { + "packages": { + "@babel/runtime": true, + "prop-types": true, + "prop-types>react-is": true + } + }, + "@material-ui/core>popper.js": { + "globals": { + "MSInputMethodContext": true, + "Node.DOCUMENT_POSITION_FOLLOWING": true, + "cancelAnimationFrame": true, + "console.warn": true, + "define": true, + "devicePixelRatio": true, + "document": true, + "getComputedStyle": true, + "innerHeight": true, + "innerWidth": true, + "navigator": true, + "requestAnimationFrame": true, + "setTimeout": true + } + }, + "@material-ui/core>react-transition-group": { + "globals": { + "Element": true, + "setTimeout": true + }, + "packages": { + "@material-ui/core>react-transition-group>dom-helpers": true, + "prop-types": true, + "react": true, + "react-dom": true + } + }, + "@material-ui/core>react-transition-group>dom-helpers": { + "packages": { + "@babel/runtime": true + } + }, + "@metamask/address-book-controller": { + "packages": { + "@metamask/address-book-controller>@metamask/base-controller": true, + "@metamask/controller-utils": true + } + }, + "@metamask/address-book-controller>@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/announcement-controller": { + "packages": { + "@metamask/announcement-controller>@metamask/base-controller": true + } + }, + "@metamask/announcement-controller>@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/approval-controller": { + "packages": { + "@metamask/approval-controller>nanoid": true, + "@metamask/base-controller": true, + "eth-rpc-errors": true + } + }, + "@metamask/approval-controller>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/assets-controllers": { + "globals": { + "Headers": true, + "URL": true, + "clearInterval": true, + "clearTimeout": true, + "console.info": true, + "console.log": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@ethersproject/contracts": true, + "@ethersproject/providers": true, + "@metamask/assets-controllers>@metamask/abi-utils": true, + "@metamask/assets-controllers>@metamask/controller-utils": true, + "@metamask/assets-controllers>abort-controller": true, + "@metamask/assets-controllers>multiformats": true, + "@metamask/base-controller": true, + "@metamask/contract-metadata": true, + "@metamask/metamask-eth-abis": true, + "@metamask/utils": true, + "browserify>events": true, + "eth-json-rpc-filters>async-mutex": true, + "eth-query": true, + "eth-rpc-errors": true, + "ethereumjs-util": true, + "single-call-balance-checker-abi": true, + "uuid": true + } + }, + "@metamask/assets-controllers>@metamask/abi-utils": { + "packages": { + "@metamask/utils": true, + "@metamask/utils>superstruct": true + } + }, + "@metamask/assets-controllers>@metamask/controller-utils": { + "globals": { + "console.error": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@metamask/controller-utils>isomorphic-fetch": true, + "browserify>buffer": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true + } + }, + "@metamask/assets-controllers>abort-controller": { + "globals": { + "AbortController": true + } + }, + "@metamask/assets-controllers>multiformats": { + "globals": { + "TextDecoder": true, + "TextEncoder": true, + "console.warn": true + } + }, + "@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/controller-utils": { + "globals": { + "console.error": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@metamask/controller-utils>isomorphic-fetch": true, + "browserify>buffer": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true + } + }, + "@metamask/controller-utils>isomorphic-fetch": { + "globals": { + "fetch.bind": true + }, + "packages": { + "@metamask/controller-utils>isomorphic-fetch>whatwg-fetch": true + } + }, + "@metamask/controller-utils>isomorphic-fetch>whatwg-fetch": { + "globals": { + "Blob": true, + "FileReader": true, + "FormData": true, + "URLSearchParams.prototype.isPrototypeOf": true, + "XMLHttpRequest": true, + "define": true, + "setTimeout": true + } + }, + "@metamask/controllers>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/controllers>web3": { + "globals": { + "XMLHttpRequest": true + } + }, + "@metamask/controllers>web3-provider-engine>cross-fetch>node-fetch": { + "globals": { + "fetch": true + } + }, + "@metamask/controllers>web3-provider-engine>eth-json-rpc-middleware>node-fetch": { + "globals": { + "fetch": true + } + }, + "@metamask/eth-json-rpc-infura": { + "globals": { + "setTimeout": true + }, + "packages": { + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware": true, + "@metamask/utils": true, + "eth-rpc-errors": true, + "json-rpc-engine": true, + "node-fetch": true + } + }, + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware": { + "globals": { + "URL": true, + "btoa": true, + "console.error": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util": true, + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>pify": true, + "browserify>browser-resolve": true, + "eth-rpc-errors": true, + "json-rpc-engine": true, + "json-rpc-engine>@metamask/safe-event-emitter": true, + "lavamoat>json-stable-stringify": true, + "vinyl>clone": true + } + }, + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util": { + "packages": { + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util": true, + "ethereumjs-abi": true + } + }, + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util": { + "packages": { + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>ethjs-util": true, + "bn.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true, + "ethereumjs-wallet>safe-buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "@metamask/eth-json-rpc-infura>eth-json-rpc-middleware>eth-sig-util>ethereumjs-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "@metamask/eth-keyring-controller": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/eth-keyring-controller>obs-store": true, + "@metamask/rpc-methods>@metamask/browser-passworder": true, + "browserify>events": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": { + "globals": { + "TextEncoder": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, + "@metamask/scure-bip39": true, + "browserify>buffer": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util": true, + "eth-lattice-keyring>@ethereumjs/util": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@scure/bip32": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": { + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, + "browserify>buffer": true, + "browserify>events": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util": true, + "eth-lattice-keyring>@ethereumjs/util": true, + "ethereumjs-wallet>randombytes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": true + } + }, + "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/eth-keyring-controller>obs-store": { + "packages": { + "safe-event-emitter": true, + "watchify>xtend": true + } + }, + "@metamask/eth-ledger-bridge-keyring": { + "globals": { + "addEventListener": true, + "console.log": true, + "document.createElement": true, + "document.head.appendChild": true, + "fetch": true, + "removeEventListener": true + }, + "packages": { + "@ethereumjs/tx": true, + "@metamask/eth-ledger-bridge-keyring>eth-sig-util": true, + "@metamask/eth-ledger-bridge-keyring>hdkey": true, + "browserify>buffer": true, + "browserify>events": true, + "ethereumjs-util": true + } + }, + "@metamask/eth-ledger-bridge-keyring>eth-sig-util": { + "packages": { + "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": true, + "browserify>buffer": true, + "eth-sig-util>tweetnacl": true, + "eth-sig-util>tweetnacl-util": true, + "ethereumjs-abi": true + } + }, + "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util": { + "packages": { + "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": true, + "bn.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true, + "ethereumjs-wallet>safe-buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "@metamask/eth-ledger-bridge-keyring>eth-sig-util>ethereumjs-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "@metamask/eth-ledger-bridge-keyring>hdkey": { + "packages": { + "@metamask/eth-ledger-bridge-keyring>hdkey>secp256k1": true, + "browserify>assert": true, + "browserify>crypto-browserify": true, + "eth-trezor-keyring>hdkey>coinstring": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "@metamask/eth-ledger-bridge-keyring>hdkey>secp256k1": { + "packages": { + "bn.js": true, + "browserify>insert-module-globals>is-buffer": true, + "eth-trezor-keyring>hdkey>secp256k1>bip66": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-wallet>safe-buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "@metamask/eth-token-tracker": { + "globals": { + "console.warn": true + }, + "packages": { + "@babel/runtime": true, + "@metamask/eth-token-tracker>deep-equal": true, + "@metamask/eth-token-tracker>eth-block-tracker": true, + "@metamask/eth-token-tracker>ethjs": true, + "@metamask/eth-token-tracker>human-standard-token-abi": true, + "ethjs-contract": true, + "ethjs-query": true, + "safe-event-emitter": true + } + }, + "@metamask/eth-token-tracker>deep-equal": { + "packages": { + "@metamask/eth-token-tracker>deep-equal>is-arguments": true, + "@metamask/eth-token-tracker>deep-equal>is-date-object": true, + "enzyme>is-regex": true, + "enzyme>object-is": true, + "mocha>object.assign>object-keys": true, + "string.prototype.matchall>regexp.prototype.flags": true + } + }, + "@metamask/eth-token-tracker>deep-equal>is-arguments": { + "packages": { + "koa>is-generator-function>has-tostringtag": true, + "string.prototype.matchall>call-bind": true + } + }, + "@metamask/eth-token-tracker>deep-equal>is-date-object": { + "packages": { + "koa>is-generator-function>has-tostringtag": true + } + }, + "@metamask/eth-token-tracker>eth-block-tracker": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/eth-token-tracker>eth-block-tracker>pify": true, + "eth-query": true, + "safe-event-emitter": true + } + }, + "@metamask/eth-token-tracker>ethjs": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@metamask/eth-token-tracker>ethjs>bn.js": true, + "@metamask/eth-token-tracker>ethjs>ethjs-abi": true, + "@metamask/eth-token-tracker>ethjs>ethjs-contract": true, + "@metamask/eth-token-tracker>ethjs>ethjs-query": true, + "browserify>buffer": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-provider-http": true, + "ethjs>ethjs-unit": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/eth-token-tracker>ethjs>ethjs-abi": { + "packages": { + "@metamask/eth-token-tracker>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/eth-token-tracker>ethjs>ethjs-contract": { + "packages": { + "@metamask/eth-token-tracker>ethjs>ethjs-contract>ethjs-abi": true, + "ethjs-query>babel-runtime": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "promise-to-callback": true + } + }, + "@metamask/eth-token-tracker>ethjs>ethjs-contract>ethjs-abi": { + "packages": { + "@metamask/eth-token-tracker>ethjs>bn.js": true, + "browserify>buffer": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "@metamask/eth-token-tracker>ethjs>ethjs-query": { + "globals": { + "console": true + }, + "packages": { + "ethjs-query>babel-runtime": true, + "ethjs-query>ethjs-format": true, + "ethjs-query>ethjs-rpc": true, + "promise-to-callback": true + } + }, + "@metamask/etherscan-link": { + "globals": { + "URL": true + } + }, + "@metamask/gas-fee-controller": { + "globals": { + "clearInterval": true, + "console.error": true, + "setInterval": true + }, + "packages": { + "@metamask/controller-utils": true, + "@metamask/gas-fee-controller>@metamask/base-controller": true, + "eth-query": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true, + "uuid": true + } + }, + "@metamask/gas-fee-controller>@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/jazzicon": { + "globals": { + "document.createElement": true, + "document.createElementNS": true + }, + "packages": { + "@metamask/jazzicon>color": true, + "@metamask/jazzicon>mersenne-twister": true + } + }, + "@metamask/jazzicon>color": { + "packages": { + "@metamask/jazzicon>color>clone": true, + "@metamask/jazzicon>color>color-convert": true, + "@metamask/jazzicon>color>color-string": true + } + }, + "@metamask/jazzicon>color>clone": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask/jazzicon>color>color-convert": { + "packages": { + "@metamask/jazzicon>color>color-convert>color-name": true + } + }, + "@metamask/jazzicon>color>color-string": { + "packages": { + "jest-canvas-mock>moo-color>color-name": true + } + }, + "@metamask/key-tree": { + "packages": { + "@metamask/key-tree>@noble/ed25519": true, + "@metamask/key-tree>@noble/hashes": true, + "@metamask/key-tree>@noble/secp256k1": true, + "@metamask/key-tree>@scure/base": true, + "@metamask/scure-bip39": true, + "@metamask/utils": true + } + }, + "@metamask/key-tree>@noble/ed25519": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/key-tree>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "@metamask/key-tree>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@metamask/key-tree>@scure/base": { + "globals": { + "TextDecoder": true, + "TextEncoder": true + } + }, + "@metamask/logo": { + "globals": { + "addEventListener": true, + "document.body.appendChild": true, + "document.createElementNS": true, + "innerHeight": true, + "innerWidth": true, + "requestAnimationFrame": true + }, + "packages": { + "@metamask/logo>gl-mat4": true, + "@metamask/logo>gl-vec3": true + } + }, + "@metamask/notification-controller": { + "packages": { + "@metamask/controller-utils": true, + "@metamask/notification-controller>@metamask/base-controller": true, + "@metamask/notification-controller>nanoid": true + } + }, + "@metamask/notification-controller>@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/notification-controller>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/obs-store": { + "globals": { + "localStorage": true + }, + "packages": { + "@metamask/obs-store>through2": true, + "browserify>stream-browserify": true, + "json-rpc-engine>@metamask/safe-event-emitter": true + } + }, + "@metamask/obs-store>through2": { + "packages": { + "browserify>process": true, + "browserify>util": true, + "readable-stream": true, + "watchify>xtend": true + } + }, + "@metamask/permission-controller": { + "packages": { + "@metamask/base-controller": true, + "@metamask/controller-utils": true, + "@metamask/permission-controller>nanoid": true, + "deep-freeze-strict": true, + "eth-rpc-errors": true, + "immer": true, + "json-rpc-engine": true + } + }, + "@metamask/permission-controller>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/phishing-controller": { + "globals": { + "fetch": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/controller-utils>isomorphic-fetch": true, + "@metamask/phishing-controller>@metamask/controller-utils": true, + "@metamask/phishing-warning>eth-phishing-detect": true, + "punycode": true + } + }, + "@metamask/phishing-controller>@metamask/controller-utils": { + "globals": { + "console.error": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@metamask/controller-utils>isomorphic-fetch": true, + "browserify>buffer": true, + "eslint>fast-deep-equal": true, + "eth-ens-namehash": true, + "ethereumjs-util": true, + "ethjs>ethjs-unit": true + } + }, + "@metamask/phishing-warning>eth-phishing-detect": { + "packages": { + "eslint>optionator>fast-levenshtein": true + } + }, + "@metamask/post-message-stream": { + "globals": { + "WorkerGlobalScope": true, + "addEventListener": true, + "browser": true, + "chrome": true, + "location.origin": true, + "onmessage": "write", + "postMessage": true, + "removeEventListener": true + }, + "packages": { + "@metamask/post-message-stream>readable-stream": true, + "@metamask/utils": true + } + }, + "@metamask/post-message-stream>readable-stream": { + "packages": { + "@metamask/post-message-stream>readable-stream>process-nextick-args": true, + "@metamask/post-message-stream>readable-stream>safe-buffer": true, + "@metamask/post-message-stream>readable-stream>string_decoder": true, + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>events": true, + "browserify>process": true, + "browserify>timers-browserify": true, + "pumpify>inherits": true, + "readable-stream>core-util-is": true, + "readable-stream>isarray": true + } + }, + "@metamask/post-message-stream>readable-stream>process-nextick-args": { + "packages": { + "browserify>process": true + } + }, + "@metamask/post-message-stream>readable-stream>safe-buffer": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask/post-message-stream>readable-stream>string_decoder": { + "packages": { + "@metamask/post-message-stream>readable-stream>safe-buffer": true + } + }, + "@metamask/providers>@metamask/object-multiplex": { + "globals": { + "console.warn": true + }, + "packages": { + "end-of-stream": true, + "pump>once": true, + "readable-stream": true + } + }, + "@metamask/rate-limit-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "@metamask/rate-limit-controller>@metamask/base-controller": true, + "eth-rpc-errors": true + } + }, + "@metamask/rate-limit-controller>@metamask/base-controller": { + "packages": { + "immer": true + } + }, + "@metamask/rpc-methods": { + "globals": { + "console.warn": true + }, + "packages": { + "@metamask/key-tree": true, + "@metamask/key-tree>@noble/hashes": true, + "@metamask/permission-controller": true, + "@metamask/rpc-methods>@metamask/browser-passworder": true, + "@metamask/rpc-methods>nanoid": true, + "@metamask/snaps-ui": true, + "@metamask/snaps-utils": true, + "@metamask/utils": true, + "@metamask/utils>superstruct": true, + "eth-rpc-errors": true + } + }, + "@metamask/rpc-methods>@metamask/browser-passworder": { + "globals": { + "btoa": true, + "crypto.getRandomValues": true, + "crypto.subtle.decrypt": true, + "crypto.subtle.deriveKey": true, + "crypto.subtle.encrypt": true, + "crypto.subtle.exportKey": true, + "crypto.subtle.importKey": true + }, + "packages": { + "browserify>buffer": true + } + }, + "@metamask/rpc-methods>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/scure-bip39": { + "globals": { + "TextEncoder": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true + } + }, + "@metamask/smart-transactions-controller": { + "globals": { + "URLSearchParams": true, + "clearInterval": true, + "console.error": true, + "console.log": true, + "fetch": true, + "setInterval": true + }, + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/bignumber": true, + "@ethersproject/providers": true, + "@metamask/base-controller": true, + "@metamask/controller-utils": true, + "@metamask/controller-utils>isomorphic-fetch": true, + "@metamask/smart-transactions-controller>bignumber.js": true, + "fast-json-patch": true, + "lodash": true + } + }, + "@metamask/smart-transactions-controller>@metamask/controllers>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/smart-transactions-controller>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@metamask/snaps-controllers": { + "globals": { + "URL": true, + "chrome.offscreen.createDocument": true, + "chrome.offscreen.hasDocument": true, + "clearTimeout": true, + "console.error": true, + "console.info": true, + "console.log": true, + "console.warn": true, + "document.getElementById": true, + "fetch.bind": true, + "setTimeout": true + }, + "packages": { + "@metamask/base-controller": true, + "@metamask/permission-controller": true, + "@metamask/post-message-stream": true, + "@metamask/providers>@metamask/object-multiplex": true, + "@metamask/rpc-methods": true, + "@metamask/snaps-controllers>@xstate/fsm": true, + "@metamask/snaps-controllers>concat-stream": true, + "@metamask/snaps-controllers>gunzip-maybe": true, + "@metamask/snaps-controllers>nanoid": true, + "@metamask/snaps-controllers>readable-web-to-node-stream": true, + "@metamask/snaps-controllers>tar-stream": true, + "@metamask/snaps-utils": true, + "@metamask/subject-metadata-controller": true, + "@metamask/utils": true, + "eth-rpc-errors": true, + "json-rpc-engine": true, + "json-rpc-middleware-stream": true, + "pump": true + } + }, + "@metamask/snaps-controllers>concat-stream": { + "packages": { + "@metamask/snaps-controllers>concat-stream>readable-stream": true, + "browserify>buffer": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-controllers>concat-stream>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe": { + "packages": { + "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib": true, + "@metamask/snaps-controllers>gunzip-maybe>is-deflate": true, + "@metamask/snaps-controllers>gunzip-maybe>is-gzip": true, + "@metamask/snaps-controllers>gunzip-maybe>peek-stream": true, + "@metamask/snaps-controllers>gunzip-maybe>pumpify": true, + "@metamask/snaps-controllers>gunzip-maybe>through2": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib": { + "packages": { + "@metamask/snaps-controllers>gunzip-maybe>browserify-zlib>pako": true, + "browserify>assert": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>util": true, + "readable-stream": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>peek-stream": { + "packages": { + "@metamask/snaps-controllers>gunzip-maybe>peek-stream>duplexify": true, + "@metamask/snaps-controllers>gunzip-maybe>peek-stream>through2": true, + "browserify>buffer": true, + "terser>source-map-support>buffer-from": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>peek-stream>duplexify": { + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "duplexify>stream-shift": true, + "end-of-stream": true, + "pumpify>inherits": true, + "readable-stream": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>peek-stream>through2": { + "packages": { + "browserify>process": true, + "browserify>util": true, + "readable-stream": true, + "watchify>xtend": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>pumpify": { + "packages": { + "@metamask/snaps-controllers>gunzip-maybe>pumpify>duplexify": true, + "@metamask/snaps-controllers>gunzip-maybe>pumpify>pump": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>pumpify>duplexify": { + "packages": { + "browserify>buffer": true, + "browserify>process": true, + "duplexify>stream-shift": true, + "end-of-stream": true, + "pumpify>inherits": true, + "readable-stream": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>pumpify>pump": { + "packages": { + "browserify>browser-resolve": true, + "end-of-stream": true, + "pump>once": true + } + }, + "@metamask/snaps-controllers>gunzip-maybe>through2": { + "packages": { + "browserify>process": true, + "browserify>util": true, + "readable-stream": true, + "watchify>xtend": true + } + }, + "@metamask/snaps-controllers>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "@metamask/snaps-controllers>readable-web-to-node-stream": { + "packages": { + "@metamask/snaps-controllers>readable-web-to-node-stream>readable-stream": true + } + }, + "@metamask/snaps-controllers>readable-web-to-node-stream>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-controllers>tar-stream": { + "packages": { + "@metamask/snaps-controllers>tar-stream>fs-constants": true, + "@metamask/snaps-controllers>tar-stream>readable-stream": true, + "browserify>buffer": true, + "browserify>process": true, + "browserify>string_decoder": true, + "browserify>util": true, + "end-of-stream": true, + "madge>ora>bl": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-controllers>tar-stream>fs-constants": { + "packages": { + "browserify>constants-browserify": true + } + }, + "@metamask/snaps-controllers>tar-stream>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "@metamask/snaps-ui": { + "packages": { + "@metamask/utils": true, + "@metamask/utils>superstruct": true + } + }, + "@metamask/snaps-utils": { + "globals": { + "TextDecoder": true, + "URL": true, + "document.body.appendChild": true, + "document.createElement": true + }, + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true, + "@metamask/snaps-utils>cron-parser": true, + "@metamask/snaps-utils>rfdc": true, + "@metamask/snaps-utils>validate-npm-package-name": true, + "@metamask/utils": true, + "@metamask/utils>superstruct": true, + "semver": true + } + }, + "@metamask/snaps-utils>cron-parser": { + "packages": { + "browserify>browser-resolve": true, + "luxon": true + } + }, + "@metamask/snaps-utils>rfdc": { + "packages": { + "browserify>buffer": true + } + }, + "@metamask/snaps-utils>validate-npm-package-name": { + "packages": { + "@metamask/snaps-utils>validate-npm-package-name>builtins": true + } + }, + "@metamask/snaps-utils>validate-npm-package-name>builtins": { + "packages": { + "browserify>process": true, + "semver": true + } + }, + "@metamask/subject-metadata-controller": { + "packages": { + "@metamask/base-controller": true + } + }, + "@metamask/utils": { + "globals": { + "TextDecoder": true, + "TextEncoder": true + }, + "packages": { + "@metamask/utils>superstruct": true, + "browserify>buffer": true, + "nock>debug": true, + "semver": true + } + }, + "@ngraveio/bc-ur": { + "packages": { + "@ngraveio/bc-ur>@apocentre/alias-sampling": true, + "@ngraveio/bc-ur>bignumber.js": true, + "@ngraveio/bc-ur>crc": true, + "@ngraveio/bc-ur>jsbi": true, + "addons-linter>sha.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "pubnub>cbor-sync": true + } + }, + "@ngraveio/bc-ur>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@ngraveio/bc-ur>crc": { + "packages": { + "browserify>buffer": true + } + }, + "@ngraveio/bc-ur>jsbi": { + "globals": { + "define": true + } + }, + "@popperjs/core": { + "globals": { + "Element": true, + "HTMLElement": true, + "ShadowRoot": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator.userAgent": true + } + }, + "@reduxjs/toolkit": { + "globals": { + "AbortController": true, + "__REDUX_DEVTOOLS_EXTENSION_COMPOSE__": true, + "__REDUX_DEVTOOLS_EXTENSION__": true, + "console.error": true, + "console.info": true, + "console.warn": true + }, + "packages": { + "@reduxjs/toolkit>reselect": true, + "immer": true, + "redux": true, + "redux-thunk": true + } + }, + "@segment/loosely-validate-event": { + "packages": { + "@segment/loosely-validate-event>component-type": true, + "@segment/loosely-validate-event>join-component": true, + "browserify>assert": true, + "browserify>buffer": true + } + }, + "@sentry/browser": { + "globals": { + "XMLHttpRequest": true, + "setTimeout": true + }, + "packages": { + "@sentry/browser>@sentry/core": true, + "@sentry/browser>tslib": true, + "@sentry/types": true, + "@sentry/utils": true + } + }, + "@sentry/browser>@sentry/core": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@sentry/browser>@sentry/core>@sentry/hub": true, + "@sentry/browser>@sentry/core>@sentry/minimal": true, + "@sentry/browser>@sentry/core>tslib": true, + "@sentry/types": true, + "@sentry/utils": true + } + }, + "@sentry/browser>@sentry/core>@sentry/hub": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "@sentry/browser>@sentry/core>@sentry/hub>tslib": true, + "@sentry/types": true, + "@sentry/utils": true + } + }, + "@sentry/browser>@sentry/core>@sentry/hub>tslib": { + "globals": { + "define": true + } + }, + "@sentry/browser>@sentry/core>@sentry/minimal": { + "packages": { + "@sentry/browser>@sentry/core>@sentry/hub": true, + "@sentry/browser>@sentry/core>@sentry/minimal>tslib": true + } + }, + "@sentry/browser>@sentry/core>@sentry/minimal>tslib": { + "globals": { + "define": true + } + }, + "@sentry/browser>@sentry/core>tslib": { + "globals": { + "define": true + } + }, + "@sentry/browser>tslib": { + "globals": { + "define": true + } + }, + "@sentry/integrations": { + "globals": { + "clearTimeout": true, + "console.error": true, + "console.log": true, + "setTimeout": true + }, + "packages": { + "@sentry/integrations>tslib": true, + "@sentry/types": true, + "@sentry/utils": true, + "localforage": true + } + }, + "@sentry/integrations>tslib": { + "globals": { + "define": true + } + }, + "@sentry/utils": { + "globals": { + "CustomEvent": true, + "DOMError": true, + "DOMException": true, + "Element": true, + "ErrorEvent": true, + "Event": true, + "Headers": true, + "Request": true, + "Response": true, + "XMLHttpRequest.prototype": true, + "clearTimeout": true, + "console.error": true, + "document": true, + "setTimeout": true + }, + "packages": { + "@sentry/utils>tslib": true, + "browserify>process": true + } + }, + "@sentry/utils>tslib": { + "globals": { + "define": true + } + }, + "@spruceid/siwe-parser": { + "globals": { + "console.error": true, + "console.log": true + }, + "packages": { + "@spruceid/siwe-parser>apg-js": true + } + }, + "@spruceid/siwe-parser>apg-js": { + "globals": { + "mode": true + }, + "packages": { + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true + } + }, + "@storybook/api>regenerator-runtime": { + "globals": { + "regeneratorRuntime": "write" + } + }, + "@storybook/api>util-deprecate": { + "globals": { + "console.trace": true, + "console.warn": true, + "localStorage": true + } + }, + "@truffle/codec": { + "packages": { + "@truffle/codec>@truffle/abi-utils": true, + "@truffle/codec>@truffle/compile-common": true, + "@truffle/codec>big.js": true, + "@truffle/codec>bn.js": true, + "@truffle/codec>cbor": true, + "@truffle/codec>semver": true, + "@truffle/codec>utf8": true, + "@truffle/codec>web3-utils": true, + "browserify>buffer": true, + "browserify>os-browserify": true, + "browserify>util": true, + "lodash": true, + "nock>debug": true + } + }, + "@truffle/codec>@truffle/abi-utils": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case": true, + "@truffle/codec>@truffle/abi-utils>fast-check": true, + "@truffle/codec>web3-utils": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>camel-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>constant-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>dot-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>header-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>is-lower-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>is-upper-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>lower-case-first": true, + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>param-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>pascal-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>path-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>sentence-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>snake-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>swap-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>title-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>camel-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>constant-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>snake-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>dot-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>header-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>is-lower-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>is-upper-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>lower-case-first": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>no-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>param-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>pascal-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>pascal-case>camel-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>pascal-case>camel-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>path-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>sentence-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>snake-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>swap-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>lower-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>title-case": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>no-case": true, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>change-case>upper-case-first": { + "packages": { + "@truffle/codec>@truffle/abi-utils>change-case>upper-case": true + } + }, + "@truffle/codec>@truffle/abi-utils>fast-check": { + "globals": { + "clearTimeout": true, + "console.log": true, + "setTimeout": true + }, + "packages": { + "@truffle/codec>@truffle/abi-utils>fast-check>pure-rand": true, + "browserify>buffer": true + } + }, + "@truffle/codec>@truffle/compile-common": { + "packages": { + "@truffle/codec>@truffle/compile-common>@truffle/error": true, + "@truffle/codec>@truffle/compile-common>colors": true, + "browserify>path-browserify": true + } + }, + "@truffle/codec>@truffle/compile-common>colors": { + "globals": { + "console.log": true + }, + "packages": { + "browserify>os-browserify": true, + "browserify>process": true, + "browserify>util": true + } + }, + "@truffle/codec>big.js": { + "globals": { + "define": true + } + }, + "@truffle/codec>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@truffle/codec>cbor": { + "globals": { + "TextDecoder": true + }, + "packages": { + "@truffle/codec>cbor>bignumber.js": true, + "@truffle/codec>cbor>nofilter": true, + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true, + "browserify>stream-browserify": true, + "browserify>url": true, + "browserify>util": true + } + }, + "@truffle/codec>cbor>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@truffle/codec>cbor>nofilter": { + "packages": { + "browserify>buffer": true, + "browserify>stream-browserify": true, + "browserify>util": true + } + }, + "@truffle/codec>semver": { + "globals": { + "console.error": true + }, + "packages": { + "@truffle/codec>semver>lru-cache": true, + "browserify>process": true + } + }, + "@truffle/codec>semver>lru-cache": { + "packages": { + "semver>lru-cache>yallist": true + } + }, + "@truffle/codec>web3-utils": { + "globals": { + "setTimeout": true + }, + "packages": { + "@truffle/codec>utf8": true, + "@truffle/codec>web3-utils>bn.js": true, + "@truffle/codec>web3-utils>ethereum-bloom-filters": true, + "browserify>buffer": true, + "ethereumjs-util": true, + "ethereumjs-wallet>randombytes": true, + "ethjs>ethjs-unit": true, + "ethjs>number-to-bn": true + } + }, + "@truffle/codec>web3-utils>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@truffle/codec>web3-utils>ethereum-bloom-filters": { + "packages": { + "@truffle/codec>web3-utils>ethereum-bloom-filters>js-sha3": true + } + }, + "@truffle/codec>web3-utils>ethereum-bloom-filters>js-sha3": { + "globals": { + "define": true + }, + "packages": { + "browserify>process": true + } + }, + "@truffle/decoder": { + "packages": { + "@truffle/codec": true, + "@truffle/codec>@truffle/abi-utils": true, + "@truffle/codec>@truffle/compile-common": true, + "@truffle/codec>web3-utils": true, + "@truffle/decoder>@truffle/encoder": true, + "@truffle/decoder>@truffle/source-map-utils": true, + "@truffle/decoder>bn.js": true, + "nock>debug": true + } + }, + "@truffle/decoder>@truffle/encoder": { + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/bignumber": true, + "@truffle/codec": true, + "@truffle/codec>@truffle/abi-utils": true, + "@truffle/codec>@truffle/compile-common": true, + "@truffle/codec>web3-utils": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs": true, + "@truffle/decoder>@truffle/encoder>big.js": true, + "@truffle/decoder>@truffle/encoder>bignumber.js": true, + "lodash": true, + "nock>debug": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs": { + "globals": { + "console.log": true, + "console.warn": true, + "registries": true + }, + "packages": { + "@babel/runtime": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/address-encoder": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/ens": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/resolver": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>js-sha3": true, + "browserify>buffer": true, + "eth-ens-namehash": true, + "ethereumjs-wallet>bs58check>bs58": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>@ensdomains/address-encoder": { + "globals": { + "console": true + }, + "packages": { + "bn.js": true, + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "ethereumjs-util>create-hash>ripemd160": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash": { + "packages": { + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multicodec": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids": { + "packages": { + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>class-is": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multibase": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multicodec": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multibase": { + "packages": { + "browserify>buffer": true, + "ethereumjs-wallet>bs58check>bs58>base-x": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>cids>multicodec": { + "packages": { + "@ensdomains/content-hash>multihashes>varint": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multicodec": { + "packages": { + "@ensdomains/content-hash>multihashes>varint": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes": { + "packages": { + "@ensdomains/content-hash>multihashes>varint": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes>multibase": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>content-hash>multihashes>multibase": { + "packages": { + "browserify>buffer": true, + "ethereumjs-wallet>bs58check>bs58>base-x": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers": { + "packages": { + "@ethersproject/abi": true, + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/constants": true, + "@ethersproject/abi>@ethersproject/hash": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true, + "@ethersproject/contracts": true, + "@ethersproject/hdnode": true, + "@ethersproject/hdnode>@ethersproject/abstract-signer": true, + "@ethersproject/hdnode>@ethersproject/basex": true, + "@ethersproject/hdnode>@ethersproject/sha2": true, + "@ethersproject/hdnode>@ethersproject/signing-key": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/hdnode>@ethersproject/wordlists": true, + "@ethersproject/providers": true, + "@ethersproject/providers>@ethersproject/base64": true, + "@ethersproject/providers>@ethersproject/random": true, + "@ethersproject/providers>@ethersproject/rlp": true, + "@ethersproject/providers>@ethersproject/web": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/solidity": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/units": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/wallet": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": { + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/hdnode": true, + "@ethersproject/hdnode>@ethersproject/pbkdf2": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/providers>@ethersproject/random": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets>aes-js": true, + "ethereumjs-util>ethereum-cryptography>scrypt-js": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets>aes-js": { + "globals": { + "define": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/solidity": { + "packages": { + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/strings": true, + "@ethersproject/bignumber": true, + "@ethersproject/hdnode>@ethersproject/sha2": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/units": { + "packages": { + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/bignumber": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/wallet": { + "packages": { + "@ethersproject/abi>@ethersproject/address": true, + "@ethersproject/abi>@ethersproject/bytes": true, + "@ethersproject/abi>@ethersproject/hash": true, + "@ethersproject/abi>@ethersproject/keccak256": true, + "@ethersproject/abi>@ethersproject/logger": true, + "@ethersproject/abi>@ethersproject/properties": true, + "@ethersproject/hdnode": true, + "@ethersproject/hdnode>@ethersproject/abstract-signer": true, + "@ethersproject/hdnode>@ethersproject/signing-key": true, + "@ethersproject/hdnode>@ethersproject/transactions": true, + "@ethersproject/providers>@ethersproject/abstract-provider": true, + "@ethersproject/providers>@ethersproject/random": true, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>ethers>@ethersproject/json-wallets": true + } + }, + "@truffle/decoder>@truffle/encoder>@ensdomains/ensjs>js-sha3": { + "globals": { + "define": true + }, + "packages": { + "browserify>process": true + } + }, + "@truffle/decoder>@truffle/encoder>big.js": { + "globals": { + "define": true + } + }, + "@truffle/decoder>@truffle/encoder>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "@truffle/decoder>@truffle/source-map-utils": { + "packages": { + "@truffle/codec": true, + "@truffle/codec>web3-utils": true, + "@truffle/decoder>@truffle/source-map-utils>@truffle/code-utils": true, + "@truffle/decoder>@truffle/source-map-utils>json-pointer": true, + "@truffle/decoder>@truffle/source-map-utils>node-interval-tree": true, + "nock>debug": true + } + }, + "@truffle/decoder>@truffle/source-map-utils>@truffle/code-utils": { + "packages": { + "@truffle/codec>cbor": true, + "browserify>buffer": true + } + }, + "@truffle/decoder>@truffle/source-map-utils>json-pointer": { + "packages": { + "@truffle/decoder>@truffle/source-map-utils>json-pointer>foreach": true + } + }, + "@truffle/decoder>@truffle/source-map-utils>node-interval-tree": { + "packages": { + "@storybook/addon-a11y>react-sizeme>shallowequal": true + } + }, + "@truffle/decoder>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "@zxing/browser": { + "globals": { + "HTMLElement": true, + "HTMLImageElement": true, + "HTMLVideoElement": true, + "URL.createObjectURL": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "document": true, + "navigator": true, + "setTimeout": true + }, + "packages": { + "@zxing/library": true + } + }, + "@zxing/library": { + "globals": { + "TextDecoder": true, + "TextEncoder": true, + "btoa": true, + "clearTimeout": true, + "define": true, + "document.createElement": true, + "document.createElementNS": true, + "document.getElementById": true, + "navigator.mediaDevices.enumerateDevices": true, + "navigator.mediaDevices.getUserMedia": true, + "setTimeout": true + } + }, + "addons-linter>sha.js": { + "packages": { + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "await-semaphore": { + "packages": { + "browserify>process": true, + "browserify>timers-browserify": true + } + }, + "base32-encode": { + "packages": { + "base32-encode>to-data-view": true + } + }, + "bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "bowser": { + "globals": { + "define": true + } + }, + "browserify>assert": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>assert>util": true, + "react>object-assign": true + } + }, + "browserify>assert>util": { + "globals": { + "console.error": true, + "console.log": true, + "console.trace": true, + "process": true + }, + "packages": { + "browserify>assert>util>inherits": true, + "browserify>process": true + } + }, + "browserify>browser-resolve": { + "packages": { + "ethjs-query>babel-runtime>core-js": true + } + }, + "browserify>buffer": { + "globals": { + "console": true + }, + "packages": { + "base64-js": true, + "browserify>buffer>ieee754": true + } + }, + "browserify>crypto-browserify": { + "packages": { + "browserify>crypto-browserify>browserify-cipher": true, + "browserify>crypto-browserify>browserify-sign": true, + "browserify>crypto-browserify>create-ecdh": true, + "browserify>crypto-browserify>create-hmac": true, + "browserify>crypto-browserify>diffie-hellman": true, + "browserify>crypto-browserify>pbkdf2": true, + "browserify>crypto-browserify>public-encrypt": true, + "browserify>crypto-browserify>randomfill": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-wallet>randombytes": true + } + }, + "browserify>crypto-browserify>browserify-cipher": { + "packages": { + "browserify>crypto-browserify>browserify-cipher>browserify-des": true, + "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, + "ethereumjs-util>ethereum-cryptography>browserify-aes": true + } + }, + "browserify>crypto-browserify>browserify-cipher>browserify-des": { + "packages": { + "browserify>buffer": true, + "browserify>crypto-browserify>browserify-cipher>browserify-des>des.js": true, + "ethereumjs-util>create-hash>cipher-base": true, + "pumpify>inherits": true + } + }, + "browserify>crypto-browserify>browserify-cipher>browserify-des>des.js": { + "packages": { + "ganache>secp256k1>elliptic>minimalistic-assert": true, + "pumpify>inherits": true + } + }, + "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": { + "packages": { + "ethereumjs-util>create-hash>md5.js": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "browserify>crypto-browserify>browserify-sign": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "browserify>crypto-browserify>create-hmac": true, + "browserify>crypto-browserify>public-encrypt>browserify-rsa": true, + "browserify>crypto-browserify>public-encrypt>parse-asn1": true, + "browserify>stream-browserify": true, + "ethereumjs-util>create-hash": true, + "ganache>secp256k1>elliptic": true, + "pumpify>inherits": true + } + }, + "browserify>crypto-browserify>create-ecdh": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "browserify>crypto-browserify>create-hmac": { + "packages": { + "addons-linter>sha.js": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>create-hash>cipher-base": true, + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "browserify>crypto-browserify>diffie-hellman": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "browserify>crypto-browserify>diffie-hellman>miller-rabin": true, + "ethereumjs-wallet>randombytes": true + } + }, + "browserify>crypto-browserify>diffie-hellman>miller-rabin": { + "packages": { + "bn.js": true, + "ganache>secp256k1>elliptic>brorand": true + } + }, + "browserify>crypto-browserify>pbkdf2": { + "globals": { + "crypto": true, + "process": true, + "queueMicrotask": true, + "setImmediate": true, + "setTimeout": true + }, + "packages": { + "addons-linter>sha.js": true, + "browserify>process": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "browserify>crypto-browserify>public-encrypt": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "browserify>crypto-browserify>public-encrypt>browserify-rsa": true, + "browserify>crypto-browserify>public-encrypt>parse-asn1": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-wallet>randombytes": true + } + }, + "browserify>crypto-browserify>public-encrypt>browserify-rsa": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "ethereumjs-wallet>randombytes": true + } + }, + "browserify>crypto-browserify>public-encrypt>parse-asn1": { + "packages": { + "browserify>buffer": true, + "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, + "browserify>crypto-browserify>pbkdf2": true, + "browserify>crypto-browserify>public-encrypt>parse-asn1>asn1.js": true, + "ethereumjs-util>ethereum-cryptography>browserify-aes": true + } + }, + "browserify>crypto-browserify>public-encrypt>parse-asn1>asn1.js": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "browserify>vm-browserify": true, + "ganache>secp256k1>elliptic>minimalistic-assert": true, + "pumpify>inherits": true + } + }, + "browserify>crypto-browserify>randomfill": { + "globals": { + "crypto": true, + "msCrypto": true + }, + "packages": { + "browserify>process": true, + "ethereumjs-wallet>randombytes": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "browserify>events": { + "globals": { + "console": true + } + }, + "browserify>os-browserify": { + "globals": { + "location": true, + "navigator": true + } + }, + "browserify>path-browserify": { + "packages": { + "browserify>process": true + } + }, + "browserify>process": { + "globals": { + "clearTimeout": true, + "setTimeout": true + } + }, + "browserify>punycode": { + "globals": { + "define": true + } + }, + "browserify>stream-browserify": { + "packages": { + "browserify>events": true, + "pumpify>inherits": true, + "readable-stream": true + } + }, + "browserify>string_decoder": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, + "browserify>timers-browserify": { + "globals": { + "clearInterval": true, + "clearTimeout": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "browserify>process": true + } + }, + "browserify>url": { + "packages": { + "browserify>punycode": true, + "browserify>querystring-es3": true + } + }, + "browserify>util": { + "globals": { + "console.error": true, + "console.log": true, + "console.trace": true, + "process": true + }, + "packages": { + "browserify>process": true, + "browserify>util>inherits": true + } + }, + "browserify>vm-browserify": { + "globals": { + "document.body.appendChild": true, + "document.body.removeChild": true, + "document.createElement": true + } + }, + "classnames": { + "globals": { + "classNames": "write", + "define": true + } + }, + "copy-to-clipboard": { + "globals": { + "clipboardData": true, + "console.error": true, + "console.warn": true, + "document.body.appendChild": true, + "document.body.removeChild": true, + "document.createElement": true, + "document.createRange": true, + "document.execCommand": true, + "document.getSelection": true, + "navigator.userAgent": true, + "prompt": true + }, + "packages": { + "copy-to-clipboard>toggle-selection": true + } + }, + "copy-to-clipboard>toggle-selection": { + "globals": { + "document.activeElement": true, + "document.getSelection": true + } + }, + "currency-formatter": { + "packages": { + "currency-formatter>accounting": true, + "currency-formatter>locale-currency": true, + "react>object-assign": true + } + }, + "currency-formatter>accounting": { + "globals": { + "define": true + } + }, + "currency-formatter>locale-currency": { + "globals": { + "countryCode": true + } + }, + "debounce-stream": { + "packages": { + "debounce-stream>debounce": true, + "debounce-stream>duplexer": true, + "debounce-stream>through": true + } + }, + "debounce-stream>debounce": { + "globals": { + "clearTimeout": true, + "setTimeout": true + } + }, + "debounce-stream>duplexer": { + "packages": { + "browserify>stream-browserify": true + } + }, + "debounce-stream>through": { + "packages": { + "browserify>process": true, + "browserify>stream-browserify": true + } + }, + "depcheck>@vue/compiler-sfc>postcss>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "dependency-tree>precinct>detective-postcss>postcss>nanoid": { + "globals": { + "crypto.getRandomValues": true + } + }, + "end-of-stream": { + "packages": { + "browserify>process": true, + "pump>once": true + } + }, + "enzyme>cheerio>tslib": { + "globals": { + "define": true + } + }, + "enzyme>has": { + "packages": { + "mocha>object.assign>function-bind": true + } + }, + "enzyme>is-regex": { + "packages": { + "koa>is-generator-function>has-tostringtag": true, + "string.prototype.matchall>call-bind": true + } + }, + "enzyme>object-is": { + "packages": { + "globalthis>define-properties": true, + "string.prototype.matchall>call-bind": true + } + }, + "eslint>optionator>fast-levenshtein": { + "globals": { + "Intl": true, + "Levenshtein": "write", + "console.log": true, + "define": true, + "importScripts": true, + "postMessage": true + } + }, + "eth-block-tracker": { + "globals": { + "clearTimeout": true, + "console.error": true, + "setTimeout": true + }, + "packages": { + "@metamask/utils": true, + "eth-block-tracker>pify": true, + "eth-query>json-rpc-random-id": true, + "json-rpc-engine>@metamask/safe-event-emitter": true + } + }, + "eth-ens-namehash": { + "globals": { + "name": "write" + }, + "packages": { + "browserify>buffer": true, + "eth-ens-namehash>idna-uts46-hx": true, + "eth-ens-namehash>js-sha3": true + } + }, + "eth-ens-namehash>idna-uts46-hx": { + "globals": { + "define": true + }, + "packages": { + "browserify>punycode": true + } + }, + "eth-ens-namehash>js-sha3": { + "packages": { + "browserify>process": true + } + }, + "eth-json-rpc-filters": { + "globals": { + "console.error": true + }, + "packages": { + "eth-json-rpc-filters>async-mutex": true, + "eth-query": true, + "json-rpc-engine": true, + "json-rpc-engine>@metamask/safe-event-emitter": true, + "pify": true + } + }, + "eth-json-rpc-filters>async-mutex": { + "globals": { + "setTimeout": true + }, + "packages": { + "enzyme>cheerio>tslib": true + } + }, + "eth-json-rpc-middleware": { + "globals": { + "URL": true, + "btoa": true, + "console.error": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@metamask/utils": true, + "browserify>browser-resolve": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util": true, + "eth-json-rpc-middleware>pify": true, + "eth-rpc-errors": true, + "json-rpc-engine": true, + "json-rpc-engine>@metamask/safe-event-emitter": true, + "lavamoat>json-stable-stringify": true, + "vinyl>clone": true + } + }, + "eth-json-rpc-middleware>@metamask/eth-sig-util": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethjs-util": true, + "eth-lattice-keyring>@ethereumjs/util": true, + "eth-sig-util>tweetnacl": true, + "eth-sig-util>tweetnacl-util": true + } + }, + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": true + } + }, + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "eth-json-rpc-middleware>@metamask/eth-sig-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "eth-keyring-controller>@metamask/browser-passworder": { + "globals": { + "crypto": true + } + }, + "eth-lattice-keyring": { + "globals": { + "addEventListener": true, + "browser": true, + "clearInterval": true, + "fetch": true, + "open": true, + "setInterval": true + }, + "packages": { + "browserify>buffer": true, + "browserify>crypto-browserify": true, + "browserify>events": true, + "eth-lattice-keyring>@ethereumjs/tx": true, + "eth-lattice-keyring>@ethereumjs/util": true, + "eth-lattice-keyring>bn.js": true, + "eth-lattice-keyring>gridplus-sdk": true, + "eth-lattice-keyring>rlp": true + } + }, + "eth-lattice-keyring>@ethereumjs/tx": { + "packages": { + "@ethereumjs/common": true, + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true, + "ethereumjs-util": true + } + }, + "eth-lattice-keyring>@ethereumjs/util": { + "globals": { + "console.warn": true + }, + "packages": { + "browserify>buffer": true, + "browserify>events": true, + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": true, + "eth-lattice-keyring>@ethereumjs/util>async": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>@ethereumjs/rlp": { + "globals": { + "TextEncoder": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>async": { + "globals": { + "clearTimeout": true, + "console": true, + "define": true, + "queueMicrotask": true, + "setTimeout": true + }, + "packages": { + "browserify>process": true, + "browserify>timers-browserify": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography": { + "globals": { + "TextDecoder": true, + "crypto": true + }, + "packages": { + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/hashes": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/hashes": { + "globals": { + "TextEncoder": true, + "crypto": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": { + "globals": { + "crypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@scure/bip32": { + "packages": { + "@metamask/key-tree>@noble/hashes": true, + "@metamask/key-tree>@scure/base": true, + "eth-lattice-keyring>@ethereumjs/util>ethereum-cryptography>@noble/secp256k1": true + } + }, + "eth-lattice-keyring>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "eth-lattice-keyring>gridplus-sdk": { + "globals": { + "AbortController": true, + "Request": true, + "__values": true, + "caches": true, + "clearTimeout": true, + "console.error": true, + "console.log": true, + "console.warn": true, + "fetch": true, + "setTimeout": true + }, + "packages": { + "@ethereumjs/common>crc-32": true, + "@ethersproject/abi": true, + "bn.js": true, + "browserify>buffer": true, + "browserify>process": true, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/common": true, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx": true, + "eth-lattice-keyring>gridplus-sdk>bech32": true, + "eth-lattice-keyring>gridplus-sdk>bignumber.js": true, + "eth-lattice-keyring>gridplus-sdk>bitwise": true, + "eth-lattice-keyring>gridplus-sdk>borc": true, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true, + "eth-lattice-keyring>gridplus-sdk>js-sha3": true, + "eth-lattice-keyring>gridplus-sdk>rlp": true, + "eth-lattice-keyring>gridplus-sdk>secp256k1": true, + "eth-lattice-keyring>gridplus-sdk>uuid": true, + "ethereumjs-util>ethereum-cryptography>hash.js": true, + "ethereumjs-wallet>aes-js": true, + "ethereumjs-wallet>bs58check": true, + "ganache>secp256k1>elliptic": true, + "lodash": true + } + }, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/common": { + "packages": { + "@ethereumjs/common>crc-32": true, + "browserify>buffer": true, + "browserify>events": true, + "ethereumjs-util": true + } + }, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx": { + "packages": { + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx>@ethereumjs/common": true, + "ethereumjs-util": true + } + }, + "eth-lattice-keyring>gridplus-sdk>@ethereumjs/tx>@ethereumjs/common": { + "packages": { + "@ethereumjs/common>crc-32": true, + "browserify>buffer": true, + "browserify>events": true, + "ethereumjs-util": true + } + }, + "eth-lattice-keyring>gridplus-sdk>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "eth-lattice-keyring>gridplus-sdk>bitwise": { + "packages": { + "browserify>buffer": true + } + }, + "eth-lattice-keyring>gridplus-sdk>borc": { + "globals": { + "console": true + }, + "packages": { + "browserify>buffer": true, + "browserify>buffer>ieee754": true, + "eth-lattice-keyring>gridplus-sdk>borc>bignumber.js": true, + "eth-lattice-keyring>gridplus-sdk>borc>iso-url": true + } + }, + "eth-lattice-keyring>gridplus-sdk>borc>bignumber.js": { + "globals": { + "crypto": true, + "define": true + } + }, + "eth-lattice-keyring>gridplus-sdk>borc>iso-url": { + "globals": { + "URL": true, + "URLSearchParams": true, + "location": true + } + }, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": { + "globals": { + "intToBuffer": true + }, + "packages": { + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>bn.js": true, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>buffer": true, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>js-sha3": true + } + }, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>buffer": { + "globals": { + "console": true + }, + "packages": { + "base64-js": true, + "browserify>buffer>ieee754": true + } + }, + "eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser>js-sha3": { + "globals": { + "define": true + }, + "packages": { + "browserify>process": true + } + }, + "eth-lattice-keyring>gridplus-sdk>js-sha3": { + "globals": { + "define": true + }, + "packages": { + "browserify>process": true + } + }, + "eth-lattice-keyring>gridplus-sdk>rlp": { + "globals": { + "TextEncoder": true + } + }, + "eth-lattice-keyring>gridplus-sdk>secp256k1": { + "packages": { + "ganache>secp256k1>elliptic": true + } + }, + "eth-lattice-keyring>gridplus-sdk>uuid": { + "globals": { + "crypto": true + } + }, + "eth-lattice-keyring>rlp": { + "globals": { + "TextEncoder": true + } + }, + "eth-method-registry": { + "packages": { + "ethjs": true + } + }, + "eth-query": { + "packages": { + "eth-query>json-rpc-random-id": true, + "nock>debug": true, + "watchify>xtend": true + } + }, + "eth-rpc-errors": { + "packages": { + "eth-rpc-errors>fast-safe-stringify": true + } + }, + "eth-sig-util": { + "packages": { + "browserify>buffer": true, + "eth-sig-util>ethereumjs-util": true, + "eth-sig-util>tweetnacl": true, + "eth-sig-util>tweetnacl-util": true, + "ethereumjs-abi": true + } + }, + "eth-sig-util>ethereumjs-util": { + "packages": { + "bn.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "eth-sig-util>ethereumjs-util>ethjs-util": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true, + "ethereumjs-wallet>safe-buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "eth-sig-util>ethereumjs-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "eth-sig-util>tweetnacl": { + "globals": { + "crypto": true, + "msCrypto": true, + "nacl": "write" + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "eth-sig-util>tweetnacl-util": { + "globals": { + "atob": true, + "btoa": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "eth-trezor-keyring": { + "globals": { + "setTimeout": true + }, + "packages": { + "@ethereumjs/tx": true, + "browserify>buffer": true, + "browserify>events": true, + "eth-trezor-keyring>hdkey": true, + "eth-trezor-keyring>trezor-connect": true, + "ethereumjs-util": true + } + }, + "eth-trezor-keyring>hdkey": { + "packages": { + "browserify>assert": true, + "browserify>crypto-browserify": true, + "eth-trezor-keyring>hdkey>coinstring": true, + "eth-trezor-keyring>hdkey>secp256k1": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "eth-trezor-keyring>hdkey>coinstring": { + "packages": { + "browserify>buffer": true, + "eth-trezor-keyring>hdkey>coinstring>bs58": true, + "ethereumjs-util>create-hash": true + } + }, + "eth-trezor-keyring>hdkey>secp256k1": { + "packages": { + "bn.js": true, + "browserify>insert-module-globals>is-buffer": true, + "eth-trezor-keyring>hdkey>secp256k1>bip66": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-wallet>safe-buffer": true, + "ganache>secp256k1>elliptic": true + } + }, + "eth-trezor-keyring>hdkey>secp256k1>bip66": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, + "eth-trezor-keyring>trezor-connect": { + "globals": { + "__TREZOR_CONNECT_SRC": true, + "addEventListener": true, + "btoa": true, + "chrome": true, + "clearInterval": true, + "clearTimeout": true, + "console": true, + "document.body": true, + "document.createElement": true, + "document.createTextNode": true, + "document.getElementById": true, + "document.querySelectorAll": true, + "location": true, + "navigator": true, + "open": true, + "removeEventListener": true, + "setInterval": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true, + "browserify>events": true, + "eth-json-rpc-middleware>@metamask/eth-sig-util": true, + "eth-trezor-keyring>trezor-connect>cross-fetch": true + } + }, + "eth-trezor-keyring>trezor-connect>cross-fetch": { + "globals": { + "Blob": true, + "FileReader": true, + "FormData": true, + "URLSearchParams.prototype.isPrototypeOf": true, + "XMLHttpRequest": true + } + }, + "ethereumjs-abi": { + "packages": { + "bn.js": true, + "browserify>buffer": true, + "ethereumjs-abi>ethereumjs-util": true + } + }, + "ethereumjs-abi>ethereumjs-util": { + "packages": { + "bn.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "ethereumjs-abi>ethereumjs-util>ethjs-util": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true, + "ganache>secp256k1>elliptic": true + } + }, + "ethereumjs-abi>ethereumjs-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "ethereumjs-util": { + "packages": { + "browserify>assert": true, + "browserify>buffer": true, + "browserify>insert-module-globals>is-buffer": true, + "ethereumjs-util>bn.js": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true + } + }, + "ethereumjs-util>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "ethereumjs-util>create-hash": { + "packages": { + "addons-linter>sha.js": true, + "ethereumjs-util>create-hash>cipher-base": true, + "ethereumjs-util>create-hash>md5.js": true, + "ethereumjs-util>create-hash>ripemd160": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>create-hash>cipher-base": { + "packages": { + "browserify>stream-browserify": true, + "browserify>string_decoder": true, + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>create-hash>md5.js": { + "packages": { + "ethereumjs-util>create-hash>md5.js>hash-base": true, + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>create-hash>md5.js>hash-base": { + "packages": { + "ethereumjs-util>create-hash>md5.js>hash-base>readable-stream": true, + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>create-hash>md5.js>hash-base>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>create-hash>ripemd160": { + "packages": { + "browserify>buffer": true, + "ethereumjs-util>create-hash>md5.js>hash-base": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>ethereum-cryptography": { + "packages": { + "browserify>buffer": true, + "ethereumjs-util>ethereum-cryptography>keccak": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, + "ethereumjs-wallet>randombytes": true + } + }, + "ethereumjs-util>ethereum-cryptography>browserify-aes": { + "packages": { + "browserify>buffer": true, + "browserify>crypto-browserify>browserify-cipher>evp_bytestokey": true, + "ethereumjs-util>create-hash>cipher-base": true, + "ethereumjs-util>ethereum-cryptography>browserify-aes>buffer-xor": true, + "ethereumjs-wallet>safe-buffer": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>ethereum-cryptography>browserify-aes>buffer-xor": { + "packages": { + "browserify>buffer": true + } + }, + "ethereumjs-util>ethereum-cryptography>hash.js": { + "packages": { + "ganache>secp256k1>elliptic>minimalistic-assert": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>ethereum-cryptography>keccak": { + "packages": { + "browserify>buffer": true, + "ethereumjs-util>ethereum-cryptography>keccak>readable-stream": true + } + }, + "ethereumjs-util>ethereum-cryptography>keccak>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "ethereumjs-util>ethereum-cryptography>scrypt-js": { + "globals": { + "define": true, + "setTimeout": true + }, + "packages": { + "browserify>timers-browserify": true + } + }, + "ethereumjs-util>ethereum-cryptography>secp256k1": { + "packages": { + "ganache>secp256k1>elliptic": true + } + }, + "ethereumjs-util>rlp": { + "packages": { + "browserify>buffer": true, + "ethereumjs-util>rlp>bn.js": true + } + }, + "ethereumjs-util>rlp>bn.js": { + "globals": { + "Buffer": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "ethereumjs-wallet": { + "packages": { + "@truffle/codec>utf8": true, + "browserify>crypto-browserify": true, + "ethereumjs-wallet>aes-js": true, + "ethereumjs-wallet>bs58check": true, + "ethereumjs-wallet>ethereumjs-util": true, + "ethereumjs-wallet>randombytes": true, + "ethereumjs-wallet>safe-buffer": true, + "ethereumjs-wallet>scryptsy": true, + "ethereumjs-wallet>uuid": true + } + }, + "ethereumjs-wallet>aes-js": { + "globals": { + "define": true + } + }, + "ethereumjs-wallet>bs58check": { + "packages": { + "ethereumjs-util>create-hash": true, + "ethereumjs-wallet>bs58check>bs58": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "ethereumjs-wallet>bs58check>bs58": { + "packages": { + "ethereumjs-wallet>bs58check>bs58>base-x": true + } + }, + "ethereumjs-wallet>bs58check>bs58>base-x": { + "packages": { + "ethereumjs-wallet>safe-buffer": true + } + }, + "ethereumjs-wallet>ethereumjs-util": { + "packages": { + "bn.js": true, + "browserify>assert": true, + "browserify>buffer": true, + "ethereumjs-util>create-hash": true, + "ethereumjs-util>ethereum-cryptography": true, + "ethereumjs-util>rlp": true, + "ethereumjs-wallet>ethereumjs-util>ethjs-util": true, + "ganache>secp256k1>elliptic": true + } + }, + "ethereumjs-wallet>ethereumjs-util>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "ethereumjs-wallet>randombytes": { + "globals": { + "crypto": true, + "msCrypto": true + }, + "packages": { + "browserify>process": true, + "ethereumjs-wallet>safe-buffer": true + } + }, + "ethereumjs-wallet>safe-buffer": { + "packages": { + "browserify>buffer": true + } + }, + "ethereumjs-wallet>scryptsy": { + "packages": { + "browserify>buffer": true, + "browserify>crypto-browserify>pbkdf2": true + } + }, + "ethereumjs-wallet>uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, + "ethers>@ethersproject/random": { + "globals": { + "crypto.getRandomValues": true + } + }, + "ethjs": { + "globals": { + "clearInterval": true, + "setInterval": true + }, + "packages": { + "browserify>buffer": true, + "ethjs-contract": true, + "ethjs-query": true, + "ethjs>bn.js": true, + "ethjs>ethjs-abi": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-provider-http": true, + "ethjs>ethjs-unit": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "ethjs-contract": { + "packages": { + "ethjs-contract>ethjs-abi": true, + "ethjs-query>babel-runtime": true, + "ethjs>ethjs-filter": true, + "ethjs>ethjs-util": true, + "ethjs>js-sha3": true, + "promise-to-callback": true + } + }, + "ethjs-contract>ethjs-abi": { + "packages": { + "browserify>buffer": true, + "ethjs-contract>ethjs-abi>bn.js": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "ethjs-query": { + "globals": { + "console": true + }, + "packages": { + "ethjs-query>ethjs-format": true, + "ethjs-query>ethjs-rpc": true, + "promise-to-callback": true + } + }, + "ethjs-query>babel-runtime": { + "packages": { + "@babel/runtime": true, + "@storybook/api>regenerator-runtime": true, + "ethjs-query>babel-runtime>core-js": true + } + }, + "ethjs-query>babel-runtime>core-js": { + "globals": { + "PromiseRejectionEvent": true, + "__e": "write", + "__g": "write", + "document.createTextNode": true, + "postMessage": true, + "setTimeout": true + } + }, + "ethjs-query>ethjs-format": { + "packages": { + "ethjs-query>ethjs-format>ethjs-schema": true, + "ethjs>ethjs-util": true, + "ethjs>ethjs-util>strip-hex-prefix": true, + "ethjs>number-to-bn": true + } + }, + "ethjs-query>ethjs-rpc": { + "packages": { + "promise-to-callback": true + } + }, + "ethjs>ethjs-abi": { + "packages": { + "browserify>buffer": true, + "ethjs>bn.js": true, + "ethjs>js-sha3": true, + "ethjs>number-to-bn": true + } + }, + "ethjs>ethjs-filter": { + "globals": { + "clearInterval": true, + "setInterval": true + } + }, + "ethjs>ethjs-provider-http": { + "packages": { + "ethjs>ethjs-provider-http>xhr2": true + } + }, + "ethjs>ethjs-provider-http>xhr2": { + "globals": { + "XMLHttpRequest": true + } + }, + "ethjs>ethjs-unit": { + "packages": { + "ethjs>ethjs-unit>bn.js": true, + "ethjs>number-to-bn": true + } + }, + "ethjs>ethjs-util": { + "packages": { + "browserify>buffer": true, + "ethjs>ethjs-util>is-hex-prefixed": true, + "ethjs>ethjs-util>strip-hex-prefix": true + } + }, + "ethjs>ethjs-util>strip-hex-prefix": { + "packages": { + "ethjs>ethjs-util>is-hex-prefixed": true + } + }, + "ethjs>js-sha3": { + "packages": { + "browserify>process": true + } + }, + "ethjs>number-to-bn": { + "packages": { + "ethjs>ethjs-util>strip-hex-prefix": true, + "ethjs>number-to-bn>bn.js": true + } + }, + "extension-port-stream": { + "packages": { + "browserify>buffer": true, + "browserify>stream-browserify": true + } + }, + "fast-json-patch": { + "globals": { + "addEventListener": true, + "clearTimeout": true, + "removeEventListener": true, + "setTimeout": true + } + }, + "fuse.js": { + "globals": { + "console": true, + "define": true + } + }, + "ganache>secp256k1>elliptic": { + "packages": { + "bn.js": true, + "ethereumjs-util>ethereum-cryptography>hash.js": true, + "ganache>secp256k1>elliptic>brorand": true, + "ganache>secp256k1>elliptic>hmac-drbg": true, + "ganache>secp256k1>elliptic>minimalistic-assert": true, + "ganache>secp256k1>elliptic>minimalistic-crypto-utils": true, + "pumpify>inherits": true + } + }, + "ganache>secp256k1>elliptic>brorand": { + "globals": { + "crypto": true, + "msCrypto": true + }, + "packages": { + "browserify>browser-resolve": true + } + }, + "ganache>secp256k1>elliptic>hmac-drbg": { + "packages": { + "ethereumjs-util>ethereum-cryptography>hash.js": true, + "ganache>secp256k1>elliptic>minimalistic-assert": true, + "ganache>secp256k1>elliptic>minimalistic-crypto-utils": true + } + }, + "globalthis>define-properties": { + "packages": { + "globalthis>define-properties>has-property-descriptors": true, + "mocha>object.assign>object-keys": true + } + }, + "globalthis>define-properties>has-property-descriptors": { + "packages": { + "string.prototype.matchall>get-intrinsic": true + } + }, + "json-rpc-engine": { + "packages": { + "eth-rpc-errors": true, + "json-rpc-engine>@metamask/safe-event-emitter": true + } + }, + "json-rpc-engine>@metamask/safe-event-emitter": { + "globals": { + "setTimeout": true + }, + "packages": { + "browserify>events": true + } + }, + "json-rpc-middleware-stream": { + "globals": { + "console.warn": true, + "setTimeout": true + }, + "packages": { + "json-rpc-engine>@metamask/safe-event-emitter": true, + "readable-stream": true + } + }, + "jsonschema": { + "packages": { + "browserify>url": true + } + }, + "koa>is-generator-function>has-tostringtag": { + "packages": { + "string.prototype.matchall>has-symbols": true + } + }, + "lavamoat>json-stable-stringify": { + "packages": { + "lavamoat>json-stable-stringify>jsonify": true + } + }, + "localforage": { + "globals": { + "Blob": true, + "BlobBuilder": true, + "FileReader": true, + "IDBKeyRange": true, + "MSBlobBuilder": true, + "MozBlobBuilder": true, + "OIndexedDB": true, + "WebKitBlobBuilder": true, + "atob": true, + "btoa": true, + "console.error": true, + "console.info": true, + "console.warn": true, + "define": true, + "fetch": true, + "indexedDB": true, + "localStorage": true, + "mozIndexedDB": true, + "msIndexedDB": true, + "navigator.platform": true, + "navigator.userAgent": true, + "openDatabase": true, + "setTimeout": true, + "webkitIndexedDB": true + } + }, + "lodash": { + "globals": { + "clearTimeout": true, + "define": true, + "setTimeout": true + } + }, + "loglevel": { + "globals": { + "console": true, + "define": true, + "document.cookie": true, + "localStorage": true, + "log": "write", + "navigator": true + } + }, + "luxon": { + "globals": { + "Intl": true + } + }, + "madge>ora>bl": { + "packages": { + "browserify>buffer": true, + "madge>ora>bl>readable-stream": true, + "pumpify>inherits": true + } + }, + "madge>ora>bl>readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>buffer": true, + "browserify>events": true, + "browserify>process": true, + "browserify>string_decoder": true, + "pumpify>inherits": true + } + }, + "nanoid": { + "globals": { + "crypto": true, + "msCrypto": true, + "navigator": true + } + }, + "nock>debug": { + "globals": { + "console": true, + "document": true, + "localStorage": true, + "navigator": true, + "process": true + }, + "packages": { + "browserify>process": true, + "nock>debug>ms": true + } + }, + "node-fetch": { + "globals": { + "Headers": true, + "Request": true, + "Response": true, + "fetch": true + } + }, + "nonce-tracker": { + "packages": { + "await-semaphore": true, + "browserify>assert": true, + "ethjs-query": true + } + }, + "obj-multiplex": { + "globals": { + "console.warn": true + }, + "packages": { + "end-of-stream": true, + "pump>once": true, + "readable-stream": true + } + }, + "promise-to-callback": { + "packages": { + "promise-to-callback>is-fn": true, + "promise-to-callback>set-immediate-shim": true + } + }, + "promise-to-callback>set-immediate-shim": { + "globals": { + "setTimeout.apply": true + }, + "packages": { + "browserify>timers-browserify": true + } + }, + "prop-types": { + "globals": { + "console": true + }, + "packages": { + "prop-types>react-is": true, + "react>object-assign": true + } + }, + "prop-types>react-is": { + "globals": { + "console": true + } + }, + "pubnub": { + "globals": { + "ActiveXObject": true, + "XMLHttpRequest": true, + "addEventListener": true, + "btoa": true, + "clearInterval": true, + "clearTimeout": true, + "console": true, + "define": true, + "localStorage.getItem": true, + "localStorage.setItem": true, + "location": true, + "navigator": true, + "setInterval": true, + "setTimeout": true + } + }, + "pubnub>cbor-sync": { + "globals": { + "define": true + }, + "packages": { + "browserify>buffer": true + } + }, + "pump": { + "packages": { + "browserify>browser-resolve": true, + "browserify>process": true, + "end-of-stream": true, + "pump>once": true + } + }, + "pump>once": { + "packages": { + "pump>once>wrappy": true + } + }, + "qrcode-generator": { + "globals": { + "define": true + } + }, + "qrcode.react": { + "globals": { + "Path2D": true, + "devicePixelRatio": true + }, + "packages": { + "prop-types": true, + "qrcode.react>qr.js": true, + "react": true + } + }, + "react": { + "globals": { + "console": true + }, + "packages": { + "prop-types": true, + "react>object-assign": true + } + }, + "react-devtools": { + "packages": { + "react-devtools>react-devtools-core": true + } + }, + "react-devtools>react-devtools-core": { + "globals": { + "WebSocket": true, + "setTimeout": true + } + }, + "react-dnd-html5-backend": { + "globals": { + "addEventListener": true, + "clearTimeout": true, + "removeEventListener": true + } + }, + "react-dom": { + "globals": { + "HTMLIFrameElement": true, + "MSApp": true, + "__REACT_DEVTOOLS_GLOBAL_HOOK__": true, + "addEventListener": true, + "clearTimeout": true, + "clipboardData": true, + "console": true, + "dispatchEvent": true, + "document": true, + "event": "write", + "jest": true, + "location.protocol": true, + "navigator.userAgent.indexOf": true, + "performance": true, + "removeEventListener": true, + "self": true, + "setTimeout": true, + "top": true, + "trustedTypes": true + }, + "packages": { + "prop-types": true, + "react": true, + "react-dom>scheduler": true, + "react>object-assign": true + } + }, + "react-dom>scheduler": { + "globals": { + "MessageChannel": true, + "cancelAnimationFrame": true, + "clearTimeout": true, + "console": true, + "navigator": true, + "performance": true, + "requestAnimationFrame": true, + "setTimeout": true + } + }, + "react-idle-timer": { + "globals": { + "clearTimeout": true, + "document": true, + "setTimeout": true + }, + "packages": { + "prop-types": true, + "react": true + } + }, + "react-inspector": { + "globals": { + "Node.CDATA_SECTION_NODE": true, + "Node.COMMENT_NODE": true, + "Node.DOCUMENT_FRAGMENT_NODE": true, + "Node.DOCUMENT_NODE": true, + "Node.DOCUMENT_TYPE_NODE": true, + "Node.ELEMENT_NODE": true, + "Node.PROCESSING_INSTRUCTION_NODE": true, + "Node.TEXT_NODE": true + }, + "packages": { + "ethjs-query>babel-runtime": true, + "prop-types": true, + "react": true, + "react-inspector>is-dom": true + } + }, + "react-inspector>is-dom": { + "globals": { + "Node": true + }, + "packages": { + "@lavamoat/snow>is-cross-origin>is-window": true, + "proxyquire>fill-keys>is-object": true + } + }, + "react-markdown": { + "globals": { + "console.warn": true + }, + "packages": { + "prop-types": true, + "react": true, + "react-markdown>comma-separated-tokens": true, + "react-markdown>property-information": true, + "react-markdown>react-is": true, + "react-markdown>remark-parse": true, + "react-markdown>remark-rehype": true, + "react-markdown>space-separated-tokens": true, + "react-markdown>style-to-object": true, + "react-markdown>unified": true, + "react-markdown>unist-util-visit": true, + "react-markdown>vfile": true + } + }, + "react-markdown>property-information": { + "packages": { + "watchify>xtend": true + } + }, + "react-markdown>react-is": { + "globals": { + "console": true + } + }, + "react-markdown>remark-parse": { + "packages": { + "react-markdown>remark-parse>mdast-util-from-markdown": true + } + }, + "react-markdown>remark-parse>mdast-util-from-markdown": { + "packages": { + "react-markdown>remark-parse>mdast-util-from-markdown>mdast-util-to-string": true, + "react-markdown>remark-parse>mdast-util-from-markdown>micromark": true, + "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": true, + "react-markdown>vfile>unist-util-stringify-position": true + } + }, + "react-markdown>remark-parse>mdast-util-from-markdown>micromark": { + "packages": { + "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": true + } + }, + "react-markdown>remark-parse>mdast-util-from-markdown>parse-entities": { + "globals": { + "document.createElement": true + } + }, + "react-markdown>remark-rehype": { + "packages": { + "react-markdown>remark-rehype>mdast-util-to-hast": true + } + }, + "react-markdown>remark-rehype>mdast-util-to-hast": { + "globals": { + "console.warn": true + }, + "packages": { + "react-markdown>remark-rehype>mdast-util-to-hast>mdast-util-definitions": true, + "react-markdown>remark-rehype>mdast-util-to-hast>mdurl": true, + "react-markdown>remark-rehype>mdast-util-to-hast>unist-builder": true, + "react-markdown>remark-rehype>mdast-util-to-hast>unist-util-generated": true, + "react-markdown>remark-rehype>mdast-util-to-hast>unist-util-position": true, + "react-markdown>unist-util-visit": true + } + }, + "react-markdown>remark-rehype>mdast-util-to-hast>mdast-util-definitions": { + "packages": { + "react-markdown>unist-util-visit": true + } + }, + "react-markdown>style-to-object": { + "packages": { + "react-markdown>style-to-object>inline-style-parser": true + } + }, + "react-markdown>unified": { + "packages": { + "jsdom>request>extend": true, + "react-markdown>unified>bail": true, + "react-markdown>unified>is-buffer": true, + "react-markdown>unified>is-plain-obj": true, + "react-markdown>unified>trough": true, + "react-markdown>vfile": true + } + }, + "react-markdown>unist-util-visit": { + "packages": { + "react-markdown>unist-util-visit>unist-util-visit-parents": true + } + }, + "react-markdown>unist-util-visit>unist-util-visit-parents": { + "packages": { + "react-markdown>unist-util-visit>unist-util-is": true + } + }, + "react-markdown>vfile": { + "packages": { + "browserify>path-browserify": true, + "browserify>process": true, + "react-markdown>vfile>is-buffer": true, + "react-markdown>vfile>vfile-message": true, + "vinyl>replace-ext": true + } + }, + "react-markdown>vfile>vfile-message": { + "packages": { + "react-markdown>vfile>unist-util-stringify-position": true + } + }, + "react-popper": { + "globals": { + "document": true + }, + "packages": { + "@popperjs/core": true, + "react": true, + "react-popper>react-fast-compare": true, + "react-popper>warning": true + } + }, + "react-popper>react-fast-compare": { + "globals": { + "Element": true, + "console.warn": true + } + }, + "react-popper>warning": { + "globals": { + "console": true + } + }, + "react-redux": { + "globals": { + "console": true, + "document": true + }, + "packages": { + "@babel/runtime": true, + "prop-types": true, + "prop-types>react-is": true, + "react": true, + "react-dom": true, + "react-redux>hoist-non-react-statics": true, + "redux": true + } + }, + "react-redux>hoist-non-react-statics": { + "packages": { + "prop-types>react-is": true + } + }, + "react-responsive-carousel": { + "globals": { + "HTMLElement": true, + "addEventListener": true, + "clearTimeout": true, + "console.warn": true, + "document": true, + "getComputedStyle": true, + "removeEventListener": true, + "setTimeout": true + }, + "packages": { + "classnames": true, + "react": true, + "react-dom": true, + "react-responsive-carousel>react-easy-swipe": true + } + }, + "react-responsive-carousel>react-easy-swipe": { + "globals": { + "addEventListener": true, + "define": true, + "document.addEventListener": true, + "document.removeEventListener": true + }, + "packages": { + "prop-types": true, + "react": true + } + }, + "react-router-dom": { + "packages": { + "prop-types": true, + "react": true, + "react-router-dom>history": true, + "react-router-dom>react-router": true, + "react-router-dom>tiny-invariant": true, + "react-router-dom>tiny-warning": true + } + }, + "react-router-dom>history": { + "globals": { + "addEventListener": true, + "confirm": true, + "document": true, + "history": true, + "location": true, + "navigator.userAgent": true, + "removeEventListener": true + }, + "packages": { + "react-router-dom>history>resolve-pathname": true, + "react-router-dom>history>value-equal": true, + "react-router-dom>tiny-invariant": true, + "react-router-dom>tiny-warning": true + } + }, + "react-router-dom>react-router": { + "packages": { + "prop-types": true, + "prop-types>react-is": true, + "react": true, + "react-redux>hoist-non-react-statics": true, + "react-router-dom>react-router>history": true, + "react-router-dom>react-router>mini-create-react-context": true, + "react-router-dom>tiny-invariant": true, + "react-router-dom>tiny-warning": true, + "sinon>nise>path-to-regexp": true + } + }, + "react-router-dom>react-router>history": { + "globals": { + "addEventListener": true, + "confirm": true, + "document": true, + "history": true, + "location": true, + "navigator.userAgent": true, + "removeEventListener": true + }, + "packages": { + "react-router-dom>history>resolve-pathname": true, + "react-router-dom>history>value-equal": true, + "react-router-dom>tiny-invariant": true, + "react-router-dom>tiny-warning": true + } + }, + "react-router-dom>react-router>mini-create-react-context": { + "packages": { + "@babel/runtime": true, + "prop-types": true, + "react": true, + "react-router-dom>react-router>mini-create-react-context>gud": true, + "react-router-dom>tiny-warning": true + } + }, + "react-router-dom>tiny-warning": { + "globals": { + "console": true + } + }, + "react-simple-file-input": { + "globals": { + "File": true, + "FileReader": true, + "console.warn": true + }, + "packages": { + "prop-types": true, + "react": true + } + }, + "react-tippy": { + "globals": { + "Element": true, + "MSStream": true, + "MutationObserver": true, + "addEventListener": true, + "clearTimeout": true, + "console.error": true, + "console.warn": true, + "define": true, + "document": true, + "getComputedStyle": true, + "innerHeight": true, + "innerWidth": true, + "navigator.maxTouchPoints": true, + "navigator.msMaxTouchPoints": true, + "navigator.userAgent": true, + "performance": true, + "requestAnimationFrame": true, + "setTimeout": true + }, + "packages": { + "react": true, + "react-dom": true, + "react-tippy>popper.js": true + } + }, + "react-tippy>popper.js": { + "globals": { + "MSInputMethodContext": true, + "Node.DOCUMENT_POSITION_FOLLOWING": true, + "cancelAnimationFrame": true, + "console.warn": true, + "define": true, + "devicePixelRatio": true, + "document": true, + "getComputedStyle": true, + "innerHeight": true, + "innerWidth": true, + "navigator.userAgent": true, + "requestAnimationFrame": true, + "setTimeout": true + } + }, + "react-toggle-button": { + "globals": { + "clearTimeout": true, + "console.warn": true, + "define": true, + "performance": true, + "setTimeout": true + }, + "packages": { + "react": true + } + }, + "react-transition-group": { + "globals": { + "clearTimeout": true, + "setTimeout": true + }, + "packages": { + "prop-types": true, + "react": true, + "react-dom": true, + "react-transition-group>chain-function": true, + "react-transition-group>dom-helpers": true, + "react-transition-group>warning": true + } + }, + "react-transition-group>dom-helpers": { + "globals": { + "document": true, + "setTimeout": true + }, + "packages": { + "@babel/runtime": true + } + }, + "react-transition-group>warning": { + "globals": { + "console": true + } + }, + "readable-stream": { + "packages": { + "@storybook/api>util-deprecate": true, + "browserify>browser-resolve": true, + "browserify>events": true, + "browserify>process": true, + "browserify>timers-browserify": true, + "pumpify>inherits": true, + "readable-stream>core-util-is": true, + "readable-stream>isarray": true, + "readable-stream>process-nextick-args": true, + "readable-stream>safe-buffer": true, + "readable-stream>string_decoder": true + } + }, + "readable-stream>core-util-is": { + "packages": { + "browserify>insert-module-globals>is-buffer": true + } + }, + "readable-stream>process-nextick-args": { + "packages": { + "browserify>process": true + } + }, + "readable-stream>safe-buffer": { + "packages": { + "browserify>buffer": true + } + }, + "readable-stream>string_decoder": { + "packages": { + "readable-stream>safe-buffer": true + } + }, + "redux": { + "globals": { + "console": true + }, + "packages": { + "@babel/runtime": true + } + }, + "safe-event-emitter": { + "globals": { + "setTimeout": true + }, + "packages": { + "browserify>util": true, + "webpack>events": true + } + }, + "semver": { + "globals": { + "console.error": true + }, + "packages": { + "browserify>process": true, + "semver>lru-cache": true + } + }, + "semver>lru-cache": { + "packages": { + "semver>lru-cache>yallist": true + } + }, + "sinon>nise>path-to-regexp": { + "packages": { + "sinon>nise>path-to-regexp>isarray": true + } + }, + "string.prototype.matchall>call-bind": { + "packages": { + "mocha>object.assign>function-bind": true, + "string.prototype.matchall>get-intrinsic": true + } + }, + "string.prototype.matchall>get-intrinsic": { + "globals": { + "AggregateError": true, + "FinalizationRegistry": true, + "WeakRef": true + }, + "packages": { + "enzyme>has": true, + "mocha>object.assign>function-bind": true, + "string.prototype.matchall>has-symbols": true + } + }, + "string.prototype.matchall>regexp.prototype.flags": { + "packages": { + "enzyme>function.prototype.name>functions-have-names": true, + "globalthis>define-properties": true, + "string.prototype.matchall>call-bind": true + } + }, + "terser>source-map-support>buffer-from": { + "packages": { + "browserify>buffer": true + } + }, + "uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, + "vinyl>clone": { + "packages": { + "browserify>buffer": true + } + }, + "vinyl>replace-ext": { + "packages": { + "browserify>path-browserify": true + } + }, + "web3": { + "globals": { + "XMLHttpRequest": true + } + }, + "web3-stream-provider": { + "globals": { + "setTimeout": true + }, + "packages": { + "browserify>util": true, + "readable-stream": true, + "web3-stream-provider>uuid": true + } + }, + "web3-stream-provider>uuid": { + "globals": { + "crypto": true, + "msCrypto": true + } + }, + "webextension-polyfill": { + "globals": { + "browser": true, + "chrome": true, + "console.error": true, + "console.warn": true, + "define": true + } + }, + "webpack>events": { + "globals": { + "console": true } } - } \ No newline at end of file + } +} \ No newline at end of file From da8fe7ea62aff41f38408619248f7adc297765c8 Mon Sep 17 00:00:00 2001 From: Maarten Zuidhoorn Date: Thu, 16 Feb 2023 10:35:11 +0100 Subject: [PATCH 25/36] [FLASK] Temporarily disable JSON-RPC snap e2e test (#17778) * Temporarily disable JSON-RPC snap e2e test * Update outdated snapshot --- test/e2e/snaps/test-snap-rpc.spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/e2e/snaps/test-snap-rpc.spec.js b/test/e2e/snaps/test-snap-rpc.spec.js index 572d8fc68..166d0b265 100644 --- a/test/e2e/snaps/test-snap-rpc.spec.js +++ b/test/e2e/snaps/test-snap-rpc.spec.js @@ -4,7 +4,9 @@ const FixtureBuilder = require('../fixture-builder'); const { TEST_SNAPS_WEBSITE_URL } = require('./enums'); describe('Test Snap RPC', function () { - it('can use the cross-snap RPC endowment and produce a public key', async function () { + // TODO: Re-enable this test once `test-snaps` is fixed. + // eslint-disable-next-line mocha/no-skipped-tests + it.skip('can use the cross-snap RPC endowment and produce a public key', async function () { const ganacheOptions = { accounts: [ { From 98b17d0038775843af727ff11d6e76e0e497deaa Mon Sep 17 00:00:00 2001 From: PeterYinusa Date: Tue, 7 Mar 2023 19:42:11 +0000 Subject: [PATCH 26/36] Update CHANGELOG.md --- CHANGELOG.md | 217 ++++++++++++--------------------------------------- 1 file changed, 50 insertions(+), 167 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 929827745..005691832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,176 +7,59 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.26.0] -### Uncategorized -- Sync `master` with `develop` ([#17665](https://github.com/MetaMask/metamask-extension/pull/17665)) -- Deprecating Typography component ([#17672](https://github.com/MetaMask/metamask-extension/pull/17672)) -- remove siwe feature flag ([#17690](https://github.com/MetaMask/metamask-extension/pull/17690)) -- Fix recent recipient order ([#16346](https://github.com/MetaMask/metamask-extension/pull/16346)) -- Add testing documentation ([#17411](https://github.com/MetaMask/metamask-extension/pull/17411)) -- Merge branch 'develop' into master-sync -- Fix for error during sending to multisig address ([#17651](https://github.com/MetaMask/metamask-extension/pull/17651)) -- UX: Update block explorer icon ([#17562](https://github.com/MetaMask/metamask-extension/pull/17562)) -- Merge branch 'develop' into master-sync -- fix test of useTransactionDisplayData for different timezone ([#17063](https://github.com/MetaMask/metamask-extension/pull/17063)) -- Sanitising string on signature request pages ([#17571](https://github.com/MetaMask/metamask-extension/pull/17571)) -- Conflict cleanup 10.25.0 master-sync -- Merge remote-tracking branch 'origin/develop' into master-sync -- Expand network controller unit test coverage ([#17498](https://github.com/MetaMask/metamask-extension/pull/17498)) -- Detect and track UI customizations on Personal Sign Requests ([#16222](https://github.com/MetaMask/metamask-extension/pull/16222)) -- Sign-in with Ethereum Domain Binding ([#16616](https://github.com/MetaMask/metamask-extension/pull/16616)) -- Update `json-rpc-middleware-stream` from v2 to v4 ([#17588](https://github.com/MetaMask/metamask-extension/pull/17588)) -- converted collectibles files to nfts ([#17658](https://github.com/MetaMask/metamask-extension/pull/17658)) -- E2e test insights ([#17535](https://github.com/MetaMask/metamask-extension/pull/17535)) -- [TS dashboard] Reorganize files slightly ([#17335](https://github.com/MetaMask/metamask-extension/pull/17335)) -- add brad-decker as codeowner of .circle/ folder ([#17648](https://github.com/MetaMask/metamask-extension/pull/17648)) -- Sort permissions based on weight ([#17660](https://github.com/MetaMask/metamask-extension/pull/17660)) -- Refactor ConfirmTransaction to Functional Component ([#17473](https://github.com/MetaMask/metamask-extension/pull/17473)) -- Add desktop build type ([#17592](https://github.com/MetaMask/metamask-extension/pull/17592)) -- add double arrow icons ([#17654](https://github.com/MetaMask/metamask-extension/pull/17654)) -- Add e2e test: send nft ([#17638](https://github.com/MetaMask/metamask-extension/pull/17638)) -- Adding docs for layout and spacing for Icon component ([#17612](https://github.com/MetaMask/metamask-extension/pull/17612)) -- Collectible Unit Tests ([#17632](https://github.com/MetaMask/metamask-extension/pull/17632)) -- Update BannerAlert component ([#17586](https://github.com/MetaMask/metamask-extension/pull/17586)) -- fix: update ledger logo ([#17616](https://github.com/MetaMask/metamask-extension/pull/17616)) -- Add hardcoded list of human-readable snap derivation paths ([#17627](https://github.com/MetaMask/metamask-extension/pull/17627)) -- [FLASK] Create E2E test for RPC endowment ([#17525](https://github.com/MetaMask/metamask-extension/pull/17525)) -- Added metric Phishing Page Displayed for phishing warning page ([#17462](https://github.com/MetaMask/metamask-extension/pull/17462)) -- updated assets and phishing controller packages ([#17569](https://github.com/MetaMask/metamask-extension/pull/17569)) -- UX: Fix token image not displaying in asset listing ([#17575](https://github.com/MetaMask/metamask-extension/pull/17575)) -- Prevent lint warning in ActionableMessage ([#17598](https://github.com/MetaMask/metamask-extension/pull/17598)) -- [doc] add Jest debugging guide (docs/tests/jest.md) ([#17594](https://github.com/MetaMask/metamask-extension/pull/17594)) -- Add hardcoded list of human-readable snap names ([#17595](https://github.com/MetaMask/metamask-extension/pull/17595)) -- NFTs: Update event name for Detect NFT settings ([#17597](https://github.com/MetaMask/metamask-extension/pull/17597)) -- Change COLORS reference to Color ([#17599](https://github.com/MetaMask/metamask-extension/pull/17599)) -- UX: Remove the IconCopy and IconCopied Components and their usages ([#17530](https://github.com/MetaMask/metamask-extension/pull/17530)) -- UX: Update support icon ([#17560](https://github.com/MetaMask/metamask-extension/pull/17560)) -- Convert actions.js to typescript ([#17446](https://github.com/MetaMask/metamask-extension/pull/17446)) -- Disable fiat conversion in Approve Screen when `Show balance and token price checker` is OFF ([#17443](https://github.com/MetaMask/metamask-extension/pull/17443)) -- Ensure the advanced gas modal displays a zero priority fee if that is how it is set in the transaction ([#17559](https://github.com/MetaMask/metamask-extension/pull/17559)) -- feature: convert ui/ducks/app/app.ts to typescript ([#17454](https://github.com/MetaMask/metamask-extension/pull/17454)) -- Fix speed up of 0 max priority fee transactions ([#17547](https://github.com/MetaMask/metamask-extension/pull/17547)) -- update banner base component ([#17582](https://github.com/MetaMask/metamask-extension/pull/17582)) -- updated tag icon ([#17540](https://github.com/MetaMask/metamask-extension/pull/17540)) -- decrease coverage threshold that requires bump ([#17544](https://github.com/MetaMask/metamask-extension/pull/17544)) -- Dead and redundant code removal ([#17512](https://github.com/MetaMask/metamask-extension/pull/17512)) -- initialize currentLocale in the locale slice upon app start ([#17579](https://github.com/MetaMask/metamask-extension/pull/17579)) -- fix: fix non-critical warning in tests ([#17567](https://github.com/MetaMask/metamask-extension/pull/17567)) -- feature: migrate design-system.ts ([#17518](https://github.com/MetaMask/metamask-extension/pull/17518)) -- Convert store.js to typescript and redux toolkit ([#17508](https://github.com/MetaMask/metamask-extension/pull/17508)) -- Add error module for safely handling errors ([#17511](https://github.com/MetaMask/metamask-extension/pull/17511)) -- Convert action-queue to TypeScript ([#17509](https://github.com/MetaMask/metamask-extension/pull/17509)) -- Add network client tests for methods not supported by Infura ([#17347](https://github.com/MetaMask/metamask-extension/pull/17347)) -- Add e2e test: import nft ([#17543](https://github.com/MetaMask/metamask-extension/pull/17543)) +### Added - Adding browser outdated notification ([#17027](https://github.com/MetaMask/metamask-extension/pull/17027)) -- Convert confirm-tx.utils.js to typescript ([#17349](https://github.com/MetaMask/metamask-extension/pull/17349)) -- updated CollectibleDetail Storybook Coverage ([#17351](https://github.com/MetaMask/metamask-extension/pull/17351)) -- adding textfix on experimental tab ([#17306](https://github.com/MetaMask/metamask-extension/pull/17306)) -- Allow background to handle forgotten password flow ([#17501](https://github.com/MetaMask/metamask-extension/pull/17501)) -- GasDisplay: fix z-index for Confirm Approve warning ([#17470](https://github.com/MetaMask/metamask-extension/pull/17470)) -- Fix http-cache-semantics dependency vulnerability GHSA-rc47-6667-2j5j ([#17563](https://github.com/MetaMask/metamask-extension/pull/17563)) -- Detailed document for refactoring signature request pages in extension ([#17456](https://github.com/MetaMask/metamask-extension/pull/17456)) -- Move confirm-transaction/conf-tx.js to confirm-signature-request ([#17408](https://github.com/MetaMask/metamask-extension/pull/17408)) -- remove nft toaster on first autohide ([#17536](https://github.com/MetaMask/metamask-extension/pull/17536)) -- Convert ui/store/actionConstants.js -> Typescript ([#17442](https://github.com/MetaMask/metamask-extension/pull/17442)) -- Fixing yarn version command, adding yarn version plugin ([#17325](https://github.com/MetaMask/metamask-extension/pull/17325)) -- 🐛 Calldata validation ([#17326](https://github.com/MetaMask/metamask-extension/pull/17326)) -- remove unused banner base proptype ([#17531](https://github.com/MetaMask/metamask-extension/pull/17531)) -- Add tests for `retryOnEmpty` middleware ([#17364](https://github.com/MetaMask/metamask-extension/pull/17364)) -- prefer locale slice for locale state ([#17499](https://github.com/MetaMask/metamask-extension/pull/17499)) -- Fixing/extending type definitions for later usage ([#17514](https://github.com/MetaMask/metamask-extension/pull/17514)) -- TypeScript tooling fixes ([#17513](https://github.com/MetaMask/metamask-extension/pull/17513)) -- Onboarding V2: Remove old onboarding flow ([#17081](https://github.com/MetaMask/metamask-extension/pull/17081)) -- Fix build ([#17538](https://github.com/MetaMask/metamask-extension/pull/17538)) -- fix button text props ([#17478](https://github.com/MetaMask/metamask-extension/pull/17478)) -- Refactoring confirm-transaction-base component ([#17484](https://github.com/MetaMask/metamask-extension/pull/17484)) -- Refactor conf-tx.js ([#17380](https://github.com/MetaMask/metamask-extension/pull/17380)) -- Fix RPC Url editing issue of existing network ([#17451](https://github.com/MetaMask/metamask-extension/pull/17451)) -- Adjust 'Confirm' button color on setApprovalForAll revocations ([#17506](https://github.com/MetaMask/metamask-extension/pull/17506)) -- Move THEME_TYPE to new preferences.ts file ([#17515](https://github.com/MetaMask/metamask-extension/pull/17515)) -- Fix #17328 - Move NFT settings to Experimental ([#17400](https://github.com/MetaMask/metamask-extension/pull/17400)) -- UX - Update all copy icons ([#17445](https://github.com/MetaMask/metamask-extension/pull/17445)) -- Added navigation between multiple sign prompts and reject all sign prompts ([#17093](https://github.com/MetaMask/metamask-extension/pull/17093)) -- Fix #17439 - Prevent event error when user presses enter key during onboarding ([#17497](https://github.com/MetaMask/metamask-extension/pull/17497)) -- Update overview icons for buy, send, and swap ([#17492](https://github.com/MetaMask/metamask-extension/pull/17492)) -- New Icons: Replace instance of fa-qr-code icon ([#17474](https://github.com/MetaMask/metamask-extension/pull/17474)) -- Fix #17441 - Update all MenuItem instances to use new icons ([#17468](https://github.com/MetaMask/metamask-extension/pull/17468)) -- Fix #17393 - Fix NFT collection header image ([#17394](https://github.com/MetaMask/metamask-extension/pull/17394)) -- Add e2e test: add custome network during onboarding ([#17436](https://github.com/MetaMask/metamask-extension/pull/17436)) -- feat(mme-17214): migrate L33 files to typescript ([#17372](https://github.com/MetaMask/metamask-extension/pull/17372)) -- Update copy when revoking setApprovalForAll ([#17500](https://github.com/MetaMask/metamask-extension/pull/17500)) -- master sync following v10.24.2 ([#17504](https://github.com/MetaMask/metamask-extension/pull/17504)) -- Merge remote-tracking branch 'origin/develop' into master-sync -- Update home portfolio dapp icon to new icon ([#17471](https://github.com/MetaMask/metamask-extension/pull/17471)) -- Document `displayWarning` as deprecated ([#17465](https://github.com/MetaMask/metamask-extension/pull/17465)) -- Ignore `storybook-build` lint errors ([#17373](https://github.com/MetaMask/metamask-extension/pull/17373)) -- remove snap notifications when uninstalled ([#17487](https://github.com/MetaMask/metamask-extension/pull/17487)) -- Nft build for e2e tests ([#17430](https://github.com/MetaMask/metamask-extension/pull/17430)) -- feature: convert level 32 files to typescript ([#17390](https://github.com/MetaMask/metamask-extension/pull/17390)) -- [e2e]Add e2e test for deleting custom network ([#17254](https://github.com/MetaMask/metamask-extension/pull/17254)) -- Fix #17362 - Ensure NFT icons are correct ([#17440](https://github.com/MetaMask/metamask-extension/pull/17440)) -- Fix #17385 - Provide autohide callback for ActionMessage ([#17392](https://github.com/MetaMask/metamask-extension/pull/17392)) -- button link housekeeping ([#16885](https://github.com/MetaMask/metamask-extension/pull/16885)) -- Bump lavapack version to 5 ([#17431](https://github.com/MetaMask/metamask-extension/pull/17431)) -- feature: convert shared/modules/contract-utils.test.js to typescript ([#17435](https://github.com/MetaMask/metamask-extension/pull/17435)) -- Refactor confirm page container component from class to functional component ([#16907](https://github.com/MetaMask/metamask-extension/pull/16907)) -- Test parameter change cache miss ([#17346](https://github.com/MetaMask/metamask-extension/pull/17346)) -- Document callback-style background calls as deprecated ([#17376](https://github.com/MetaMask/metamask-extension/pull/17376)) -- [GridPlus] Bumps `gridplus-sdk` to v2.4.1 ([#16847](https://github.com/MetaMask/metamask-extension/pull/16847)) -- Put hardware wallets behind an HARDWARE_WALLETS_MV3 flag ([#17354](https://github.com/MetaMask/metamask-extension/pull/17354)) -- Consolidated all component import paths ([#17368](https://github.com/MetaMask/metamask-extension/pull/17368)) -- updated new links for the stories ([#17369](https://github.com/MetaMask/metamask-extension/pull/17369)) -- Fix #17388 - Remove dismiss button from NFT notification ([#17389](https://github.com/MetaMask/metamask-extension/pull/17389)) -- Remove a notification for falling back from STX to regular swaps ([#17374](https://github.com/MetaMask/metamask-extension/pull/17374)) -- Feat/15086/add banner severities component ([#17307](https://github.com/MetaMask/metamask-extension/pull/17307)) -- fix icon names ([#17391](https://github.com/MetaMask/metamask-extension/pull/17391)) -- Fix Playwright install step ([#17415](https://github.com/MetaMask/metamask-extension/pull/17415)) -- Fix broken NFT import and auto-detect flows ([#17384](https://github.com/MetaMask/metamask-extension/pull/17384)) -- Convert ui/helpers/constants/common to typescript ([#17348](https://github.com/MetaMask/metamask-extension/pull/17348)) -- Copy update on Transaction breakdown for ApproveToken ([#17296](https://github.com/MetaMask/metamask-extension/pull/17296)) -- Add alt text for NFT images ([#17284](https://github.com/MetaMask/metamask-extension/pull/17284)) -- Nit fixes for story-test integration ([#17344](https://github.com/MetaMask/metamask-extension/pull/17344)) -- remove duplicate comment line ([#17381](https://github.com/MetaMask/metamask-extension/pull/17381)) -- Complete level 36 migration of TypeScript by converting conversion.utils.js and deprecate old conversion util ([#17262](https://github.com/MetaMask/metamask-extension/pull/17262)) -- icon audit, remove xxs icon size ([#17089](https://github.com/MetaMask/metamask-extension/pull/17089)) -- Activate LavaMoat scuttling security feature ([#17276](https://github.com/MetaMask/metamask-extension/pull/17276)) -- feat(mme-17212): convert shared/constants/swaps.js -> Typescript ([#17322](https://github.com/MetaMask/metamask-extension/pull/17322)) -- Add Firefox Snow support ([#17147](https://github.com/MetaMask/metamask-extension/pull/17147)) -- Move subject type enum to `@metamask/subject-metadata-controller` ([#16431](https://github.com/MetaMask/metamask-extension/pull/16431)) -- Replace usages of conversion util in rest of UI folder in favor of Numeric ([#17334](https://github.com/MetaMask/metamask-extension/pull/17334)) -- Fix/use etherjs specific imports ([#15461](https://github.com/MetaMask/metamask-extension/pull/15461)) -- Fix #17300, #16843 - Use proper source for image of IPFS NFTs ([#17302](https://github.com/MetaMask/metamask-extension/pull/17302)) -- Sync `master` with `develop` ([#17359](https://github.com/MetaMask/metamask-extension/pull/17359)) -- [FLASK] `snaps-monorepo@0.28.0` ([#17277](https://github.com/MetaMask/metamask-extension/pull/17277)) -- Remove usages of Conversion util in components folder in favor of Numeric ([#17333](https://github.com/MetaMask/metamask-extension/pull/17333)) -- Refactor Errors E2E test to no longer rely upon a real error ([#17332](https://github.com/MetaMask/metamask-extension/pull/17332)) -- Merge remote-tracking branch 'origin/develop' into master-sync -- Fix cookiejar dependency vulnerability ([#17355](https://github.com/MetaMask/metamask-extension/pull/17355)) -- [FLASK] Update onboarding text to fit new panel ([#17345](https://github.com/MetaMask/metamask-extension/pull/17345)) -- Refactor usages of conversion util in the app folder and shared folder in favor of Numeric ([#17331](https://github.com/MetaMask/metamask-extension/pull/17331)) -- Updated Icons in Title of NFTs ([#17205](https://github.com/MetaMask/metamask-extension/pull/17205)) -- Enable the Token Allowance flow by default for all users ([#16740](https://github.com/MetaMask/metamask-extension/pull/16740)) -- Convert app//scripts/lib/util.js to typescript ([#17330](https://github.com/MetaMask/metamask-extension/pull/17330)) -- Restore support for Chromium v78 ([#17251](https://github.com/MetaMask/metamask-extension/pull/17251)) -- Added fix for overlaping text in mozzila in activity tab ([#17235](https://github.com/MetaMask/metamask-extension/pull/17235)) -- Use PageContainerFooter to render footer on all confirmation pages ([#17316](https://github.com/MetaMask/metamask-extension/pull/17316)) -- chore: copy update for metamask fee on swaps ([#17133](https://github.com/MetaMask/metamask-extension/pull/17133)) -- Security provider check (OpenSea) ([#16584](https://github.com/MetaMask/metamask-extension/pull/16584)) -- Setup network controller mocks per-test ([#17250](https://github.com/MetaMask/metamask-extension/pull/17250)) -- Added toaster for removed NFTs ([#17297](https://github.com/MetaMask/metamask-extension/pull/17297)) -- Integrate `KeyringController` v10 ([#17056](https://github.com/MetaMask/metamask-extension/pull/17056)) -- add numeric module ([#17324](https://github.com/MetaMask/metamask-extension/pull/17324)) -- Convert app/scripts/constants -> Typescript ([#17327](https://github.com/MetaMask/metamask-extension/pull/17327)) -- Use async/await instead of Promise.resolve ([#16221](https://github.com/MetaMask/metamask-extension/pull/16221)) -- Added storybook check to CI ([#17092](https://github.com/MetaMask/metamask-extension/pull/17092)) -- feat(mme-17212): convert shared/module/string-utils.js -> Typescript ([#17320](https://github.com/MetaMask/metamask-extension/pull/17320)) -- Relocate conversion utils to shared/modules/conversion.utils.js ([#17319](https://github.com/MetaMask/metamask-extension/pull/17319)) -- Fix #17138 - Allow ActionMessage to be autohidden after a given number of milliseconds ([#17269](https://github.com/MetaMask/metamask-extension/pull/17269)) -- i18n: fix es privacy policy links ([#17315](https://github.com/MetaMask/metamask-extension/pull/17315)) -- fix script for linting changed files ([#17028](https://github.com/MetaMask/metamask-extension/pull/17028)) -- Convert shared/constants/hardware-wallets.js -> Typescript ([#17310](https://github.com/MetaMask/metamask-extension/pull/17310)) +- Add hardcoded list of human-readable snap names ([#17595](https://github.com/MetaMask/metamask-extension/pull/17595)) +- Add hardcoded list of human-readable snap derivation paths ([#17627](https://github.com/MetaMask/metamask-extension/pull/17627)) +- remove siwe feature flag ([#17690](https://github.com/MetaMask/metamask-extension/pull/17690)) + +### Changed - TransactionDecoding: rm unwanted cursor: pointer ([#17318](https://github.com/MetaMask/metamask-extension/pull/17318)) -- Convert shared/constants/labels.js -> Typescript ([#17309](https://github.com/MetaMask/metamask-extension/pull/17309)) +- Fix #17138 - Allow ActionMessage to be autohidden after a given number of milliseconds ([#17269](https://github.com/MetaMask/metamask-extension/pull/17269)) +- chore: copy update for metamask fee on swaps ([#17133](https://github.com/MetaMask/metamask-extension/pull/17133)) +- Use PageContainerFooter to render footer on all confirmation pages ([#17316](https://github.com/MetaMask/metamask-extension/pull/17316)) +- Enable the Token Allowance flow by default for all users ([#16740](https://github.com/MetaMask/metamask-extension/pull/16740)) +- [FLASK] Update onboarding text to fit new panel ([#17345](https://github.com/MetaMask/metamask-extension/pull/17345)) +- Copy update on Transaction breakdown for ApproveToken ([#17296](https://github.com/MetaMask/metamask-extension/pull/17296)) +- [GridPlus] Bumps `gridplus-sdk` to v2.4.1 ([#16847](https://github.com/MetaMask/metamask-extension/pull/16847)) +- Update home portfolio dapp icon to new icon ([#17471](https://github.com/MetaMask/metamask-extension/pull/17471)) +- Update copy when revoking setApprovalForAll ([#17500](https://github.com/MetaMask/metamask-extension/pull/17500)) +- Fix #17441 - Update all MenuItem instances to use new icons ([#17468](https://github.com/MetaMask/metamask-extension/pull/17468)) +- New Icons: Replace instance of fa-qr-code icon ([#17474](https://github.com/MetaMask/metamask-extension/pull/17474)) +- Update overview icons for buy, send, and swap ([#17492](https://github.com/MetaMask/metamask-extension/pull/17492)) +- Adjust 'Confirm' button color on setApprovalForAll revocations ([#17506](https://github.com/MetaMask/metamask-extension/pull/17506)) +- updated tag icon ([#17540](https://github.com/MetaMask/metamask-extension/pull/17540)) +- UX: Update support icon ([#17560](https://github.com/MetaMask/metamask-extension/pull/17560)) +- fix: update ledger logo ([#17616](https://github.com/MetaMask/metamask-extension/pull/17616)) +- Sort permissions based on weight ([#17660](https://github.com/MetaMask/metamask-extension/pull/17660)) +- Sanitising string on signature request pages ([#17571](https://github.com/MetaMask/metamask-extension/pull/17571)) +- UX: Update block explorer icon ([#17562](https://github.com/MetaMask/metamask-extension/pull/17562)) +- Fix recent recipient order ([#16346](https://github.com/MetaMask/metamask-extension/pull/16346)) +- UX: Icons: Use proper send icon on wallet and token overview pages ([#17720](https://github.com/MetaMask/metamask-extension/pull/17720)) +- Do not display experiment settings tab when there are no settings to show ([#17765](https://github.com/MetaMask/metamask-extension/pull/17765)) +- UX: Icons: Stop using fa-address-book ([#17761](https://github.com/MetaMask/metamask-extension/pull/17761)) +- UX: Replace all fa-bell instances with Notification icon ([#17524](https://github.com/MetaMask/metamask-extension/pull/17524)) +- UX: Icons: Remove usage of chevron fa- icons ([#17668](https://github.com/MetaMask/metamask-extension/pull/17668)) +- UX: Icon: Restore missing back chevron in settings ([#17916](https://github.com/MetaMask/metamask-extension/pull/17916)) +- Update the PhishingController to v2 and update phishing warning page ([#17835](https://github.com/MetaMask/metamask-extension/pull/17835)) + +### Removed +- Remove a notification for falling back from STX to regular swaps ([#17374](https://github.com/MetaMask/metamask-extension/pull/17374)) + +### Fixed - Fix transaction decoding data types `string` and `bool` ([#17299](https://github.com/MetaMask/metamask-extension/pull/17299)) +- i18n: fix es privacy policy links ([#17315](https://github.com/MetaMask/metamask-extension/pull/17315)) +- Added fix for overlaping text in mozzila in activity tab ([#17235](https://github.com/MetaMask/metamask-extension/pull/17235)) +- Restore support for Chromium v78 ([#17251](https://github.com/MetaMask/metamask-extension/pull/17251)) +- remove snap notifications when uninstalled ([#17487](https://github.com/MetaMask/metamask-extension/pull/17487)) +- Fix #17439 - Prevent event error when user presses enter key during onboarding ([#17497](https://github.com/MetaMask/metamask-extension/pull/17497)) +- Added navigation between multiple sign prompts and reject all sign prompts ([#17093](https://github.com/MetaMask/metamask-extension/pull/17093)) +- Fix RPC Url editing issue of existing network ([#17451](https://github.com/MetaMask/metamask-extension/pull/17451)) +- Fix http-cache-semantics dependency vulnerability GHSA-rc47-6667-2j5j ([#17563](https://github.com/MetaMask/metamask-extension/pull/17563)) +- UX: Fix token image not displaying in asset listing ([#17575](https://github.com/MetaMask/metamask-extension/pull/17575)) +- Fix for error during sending to multisig address ([#17651](https://github.com/MetaMask/metamask-extension/pull/17651)) +- Ensure simulation failure warning is shown on all networks and accounts ([#17458](https://github.com/MetaMask/metamask-extension/pull/17458)) +- Fix currency symbol in insufficient balance warning ([#17820](https://github.com/MetaMask/metamask-extension/pull/17820)) ## [10.25.0] ### Added From 8c550e78e9b79e3ce729865f9ab99cf3b24c0ff6 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 8 Mar 2023 09:38:24 -0800 Subject: [PATCH 27/36] patch lavamoat files to make v10.26.0 compatible with v78 of chrome (#18053) Co-authored-by: Peter <53189696+PeterYinusa@users.noreply.github.com> --- .../@lavamoat-snow-npm-1.4.1-405a48e593.patch | 9 ++++ .../lavamoat-core-npm-12.4.0-cecca1a9b5.patch | 14 ++++++ .../lavamoat-core-npm-14.0.0-0f5bdac846.patch | 16 +++++++ app/scripts/use-snow.js | 2 +- development/build/index.js | 1 + package.json | 6 ++- yarn.lock | 47 ++++++++++++++++--- 7 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 .yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch create mode 100644 .yarn/patches/lavamoat-core-npm-12.4.0-cecca1a9b5.patch create mode 100644 .yarn/patches/lavamoat-core-npm-14.0.0-0f5bdac846.patch diff --git a/.yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch b/.yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch new file mode 100644 index 000000000..634cda891 --- /dev/null +++ b/.yarn/patches/@lavamoat-snow-npm-1.4.1-405a48e593.patch @@ -0,0 +1,9 @@ +diff --git a/snow.prod.js b/snow.prod.js +index 2887e42dced838685e5b8f76d2c2f953fb808200..7fdac0cb49b5653371cecc4e2655999ad183047b 100644 +--- a/snow.prod.js ++++ b/snow.prod.js +@@ -1 +1 @@ +-(function(){"use strict";(()=>{var e={586:(e,t,n)=>{const r=n(228),{getFramesArray:o,getFrameTag:i}=n(648),{getOnload:c,setOnload:a,removeAttribute:s,addEventListener:u}=n(14);function l(e){if(!i(e))return;u(e,"load",(function(){r(e)}));const t=c(e);t&&(a(e,null),s(e,"onload"),a(e,t))}e.exports=function(e){for(let t=0;t{e.exports=function(e){e&&e.contentWindow}},832:(e,t,n)=>{const{Object:r,Function:o}=n(14),{isTagFramable:i}=n(648),{error:c,ERR_EXTENDING_FRAMABLES_BLOCKED:a}=n(312);e.exports=function(e){const t=r.getOwnPropertyDescriptor(e.CustomElementRegistry.prototype,"define");t.configurable=t.writable=!0;const n=t.value;var s;t.value=(s=n,function(e,t,n){let r=n;if(n){const t=n.extends;i(t+"")&&c(a,e,n)&&(r=void 0)}return o.prototype.call.call(s,this,e,t,r)}),r.defineProperty(e.CustomElementRegistry.prototype,"define",t)}},228:(e,t,n)=>{const r=n(851),o=n(750),{shadows:i,toArray:c,getFramesArray:a,getContentWindowOfFrame:s,getOwnerWindowOfNode:u}=n(648),{Object:l,getFrameElement:p}=n(14);function f(e,t){let n=-1;for(;e[++n];){if(r(e[n],e,l))continue;if(p(e[n])===t)return e[n];const o=f(e[n],t);if(o)return o}for(let n=0;n{const{getFramesArray:r}=n(648),{Array:o,stringToLowerCase:i,split:c,getAttribute:a,setAttribute:s,getTemplateContent:u,getChildElementCount:l,createElement:p,getInnerHTML:f,setInnerHTML:m,remove:g,DocumentFragment:d}=n(14),{warn:y,WARN_DECLARATIVE_SHADOWS:w}=n(312),E=d.prototype.querySelectorAll;function O(e,t){let n="top."+(e?"SNOW_FRAME":"SNOW_WINDOW")+"(this);";return t&&(n="