From cca85b6d7e2faf3c94a77febb191752c6c69e9c8 Mon Sep 17 00:00:00 2001 From: Chloe Gao Date: Wed, 13 Dec 2023 11:55:11 +0100 Subject: [PATCH 01/16] v11.8.0 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33bffe1e99e4..00bc51059379 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [11.8.0] + ## [11.7.0] ### Added - Added auto-suggestion for ticker symbols in the network form ([#21843](https://github.com/MetaMask/metamask-extension/pull/21843)) @@ -4246,7 +4248,8 @@ Update styles and spacing on the critical error page ([#20350](https://github.c ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.0...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.8.0...HEAD +[11.8.0]: https://github.com/MetaMask/metamask-extension/compare/v11.7.0...v11.8.0 [11.7.0]: https://github.com/MetaMask/metamask-extension/compare/v11.6.3...v11.7.0 [11.6.3]: https://github.com/MetaMask/metamask-extension/compare/v11.6.2...v11.6.3 [11.6.2]: https://github.com/MetaMask/metamask-extension/compare/v11.6.1...v11.6.2 diff --git a/package.json b/package.json index 368e861b18de..18b1dd9c3dc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "11.7.0", + "version": "11.8.0", "private": true, "repository": { "type": "git", From 5a8f81f38267a3437d72af084f1b001989b92c1d Mon Sep 17 00:00:00 2001 From: chloeYue <105063779+chloeYue@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:37:13 +0100 Subject: [PATCH 02/16] Revert commit 19960 on RC 11.8.0 (#22417) ## **Description** Revert commit [19960](https://github.com/MetaMask/metamask-extension/pull/19960) on RC v11.8.0 ## **Related issues** Fixes: https://github.com/MetaMask/extension-delivery/issues/112 --- app/_locales/de/messages.json | 23 ++ app/_locales/el/messages.json | 23 ++ app/_locales/en/messages.json | 36 +- app/_locales/es/messages.json | 23 ++ app/_locales/es_419/messages.json | 23 ++ app/_locales/fr/messages.json | 23 ++ app/_locales/hi/messages.json | 23 ++ app/_locales/id/messages.json | 23 ++ app/_locales/ja/messages.json | 23 ++ app/_locales/ko/messages.json | 23 ++ app/_locales/pt/messages.json | 23 ++ app/_locales/pt_BR/messages.json | 23 ++ app/_locales/ru/messages.json | 23 ++ app/_locales/tl/messages.json | 23 ++ app/_locales/tr/messages.json | 23 ++ app/_locales/vi/messages.json | 23 ++ app/_locales/zh_CN/messages.json | 23 ++ test/e2e/tests/account-token-list.spec.js | 1 + test/e2e/tests/edit-gas-fee.spec.js | 39 ++- test/e2e/tests/send-edit.spec.js | 20 +- test/e2e/tests/send-eth.spec.js | 30 +- ui/components/app/app-components.scss | 1 + .../approve-content-card.js | 143 ++++++-- .../cancel-speedup-popover.js | 4 + .../confirm-gas-display.test.js.snap | 79 +++-- .../confirm-gas-display.test.js | 3 +- .../confirm-detail-row/index.scss | 1 - .../confirm-page-container-content/index.scss | 1 + .../app/currency-input/currency-input.test.js | 1 - .../edit-gas-fee-icon/edit-gas-fee-icon.js | 43 --- .../edit-gas-fee-icon.stories.js | 18 - .../edit-gas-fee-icon.test.js | 50 --- ui/components/app/edit-gas-fee-icon/index.js | 1 - .../fee-details-component.js | 186 ----------- .../fee-details-component.stories.js | 18 - .../app/fee-details-component/index.js | 1 - .../gas-details-item-title.js | 49 +++ .../gas-details-item-title.stories.js | 10 + .../gas-details-item-title.test.js | 54 +++ .../gas-details-item-title/index.js | 1 + .../gas-details-item-title/index.scss | 9 + .../app/gas-details-item/gas-details-item.js | 60 +--- .../gas-details-item/gas-details-item.test.js | 7 +- .../app/gas-timing/gas-timing.component.js | 130 +++----- .../gas-timing/gas-timing.component.test.js | 47 ++- ui/components/app/gas-timing/index.scss | 14 + ...transaction-gas-fee.component.test.js.snap | 8 +- .../transaction-alerts.scss | 1 - .../app/transaction-detail-item/index.scss | 6 + .../app/transaction-detail/index.scss | 4 - .../app/wallet-overview/eth-overview.test.js | 2 +- .../multichain/pages/send/send.test.js | 1 + ui/hooks/useCurrencyDisplay.js | 11 +- ui/hooks/useCurrencyDisplay.test.js | 25 -- ...irm-approve-content.component.test.js.snap | 72 ++-- .../confirm-approve-content.component.js | 48 ++- .../confirm-approve-content.component.test.js | 24 +- ui/pages/confirm-approve/confirm-approve.js | 1 + .../confirm-send-ether.test.js.snap | 309 ++++++++++-------- .../confirm-transaction-base.test.js.snap | 137 ++++---- .../confirm-transaction-base.component.js | 83 +++-- .../confirm-transaction-base.container.js | 4 +- .../confirm-transaction-base.test.js | 2 - ui/pages/send/gas-display/index.scss | 3 + .../send-content.component.test.js.snap | 66 ++-- .../token-allowance.test.js.snap | 7 - ui/pages/token-allowance/token-allowance.js | 19 +- 67 files changed, 1271 insertions(+), 987 deletions(-) delete mode 100644 ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.js delete mode 100644 ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.stories.js delete mode 100644 ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.test.js delete mode 100644 ui/components/app/edit-gas-fee-icon/index.js delete mode 100644 ui/components/app/fee-details-component/fee-details-component.js delete mode 100644 ui/components/app/fee-details-component/fee-details-component.stories.js delete mode 100644 ui/components/app/fee-details-component/index.js create mode 100644 ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.js create mode 100644 ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.stories.js create mode 100644 ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.test.js create mode 100644 ui/components/app/gas-details-item/gas-details-item-title/index.js create mode 100644 ui/components/app/gas-details-item/gas-details-item-title/index.scss diff --git a/app/_locales/de/messages.json b/app/_locales/de/messages.json index 9bedb61adf73..7169e6c6cde7 100644 --- a/app/_locales/de/messages.json +++ b/app/_locales/de/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 Stunde", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 Minuten", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "Min. $1", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Vielleicht in $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Wahrscheinlich in < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 Sekunden", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 Sek.", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Sehr wahrscheinlich in < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Verwendetes Gas" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Voraussichtliche Gas-Gebühr" }, + "transactionDetailGasInfoV2": { + "message": "geschätzt" + }, "transactionDetailGasTooltipConversion": { "message": "Erfahren Sie mehr über Gas-Gebühren." }, diff --git a/app/_locales/el/messages.json b/app/_locales/el/messages.json index 315e0901918a..af8253a6f278 100644 --- a/app/_locales/el/messages.json +++ b/app/_locales/el/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 ώρες", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 λεπτά", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 λεπτά", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Ίσως σε $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Πιθανό σε < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 δευτερόλεπτα", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 δευτ", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Πολύ πιθανό σε < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Τέλος συναλλαγής που χρησιμοποιήθηκε" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Εκτιμώμενο τέλος συναλλαγής" }, + "transactionDetailGasInfoV2": { + "message": "εκτιμώμενο" + }, "transactionDetailGasTooltipConversion": { "message": "Μάθετε περισσότερα για τα τέλη συναλλαγών" }, diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json index 93a22f1d2b84..52475ef666db 100644 --- a/app/_locales/en/messages.json +++ b/app/_locales/en/messages.json @@ -1628,9 +1628,6 @@ "message": "Error with $1", "description": "$1 represents the name of the snap" }, - "estimatedFee": { - "message": "Estimated fee" - }, "ethGasPriceFetchWarning": { "message": "Backup gas price is provided as the main gas estimation service is unavailable right now." }, @@ -1696,9 +1693,6 @@ "feeAssociatedRequest": { "message": "A fee is associated with this request." }, - "feeDetails": { - "message": "Fee details" - }, "fiat": { "message": "Fiat", "description": "Exchange type" @@ -1816,17 +1810,34 @@ "message": "$1 hrs", "description": "$1 represents a number of hours" }, - "gasTimingLow": { - "message": "Slow" + "gasTimingMinutes": { + "message": "$1 minutes", + "description": "$1 represents a number of minutes" }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Maybe in $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Likely in < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 seconds", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 sec", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Very likely in < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gas used" }, @@ -2415,9 +2426,6 @@ "metaMaskConnectStatusParagraphTwo": { "message": "The connection status button shows if the website you’re visiting is connected to your currently selected account." }, - "metamaskFees": { - "message": "MetaMask fees" - }, "metamaskInstitutionalVersion": { "message": "MetaMask Institutional Version" }, @@ -3279,9 +3287,6 @@ "operationFailed": { "message": "Operation Failed" }, - "optimismFees": { - "message": "Optimism fees" - }, "optional": { "message": "Optional" }, @@ -5399,6 +5404,9 @@ "transactionDetailGasHeading": { "message": "Estimated gas fee" }, + "transactionDetailGasInfoV2": { + "message": "estimated" + }, "transactionDetailGasTooltipConversion": { "message": "Learn more about gas fees" }, diff --git a/app/_locales/es/messages.json b/app/_locales/es/messages.json index b644189ad8a8..9fa7207b341f 100644 --- a/app/_locales/es/messages.json +++ b/app/_locales/es/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 horas", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minutos", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Quizás en $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Probablemente en < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 segundos", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 s", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Muy probable en < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gas usado" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Tarifa estimada de gas" }, + "transactionDetailGasInfoV2": { + "message": "estimada" + }, "transactionDetailGasTooltipConversion": { "message": "Obtenga más información sobre las tarifas de gas" }, diff --git a/app/_locales/es_419/messages.json b/app/_locales/es_419/messages.json index b4fa91acff51..7ebef84833c0 100644 --- a/app/_locales/es_419/messages.json +++ b/app/_locales/es_419/messages.json @@ -924,14 +924,34 @@ "message": "$1 horas", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minutos", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Quizás en $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Probablemente en < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 segundos", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 s", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Muy probable en < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gas usado" }, @@ -2453,6 +2473,9 @@ "transactionDetailGasHeading": { "message": "Tarifa estimada de gas" }, + "transactionDetailGasInfoV2": { + "message": "estimada" + }, "transactionDetailGasTooltipConversion": { "message": "Más información sobre las tarifas de gas" }, diff --git a/app/_locales/fr/messages.json b/app/_locales/fr/messages.json index d33d3232c10f..e6848bd6299c 100644 --- a/app/_locales/fr/messages.json +++ b/app/_locales/fr/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 h", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minutes", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Peut-être dans $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Probablement dans < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 secondes", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 s", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Très probablement dans < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gaz utilisé" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Frais de carburant estimés" }, + "transactionDetailGasInfoV2": { + "message": "estimé" + }, "transactionDetailGasTooltipConversion": { "message": "En savoir plus sur les frais de carburant" }, diff --git a/app/_locales/hi/messages.json b/app/_locales/hi/messages.json index 96fee5547c68..0af18b32d2e7 100644 --- a/app/_locales/hi/messages.json +++ b/app/_locales/hi/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 घंटे", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 मिनट", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1मिनट", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "शायद $1 में", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "संभवत < $1 में", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 सेकंड", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 सेकंड", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "<$1 में बहुत संभावना है", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "इस्तेमाल की गई गैस" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "अनुमानित गैस फ़ीस" }, + "transactionDetailGasInfoV2": { + "message": "अनुमानित" + }, "transactionDetailGasTooltipConversion": { "message": "गैस फ़ीस के बारे में और अधिक जानें" }, diff --git a/app/_locales/id/messages.json b/app/_locales/id/messages.json index b3b746e9ce85..549939c7945f 100644 --- a/app/_locales/id/messages.json +++ b/app/_locales/id/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 jam", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 menit", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 mnt", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Mungkin dalam $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Kemungkinan dalam < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 detik", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 dtk", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Sangat mungkin dalam < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gas yang digunakan" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Estimasi biaya gas" }, + "transactionDetailGasInfoV2": { + "message": "estimasi" + }, "transactionDetailGasTooltipConversion": { "message": "Pelajari selengkapnya seputar biaya gas" }, diff --git a/app/_locales/ja/messages.json b/app/_locales/ja/messages.json index 8a6c82fec7d2..77267930852b 100644 --- a/app/_locales/ja/messages.json +++ b/app/_locales/ja/messages.json @@ -1655,14 +1655,34 @@ "message": "$1時間", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1分", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1分", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "おそらく$1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "$1未満の可能性が高い", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1秒", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1秒", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "$1未満の可能性が非常に高い", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "ガス使用量" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "ガス代見積もり" }, + "transactionDetailGasInfoV2": { + "message": "見積もり" + }, "transactionDetailGasTooltipConversion": { "message": "ガス代に関する詳細" }, diff --git a/app/_locales/ko/messages.json b/app/_locales/ko/messages.json index dbfcc2d5525e..414853deaf91 100644 --- a/app/_locales/ko/messages.json +++ b/app/_locales/ko/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 시간", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 분", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 분", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "약 $1 후", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "아마도 < $1 후", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 초", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 초", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "거의 < $1 이내", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "가스 사용됨" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "예상 가스비" }, + "transactionDetailGasInfoV2": { + "message": "예상치" + }, "transactionDetailGasTooltipConversion": { "message": "가스 요금 자세히 알아보기" }, diff --git a/app/_locales/pt/messages.json b/app/_locales/pt/messages.json index 61fd12479b7b..8351fce5864e 100644 --- a/app/_locales/pt/messages.json +++ b/app/_locales/pt/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 h", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minutos", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Talvez em $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Provavelmente em < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 segundos", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 s", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Muito provavelmente em < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gás usado" }, @@ -4766,6 +4786,9 @@ "transactionDetailGasHeading": { "message": "Taxa de gás estimada" }, + "transactionDetailGasInfoV2": { + "message": "estimada" + }, "transactionDetailGasTooltipConversion": { "message": "Saiba mais sobre as taxas de gás" }, diff --git a/app/_locales/pt_BR/messages.json b/app/_locales/pt_BR/messages.json index 72b82514312b..706f3ec9a566 100644 --- a/app/_locales/pt_BR/messages.json +++ b/app/_locales/pt_BR/messages.json @@ -924,14 +924,34 @@ "message": "$1 h", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minutos", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Talvez em $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Provavelmente em < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 segundos", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 s", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Muito provavelmente em < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gás usado" }, @@ -2457,6 +2477,9 @@ "transactionDetailGasHeading": { "message": "Taxa de gás estimada" }, + "transactionDetailGasInfoV2": { + "message": "estimada" + }, "transactionDetailGasTooltipConversion": { "message": "Saiba mais sobre taxas de gás" }, diff --git a/app/_locales/ru/messages.json b/app/_locales/ru/messages.json index 9ab5c01d6e9c..5c8683d79522 100644 --- a/app/_locales/ru/messages.json +++ b/app/_locales/ru/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 ч", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 минут(-ы)", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 мин.", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Может быть, через $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Вероятно, через < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 секунд(-ы)", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 сек.", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Весьма вероятно, через < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Использовано газа" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Примерная плата за газ" }, + "transactionDetailGasInfoV2": { + "message": "примерная" + }, "transactionDetailGasTooltipConversion": { "message": "Подробнее о плате за газ" }, diff --git a/app/_locales/tl/messages.json b/app/_locales/tl/messages.json index 3d8278b54559..5353971728bc 100644 --- a/app/_locales/tl/messages.json +++ b/app/_locales/tl/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 oras", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 minuto", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 min", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Baka sa $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Posible sa < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 na segundo", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 seg", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Napakaposible sa < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Nagamit na Gas" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Tinantyang bayad sa gas" }, + "transactionDetailGasInfoV2": { + "message": "tinantya" + }, "transactionDetailGasTooltipConversion": { "message": "Alamin pa ang tungkol sa mga bayad sa gas" }, diff --git a/app/_locales/tr/messages.json b/app/_locales/tr/messages.json index af99ef8db89d..006b990f6ed4 100644 --- a/app/_locales/tr/messages.json +++ b/app/_locales/tr/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 sa.", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 dakika", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 dk", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Belki $1 içinde", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Muhtemelen < $1 içinde", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 saniye", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 sn", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Büyük olasılıkla > $1 içinde", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Kullanılan gaz" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Tahmini gaz ücreti" }, + "transactionDetailGasInfoV2": { + "message": "tahmini" + }, "transactionDetailGasTooltipConversion": { "message": "Gaz ücretleri hakkında daha fazla bilgi edinin" }, diff --git a/app/_locales/vi/messages.json b/app/_locales/vi/messages.json index 60f145781efd..951e157f032c 100644 --- a/app/_locales/vi/messages.json +++ b/app/_locales/vi/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 giờ", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 phút", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 phút", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "Có thể sau $1", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "Có khả năng sau < $1", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 giây", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 giây", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "Nhiều khả năng sau < $1", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "Gas đã dùng" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "Phí gas ước tính" }, + "transactionDetailGasInfoV2": { + "message": "ước tính" + }, "transactionDetailGasTooltipConversion": { "message": "Tìm hiểu thêm về phí gas" }, diff --git a/app/_locales/zh_CN/messages.json b/app/_locales/zh_CN/messages.json index 1495333ad6e9..e896dc884fef 100644 --- a/app/_locales/zh_CN/messages.json +++ b/app/_locales/zh_CN/messages.json @@ -1655,14 +1655,34 @@ "message": "$1 小时", "description": "$1 represents a number of hours" }, + "gasTimingMinutes": { + "message": "$1 分钟", + "description": "$1 represents a number of minutes" + }, "gasTimingMinutesShort": { "message": "$1 分钟", "description": "$1 represents a number of minutes" }, + "gasTimingNegative": { + "message": "可能在 $1 内", + "description": "$1 represents an amount of time" + }, + "gasTimingPositive": { + "message": "有可能在 $1 以内", + "description": "$1 represents an amount of time" + }, + "gasTimingSeconds": { + "message": "$1 秒", + "description": "$1 represents a number of seconds" + }, "gasTimingSecondsShort": { "message": "$1 秒", "description": "$1 represents a number of seconds" }, + "gasTimingVeryPositive": { + "message": "很可能在 $1 以内", + "description": "$1 represents an amount of time" + }, "gasUsed": { "message": "使用的燃料" }, @@ -4762,6 +4782,9 @@ "transactionDetailGasHeading": { "message": "估算的燃料费" }, + "transactionDetailGasInfoV2": { + "message": "估算" + }, "transactionDetailGasTooltipConversion": { "message": "了解更多关于燃料费的信息" }, diff --git a/test/e2e/tests/account-token-list.spec.js b/test/e2e/tests/account-token-list.spec.js index a45ae535843c..5f13b1bd28a4 100644 --- a/test/e2e/tests/account-token-list.spec.js +++ b/test/e2e/tests/account-token-list.spec.js @@ -22,6 +22,7 @@ describe('Settings', function () { await unlockWallet(driver); await driver.clickElement('[data-testid="home__asset-tab"]'); + const tokenValue = process.env.MULTICHAIN ? '0\nETH' : '0 ETH'; const tokenListAmount = await driver.findElement( process.env.MULTICHAIN diff --git a/test/e2e/tests/edit-gas-fee.spec.js b/test/e2e/tests/edit-gas-fee.spec.js index 7e853c9f19ed..8c7d38bbe225 100644 --- a/test/e2e/tests/edit-gas-fee.spec.js +++ b/test/e2e/tests/edit-gas-fee.spec.js @@ -38,7 +38,7 @@ describe('Editing Confirm Transaction', function () { assert.equal(await transactionAmount.getText(), '1'); // update estimates to high - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.waitForSelector({ text: 'sec', tag: 'span', @@ -46,29 +46,29 @@ describe('Editing Confirm Transaction', function () { await driver.clickElement( '[data-testid="edit-gas-fee-item-high"] > span:first-child', ); - + await driver.waitForSelector({ text: '🦍' }); await driver.waitForSelector({ text: 'Aggressive', }); // update estimates to medium - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.clickElement( '[data-testid="edit-gas-fee-item-medium"] > span:first-child', ); - + await driver.waitForSelector({ text: '🦊' }); await driver.waitForSelector({ text: 'Market', }); // update estimates to low - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.clickElement( '[data-testid="edit-gas-fee-item-low"] > span:first-child', ); - + await driver.waitForSelector({ text: '🐢' }); await driver.waitForSelector({ - text: 'Slow', + text: 'Low', }); await driver.waitForSelector('[data-testid="low-gas-fee-alert"]'); @@ -121,7 +121,7 @@ describe('Editing Confirm Transaction', function () { assert.equal(await transactionAmount.getText(), '1'); // update estimates to high - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.waitForSelector({ text: 'sec', tag: 'span', @@ -146,12 +146,12 @@ describe('Editing Confirm Transaction', function () { // has correct updated value on the confirm screen the transaction await driver.waitForSelector({ - css: '.currency-display-component__text', - text: '0.00085', + css: '.transaction-detail-item:nth-of-type(1) h6:nth-of-type(2)', + text: '0.00085 ETH', }); await driver.waitForSelector({ - css: '.currency-display-component__suffix', - text: 'ETH', + css: '.transaction-detail-item:nth-of-type(2) h6:nth-of-type(2)', + text: '1.00085 ETH', }); // confirms the transaction @@ -208,11 +208,12 @@ describe('Editing Confirm Transaction', function () { // check transaction in extension popup const windowHandles = await getWindowHandles(driver, 3); await driver.switchToWindow(windowHandles.popup); + await driver.waitForSelector({ text: '🌐' }); await driver.waitForSelector({ text: 'Site suggested', }); - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.waitForSelector({ text: 'sec', tag: 'span', @@ -228,10 +229,14 @@ describe('Editing Confirm Transaction', function () { assert.equal(await transactionAmount.getText(), '0'); // has correct updated value on the confirm screen the transaction - await driver.waitForSelector({ - css: '.currency-display-component__text', - text: '0.00021', - }); + const editedTransactionAmounts = await driver.findElements( + '.transaction-detail-item__row .transaction-detail-item__detail-values .currency-display-component__text:last-of-type', + ); + const editedTransactionAmount = editedTransactionAmounts[0]; + assert.equal(await editedTransactionAmount.getText(), '0.00021'); + + const editedTransactionFee = editedTransactionAmounts[1]; + assert.equal(await editedTransactionFee.getText(), '0.00021'); // confirms the transaction await driver.clickElement({ text: 'Confirm', tag: 'button' }); diff --git a/test/e2e/tests/send-edit.spec.js b/test/e2e/tests/send-edit.spec.js index 467252e10c7b..5599a3be1928 100644 --- a/test/e2e/tests/send-edit.spec.js +++ b/test/e2e/tests/send-edit.spec.js @@ -54,12 +54,12 @@ describe('Editing Confirm Transaction', function () { // has correct updated value on the confirm screen the transaction await driver.waitForSelector({ - css: '.currency-display-component__text', - text: '0.0008', + css: '.transaction-detail-item:nth-of-type(1) h6:nth-of-type(2)', + text: '0.0008 ETH', }); await driver.waitForSelector({ - css: '.currency-display-component__suffix', - text: 'ETH', + css: '.transaction-detail-item:nth-of-type(2) h6:nth-of-type(2)', + text: '2.2008 ETH', }); // confirms the transaction @@ -124,9 +124,7 @@ describe('Editing Confirm Transaction', function () { await driver.clickElement({ text: 'Next', tag: 'button' }); // open gas fee popover - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); - - await driver.clickElement('[data-testid="edit-gas-fee-item-custom"]'); + await driver.clickElement({ text: 'Edit', tag: 'button' }); // enter max fee await driver.fill('[data-testid="base-fee-input"]', '8'); @@ -146,12 +144,12 @@ describe('Editing Confirm Transaction', function () { // has correct updated value on the confirm screen the transaction await driver.waitForSelector({ - css: '.currency-display-component__text', - text: '0.0008', + css: '.transaction-detail-item:nth-of-type(1) h6:nth-of-type(2)', + text: '0.0008 ETH', }); await driver.waitForSelector({ - css: '.currency-display-component__suffix', - text: 'ETH', + css: '.transaction-detail-item:nth-of-type(2) h6:nth-of-type(2)', + text: '2.2008 ETH', }); // confirms the transaction diff --git a/test/e2e/tests/send-eth.spec.js b/test/e2e/tests/send-eth.spec.js index 9867b5b1beed..79c70916dfe0 100644 --- a/test/e2e/tests/send-eth.spec.js +++ b/test/e2e/tests/send-eth.spec.js @@ -329,8 +329,7 @@ describe('Send ETH from dapp using advanced gas controls', function () { windowHandles, ); await driver.assertElementNotPresent({ text: 'Data', tag: 'li' }); - - await driver.clickElement('[data-testid="edit-gas-fee-icon"]'); + await driver.clickElement('[data-testid="edit-gas-fee-button"]'); await driver.clickElement('[data-testid="edit-gas-fee-item-custom"]'); const baseFeeInput = await driver.findElement( @@ -343,15 +342,13 @@ describe('Send ETH from dapp using advanced gas controls', function () { await priorityFeeInput.fill('1'); await driver.clickElement({ text: 'Save', tag: 'button' }); - await driver.waitForSelector({ - css: '.currency-display-component__text', - text: '0.05684869', + css: '.transaction-detail-item:nth-of-type(1) h6:nth-of-type(2)', + text: '0.04503836 ETH', }); - await driver.waitForSelector({ - css: '.currency-display-component__suffix', - text: 'ETH', + css: '.transaction-detail-item:nth-of-type(2) h6:nth-of-type(2)', + text: '0.04503836 ETH', }); await driver.clickElement({ text: 'Confirm', tag: 'button' }); @@ -380,22 +377,7 @@ describe('Send ETH from dapp using advanced gas controls', function () { ); await driver.waitForSelector({ - xpath: "//div[contains(text(), 'Base fee')]", - }); - - const allFeeValues = await driver.findElements( - '.currency-display-component__text', - ); - - /** - * Below lines check that fee values are numeric. - * Because these values change for every e2e run, - * It's better to just check that the values are there and are numeric - */ - assert.equal(allFeeValues.length > 0, true); - - allFeeValues.forEach(async (feeValue) => { - assert.equal(/\d+\.?\d*/u.test(await feeValue.getText()), true); + text: '0.000000025', }); }, ); diff --git a/ui/components/app/app-components.scss b/ui/components/app/app-components.scss index 99c052ca8166..d415fdb0e56b 100644 --- a/ui/components/app/app-components.scss +++ b/ui/components/app/app-components.scss @@ -40,6 +40,7 @@ @import 'snaps/show-more/index'; @import 'snaps/tx-insight-warnings/index'; @import 'gas-details-item/index'; +@import 'gas-details-item/gas-details-item-title/index'; @import 'gas-timing/index'; @import 'hold-to-reveal-button/index'; @import 'home-notification/index'; diff --git a/ui/components/app/approve-content-card/approve-content-card.js b/ui/components/app/approve-content-card/approve-content-card.js index a476f8dc38f8..69998930d925 100644 --- a/ui/components/app/approve-content-card/approve-content-card.js +++ b/ui/components/app/approve-content-card/approve-content-card.js @@ -1,9 +1,11 @@ import React, { useContext } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; +import { useSelector } from 'react-redux'; import Box from '../../ui/box/box'; import Button from '../../ui/button'; +import EditGasFeeButton from '../edit-gas-fee-button/edit-gas-fee-button'; import { Text } from '../../component-library'; import { AlignItems, @@ -16,9 +18,14 @@ import { TextColor, TextVariant, } from '../../../helpers/constants/design-system'; +import { PRIMARY, SECONDARY } from '../../../helpers/constants/common'; import { I18nContext } from '../../../contexts/i18n'; +import { getPreferences } from '../../../selectors'; import { ConfirmGasDisplay } from '../confirm-gas-display'; +import MultiLayerFeeMessage from '../multilayer-fee-message/multi-layer-fee-message'; import { formatCurrency } from '../../../helpers/utils/confirm-tx.util'; +import TransactionDetailItem from '../transaction-detail-item/transaction-detail-item.component'; +import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display'; export default function ApproveContentCard({ showHeader = true, @@ -32,8 +39,12 @@ export default function ApproveContentCard({ supportsEIP1559, renderTransactionDetailsContent, renderDataContent, + isMultiLayerFeeNetwork, ethTransactionTotal, nativeCurrency, + fullTxData, + hexMinimumTransactionFee, + hexTransactionTotal, fiatTransactionTotal, currentCurrency, isSetApproveForAll, @@ -44,6 +55,7 @@ export default function ApproveContentCard({ useCurrencyRateCheck, }) { const t = useContext(I18nContext); + const { useNativeCurrencyAsPrimaryCurrency } = useSelector(getPreferences); return ( )} + {showEdit && + showAdvanceGasFeeOptions && + supportsEIP1559 && + !renderSimulationFailureWarning && ( + + )} )} {renderTransactionDetailsContent && - (supportsEIP1559 && !renderSimulationFailureWarning ? ( + (!isMultiLayerFeeNetwork && + supportsEIP1559 && + !renderSimulationFailureWarning ? ( @@ -106,44 +128,85 @@ export default function ApproveContentCard({ flexDirection={FlexDirection.Row} justifyContent={JustifyContent.spaceBetween} > - - - {t('feeAssociatedRequest')} - - - - {useCurrencyRateCheck && ( + + } + detailText={ + + } + noBold + flexWidthValues + /> + + + ) : ( + <> - {formatCurrency(fiatTransactionTotal, currentCurrency)} + {t('feeAssociatedRequest')} - )} - - - {`${ethTransactionTotal} ${nativeCurrency}`} - - - + {useCurrencyRateCheck && ( + + + {formatCurrency( + fiatTransactionTotal, + currentCurrency, + )} + + + )} + + + {`${ethTransactionTotal} ${nativeCurrency}`} + + + + + )} ))} {renderDataContent && ( @@ -235,6 +298,10 @@ ApproveContentCard.propTypes = { * Whether to render data content or not */ renderDataContent: PropTypes.bool, + /** + * Is multi-layer fee network or not + */ + isMultiLayerFeeNetwork: PropTypes.bool, /** * Total sum of the transaction in native currency */ @@ -243,6 +310,18 @@ ApproveContentCard.propTypes = { * Current native currency */ nativeCurrency: PropTypes.string, + /** + * Current transaction + */ + fullTxData: PropTypes.object, + /** + * Total sum of the transaction converted to hex value + */ + hexTransactionTotal: PropTypes.string, + /** + * Minimum transaction fee converted to hex value + */ + hexMinimumTransactionFee: PropTypes.string, /** * Total sum of the transaction in fiat currency */ diff --git a/ui/components/app/cancel-speedup-popover/cancel-speedup-popover.js b/ui/components/app/cancel-speedup-popover/cancel-speedup-popover.js index e113d2e6f69d..f244f3f63701 100644 --- a/ui/components/app/cancel-speedup-popover/cancel-speedup-popover.js +++ b/ui/components/app/cancel-speedup-popover/cancel-speedup-popover.js @@ -12,6 +12,7 @@ import { gasEstimateGreaterThanGasUsedPlusTenPercent } from '../../../helpers/ut import { useGasFeeContext } from '../../../contexts/gasFee'; import { useI18nContext } from '../../../hooks/useI18nContext'; import { useTransactionModalContext } from '../../../contexts/transaction-modal'; +import EditGasFeeButton from '../edit-gas-fee-button'; import GasDetailsItem from '../gas-details-item'; import Box from '../../ui/box'; import InfoTooltip from '../../ui/info-tooltip'; @@ -145,6 +146,9 @@ const CancelSpeedupPopover = () => { flexDirection={FlexDirection.Column} marginTop={2} > +
+ {!appIsLoading && } +
diff --git a/ui/components/app/confirm-gas-display/__snapshots__/confirm-gas-display.test.js.snap b/ui/components/app/confirm-gas-display/__snapshots__/confirm-gas-display.test.js.snap index a798793d2c62..32e18b8abb32 100644 --- a/ui/components/app/confirm-gas-display/__snapshots__/confirm-gas-display.test.js.snap +++ b/ui/components/app/confirm-gas-display/__snapshots__/confirm-gas-display.test.js.snap @@ -12,11 +12,47 @@ exports[`ConfirmGasDisplay should match snapshot 1`] = `
-

- Estimated fee -

+
+ Gas +
+ + ( + estimated + ) + +
+
+
+ + + +
+
+
+
-
-
-

- Advanced -

-

- - ~ - 1 sec - -

-
+ Maybe in 1 seconds +
{ userFeeLevel: 'medium', }, }); - expect(screen.queryByText('Estimated fee')).toBeInTheDocument(); + expect(screen.queryByText('Gas')).toBeInTheDocument(); + expect(screen.queryByText('(estimated)')).toBeInTheDocument(); expect(screen.queryByText('Max fee:')).toBeInTheDocument(); expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); }); diff --git a/ui/components/app/confirm-page-container/confirm-detail-row/index.scss b/ui/components/app/confirm-page-container/confirm-detail-row/index.scss index 513217ec0bc0..cfb382f83f8f 100644 --- a/ui/components/app/confirm-page-container/confirm-detail-row/index.scss +++ b/ui/components/app/confirm-page-container/confirm-detail-row/index.scss @@ -1,6 +1,5 @@ .confirm-detail-row { padding: 14px 0; - margin: 15px; display: flex; flex-direction: row; justify-content: space-between; diff --git a/ui/components/app/confirm-page-container/confirm-page-container-content/index.scss b/ui/components/app/confirm-page-container/confirm-page-container-content/index.scss index 8fae5f42a8f9..f8e6fb512785 100644 --- a/ui/components/app/confirm-page-container/confirm-page-container-content/index.scss +++ b/ui/components/app/confirm-page-container/confirm-page-container-content/index.scss @@ -14,6 +14,7 @@ &__details { box-sizing: border-box; + padding: 0 24px; } &__gas-fee { diff --git a/ui/components/app/currency-input/currency-input.test.js b/ui/components/app/currency-input/currency-input.test.js index c3cbf4d908bf..f34c7ba88a59 100644 --- a/ui/components/app/currency-input/currency-input.test.js +++ b/ui/components/app/currency-input/currency-input.test.js @@ -149,7 +149,6 @@ describe('CurrencyInput Component', () => { const props = { onChange: jest.fn(), onPreferenceToggle: jest.fn(), - hexValue: 'f602f2234d0ea', featureSecondary: true, }; diff --git a/ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.js b/ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.js deleted file mode 100644 index 5a2cd7c11024..000000000000 --- a/ui/components/app/edit-gas-fee-icon/edit-gas-fee-icon.js +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { useGasFeeContext } from '../../../contexts/gasFee'; -import { useTransactionEventFragment } from '../../../hooks/useTransactionEventFragment'; -import { useTransactionModalContext } from '../../../contexts/transaction-modal'; -import { BUTTON_VARIANT, Button, IconName } from '../../component-library'; -import { IconColor, Size } from '../../../helpers/constants/design-system'; - -export default function EditGasFeeIcon({ userAcknowledgedGasMissing = false }) { - const { hasSimulationError, estimateUsed, supportsEIP1559 } = - useGasFeeContext(); - const { updateTransactionEventFragment } = useTransactionEventFragment(); - const { openModal } = useTransactionModalContext(); - const editEnabled = !hasSimulationError || userAcknowledgedGasMissing; - - if (!supportsEIP1559 || !estimateUsed || !editEnabled) { - return null; - } - - const openEditGasFeeModal = () => { - updateTransactionEventFragment({ - gas_edit_attempted: 'basic', - }); - openModal('editGasFee'); - }; - - return ( - - - )} - - - {supportsEIP1559 && shouldShow && expandFeeDetails && ( - - - {isMultiLayerFeeNetwork && ( - - )} - {isMultiLayerFeeNetwork && estimatedL1Fees && ( - - )} - - - )} - - ); -} - -FeeDetailsComponent.propTypes = { - txData: PropTypes.object, - supportsEIP1559: PropTypes.bool, - useCurrencyRateCheck: PropTypes.bool, - shouldShow: PropTypes.bool, -}; diff --git a/ui/components/app/fee-details-component/fee-details-component.stories.js b/ui/components/app/fee-details-component/fee-details-component.stories.js deleted file mode 100644 index 8800e0f7f408..000000000000 --- a/ui/components/app/fee-details-component/fee-details-component.stories.js +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import FeeDetailsComponent from '.'; - -export default { - title: 'Components/App/FeeDetailsComponent', - argTypes: { - shouldShow: { - control: 'boolean', - }, - }, - args: { - shouldShow: true, - }, -}; - -export const DefaultStory = (args) => ; - -DefaultStory.storyName = 'Default'; diff --git a/ui/components/app/fee-details-component/index.js b/ui/components/app/fee-details-component/index.js deleted file mode 100644 index f66dee9786fe..000000000000 --- a/ui/components/app/fee-details-component/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './fee-details-component'; diff --git a/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.js b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.js new file mode 100644 index 000000000000..9e7c267dd483 --- /dev/null +++ b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.js @@ -0,0 +1,49 @@ +import React from 'react'; +import { useSelector } from 'react-redux'; + +import { TextVariant } from '../../../../helpers/constants/design-system'; +import { useI18nContext } from '../../../../hooks/useI18nContext'; +import { getIsMainnet } from '../../../../selectors'; +import Box from '../../../ui/box'; +import InfoTooltip from '../../../ui/info-tooltip/info-tooltip'; +import { Text } from '../../../component-library'; + +const GasDetailsItemTitle = () => { + const t = useI18nContext(); + const isMainnet = useSelector(getIsMainnet); + + return ( + + {t('gas')} + + ({t('transactionDetailGasInfoV2')}) + + + + {t('transactionDetailGasTooltipIntro', [ + isMainnet ? t('networkNameEthereum') : '', + ])} + + + {t('transactionDetailGasTooltipExplanation')} + + + + {t('transactionDetailGasTooltipConversion')} + + + + } + position="bottom" + /> + + ); +}; + +export default GasDetailsItemTitle; diff --git a/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.stories.js b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.stories.js new file mode 100644 index 000000000000..33978b4074ac --- /dev/null +++ b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.stories.js @@ -0,0 +1,10 @@ +import React from 'react'; +import GasDetailsItemTitle from '.'; + +export default { + title: 'Components/App/GasDetailsItemTitle', +}; + +export const DefaultStory = () => ; + +DefaultStory.storyName = 'Default'; diff --git a/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.test.js b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.test.js new file mode 100644 index 000000000000..b57c7e32e7c8 --- /dev/null +++ b/ui/components/app/gas-details-item/gas-details-item-title/gas-details-item-title.test.js @@ -0,0 +1,54 @@ +import React from 'react'; +import { screen, waitFor } from '@testing-library/react'; + +import { CHAIN_IDS } from '../../../../../shared/constants/network'; +import { GasFeeContextProvider } from '../../../../contexts/gasFee'; +import { renderWithProvider } from '../../../../../test/jest'; +import configureStore from '../../../../store/store'; + +import GasDetailsItemTitle from './gas-details-item-title'; + +jest.mock('../../../../store/actions', () => ({ + disconnectGasFeeEstimatePoller: jest.fn(), + getGasFeeEstimatesAndStartPolling: jest + .fn() + .mockImplementation(() => Promise.resolve()), + addPollingTokenToAppState: jest.fn(), + getGasFeeTimeEstimate: jest.fn().mockImplementation(() => Promise.resolve()), +})); + +const render = () => { + const store = configureStore({ + metamask: { + providerConfig: { chainId: CHAIN_IDS.MAINNET }, + cachedBalances: {}, + accounts: { + '0xAddress': { + address: '0xAddress', + balance: '0x176e5b6f173ebe66', + }, + }, + identities: { + '0xAddress': {}, + }, + selectedAddress: '0xAddress', + }, + }); + + return renderWithProvider( + + + , + store, + ); +}; + +describe('GasDetailsItem', () => { + it('should render label', async () => { + render(); + await waitFor(() => { + expect(screen.queryByText('Gas')).toBeInTheDocument(); + expect(screen.queryByText('(estimated)')).toBeInTheDocument(); + }); + }); +}); diff --git a/ui/components/app/gas-details-item/gas-details-item-title/index.js b/ui/components/app/gas-details-item/gas-details-item-title/index.js new file mode 100644 index 000000000000..f2f26ac79dec --- /dev/null +++ b/ui/components/app/gas-details-item/gas-details-item-title/index.js @@ -0,0 +1 @@ +export { default } from './gas-details-item-title'; diff --git a/ui/components/app/gas-details-item/gas-details-item-title/index.scss b/ui/components/app/gas-details-item/gas-details-item-title/index.scss new file mode 100644 index 000000000000..8c8e4a7ad971 --- /dev/null +++ b/ui/components/app/gas-details-item/gas-details-item-title/index.scss @@ -0,0 +1,9 @@ +.gas-details-item-title { + &__estimate { + font-weight: 400; + font-style: italic; + font-size: 12px; + color: var(--color-text-muted); + line-height: inherit; + } +} diff --git a/ui/components/app/gas-details-item/gas-details-item.js b/ui/components/app/gas-details-item/gas-details-item.js index 34e4832b8e3f..7d5afd287fd8 100644 --- a/ui/components/app/gas-details-item/gas-details-item.js +++ b/ui/components/app/gas-details-item/gas-details-item.js @@ -1,61 +1,37 @@ -import React, { useEffect, useMemo, useState } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; - import { useSelector } from 'react-redux'; -import { Text } from '../../component-library'; + import { TextColor } from '../../../helpers/constants/design-system'; import { PRIMARY, SECONDARY } from '../../../helpers/constants/common'; -import { PriorityLevels } from '../../../../shared/constants/gas'; import { - getIsMultiLayerFeeNetwork, getPreferences, - getTxData, getUseCurrencyRateCheck, transactionFeeSelector, } from '../../../selectors'; import { getCurrentDraftTransaction } from '../../../ducks/send'; -import { - hexWEIToDecGWEI, - sumHexes, -} from '../../../../shared/modules/conversion.utils'; -import { useDraftTransactionWithTxParams } from '../../../hooks/useDraftTransactionWithTxParams'; import { useGasFeeContext } from '../../../contexts/gasFee'; import { useI18nContext } from '../../../hooks/useI18nContext'; import Box from '../../ui/box'; import LoadingHeartBeat from '../../ui/loading-heartbeat'; -import EditGasFeeIcon from '../edit-gas-fee-icon/edit-gas-fee-icon'; import GasTiming from '../gas-timing/gas-timing.component'; -import fetchEstimatedL1Fee from '../../../helpers/utils/optimism/fetchEstimatedL1Fee'; import TransactionDetailItem from '../transaction-detail-item/transaction-detail-item.component'; import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display'; +import { hexWEIToDecGWEI } from '../../../../shared/modules/conversion.utils'; +import { useDraftTransactionWithTxParams } from '../../../hooks/useDraftTransactionWithTxParams'; +import { PriorityLevels } from '../../../../shared/constants/gas'; +import GasDetailsItemTitle from './gas-details-item-title'; const GasDetailsItem = ({ 'data-testid': dataTestId, userAcknowledgedGasMissing = false, }) => { const t = useI18nContext(); - - const isMultiLayerFeeNetwork = useSelector(getIsMultiLayerFeeNetwork); - const txData = useSelector(getTxData); - - const [estimatedL1Fees, setEstimatedL1Fees] = useState(null); - - useEffect(() => { - if (isMultiLayerFeeNetwork) { - fetchEstimatedL1Fee(txData?.chainId, txData) - .then((result) => { - setEstimatedL1Fees(result); - }) - .catch((_err) => { - setEstimatedL1Fees(null); - }); - } - }, [isMultiLayerFeeNetwork, txData]); - const draftTransaction = useSelector(getCurrentDraftTransaction); const transactionData = useDraftTransactionWithTxParams(); + const { hexMinimumTransactionFee: draftHexMinimumTransactionFee, hexMaximumTransactionFee: draftHexMaximumTransactionFee, @@ -65,6 +41,7 @@ const GasDetailsItem = ({ estimateUsed, hasSimulationError, maximumCostInHexWei: hexMaximumTransactionFee, + minimumCostInHexWei: hexMinimumTransactionFee, maxPriorityFeePerGas, maxFeePerGas, } = useGasFeeContext(); @@ -73,14 +50,6 @@ const GasDetailsItem = ({ const useCurrencyRateCheck = useSelector(getUseCurrencyRateCheck); - const getTransactionFeeTotal = useMemo(() => { - if (isMultiLayerFeeNetwork) { - return sumHexes(hexMaximumTransactionFee, estimatedL1Fees || 0); - } - - return hexMaximumTransactionFee; - }, [isMultiLayerFeeNetwork, hexMaximumTransactionFee, estimatedL1Fees]); - if (hasSimulationError && !userAcknowledgedGasMissing) { return null; } @@ -99,19 +68,16 @@ const GasDetailsItem = ({ {t('estimatedFee')}} + detailTitle={} detailTitleColor={TextColor.textDefault} detailText={ useCurrencyRateCheck && Object.keys(draftTransaction).length === 0 && (
-
@@ -122,7 +88,7 @@ const GasDetailsItem = ({
@@ -155,7 +121,9 @@ const GasDetailsItem = ({
diff --git a/ui/components/app/gas-details-item/gas-details-item.test.js b/ui/components/app/gas-details-item/gas-details-item.test.js index 81a1d665f599..87511133a1f9 100644 --- a/ui/components/app/gas-details-item/gas-details-item.test.js +++ b/ui/components/app/gas-details-item/gas-details-item.test.js @@ -59,7 +59,8 @@ describe('GasDetailsItem', () => { it('should render label', async () => { render(); await waitFor(() => { - expect(screen.queryAllByText('Market')[0]).toBeInTheDocument(); + expect(screen.queryByText('Gas')).toBeInTheDocument(); + expect(screen.queryByText('(estimated)')).toBeInTheDocument(); expect(screen.queryByText('Max fee:')).toBeInTheDocument(); expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); }); @@ -125,9 +126,7 @@ describe('GasDetailsItem', () => { it('should not return null even if there is simulationError if user acknowledged gasMissing warning', async () => { render(); await waitFor(() => { - expect(screen.queryAllByText('Market')[0]).toBeInTheDocument(); - expect(screen.queryByText('Max fee:')).toBeInTheDocument(); - expect(screen.queryAllByText('ETH').length).toBeGreaterThan(0); + expect(screen.queryByText('Gas')).toBeInTheDocument(); }); }); diff --git a/ui/components/app/gas-timing/gas-timing.component.js b/ui/components/app/gas-timing/gas-timing.component.js index c75c4a8ec226..29ddc4ad8475 100644 --- a/ui/components/app/gas-timing/gas-timing.component.js +++ b/ui/components/app/gas-timing/gas-timing.component.js @@ -1,30 +1,29 @@ import React, { useContext, useEffect, useState } from 'react'; -import BigNumber from 'bignumber.js'; +import { useSelector } from 'react-redux'; import PropTypes from 'prop-types'; import classNames from 'classnames'; -import { useSelector } from 'react-redux'; -import { Box, Text } from '../../component-library'; -import { - Display, - FONT_WEIGHT, - TextColor, - TextVariant, - TypographyVariant, -} from '../../../helpers/constants/design-system'; +import BigNumber from 'bignumber.js'; + +import { GasEstimateTypes } from '../../../../shared/constants/gas'; + +import { usePrevious } from '../../../hooks/usePrevious'; +import { I18nContext } from '../../../contexts/i18n'; +import { useGasFeeContext } from '../../../contexts/gasFee'; + import { getGasEstimateType, getGasFeeEstimates, getIsGasEstimatesLoading, } from '../../../ducks/metamask/metamask'; -import { GAS_FORM_ERRORS } from '../../../helpers/constants/gas'; -import { GasEstimateTypes } from '../../../../shared/constants/gas'; -import { I18nContext } from '../../../contexts/i18n'; import Typography from '../../ui/typography/typography'; +import { + TypographyVariant, + FONT_WEIGHT, +} from '../../../helpers/constants/design-system'; + import { getGasFeeTimeEstimate } from '../../../store/actions'; -import { useGasFeeContext } from '../../../contexts/gasFee'; -import { usePrevious } from '../../../hooks/usePrevious'; -import { useDraftTransactionWithTxParams } from '../../../hooks/useDraftTransactionWithTxParams'; +import { GAS_FORM_ERRORS } from '../../../helpers/constants/gas'; // Once we reach this second threshold, we switch to minutes as a unit const SECOND_CUTOFF = 90; @@ -33,9 +32,9 @@ const SECOND_CUTOFF = 90; const toHumanReadableTime = (milliseconds = 1, t) => { const seconds = Math.ceil(milliseconds / 1000); if (seconds <= SECOND_CUTOFF) { - return t('gasTimingSecondsShort', [seconds]); + return t('gasTimingSeconds', [seconds]); } - return t('gasTimingMinutesShort', [Math.ceil(seconds / 60)]); + return t('gasTimingMinutes', [Math.ceil(seconds / 60)]); }; export default function GasTiming({ maxFeePerGas = 0, @@ -50,8 +49,6 @@ export default function GasTiming({ const t = useContext(I18nContext); const { estimateUsed } = useGasFeeContext(); - const transactionData = useDraftTransactionWithTxParams(); - // If the user has chosen a value lower than the low gas fee estimate, // We'll need to use the useEffect hook below to make a call to calculate // the time to show @@ -118,16 +115,9 @@ export default function GasTiming({ const { low = {}, medium = {}, high = {} } = gasFeeEstimates; - const estimateToUse = - estimateUsed || transactionData.userFeeLevel || 'medium'; - let text = t(estimateToUse); - let time = ''; + let text = ''; let attitude = 'positive'; - if (estimateToUse === 'low') { - text = t('gasTimingLow'); - } - // Anything medium or faster is positive if ( Number(maxPriorityFeePerGas) >= Number(medium.suggestedMaxPriorityFeePerGas) @@ -137,64 +127,52 @@ export default function GasTiming({ Number(maxPriorityFeePerGas) < Number(high.suggestedMaxPriorityFeePerGas) ) { // Medium - time = toHumanReadableTime(low.maxWaitTimeEstimate, t); + text = t('gasTimingPositive', [ + toHumanReadableTime(low.maxWaitTimeEstimate, t), + ]); } else { // High - time = toHumanReadableTime(high.minWaitTimeEstimate, t); + text = t('gasTimingVeryPositive', [ + toHumanReadableTime(high.minWaitTimeEstimate, t), + ]); } - } else if (isUnknownLow) { - // If the user has chosen a value less than our low estimate, - // calculate a potential wait time - - if (estimateToUse === 'low') { + } else { + if (estimateUsed === 'low') { attitude = 'negative'; } - // If we didn't get any useful information, show the - // "unknown processing time" message - if ( - !customEstimatedTime || - customEstimatedTime === 'unknown' || - customEstimatedTime?.upperTimeBound === 'unknown' - ) { - text = t('editGasTooLow'); - attitude = 'negative'; + // If the user has chosen a value less than our low estimate, + // calculate a potential wait time + if (isUnknownLow) { + // If we didn't get any useful information, show the + // "unknown processing time" message + if ( + !customEstimatedTime || + customEstimatedTime === 'unknown' || + customEstimatedTime?.upperTimeBound === 'unknown' + ) { + text = t('editGasTooLow'); + attitude = 'negative'; + } else { + text = t('gasTimingNegative', [ + toHumanReadableTime(Number(customEstimatedTime?.upperTimeBound), t), + ]); + } } else { - time = toHumanReadableTime( - Number(customEstimatedTime?.upperTimeBound), - t, - ); + text = t('gasTimingNegative', [ + toHumanReadableTime(low.maxWaitTimeEstimate, t), + ]); } - } else { - time = toHumanReadableTime(low.maxWaitTimeEstimate, t); } - const getColorFromAttitude = () => { - switch (attitude) { - case 'positive': - return TextColor.successDefault; - case 'warning': - return TextColor.warningDefault; - case 'negative': - return TextColor.errorDefault; - default: - return TextColor.successDefault; - } - }; - return ( - - - {text} - - - - ~{time} - - + + {text} + ); } diff --git a/ui/components/app/gas-timing/gas-timing.component.test.js b/ui/components/app/gas-timing/gas-timing.component.test.js index aa179052b7de..ede65331afc5 100644 --- a/ui/components/app/gas-timing/gas-timing.component.test.js +++ b/ui/components/app/gas-timing/gas-timing.component.test.js @@ -16,7 +16,6 @@ describe('Gas timing', () => { it('renders nothing when gas is loading', () => { // Fails the networkAndAccountSupports1559 check const nullGasState = { - send: { draftTransactions: {} }, metamask: { gasFeeEstimates: null, gasEstimateType: GasEstimateTypes.feeMarket, @@ -29,18 +28,54 @@ describe('Gas timing', () => { expect(container).toMatchSnapshot(); }); - it('renders gas timing time when high estimate is chosen', async () => { + it('renders "very likely" when high estimate is chosen', async () => { const mockStore = configureMockStore()(mockState); const props = { - maxPriorityFeePerGas: '1000000', + maxPriorityFeePerGas: '10', }; - const screen = renderWithProvider(, mockStore); + const { queryByText } = renderWithProvider( + , + mockStore, + ); await waitFor(() => { - expect(screen.queryByText('Market')).toBeInTheDocument(); - expect(screen.getByTestId('gas-timing-time')).toBeInTheDocument(); + expect(queryByText(/Very likely in/u)).toBeInTheDocument(); + }); + }); + + it('renders "likely" when medium estimate is chosen', async () => { + const mockStore = configureMockStore()(mockState); + + const props = { + maxPriorityFeePerGas: '8', + }; + + const { queryByText } = renderWithProvider( + , + mockStore, + ); + + await waitFor(() => { + expect(queryByText(/Likely in/u)).toBeInTheDocument(); + }); + }); + + it('renders "maybe" when low estimate is chosen', async () => { + const mockStore = configureMockStore()(mockState); + + const props = { + maxPriorityFeePerGas: '3', + }; + + const { queryByText } = renderWithProvider( + , + mockStore, + ); + + await waitFor(() => { + expect(queryByText(/Maybe in/u)).toBeInTheDocument(); }); }); }); diff --git a/ui/components/app/gas-timing/index.scss b/ui/components/app/gas-timing/index.scss index a869df6716f6..4845fe3e257d 100644 --- a/ui/components/app/gas-timing/index.scss +++ b/ui/components/app/gas-timing/index.scss @@ -1,6 +1,20 @@ .typography.gas-timing { color: var(--color-text-alternative); + &--positive { + color: var(--color-success-default); + font-weight: bold; + } + + &--warning { + color: var(--color-warning-default); + } + + &--negative { + color: var(--color-warning-default); + font-weight: bold; + } + .info-tooltip { display: inline-block; margin-inline-start: 4px; diff --git a/ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/__snapshots__/cancel-transaction-gas-fee.component.test.js.snap b/ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/__snapshots__/cancel-transaction-gas-fee.component.test.js.snap index 179a3821cad4..83e638ca1291 100644 --- a/ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/__snapshots__/cancel-transaction-gas-fee.component.test.js.snap +++ b/ui/components/app/modals/cancel-transaction/cancel-transaction-gas-fee/__snapshots__/cancel-transaction-gas-fee.component.test.js.snap @@ -7,12 +7,12 @@ exports[`CancelTransactionGasFee Component should render 1`] = ` >
- <0.000001 + 0
- <0.000001 + 0 *:first-of-type { margin-top: 20px; diff --git a/ui/components/app/transaction-detail-item/index.scss b/ui/components/app/transaction-detail-item/index.scss index 260cb4e276dd..9de0c2d04756 100644 --- a/ui/components/app/transaction-detail-item/index.scss +++ b/ui/components/app/transaction-detail-item/index.scss @@ -1,5 +1,7 @@ .transaction-detail-item { color: var(--color-text-alternative); + padding: 20px 0; + border-bottom: 1px solid var(--color-border-default); &__row { display: flex; @@ -44,6 +46,10 @@ padding-top: 0; } + &:last-of-type { + margin-bottom: 20px; + } + &:first-child { padding-top: 0; } diff --git a/ui/components/app/transaction-detail/index.scss b/ui/components/app/transaction-detail/index.scss index cd331554b833..9c7813d95377 100644 --- a/ui/components/app/transaction-detail/index.scss +++ b/ui/components/app/transaction-detail/index.scss @@ -1,8 +1,4 @@ .transaction-detail { - margin: 15px; - padding: 0 12px; - border-radius: 8px; - border: 1px solid var(--color-border-default); position: relative; .transaction-detail-edit { diff --git a/ui/components/app/wallet-overview/eth-overview.test.js b/ui/components/app/wallet-overview/eth-overview.test.js index 765226bc1a8b..26067a23818f 100644 --- a/ui/components/app/wallet-overview/eth-overview.test.js +++ b/ui/components/app/wallet-overview/eth-overview.test.js @@ -124,7 +124,7 @@ describe('EthOverview', () => { const primaryBalance = queryByTestId(ETH_OVERVIEW_PRIMARY_CURRENCY); expect(primaryBalance).toBeInTheDocument(); - expect(primaryBalance).toHaveTextContent('<0.000001ETH'); + expect(primaryBalance).toHaveTextContent('0ETH'); expect(queryByText('*')).not.toBeInTheDocument(); }); diff --git a/ui/components/multichain/pages/send/send.test.js b/ui/components/multichain/pages/send/send.test.js index 3a89f149cb8a..366d8dd7eb43 100644 --- a/ui/components/multichain/pages/send/send.test.js +++ b/ui/components/multichain/pages/send/send.test.js @@ -37,6 +37,7 @@ describe('SendPage', () => { it('renders correctly', () => { const { container, getByTestId } = render(); expect(container).toMatchSnapshot(); + expect(getByTestId('send-page-network-picker')).toBeInTheDocument(); }); }); diff --git a/ui/hooks/useCurrencyDisplay.js b/ui/hooks/useCurrencyDisplay.js index ca34d3560977..2963f53eb60c 100644 --- a/ui/hooks/useCurrencyDisplay.js +++ b/ui/hooks/useCurrencyDisplay.js @@ -53,7 +53,6 @@ export function useCurrencyDisplay( const isUserPreferredCurrency = currency === currentCurrency; const value = useMemo(() => { - let ethDisplayValue; if (displayValue) { return displayValue; } @@ -61,17 +60,11 @@ export function useCurrencyDisplay( currency === nativeCurrency || (!isUserPreferredCurrency && !nativeCurrency) ) { - ethDisplayValue = new Numeric(inputValue, 16, EtherDenomination.WEI) + return new Numeric(inputValue, 16, EtherDenomination.WEI) .toDenomination(denomination || EtherDenomination.ETH) - .round(numberOfDecimals || 6) + .round(numberOfDecimals || 2) .toBase(10) .toString(); - - if (ethDisplayValue === '0' && inputValue && Number(inputValue) !== 0) { - ethDisplayValue = '<0.000001'; - } - - return ethDisplayValue; } else if (isUserPreferredCurrency && conversionRate) { return formatCurrency( getValueFromWeiHex({ diff --git a/ui/hooks/useCurrencyDisplay.test.js b/ui/hooks/useCurrencyDisplay.test.js index d3863d0247aa..89625a36b46a 100644 --- a/ui/hooks/useCurrencyDisplay.test.js +++ b/ui/hooks/useCurrencyDisplay.test.js @@ -96,31 +96,6 @@ const tests = [ displayValue: '0.000000001', }, }, - { - input: { - value: '0x105cb88', - currency: 'ETH', - numberOfDecimals: 100, - }, - result: { - value: '<0.000001', - suffix: 'ETH', - displayValue: '<0.000001 ETH', - }, - }, - { - input: { - value: '0x105cb88', - currency: 'ETH', - numberOfDecimals: 100, - hideLabel: true, - }, - result: { - value: '<0.000001', - suffix: undefined, - displayValue: '<0.000001', - }, - }, ]; describe('useCurrencyDisplay', () => { diff --git a/ui/pages/confirm-approve/confirm-approve-content/__snapshots__/confirm-approve-content.component.test.js.snap b/ui/pages/confirm-approve/confirm-approve-content/__snapshots__/confirm-approve-content.component.test.js.snap index a4bd02de6c35..64c3560a8985 100644 --- a/ui/pages/confirm-approve/confirm-approve-content/__snapshots__/confirm-approve-content.component.test.js.snap +++ b/ui/pages/confirm-approve/confirm-approve-content/__snapshots__/confirm-approve-content.component.test.js.snap @@ -82,6 +82,17 @@ exports[`ConfirmApproveContent Component should render Confirm approve page corr > Transaction fee
+
-
-
-
Transaction fee
+
-
-
-
Transaction fee
+
-
-
-
Transaction fee
+
-
-
-
)} + {showEdit && (!showAdvanceGasFeeOptions || !supportsEIP1559) && ( + + + + )} + {showEdit && + showAdvanceGasFeeOptions && + supportsEIP1559 && + !renderSimulationFailureWarning && ( + + )}
)}
{content}
- - {showFeeDetails && ( - - - - )} - {footer} ); @@ -520,6 +536,7 @@ export default class ConfirmApproveContent extends Component { siteImage, origin, tokenSymbol, + showCustomizeGasModal, useNonceField, warning, txData, @@ -639,7 +656,7 @@ export default class ConfirmApproveContent extends Component { title: t('transactionFee'), showEdit: true, showAdvanceGasFeeOptions: true, - showFeeDetails: true, + onEditClick: showCustomizeGasModal, content: this.renderTransactionDetailsContent(), noBorder: useNonceField || !showFullTxDetails, footer: !useNonceField && ( @@ -667,7 +684,6 @@ export default class ConfirmApproveContent extends Component { ), })} - {useNonceField && this.renderApproveContentCard({ showHeader: false, diff --git a/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.test.js b/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.test.js index 6af93f85c4fd..5f66cfd5d87c 100644 --- a/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.test.js +++ b/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.test.js @@ -8,12 +8,7 @@ import ConfirmApproveContent from '.'; const renderComponent = (props) => { const store = configureMockStore([])({ - metamask: { - providerConfig: { chainId: '0x0' }, - preferences: { - useNativeCurrencyAsPrimaryCurrency: true, - }, - }, + metamask: { providerConfig: { chainId: '0x0' } }, }); return renderWithProvider(, store); }; @@ -24,6 +19,7 @@ const props = { tokenSymbol: 'TestDappNFTs (#1)', assetStandard: TokenStandard.ERC721, tokenImage: 'https://metamask.github.io/test-dapp/metamask-fox.svg', + showCustomizeGasModal: jest.fn(), data: '0x095ea7b30000000000000000000000009bc5baf874d2da8d216ae9f137804184ee5afef40000000000000000000000000000000000000000000000000000000000011170', toAddress: '0x9bc5baf874d2da8d216ae9f137804184ee5afef4', currentCurrency: 'usd', @@ -78,10 +74,12 @@ describe('ConfirmApproveContent Component', () => { ).toBeInTheDocument(); expect(queryByText(`${props.ethTransactionTotal} ETH`)).toBeInTheDocument(); expect(queryByText(`$10.00`)).toBeInTheDocument(); + fireEvent.click(editButtons[0]); + expect(props.showCustomizeGasModal).toHaveBeenCalledTimes(1); expect(queryByText('Nonce')).toBeInTheDocument(); expect(queryByText('2')).toBeInTheDocument(); - fireEvent.click(editButtons[0]); + fireEvent.click(editButtons[1]); expect(props.showCustomizeNonceModal).toHaveBeenCalledTimes(1); const showViewTxDetails = getByText('View full transaction details'); @@ -138,10 +136,12 @@ describe('ConfirmApproveContent Component', () => { queryByText('A fee is associated with this request.'), ).toBeInTheDocument(); expect(queryByText(`${props.ethTransactionTotal} ETH`)).toBeInTheDocument(); + fireEvent.click(editButtons[0]); + expect(props.showCustomizeGasModal).toHaveBeenCalledTimes(2); expect(queryByText('Nonce')).toBeInTheDocument(); expect(queryByText('2')).toBeInTheDocument(); - fireEvent.click(editButtons[0]); + fireEvent.click(editButtons[1]); expect(props.showCustomizeNonceModal).toHaveBeenCalledTimes(2); const showViewTxDetails = getByText('View full transaction details'); @@ -198,10 +198,12 @@ describe('ConfirmApproveContent Component', () => { queryByText('A fee is associated with this request.'), ).toBeInTheDocument(); expect(queryByText(`${props.ethTransactionTotal} ETH`)).toBeInTheDocument(); + fireEvent.click(editButtons[0]); + expect(props.showCustomizeGasModal).toHaveBeenCalledTimes(3); expect(queryByText('Nonce')).toBeInTheDocument(); expect(queryByText('2')).toBeInTheDocument(); - fireEvent.click(editButtons[0]); + fireEvent.click(editButtons[1]); expect(props.showCustomizeNonceModal).toHaveBeenCalledTimes(3); const showViewTxDetails = getByText('View full transaction details'); @@ -255,10 +257,12 @@ describe('ConfirmApproveContent Component', () => { ).toBeInTheDocument(); expect(queryByText(`${props.ethTransactionTotal} ETH`)).toBeInTheDocument(); expect(queryByText(`$10.00`)).not.toBeInTheDocument(); + fireEvent.click(editButtons[0]); + expect(props.showCustomizeGasModal).toHaveBeenCalledTimes(4); expect(queryByText('Nonce')).toBeInTheDocument(); expect(queryByText('2')).toBeInTheDocument(); - fireEvent.click(editButtons[0]); + fireEvent.click(editButtons[1]); expect(props.showCustomizeNonceModal).toHaveBeenCalledTimes(4); const showViewTxDetails = getByText('View full transaction details'); diff --git a/ui/pages/confirm-approve/confirm-approve.js b/ui/pages/confirm-approve/confirm-approve.js index abb53f185a98..b9f40ad35548 100644 --- a/ui/pages/confirm-approve/confirm-approve.js +++ b/ui/pages/confirm-approve/confirm-approve.js @@ -258,6 +258,7 @@ export default function ConfirmApprove({ assetName={assetName} assetStandard={assetStandard} tokenAddress={tokenAddress} + showCustomizeGasModal={approveTransaction} data={customData || transactionData} toAddress={toAddress} currentCurrency={currentCurrency} diff --git a/ui/pages/confirm-send-ether/__snapshots__/confirm-send-ether.test.js.snap b/ui/pages/confirm-send-ether/__snapshots__/confirm-send-ether.test.js.snap index 5a93d6e98cf0..3d930edad107 100644 --- a/ui/pages/confirm-send-ether/__snapshots__/confirm-send-ether.test.js.snap +++ b/ui/pages/confirm-send-ether/__snapshots__/confirm-send-ether.test.js.snap @@ -355,180 +355,203 @@ exports[`ConfirmSendEther should render correct information for for confirm send class="transaction-detail" >
-
-
+ +
+
+
-

- Estimated fee -

- + + +
+
+
+
+
+
+
+
+
-
-
- -
- - 0.00021 - -
-
-
-
+ -
+ ( + estimated + ) + +
+
- - 0.00021 - - - ETH - + +
-
+
-
+
-
+
-

- Unknown processing time -

-

- ~ - + 0.00021 -

+
-
+
- - Max fee: - -
-
-
- - 0.00021 - - - ETH - -
+ 0.00021 + + + ETH +
-
+
+ Unknown processing time +
+
+
-
+
+
- Fee details -

- - - -
+ + 0.00021 + + + ETH + +
+ + + - - -
-
@@ -565,19 +588,23 @@ exports[`ConfirmSendEther should render correct information for for confirm send class="mm-box mm-text mm-text--body-md mm-text--font-weight-bold mm-text--text-align-right mm-box--margin-left-1 mm-box--color-text-default" >
- - 0.00021 - - - ETH - + + 0.00021 + + + ETH + +
diff --git a/ui/pages/confirm-transaction-base/__snapshots__/confirm-transaction-base.test.js.snap b/ui/pages/confirm-transaction-base/__snapshots__/confirm-transaction-base.test.js.snap index ed4471ca0dfd..2da28c1d8499 100644 --- a/ui/pages/confirm-transaction-base/__snapshots__/confirm-transaction-base.test.js.snap +++ b/ui/pages/confirm-transaction-base/__snapshots__/confirm-transaction-base.test.js.snap @@ -317,75 +317,49 @@ exports[`Confirm Transaction Base should match snapshot 1`] = `
-
+
-
-
- Estimated gas fee -
-
-
- - - -
-
-
-
+ Estimated gas fee
-
-
-
+
+ - - 0.000021 - -
+ +
-
+
-
+
-
- - Max fee: -
+ class="transaction-detail-item__row" + > +
+
+ + Max fee: + +
+
+ + 0.000021 + +
+
+
+
-
-
-
-
@@ -431,14 +418,18 @@ exports[`Confirm Transaction Base should match snapshot 1`] = ` class="mm-box mm-text mm-text--body-md mm-text--font-weight-bold mm-text--text-align-right mm-box--margin-left-1 mm-box--color-text-default" >
- - 0.000121 - + + 0.000121 + +
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 ff99f3253581..e7269be67435 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -58,7 +58,6 @@ import updateTxData from '../../../shared/modules/updateTxData'; import { KeyringType } from '../../../shared/constants/keyring'; ///: END:ONLY_INCLUDE_IF import { isHardwareKeyring } from '../../helpers/utils/hardware'; -import FeeDetailsComponent from '../../components/app/fee-details-component/fee-details-component'; export default class ConfirmTransactionBase extends Component { static contextTypes = { @@ -79,7 +78,7 @@ export default class ConfirmTransactionBase extends Component { fromName: PropTypes.string, hexTransactionAmount: PropTypes.string, hexMaximumTransactionFee: PropTypes.string, - hexMinimumTransactionFee: PropTypes.string, + hexTransactionTotal: PropTypes.string, methodData: PropTypes.object, nonce: PropTypes.string, useNonceField: PropTypes.bool, @@ -136,6 +135,7 @@ export default class ConfirmTransactionBase extends Component { nativeCurrency: PropTypes.string, supportsEIP1559: PropTypes.bool, hardwareWalletRequiresConnection: PropTypes.bool, + isMultiLayerFeeNetwork: PropTypes.bool, isBuyableChain: PropTypes.bool, isApprovalOrRejection: PropTypes.bool, assetStandard: PropTypes.string, @@ -317,7 +317,7 @@ export default class ConfirmTransactionBase extends Component { primaryTotalTextOverride, secondaryTotalTextOverride, hexMaximumTransactionFee, - hexMinimumTransactionFee, + hexTransactionTotal, useNonceField, customNonceValue, updateCustomNonce, @@ -327,6 +327,7 @@ export default class ConfirmTransactionBase extends Component { useNativeCurrencyAsPrimaryCurrency, primaryTotalTextOverrideMaxAmount, showLedgerSteps, + isMultiLayerFeeNetwork, nativeCurrency, isBuyableChain, useCurrencyRateCheck, @@ -347,14 +348,7 @@ export default class ConfirmTransactionBase extends Component { hasSimulationError && !userAcknowledgedGasMissing; const networkName = NETWORK_TO_NAME_MAP[txData.chainId]; - const getTotalAmount = (useMaxFee) => { - return addHexes( - txData.txParams.value, - useMaxFee ? hexMaximumTransactionFee : hexMinimumTransactionFee, - ); - }; - - const renderTotalMaxAmount = (useMaxFee) => { + const renderTotalMaxAmount = () => { if ( primaryTotalTextOverrideMaxAmount === undefined && secondaryTotalTextOverride === undefined @@ -364,7 +358,7 @@ export default class ConfirmTransactionBase extends Component { ); @@ -376,11 +370,32 @@ export default class ConfirmTransactionBase extends Component { : secondaryTotalTextOverride; }; - const renderTotalDetailText = (value) => { + const renderTotalDetailTotal = () => { + if ( + primaryTotalTextOverride === undefined && + secondaryTotalTextOverride === undefined + ) { + return ( +
+ + +
+ ); + } + return useNativeCurrencyAsPrimaryCurrency + ? primaryTotalTextOverride + : secondaryTotalTextOverride; + }; + + const renderTotalDetailText = () => { if ( - (primaryTotalTextOverride === undefined && - secondaryTotalTextOverride === undefined) || - value === '0x0' + primaryTotalTextOverride === undefined && + secondaryTotalTextOverride === undefined ) { return (
@@ -388,7 +403,7 @@ export default class ConfirmTransactionBase extends Component {
@@ -458,7 +473,6 @@ export default class ConfirmTransactionBase extends Component { tokenSymbol={tokenSymbol} /> - - -
+ ), - ]} - /> - @@ -503,7 +501,7 @@ export default class ConfirmTransactionBase extends Component { {t('editGasSubTextAmountLabel')} {' '} - {renderTotalMaxAmount(true)} + {renderTotalMaxAmount()}
} /> @@ -917,7 +915,6 @@ export default class ConfirmTransactionBase extends Component { removePollingTokenFromAppState(this.state.pollingToken); } }); - window.addEventListener('beforeunload', this._beforeUnloadForGasPolling); } diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js index bd59a587d641..dbe4ae4562b5 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.container.js @@ -184,7 +184,7 @@ const mapStateToProps = (state, ownProps) => { const { hexTransactionAmount, hexMaximumTransactionFee, - hexMinimumTransactionFee, + hexTransactionTotal, gasEstimationObject, } = transactionFeeSelector(state, transaction); @@ -250,7 +250,7 @@ const mapStateToProps = (state, ownProps) => { toNickname, hexTransactionAmount, hexMaximumTransactionFee, - hexMinimumTransactionFee, + hexTransactionTotal, txData: fullTxData, tokenData, methodData, diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.test.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.test.js index 4387279e0ac6..ce282efb82ad 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.test.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.test.js @@ -409,7 +409,6 @@ describe('Confirm Transaction Base', () => { gasFeeIsCustom: true, }, }; - const store = configureMockStore(middleware)(newMockedStore); const sendTransaction = jest.fn().mockResolvedValue(); @@ -485,7 +484,6 @@ describe('Confirm Transaction Base', () => { gasFeeIsCustom: true, }, }; - const store = configureMockStore(middleware)(newMockedStore); const sendTransaction = jest .fn() diff --git a/ui/pages/send/gas-display/index.scss b/ui/pages/send/gas-display/index.scss index 582aebe4235e..4e4a48db1b2d 100644 --- a/ui/pages/send/gas-display/index.scss +++ b/ui/pages/send/gas-display/index.scss @@ -4,6 +4,9 @@ .transaction-detail-rows { padding: 10px; + border-radius: 8px; + border: 1px solid var(--color-border-default); + margin: 16px 16px; .transaction-detail-item { &:not(:first-child) { diff --git a/ui/pages/send/send-content/__snapshots__/send-content.component.test.js.snap b/ui/pages/send/send-content/__snapshots__/send-content.component.test.js.snap index cb4204841623..df70522a2528 100644 --- a/ui/pages/send/send-content/__snapshots__/send-content.component.test.js.snap +++ b/ui/pages/send/send-content/__snapshots__/send-content.component.test.js.snap @@ -186,11 +186,47 @@ exports[`SendContent Component render should match snapshot 1`] = `
-

- Estimated fee -

+
+ Gas +
+ + ( + estimated + ) + +
+
+
+ + + +
+
+
+
-
-

- Unknown processing time -

-

- - ~ - - -

-
+ Unknown processing time +
-
-
-
diff --git a/ui/pages/token-allowance/token-allowance.js b/ui/pages/token-allowance/token-allowance.js index cbeac1a525d9..38fa78634e88 100644 --- a/ui/pages/token-allowance/token-allowance.js +++ b/ui/pages/token-allowance/token-allowance.js @@ -1,4 +1,4 @@ -import React, { useState, useContext, useEffect, useCallback } from 'react'; +import React, { useState, useContext, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory } from 'react-router-dom'; import PropTypes from 'prop-types'; @@ -72,7 +72,6 @@ import SecurityProviderBannerMessage from '../../components/app/security-provide import { Icon, IconName, Text } from '../../components/component-library'; import { ConfirmPageContainerWarning } from '../../components/app/confirm-page-container/confirm-page-container-content'; import CustomNonce from '../../components/app/custom-nonce'; -import FeeDetailsComponent from '../../components/app/fee-details-component/fee-details-component'; const ALLOWED_HOSTS = ['portfolio.metamask.io']; @@ -283,13 +282,13 @@ export default function TokenAllowance({ ); }; - const handleNextNonce = useCallback(() => { + const handleNextNonce = () => { dispatch(getNextNonce()); - }, [getNextNonce, dispatch]); + }; useEffect(() => { - dispatch(getNextNonce()); - }, [getNextNonce, dispatch]); + handleNextNonce(); + }, [dispatch]); const handleUpdateCustomNonce = (value) => { dispatch(updateCustomNonce(value)); @@ -535,14 +534,6 @@ export default function TokenAllowance({ /> )} - - - {useNonceField && ( Date: Thu, 7 Dec 2023 17:40:05 +0100 Subject: [PATCH 03/16] Bump `keyring-controller` and `browser-passworder` (#21878) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR bumps these package versions: - `@metamask/keyring-controller` to `^9.0.0` - `@metamask/browser-passworder` to `^4.3.0` - `@metamask/eth-keyring-controller` to `^15.1.0` This set of updates brings a change in the way encryption keys are derived from the user password. To allow encryption with different iteration numbers (e.g. for different use cases), and to easily change these iterations independently in the future, an [encryptor factory](https://github.com/MetaMask/metamask-extension/pull/21878/files#diff-002d97b64bc1b560f156971f3c9dad5cfeab85f142080ee212d1bc96a2c1521a) has been added. For performance reasons, `@metamask/eth-keyring-controller` has been _fixed_ to prefer the cached encryption key over the password (it will not derive it again), when it is initialized with `cacheEncryptionKey: true` and the encryptor supports it (which is the case with `@metamask/browser-passworder`) - for this reason, this change only impacts the login UX, instead of _every user interaction_ with the keychain. The encryptor for Snaps has been set lower for now. n/a 1. Unlock an existing vault should work 2. Locking and unlocking again should still work Note from DanM: probably a good idea to test this on a lower powered machine to see the performance impact. Test the before and after impact on performance of logging in, going from the unlock screen to the home screen. These changes might have a UX impact on slower devices, for the following actions: - Wallet unlock - Actions on KeyringController (or direct keyrings) that end with a call to `persistAllKeyrings`, which derives the encryption key again and re-encrypt the vault. e.g.: - Creating first seed phrase - Importing an existing seed phrase - ~~Add an account~~ - ~~Remove an account~~ - ~~Connecting a hardware wallet of any kind~~ - ~~Adding a keyring~~ - ~~Removing a keyring~~ - ~~Importing account~~ - (I might be forgetting something) - ~~Snaps interactions: some of them call `encrypt` / `decrypt`, which also derive the key before/after all the interactions~~ - _There might be some UX oddities that we never noticed because of the fast derivation time, but that might be noticeable now ([see this as an example](https://github.com/MetaMask/metamask-extension/pull/21878#discussion_r1403470881))_ n/a n/a n/a - [ ] I’ve followed [MetaMask Coding Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've clearly explained what problem this PR is solving and how it is solved. - [ ] I've linked related issues - [ ] I've included manual testing steps - [ ] I've included screenshots/recordings if applicable - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. - [ ] I’ve properly set the pull request status: - [ ] In case it's not yet "ready for review", I've set it to "draft". - [ ] In case it's "ready for review", I've changed it from "draft" to "non-draft". - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --------- Co-authored-by: MetaMask Bot Co-authored-by: legobeat <109787230+legobeat@users.noreply.github.com> --- ...ing-controller-npm-13.0.1-06ff83faad.patch | 20 -- ...ing-controller-npm-9.0.0-f57ed3ebea.patch} | 4 +- app/scripts/lib/encryptor-factory.ts | 87 +++++++ .../metamask-controller.actions.test.js | 11 +- app/scripts/metamask-controller.js | 11 +- app/scripts/metamask-controller.test.js | 41 +--- lavamoat/browserify/beta/policy.json | 217 +++-------------- lavamoat/browserify/desktop/policy.json | 230 +++--------------- lavamoat/browserify/flask/policy.json | 230 +++--------------- lavamoat/browserify/main/policy.json | 230 +++--------------- lavamoat/browserify/mmi/policy.json | 217 +++-------------- package.json | 8 +- .../accounts/snap-account-transfers.spec.ts | 3 + test/e2e/fixture-builder.js | 13 +- test/e2e/helpers.js | 4 + test/e2e/tests/account-details.spec.js | 8 + test/e2e/tests/dapp-interactions.spec.js | 3 +- test/e2e/tests/migrate-old-vault.spec.js | 51 ++++ test/lib/mock-encryptor.js | 75 ++++-- yarn.lock | 197 +++++---------- 20 files changed, 442 insertions(+), 1218 deletions(-) delete mode 100644 .yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch rename .yarn/patches/{@metamask-keyring-controller-npm-8.0.3-63afac5958.patch => @metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch} (69%) create mode 100644 app/scripts/lib/encryptor-factory.ts create mode 100644 test/e2e/tests/migrate-old-vault.spec.js diff --git a/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch b/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch deleted file mode 100644 index c8df70a2c3ba..000000000000 --- a/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch +++ /dev/null @@ -1,20 +0,0 @@ -# The `removeAccount` method of some keyrings is async (e.g. `SnapKeyring`), so -# this patch makes the `KeyringController` await the account removal. -# -# In the future, we must make sure that all keyrings implement the same -# interface. -# -# See: https://github.com/MetaMask/KeyringController/pull/280 -diff --git a/dist/KeyringController.js b/dist/KeyringController.js -index 3644209391f2cdf7ff5e2bd8f94517bff13b0f47..ed63d0ba4cb56df9fe3eb6b0a274f696375dd9dc 100644 ---- a/dist/KeyringController.js -+++ b/dist/KeyringController.js -@@ -259,7 +259,7 @@ class KeyringController extends events_1.EventEmitter { - if (!keyring.removeAccount) { - throw new Error(constants_1.KeyringControllerError.UnsupportedRemoveAccount); - } -- keyring.removeAccount(address); -+ await keyring.removeAccount(address); - this.emit('removedAccount', address); - const accounts = await keyring.getAccounts(); - // Check if this was the last/only account diff --git a/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch b/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch similarity index 69% rename from .yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch rename to .yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch index 4eb1771d1423..8c3569c9841f 100644 --- a/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch +++ b/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch @@ -1,8 +1,8 @@ diff --git a/dist/KeyringController.js b/dist/KeyringController.js -index fc1c30d4e23badb803242eee5cac65ece8de172b..57d0067cbe551fc0cea986daedf95344dd41fa14 100644 +index da9523afe0a83e3fa298b47a518cb583eb509e52..8fe701103975335ff02ed8195f250f35eedccbab 100644 --- a/dist/KeyringController.js +++ b/dist/KeyringController.js -@@ -645,7 +645,6 @@ class KeyringController extends base_controller_1.BaseControllerV2 { +@@ -662,7 +662,6 @@ class KeyringController extends base_controller_1.BaseControllerV2 { throw new Error('Seed phrase imported different accounts.'); } }); diff --git a/app/scripts/lib/encryptor-factory.ts b/app/scripts/lib/encryptor-factory.ts new file mode 100644 index 000000000000..68f8ee42307e --- /dev/null +++ b/app/scripts/lib/encryptor-factory.ts @@ -0,0 +1,87 @@ +import { + encrypt, + encryptWithDetail, + encryptWithKey, + decrypt, + decryptWithDetail, + decryptWithKey, + isVaultUpdated, + keyFromPassword, + importKey, + EncryptionKey, +} from '@metamask/browser-passworder'; + +/** + * A factory function for the encrypt method of the browser-passworder library, + * that encrypts with a given number of iterations. + * + * @param iterations - The number of iterations to use for the PBKDF2 algorithm. + * @returns A function that encrypts with the given number of iterations. + */ +const encryptFactory = + (iterations: number) => + async ( + password: string, + data: unknown, + key?: EncryptionKey | CryptoKey, + salt?: string, + ) => + encrypt(password, data, key, salt, { + algorithm: 'PBKDF2', + params: { + iterations, + }, + }); + +/** + * A factory function for the encryptWithDetail method of the browser-passworder library, + * that encrypts with a given number of iterations. + * + * @param iterations - The number of iterations to use for the PBKDF2 algorithm. + * @returns A function that encrypts with the given number of iterations. + */ +const encryptWithDetailFactory = + (iterations: number) => + async (password: string, object: unknown, salt?: string) => + encryptWithDetail(password, object, salt, { + algorithm: 'PBKDF2', + params: { + iterations, + }, + }); + +/** + * A factory function for the isVaultUpdated method of the browser-passworder library, + * that checks if the given vault was encrypted with the given number of iterations. + * + * @param iterations - The number of iterations to use for the PBKDF2 algorithm. + * @returns A function that checks if the vault was encrypted with the given number of iterations. + */ +const isVaultUpdatedFactory = (iterations: number) => async (vault: string) => + isVaultUpdated(vault, { + algorithm: 'PBKDF2', + params: { + iterations, + }, + }); + +/** + * A factory function that returns an encryptor with the given number of iterations. + * + * The returned encryptor is a wrapper around the browser-passworder library, that + * calls the encrypt and encryptWithDetail methods with the given number of iterations. + * + * @param iterations - The number of iterations to use for the PBKDF2 algorithm. + * @returns An encryptor set with the given number of iterations. + */ +export const encryptorFactory = (iterations: number) => ({ + encrypt: encryptFactory(iterations), + encryptWithKey, + encryptWithDetail: encryptWithDetailFactory(iterations), + decrypt, + decryptWithKey, + decryptWithDetail, + keyFromPassword, + isVaultUpdated: isVaultUpdatedFactory(iterations), + importKey, +}); diff --git a/app/scripts/metamask-controller.actions.test.js b/app/scripts/metamask-controller.actions.test.js index 4733310efd7b..268ab1f67ca5 100644 --- a/app/scripts/metamask-controller.actions.test.js +++ b/app/scripts/metamask-controller.actions.test.js @@ -12,6 +12,7 @@ import { import { ApprovalRequestNotFoundError } from '@metamask/approval-controller'; import { PermissionsRequestNotFoundError } from '@metamask/permission-controller'; import nock from 'nock'; +import mockEncryptor from '../../test/lib/mock-encryptor'; const { Ganache } = require('../../test/e2e/ganache'); @@ -96,15 +97,7 @@ describe('MetaMaskController', function () { ); metamaskController = new MetaMaskController({ showUserConfirmation: noop, - encryptor: { - encrypt(_, object) { - this.object = object; - return Promise.resolve('mock-encrypted'); - }, - decrypt() { - return Promise.resolve(this.object); - }, - }, + encryptor: mockEncryptor, initLangCode: 'en_US', platform: { showTransactionNotification: () => undefined, diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 503cc5fc0399..5b040a8e81df 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -74,7 +74,6 @@ import { import { LoggingController, LogType } from '@metamask/logging-controller'; ///: BEGIN:ONLY_INCLUDE_IN(snaps) -import { encrypt, decrypt } from '@metamask/browser-passworder'; import { RateLimitController } from '@metamask/rate-limit-controller'; import { NotificationController } from '@metamask/notification-controller'; import { @@ -287,6 +286,7 @@ import { updateCurrentLocale } from './translate'; ///: BEGIN:ONLY_INCLUDE_IN(keyring-snaps) import { snapKeyringBuilder, getAccountsBySnapId } from './lib/snap-keyring'; ///: END:ONLY_INCLUDE_IN +import { encryptorFactory } from './lib/encryptor-factory'; export const METAMASK_CONTROLLER_EVENTS = { // Fired after state changes that impact the extension badge (unapproved msg count) @@ -1010,9 +1010,10 @@ export default class MetamaskController extends EventEmitter { }); this.keyringController = new KeyringController({ + cacheEncryptionKey: true, keyringBuilders: additionalKeyrings, state: initState.KeyringController, - encryptor: opts.encryptor || undefined, + encryptor: opts.encryptor || encryptorFactory(600_000), messenger: keyringControllerMessenger, removeIdentity: this.preferencesController.removeAddress.bind( this.preferencesController, @@ -2067,11 +2068,13 @@ export default class MetamaskController extends EventEmitter { * Constructor helper for getting Snap permission specifications. */ getSnapPermissionSpecifications() { + const snapEncryptor = encryptorFactory(10_000); + return { ...buildSnapEndowmentSpecifications(), ...buildSnapRestrictedMethodSpecifications({ - encrypt, - decrypt, + encrypt: snapEncryptor.encrypt, + decrypt: snapEncryptor.decrypt, getLocale: this.getLocale.bind(this), clearSnapState: this.controllerMessenger.call.bind( this.controllerMessenger, diff --git a/app/scripts/metamask-controller.test.js b/app/scripts/metamask-controller.test.js index 871857f99d67..fc0207bb3a17 100644 --- a/app/scripts/metamask-controller.test.js +++ b/app/scripts/metamask-controller.test.js @@ -23,6 +23,7 @@ import { createTestProviderTools } from '../../test/stub/provider'; import { HardwareDeviceNames } from '../../shared/constants/hardware-wallets'; import { KeyringType } from '../../shared/constants/keyring'; import { LOG_EVENT } from '../../shared/constants/logs'; +import mockEncryptor from '../../test/lib/mock-encryptor'; import { deferredPromise } from './lib/util'; import MetaMaskController from './metamask-controller'; @@ -296,15 +297,7 @@ describe('MetaMaskController', () => { metamaskController = new MetaMaskController({ showUserConfirmation: noop, - encryptor: { - encrypt(_, object) { - this.object = object; - return Promise.resolve('mock-encrypted'); - }, - decrypt() { - return Promise.resolve(this.object); - }, - }, + encryptor: mockEncryptor, initState: cloneDeep(firstTimeState), initLangCode: 'en_US', platform: { @@ -776,15 +769,7 @@ describe('MetaMaskController', () => { const localMetaMaskController = new MetaMaskController({ showUserConfirmation: noop, - encryptor: { - encrypt(_, object) { - this.object = object; - return Promise.resolve('mock-encrypted'); - }, - decrypt() { - return Promise.resolve(this.object); - }, - }, + encryptor: mockEncryptor, initState: { ...cloneDeep(firstTimeState), KeyringController: { @@ -1779,15 +1764,7 @@ describe('MetaMaskController', () => { const metamaskController = new MetaMaskController({ showUserConfirmation: noop, - encryptor: { - encrypt(_, object) { - this.object = object; - return Promise.resolve('mock-encrypted'); - }, - decrypt() { - return Promise.resolve(this.object); - }, - }, + encryptor: mockEncryptor, initState: cloneDeep(firstTimeState), initLangCode: 'en_US', platform: { @@ -1811,15 +1788,7 @@ describe('MetaMaskController', () => { const metamaskController = new MetaMaskController({ showUserConfirmation: noop, - encryptor: { - encrypt(_, object) { - this.object = object; - return Promise.resolve('mock-encrypted'); - }, - decrypt() { - return Promise.resolve(this.object); - }, - }, + encryptor: mockEncryptor, initState: cloneDeep(firstTimeState), initLangCode: 'en_US', platform: { diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 8b360d806210..9768382091b2 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -183,7 +183,8 @@ }, "packages": { "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, - "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true + "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true } }, "@ethereumjs/tx>ethereum-cryptography>@noble/curves": { @@ -206,6 +207,13 @@ "crypto": true } }, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { + "packages": { + "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, + "@metamask/utils>@noble/hashes": true, + "@metamask/utils>@scure/base": true + } + }, "@ethersproject/abi": { "globals": { "console.log": true @@ -463,7 +471,7 @@ "packages": { "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -479,16 +487,6 @@ "mockttp>graphql-tag>tslib": true } }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-util>ethereum-cryptography>bs58check": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "koa>content-disposition>safe-buffer": true - } - }, "@keystonehq/metamask-airgapped-keyring": { "packages": { "@ethereumjs/tx": true, @@ -506,8 +504,8 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -884,6 +882,7 @@ }, "@metamask/browser-passworder": { "globals": { + "CryptoKey": true, "btoa": true, "crypto.getRandomValues": true, "crypto.subtle.decrypt": true, @@ -893,6 +892,7 @@ "crypto.subtle.importKey": true }, "packages": { + "@metamask/utils": true, "browserify>buffer": true } }, @@ -953,8 +953,8 @@ "setTimeout": true }, "packages": { - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": true, "@metamask/eth-json-rpc-middleware>safe-stable-stringify": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/providers>@metamask/json-rpc-engine": true, "@metamask/providers>@metamask/rpc-errors": true, "@metamask/utils": true, @@ -962,17 +962,6 @@ "sass-loader>klona": true } }, - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-keyring-controller": { "globals": { "console.error": true @@ -980,8 +969,8 @@ "packages": { "@metamask/browser-passworder": true, "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/obs-store": true, "@metamask/utils": true, "webpack>events": true @@ -993,121 +982,21 @@ }, "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, + "@metamask/utils": true, "browserify>buffer": 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, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>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-hd-keyring>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": true, - "@metamask/utils>@scure/base": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-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>@metamask/eth-simple-keyring": { "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, + "@metamask/utils": true, "browserify>buffer": true, - "mocha>serialize-javascript>randombytes": true, - "webpack>events": 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 + "mocha>serialize-javascript>randombytes": true } }, "@metamask/eth-ledger-bridge-keyring": { @@ -1123,23 +1012,12 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/rlp": true, "@ethereumjs/tx>@ethereumjs/util": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true, + "@metamask/eth-trezor-keyring>hdkey": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "browserify>buffer": true, "webpack>events": true } }, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-query": { "packages": { "@metamask/eth-query>json-rpc-random-id": true, @@ -1267,27 +1145,9 @@ "webpack>events": true } }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": true, - "bn.js": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, "@metamask/eth-trezor-keyring>@trezor/connect-plugin-ethereum": { "packages": { - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true + "@metamask/message-manager>@metamask/eth-sig-util": true } }, "@metamask/eth-trezor-keyring>@trezor/connect-web": { @@ -1417,32 +1277,11 @@ }, "@metamask/eth-trezor-keyring>hdkey": { "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring": true, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": true, "browserify>assert": true, "browserify>crypto-browserify": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring>bs58": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "@metamask/ppom-validator>elliptic": true, - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>create-hash": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-util>ethereum-cryptography>bs58check": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, "koa>content-disposition>safe-buffer": true } }, diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 0b79d33cb9b4..00b4d36cbd28 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -183,7 +183,8 @@ }, "packages": { "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, - "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true + "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true } }, "@ethereumjs/tx>ethereum-cryptography>@noble/curves": { @@ -206,6 +207,13 @@ "crypto": true } }, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { + "packages": { + "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, + "@metamask/utils>@noble/hashes": true, + "@metamask/utils>@scure/base": true + } + }, "@ethersproject/abi": { "globals": { "console.log": true @@ -463,7 +471,7 @@ "packages": { "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -479,16 +487,6 @@ "mockttp>graphql-tag>tslib": true } }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-util>ethereum-cryptography>bs58check": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "koa>content-disposition>safe-buffer": true - } - }, "@keystonehq/metamask-airgapped-keyring": { "packages": { "@ethereumjs/tx": true, @@ -506,8 +504,8 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -884,6 +882,7 @@ }, "@metamask/browser-passworder": { "globals": { + "CryptoKey": true, "btoa": true, "crypto.getRandomValues": true, "crypto.subtle.decrypt": true, @@ -893,6 +892,7 @@ "crypto.subtle.importKey": true }, "packages": { + "@metamask/utils": true, "browserify>buffer": true } }, @@ -1030,8 +1030,8 @@ "setTimeout": true }, "packages": { - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": true, "@metamask/eth-json-rpc-middleware>safe-stable-stringify": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/providers>@metamask/json-rpc-engine": true, "@metamask/providers>@metamask/rpc-errors": true, "@metamask/utils": true, @@ -1039,17 +1039,6 @@ "sass-loader>klona": true } }, - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-keyring-controller": { "globals": { "console.error": true @@ -1057,8 +1046,8 @@ "packages": { "@metamask/browser-passworder": true, "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/obs-store": true, "@metamask/utils": true, "webpack>events": true @@ -1070,121 +1059,21 @@ }, "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, + "@metamask/utils": true, "browserify>buffer": 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, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>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-hd-keyring>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": true, - "@metamask/utils>@scure/base": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-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>@metamask/eth-simple-keyring": { "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, + "@metamask/utils": true, "browserify>buffer": true, - "mocha>serialize-javascript>randombytes": true, - "webpack>events": 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 + "mocha>serialize-javascript>randombytes": true } }, "@metamask/eth-ledger-bridge-keyring": { @@ -1200,23 +1089,12 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/rlp": true, "@ethereumjs/tx>@ethereumjs/util": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true, + "@metamask/eth-trezor-keyring>hdkey": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "browserify>buffer": true, "webpack>events": true } }, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-query": { "packages": { "@metamask/eth-query>json-rpc-random-id": true, @@ -1229,25 +1107,14 @@ }, "packages": { "@ethereumjs/tx": true, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": true, "@metamask/eth-snap-keyring>uuid": true, "@metamask/keyring-api": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/utils": true, "superstruct": true, "webpack>events": true } }, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-snap-keyring>uuid": { "globals": { "crypto": true @@ -1374,27 +1241,9 @@ "webpack>events": true } }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": true, - "bn.js": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, "@metamask/eth-trezor-keyring>@trezor/connect-plugin-ethereum": { "packages": { - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true + "@metamask/message-manager>@metamask/eth-sig-util": true } }, "@metamask/eth-trezor-keyring>@trezor/connect-web": { @@ -1524,32 +1373,11 @@ }, "@metamask/eth-trezor-keyring>hdkey": { "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring": true, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": true, "browserify>assert": true, "browserify>crypto-browserify": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring>bs58": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "@metamask/ppom-validator>elliptic": true, - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>create-hash": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-util>ethereum-cryptography>bs58check": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, "koa>content-disposition>safe-buffer": true } }, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index d73737b6c0c1..bc80d2f94b4d 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -183,7 +183,8 @@ }, "packages": { "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, - "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true + "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true } }, "@ethereumjs/tx>ethereum-cryptography>@noble/curves": { @@ -206,6 +207,13 @@ "crypto": true } }, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { + "packages": { + "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, + "@metamask/utils>@noble/hashes": true, + "@metamask/utils>@scure/base": true + } + }, "@ethersproject/abi": { "globals": { "console.log": true @@ -463,7 +471,7 @@ "packages": { "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -479,16 +487,6 @@ "mockttp>graphql-tag>tslib": true } }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-util>ethereum-cryptography>bs58check": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "koa>content-disposition>safe-buffer": true - } - }, "@keystonehq/metamask-airgapped-keyring": { "packages": { "@ethereumjs/tx": true, @@ -506,8 +504,8 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -884,6 +882,7 @@ }, "@metamask/browser-passworder": { "globals": { + "CryptoKey": true, "btoa": true, "crypto.getRandomValues": true, "crypto.subtle.decrypt": true, @@ -893,6 +892,7 @@ "crypto.subtle.importKey": true }, "packages": { + "@metamask/utils": true, "browserify>buffer": true } }, @@ -1030,8 +1030,8 @@ "setTimeout": true }, "packages": { - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": true, "@metamask/eth-json-rpc-middleware>safe-stable-stringify": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/providers>@metamask/json-rpc-engine": true, "@metamask/providers>@metamask/rpc-errors": true, "@metamask/utils": true, @@ -1039,17 +1039,6 @@ "sass-loader>klona": true } }, - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-keyring-controller": { "globals": { "console.error": true @@ -1057,8 +1046,8 @@ "packages": { "@metamask/browser-passworder": true, "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/obs-store": true, "@metamask/utils": true, "webpack>events": true @@ -1070,121 +1059,21 @@ }, "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, + "@metamask/utils": true, "browserify>buffer": 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, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>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-hd-keyring>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": true, - "@metamask/utils>@scure/base": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-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>@metamask/eth-simple-keyring": { "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, + "@metamask/utils": true, "browserify>buffer": true, - "mocha>serialize-javascript>randombytes": true, - "webpack>events": 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 + "mocha>serialize-javascript>randombytes": true } }, "@metamask/eth-ledger-bridge-keyring": { @@ -1200,23 +1089,12 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/rlp": true, "@ethereumjs/tx>@ethereumjs/util": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true, + "@metamask/eth-trezor-keyring>hdkey": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "browserify>buffer": true, "webpack>events": true } }, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-query": { "packages": { "@metamask/eth-query>json-rpc-random-id": true, @@ -1229,25 +1107,14 @@ }, "packages": { "@ethereumjs/tx": true, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": true, "@metamask/eth-snap-keyring>uuid": true, "@metamask/keyring-api": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/utils": true, "superstruct": true, "webpack>events": true } }, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-snap-keyring>uuid": { "globals": { "crypto": true @@ -1374,27 +1241,9 @@ "webpack>events": true } }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": true, - "bn.js": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, "@metamask/eth-trezor-keyring>@trezor/connect-plugin-ethereum": { "packages": { - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true + "@metamask/message-manager>@metamask/eth-sig-util": true } }, "@metamask/eth-trezor-keyring>@trezor/connect-web": { @@ -1524,32 +1373,11 @@ }, "@metamask/eth-trezor-keyring>hdkey": { "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring": true, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": true, "browserify>assert": true, "browserify>crypto-browserify": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring>bs58": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "@metamask/ppom-validator>elliptic": true, - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>create-hash": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-util>ethereum-cryptography>bs58check": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, "koa>content-disposition>safe-buffer": true } }, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 6504dbaacf22..dd445130d98c 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -183,7 +183,8 @@ }, "packages": { "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, - "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true + "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true } }, "@ethereumjs/tx>ethereum-cryptography>@noble/curves": { @@ -206,6 +207,13 @@ "crypto": true } }, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { + "packages": { + "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, + "@metamask/utils>@noble/hashes": true, + "@metamask/utils>@scure/base": true + } + }, "@ethersproject/abi": { "globals": { "console.log": true @@ -463,7 +471,7 @@ "packages": { "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -479,16 +487,6 @@ "mockttp>graphql-tag>tslib": true } }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-util>ethereum-cryptography>bs58check": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "koa>content-disposition>safe-buffer": true - } - }, "@keystonehq/metamask-airgapped-keyring": { "packages": { "@ethereumjs/tx": true, @@ -506,8 +504,8 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -884,6 +882,7 @@ }, "@metamask/browser-passworder": { "globals": { + "CryptoKey": true, "btoa": true, "crypto.getRandomValues": true, "crypto.subtle.decrypt": true, @@ -893,6 +892,7 @@ "crypto.subtle.importKey": true }, "packages": { + "@metamask/utils": true, "browserify>buffer": true } }, @@ -953,8 +953,8 @@ "setTimeout": true }, "packages": { - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": true, "@metamask/eth-json-rpc-middleware>safe-stable-stringify": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/providers>@metamask/json-rpc-engine": true, "@metamask/providers>@metamask/rpc-errors": true, "@metamask/utils": true, @@ -962,17 +962,6 @@ "sass-loader>klona": true } }, - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-keyring-controller": { "globals": { "console.error": true @@ -980,8 +969,8 @@ "packages": { "@metamask/browser-passworder": true, "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/obs-store": true, "@metamask/utils": true, "webpack>events": true @@ -993,121 +982,21 @@ }, "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, + "@metamask/utils": true, "browserify>buffer": 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, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>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-hd-keyring>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": true, - "@metamask/utils>@scure/base": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-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>@metamask/eth-simple-keyring": { "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, + "@metamask/utils": true, "browserify>buffer": true, - "mocha>serialize-javascript>randombytes": true, - "webpack>events": 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 + "mocha>serialize-javascript>randombytes": true } }, "@metamask/eth-ledger-bridge-keyring": { @@ -1123,23 +1012,12 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/rlp": true, "@ethereumjs/tx>@ethereumjs/util": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true, + "@metamask/eth-trezor-keyring>hdkey": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "browserify>buffer": true, "webpack>events": true } }, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-query": { "packages": { "@metamask/eth-query>json-rpc-random-id": true, @@ -1152,25 +1030,14 @@ }, "packages": { "@ethereumjs/tx": true, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": true, "@metamask/eth-snap-keyring>uuid": true, "@metamask/keyring-api": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/utils": true, "superstruct": true, "webpack>events": true } }, - "@metamask/eth-snap-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-snap-keyring>uuid": { "globals": { "crypto": true @@ -1297,27 +1164,9 @@ "webpack>events": true } }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": true, - "bn.js": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, "@metamask/eth-trezor-keyring>@trezor/connect-plugin-ethereum": { "packages": { - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true + "@metamask/message-manager>@metamask/eth-sig-util": true } }, "@metamask/eth-trezor-keyring>@trezor/connect-web": { @@ -1447,32 +1296,11 @@ }, "@metamask/eth-trezor-keyring>hdkey": { "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring": true, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": true, "browserify>assert": true, "browserify>crypto-browserify": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring>bs58": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "@metamask/ppom-validator>elliptic": true, - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>create-hash": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-util>ethereum-cryptography>bs58check": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, "koa>content-disposition>safe-buffer": true } }, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index 98c0185bd6bf..4b61129d73bb 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -183,7 +183,8 @@ }, "packages": { "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, - "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true + "@ethereumjs/tx>ethereum-cryptography>@noble/hashes": true, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": true } }, "@ethereumjs/tx>ethereum-cryptography>@noble/curves": { @@ -206,6 +207,13 @@ "crypto": true } }, + "@ethereumjs/tx>ethereum-cryptography>@scure/bip32": { + "packages": { + "@ethereumjs/tx>ethereum-cryptography>@noble/curves": true, + "@metamask/utils>@noble/hashes": true, + "@metamask/utils>@scure/base": true + } + }, "@ethersproject/abi": { "globals": { "console.log": true @@ -463,7 +471,7 @@ "packages": { "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth>@keystonehq/bc-ur-registry": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -479,16 +487,6 @@ "mockttp>graphql-tag>tslib": true } }, - "@keystonehq/bc-ur-registry-eth>hdkey": { - "packages": { - "browserify>assert": true, - "browserify>crypto-browserify": true, - "ethereumjs-util>create-hash>ripemd160": true, - "ethereumjs-util>ethereum-cryptography>bs58check": true, - "ethereumjs-util>ethereum-cryptography>secp256k1": true, - "koa>content-disposition>safe-buffer": true - } - }, "@keystonehq/metamask-airgapped-keyring": { "packages": { "@ethereumjs/tx": true, @@ -506,8 +504,8 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/util": true, "@keystonehq/bc-ur-registry-eth": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, "@keystonehq/metamask-airgapped-keyring>@keystonehq/base-eth-keyring>rlp": true, + "@metamask/eth-trezor-keyring>hdkey": true, "browserify>buffer": true, "uuid": true } @@ -1016,6 +1014,7 @@ }, "@metamask/browser-passworder": { "globals": { + "CryptoKey": true, "btoa": true, "crypto.getRandomValues": true, "crypto.subtle.decrypt": true, @@ -1025,6 +1024,7 @@ "crypto.subtle.importKey": true }, "packages": { + "@metamask/utils": true, "browserify>buffer": true } }, @@ -1085,8 +1085,8 @@ "setTimeout": true }, "packages": { - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": true, "@metamask/eth-json-rpc-middleware>safe-stable-stringify": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/providers>@metamask/json-rpc-engine": true, "@metamask/providers>@metamask/rpc-errors": true, "@metamask/utils": true, @@ -1094,17 +1094,6 @@ "sass-loader>klona": true } }, - "@metamask/eth-json-rpc-middleware>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-keyring-controller": { "globals": { "console.error": true @@ -1112,8 +1101,8 @@ "packages": { "@metamask/browser-passworder": true, "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": true, "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/obs-store": true, "@metamask/utils": true, "webpack>events": true @@ -1125,121 +1114,21 @@ }, "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "@metamask/scure-bip39": true, + "@metamask/utils": true, "browserify>buffer": 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, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>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-hd-keyring>ethereum-cryptography>@noble/secp256k1": { - "globals": { - "crypto": true - }, - "packages": { - "browserify>browser-resolve": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@noble/secp256k1": true, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": true, - "@metamask/utils>@scure/base": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-hd-keyring>ethereum-cryptography>@scure/bip32>@noble/hashes": { - "globals": { - "TextEncoder": true, - "crypto": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": true, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>ethjs-util": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils": { - "packages": { - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/abi-utils>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-util>@metamask/utils": { - "globals": { - "TextDecoder": true, - "TextEncoder": true - }, - "packages": { - "browserify>buffer": true, - "nock>debug": true, - "semver": true, - "superstruct": true - } - }, - "@metamask/eth-keyring-controller>@metamask/eth-sig-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>@metamask/eth-simple-keyring": { "packages": { "@ethereumjs/tx>@ethereumjs/util": true, - "@metamask/eth-keyring-controller>@metamask/eth-simple-keyring>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true, + "@ethereumjs/tx>ethereum-cryptography": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, + "@metamask/utils": true, "browserify>buffer": true, - "mocha>serialize-javascript>randombytes": true, - "webpack>events": 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 + "mocha>serialize-javascript>randombytes": true } }, "@metamask/eth-ledger-bridge-keyring": { @@ -1255,23 +1144,12 @@ "@ethereumjs/tx": true, "@ethereumjs/tx>@ethereumjs/rlp": true, "@ethereumjs/tx>@ethereumjs/util": true, - "@keystonehq/bc-ur-registry-eth>hdkey": true, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": true, + "@metamask/eth-trezor-keyring>hdkey": true, + "@metamask/message-manager>@metamask/eth-sig-util": true, "browserify>buffer": true, "webpack>events": true } }, - "@metamask/eth-ledger-bridge-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/assets-controllers>@metamask/abi-utils": true, - "@metamask/utils": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, "@metamask/eth-query": { "packages": { "@metamask/eth-query>json-rpc-random-id": true, @@ -1399,27 +1277,9 @@ "webpack>events": true } }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": { - "packages": { - "@ethereumjs/tx>@ethereumjs/util": true, - "@ethereumjs/tx>ethereum-cryptography": true, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": true, - "bn.js": true, - "browserify>buffer": true, - "eth-sig-util>tweetnacl": true, - "eth-sig-util>tweetnacl-util": true - } - }, - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util>ethjs-util": { - "packages": { - "browserify>buffer": true, - "ethjs>ethjs-util>is-hex-prefixed": true, - "ethjs>ethjs-util>strip-hex-prefix": true - } - }, "@metamask/eth-trezor-keyring>@trezor/connect-plugin-ethereum": { "packages": { - "@metamask/eth-trezor-keyring>@metamask/eth-sig-util": true + "@metamask/message-manager>@metamask/eth-sig-util": true } }, "@metamask/eth-trezor-keyring>@trezor/connect-web": { @@ -1549,32 +1409,11 @@ }, "@metamask/eth-trezor-keyring>hdkey": { "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring": true, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": true, "browserify>assert": true, "browserify>crypto-browserify": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>coinstring": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>coinstring>bs58": true, - "browserify>buffer": true, - "ethereumjs-util>create-hash": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1": { - "packages": { - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": true, - "@metamask/ppom-validator>elliptic": true, - "bn.js": true, - "browserify>insert-module-globals>is-buffer": true, - "ethereumjs-util>create-hash": true, - "koa>content-disposition>safe-buffer": true - } - }, - "@metamask/eth-trezor-keyring>hdkey>secp256k1>bip66": { - "packages": { + "ethereumjs-util>create-hash>ripemd160": true, + "ethereumjs-util>ethereum-cryptography>bs58check": true, + "ethereumjs-util>ethereum-cryptography>secp256k1": true, "koa>content-disposition>safe-buffer": true } }, diff --git a/package.json b/package.json index 4bfff10cd9e4..6fd2815aba53 100644 --- a/package.json +++ b/package.json @@ -247,25 +247,25 @@ "@metamask/approval-controller": "^3.4.0", "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A22.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-22.0.0-6af3715fb2.patch", "@metamask/base-controller": "^3.2.0", - "@metamask/browser-passworder": "^4.1.0", + "@metamask/browser-passworder": "^4.3.0", "@metamask/contract-metadata": "^2.3.1", "@metamask/controller-utils": "^5.0.0", "@metamask/design-tokens": "^1.12.0", "@metamask/desktop": "^0.3.0", "@metamask/eth-json-rpc-middleware": "^12.0.1", - "@metamask/eth-keyring-controller": "^13.0.1", + "@metamask/eth-keyring-controller": "^15.1.0", "@metamask/eth-ledger-bridge-keyring": "^2.0.1", "@metamask/eth-query": "^3.0.1", "@metamask/eth-snap-keyring": "^1.0.0", "@metamask/eth-token-tracker": "^4.0.0", - "@metamask/eth-trezor-keyring": "^2.0.0", + "@metamask/eth-trezor-keyring": "^3.0.0", "@metamask/etherscan-link": "^2.2.0", "@metamask/ethjs-query": "^0.5.0", "@metamask/gas-fee-controller": "^6.0.1", "@metamask/jazzicon": "^2.0.0", "@metamask/key-tree": "^9.0.0", "@metamask/keyring-api": "^1.0.0", - "@metamask/keyring-controller": "patch:@metamask/keyring-controller@npm%3A8.0.3#~/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch", + "@metamask/keyring-controller": "patch:@metamask/keyring-controller@npm%3A9.0.0#~/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch", "@metamask/logging-controller": "^1.0.1", "@metamask/logo": "^3.1.2", "@metamask/message-manager": "^7.3.0", diff --git a/test/e2e/accounts/snap-account-transfers.spec.ts b/test/e2e/accounts/snap-account-transfers.spec.ts index 57da6be4c953..62ee8553d0bc 100644 --- a/test/e2e/accounts/snap-account-transfers.spec.ts +++ b/test/e2e/accounts/snap-account-transfers.spec.ts @@ -59,6 +59,9 @@ describe('Snap Account Transfers', function (this: Suite) { } if (isAsyncFlow) { + await driver.waitForElementNotPresent({ + text: 'Please complete the transaction on the Snap.', + }); await driver.switchToWindowWithTitle( WINDOW_TITLES.ExtensionInFullScreenView, ); diff --git a/test/e2e/fixture-builder.js b/test/e2e/fixture-builder.js index e09046fa3609..f0646434f815 100644 --- a/test/e2e/fixture-builder.js +++ b/test/e2e/fixture-builder.js @@ -199,7 +199,7 @@ function defaultFixture() { }, KeyringController: { vault: - '{"data":"s6TpYjlUNsn7ifhEFTkuDGBUM1GyOlPrim7JSjtfIxgTt8/6MiXgiR/CtFfR4dWW2xhq85/NGIBYEeWrZThGdKGarBzeIqBfLFhw9n509jprzJ0zc2Rf+9HVFGLw+xxC4xPxgCS0IIWeAJQ+XtGcHmn0UZXriXm8Ja4kdlow6SWinB7sr/WM3R0+frYs4WgllkwggDf2/Tv6VHygvLnhtzp6hIJFyTjh+l/KnyJTyZW1TkZhDaNDzX3SCOHT","iv":"FbeHDAW5afeWNORfNJBR0Q==","salt":"TxZ+WbCW6891C9LK/hbMAoUsSEW1E8pyGLVBU6x5KR8="}', + '{"data":"WHaP1FrrtV4zUonudIppDifsLHF39g6oPkVksAIdWAHBRzax1uy1asfAJprR7u72t4/HuYz5yPIFQrnNnv+hwQu9GRuty88VKMnvMy+sq8MNtoXI+C54bZpWa8r4iUQfa0Mj/cfJbpFpzOdF1ZYXahTfTcU5WsrHwvJew842CiJR4B2jmCHHXfm/DxLK3WazsVQwXJGx/U71UelGoOOrT8NI28EKrAwgPn+7Xmv0j92gmhau30N7Bo2fr6Zv","iv":"LfD8/tY1EjXzxuemSmDVdA==","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"nk4xdpmMR+1s5BYe4Vnk++XAQwrISI2bCtbMg7V1wUA="}', }, MetaMetricsController: { eventsBeforeMetricsOptIn: [], @@ -479,14 +479,21 @@ class FixtureBuilder { withKeyringControllerAdditionalAccountVault() { return this.withKeyringController({ vault: - '{"data":"n1LbLX7D4CdnFjYkyvn8Vfv0VQ0spMTdzCP+bsrZX2cQXiz+GXb9AKaIjbcR0EHuQ5/VulkrpbZFDSYJ5VlZ5VRVVUngckHCNgzw73Jo3D+fVrmwEn6HhBbA+STHRMdjf3eEL/eiS5HbkQ0zutoj8KU/nMPfTz6iuV+WGa0hcOKZa+mqYkSzeYuqVCnWYspjF9hKE5NKnl5Vrnvu3/eFi6PiDeaUbIfs0ccttopnTdQya5e3KB23tu0ORa48EJawK0JeKurLlFfNNNqq+tg3HRgxUyiVp6mCns8GBdsd9Wx3HP00qIJa4OAFV2TtDvSSuek1XAWlIqjKegZbnXosB0t3IABhqWnSozXRFvsHe8oHVZP++B/2pJPzz5kkAgK9Ya/quy/7ok/GN5qw0n9Q6cCexfm9hGC3MI53ClEg08yq2w/eVKMDeEdES6IqidpRxOanIAsrcDjPIw6yP7tXqzo7d4A/50GyBb5MJYeTD7r9bV5/5VWcHtILDyGt4CROgM9/U/wdKduNJy5Igfhh0nvA0399Ber9jvWmtmQxiWAxAgrcf9Xi0SZXWewH/ZEnAOkIOmTVX9hpAGkbDqIvK1Zt2bIK5X/At2KiZ5DqAFet9AiyLZTPR5YQ2KaB8AarEjUthTa7EcDSpAPsr9jLPZwlKuMZO2I29xZHx4ht4ozlcqU+zMF8JBojtP73cRQKc0Chqm8xY9I9K6jANdZn9lT+q20RDgwJAfkp+UUSTTqUgZ3ruej2FyY9F+GWuOZJY1zPN0KG7j7uPXaP5Gqq","iv":"XxlC9CCaul7U0F6JRNyH9A==","salt":"gQOYCUFPAPVJITl0gxIs8TdgNQNl2ltzu4OAHajj+tM="}', + '{"data":"XBb1KJiGsxNOhcTC/xtzaNmpDqnMibJ/HCIjMGUHF/jPIghM63+xkoGcko9T2NKjeMyt2QLbl7K9tr0/qQgbAJP/LUn6gfovkajBdeBQ5N/qztdw7uGJsnrKnzo1krmb2wWeFstwoolcZ9GYwhYVSmCO/tYba50eanY2XvmFheT1ghowtiFmTIGRWV2X1HacnpI4n0rW88ZyBaVuOJOIJGEBiiTD+b0V5l9Tv4sFEms4jvatJwhjDQnx1HmyQE3K64+W5yJe764B0ZdcQ6j2dyIaGgutcz8PoQLBJR1uo78fufZeFzk1gk/BreXn2+4vQnPxQ3prhnXHO4S+7Kj1h2ticxYb3XWnprFLWyksu9ChMyqDXwgM6edLBRDH2jz/IMuC5g9JhABl7PsSH+001z/uBx3GvRTFviFF9dztf195/EPy8YbuYUVbYtJy1aPSju84efWYvb7GrzrmgFnbeh2BpjyWqHoCTdw8fhdm7HQO8GFF7JdGtoIpjkhwPrudIQeIYhGCezd+n5GFp3mdmFNrLbOVFgxufTdY6hlYkg6c5XuHC2VnWCSPwWKIn6t9VuvuyIxXBnol/bgYC8R/d99ctkPDHykigQcgr6cCnhPOwUFOLwrmXqm9HQeWiKb8WxwdGeRnblS+fhFhB+lSy7RvyTUb7HFogDPnDLP/LlUFxdSNNBgqNJU1Dc07Np65PZrpsPvSCfkFttzTytHswhtTEMOg/faaH2D6AwIGbh5Z9cubiNcMrdD75aT1WGuecJ8P7uOMYJq9C7e5l/35","iv":"U81Cv/oryQ1DI9lRezx1iw==","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"ejIn0xx5qZMA0m2ekjvXJF2pJa8ocL11wEdNIFJsKZQ="}', }); } withKeyringControllerImportedAccountVault() { return this.withKeyringController({ vault: - '{"data":"Ot+BTtJPag0xubdiv1nO9bsSvTHivHCd6CD7Lxgb1McYw3VqMjgp5rPMZmblJ1lscuMxyiqp99G52uXO9S0em6F9htpa+t/wn6qubRKTTNG9fxNzQrKXRDNhdgfYckVk5VAZ4fgl2iMZcRDvS8H/+gucVKJ33Sl6mXyPofdexXhWDCU6uR2YecnfaIum9cL2u/GqOMPE3jxzy0Wip0x2Jyp3QOKhvu8A3GIjzagLOaQ7a1APdl8=","iv":"lbsyPeGYWU6U1+jvmW9UHg==","salt":"Zmbhpskwxe4rYfXtELBvlcvW4HISPBATRmMqzsnZPMg="}', + '{"data":"NlxYVSDJJV4B1DWM+fZ0KX1K2lIU9ozK3WMbbL23WEY036umZ9//qB+bN9R1jKMm6xqHGSGgq9EteFMy2Ix5Bx1/c4hV2QquFRTEzPB4TkQ6+P5eJUvgvZ7vqvVU+2W8719T1oz/O7DH7HbO05JPLD1RBY+XOyHzUzAgwmXq0mwxNpqji3ejHyrjZ/1l06igircW/qysLcjZFZ52Vv4a/q1zCL37/4heHDRVmfEob//ulUbJ/5M=","iv":"b9n77dsUqvww9nGcWfPuIA==","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"XrmM930Jqnb7C9Ow5NErAMkSGR3vuMLsqUrkGjzpwaY="}', + }); + } + + withKeyringControllerOldVault() { + return this.withKeyringController({ + vault: + '{"data":"s6TpYjlUNsn7ifhEFTkuDGBUM1GyOlPrim7JSjtfIxgTt8/6MiXgiR/CtFfR4dWW2xhq85/NGIBYEeWrZThGdKGarBzeIqBfLFhw9n509jprzJ0zc2Rf+9HVFGLw+xxC4xPxgCS0IIWeAJQ+XtGcHmn0UZXriXm8Ja4kdlow6SWinB7sr/WM3R0+frYs4WgllkwggDf2/Tv6VHygvLnhtzp6hIJFyTjh+l/KnyJTyZW1TkZhDaNDzX3SCOHT","iv":"FbeHDAW5afeWNORfNJBR0Q==","salt":"TxZ+WbCW6891C9LK/hbMAoUsSEW1E8pyGLVBU6x5KR8="}', }); } diff --git a/test/e2e/helpers.js b/test/e2e/helpers.js index 9b9b8b5b1656..46ee904afc38 100644 --- a/test/e2e/helpers.js +++ b/test/e2e/helpers.js @@ -315,6 +315,7 @@ const importSRPOnboardingFlow = async (driver, seedPhrase, password) => { await driver.fill('[data-testid="create-password-confirm"]', password); await driver.clickElement('[data-testid="create-password-terms"]'); await driver.clickElement('[data-testid="create-password-import"]'); + await driver.waitForElementNotPresent('.loading-overlay'); }; const completeImportSRPOnboardingFlow = async ( @@ -362,6 +363,9 @@ const completeImportSRPOnboardingFlowWordByWord = async ( await driver.clickElement('[data-testid="create-password-terms"]'); await driver.clickElement('[data-testid="create-password-import"]'); + // wait for loading to complete + await driver.waitForElementNotPresent('.loading-overlay'); + // complete await driver.clickElement('[data-testid="onboarding-complete-done"]'); diff --git a/test/e2e/tests/account-details.spec.js b/test/e2e/tests/account-details.spec.js index 3fa193b353e3..527f4a881464 100644 --- a/test/e2e/tests/account-details.spec.js +++ b/test/e2e/tests/account-details.spec.js @@ -110,6 +110,10 @@ describe('Show account details', function () { ); await driver.fill('[placeholder="Account 2"]', '2nd account'); await driver.clickElement({ text: tEn('create'), tag: 'button' }); + await driver.waitForElementNotPresent({ + text: tEn('create'), + tag: 'button', + }); const key = await revealPrivateKey(driver); assert.equal( @@ -159,6 +163,10 @@ describe('Show account details', function () { ); await driver.fill('[placeholder="Account 2"]', '2nd account'); await driver.clickElement({ text: tEn('create'), tag: 'button' }); + await driver.waitForElementNotPresent({ + text: tEn('create'), + tag: 'button', + }); const key = await revealPrivateKey(driver, false); assert.equal( diff --git a/test/e2e/tests/dapp-interactions.spec.js b/test/e2e/tests/dapp-interactions.spec.js index 10dd900a5728..c779a76074b6 100644 --- a/test/e2e/tests/dapp-interactions.spec.js +++ b/test/e2e/tests/dapp-interactions.spec.js @@ -73,8 +73,8 @@ describe('Dapp interactions', function () { await unlockWallet(driver, { navigate: false, - waitLoginSuccess: false, }); + await driver.clickElement({ text: 'Next', tag: 'button' }); await driver.clickElement({ text: 'Connect', tag: 'button' }); await driver.switchToWindowWithTitle(WINDOW_TITLES.TestDApp); @@ -89,7 +89,6 @@ describe('Dapp interactions', function () { ); await unlockWallet(driver, { navigate: false, - waitLoginSuccess: false, }); await driver.clickElement( '[data-testid ="account-options-menu-button"]', diff --git a/test/e2e/tests/migrate-old-vault.spec.js b/test/e2e/tests/migrate-old-vault.spec.js new file mode 100644 index 000000000000..4e7a652eb325 --- /dev/null +++ b/test/e2e/tests/migrate-old-vault.spec.js @@ -0,0 +1,51 @@ +const { strict: assert } = require('assert'); +const { convertToHexValue, withFixtures } = require('../helpers'); +const FixtureBuilder = require('../fixture-builder'); + +const lock = async (driver) => { + await driver.clickElement('[data-testid="account-options-menu-button"]'); + const lockButton = await driver.findClickableElement( + '[data-testid="global-menu-lock"]', + ); + await lockButton.click(); +}; + +const unlock = async (driver) => { + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); +}; + +describe('Migrate vault with old encryption', function () { + const ganacheOptions = { + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: convertToHexValue(25000000000000000000), + }, + ], + }; + it('successfully unlocks an old vault, locks it, and unlock again', async function () { + await withFixtures( + { + fixtures: new FixtureBuilder().withKeyringControllerOldVault().build(), + ganacheOptions, + title: this.test.fullTitle(), + }, + async ({ driver }) => { + await driver.navigate(); + + await unlock(driver); + await lock(driver); + await unlock(driver); + const walletBalance = process.env.MULTICHAIN + ? await driver.findElement( + '.token-balance-overview__secondary-balance', + ) + : await driver.findElement('.eth-overview__primary-balance'); + + assert.equal(/^25\s*ETH$/u.test(await walletBalance.getText()), true); + }, + ); + }); +}); diff --git a/test/lib/mock-encryptor.js b/test/lib/mock-encryptor.js index 96becf6030ca..66c5435f0594 100644 --- a/test/lib/mock-encryptor.js +++ b/test/lib/mock-encryptor.js @@ -1,41 +1,80 @@ -const mockHex = '0xabcdef0123456789'; -const mockKey = Buffer.alloc(32); +export const MOCK_ENCRYPTION_KEY = JSON.stringify({ + alg: 'A256GCM', + ext: true, + k: 'wYmxkxOOFBDP6F6VuuYFcRt_Po-tSLFHCWVolsHs4VI', + key_ops: ['encrypt', 'decrypt'], + kty: 'oct', +}); +export const MOCK_ENCRYPTION_SALT = + 'HQ5sfhsb8XAQRJtD+UqcImT7Ve4n3YMagrh05YTOsjk='; +export const MOCK_HARDCODED_KEY = 'key'; +export const MOCK_HEX = '0xabcdef0123456789'; +const MOCK_KEY = Buffer.alloc(32); + let cacheVal; const mockEncryptor = { - async encrypt(_, dataObj) { - cacheVal = dataObj; - return mockHex; + async encrypt(password, dataObj) { + return JSON.stringify({ + ...(await this.encryptWithKey(password, dataObj)), + salt: this.generateSalt(), + }); }, - async decrypt() { - return cacheVal || {}; + async decrypt(_password, _text) { + return cacheVal ?? {}; }, - encryptWithDetail(_, dataObj) { + async encryptWithKey(_key, dataObj) { cacheVal = dataObj; + return { + data: MOCK_HEX, + iv: 'anIv', + }; + }, - return Promise.resolve({ vault: mockHex, exportedKeyString: '' }); + async encryptWithDetail(key, dataObj) { + return { + vault: await this.encrypt(key, dataObj), + exportedKeyString: MOCK_HARDCODED_KEY, + }; }, - encryptWithKey(key, dataObj) { - return this.encrypt(key, dataObj); + async decryptWithDetail(key, text) { + return { + vault: await this.decrypt(key, text), + salt: MOCK_ENCRYPTION_SALT, + exportedKeyString: MOCK_ENCRYPTION_KEY, + }; }, - decryptWithKey(key, text) { + async decryptWithKey(key, text) { return this.decrypt(key, text); }, - async keyFromPassword() { - return mockKey; + async keyFromPassword(_password) { + return MOCK_KEY; }, - generateSalt() { - return 'WHADDASALT!'; + async importKey(key) { + if (key === '{}') { + throw new TypeError( + `Failed to execute 'importKey' on 'SubtleCrypto': The provided value is not of type '(ArrayBuffer or ArrayBufferView or JsonWebKey)'.`, + ); + } + return null; }, - getRandomValues() { - return 'SOO RANDO!!!1'; + async updateVault(_vault, _password) { + return _vault; + }, + + isVaultUpdated(_vault) { + return true; + }, + + generateSalt() { + return MOCK_ENCRYPTION_SALT; }, }; diff --git a/yarn.lock b/yarn.lock index 11cf3489993c..1cb15c9c1748 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2244,7 +2244,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/util@npm:^8.0.0, @ethereumjs/util@npm:^8.0.2, @ethereumjs/util@npm:^8.0.5, @ethereumjs/util@npm:^8.0.6, @ethereumjs/util@npm:^8.1.0": +"@ethereumjs/util@npm:^8.0.0, @ethereumjs/util@npm:^8.0.5, @ethereumjs/util@npm:^8.1.0": version: 8.1.0 resolution: "@ethereumjs/util@npm:8.1.0" dependencies: @@ -3941,10 +3941,12 @@ __metadata: languageName: node linkType: hard -"@metamask/browser-passworder@npm:^4.1.0": - version: 4.1.0 - resolution: "@metamask/browser-passworder@npm:4.1.0" - checksum: c09db69dd80ed020e017e70bc0589348343e659c8f402810a5c950ca42a16340a43998a0651ec0747cf4b2e2c0ce16dadd8511d2760ecb958e0a0a09fa95016e +"@metamask/browser-passworder@npm:^4.3.0": + version: 4.3.0 + resolution: "@metamask/browser-passworder@npm:4.3.0" + dependencies: + "@metamask/utils": "npm:^8.2.0" + checksum: 8ba5c50cd6274b0cc0f90a1ee16b960ee150f14c29083f3515f4abe018a28ead32c21f5f4a62a6e27a946b1228adc2ff1f195e71e38782fa39fa8fff116173e6 languageName: node linkType: hard @@ -4116,15 +4118,16 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-hd-keyring@npm:^6.0.0": - version: 6.0.0 - resolution: "@metamask/eth-hd-keyring@npm:6.0.0" +"@metamask/eth-hd-keyring@npm:^7.0.1": + version: 7.0.1 + resolution: "@metamask/eth-hd-keyring@npm:7.0.1" dependencies: - "@ethereumjs/util": "npm:^8.0.2" - "@metamask/eth-sig-util": "npm:^5.0.2" - "@metamask/scure-bip39": "npm:^2.0.3" - ethereum-cryptography: "npm:^1.1.2" - checksum: 0a4821efc40828959519c58dcfdf8a817677a522177b9ae9adcfb23db7592b5b6664de903b383e90a735ce3ec10f91025716a3f5e3222427b8355ea6eb725d7e + "@ethereumjs/util": "npm:^8.1.0" + "@metamask/eth-sig-util": "npm:^7.0.0" + "@metamask/scure-bip39": "npm:^2.1.0" + "@metamask/utils": "npm:^8.1.0" + ethereum-cryptography: "npm:^2.1.2" + checksum: adb6aa532168db69aa8569be00942a4b62751ce6bff6ef5fbcda0646cfc6baf13c3b20ab72e12622797cb6c5d6901289be943f5b27d55a5ae4a90fa00c2a29cf languageName: node linkType: hard @@ -4209,33 +4212,18 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-keyring-controller@npm:13.0.1": - version: 13.0.1 - resolution: "@metamask/eth-keyring-controller@npm:13.0.1" - dependencies: - "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/browser-passworder": "npm:^4.1.0" - "@metamask/eth-hd-keyring": "npm:^6.0.0" - "@metamask/eth-sig-util": "npm:^6.0.0" - "@metamask/eth-simple-keyring": "npm:^5.0.0" - "@metamask/obs-store": "npm:^8.1.0" - "@metamask/utils": "npm:^8.1.0" - checksum: 7b5026ed3bd7a3b536b7e743122431a551a19d2a0113099d30bfbff44162d4fac99013665cf92fb419dde12b1497597750ea9d94d270a93b4f6706279b6cba01 - languageName: node - linkType: hard - -"@metamask/eth-keyring-controller@patch:@metamask/eth-keyring-controller@npm%3A13.0.1#~/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch": - version: 13.0.1 - resolution: "@metamask/eth-keyring-controller@patch:@metamask/eth-keyring-controller@npm%3A13.0.1#~/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch::version=13.0.1&hash=6c75cf" +"@metamask/eth-keyring-controller@npm:^15.0.0, @metamask/eth-keyring-controller@npm:^15.1.0": + version: 15.1.0 + resolution: "@metamask/eth-keyring-controller@npm:15.1.0" dependencies: "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/browser-passworder": "npm:^4.1.0" - "@metamask/eth-hd-keyring": "npm:^6.0.0" - "@metamask/eth-sig-util": "npm:^6.0.0" - "@metamask/eth-simple-keyring": "npm:^5.0.0" + "@metamask/browser-passworder": "npm:^4.3.0" + "@metamask/eth-hd-keyring": "npm:^7.0.1" + "@metamask/eth-sig-util": "npm:^7.0.0" + "@metamask/eth-simple-keyring": "npm:^6.0.1" "@metamask/obs-store": "npm:^8.1.0" - "@metamask/utils": "npm:^8.1.0" - checksum: 0a177f9c8d69b3a386006e8a14a551d170236c18693d9624e92f95a5417ad10b8d08d6c1a3c06de2f80d4b21a64c2575a16cb79cfd561e54bd0b975cf26d031e + "@metamask/utils": "npm:^8.2.0" + checksum: f7d9abf56c42aa34542ceb3ea9f33c2a8b52a77699b57ee224df06883590a317f889dd2f231ebad465806538da97b31384cad91fd4faee627a258dd1f279d2c8 languageName: node linkType: hard @@ -4272,20 +4260,6 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-sig-util@npm:^5.0.1, @metamask/eth-sig-util@npm:^5.0.2": - version: 5.1.0 - resolution: "@metamask/eth-sig-util@npm:5.1.0" - dependencies: - "@ethereumjs/util": "npm:^8.0.6" - bn.js: "npm:^4.12.0" - ethereum-cryptography: "npm:^2.0.0" - ethjs-util: "npm:^0.1.6" - tweetnacl: "npm:^1.0.3" - tweetnacl-util: "npm:^0.15.1" - checksum: e75c082cd059e1bcc7736c7016ce68ed8c10a7f2c3a4a0da9d5c979ccb03923e6c651133c31787e6226d58961870ff27b6a60380ca3f2cc5039f132821015269 - languageName: node - linkType: hard - "@metamask/eth-sig-util@npm:^6.0.0": version: 6.0.2 resolution: "@metamask/eth-sig-util@npm:6.0.2" @@ -4315,15 +4289,16 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-simple-keyring@npm:^5.0.0": - version: 5.0.0 - resolution: "@metamask/eth-simple-keyring@npm:5.0.0" +"@metamask/eth-simple-keyring@npm:^6.0.1": + version: 6.0.1 + resolution: "@metamask/eth-simple-keyring@npm:6.0.1" dependencies: - "@ethereumjs/util": "npm:^8.0.0" - "@metamask/eth-sig-util": "npm:^5.0.1" - ethereum-cryptography: "npm:^1.1.2" + "@ethereumjs/util": "npm:^8.1.0" + "@metamask/eth-sig-util": "npm:^7.0.0" + "@metamask/utils": "npm:^8.1.0" + ethereum-cryptography: "npm:^2.1.2" randombytes: "npm:^2.1.0" - checksum: e13880c67074920d47e3f35bb056792596f4579c2e61640c5859bec1f5fd4a479210e863e07431ce94af9d19545d84fa96f59ab0c408ff39df76781fa590032c + checksum: 214470a237c9508097faad1df0de7b79300363325ca684182ea7e56d3ac06b030b9f77010b6587c281e8e113c36799f755c595d4bbcdadc45dda88f0a25f5f13 languageName: node linkType: hard @@ -4358,17 +4333,17 @@ __metadata: languageName: node linkType: hard -"@metamask/eth-trezor-keyring@npm:^2.0.0": - version: 2.0.0 - resolution: "@metamask/eth-trezor-keyring@npm:2.0.0" +"@metamask/eth-trezor-keyring@npm:^3.0.0": + version: 3.0.0 + resolution: "@metamask/eth-trezor-keyring@npm:3.0.0" dependencies: "@ethereumjs/tx": "npm:^4.0.0" "@ethereumjs/util": "npm:^8.0.0" - "@metamask/eth-sig-util": "npm:^5.0.2" + "@metamask/eth-sig-util": "npm:^7.0.0" "@trezor/connect-plugin-ethereum": "npm:^9.0.1" "@trezor/connect-web": "npm:^9.0.6" - hdkey: "npm:0.8.0" - checksum: e245c0403689996f21ba53eed0a6e9ac098d15fafbb59dd5daaeeb4e33acc53bfa580d32e6091a921a11056ecfe0c3a139e7080a5c1de0a2aa22af762408ec42 + hdkey: "npm:^2.1.0" + checksum: 5fb23497073c4abc3f18fe850a4ed96d7321fded83598ac9bf69010865ab5b40a13bf622751a1551cbb62ff73cc162201ab5af336ff5a93d1ae36418a3408165 languageName: node linkType: hard @@ -4500,43 +4475,43 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-controller@npm:8.0.3": - version: 8.0.3 - resolution: "@metamask/keyring-controller@npm:8.0.3" +"@metamask/keyring-controller@npm:9.0.0": + version: 9.0.0 + resolution: "@metamask/keyring-controller@npm:9.0.0" dependencies: "@keystonehq/metamask-airgapped-keyring": "npm:^0.13.1" "@metamask/base-controller": "npm:^3.2.3" - "@metamask/eth-keyring-controller": "npm:^13.0.1" + "@metamask/eth-keyring-controller": "npm:^15.0.0" "@metamask/message-manager": "npm:^7.3.5" "@metamask/preferences-controller": "npm:^4.4.3" - "@metamask/utils": "npm:^8.1.0" + "@metamask/utils": "npm:^8.2.0" async-mutex: "npm:^0.2.6" ethereumjs-util: "npm:^7.0.10" ethereumjs-wallet: "npm:^1.0.1" immer: "npm:^9.0.6" peerDependencies: "@metamask/preferences-controller": ^4.4.3 - checksum: 9739ff404f111d8b353a4fd7829f44f011effc436d773865038dcbb7c74b8e8818fcb567074cad897406bd799d1beb37ddd4f473d1c0164bc9937f9b2288861a + checksum: 0cefdd7d205ca5c2978f98af6eeda6c31fbad0393dea4e5587813a54337f3af09441afa677a49166676df5c93f93469e4082e8b6cab55ee3de69bc588b621713 languageName: node linkType: hard -"@metamask/keyring-controller@patch:@metamask/keyring-controller@npm%3A8.0.3#~/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch": - version: 8.0.3 - resolution: "@metamask/keyring-controller@patch:@metamask/keyring-controller@npm%3A8.0.3#~/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch::version=8.0.3&hash=1ad908" +"@metamask/keyring-controller@patch:@metamask/keyring-controller@npm%3A9.0.0#~/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch": + version: 9.0.0 + resolution: "@metamask/keyring-controller@patch:@metamask/keyring-controller@npm%3A9.0.0#~/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch::version=9.0.0&hash=845a95" dependencies: "@keystonehq/metamask-airgapped-keyring": "npm:^0.13.1" "@metamask/base-controller": "npm:^3.2.3" - "@metamask/eth-keyring-controller": "npm:^13.0.1" + "@metamask/eth-keyring-controller": "npm:^15.0.0" "@metamask/message-manager": "npm:^7.3.5" "@metamask/preferences-controller": "npm:^4.4.3" - "@metamask/utils": "npm:^8.1.0" + "@metamask/utils": "npm:^8.2.0" async-mutex: "npm:^0.2.6" ethereumjs-util: "npm:^7.0.10" ethereumjs-wallet: "npm:^1.0.1" immer: "npm:^9.0.6" peerDependencies: "@metamask/preferences-controller": ^4.4.3 - checksum: f608bdf408323f233b16fc42b2013ad5de6c8cc8b63173ae1823872821e5c1935822f12209a326856af2a440878948d5e245cdbd557defe9ec4f55428d74cc5c + checksum: 3ca2d4f0fc50d86f3b7992e8c71e95c1b6d3f414c3ec975d65230668d1edef87307a7fe4dd7de118a2a0b24d61fda8b669409388ba388efa16bda172228e2874 languageName: node linkType: hard @@ -11962,7 +11937,7 @@ __metadata: languageName: node linkType: hard -"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.0.6, browserify-aes@npm:^1.2.0": +"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" dependencies: @@ -12113,13 +12088,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^2.0.1": - version: 2.0.1 - resolution: "bs58@npm:2.0.1" - checksum: bb97864f110ab411d4a2dcf37c2f7b46fe89f8db3e2bfee32b87ff36abf67ea5e7097bd639359c19c330846029cf884875d10e9efbae8222ed50dc3f404b0ec8 - languageName: node - linkType: hard - "bs58@npm:^4.0.0": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -13097,16 +13065,6 @@ __metadata: languageName: node linkType: hard -"coinstring@npm:^2.0.0": - version: 2.3.0 - resolution: "coinstring@npm:2.3.0" - dependencies: - bs58: "npm:^2.0.1" - create-hash: "npm:^1.1.1" - checksum: e5059fff2b88c531c3578e9a43417ed28ec3570a88a5a964734eb07a7be8bcdab9dcec1e86a0ed2202f8eee384e0d699748835fe840608ba0c61a7ceeef7d30f - languageName: node - linkType: hard - "collapse-white-space@npm:^1.0.2": version: 1.0.5 resolution: "collapse-white-space@npm:1.0.5" @@ -13744,7 +13702,7 @@ __metadata: languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.1, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -15261,17 +15219,6 @@ __metadata: languageName: node linkType: hard -"drbg.js@npm:^1.0.1": - version: 1.0.1 - resolution: "drbg.js@npm:1.0.1" - dependencies: - browserify-aes: "npm:^1.0.6" - create-hash: "npm:^1.1.2" - create-hmac: "npm:^1.1.4" - checksum: a50e770cf641ec364f6b8de8e955c63e0db59f0af6525cc0306f392f4361427e37bf5c74373b31589b24e98d523acc7bbab4c8ee421bc35a2a8a82fe6e06ce95 - languageName: node - linkType: hard - "duplexer2@npm:^0.1.2, duplexer2@npm:~0.1.0, duplexer2@npm:~0.1.2, duplexer2@npm:~0.1.4": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" @@ -19495,17 +19442,6 @@ __metadata: languageName: node linkType: hard -"hdkey@npm:0.8.0": - version: 0.8.0 - resolution: "hdkey@npm:0.8.0" - dependencies: - coinstring: "npm:^2.0.0" - safe-buffer: "npm:^5.1.1" - secp256k1: "npm:^3.0.1" - checksum: 7f588fc25cdd501b5deeecb07c628333009aacc9128baef38f981100e6e93af2056da2c146378e9df468be36c9c10853d332e042dc869045ebc85cf234ffe088 - languageName: node - linkType: hard - "hdkey@npm:^2.0.1, hdkey@npm:^2.1.0": version: 2.1.0 resolution: "hdkey@npm:2.1.0" @@ -24392,7 +24328,7 @@ __metadata: "@metamask/assets-controllers": "patch:@metamask/assets-controllers@npm%3A22.0.0#~/.yarn/patches/@metamask-assets-controllers-npm-22.0.0-6af3715fb2.patch" "@metamask/auto-changelog": "npm:^2.1.0" "@metamask/base-controller": "npm:^3.2.0" - "@metamask/browser-passworder": "npm:^4.1.0" + "@metamask/browser-passworder": "npm:^4.3.0" "@metamask/contract-metadata": "npm:^2.3.1" "@metamask/controller-utils": "npm:^5.0.0" "@metamask/design-tokens": "npm:^1.12.0" @@ -24403,12 +24339,12 @@ __metadata: "@metamask/eslint-config-nodejs": "npm:^9.0.0" "@metamask/eslint-config-typescript": "npm:^9.0.1" "@metamask/eth-json-rpc-middleware": "npm:^12.0.1" - "@metamask/eth-keyring-controller": "npm:^13.0.1" + "@metamask/eth-keyring-controller": "npm:^15.1.0" "@metamask/eth-ledger-bridge-keyring": "npm:^2.0.1" "@metamask/eth-query": "npm:^3.0.1" "@metamask/eth-snap-keyring": "npm:^1.0.0" "@metamask/eth-token-tracker": "npm:^4.0.0" - "@metamask/eth-trezor-keyring": "npm:^2.0.0" + "@metamask/eth-trezor-keyring": "npm:^3.0.0" "@metamask/etherscan-link": "npm:^2.2.0" "@metamask/ethjs-query": "npm:^0.5.0" "@metamask/forwarder": "npm:^1.1.0" @@ -24416,7 +24352,7 @@ __metadata: "@metamask/jazzicon": "npm:^2.0.0" "@metamask/key-tree": "npm:^9.0.0" "@metamask/keyring-api": "npm:^1.0.0" - "@metamask/keyring-controller": "patch:@metamask/keyring-controller@npm%3A8.0.3#~/.yarn/patches/@metamask-keyring-controller-npm-8.0.3-63afac5958.patch" + "@metamask/keyring-controller": "patch:@metamask/keyring-controller@npm%3A9.0.0#~/.yarn/patches/@metamask-keyring-controller-npm-9.0.0-f57ed3ebea.patch" "@metamask/logging-controller": "npm:^1.0.1" "@metamask/logo": "npm:^3.1.2" "@metamask/message-manager": "npm:^7.3.0" @@ -25800,7 +25736,7 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.12.1, nan@npm:^2.13.2, nan@npm:^2.14.0": +"nan@npm:^2.12.1, nan@npm:^2.13.2": version: 2.15.0 resolution: "nan@npm:2.15.0" dependencies: @@ -30732,23 +30668,6 @@ __metadata: languageName: node linkType: hard -"secp256k1@npm:^3.0.1": - version: 3.8.0 - resolution: "secp256k1@npm:3.8.0" - dependencies: - bindings: "npm:^1.5.0" - bip66: "npm:^1.1.5" - bn.js: "npm:^4.11.8" - create-hash: "npm:^1.2.0" - drbg.js: "npm:^1.0.1" - elliptic: "npm:^6.5.2" - nan: "npm:^2.14.0" - node-gyp: "npm:latest" - safe-buffer: "npm:^5.1.2" - checksum: 45e65c68affb228fa253297188ba64c60c39a0f0defc80578ca50e0dda188efb109e9711f9d434672d3e1507860434a9c4bf16bf41a91d67ae50d32f8f6e2059 - languageName: node - linkType: hard - "secp256k1@npm:^4.0.0, secp256k1@npm:^4.0.1, secp256k1@npm:^4.0.3": version: 4.0.3 resolution: "secp256k1@npm:4.0.3" From 8b381d35e4aec07d17920bc1880bffe36fbd4fd7 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 10 Jan 2024 15:10:46 -0330 Subject: [PATCH 04/16] v11.7.4 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 092e55e4f89b..d5586ed6e00d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [11.7.4] + ## [11.7.3] ### Fixed - Ensure fiat token balances are displayed on the homescreen [#22295](https://github.com/MetaMask/metamask-extension/pull/22295) @@ -4266,7 +4268,8 @@ Update styles and spacing on the critical error page ([#20350](https://github.c ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.3...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.4...HEAD +[11.7.4]: https://github.com/MetaMask/metamask-extension/compare/v11.7.3...v11.7.4 [11.7.3]: https://github.com/MetaMask/metamask-extension/compare/v11.7.2...v11.7.3 [11.7.2]: https://github.com/MetaMask/metamask-extension/compare/v11.7.1...v11.7.2 [11.7.1]: https://github.com/MetaMask/metamask-extension/compare/v11.7.0...v11.7.1 diff --git a/package.json b/package.json index 6fd2815aba53..b927e79a6cf2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "11.7.3", + "version": "11.7.4", "private": true, "repository": { "type": "git", From 1303b52fb6033464ad811e41d2ee8061dd0aa630 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 18 Jan 2024 18:10:44 +0100 Subject: [PATCH 05/16] Bump LavaMoat and SES (#22590) Bumps LavaMoat and SES to fix an issue with lockdown failing on Chrome Canary, making the extension unable to boot. This PR also re-applies a patch to `lavamoat-core` and deletes an outdated patch to `@lavamoat/lavapack` that is not required anymore since lavapack now defaults to relative paths. --------- Co-authored-by: MetaMask Bot --- ...vamoat-lavapack-npm-3.1.0-34c65d233b.patch | 15 - .../lavamoat-core-npm-14.4.1-c4e8bbb016.patch | 31 - .../lavamoat-core-npm-15.1.1-51fbe39988.patch | 18 + lavamoat/build-system/policy.json | 178 ++++-- package.json | 17 +- yarn.lock | 546 ++++++++++-------- 6 files changed, 452 insertions(+), 353 deletions(-) delete mode 100644 .yarn/patches/@lavamoat-lavapack-npm-3.1.0-34c65d233b.patch delete mode 100644 .yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch create mode 100644 .yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch diff --git a/.yarn/patches/@lavamoat-lavapack-npm-3.1.0-34c65d233b.patch b/.yarn/patches/@lavamoat-lavapack-npm-3.1.0-34c65d233b.patch deleted file mode 100644 index 9b5526e2b536..000000000000 --- a/.yarn/patches/@lavamoat-lavapack-npm-3.1.0-34c65d233b.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/pack.js b/src/pack.js -index eb41a0af7e2cb84f009486e97c132a0608f17912..3f891eaa2690ef4d4e314d6ca8851becd12afeb3 100644 ---- a/src/pack.js -+++ b/src/pack.js -@@ -203,7 +203,9 @@ function createPacker({ - const jsonSerializeableData = { - // id, - package: packageName, -- file, -+ // Omit this absolute filename from bundle so that builds are reproducible between environments -+ // TODO: update lavapack with an option to omit this, and/or make this filepath relative to the current working directory -+ // file, - // deps, - // source: sourceMeta.code - } diff --git a/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch b/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch deleted file mode 100644 index 07a662583315..000000000000 --- a/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/src/kernelTemplate.js b/src/kernelTemplate.js -index de8d73048b7bb7c4e74009b5c85ad919fe197ef0..e5bcb987cff013def8b2e8c767eb75a57ea0bd7a 100644 ---- a/src/kernelTemplate.js -+++ b/src/kernelTemplate.js -@@ -60,6 +60,8 @@ - errorTaming: 'unsafe', - // shows the full call stack - stackFiltering: 'verbose', -+ // prevents most common override mistake cases from tripping up users -+ overrideTaming: 'severe', - } - - lockdown(lockdownOptions) -diff --git a/src/loadPolicy.js b/src/loadPolicy.js -index ef71923f9282d6a5e9f74e6ec6fa0516f28f508b..0118fda7e1b0fa461ec01ceff8d7112d072f3dfb 100644 ---- a/src/loadPolicy.js -+++ b/src/loadPolicy.js -@@ -33,10 +33,9 @@ async function loadPolicyAndApplyOverrides({ debugMode, policyPath, policyOverri - } - const policyOverride = await readPolicyFile({ debugMode, policyPath: policyOverridePath }) - lavamoatPolicy = mergePolicy(policy, policyOverride) -- // TODO: Only write if merge results in changes. -- // Would have to make a deep equal check on whole policy, which is a waste of time. -- // mergePolicy() should be able to do it in one pass. -- fs.writeFileSync(policyPath, jsonStringify(lavamoatPolicy, { space: 2 })) -+ // Skip policy write step to prevent intermittent build failures -+ // The extension validates the policy in a separate step, we don't need it -+ // to be written to disk here. - } - return lavamoatPolicy - } diff --git a/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch b/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch new file mode 100644 index 000000000000..a871076791f6 --- /dev/null +++ b/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch @@ -0,0 +1,18 @@ +diff --git a/src/loadPolicy.js b/src/loadPolicy.js +index f0ca3c4991a64f316f4e7199867439dd9ab09354..11296dd253b8dc1afd4cc870a0207c280fb728d9 100644 +--- a/src/loadPolicy.js ++++ b/src/loadPolicy.js +@@ -84,10 +84,9 @@ async function loadPolicyAndApplyOverrides({ + + const finalPolicy = mergePolicy(policy, policyOverride) + +- // TODO: Only write if merge results in changes. +- // Would have to make a deep equal check on whole policy, which is a waste of time. +- // mergePolicy() should be able to do it in one pass. +- await fs.writeFile(policyPath, jsonStringify(finalPolicy, { space: 2 })) ++ // Skip policy write step to prevent intermittent build failures ++ // The extension validates the policy in a separate step, we don't need it ++ // to be written to disk here. + + return finalPolicy + } diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index 5601c8594ced..b436088f123d 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -6,8 +6,51 @@ "process.emitWarning": true }, "packages": { - "@babel/code-frame>chalk": true, - "lavamoat>@babel/highlight": true + "@babel/code-frame>@babel/highlight": true, + "@babel/code-frame>chalk": true + } + }, + "@babel/code-frame>@babel/highlight": { + "packages": { + "@babel/code-frame>@babel/highlight>chalk": true, + "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true, + "loose-envify>js-tokens": true + } + }, + "@babel/code-frame>@babel/highlight>chalk": { + "globals": { + "process.env.TERM": true, + "process.platform": true + }, + "packages": { + "@babel/code-frame>@babel/highlight>chalk>ansi-styles": true, + "@babel/code-frame>@babel/highlight>chalk>escape-string-regexp": true, + "@babel/code-frame>@babel/highlight>chalk>supports-color": true + } + }, + "@babel/code-frame>@babel/highlight>chalk>ansi-styles": { + "packages": { + "@metamask/jazzicon>color>color-convert": true + } + }, + "@babel/code-frame>@babel/highlight>chalk>supports-color": { + "builtin": { + "os.release": true + }, + "globals": { + "process.env": true, + "process.platform": true, + "process.stderr": true, + "process.stdout": true, + "process.versions.node.split": true + }, + "packages": { + "@babel/code-frame>@babel/highlight>chalk>supports-color>has-flag": true + } + }, + "@babel/code-frame>@babel/highlight>chalk>supports-color>has-flag": { + "globals": { + "process.argv": true } }, "@babel/code-frame>chalk": { @@ -1119,12 +1162,12 @@ "@lavamoat/lavapack>combine-source-map": true, "@lavamoat/lavapack>convert-source-map": true, "@lavamoat/lavapack>readable-stream": true, + "@lavamoat/lavapack>through2": true, "@lavamoat/lavapack>umd": true, "browserify>JSONStream": true, "eslint>espree": true, "lavamoat>json-stable-stringify": true, - "lavamoat>lavamoat-core": true, - "through2": true + "lavamoat>lavamoat-core": true } }, "@lavamoat/lavapack>combine-source-map": { @@ -1177,6 +1220,52 @@ "readable-stream>util-deprecate": true } }, + "@lavamoat/lavapack>through2": { + "builtin": { + "util.inherits": true + }, + "globals": { + "process.nextTick": true + }, + "packages": { + "@lavamoat/lavapack>through2>readable-stream": true, + "watchify>xtend": true + } + }, + "@lavamoat/lavapack>through2>readable-stream": { + "builtin": { + "events.EventEmitter": true, + "stream": true, + "util": true + }, + "globals": { + "process.browser": true, + "process.env.READABLE_STREAM": true, + "process.stderr": true, + "process.stdout": true, + "process.version.slice": true, + "setImmediate": true + }, + "packages": { + "@lavamoat/lavapack>through2>readable-stream>safe-buffer": true, + "@lavamoat/lavapack>through2>readable-stream>string_decoder": true, + "pumpify>inherits": true, + "readable-stream>core-util-is": true, + "readable-stream>isarray": true, + "readable-stream>process-nextick-args": true, + "readable-stream>util-deprecate": true + } + }, + "@lavamoat/lavapack>through2>readable-stream>safe-buffer": { + "builtin": { + "buffer": true + } + }, + "@lavamoat/lavapack>through2>readable-stream>string_decoder": { + "packages": { + "@lavamoat/lavapack>through2>readable-stream>safe-buffer": true + } + }, "@metamask/eth-token-tracker>deep-equal>is-date-object": { "packages": { "koa>is-generator-function>has-tostringtag": true @@ -2292,7 +2381,12 @@ "process.versions": true }, "packages": { - "browserify>has": true + "depcheck>is-core-module>hasown": true + } + }, + "depcheck>is-core-module>hasown": { + "packages": { + "browserify>has>function-bind": true } }, "depcheck>json5": { @@ -6111,8 +6205,8 @@ "packages": { "@lavamoat/lavapack": true, "browserify>browser-resolve": true, + "browserify>concat-stream": true, "duplexify": true, - "lavamoat-browserify>concat-stream": true, "lavamoat-browserify>readable-stream": true, "lavamoat-browserify>through2": true, "lavamoat>@lavamoat/aa": true, @@ -6120,18 +6214,6 @@ "lavamoat>lavamoat-core": true } }, - "lavamoat-browserify>concat-stream": { - "globals": { - "Buffer.concat": true, - "Buffer.isBuffer": true - }, - "packages": { - "browserify>concat-stream>typedarray": true, - "lavamoat-browserify>readable-stream": true, - "pumpify>inherits": true, - "terser>source-map-support>buffer-from": true - } - }, "lavamoat-browserify>readable-stream": { "builtin": { "buffer.Buffer": true, @@ -6159,50 +6241,42 @@ "process.nextTick": true }, "packages": { - "lavamoat-browserify>readable-stream": true - } - }, - "lavamoat>@babel/highlight": { - "packages": { - "lavamoat>@babel/highlight>@babel/helper-validator-identifier": true, - "lavamoat>@babel/highlight>chalk": true, - "loose-envify>js-tokens": true - } - }, - "lavamoat>@babel/highlight>chalk": { - "globals": { - "process.env.TERM": true, - "process.platform": true - }, - "packages": { - "lavamoat>@babel/highlight>chalk>ansi-styles": true, - "lavamoat>@babel/highlight>chalk>escape-string-regexp": true, - "lavamoat>@babel/highlight>chalk>supports-color": true - } - }, - "lavamoat>@babel/highlight>chalk>ansi-styles": { - "packages": { - "@metamask/jazzicon>color>color-convert": true + "lavamoat-browserify>through2>readable-stream": true, + "watchify>xtend": true } }, - "lavamoat>@babel/highlight>chalk>supports-color": { + "lavamoat-browserify>through2>readable-stream": { "builtin": { - "os.release": true + "events.EventEmitter": true, + "stream": true, + "util": true }, "globals": { - "process.env": true, - "process.platform": true, + "process.browser": true, + "process.env.READABLE_STREAM": true, "process.stderr": true, "process.stdout": true, - "process.versions.node.split": true + "process.version.slice": true, + "setImmediate": true }, "packages": { - "lavamoat>@babel/highlight>chalk>supports-color>has-flag": true + "lavamoat-browserify>through2>readable-stream>safe-buffer": true, + "lavamoat-browserify>through2>readable-stream>string_decoder": true, + "pumpify>inherits": true, + "readable-stream>core-util-is": true, + "readable-stream>isarray": true, + "readable-stream>process-nextick-args": true, + "readable-stream>util-deprecate": true } }, - "lavamoat>@babel/highlight>chalk>supports-color>has-flag": { - "globals": { - "process.argv": true + "lavamoat-browserify>through2>readable-stream>safe-buffer": { + "builtin": { + "buffer": true + } + }, + "lavamoat-browserify>through2>readable-stream>string_decoder": { + "packages": { + "lavamoat-browserify>through2>readable-stream>safe-buffer": true } }, "lavamoat>@lavamoat/aa": { @@ -6224,8 +6298,8 @@ "lavamoat>lavamoat-core": { "builtin": { "events": true, - "fs.existsSync": true, "fs.readFileSync": true, + "node:fs/promises.readFile": true, "path.extname": true, "path.join": true }, diff --git a/package.json b/package.json index b927e79a6cf2..7f421692e7fe 100644 --- a/package.json +++ b/package.json @@ -187,7 +187,6 @@ "@eslint/eslintrc@^2.0.1": "patch:@eslint/eslintrc@npm%3A2.0.2#./.yarn/patches/@eslint-eslintrc-npm-2.0.2-d308674d86.patch", "@fortawesome/fontawesome-free@^5.13.0": "patch:@fortawesome/fontawesome-free@npm%3A5.13.0#./.yarn/patches/@fortawesome-fontawesome-free-npm-5.13.0-f20fc0388d.patch", "@keystonehq/bc-ur-registry@^0.5.0-alpha.5": "patch:@keystonehq/bc-ur-registry@npm%3A0.5.0-alpha.5#./.yarn/patches/@keystonehq-bc-ur-registry-npm-0.5.0-alpha.5-b95c7992a6.patch", - "@lavamoat/lavapack@^3.1.0": "patch:@lavamoat/lavapack@npm%3A3.1.0#./.yarn/patches/@lavamoat-lavapack-npm-3.1.0-34c65d233b.patch", "fast-json-patch@^3.1.0": "patch:fast-json-patch@npm%3A3.1.1#./.yarn/patches/fast-json-patch-npm-3.1.1-7e8bb70a45.patch", "@reduxjs/toolkit@^1.6.2": "patch:@reduxjs/toolkit@npm%3A1.6.2#./.yarn/patches/@reduxjs-toolkit-npm-1.6.2-67af09515f.patch", "parse5@^7.0.0": "patch:parse5@npm%3A7.1.2#./.yarn/patches/parse5-npm-7.1.2-aa9a92c270.patch", @@ -211,12 +210,12 @@ "request@^2.83.0": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch", "request@^2.88.2": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch", "request@^2.85.0": "patch:request@npm%3A2.88.2#./.yarn/patches/request-npm-2.88.2-f4a57c72c4.patch", - "lavamoat-core@npm:^14.4.1": "patch:lavamoat-core@npm%3A14.4.1#~/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch", "@metamask/signature-controller@^6.1.2": "patch:@metamask/signature-controller@npm%3A6.1.2#~/.yarn/patches/@metamask-signature-controller-npm-6.1.2-f60d8a4960.patch", "semver@7.3.7": "^7.5.4", "semver@7.3.8": "^7.5.4", "@metamask/eth-keyring-controller@npm:^13.0.1": "patch:@metamask/eth-keyring-controller@npm%3A13.0.1#~/.yarn/patches/@metamask-eth-keyring-controller-npm-13.0.1-06ff83faad.patch", - "nonce-tracker@npm:^3.0.0": "patch:nonce-tracker@npm%3A3.0.0#~/.yarn/patches/nonce-tracker-npm-3.0.0-c5e9a93f9d.patch" + "nonce-tracker@npm:^3.0.0": "patch:nonce-tracker@npm%3A3.0.0#~/.yarn/patches/nonce-tracker-npm-3.0.0-c5e9a93f9d.patch", + "lavamoat-core@npm:^15.1.1": "patch:lavamoat-core@npm%3A15.1.1#~/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch" }, "dependencies": { "@babel/runtime": "^7.23.2", @@ -371,7 +370,7 @@ "redux-thunk": "^2.3.0", "remove-trailing-slash": "^0.1.1", "reselect": "^3.0.1", - "ses": "^0.18.8", + "ses": "^1.1.0", "single-call-balance-checker-abi": "^1.0.0", "unicode-confusables": "^0.1.1", "uuid": "^8.3.2", @@ -389,8 +388,8 @@ "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.2", "@babel/register": "^7.22.15", - "@lavamoat/allow-scripts": "^2.3.1", - "@lavamoat/lavapack": "^5.2.4", + "@lavamoat/allow-scripts": "^3.0.1", + "@lavamoat/lavapack": "^6.0.2", "@metamask/auto-changelog": "^2.1.0", "@metamask/eslint-config": "^9.0.0", "@metamask/eslint-config-jest": "^9.0.0", @@ -517,9 +516,9 @@ "js-yaml": "^4.1.0", "jsdom": "^16.7.0", "koa": "^2.7.0", - "lavamoat": "^7.1.2", - "lavamoat-browserify": "^15.7.4", - "lavamoat-viz": "^6.0.11", + "lavamoat": "^8.0.2", + "lavamoat-browserify": "^17.0.2", + "lavamoat-viz": "^7.0.2", "lockfile-lint": "^4.10.6", "loose-envify": "^1.4.0", "madge": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index 1cb15c9c1748..3326d20322a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -73,7 +73,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.13": +"@babel/code-frame@npm:7.22.13": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" dependencies: @@ -83,10 +83,20 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: 44e58529c9d93083288dc9e649c553c5ba997475a7b0758cc3ddc4d77b8a7d985dbe78cc39c9bbc61f26d50af6da1ddf0a3427eae8cc222a9370619b671ed8f5 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9, @babel/compat-data@npm:^7.23.2": - version: 7.23.2 - resolution: "@babel/compat-data@npm:7.23.2" - checksum: c18eccd13975c1434a65d04f721075e30d03ba1608f4872d84e8538c16552b878aaac804ff31243d8c2c0e91524f3bc98de6305e117ba1a55c9956871973b4dc + version: 7.23.5 + resolution: "@babel/compat-data@npm:7.23.5" + checksum: 088f14f646ecbddd5ef89f120a60a1b3389a50a9705d44603dca77662707d0175a5e0e0da3943c3298f1907a4ab871468656fbbf74bb7842cd8b0686b2c19736 languageName: node linkType: hard @@ -162,15 +172,15 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.20.7, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": - version: 7.23.0 - resolution: "@babel/generator@npm:7.23.0" +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.20.7, @babel/generator@npm:^7.22.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": + version: 7.23.6 + resolution: "@babel/generator@npm:7.23.6" dependencies: - "@babel/types": "npm:^7.23.0" + "@babel/types": "npm:^7.23.6" "@jridgewell/gen-mapping": "npm:^0.3.2" "@jridgewell/trace-mapping": "npm:^0.3.17" jsesc: "npm:^2.5.1" - checksum: bd1598bd356756065d90ce26968dd464ac2b915c67623f6f071fb487da5f9eb454031a380e20e7c9a7ce5c4a49d23be6cb9efde404952b0b3f3c0c3a9b73d68a + checksum: 864090d5122c0aa3074471fd7b79d8a880c1468480cbd28925020a3dcc7eb6e98bedcdb38983df299c12b44b166e30915b8085a7bc126e68fa7e2aadc7bd1ac5 languageName: node linkType: hard @@ -396,10 +406,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-string-parser@npm:7.22.5" - checksum: 7f275a7f1a9504da06afc33441e219796352a4a3d0288a961bc14d1e30e06833a71621b33c3e60ee3ac1ff3c502d55e392bcbc0665f6f9d2629809696fab7cdd +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c352082474a2ee1d2b812bd116a56b2e8b38065df9678a32a535f151ec6f58e54633cc778778374f10544b930703cca6ddf998803888a636afa27e2658068a9c languageName: node linkType: hard @@ -439,7 +449,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.18.6, @babel/highlight@npm:^7.22.13": +"@babel/highlight@npm:7.22.20": version: 7.22.20 resolution: "@babel/highlight@npm:7.22.20" dependencies: @@ -450,6 +460,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.22.13, @babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: 62fef9b5bcea7131df4626d009029b1ae85332042f4648a4ce6e740c3fd23112603c740c45575caec62f260c96b11054d3be5987f4981a5479793579c3aac71f + languageName: node + linkType: hard + "@babel/parser@npm:7.16.4": version: 7.16.4 resolution: "@babel/parser@npm:7.16.4" @@ -459,12 +480,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.13.9, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/parser@npm:7.23.0" +"@babel/parser@npm:7.23.6, @babel/parser@npm:^7.0.0, @babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.13.9, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.4, @babel/parser@npm:^7.21.8, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" bin: parser: ./bin/babel-parser.js - checksum: 201641e068f8cca1ff12b141fcba32d7ccbabc586961bd1b85ae89d9695867f84d57fc2e1176dc4981fd28e5e97ca0e7c32cd688bd5eabb641a302abc0cb5040 + checksum: 6be3a63d3c9d07b035b5a79c022327cb7e16cbd530140ecb731f19a650c794c315a72c699a22413ebeafaff14aa8f53435111898d59e01a393d741b85629fa7d languageName: node linkType: hard @@ -1660,32 +1681,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.5, @babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.7.2": - version: 7.23.2 - resolution: "@babel/traverse@npm:7.23.2" +"@babel/traverse@npm:7.23.7, @babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.5, @babel/traverse@npm:^7.22.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.7.2": + version: 7.23.7 + resolution: "@babel/traverse@npm:7.23.7" dependencies: - "@babel/code-frame": "npm:^7.22.13" - "@babel/generator": "npm:^7.23.0" + "@babel/code-frame": "npm:^7.23.5" + "@babel/generator": "npm:^7.23.6" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.0" - "@babel/types": "npm:^7.23.0" - debug: "npm:^4.1.0" + "@babel/parser": "npm:^7.23.6" + "@babel/types": "npm:^7.23.6" + debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: e4fcb8f8395804956df4ae1301230a14b6eb35b74a7058a0e0b40f6f4be7281e619e6dafe400e833d4512da5d61cf17ea177d04b00a8f7cf3d8d69aff83ca3d8 + checksum: 3215e59429963c8dac85c26933372cdd322952aa9930e4bc5ef2d0e4bd7a1510d1ecf8f8fd860ace5d4d9fe496d23805a1ea019a86410aee4111de5f63ee84f9 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.0, @babel/types@npm:^7.13.0, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.0 - resolution: "@babel/types@npm:7.23.0" +"@babel/types@npm:7.23.6, @babel/types@npm:^7.0.0, @babel/types@npm:^7.12.0, @babel/types@npm:^7.13.0, @babel/types@npm:^7.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" dependencies: - "@babel/helper-string-parser": "npm:^7.22.5" + "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: ca5b896a26c91c5672254725c4c892a35567d2122afc47bd5331d1611a7f9230c19fc9ef591a5a6f80bf0d80737e104a9ac205c96447c74bee01d4319db58001 + checksum: 07e70bb94d30b0231396b5e9a7726e6d9227a0a62e0a6830c0bd3232f33b024092e3d5a7d1b096a65bbf2bb43a9ab4c721bf618e115bfbb87b454fa060f88cbf languageName: node linkType: hard @@ -1948,6 +1969,13 @@ __metadata: languageName: node linkType: hard +"@endo/env-options@npm:^1.1.0": + version: 1.1.0 + resolution: "@endo/env-options@npm:1.1.0" + checksum: c362b5ccda9407c7049d4f5812023b9f5123116282719a4b296702f93baca7030066359af0b8bf869f8d7736f85d5fe12d21e1375049b10a482eb9bae3715797 + languageName: node + linkType: hard + "@ensdomains/content-hash@npm:^2.5.6": version: 2.5.6 resolution: "@ensdomains/content-hash@npm:2.5.6" @@ -3455,45 +3483,46 @@ __metadata: languageName: node linkType: hard -"@lavamoat/aa@npm:^3.1.1, @lavamoat/aa@npm:^3.1.5": - version: 3.1.5 - resolution: "@lavamoat/aa@npm:3.1.5" +"@lavamoat/aa@npm:^4.0.1": + version: 4.0.1 + resolution: "@lavamoat/aa@npm:4.0.1" dependencies: - resolve: "npm:^1.22.3" + resolve: "npm:1.22.8" bin: lavamoat-ls: src/cli.js - checksum: 35e186fb0aaed5a2494dca4b8d353ead3123ff8a4964d502bdfe8ac369a774499a9ed2c45d04621b33f3c3fbf26ae8255fe4c3a4686f8a5dcb5a8da516be723a + checksum: 988ab467525470520859962c33744c3705a7d833e52cbb420bf9a266499d3e742d2e4a2c57a90ebc1fdddb17f34e737e05769f6e0a94168107cb6fe31e4fb493 languageName: node linkType: hard -"@lavamoat/allow-scripts@npm:^2.3.1": - version: 2.3.1 - resolution: "@lavamoat/allow-scripts@npm:2.3.1" +"@lavamoat/allow-scripts@npm:^3.0.1": + version: 3.0.1 + resolution: "@lavamoat/allow-scripts@npm:3.0.1" dependencies: - "@lavamoat/aa": "npm:^3.1.1" - "@npmcli/run-script": "npm:^6.0.0" - bin-links: "npm:4.0.1" - npm-normalize-package-bin: "npm:^3.0.0" - yargs: "npm:^16.2.0" + "@lavamoat/aa": "npm:^4.0.1" + "@npmcli/run-script": "npm:6.0.2" + bin-links: "npm:4.0.3" + npm-normalize-package-bin: "npm:3.0.1" + yargs: "npm:17.7.2" bin: allow-scripts: src/cli.js - checksum: 076fadc006206c50bbd3b39c8f8fdc70eb88ac0423bc904dd764d2dcd44d4189483fb0ab73112123961323d28eb08bfca1b77101fc6f9749342da6a5cca1be65 + checksum: 5f870e722d21e20c7056388ed637590128d2adbdeaefb305cd98a2e84064efea787c98b39a8573d56c69a58322ed3dcfe0b3d74d49b223f3375d34b0f3d2da6e languageName: node linkType: hard -"@lavamoat/lavapack@npm:^5.2.4, @lavamoat/lavapack@npm:^5.4.1": - version: 5.4.1 - resolution: "@lavamoat/lavapack@npm:5.4.1" - dependencies: - JSONStream: "npm:^1.3.5" - combine-source-map: "npm:^0.8.0" - convert-source-map: "npm:^2.0.0" - json-stable-stringify: "npm:^1.0.2" - lavamoat-core: "npm:^14.4.1" - readable-stream: "npm:^3.6.0" - through2: "npm:^4.0.2" - umd: "npm:^3.0.3" - checksum: 63a3d947d6438149acb06349cc4160367f522040b9b87c43df8e617424634aa67f9f31058b0c6a0b02f2eac4c9dd6b16fe39f9ecf9c8fd4a4a5f3b31cfa4fb8f +"@lavamoat/lavapack@npm:^6.0.2": + version: 6.0.2 + resolution: "@lavamoat/lavapack@npm:6.0.2" + dependencies: + JSONStream: "npm:1.3.5" + combine-source-map: "npm:0.8.0" + convert-source-map: "npm:2.0.0" + espree: "npm:9.6.1" + json-stable-stringify: "npm:1.0.2" + lavamoat-core: "npm:^15.1.1" + readable-stream: "npm:3.6.2" + through2: "npm:2.0.5" + umd: "npm:3.0.3" + checksum: 1bae5aa6880abebe7e6272ac51670338eff4019f1ab7be3ec5d488d3bfe34599cd0f5b82cade22888bf023f7018f513331db0366ef209940394736563573249d languageName: node linkType: hard @@ -5564,7 +5593,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^6.0.0": +"@npmcli/run-script@npm:6.0.2": version: 6.0.2 resolution: "@npmcli/run-script@npm:6.0.2" dependencies: @@ -8306,12 +8335,12 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.11.1 - resolution: "@types/babel__traverse@npm:7.11.1" +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:7.20.5, @types/babel__traverse@npm:^7.0.6": + version: 7.20.5 + resolution: "@types/babel__traverse@npm:7.20.5" dependencies: - "@babel/types": "npm:^7.3.0" - checksum: 8df08f5ed92e2983978e7db38281e67c811028cfbd1b1b8740f6a93ba3c382bb126b45b248538409e4106dd3280d0d81da399b43173e5a5444de535ef47f07c2 + "@babel/types": "npm:^7.20.7" + checksum: f0352d537448e1e37f27e6bb8c962d7893720a92fde9d8601a68a93dbc14e15c088b4c0c8f71021d0966d09fba802ef3de11fdb6766c33993f8cf24f1277c6a9 languageName: node linkType: hard @@ -9934,7 +9963,7 @@ __metadata: languageName: node linkType: hard -"JSONStream@npm:^1.0.3, JSONStream@npm:^1.3.5": +"JSONStream@npm:1.3.5, JSONStream@npm:^1.0.3": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" dependencies: @@ -10090,12 +10119,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" +"acorn@npm:^8.1.0, acorn@npm:^8.10.0, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn - checksum: 522310c20fdc3c271caed3caf0f06c51d61cb42267279566edd1d58e83dbc12eebdafaab666a0f0be1b7ad04af9c6bc2a6f478690a9e6391c3c8b165ada917dd + checksum: b688e7e3c64d9bfb17b596e1b35e4da9d50553713b3b3630cf5690f2b023a84eac90c56851e6912b483fe60e8b4ea28b254c07e92f17ef83d72d78745a8352dd languageName: node linkType: hard @@ -11573,15 +11602,15 @@ __metadata: languageName: node linkType: hard -"bin-links@npm:4.0.1": - version: 4.0.1 - resolution: "bin-links@npm:4.0.1" +"bin-links@npm:4.0.3": + version: 4.0.3 + resolution: "bin-links@npm:4.0.3" dependencies: cmd-shim: "npm:^6.0.0" npm-normalize-package-bin: "npm:^3.0.0" read-cmd-shim: "npm:^4.0.0" write-file-atomic: "npm:^5.0.0" - checksum: 217d81ef7bbf0bc37132afe972b16a5ecc298092e81a480a521bf175f81d6ec78d3a23fc75c40436b88a2ed7377bb524c7d13e45d04a33b236248ea78508315e + checksum: 8b4eec67e5d000768cc5a8cd4399d3af55eab059b2b6f864f96ad69bd73d8c4702a9f002a54747d11643cbd3e2a043d91f12bceedcfdcd96321cf186cfb33802 languageName: node linkType: hard @@ -11599,7 +11628,7 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.3.0, bindings@npm:^1.5.0": +"bindings@npm:1.5.0, bindings@npm:^1.3.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" dependencies: @@ -11921,7 +11950,7 @@ __metadata: languageName: node linkType: hard -"browser-resolve@npm:^2.0.0": +"browser-resolve@npm:2.0.0, browser-resolve@npm:^2.0.0": version: 2.0.0 resolution: "browser-resolve@npm:2.0.0" dependencies: @@ -13178,7 +13207,7 @@ __metadata: languageName: node linkType: hard -"combine-source-map@npm:^0.8.0, combine-source-map@npm:~0.8.0": +"combine-source-map@npm:0.8.0, combine-source-map@npm:^0.8.0, combine-source-map@npm:~0.8.0": version: 0.8.0 resolution: "combine-source-map@npm:0.8.0" dependencies: @@ -13351,7 +13380,7 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.1, concat-stream@npm:^1.6.2, concat-stream@npm:~1.6.0": +"concat-stream@npm:1.6.2, concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.1, concat-stream@npm:^1.6.2, concat-stream@npm:~1.6.0": version: 1.6.2 resolution: "concat-stream@npm:1.6.2" dependencies: @@ -13490,14 +13519,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.9.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": +"convert-source-map@npm:2.0.0, convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" checksum: c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 @@ -15242,6 +15264,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:4.1.2, duplexify@npm:^4.1.1": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.0" + checksum: eeb4f362defa4da0b2474d853bc4edfa446faeb1bde76819a68035632c118de91f6a58e6fe05c84f6e6de2548f8323ec8473aa9fe37332c99e4d77539747193e + languageName: node + linkType: hard + "duplexify@npm:^3.1.2, duplexify@npm:^3.5.0, duplexify@npm:^3.5.1": version: 3.7.1 resolution: "duplexify@npm:3.7.1" @@ -15254,18 +15288,6 @@ __metadata: languageName: node linkType: hard -"duplexify@npm:^4.1.1": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" - dependencies: - end-of-stream: "npm:^1.4.1" - inherits: "npm:^2.0.3" - readable-stream: "npm:^3.1.1" - stream-shift: "npm:^1.0.0" - checksum: eeb4f362defa4da0b2474d853bc4edfa446faeb1bde76819a68035632c118de91f6a58e6fe05c84f6e6de2548f8323ec8473aa9fe37332c99e4d77539747193e - languageName: node - linkType: hard - "each-props@npm:^1.3.2": version: 1.3.2 resolution: "each-props@npm:1.3.2" @@ -16185,10 +16207,10 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.0": - version: 3.4.0 - resolution: "eslint-visitor-keys@npm:3.4.0" - checksum: 27aa3ebbb5e19ad56e5de5cb1c97a488f3bb73d253709cf5bb2d104e3121cf3cb19f3580da6f7f9a987b84ab328725aef48c03e430382bb6468267d0264c0fe7 +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 3f357c554a9ea794b094a09bd4187e5eacd1bc0d0653c3adeb87962c548e6a1ab8f982b86963ae1337f5d976004146536dcee5d0e2806665b193fbfbf1a9231b languageName: node linkType: hard @@ -16303,14 +16325,14 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.5.0, espree@npm:^9.5.1": - version: 9.5.1 - resolution: "espree@npm:9.5.1" +"espree@npm:9.6.1, espree@npm:^9.5.0, espree@npm:^9.5.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" dependencies: - acorn: "npm:^8.8.0" + acorn: "npm:^8.9.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^3.4.0" - checksum: 6f1d4f50beebfdea5bfd318487eb1a9a81bda380dd8cfc9910683e23a294c7f2df84781e1f508a8c471962bfd1c0b239dc034f4d3d8c125ca78d09c0ff35e8c0 + eslint-visitor-keys: "npm:^3.4.1" + checksum: 255ab260f0d711a54096bdeda93adff0eadf02a6f9b92f02b323e83a2b7fc258797919437ad331efec3930475feb0142c5ecaaf3cdab4befebd336d47d3f3134 languageName: node linkType: hard @@ -18211,10 +18233,10 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: d83f2968030678f0b8c3f2183d63dcd969344eb8b55b4eb826a94ccac6de8b87c95bebffda37a6386c74f152284eb02956ff2c496897f35d32bdc2628ac68ac5 +"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 languageName: node linkType: hard @@ -19422,6 +19444,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: "npm:^1.1.2" + checksum: c330f8d93f9d23fe632c719d4db3d698ef7d7c367d51548b836069e06a90fa9151e868c8e67353cfe98d67865bf7354855db28fa36eb1b18fa5d4a3f4e7f1c90 + languageName: node + linkType: hard + "hast-util-parse-selector@npm:^2.0.0": version: 2.2.5 resolution: "hast-util-parse-selector@npm:2.2.5" @@ -19600,7 +19631,7 @@ __metadata: languageName: node linkType: hard -"htmlescape@npm:^1.1.0, htmlescape@npm:^1.1.1": +"htmlescape@npm:1.1.1, htmlescape@npm:^1.1.0": version: 1.1.1 resolution: "htmlescape@npm:1.1.1" checksum: c59a915ae6ae076b5720243c8c594fd8c76e927d511ed5f205e4d586f47d521478d7148dc7fbe3d4a0cfc30abcc2dd215b30255903c09ed04eb38bca44367c5d @@ -20325,12 +20356,12 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.12.0, is-core-module@npm:^2.4.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": - version: 2.12.0 - resolution: "is-core-module@npm:2.12.0" +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.4.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - has: "npm:^1.0.3" - checksum: c1585e0695ad4f01ce67189c85ffc27b487c6b23f80f319c27f057f9724f8926c62baf53743bd77a717a0491c86eeb1a07b065e332672a1325872abf16e0cdbc + hasown: "npm:^2.0.0" + checksum: d53bd0cc24b0a0351fb4b206ee3908f71b9bbf1c47e9c9e14e5f06d292af1663704d2abd7e67700d6487b2b7864e0d0f6f10a1edf1892864bdffcb197d1845a2 languageName: node linkType: hard @@ -22544,7 +22575,7 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.0, json-stable-stringify@npm:^1.0.1, json-stable-stringify@npm:^1.0.2": +"json-stable-stringify@npm:1.0.2, json-stable-stringify@npm:^1.0.0, json-stable-stringify@npm:^1.0.2": version: 1.0.2 resolution: "json-stable-stringify@npm:1.0.2" dependencies: @@ -23001,93 +23032,100 @@ __metadata: languageName: node linkType: hard -"lavamoat-browserify@npm:^15.7.4": - version: 15.9.1 - resolution: "lavamoat-browserify@npm:15.9.1" - dependencies: - "@lavamoat/aa": "npm:^3.1.5" - "@lavamoat/lavapack": "npm:^5.4.1" - browser-resolve: "npm:^2.0.0" - concat-stream: "npm:^2.0.0" - convert-source-map: "npm:^1.9.0" - duplexify: "npm:^4.1.1" - json-stable-stringify: "npm:^1.0.1" - lavamoat-core: "npm:^14.4.1" - pify: "npm:^4.0.1" - readable-stream: "npm:^3.6.0" - source-map: "npm:^0.7.4" - through2: "npm:^3.0.0" - checksum: d462d983c433df0e77dbde7cbc122e81554fc0ffbdb4bee05afbc7e3413b4ae6fafd1985068cded5cf693dbf1a97a1de7c0a219fa181bf9086a9fefd231030a5 +"lavamoat-browserify@npm:^17.0.2": + version: 17.0.2 + resolution: "lavamoat-browserify@npm:17.0.2" + dependencies: + "@lavamoat/aa": "npm:^4.0.1" + "@lavamoat/lavapack": "npm:^6.0.2" + browser-resolve: "npm:2.0.0" + concat-stream: "npm:1.6.2" + convert-source-map: "npm:2.0.0" + duplexify: "npm:4.1.2" + json-stable-stringify: "npm:1.0.2" + lavamoat-core: "npm:^15.1.1" + pify: "npm:4.0.1" + readable-stream: "npm:3.6.2" + source-map: "npm:0.5.7" + through2: "npm:2.0.5" + checksum: bada4dab1b15f6a02c93fd701c08a3ffbf1874b9d5a754de42f8e864f182bdaa748e01649d064d83d14d3c0995be9d163c1e0ed189327c8106d6212acf7c22c6 languageName: node linkType: hard -"lavamoat-core@npm:14.4.1": - version: 14.4.1 - resolution: "lavamoat-core@npm:14.4.1" +"lavamoat-core@npm:15.1.1": + version: 15.1.1 + resolution: "lavamoat-core@npm:15.1.1" dependencies: - json-stable-stringify: "npm:^1.0.2" - lavamoat-tofu: "npm:^6.2.1" - merge-deep: "npm:^3.0.3" - checksum: 3ba352e96d728f015f193a671fef28be3c221e486956e693a4ec4690c871aa4b5aa9bd0bfb1bb9b260f1bd7709eb078f839d39c7c065640800d368a55e7e5cc3 + json-stable-stringify: "npm:1.0.2" + lavamoat-tofu: "npm:^7.1.0" + merge-deep: "npm:3.0.3" + type-fest: "npm:4.7.1" + checksum: 7564f6d6f5c5e7934ec93a87d46c687928c8635ec0dabaf4aaea5595df0a097c3cb23131180cff7a23ed6bf444ef01b627168e08546e8f654844a11be31864fa languageName: node linkType: hard -"lavamoat-core@patch:lavamoat-core@npm%3A14.4.1#~/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch": - version: 14.4.1 - resolution: "lavamoat-core@patch:lavamoat-core@npm%3A14.4.1#~/.yarn/patches/lavamoat-core-npm-14.4.1-c4e8bbb016.patch::version=14.4.1&hash=1822ab" +"lavamoat-core@patch:lavamoat-core@npm%3A15.1.1#~/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch": + version: 15.1.1 + resolution: "lavamoat-core@patch:lavamoat-core@npm%3A15.1.1#~/.yarn/patches/lavamoat-core-npm-15.1.1-51fbe39988.patch::version=15.1.1&hash=1424a1" dependencies: - json-stable-stringify: "npm:^1.0.2" - lavamoat-tofu: "npm:^6.2.1" - merge-deep: "npm:^3.0.3" - checksum: 53e042240c5bc61aa61f8fc058734e4324243c2e9541c40c3445686238871a287f72ffce19cfc4c04ccf659e75fbec188460a14b8e6c61b36220042038d2eb18 + json-stable-stringify: "npm:1.0.2" + lavamoat-tofu: "npm:^7.1.0" + merge-deep: "npm:3.0.3" + type-fest: "npm:4.7.1" + checksum: 994e2c67fa55f2ca110fe3d880a6f5e1763b1aea123333792131526cdbb7083fe4f0e3db2e1f502a8517230298295a44869366dfd358a443ea06835c6a8cba47 languageName: node linkType: hard -"lavamoat-tofu@npm:^6.2.1": - version: 6.2.1 - resolution: "lavamoat-tofu@npm:6.2.1" +"lavamoat-tofu@npm:^7.1.0": + version: 7.1.0 + resolution: "lavamoat-tofu@npm:7.1.0" dependencies: - "@babel/parser": "npm:^7.21.8" - "@babel/traverse": "npm:^7.21.5" - checksum: be1fecb988a523c1bcda57e71dc4ce1d57dcb0e01e7f4a72a59e545f96e205e9332f9e24d2f7b24fd8945eff066b7c7c8e515fb870f675a00cb94d132c81ff08 + "@babel/parser": "npm:7.23.6" + "@babel/traverse": "npm:7.23.7" + "@babel/types": "npm:7.23.6" + "@types/babel__traverse": "npm:7.20.5" + type-fest: "npm:4.7.1" + peerDependencies: + lavamoat-core: ^15.0.0 + checksum: ca5c5a1add162bdcf92006591673f5cc609b2100da8bc3e78d50b1090b3cf4515951a106e7004bee5d32b2cd6cd24ebeb97367ea4013ea63770410b9d082b489 languageName: node linkType: hard -"lavamoat-viz@npm:^6.0.11": - version: 6.2.1 - resolution: "lavamoat-viz@npm:6.2.1" - dependencies: - lavamoat-core: "npm:^14.4.1" - ncp: "npm:^2.0.0" - open: "npm:^7.0.3" - pify: "npm:^4.0.1" - serve-handler: "npm:^6.1.5" - yargs: "npm:^16.0.0" +"lavamoat-viz@npm:^7.0.2": + version: 7.0.2 + resolution: "lavamoat-viz@npm:7.0.2" + dependencies: + lavamoat-core: "npm:^15.1.1" + ncp: "npm:2.0.0" + open: "npm:7.4.2" + pify: "npm:4.0.1" + serve-handler: "npm:6.1.5" + yargs: "npm:17.7.2" bin: lavamoat-viz: bin/index.js - checksum: 26ade3b21dd49f4f742e37d2ac52174e792447ed92b470c4618f9ac7397a9bbb51d0c225efb0a6319dfa021a566668acefd5fb07e0e6838e8df7efd508e527a4 + checksum: 3bbcbe7489560b6020b0e1dfb9b14b85d12fb51c580d458a0b91ab6ae61a474868778aeefedf6c71e685f9464ed49f998747d49ad72d2ab1cf533ab2a5535aa3 languageName: node linkType: hard -"lavamoat@npm:^7.1.2": - version: 7.3.1 - resolution: "lavamoat@npm:7.3.1" - dependencies: - "@babel/code-frame": "npm:^7.21.4" - "@babel/highlight": "npm:^7.18.6" - "@lavamoat/aa": "npm:^3.1.5" - bindings: "npm:^1.5.0" - htmlescape: "npm:^1.1.1" - json-stable-stringify: "npm:^1.0.2" - lavamoat-core: "npm:^14.4.1" - lavamoat-tofu: "npm:^6.2.1" - node-gyp-build: "npm:^4.6.0" - resolve: "npm:^1.22.3" - yargs: "npm:^17.7.2" +"lavamoat@npm:^8.0.2": + version: 8.0.2 + resolution: "lavamoat@npm:8.0.2" + dependencies: + "@babel/code-frame": "npm:7.22.13" + "@babel/highlight": "npm:7.22.20" + "@lavamoat/aa": "npm:^4.0.1" + bindings: "npm:1.5.0" + htmlescape: "npm:1.1.1" + json-stable-stringify: "npm:1.0.2" + lavamoat-core: "npm:^15.1.1" + lavamoat-tofu: "npm:^7.1.0" + node-gyp-build: "npm:4.6.1" + resolve: "npm:1.22.8" + yargs: "npm:17.7.2" bin: lavamoat: src/cli.js lavamoat-run-command: src/run-command.js - checksum: e2a294e8c1f911f2d7c33315fbe405c2917c2be9ed77f3504a3e5fbc62cf2aaba043e3cd86e0b7164f0930b687196784f440441f3e9fe5731a9cff1c3027cc4c + checksum: 644b59c86bfd75e33154ee0794aea6e44b64dd649814cb98829d232af117c338311fd65827a098bfb1e815aca6e2456c9a247fb35202d50c16cb08a8930d7689 languageName: node linkType: hard @@ -24226,7 +24264,7 @@ __metadata: languageName: node linkType: hard -"merge-deep@npm:^3.0.3": +"merge-deep@npm:3.0.3": version: 3.0.3 resolution: "merge-deep@npm:3.0.3" dependencies: @@ -24310,8 +24348,8 @@ __metadata: "@fortawesome/fontawesome-free": "npm:^5.13.0" "@keystonehq/bc-ur-registry-eth": "npm:^0.19.1" "@keystonehq/metamask-airgapped-keyring": "npm:^0.13.1" - "@lavamoat/allow-scripts": "npm:^2.3.1" - "@lavamoat/lavapack": "npm:^5.2.4" + "@lavamoat/allow-scripts": "npm:^3.0.1" + "@lavamoat/lavapack": "npm:^6.0.2" "@lavamoat/snow": "npm:^1.5.0" "@material-ui/core": "npm:^4.11.0" "@metamask-institutional/custody-controller": "npm:^0.2.18" @@ -24545,9 +24583,9 @@ __metadata: json-rpc-middleware-stream: "npm:^5.0.1" koa: "npm:^2.7.0" labeled-stream-splicer: "npm:^2.0.2" - lavamoat: "npm:^7.1.2" - lavamoat-browserify: "npm:^15.7.4" - lavamoat-viz: "npm:^6.0.11" + lavamoat: "npm:^8.0.2" + lavamoat-browserify: "npm:^17.0.2" + lavamoat-viz: "npm:^7.0.2" localforage: "npm:^1.9.0" lockfile-lint: "npm:^4.10.6" lodash: "npm:^4.17.21" @@ -24606,7 +24644,7 @@ __metadata: selenium-webdriver: "npm:^4.15.0" semver: "npm:^7.5.4" serve-handler: "npm:^6.1.2" - ses: "npm:^0.18.8" + ses: "npm:^1.1.0" single-call-balance-checker-abi: "npm:^1.0.0" sinon: "npm:^9.0.0" source-map: "npm:^0.7.4" @@ -25810,7 +25848,7 @@ __metadata: languageName: node linkType: hard -"ncp@npm:^2.0.0": +"ncp@npm:2.0.0": version: 2.0.0 resolution: "ncp@npm:2.0.0" bin: @@ -25983,14 +26021,14 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.3.0, node-gyp-build@npm:^4.6.0": - version: 4.6.0 - resolution: "node-gyp-build@npm:4.6.0" +"node-gyp-build@npm:4.6.1, node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.2.2, node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: c8b57abe5e6e4a28dce450e3c0136bcce88d15602c33f1258ed9c9a52f156d34a00dd8864271b2f2acfd6ef4de0af3e75e5e76e771c4bc4f38dd0ee06ad178d8 + checksum: 79b948377492ae8e1aa1c18071661e6020c11f8847d5ce822abd67ec02bee5b21715b1b4861041d2b40d16633824476735bc9a60e81c82c49e715d55ee29b206 languageName: node linkType: hard @@ -26213,6 +26251,13 @@ __metadata: languageName: node linkType: hard +"npm-normalize-package-bin@npm:3.0.1, npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + languageName: node + linkType: hard + "npm-normalize-package-bin@npm:^1.0.0": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" @@ -26220,13 +26265,6 @@ __metadata: languageName: node linkType: hard -"npm-normalize-package-bin@npm:^3.0.0": - version: 3.0.1 - resolution: "npm-normalize-package-bin@npm:3.0.1" - checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf - languageName: node - linkType: hard - "npm-packlist@npm:^1.1.6": version: 1.4.1 resolution: "npm-packlist@npm:1.4.1" @@ -26606,7 +26644,7 @@ __metadata: languageName: node linkType: hard -"open@npm:^7.0.3, open@npm:^7.3.1": +"open@npm:7.4.2, open@npm:^7.3.1": version: 7.4.2 resolution: "open@npm:7.4.2" dependencies: @@ -27371,6 +27409,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:4.0.1, pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec + languageName: node + linkType: hard + "pify@npm:^2.0.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -27385,13 +27430,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec - languageName: node - linkType: hard - "pify@npm:^5.0.0": version: 5.0.0 resolution: "pify@npm:5.0.0" @@ -30072,16 +30110,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.4, resolve@npm:^1.1.5, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.21.0, resolve@npm:^1.22.0, resolve@npm:^1.22.3, resolve@npm:^1.4.0": - version: 1.22.3 - resolution: "resolve@npm:1.22.3" +"resolve@npm:1.22.8, resolve@npm:^1.1.4, resolve@npm:^1.1.5, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.21.0, resolve@npm:^1.22.0, resolve@npm:^1.22.3, resolve@npm:^1.4.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" dependencies: - is-core-module: "npm:^2.12.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 3d733800d5f7525df912e9c4a68ee14574f42fa3676651debe6d2f6f55f8eef35626ad6330745da52943d695760f1ac7ee85b2c24f48be111f744aba7cb2e06d + checksum: c473506ee01eb45cbcfefb68652ae5759e092e6b0fb64547feadf9736a6394f258fbc6f88e00c5ca36d5477fbb65388b272432a3600fa223062e54333c156753 languageName: node linkType: hard @@ -30098,17 +30136,17 @@ __metadata: languageName: node linkType: hard -? "resolve@patch:resolve@npm%3A^1.1.4#optional!builtin, resolve@patch:resolve@npm%3A^1.1.5#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.21.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.4.0#optional!builtin" +? "resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.4#optional!builtin, resolve@patch:resolve@npm%3A^1.1.5#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.18.1#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.21.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.3#optional!builtin, resolve@patch:resolve@npm%3A^1.4.0#optional!builtin" : - version: 1.22.3 - resolution: "resolve@patch:resolve@npm%3A1.22.3#optional!builtin::version=1.22.3&hash=c3c19d" + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: - is-core-module: "npm:^2.12.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: b775dffbad4d4ed3ae498a37d33a96282d64de50955f7642258aeaa2886e419598f4dfe837c0e31bcc6eb448287c1578e899dffe49eca76ef393bf8605a3b543 + checksum: f345cd37f56a2c0275e3fe062517c650bb673815d885e7507566df589375d165bbbf4bdb6aa95600a9bc55f4744b81f452b5a63f95b9f10a72787dba3c90890a languageName: node linkType: hard @@ -30802,7 +30840,7 @@ __metadata: languageName: node linkType: hard -"serve-handler@npm:^6.1.2, serve-handler@npm:^6.1.5": +"serve-handler@npm:6.1.5, serve-handler@npm:^6.1.2": version: 6.1.5 resolution: "serve-handler@npm:6.1.5" dependencies: @@ -30839,6 +30877,15 @@ __metadata: languageName: node linkType: hard +"ses@npm:^1.1.0": + version: 1.1.0 + resolution: "ses@npm:1.1.0" + dependencies: + "@endo/env-options": "npm:^1.1.0" + checksum: b98b360a1d40ebb737cb237ac025b5b6ccf74f21ce000fc9c470241e2db357bd3bd041a400f21fe863acb76543e0b6757cd70ec0f8618df69d5d05be5a222b12 + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -31296,6 +31343,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.5.7, source-map@npm:^0.5.1, source-map@npm:^0.5.6, source-map@npm:^0.5.7, source-map@npm:~0.5.3": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 + languageName: node + linkType: hard + "source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -31303,13 +31357,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.1, source-map@npm:^0.5.6, source-map@npm:^0.5.7, source-map@npm:~0.5.3": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 9b4ac749ec5b5831cad1f8cc4c19c4298ebc7474b24a0acf293e2f040f03f8eeccb3d01f12aa0f90cf46d555c887e03912b83a042c627f419bda5152d89c5269 - languageName: node - linkType: hard - "source-map@npm:^0.7.3, source-map@npm:^0.7.4": version: 0.7.4 resolution: "source-map@npm:0.7.4" @@ -32621,7 +32668,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.0, through2@npm:^2.0.1, through2@npm:^2.0.3, through2@npm:^2.0.5, through2@npm:~2.0.0, through2@npm:~2.0.3": +"through2@npm:2.0.5, through2@npm:^2.0.0, through2@npm:^2.0.1, through2@npm:^2.0.3, through2@npm:^2.0.5, through2@npm:~2.0.0, through2@npm:~2.0.3": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: @@ -32631,7 +32678,7 @@ __metadata: languageName: node linkType: hard -"through2@npm:^3.0.0, through2@npm:^3.0.1": +"through2@npm:^3.0.1": version: 3.0.1 resolution: "through2@npm:3.0.1" dependencies: @@ -33142,6 +33189,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:4.7.1": + version: 4.7.1 + resolution: "type-fest@npm:4.7.1" + checksum: ef21f317738080d71d8603a65bd7136e1e0246980b407e9fe6b4c35cc239b712dd737b06c391e7cde8213d8a733449930b6cc5a3417324b90dddeb84fa167629 + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -33368,7 +33422,7 @@ __metadata: languageName: node linkType: hard -"umd@npm:^3.0.0, umd@npm:^3.0.3": +"umd@npm:3.0.3, umd@npm:^3.0.0": version: 3.0.3 resolution: "umd@npm:3.0.3" bin: @@ -35239,6 +35293,21 @@ __metadata: languageName: node linkType: hard +"yargs@npm:17.7.2, yargs@npm:^17.0.1, yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 + languageName: node + linkType: hard + "yargs@npm:^15.0.0, yargs@npm:^15.0.2": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -35258,21 +35327,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.1, yargs@npm:^17.3.1, yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: "npm:^8.0.1" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.1.1" - checksum: abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 - languageName: node - linkType: hard - "yargs@npm:^7.1.0": version: 7.1.2 resolution: "yargs@npm:7.1.2" From 9f5affca38f83e17c5693176c8e0cc79782c90de Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Tue, 23 Jan 2024 19:07:00 -0330 Subject: [PATCH 06/16] fix: Fix phishing warning page unresponsiveness (#22645) The phishing warning page was unresponsive on Chrome v122. This update resolves the issue. See changelog for details: https://github.com/MetaMask/phishing-warning/blob/main/CHANGELOG.md#303 Related to the issue described in #22533 1. Navigate to a blocked site 2. See that the phishing warning page shows up 3. Ensure that the three buttons/links work correctly ("report a detection problem", "continue to the site", and "Back to safety") Testing on Chrome Canary (v122) is recommended, that's the only browser we've confirmed as not working previous to this PR. --- package.json | 2 +- .../phishing-detection.spec.js | 6 +++--- yarn.lock | 16 ++++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 7f421692e7fe..fd740980ec83 100644 --- a/package.json +++ b/package.json @@ -397,7 +397,7 @@ "@metamask/eslint-config-nodejs": "^9.0.0", "@metamask/eslint-config-typescript": "^9.0.1", "@metamask/forwarder": "^1.1.0", - "@metamask/phishing-warning": "^3.0.0", + "@metamask/phishing-warning": "^3.0.3", "@metamask/test-dapp": "^7.2.0", "@playwright/test": "^1.39.0", "@sentry/cli": "^2.19.4", diff --git a/test/e2e/tests/phishing-controller/phishing-detection.spec.js b/test/e2e/tests/phishing-controller/phishing-detection.spec.js index 8ed14fc438ba..5b8493a74d6b 100644 --- a/test/e2e/tests/phishing-controller/phishing-detection.spec.js +++ b/test/e2e/tests/phishing-controller/phishing-detection.spec.js @@ -184,7 +184,7 @@ describe('Phishing Detection', function () { }); 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`, + `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%2F`, ); }, ); @@ -223,7 +223,7 @@ describe('Phishing Detection', function () { await driver.getCurrentUrl(), `https://github.com/MetaMask/eth-phishing-detect/issues/new?title=[Legitimate%20Site%20Blocked]%20${encodeURIComponent( phishingSite.hostname, - )}&body=${encodeURIComponent(phishingSite.href)}`, + )}&body=${encodeURIComponent(`${phishingSite.origin}/`)}`, ); }, ); @@ -257,7 +257,7 @@ describe('Phishing Detection', function () { }); 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`, + `https://github.com/phishfort/phishfort-lists/issues/new?title=[Legitimate%20Site%20Blocked]%20127.0.0.1&body=http%3A%2F%2F127.0.0.1%2F`, ); }, ); diff --git a/yarn.lock b/yarn.lock index 3326d20322a6..da3f40c76861 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4826,19 +4826,19 @@ __metadata: languageName: node linkType: hard -"@metamask/phishing-warning@npm:^3.0.0": - version: 3.0.0 - resolution: "@metamask/phishing-warning@npm:3.0.0" +"@metamask/phishing-warning@npm:^3.0.3": + version: 3.0.3 + resolution: "@metamask/phishing-warning@npm:3.0.3" dependencies: "@metamask/design-tokens": "npm:^1.12.0" "@metamask/object-multiplex": "npm:^2.0.0" "@metamask/post-message-stream": "npm:^7.0.0" eth-phishing-detect: "npm:^1.2.0" globalthis: "npm:1.0.1" - punycode: "npm:^2.3.0" + punycode: "npm:^2.3.1" readable-stream: "npm:^3.6.2" - ses: "npm:^0.18.8" - checksum: 86aeb3c46fb1f47d59017d8de60545d11cf16d3784c9cb3adcfe4b9c8f775c06889ced2ed816c75a87581bbe5919db11b2f3176b095f46b62d3bb31560ecd008 + ses: "npm:^1.1.0" + checksum: 12702062f0fb84b029d330d1f05a7d6cd6bdc28e7bc0f3507267944a93e5274d1c92920fb2d96dbce7997d949af14a1ca0726ee6485527ec9663577c1393bda2 languageName: node linkType: hard @@ -24401,7 +24401,7 @@ __metadata: "@metamask/obs-store": "npm:^8.1.0" "@metamask/permission-controller": "npm:^6.0.0" "@metamask/phishing-controller": "npm:^7.0.1" - "@metamask/phishing-warning": "npm:^3.0.0" + "@metamask/phishing-warning": "npm:^3.0.3" "@metamask/polling-controller": "npm:^1.0.1" "@metamask/post-message-stream": "npm:^7.0.0" "@metamask/ppom-validator": "npm:^0.10.0" @@ -28408,7 +28408,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 From c4033e3ff7c8454e3ff68be1b56e9397a3a158ca Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 24 Jan 2024 16:24:47 -0330 Subject: [PATCH 07/16] Cherry-pick changes to IFRAME_EXECUTION_ENVIRONMENT_URL in builds.yml from commit e956826 --- builds.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builds.yml b/builds.yml index 78c25bb830c4..e19aecd00f54 100644 --- a/builds.yml +++ b/builds.yml @@ -27,7 +27,7 @@ buildTypes: - SEGMENT_WRITE_KEY_REF: SEGMENT_PROD_WRITE_KEY - ALLOW_LOCAL_SNAPS: false - REQUIRE_SNAPS_ALLOWLIST: true - - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.4.1/index.html + - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.5.0/index.html - KEYRING_SNAPS_REGISTRY_URL: https://metamask.github.io/keyring-snaps-registry/prod/registry.json # Main build uses the default browser manifest manifestOverrides: false @@ -61,7 +61,7 @@ buildTypes: - SEGMENT_FLASK_WRITE_KEY - ALLOW_LOCAL_SNAPS: true - REQUIRE_SNAPS_ALLOWLIST: false - - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.4.1/index.html + - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.5.0/index.html - SUPPORT_LINK: https://metamask-flask.zendesk.com/hc - SUPPORT_REQUEST_LINK: https://metamask-flask.zendesk.com/hc/en-us/requests/new - INFURA_ENV_KEY_REF: INFURA_FLASK_PROJECT_ID @@ -81,7 +81,7 @@ buildTypes: - SEGMENT_FLASK_WRITE_KEY - ALLOW_LOCAL_SNAPS: true - REQUIRE_SNAPS_ALLOWLIST: false - - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.4.1/index.html + - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.5.0/index.html - SUPPORT_LINK: https://metamask-flask.zendesk.com/hc - SUPPORT_REQUEST_LINK: https://metamask-flask.zendesk.com/hc/en-us/requests/new - INFURA_ENV_KEY_REF: INFURA_FLASK_PROJECT_ID @@ -101,7 +101,7 @@ buildTypes: - SEGMENT_WRITE_KEY_REF: SEGMENT_MMI_WRITE_KEY - ALLOW_LOCAL_SNAPS: false - REQUIRE_SNAPS_ALLOWLIST: true - - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.4.1/index.html + - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/3.5.0/index.html - MMI_CONFIGURATION_SERVICE_URL: https://configuration.metamask-institutional.io/v2/configuration/default - SUPPORT_LINK: https://mmi-support.zendesk.com/hc/en-us - SUPPORT_REQUEST_LINK: https://mmi-support.zendesk.com/hc/en-us/requests/new From c63775ae69416fae37d8f2f2b69f3ebf4cf3be44 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Wed, 24 Jan 2024 16:32:15 -0330 Subject: [PATCH 08/16] v11.7.5 --- CHANGELOG.md | 7 ++++++- package.json | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5586ed6e00d..82468c81f2dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [11.7.5] +### Fixed +- Fix compatability of MetaMask Extension and Chrome versions v122 and higher [#22590](https://github.com/MetaMask/metamask-extension/pull/22590) + ## [11.7.4] ## [11.7.3] @@ -4268,7 +4272,8 @@ Update styles and spacing on the critical error page ([#20350](https://github.c ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.4...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.5...HEAD +[11.7.5]: https://github.com/MetaMask/metamask-extension/compare/v11.7.4...v11.7.5 [11.7.4]: https://github.com/MetaMask/metamask-extension/compare/v11.7.3...v11.7.4 [11.7.3]: https://github.com/MetaMask/metamask-extension/compare/v11.7.2...v11.7.3 [11.7.2]: https://github.com/MetaMask/metamask-extension/compare/v11.7.1...v11.7.2 diff --git a/package.json b/package.json index fd740980ec83..20de780fd4cc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "11.7.4", + "version": "11.7.5", "private": true, "repository": { "type": "git", From 2add9fdfc56d785e964797a87c55f2fb8a7a5349 Mon Sep 17 00:00:00 2001 From: Marina Boboc <120041701+benjisclowder@users.noreply.github.com> Date: Mon, 29 Jan 2024 18:11:45 +0200 Subject: [PATCH 09/16] V11.8.0 changelog (#22285) Adding the v11.8.0 changelog --------- Co-authored-by: Danica Shen Co-authored-by: Dan J Miller --- CHANGELOG.md | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c38fee26e519..29ffea7f9a81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [11.8.0] +### Added +- Enhanced the Networks List with drag and drop functionality ([#21163] (https://github.com/MetaMask/metamask-extension/pull/21163)) +- Added a deprecation warning for the Aurora network to inform users about its upcoming removal ([#21933] (https://github.com/MetaMask/metamask-extension/pull/21933)) + +### Changed +- Corrected a typo and improved the alignment of 'Terms of use' ([#22227] (https://github.com/MetaMask/metamask-extension/pull/22227)) +- Changed the title of MetaMask pop-up window to 'MetaMask Dialog' ([#21680] (https://github.com/MetaMask/metamask-extension/pull/21680)) +- Refined the Max fee calculation in Smart Swaps to ensure it does not exceed twice the estimated gas fee ([#22127] (https://github.com/MetaMask/metamask-extension/pull/22127)) +- [MMI] Enabled the Cancel and Speed Up options for non-custodial accounts in MetaMask Institutional ([#22164] (https://github.com/MetaMask/metamask-extension/pull/22164)) +- [MMI] Updated Consensys URLs from .net to .io ([#22107] (https://github.com/MetaMask/metamask-extension/pull/22107)) +- [FLASK] Updated the background color of the Snap Avatar ([#22137] (https://github.com/MetaMask/metamask-extension/pull/22137)) +- [FLASK] Updated the color of the tooltip icon in the transaction confirmation section ([#22144] (https://github.com/MetaMask/metamask-extension/pull/22144)) +- [FLASK] Updated the weighting of permissions ([#22063] (https://github.com/MetaMask/metamask-extension/pull/22063)) + +### Fixed +- Improved the token autodetection feature to automatically trigger detection when the setting is enabled ([#21749] (https://github.com/MetaMask/metamask-extension/pull/21749)) +- Fixed an issue causing duplicate entries for confirmed incoming transactions ([#21840] (https://github.com/MetaMask/metamask-extension/pull/21840)) +- Fixed a rounding issue causing incorrect gas fee displays on the Optimism network ([#19960] (https://github.com/MetaMask/metamask-extension/pull/19960)) +- Fixed an issue causing incorrect EIP-6963 provider names in MetaMask production builds ([#22090] (https://github.com/MetaMask/metamask-extension/pull/22090)) +- Fixed a crash that occurred when the list of ordered networks was empty ([#22109] (https://github.com/MetaMask/metamask-extension/pull/22109)) +- Fixed an issue where the settings search function only supported English and numbers ([#21013] (https://github.com/MetaMask/metamask-extension/pull/21013)) + ## [11.7.5] ### Fixed - Fix compatability of MetaMask Extension and Chrome versions v122 and higher [#22590](https://github.com/MetaMask/metamask-extension/pull/22590) @@ -4274,8 +4296,7 @@ Update styles and spacing on the critical error page ([#20350](https://github.c - Added the ability to restore accounts from seed words. [Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.8.0...HEAD -[11.8.0]: https://github.com/MetaMask/metamask-extension/compare/v11.7.0...v11.8.0 -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v11.7.5...HEAD +[11.8.0]: https://github.com/MetaMask/metamask-extension/compare/v11.7.5...v11.8.0 [11.7.5]: https://github.com/MetaMask/metamask-extension/compare/v11.7.4...v11.7.5 [11.7.4]: https://github.com/MetaMask/metamask-extension/compare/v11.7.3...v11.7.4 [11.7.3]: https://github.com/MetaMask/metamask-extension/compare/v11.7.2...v11.7.3 From b3636d239e32b9aa6c0f3a9da951a7029ed9313b Mon Sep 17 00:00:00 2001 From: Howard Braham Date: Tue, 6 Feb 2024 12:51:16 -0800 Subject: [PATCH 10/16] e2e: remove failOnConsoleError and replace with ignoredConsoleErrors (#22801) `failOnConsoleError` is kind of a bad solution, because it encourages us to ignore real console errors by oversight. I have removed that whole system and replaced it with `ignoredConsoleErrors`, an Array. Review of the changes: - 52 files where the only change is just removing `failOnConsoleError: false` - helpers.js changes `failOnConsoleError` to `ignoredConsoleErrors` - driver.js has the meat of the new system - Added one legitimate use of the new system in account-details.spec.js test: `'should not reveal private key when password is incorrect'` `ignoredConsoleErrors: ['Error in verifying password']` - Fixed an actual console error that nobody had noticed before because `failOnConsoleError` was hiding it!!!!!!!! Error was `Insufficient number of substitutions for key "permission_viewBip32PublicKeysDescription" with locale "en"` Fixed in ui/helpers/utils/permission.js --- test/e2e/accounts/common.ts | 1 - test/e2e/accounts/create-snap-account.spec.ts | 3 - test/e2e/accounts/remove-account-snap.spec.ts | 1 - .../accounts/snap-account-settings.spec.ts | 1 - ...account-signatures-and-disconnects.spec.ts | 1 - test/e2e/helpers.js | 8 +-- test/e2e/mv3-perf-stats/init-load-stats.js | 2 +- test/e2e/snaps/test-snap-bip-32.spec.js | 1 - test/e2e/snaps/test-snap-bip-44.spec.js | 1 - test/e2e/snaps/test-snap-cronjob.spec.js | 1 - test/e2e/snaps/test-snap-dialog.spec.js | 1 - test/e2e/snaps/test-snap-ethprovider.spec.js | 1 - test/e2e/snaps/test-snap-get-file.spec.js | 1 - test/e2e/snaps/test-snap-get-locale.spec.js | 1 - test/e2e/snaps/test-snap-getentropy.spec.js | 1 - test/e2e/snaps/test-snap-homepage.spec.js | 1 - test/e2e/snaps/test-snap-installed.spec.js | 1 - test/e2e/snaps/test-snap-lifecycle.spec.js | 1 - test/e2e/snaps/test-snap-management.spec.js | 1 - test/e2e/snaps/test-snap-managestate.spec.js | 1 - test/e2e/snaps/test-snap-namelookup.spec.js | 1 - .../e2e/snaps/test-snap-networkaccess.spec.js | 1 - test/e2e/snaps/test-snap-notification.spec.js | 1 - test/e2e/snaps/test-snap-revoke-perm.spec.js | 1 - test/e2e/snaps/test-snap-rpc.spec.js | 1 - .../e2e/snaps/test-snap-txinsights-v2.spec.js | 1 - test/e2e/snaps/test-snap-txinsights.spec.js | 1 - .../snaps/test-snap-update-component.spec.js | 1 - test/e2e/snaps/test-snap-update.spec.js | 1 - test/e2e/snaps/test-snap-wasm.spec.js | 1 - .../account-menu/account-details.spec.js | 2 +- .../tests/account-menu/add-account.spec.js | 1 - test/e2e/tests/backup-restore.spec.js | 1 - test/e2e/tests/change-language.spec.js | 8 --- test/e2e/tests/custom-rpc-history.spec.js | 2 - test/e2e/tests/errors.spec.js | 13 ---- .../e2e/tests/full-size-view-settings.spec.js | 1 - test/e2e/tests/import-flow.spec.js | 2 - test/e2e/tests/incremental-security.spec.js | 1 - test/e2e/tests/metamask-responsive-ui.spec.js | 2 - .../e2e/tests/nft/erc1155-interaction.spec.js | 2 - test/e2e/tests/nft/erc721-interaction.spec.js | 6 -- test/e2e/tests/onboarding.spec.js | 7 --- .../phishing-detection.spec.js | 7 --- test/e2e/tests/provider-api.spec.js | 1 - test/e2e/tests/security-provider.spec.js | 4 -- test/e2e/tests/send-edit.spec.js | 2 - test/e2e/tests/send-hex-address.spec.js | 4 -- test/e2e/tests/send-to-contract.spec.js | 1 - .../settings-security-reveal-srp.spec.js | 1 - test/e2e/tests/state-logs.spec.js | 1 - test/e2e/tests/swaps/swap-eth.spec.js | 1 - test/e2e/tests/switch-custom-network.spec.js | 1 - test/e2e/vault-decryption-chrome.spec.js | 61 +++++++++---------- test/e2e/webdriver/driver.js | 60 +++++++++--------- ui/helpers/utils/permission.js | 1 + 56 files changed, 66 insertions(+), 167 deletions(-) diff --git a/test/e2e/accounts/common.ts b/test/e2e/accounts/common.ts index 44f70ca3f3de..7ed33d573020 100644 --- a/test/e2e/accounts/common.ts +++ b/test/e2e/accounts/common.ts @@ -34,7 +34,6 @@ export const accountSnapFixtures = (title: string | undefined) => { }) .build(), ganacheOptions: multipleGanacheOptions, - failOnConsoleError: false, title, }; }; diff --git a/test/e2e/accounts/create-snap-account.spec.ts b/test/e2e/accounts/create-snap-account.spec.ts index e47f5870acf2..e53e89937139 100644 --- a/test/e2e/accounts/create-snap-account.spec.ts +++ b/test/e2e/accounts/create-snap-account.spec.ts @@ -16,7 +16,6 @@ describe('Create Snap Account', function (this: Suite) { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test?.fullTitle(), }, async ({ driver }: { driver: Driver }) => { @@ -95,7 +94,6 @@ describe('Create Snap Account', function (this: Suite) { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test?.fullTitle(), }, async ({ driver }: { driver: Driver }) => { @@ -188,7 +186,6 @@ describe('Create Snap Account', function (this: Suite) { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test?.fullTitle(), }, async ({ driver }: { driver: Driver }) => { diff --git a/test/e2e/accounts/remove-account-snap.spec.ts b/test/e2e/accounts/remove-account-snap.spec.ts index dc22d117783d..51039f69d573 100644 --- a/test/e2e/accounts/remove-account-snap.spec.ts +++ b/test/e2e/accounts/remove-account-snap.spec.ts @@ -10,7 +10,6 @@ describe('Remove Account Snap', function (this: Suite) { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test?.fullTitle(), }, async ({ driver }: { driver: Driver }) => { diff --git a/test/e2e/accounts/snap-account-settings.spec.ts b/test/e2e/accounts/snap-account-settings.spec.ts index d84e1b71349c..2d5811528b10 100644 --- a/test/e2e/accounts/snap-account-settings.spec.ts +++ b/test/e2e/accounts/snap-account-settings.spec.ts @@ -9,7 +9,6 @@ describe('Add snap account experimental settings', function (this: Suite) { { fixtures: new FixtureBuilder().build(), title: this.test?.fullTitle(), - failOnConsoleError: false, }, async ({ driver }: { driver: Driver }) => { await driver.navigate(); diff --git a/test/e2e/accounts/snap-account-signatures-and-disconnects.spec.ts b/test/e2e/accounts/snap-account-signatures-and-disconnects.spec.ts index ecf8826b007d..d00540360317 100644 --- a/test/e2e/accounts/snap-account-signatures-and-disconnects.spec.ts +++ b/test/e2e/accounts/snap-account-signatures-and-disconnects.spec.ts @@ -17,7 +17,6 @@ describe('Snap Account Signatures and Disconnects', function (this: Suite) { dapp: true, fixtures: new FixtureBuilder().build(), ganacheOptions: multipleGanacheOptions, - failOnConsoleError: false, title: this.test?.fullTitle(), }, async ({ driver }: { driver: Driver }) => { diff --git a/test/e2e/helpers.js b/test/e2e/helpers.js index 13b583c8aec8..5f2e133b3fc9 100644 --- a/test/e2e/helpers.js +++ b/test/e2e/helpers.js @@ -37,7 +37,7 @@ async function withFixtures(options, testSuite) { driverOptions, dappOptions, title, - failOnConsoleError = true, + ignoredConsoleErrors = [], dappPath = undefined, dappPaths, testSpecificMock = function () { @@ -125,8 +125,8 @@ async function withFixtures(options, testSuite) { webDriver = driver.driver; if (process.env.SELENIUM_BROWSER === 'chrome') { - await driver.checkBrowserForExceptions(failOnConsoleError); - await driver.checkBrowserForConsoleErrors(failOnConsoleError); + await driver.checkBrowserForExceptions(ignoredConsoleErrors); + await driver.checkBrowserForConsoleErrors(ignoredConsoleErrors); } let driverProxy; @@ -160,7 +160,7 @@ async function withFixtures(options, testSuite) { }); const errorsAndExceptions = driver.summarizeErrorsAndExceptions(); - if (errorsAndExceptions && failOnConsoleError) { + if (errorsAndExceptions) { throw new Error(errorsAndExceptions); } diff --git a/test/e2e/mv3-perf-stats/init-load-stats.js b/test/e2e/mv3-perf-stats/init-load-stats.js index 0b4078d532aa..f9975557d3af 100755 --- a/test/e2e/mv3-perf-stats/init-load-stats.js +++ b/test/e2e/mv3-perf-stats/init-load-stats.js @@ -22,7 +22,7 @@ async function profilePageLoad() { const parsedLogs = {}; try { await withFixtures( - { fixtures: new FixtureBuilder().build(), failOnConsoleError: false }, + { fixtures: new FixtureBuilder().build() }, async ({ driver }) => { await driver.delay(tinyDelayMs); await driver.navigate(); diff --git a/test/e2e/snaps/test-snap-bip-32.spec.js b/test/e2e/snaps/test-snap-bip-32.spec.js index 9578dc64469d..81125f9fbaef 100644 --- a/test/e2e/snaps/test-snap-bip-32.spec.js +++ b/test/e2e/snaps/test-snap-bip-32.spec.js @@ -14,7 +14,6 @@ describe('Test Snap bip-32', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-bip-44.spec.js b/test/e2e/snaps/test-snap-bip-44.spec.js index 8e6d2e14f36b..a7150db09611 100644 --- a/test/e2e/snaps/test-snap-bip-44.spec.js +++ b/test/e2e/snaps/test-snap-bip-44.spec.js @@ -14,7 +14,6 @@ describe('Test Snap bip-44', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-cronjob.spec.js b/test/e2e/snaps/test-snap-cronjob.spec.js index 6a40146f6169..b1a437ccae9c 100644 --- a/test/e2e/snaps/test-snap-cronjob.spec.js +++ b/test/e2e/snaps/test-snap-cronjob.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Cronjob', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-dialog.spec.js b/test/e2e/snaps/test-snap-dialog.spec.js index 4274e5810660..bf8a2fe47b5c 100644 --- a/test/e2e/snaps/test-snap-dialog.spec.js +++ b/test/e2e/snaps/test-snap-dialog.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Dialog', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-ethprovider.spec.js b/test/e2e/snaps/test-snap-ethprovider.spec.js index 59e772f4cbba..93fb6d2249d4 100644 --- a/test/e2e/snaps/test-snap-ethprovider.spec.js +++ b/test/e2e/snaps/test-snap-ethprovider.spec.js @@ -13,7 +13,6 @@ describe('Test Snap ethereum_provider', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-get-file.spec.js b/test/e2e/snaps/test-snap-get-file.spec.js index 19cec53f3d64..9317ff0d5f82 100644 --- a/test/e2e/snaps/test-snap-get-file.spec.js +++ b/test/e2e/snaps/test-snap-get-file.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Get File', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.title, }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-get-locale.spec.js b/test/e2e/snaps/test-snap-get-locale.spec.js index 7bb49afed60f..0bcc9dea660f 100644 --- a/test/e2e/snaps/test-snap-get-locale.spec.js +++ b/test/e2e/snaps/test-snap-get-locale.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Get Locale', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-getentropy.spec.js b/test/e2e/snaps/test-snap-getentropy.spec.js index c37b03bce15c..07bcb551e271 100644 --- a/test/e2e/snaps/test-snap-getentropy.spec.js +++ b/test/e2e/snaps/test-snap-getentropy.spec.js @@ -13,7 +13,6 @@ describe('Test Snap getEntropy', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-homepage.spec.js b/test/e2e/snaps/test-snap-homepage.spec.js index d7a4a0f103c6..a16022ea9052 100644 --- a/test/e2e/snaps/test-snap-homepage.spec.js +++ b/test/e2e/snaps/test-snap-homepage.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Homepage', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-installed.spec.js b/test/e2e/snaps/test-snap-installed.spec.js index 0ac866c88a9b..59fbda63fc71 100644 --- a/test/e2e/snaps/test-snap-installed.spec.js +++ b/test/e2e/snaps/test-snap-installed.spec.js @@ -46,7 +46,6 @@ describe('Test Snap Installed', function () { }) .build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), testSpecificMock: mockSegment, }, diff --git a/test/e2e/snaps/test-snap-lifecycle.spec.js b/test/e2e/snaps/test-snap-lifecycle.spec.js index 65b10a5ddfad..15e9ad301649 100644 --- a/test/e2e/snaps/test-snap-lifecycle.spec.js +++ b/test/e2e/snaps/test-snap-lifecycle.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Lifecycle Hooks', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-management.spec.js b/test/e2e/snaps/test-snap-management.spec.js index 8cc73d005c84..a4c7414eaf96 100644 --- a/test/e2e/snaps/test-snap-management.spec.js +++ b/test/e2e/snaps/test-snap-management.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Management', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-managestate.spec.js b/test/e2e/snaps/test-snap-managestate.spec.js index 804bd6b7e603..d6afe253d3bb 100644 --- a/test/e2e/snaps/test-snap-managestate.spec.js +++ b/test/e2e/snaps/test-snap-managestate.spec.js @@ -13,7 +13,6 @@ describe('Test Snap manageState', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-namelookup.spec.js b/test/e2e/snaps/test-snap-namelookup.spec.js index fd1eee6e685c..07a4b3bb0b87 100644 --- a/test/e2e/snaps/test-snap-namelookup.spec.js +++ b/test/e2e/snaps/test-snap-namelookup.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Name Lookup', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-networkaccess.spec.js b/test/e2e/snaps/test-snap-networkaccess.spec.js index 0fdd30ee207a..83a40ca9595b 100644 --- a/test/e2e/snaps/test-snap-networkaccess.spec.js +++ b/test/e2e/snaps/test-snap-networkaccess.spec.js @@ -13,7 +13,6 @@ describe('Test Snap networkAccess', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-notification.spec.js b/test/e2e/snaps/test-snap-notification.spec.js index 62f42d9dbf43..4255222ad974 100644 --- a/test/e2e/snaps/test-snap-notification.spec.js +++ b/test/e2e/snaps/test-snap-notification.spec.js @@ -13,7 +13,6 @@ describe('Test Snap Notification', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-revoke-perm.spec.js b/test/e2e/snaps/test-snap-revoke-perm.spec.js index 6245f3dfea9a..608137ec9bd0 100644 --- a/test/e2e/snaps/test-snap-revoke-perm.spec.js +++ b/test/e2e/snaps/test-snap-revoke-perm.spec.js @@ -14,7 +14,6 @@ describe('Test Snap revoke permission', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-rpc.spec.js b/test/e2e/snaps/test-snap-rpc.spec.js index 0c13be60722b..3f6102aca281 100644 --- a/test/e2e/snaps/test-snap-rpc.spec.js +++ b/test/e2e/snaps/test-snap-rpc.spec.js @@ -13,7 +13,6 @@ describe('Test Snap RPC', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-txinsights-v2.spec.js b/test/e2e/snaps/test-snap-txinsights-v2.spec.js index 3cf1e6406956..132f5dea807e 100644 --- a/test/e2e/snaps/test-snap-txinsights-v2.spec.js +++ b/test/e2e/snaps/test-snap-txinsights-v2.spec.js @@ -13,7 +13,6 @@ describe('Test Snap TxInsights-v2', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-txinsights.spec.js b/test/e2e/snaps/test-snap-txinsights.spec.js index ab2fb0b16fdc..57739cddbe48 100644 --- a/test/e2e/snaps/test-snap-txinsights.spec.js +++ b/test/e2e/snaps/test-snap-txinsights.spec.js @@ -13,7 +13,6 @@ describe('Test Snap TxInsights', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-update-component.spec.js b/test/e2e/snaps/test-snap-update-component.spec.js index c3dfc5dc5203..81154c7afce1 100644 --- a/test/e2e/snaps/test-snap-update-component.spec.js +++ b/test/e2e/snaps/test-snap-update-component.spec.js @@ -21,7 +21,6 @@ describe('Test Snap update via snaps component', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-update.spec.js b/test/e2e/snaps/test-snap-update.spec.js index 366ee6d8e734..9b73110ded73 100644 --- a/test/e2e/snaps/test-snap-update.spec.js +++ b/test/e2e/snaps/test-snap-update.spec.js @@ -13,7 +13,6 @@ describe('Test Snap update', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/snaps/test-snap-wasm.spec.js b/test/e2e/snaps/test-snap-wasm.spec.js index 4b18e83eb968..3e21bc696aba 100644 --- a/test/e2e/snaps/test-snap-wasm.spec.js +++ b/test/e2e/snaps/test-snap-wasm.spec.js @@ -13,7 +13,6 @@ describe('Test Snap WASM', function () { { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/tests/account-menu/account-details.spec.js b/test/e2e/tests/account-menu/account-details.spec.js index bbb0be897bee..e5da7af7c0bd 100644 --- a/test/e2e/tests/account-menu/account-details.spec.js +++ b/test/e2e/tests/account-menu/account-details.spec.js @@ -177,7 +177,7 @@ describe('Show account details', function () { { fixtures: new FixtureBuilder().build(), title: this.test.fullTitle(), - failOnConsoleError: false, + ignoredConsoleErrors: ['Error in verifying password'], }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/account-menu/add-account.spec.js b/test/e2e/tests/account-menu/add-account.spec.js index 3f1351f6d273..dd4c76a931bf 100644 --- a/test/e2e/tests/account-menu/add-account.spec.js +++ b/test/e2e/tests/account-menu/add-account.spec.js @@ -61,7 +61,6 @@ describe('Add account', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); diff --git a/test/e2e/tests/backup-restore.spec.js b/test/e2e/tests/backup-restore.spec.js index 67094dd16ed6..2f7fef0961ff 100644 --- a/test/e2e/tests/backup-restore.spec.js +++ b/test/e2e/tests/backup-restore.spec.js @@ -57,7 +57,6 @@ describe('Backup and Restore', function () { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await createDownloadFolder(downloadsFolder); diff --git a/test/e2e/tests/change-language.spec.js b/test/e2e/tests/change-language.spec.js index d25f52e10719..c2c6656a4bd9 100644 --- a/test/e2e/tests/change-language.spec.js +++ b/test/e2e/tests/change-language.spec.js @@ -49,7 +49,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -73,7 +72,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -117,7 +115,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -154,7 +151,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -210,7 +206,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -244,7 +239,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -282,7 +276,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { @@ -311,7 +304,6 @@ describe('Settings - general tab, validate the change language functionality:', fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/custom-rpc-history.spec.js b/test/e2e/tests/custom-rpc-history.spec.js index ce8ed34185b5..3fa26e7b5d48 100644 --- a/test/e2e/tests/custom-rpc-history.spec.js +++ b/test/e2e/tests/custom-rpc-history.spec.js @@ -114,7 +114,6 @@ describe('Custom RPC history', function () { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -262,7 +261,6 @@ describe('Custom RPC history', function () { .build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/errors.spec.js b/test/e2e/tests/errors.spec.js index 4f1901c65c63..2ac8bce4dd71 100644 --- a/test/e2e/tests/errors.spec.js +++ b/test/e2e/tests/errors.spec.js @@ -226,7 +226,6 @@ describe('Sentry errors', function () { }, ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryMigratorError, }, async ({ driver, mockedEndpoint }) => { @@ -254,7 +253,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -293,7 +291,6 @@ describe('Sentry errors', function () { }, ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryMigratorError, }, async ({ driver, mockedEndpoint }) => { @@ -333,7 +330,6 @@ describe('Sentry errors', function () { }, ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryMigratorError, }, async ({ driver, mockedEndpoint }) => { @@ -391,7 +387,6 @@ describe('Sentry errors', function () { }, ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryInvariantMigrationError, }, async ({ driver, mockedEndpoint }) => { @@ -437,7 +432,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -480,7 +474,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -542,7 +535,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -575,7 +567,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -608,7 +599,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -652,7 +642,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -707,7 +696,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { @@ -748,7 +736,6 @@ describe('Sentry errors', function () { .build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, testSpecificMock: mockSentryTestError, }, async ({ driver, mockedEndpoint }) => { diff --git a/test/e2e/tests/full-size-view-settings.spec.js b/test/e2e/tests/full-size-view-settings.spec.js index be2d0c71d273..6ac27d8fe0c7 100644 --- a/test/e2e/tests/full-size-view-settings.spec.js +++ b/test/e2e/tests/full-size-view-settings.spec.js @@ -26,7 +26,6 @@ describe('Full-size View Setting @no-mmi', function () { .withNetworkControllerOnMainnet() .withPermissionControllerConnectedToTestDapp() .build(), - failOnConsoleError: false, ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), }, diff --git a/test/e2e/tests/import-flow.spec.js b/test/e2e/tests/import-flow.spec.js index bca7398e079c..68e97e7002c3 100644 --- a/test/e2e/tests/import-flow.spec.js +++ b/test/e2e/tests/import-flow.spec.js @@ -47,7 +47,6 @@ describe('Import flow @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -171,7 +170,6 @@ describe('Import flow @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); diff --git a/test/e2e/tests/incremental-security.spec.js b/test/e2e/tests/incremental-security.spec.js index bc0b83c6fc55..0bc9f33f5cdc 100644 --- a/test/e2e/tests/incremental-security.spec.js +++ b/test/e2e/tests/incremental-security.spec.js @@ -27,7 +27,6 @@ describe('Incremental Security', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, dappPath: 'send-eth-with-private-key-test', }, async ({ driver }) => { diff --git a/test/e2e/tests/metamask-responsive-ui.spec.js b/test/e2e/tests/metamask-responsive-ui.spec.js index 2252072172a8..f7e511af791a 100644 --- a/test/e2e/tests/metamask-responsive-ui.spec.js +++ b/test/e2e/tests/metamask-responsive-ui.spec.js @@ -18,7 +18,6 @@ describe('MetaMask Responsive UI', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), driverOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -89,7 +88,6 @@ describe('MetaMask Responsive UI', function () { fixtures: new FixtureBuilder().build(), driverOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, ganacheServer }) => { await driver.navigate(); diff --git a/test/e2e/tests/nft/erc1155-interaction.spec.js b/test/e2e/tests/nft/erc1155-interaction.spec.js index 4c7c56b269a6..4677d51c234e 100644 --- a/test/e2e/tests/nft/erc1155-interaction.spec.js +++ b/test/e2e/tests/nft/erc1155-interaction.spec.js @@ -23,7 +23,6 @@ describe('ERC1155 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -78,7 +77,6 @@ describe('ERC1155 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); diff --git a/test/e2e/tests/nft/erc721-interaction.spec.js b/test/e2e/tests/nft/erc721-interaction.spec.js index 268acd6ef5a7..24270f3276a9 100644 --- a/test/e2e/tests/nft/erc721-interaction.spec.js +++ b/test/e2e/tests/nft/erc721-interaction.spec.js @@ -22,7 +22,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -149,7 +148,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -244,7 +242,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -294,7 +291,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -364,7 +360,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); @@ -433,7 +428,6 @@ describe('ERC721 NFTs testdapp interaction', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, _, contractRegistry }) => { const contract = contractRegistry.getContractAddress(smartContract); diff --git a/test/e2e/tests/onboarding.spec.js b/test/e2e/tests/onboarding.spec.js index 51a1be758c59..9b473b3d3e46 100644 --- a/test/e2e/tests/onboarding.spec.js +++ b/test/e2e/tests/onboarding.spec.js @@ -36,7 +36,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -57,7 +56,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -82,7 +80,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -104,7 +101,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -143,7 +139,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -185,7 +180,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); @@ -213,7 +207,6 @@ describe('MetaMask onboarding @no-mmi', function () { fixtures: new FixtureBuilder({ onboarding: true }).build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await driver.navigate(); diff --git a/test/e2e/tests/phishing-controller/phishing-detection.spec.js b/test/e2e/tests/phishing-controller/phishing-detection.spec.js index afaa72bc051e..ba40628f01bb 100644 --- a/test/e2e/tests/phishing-controller/phishing-detection.spec.js +++ b/test/e2e/tests/phishing-controller/phishing-detection.spec.js @@ -46,7 +46,6 @@ describe('Phishing Detection', function () { }); }, dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -81,7 +80,6 @@ describe('Phishing Detection', function () { dappOptions: { numberOfDapps: 2, }, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -120,7 +118,6 @@ describe('Phishing Detection', function () { dappOptions: { numberOfDapps: 2, }, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -159,7 +156,6 @@ describe('Phishing Detection', function () { mockConfigLookupOnWarningPage(mockServer, { statusCode: 500 }); }, dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -196,7 +192,6 @@ describe('Phishing Detection', function () { }); }, dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -232,7 +227,6 @@ describe('Phishing Detection', function () { }); }, dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -270,7 +264,6 @@ describe('Phishing Detection', function () { dappOptions: { numberOfDapps: 2, }, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/provider-api.spec.js b/test/e2e/tests/provider-api.spec.js index 41183448cef9..b2cd456d5f41 100644 --- a/test/e2e/tests/provider-api.spec.js +++ b/test/e2e/tests/provider-api.spec.js @@ -54,7 +54,6 @@ describe('MetaMask', function () { await withFixtures( { dapp: true, - failOnConsoleError: false, fixtures: new FixtureBuilder() .withPermissionControllerConnectedToTestDapp() .build(), diff --git a/test/e2e/tests/security-provider.spec.js b/test/e2e/tests/security-provider.spec.js index 48bccd2baf32..52cf9bf40cd5 100644 --- a/test/e2e/tests/security-provider.spec.js +++ b/test/e2e/tests/security-provider.spec.js @@ -83,7 +83,6 @@ describe('Transaction security provider', function () { testSpecificMock: async (mockServer) => await mockSecurityProviderDetection(mockServer, 'malicious'), dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -121,7 +120,6 @@ describe('Transaction security provider', function () { testSpecificMock: async (mockServer) => await mockSecurityProviderDetection(mockServer, 'notSafe'), dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -159,7 +157,6 @@ describe('Transaction security provider', function () { testSpecificMock: async (mockServer) => await mockSecurityProviderDetection(mockServer, 'notMalicious'), dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -197,7 +194,6 @@ describe('Transaction security provider', function () { testSpecificMock: async (mockServer) => await mockSecurityProviderDetection(mockServer, 'requestNotVerified'), dapp: true, - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/send-edit.spec.js b/test/e2e/tests/send-edit.spec.js index 4463abbe541c..1314a88e4050 100644 --- a/test/e2e/tests/send-edit.spec.js +++ b/test/e2e/tests/send-edit.spec.js @@ -16,7 +16,6 @@ describe('Editing Confirm Transaction', function () { .build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); @@ -86,7 +85,6 @@ describe('Editing Confirm Transaction', function () { .build(), ganacheOptions: generateGanacheOptions({ hardfork: 'london' }), title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/tests/send-hex-address.spec.js b/test/e2e/tests/send-hex-address.spec.js index bf6c2cb084d1..d81c396c44de 100644 --- a/test/e2e/tests/send-hex-address.spec.js +++ b/test/e2e/tests/send-hex-address.spec.js @@ -19,7 +19,6 @@ describe('Send ETH to a 40 character hexadecimal address', function () { .build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, ganacheServer }) => { await logInWithBalanceValidation(driver, ganacheServer); @@ -66,7 +65,6 @@ describe('Send ETH to a 40 character hexadecimal address', function () { .build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, ganacheServer }) => { await logInWithBalanceValidation(driver, ganacheServer); @@ -120,7 +118,6 @@ describe('Send ERC20 to a 40 character hexadecimal address', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, ganacheServer }) => { await logInWithBalanceValidation(driver, ganacheServer); @@ -185,7 +182,6 @@ describe('Send ERC20 to a 40 character hexadecimal address', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, ganacheServer }) => { await logInWithBalanceValidation(driver, ganacheServer); diff --git a/test/e2e/tests/send-to-contract.spec.js b/test/e2e/tests/send-to-contract.spec.js index 35285d6fff8b..72561a2d2876 100644 --- a/test/e2e/tests/send-to-contract.spec.js +++ b/test/e2e/tests/send-to-contract.spec.js @@ -18,7 +18,6 @@ describe('Send ERC20 token to contract address', function () { ganacheOptions: defaultGanacheOptions, smartContract, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver, contractRegistry }) => { const contractAddress = await contractRegistry.getContractAddress( diff --git a/test/e2e/tests/settings-security-reveal-srp.spec.js b/test/e2e/tests/settings-security-reveal-srp.spec.js index 6433b39c9321..59affd6f4bf7 100644 --- a/test/e2e/tests/settings-security-reveal-srp.spec.js +++ b/test/e2e/tests/settings-security-reveal-srp.spec.js @@ -20,7 +20,6 @@ describe('Reveal SRP through settings', function () { { fixtures: new FixtureBuilder().build(), title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await passwordUnlockOpenSRPRevealQuiz(driver); diff --git a/test/e2e/tests/state-logs.spec.js b/test/e2e/tests/state-logs.spec.js index 7762850d9141..c5d6ed705390 100644 --- a/test/e2e/tests/state-logs.spec.js +++ b/test/e2e/tests/state-logs.spec.js @@ -32,7 +32,6 @@ describe('State logs', function () { fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await createDownloadFolder(downloadsFolder); diff --git a/test/e2e/tests/swaps/swap-eth.spec.js b/test/e2e/tests/swaps/swap-eth.spec.js index 2b0512924165..f0b32172cf28 100644 --- a/test/e2e/tests/swaps/swap-eth.spec.js +++ b/test/e2e/tests/swaps/swap-eth.spec.js @@ -15,7 +15,6 @@ describe('Swap Eth for another Token @no-mmi', function () { await withFixtures( { ...withFixturesOptions, - failOnConsoleError: false, title: this.test.fullTitle(), }, async ({ driver }) => { diff --git a/test/e2e/tests/switch-custom-network.spec.js b/test/e2e/tests/switch-custom-network.spec.js index 1d55c94ddc2d..c51eb6c7eb4a 100644 --- a/test/e2e/tests/switch-custom-network.spec.js +++ b/test/e2e/tests/switch-custom-network.spec.js @@ -24,7 +24,6 @@ describe('Switch ethereum chain', function () { }, }), title: this.test.fullTitle(), - failOnConsoleError: false, }, async ({ driver }) => { await unlockWallet(driver); diff --git a/test/e2e/vault-decryption-chrome.spec.js b/test/e2e/vault-decryption-chrome.spec.js index 47848475e8e3..aa1019149b54 100644 --- a/test/e2e/vault-decryption-chrome.spec.js +++ b/test/e2e/vault-decryption-chrome.spec.js @@ -76,40 +76,35 @@ async function getSRP(driver) { describe('Vault Decryptor Page', function () { it('is able to decrypt the vault using the vault-decryptor webapp', async function () { - await withFixtures( - { - failOnConsoleError: false, - }, - async ({ driver }) => { - await driver.navigate(); - // the first app launch opens a new tab, we need to switch the focus - // to the first one. - await driver.switchToWindowWithTitle('MetaMask'); - // create a new vault through onboarding flow - await completeCreateNewWalletOnboardingFlowWithOptOut( - driver, - WALLET_PASSWORD, - ); - // close popover if any (Announcements etc..) - await closePopoverIfPresent(driver); - // obtain SRP - const seedPhrase = await getSRP(driver); + await withFixtures({}, async ({ driver }) => { + await driver.navigate(); + // the first app launch opens a new tab, we need to switch the focus + // to the first one. + await driver.switchToWindowWithTitle('MetaMask'); + // create a new vault through onboarding flow + await completeCreateNewWalletOnboardingFlowWithOptOut( + driver, + WALLET_PASSWORD, + ); + // close popover if any (Announcements etc..) + await closePopoverIfPresent(driver); + // obtain SRP + const seedPhrase = await getSRP(driver); - // navigate to the Vault decryptor webapp - await driver.openNewPage(VAULT_DECRYPTOR_PAGE); - // fill the input field with storage recovered from filesystem - await driver.clickElement('[name="vault-source"]'); - const inputField = await driver.findElement('#fileinput'); - inputField.press(await getExtensionStorageFilePath(driver)); - // fill in the password - await driver.fill('#passwordinput', WALLET_PASSWORD); - // decrypt - await driver.clickElement('.decrypt'); - const decrypted = await driver.findElement('.content div div div'); - const recoveredVault = JSON.parse(await decrypted.getText()); + // navigate to the Vault decryptor webapp + await driver.openNewPage(VAULT_DECRYPTOR_PAGE); + // fill the input field with storage recovered from filesystem + await driver.clickElement('[name="vault-source"]'); + const inputField = await driver.findElement('#fileinput'); + inputField.press(await getExtensionStorageFilePath(driver)); + // fill in the password + await driver.fill('#passwordinput', WALLET_PASSWORD); + // decrypt + await driver.clickElement('.decrypt'); + const decrypted = await driver.findElement('.content div div div'); + const recoveredVault = JSON.parse(await decrypted.getText()); - assert.equal(recoveredVault[0].data.mnemonic, seedPhrase); - }, - ); + assert.equal(recoveredVault[0].data.mnemonic, seedPhrase); + }); }); }); diff --git a/test/e2e/webdriver/driver.js b/test/e2e/webdriver/driver.js index e98f068f6d5e..04903cb03ed7 100644 --- a/test/e2e/webdriver/driver.js +++ b/test/e2e/webdriver/driver.js @@ -632,25 +632,28 @@ class Driver { return browserLogs; } - async checkBrowserForExceptions(failOnConsoleError) { + async checkBrowserForExceptions(ignoredConsoleErrors) { const cdpConnection = await this.driver.createCDPConnection('page'); this.driver.onLogException(cdpConnection, (exception) => { const { description } = exception.exceptionDetails.exception; - this.exceptions.push(description); - logBrowserError(failOnConsoleError, description); + + const ignored = logBrowserError(ignoredConsoleErrors, description); + if (!ignored) { + this.exceptions.push(description); + } }); } - async checkBrowserForConsoleErrors(failOnConsoleError) { - const ignoredErrorMessages = [ + async checkBrowserForConsoleErrors(_ignoredConsoleErrors) { + const ignoredConsoleErrors = _ignoredConsoleErrors.concat([ // Third-party Favicon 404s show up as errors 'favicon.ico - Failed to load resource: the server responded with a status of 404', // Sentry rate limiting 'Failed to load resource: the server responded with a status of 429', // 4Byte 'Failed to load resource: the server responded with a status of 502 (Bad Gateway)', - ]; + ]); const cdpConnection = await this.driver.createCDPConnection('page'); @@ -664,25 +667,20 @@ class Driver { // If we received an SES_UNHANDLED_REJECTION from Chrome, eventDescriptions.length will be nonzero // Update: as of January 2024, this code path may never happen const [eventDescription] = eventDescriptions; - const ignore = ignoredErrorMessages.some((message) => - eventDescription?.description.includes(message), + const ignored = logBrowserError( + ignoredConsoleErrors, + eventDescription?.description, ); - if (!ignore) { - const isWarning = logBrowserError( - failOnConsoleError, - eventDescription?.description, - ); - - if (!isWarning) { - this.errors.push(eventDescription?.description); - } + + if (!ignored) { + this.errors.push(eventDescription?.description); } } else if (event.args.length !== 0) { const newError = this.#getErrorFromEvent(event); - const isWarning = logBrowserError(failOnConsoleError, newError); + const ignored = logBrowserError(ignoredConsoleErrors, newError); - if (!isWarning) { + if (!ignored) { this.errors.push(newError); } } @@ -708,24 +706,28 @@ class Driver { } } -function logBrowserError(failOnConsoleError, errorMessage) { - let isWarning = false; +function logBrowserError(ignoredConsoleErrors, errorMessage) { + let ignored = false; - console.error('\n----Received an error from Chrome----'); + console.error('\n-----Received an error from Chrome-----'); console.error(errorMessage); - console.error('---------End of Chrome error---------'); - console.error( - `-----failOnConsoleError is ${failOnConsoleError ? 'true-' : 'false'}-----`, - ); + console.error('----------End of Chrome error----------'); if (errorMessage.startsWith('Warning:')) { - console.error("----We will ignore this 'Warning'----"); - isWarning = true; + console.error("-----We will ignore this 'Warning'-----"); + ignored = true; + } else if (isInIgnoreList(errorMessage, ignoredConsoleErrors)) { + console.error('---This error is on the ignore list----'); + ignored = true; } console.error('\n'); - return isWarning; + return ignored; +} + +function isInIgnoreList(errorMessage, ignoreList) { + return ignoreList.some((ignore) => errorMessage.includes(ignore)); } function collectMetrics() { diff --git a/ui/helpers/utils/permission.js b/ui/helpers/utils/permission.js index 5ebdf57b6dd3..8a4bb5fb1124 100644 --- a/ui/helpers/utils/permission.js +++ b/ui/helpers/utils/permission.js @@ -134,6 +134,7 @@ export const PERMISSION_DESCRIPTIONS = deepFreeze({ > {friendlyName} , + getSnapNameComponent(targetSubjectMetadata), ]), }; } From 635901a2b2e4f65b933d362cb2f82a6ff89dd270 Mon Sep 17 00:00:00 2001 From: Olusegun Akintayo Date: Wed, 7 Feb 2024 09:41:57 +0100 Subject: [PATCH 11/16] Move security alerts out of Experimental settings on Extension (#22813) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## **Description** We should move security alerts feature out of `Settings > Experimental` to `Settings > Security & Privacy` under the Security section below the SRP reveal feature. ## **Related issues** Fixes: [#1764](https://github.com/MetaMask/MetaMask-planning/issues/1764) ## **Manual testing steps** 1. Go to this Settings -> Experimental 2. You should see blockaid settings 3. Go to Settings -> Security & privacy 4. You should NOT see blockaid under SRP Reveal 5. Checkout this branch 6. Go to this Settings -> Experimental 7. You should NOT see blockaid settings 8. Go to Settings -> Security & privacy 9. You should see blockaid under SRP Reveal ## **Screenshots/Recordings** ### **Before** https://github.com/MetaMask/metamask-extension/assets/44811/ca5b399e-184b-4ba9-8d1e-4461ce13f324 ### **After** https://github.com/MetaMask/metamask-extension/assets/44811/ac8cff81-382b-492d-9f77-998f1e2bd68a ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Coding Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md). - [x] I've clearly explained what problem this PR is solving and how it is solved. - [x] I've linked related issues - [x] I've included manual testing steps - [x] I've included screenshots/recordings if applicable - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. - [x] I’ve properly set the pull request status: - [ ] In case it's not yet "ready for review", I've set it to "draft". - [x] In case it's "ready for review", I've changed it from "draft" to "non-draft". ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --- .../ppom-blockaid-toggle-metrics.spec.js | 4 +- test/e2e/tests/ppom-toggle-settings.spec.js | 2 +- .../experimental-tab.test.js.snap | 181 ----------------- .../experimental-tab.component.js | 191 ++---------------- .../experimental-tab.container.js | 21 -- .../experimental-tab/experimental-tab.test.js | 65 +----- .../__snapshots__/security-tab.test.js.snap | 185 +++++++++++++++++ .../security-tab/security-tab.component.js | 176 ++++++++++++++++ .../security-tab/security-tab.container.js | 23 ++- .../security-tab/security-tab.test.js | 69 ++++++- 10 files changed, 469 insertions(+), 448 deletions(-) diff --git a/test/e2e/tests/ppom-blockaid-toggle-metrics.spec.js b/test/e2e/tests/ppom-blockaid-toggle-metrics.spec.js index 25e98c67767a..ec763422c112 100644 --- a/test/e2e/tests/ppom-blockaid-toggle-metrics.spec.js +++ b/test/e2e/tests/ppom-blockaid-toggle-metrics.spec.js @@ -77,7 +77,7 @@ describe('PPOM Blockaid Alert - Metrics @no-mmi', function () { '[data-testid="account-options-menu-button"]', ); await driver.clickElement({ text: 'Settings', tag: 'div' }); - await driver.clickElement({ text: 'Experimental', tag: 'div' }); + await driver.clickElement({ text: 'Security & privacy', tag: 'div' }); await driver.clickElement( '[data-testid="settings-toggle-security-alert-blockaid"] .toggle-button > div', ); @@ -89,7 +89,7 @@ describe('PPOM Blockaid Alert - Metrics @no-mmi', function () { '[data-testid="account-options-menu-button"]', ); await driver.clickElement({ text: 'Settings', tag: 'div' }); - await driver.clickElement({ text: 'Experimental', tag: 'div' }); + await driver.clickElement({ text: 'Security & privacy', tag: 'div' }); await driver.clickElement( '[data-testid="settings-toggle-security-alert-blockaid"] .toggle-button > div', ); diff --git a/test/e2e/tests/ppom-toggle-settings.spec.js b/test/e2e/tests/ppom-toggle-settings.spec.js index b6343a38a969..a355abed98a7 100644 --- a/test/e2e/tests/ppom-toggle-settings.spec.js +++ b/test/e2e/tests/ppom-toggle-settings.spec.js @@ -28,7 +28,7 @@ describe('PPOM Settings @no-mmi', function () { ); await driver.clickElement({ text: 'Settings', tag: 'div' }); - await driver.clickElement({ text: 'Experimental', tag: 'div' }); + await driver.clickElement({ text: 'Security & privacy', tag: 'div' }); await driver.clickElement( '[data-testid="settings-toggle-security-alert-blockaid"] .toggle-button > div', diff --git a/ui/pages/settings/experimental-tab/__snapshots__/experimental-tab.test.js.snap b/ui/pages/settings/experimental-tab/__snapshots__/experimental-tab.test.js.snap index 7e0c3c9db857..6440e15c130c 100644 --- a/ui/pages/settings/experimental-tab/__snapshots__/experimental-tab.test.js.snap +++ b/ui/pages/settings/experimental-tab/__snapshots__/experimental-tab.test.js.snap @@ -71,187 +71,6 @@ exports[`ExperimentalTab with desktop enabled renders ExperimentalTab component
-

- Security -

-
- - Security alerts - -

- This feature alerts you to malicious activity by actively reviewing transaction and signature requests. Always do your own due diligence before approving any requests. There's no guarantee that this feature will detect all malicious activity. By enabling this feature you agree to the provider's terms of use. -

-
-

- Select your preferred provider -

-
-
-
-

- Blockaid -

-
-

- Recommended -

-
-
-
- Privacy preserving - no data is shared with third parties. Available on Arbitrum, Avalanche, BNB chain, Ethereum Mainnet, Linea, Optimism and Polygon. -
-
-