-
Notifications
You must be signed in to change notification settings - Fork 5.4k
release: 13.10.0 #37825
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
release: 13.10.0 #37825
+20,310
−6,800
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Version Bump After Release This PR bumps the main branch version from 13.9.0 to 13.10.0 after cutting the release branch. ### Why this is needed: - **Nightly builds**: Each nightly build needs to be one minor version ahead of the current release candidate - **Version conflicts**: Prevents conflicts between nightlies and release candidates - **Platform alignment**: Maintains version alignment between MetaMask mobile and extension - **Update systems**: Ensures nightlies are accepted by app stores and browser update systems ### What changed: - Version bumped from `13.9.0` to `13.10.0` - Platform: `extension` - Files updated by `set-semvar-version.sh` script ### Next steps: This PR should be **manually reviewed and merged by the release manager** to maintain proper version flow. ### Related: - Release version: 13.9.0 - Release branch: release/13.9.0 - Platform: extension - Test mode: false --- *This PR was automatically created by the `create-platform-release-pr.sh` script.* <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Bumps `package.json` version from `13.9.0` to `13.10.0`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit d3799bf. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: metamaskbot <[email protected]>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Allow user to select quoted swap. ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: MetaMask/MetaMask-planning#6108 ## **Manual testing steps** 1. Submit a swap 2. Check swap selection option on confirmation page 3. Confirmation should update as user selects different swap options ## **Screenshots/Recordings** TODO ## **Pre-merge author checklist** - [X] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [X] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds swap selection on the confirmation screen to switch between dapp’s current swap and a MetaMask-quoted swap, updating txParams/batch via remote-flagged UI, with quote detection, metric fixes, tests, and minor styling. > > - **Confirmations UI**: > - `ui/pages/.../dapp-swap-comparison-banner.tsx`: Add "Current" vs "Save + Earn" selection; dispatch `updateTransaction` to swap between original dapp tx and selected quote (`txParams`, `batchTransactions`, `txParamsOriginal`); auto-select MetaMask when it’s a quoted swap; gate with remote flag `dappSwapUi.enabled/threshold`; allow test origin; minor style token update in `index.scss`. > - **Hooks**: > - New `useSwapCheck` to detect quoted swaps (diffs `txParamsOriginal` vs `txParams`). > - `useDappSwapComparisonInfo`: now returns `selectedQuote`; reads from `txParamsOriginal` when present; refines quote timing; no-op safety tweaks; metric capture ordering updates. > - `useDappSwapComparisonLatencyMetrics`: fix quote request latency calculation. > - **Gas UI**: > - `EditGasFeesRow`: hide edit-gas button when `isQuotedSwap` is true; tests added. > - **Tests**: > - Add/expand tests for banner interactions (button clicks dispatch), swap check, comparison info (selected quote and metrics). > - **Config**: > - Remove `DAPP_SWAP_SHIELD_ENABLED` from `builds.yml` and test env. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 933ebfb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> In this PR, we have added the logic to stop the animation once completed. Also added a browser back logic for login options. Jira Link: https://consensyssoftware.atlassian.net/browse/SL-278 [](https://codespaces.new/MetaMask/metamask-extension/pull/37581?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: stopped reloading of animation once completed ## **Related issues** Fixes: ## **Manual testing steps** 1. Open Extension 2. validate animation reloading 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/7c01d5bc-2aeb-4591-84e6-c359e73a71c1 https://github.com/user-attachments/assets/1ccacae4-1aec-4fbd-b170-e879e54970b5 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Persists Rive animation completion to skip replays, switches welcome flow to context-based skipping, and syncs login option visibility via the `?login` query param; updates navigation and tests. > > - **Onboarding animations**: > - Add `animationCompleted` map and `setIsAnimationCompleted` to `RiveWasmContext` (`ui/contexts/rive-wasm/index.tsx`). > - `MetamaskWordMarkAnimation` sets completion on unmount and consumes the new setter; updates effect deps (`ui/pages/onboarding-flow/welcome/metamask-wordmark-animation.tsx`). > - `welcome` uses `animationCompleted.MetamaskWordMarkAnimation` to decide `shouldSkipAnimation` (replaces URL-based check) (`ui/pages/onboarding-flow/welcome/welcome.js`). > - **Login flow URL syncing**: > - `WelcomeLogin` reads `?login=` to control option view and writes it on selection via `navigate` (`ui/pages/onboarding-flow/welcome/welcome-login.tsx`). > - **Navigation adjustments**: > - `AccountExist` returns to `ONBOARDING_WELCOME_ROUTE` without `?from=...`; tests updated accordingly (`ui/pages/onboarding-flow/account-exist/*`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 709317b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Show Priority Tag on Menu > Support when shield subscription is active or paused <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37590?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Show Priority Tag on Menu > Support when shield subscription is active or paused ## **Related issues** Add shield icon with animation Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Displays a Priority tag on Global Menu > Support when Shield subscription is active or paused, using a memoized `showPriorityTag` condition. > > - **UI (Global Menu)** (`ui/components/multichain/global-menu/global-menu.tsx`): > - Show `Tag` with `priority` label on Support when `getIsShieldSubscriptionActive` or `getIsShieldSubscriptionPaused` and `basicFunctionality` are true. > - Add `getIsShieldSubscriptionPaused` import and introduce `useMemo`-based `showPriorityTag`. > - Replace inline condition with `showPriorityTag` for rendering the Priority tag. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 51991c0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** - Updated copywriting for `Shield plan` page and `Subscription confirmation` page - Removed `Shield plan` footer note https://www.figma.com/design/HTAO1SrmixV4ppv7qIvLoa/Metamask-Transaction-Shield?node-id=12769-126948&t=dpj6EeZul3sgHFVg-4 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37595?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Shield plan copywriting update and removed footer note ## **Related issues** Fixes: ## **Manual testing steps** 1. Login to an account without shield subscription but has enough token for subscription 2. Go to Menu > Settings > Transaction Shield 3. You will be redirected to Shield plan page 4. Toggle Payment methods and Payment terms and observe changes ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** **Crypto payment monthly and yearly** <img width="412" height="614" alt="Screenshot 2025-11-07 at 2 51 47 AM" src="https://github.com/user-attachments/assets/91485b4e-789f-482c-9a0d-0999a76fb0fc" /> <img width="414" height="614" alt="Screenshot 2025-11-07 at 2 51 36 AM" src="https://github.com/user-attachments/assets/9a7ac4e4-9f59-4212-a11a-a07bec9273ce" /> **Card payment monthly and yearly** <img width="413" height="614" alt="Screenshot 2025-11-07 at 2 52 17 AM" src="https://github.com/user-attachments/assets/7ffc10b0-b828-4377-b511-399a2ea575f9" /> <img width="411" height="614" alt="Screenshot 2025-11-07 at 2 52 06 AM" src="https://github.com/user-attachments/assets/9fc5c95f-3932-4e80-baea-27c3959e9b1e" /> **14 days free trial** <img width="514" height="723" alt="Screenshot 2025-11-07 at 2 53 01 AM" src="https://github.com/user-attachments/assets/2fb92c8a-d319-4c05-9049-c632c0ba06fc" /> <!-- [screenshots/recordings] --> ### **After** **Crypto payment monthly and yearly** <img width="411" height="612" alt="Screenshot 2025-11-07 at 2 49 26 AM" src="https://github.com/user-attachments/assets/0b485c60-bd1e-489b-99c7-bb1bfdbeb216" /> <img width="410" height="611" alt="Screenshot 2025-11-07 at 2 48 29 AM" src="https://github.com/user-attachments/assets/408a20db-60b4-44de-8bf9-1ec0e97a6480" /> **Card payment monthly and yearly** <img width="409" height="609" alt="Screenshot 2025-11-07 at 2 49 48 AM" src="https://github.com/user-attachments/assets/b682e747-cc91-4ee3-9ae8-297159253c7e" /> <img width="409" height="611" alt="Screenshot 2025-11-07 at 2 49 38 AM" src="https://github.com/user-attachments/assets/d067aa9c-e57b-49a8-bc45-2af2e3487dc2" /> **Free 14-day trial** <img width="514" height="723" alt="Screenshot 2025-11-07 at 2 56 09 AM" src="https://github.com/user-attachments/assets/a28c572c-2011-4974-a0cd-69b4db7e4e04" /> <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates Shield Plan copy and dynamic plan details (card/crypto, month/year), removes footer auto‑renew note, and aligns i18n strings. > > - **Shield Plan UI (`ui/pages/shield-plan/shield-plan.tsx`)**: > - Refactors `planDetails` to show context-aware copy: > - Card: `shieldPlanDetails2Card`. > - Crypto: Uses `shieldPlanDetails2CryptoMonth` or `shieldPlanDetails2CryptoYear` based on plan; adds `shieldPlanDetails3` only for monthly. > - Removes footer auto-renew note under the Continue button. > - Cleans up unused var and updates hook deps. > - **Localization (`app/_locales/*/messages.json`)**: > - Updates trial copy to `"Free $1-day trial"` with descriptions. > - Replaces/introduces Shield Plan detail keys: `shieldPlanDetails2Card`, new `shieldPlanDetails2CryptoMonth`/`Year`, and sets `shieldPlanDetails3` to "Billed monthly, cancel anytime". > - Removes deprecated `shieldPlanAutoRenew` and old `shieldPlanDetails2` (en/en_GB); aligns en/GB; minor additions in `ga`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 98b3609. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…t "Premature close" errors (#37400) ## **Description** This PR is an AI-generated fix aiming to fix the #1 error in Sentry (3.8M occurrences/month) by adding graceful shutdown handlers to extension context streams, preventing "ERR_STREAM_PREMATURE_CLOSE" errors. The error was initially discussed in this [Slack thread](https://consensys.slack.com/archives/CTQAGKY5V/p1761904147325279?thread_ts=1761646886.397379&cid=CTQAGKY5V). #### Disclaimer Since we haven't found a reliable way to manually reproduce these "Premature close" errors, there's no "before/after proof" that this PR fixes it. ### Problem When underlying transport streams (e.g., `WindowPostMessageStream`, `ExtensionPortStream`) close or end abruptly—during page navigation, tab closure, or extension disconnection—the `ObjectMultiplex` instances in **extension context** do not gracefully shut down. This results in "Premature close" errors being thrown by the stream pipeline. ### Solution Added graceful shutdown handlers to **extension context** streams that: 1. **Listen for transport termination**: Attach `once('close')` and `once('end')` listeners to underlying transport streams 2. **Proactively close muxes**: When transport terminates, check if mux is still open (`!destroyed && !writableEnded`) and call `mux.end()` before pipeline error detection kicks in 3. **Prevent error propagation**: By closing gracefully, we avoid "ERR_STREAM_PREMATURE_CLOSE" errors in the pipeline ### Key Design Decision: Page Context vs Extension Context **Why handlers are ONLY in extension context streams:** | Context | Files | Needs Handlers? | Reason | |---------|-------|-----------------|--------| | **Page Context** | `inpage.js` | ❌ **NO** | Browser automatically destroys the entire script execution context on navigation. Adding handlers can actually CAUSE disconnection errors during rapid navigation. | | **Extension Context** | `provider-stream.ts`<br>`phishing-stream.ts`<br>`cookie-handler-stream.ts` | ✅ **YES** | Extension context persists across page navigations. Muxes remain active when transports disconnect, causing "Premature close" errors without explicit cleanup. | This approach mirrors the solution in [#33470](#33470) for CAIP streams. [](https://codespaces.new/MetaMask/metamask-extension/pull/37400?quickstart=1) ## **Changelog** CHANGELOG entry: Fixed "Premature close" stream errors in extension context by adding graceful shutdown handlers ## **Related issues** Fixes: #26337 Fixes: #35241 Fixes: #21078 ## **Manual testing steps** (disclaimer: the error is hard to reproduce, even with these manual testing steps) 1. Open a dapp page connected to MetaMask (e.g., https://metamask.github.io/test-dapp/) 2. Rapidly navigate between pages multiple times or close/reopen tabs 3. Open DevTools Console and check for errors 4. Open Extension Background Console: `chrome://extensions` → MetaMask → "service worker" 5. Verify no "Premature close" errors appear during page navigation 6. Test deep link navigation: Navigate to `chrome-extension://{extension-id}/home.html#link?u=/buy` and verify it redirects cleanly without errors **Expected**: Clean shutdowns with no "Premature close" errors in console ## **Screenshots/Recordings** ### **Before** - "Premature close" errors appear in extension background console during page navigation - Sentry reports 3.8M occurrences per month ### **After** - Extension context streams shut down gracefully - No "Premature close" errors during normal operations - E2E tests pass (including deep-link tests that navigate rapidly) ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Add graceful shutdown handlers to extension-context multiplexers for provider, phishing, and cookie-handler streams, plus tests; clarify no handlers in page-context in inpage. > > - **Streams (extension context)**: > - **Graceful shutdown handlers**: End muxes on underlying transport `close`/`end` to avoid `ERR_STREAM_PREMATURE_CLOSE` in: > - `app/scripts/streams/provider-stream.ts` (`pageMux`, `extensionMux`) > - `app/scripts/streams/phishing-stream.ts` (`phishingPageMux`, `phishingExtMux`) > - `app/scripts/streams/cookie-handler-stream.ts` (`cookieHandlerPageMux`, `cookieHandlerMux`) > - **Logging/notifications**: Preserve existing pipeline callbacks; continue logging via `logStreamDisconnectWarning` and sending `METAMASK_STREAM_FAILURE` where applicable. > - **Inpage (page context)**: > - `app/scripts/inpage.js`: Add documentation explaining why graceful shutdown handlers are not added in page context. > - **Tests**: > - Add filter tests to assert unconditional logging on pipeline completion/error: > - `provider-stream.filter.test.ts` > - `phishing-stream.filter.test.ts` > - `cookie-handler-stream.filter.test.ts` > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e72ec5e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** We recently changed it so `onActive` fires once the client has been unlocked. This PR adjusts the hook that provides the `active` flag to the same behavior. [](https://codespaces.new/MetaMask/metamask-extension/pull/37607?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Updates client activity to require both UI open and wallet unlocked, and adjusts Snap client-status E2E test expectations. > > - **Snaps / Controller**: > - Update `getIsActive` in `app/scripts/metamask-controller.js` to return `this._isClientOpen && isUnlocked` (was only `this._isClientOpen`). > - **Tests**: > - Adjust `test/e2e/snaps/test-snap-clientstatus.spec.ts` to expect `active: false` when `locked: true`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 29c0bf4. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This bumps the Snaps packages, which mainly contain some bug fixes, and the addition of client and platform versions in `snap_getClientStatus`. [](https://codespaces.new/MetaMask/metamask-extension/pull/37582?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Include client version and platform version in `snap_getClientStatus` response. ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrade Snaps packages and iframe env, add client/platform versions to client status, skip network switching for Snap origins, remove Snap `dynamicPermissions`, and update related E2E tests. > > - **Snaps/Controllers**: > - Remove `dynamicPermissions` from `SnapControllerInit` and its test. > - In `metamask-controller`, skip `NetworkController.setActiveNetwork` when origin is a Snap (`isSnapId`). > - Expose `getVersion` to Snaps (returns `process.env.METAMASK_VERSION`). > - **Build/Dependencies**: > - Bump `@metamask/snaps-controllers` → `^16.1.0`, `@metamask/snaps-execution-environments` → `^10.2.3`, `@metamask/snaps-rpc-methods` → `^14.1.0`, `@metamask/snaps-sdk` → `^10.1.0`, and `@metamask/preinstalled-example-snap` → `^0.7.2`. > - Update `IFRAME_EXECUTION_ENVIRONMENT_URL` to `.../iframe/10.2.3/index.html` across build types. > - **Tests/E2E**: > - Client status tests now validate JSON `{ locked, active, clientVersion, platformVersion }`; page object parses and compares values (clientVersion prefix match). > - Clean up preinstalled example test (remove extra delays) and minor imports. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6a22656. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Fixes #36228 [](https://codespaces.new/MetaMask/metamask-extension/pull/36229?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: smart transaction send and receive copy ## **Related issues** Fixes: ## **Manual testing steps** 1. In extension, send an erc20. after sending, see this screen 2. Make sure the copy is in the past tense once the send is completed "You're sending" then "You sent" 3. Unwrap BNB by using "deposit": https://bscscan.com/token/0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c#writeContract 4. Make sure the copy is in the past tense once the wrap is completed: "You've sent" / "You've received" ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> <img width="788" height="1194" alt="image" src="https://github.com/user-attachments/assets/297f0dc1-8b92-47b3-bd5a-0fd9b2f3de26" /> <img width="802" height="1170" alt="image" src="https://github.com/user-attachments/assets/589bb903-9d10-4c38-9e50-d4757f2b7c56" /> ### **After** <!-- [screenshots/recordings] --> <img width="370" height="544" alt="Screenshot 2025-09-23 at 12 02 44" src="https://github.com/user-attachments/assets/28c9aa0f-7740-4a46-8b63-7d710173bd29" /> https://github.com/user-attachments/assets/1e426196-67db-4b22-b2a4-a91a0258306b <img width="390" height="617" alt="Screenshot 2025-10-01 at 14 49 37" src="https://github.com/user-attachments/assets/b2e6f6e8-6822-42f3-9d60-cc851fd4bc76" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Simulation details now display sending/sent and receiving/received copy based on transaction and Smart Transaction status, with new i18n strings and tests. > > - **UI – Simulation Details (`ui/pages/confirmations/components/simulation-details`)**: > - Add `smartTransactionStatus` prop and use it to determine headings, prioritizing Smart Transaction status over `TransactionStatus`. > - Dynamic headings for outgoing/incoming: `You send` → `You're sending`/`You sent`; `You receive` → `You're receiving`/`You've received`. > - Import `TransactionStatus` and centralize heading selection helpers. > - **Smart Transactions Status Page (`ui/pages/smart-transactions/.../smart-transaction-status-page.tsx`)**: > - Pass `smartTransactionStatus` to `SimulationDetails`. > - **Localization (`app/_locales/en*/messages.json`)**: > - Add keys: `simulationDetailsOutgoingHeadingSending`, `simulationDetailsOutgoingHeadingSent`, `simulationDetailsIncomingHeadingReceiving`, `simulationDetailsIncomingHeadingReceived`. > - **Tests (`simulation-details.test.tsx`)**: > - Update to include `TransactionStatus` and new prop; add cases verifying heading logic and Smart Transaction status precedence for outgoing/incoming. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 19f91eb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The feature to hide tokens is available for EVM assets but not for non-EVM assets. This is crucial for improving user experience by allowing users to hide unwanted tokens, especially in light of spam and malicious token issues. The problem is that having the possibility of hiding tokens is not great if you cannot add tokens back. Therefore I have implemented the whole logic to add non-EVM tokens to your wallet. In order to get this done the following PR has been merged into Core: - Support for adding non-evm tokens [here](MetaMask/core#7016) Furthermore, this PR improves the UI experience for importing tokens and aligns with the current implementation design on mobile **NOTE**: to keep this PR as small as possible the token hiding feature will be aded in [this](#37423) upcoming PR <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37501?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: support importing non-evm tokens ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-1425 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** https://github.com/user-attachments/assets/9eb0a52e-1e20-433a-ae6d-2f52cec47866 ### **After** https://github.com/user-attachments/assets/da64d359-894d-4cd0-b781-7f7e89ca6f1a ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds non‑EVM token import support via multichain assets, revamps the Import Tokens modal, and updates tests and mocks accordingly. > > - **Multichain/Backend**: > - Add `multichainAddAssets(assetIds, accountId)` action and wire through `metamask-controller` to `multichainAssetsController.addAssets`. > - **Import Tokens UI/Logic**: > - Rework `ImportTokensModal` to support EVM and non‑EVM chains (network selection, loading/unsupported states, tab visibility, exchange rates fetch by selected network). > - Use `useTokensWithFiltering` for token search; pass explicit `chainId` to `TokenSearch`. > - Enable tokens link on non‑EVM account overview. > - **Token List**: > - Update `TokenList` to detect already‑added non‑EVM assets via `accountsAssets` and `toAssetId`; remove reliance on current-network badge logic. > - Update container to supply `accountsAssets` (instead of selected account address). > - **E2E/Unit Tests**: > - Add/adjust tests for non‑EVM flows, modal states, and token list; update page objects and mocks (Bridge API endpoints for multiple networks); minor wait stability tweaks. > - **Localization**: > - Remove deprecated warning/setting strings across locales (e.g., `customTokenWarningInNonTokenDetectionNetwork`, `inYourSettings`, `tokenScamSecurityRisk`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4b25aae. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Bernardo Garces Chapero <[email protected]>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Update the token list selector to avoid brittle tests [](https://codespaces.new/MetaMask/metamask-extension/pull/37623?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Switches the token name click selector in `AssetListPage.checkTokenAmountInTokenDetailsModal` to a stable `data-testid`-based selector. > > - **E2E Tests**: > - Update `test/e2e/page-objects/pages/home/asset-list.ts`: > - In `checkTokenAmountInTokenDetailsModal`, click token by `testId: 'multichain-token-list-item-token-name'` instead of tag-based selector. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 58962a2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR adds a deep link handler for the Predict page, enabling redirection from `https://link.metamask.io/predict` to `https://metamask.io/predict` with query parameter preservation. [](https://codespaces.new/MetaMask/metamask-extension/pull/37622?quickstart=1) ## **Changelog** CHANGELOG entry: Add Predict deeplink handler ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to `https://link.metamask.io/predict` 2. Should be routed to `https://metamask.io/predict` 3. Test with query parameters: `https://link.metamask.io/predict?param=value` 4. Verify parameters are preserved in the redirect ## **Screenshots/Recordings** https://github.com/user-attachments/assets/31f480eb-ee37-4149-a0bd-19581332e5ee ## **Pre-merge author checklist** - [x] I've followed MetaMask Contributor Docs and MetaMask Extension Coding Standards. - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using JSDoc format if applicable - [x] I've applied the right labels on the PR (see labeling guidelines). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds deep link support for `/predict`, redirecting to `metamask.io/predict` with query params preserved, plus i18n strings and e2e tests. > > - **Deep Links**: > - Add new route `shared/lib/deep-links/routes/predict.ts` that redirects `/predict` to `BaseUrl.MetaMask/predict`, preserving query params. > - Register route in `shared/lib/deep-links/routes/index.ts` via `addRoute(predict)`. > - **Localization**: > - Add `deepLink_thePredictPage` message key to `app/_locales/en/messages.json` and `app/_locales/en_GB/messages.json`. > - **Tests**: > - Extend `test/e2e/tests/deep-link/deep-link.spec.ts` with a case verifying signed/unsigned `/predict` redirects to `${BaseUrl.MetaMask}/predict`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 57a885d. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Adds the destToken symbol to the HW approval warning <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37629?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix: show dest token symbol in HW approval label ## **Related issues** Fixes: N/A ## **Manual testing steps** 1. Request a bridge using HW wallet 2. verify that dest token is indicated in the warning ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Displays the destination token symbol in the hardware wallet bridge approval tooltip by updating i18n placeholders and passing the third argument from the UI. > > - **UI (Bridge)**: > - Update `ui/pages/bridge/prepare/bridge-cta-info-text.tsx` to pass `destAsset.symbol` as the 3rd param to `t('bridgeApprovalWarningForHardware', [...])`. > - **i18n**: > - Adjust `bridgeApprovalWarningForHardware` message placeholder from `$2` to `$3` in `app/_locales/en/messages.json`, `app/_locales/en_GB/messages.json`, and `app/_locales/ga/messages.json`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 683abda. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…ges (#37627) ## **Description** The test suite` change-language` has been updated to be resilient to changes to localized message changes. A pending update to various locales is currently blocked because there is an update to a message that was hard-coded in this test. [](https://codespaces.new/MetaMask/metamask-extension/pull/37627?quickstart=1) ## **Changelog** CHANGELOG entry: null ## **Related issues** Unblocks #36713. ## **Manual testing steps** N/A ## **Screenshots/Recordings** N/A ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Replaces hard-coded UI text in change-language e2e tests with values from locale JSON and updates selectors/assertions accordingly. > > - **Tests (e2e)**: > - Import locale message JSONs (`app/_locales/{ar,da,de,en,hu,es,hi}/messages.json`). > - Replace hard-coded selector texts with locale-driven values (e.g., `currentLanguage*`, `advanced`, `search` placeholder, `settings`, `save`). > - New selectors: `advanceTextDansk`, `waterTextDansk`, `buttonTextDansk`, `dialogTextDeutsch`, `discoverTextवर्तमान`, `headerTextAr`. > - Update assertions and element interactions across test cases to use the new selectors and localized strings (Spanish/English toggle, Danish navigation, German error dialog, Hindi discover, Arabic header). > - Scope limited to `test/e2e/tests/settings/change-language.spec.ts`; no production code changes. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 43f0db7. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Add notifications for Transaction Shield service [](https://codespaces.new/MetaMask/metamask-extension/pull/37624?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/SUBS-297 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds locale strings and wiring for Transaction Shield subscription created/paused push notifications and integrates them into the notifications message map. > > - **Notifications controller (`app/scripts/controllers/push-notifications/get-notification-message.ts`)**: > - Add `shieldTranslations` (created/payment-failed title + short description) and merge into `translations`. > - **Localization (`app/_locales/*/messages.json`)**: > - Add new keys for Transaction Shield subscription notifications: > - `pushNotificationShieldSubscriptionCreatedTitle`, `...CreatedDescriptionShort` > - `pushNotificationShieldSubscriptionPaymentFailedTitle`, `...PaymentFailedDescriptionShort` > - Updated for `en`, `en_GB`, and `ga` locales. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 376c01f. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…7585) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Previously in shield plan screen, when user change plan, the selected token approval amount didn't get updated hence user will see outdated approval amount in the confirmation screen This PR reset the selected token when plan change to get correct latest approval amount [](https://codespaces.new/MetaMask/metamask-extension/pull/37585?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix incorrect token approval amount when change shield plan ## **Related issues** Fixes: ## **Manual testing steps** 1. shield plan page 2. select a plan and go to confirm page 3. go back and select a different plan 4. go to confirm page should reflect the new approval amount ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Prevents stale approval amounts by resetting the selected token when the plan changes and refactors `useAvailableTokenBalances` to return `{availableTokenBalances, pending, error}` via `useAsyncResult`. > > - **Hooks**: > - **`useAvailableTokenBalances`**: > - Returns `{ availableTokenBalances, pending, error }` instead of an array; leverages `useAsyncResult` (removes local `useState/useEffect`). > - Adds early return when missing `price` or chain map; logs when token payment info missing. > - Computes approval amounts and filters tokens with sufficient balance; keeps polling balances for payment chains. > - **Shield Plan Page (`ui/pages/shield-plan/shield-plan.tsx`)**: > - Consumes new hook shape; uses `pending` to defer token selection until data ready. > - Resets `selectedToken` when `selectedPlan` changes; only restores last-used token if it matches current plan. > - Defaults payment method to crypto when a token is selected. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4ab428c. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> In this PR, it immediately validates the pasted SRP by invoking it on paste. Jira Link: https://consensyssoftware.atlassian.net/browse/SL-279 [](https://codespaces.new/MetaMask/metamask-extension/pull/37611?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: validate seedphrase when user paste the data. ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/e371ccb1-2573-4334-b7e4-a50ef93f1147 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Immediately validates pasted SRP words by refactoring the invalid-word checker to accept an SRP list and invoking it on paste. > > - **SRP Import (`ui/components/app/srp-input-import/srp-input-import.tsx`)**: > - Refactor `checkForInvalidWords` to accept an optional `srp` array, defaulting to current `draftSrp`. > - Invoke `checkForInvalidWords(newDraftSrp)` during paste handling to flag invalid words immediately after parsing input. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1b6ee4e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR integrates `@metamask/claims-controller` into extension and added SIWE signature generation for the claim. [](https://codespaces.new/MetaMask/metamask-extension/pull/37597?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added `@metamask/claims-controller` for shield claims CHANGELOG entry: Added Claim Signature Generation. ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Integrates @metamask/claims-controller and service, wiring messengers/init and background methods, refactors UI/actions to use new types and SIWE claim signature, and updates configs, policies, tests, and deps. > > - **Backend/Controllers**: > - Add `ClaimsControllerInit` and `ClaimsServiceInit` with dedicated messengers (`controller-init/claims/*`, `messengers/claims/*`). > - Wire `ClaimsController` and `ClaimsService` into `controller-list.ts` types/state and `metamask-controller` init and instance mapping. > - Expose background methods: `getSubmitClaimConfig`, `generateClaimSignature`, `getClaims`. > - **UI**: > - Migrate claims types to `@metamask/claims-controller` (`Claim`, `ClaimStatusEnum`, attachments), update contexts/hooks/components. > - Generate claim SIWE signature in `useClaimState` and submit with claim; refactor form constants/utils into separate files. > - Update claims list rendering (use `shortId`, new status enum and attachment props). > - **Actions**: > - `submitShieldClaim` now uses background-provided `SubmitClaimConfig` and real `signature`; `getShieldClaims` delegates to background; add `generateClaimSignature` action. > - **Config**: > - Extend Shield config/types with `claimsEnv`; load it for service init. > - **Security/Policies**: > - Update LavaMoat policies to allow `@metamask/claims-controller`. > - **Tests**: > - Add unit tests for claims controller/service initialization. > - **Dependencies**: > - Add `@metamask/claims-controller` to `package.json` and lockfile. > - **E2E State Snapshots**: > - Include `ClaimsController` state and `claims` slice references. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 19e1f38. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: MetaMask Bot <[email protected]>
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This fixes bridging when using a QR-based hardware device like Keystone 3 Pro. Without it, bridging was stuck after the approval. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37549?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed bridging with qr-based wallets ## **Related issues** Fixes: ## **Manual testing steps** 1. Bridge some ERC20 token from BSC to Linea for example, using a Keystone wallet 2. Make sure the Bridge works ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** https://github.com/user-attachments/assets/ceac8327-b557-45fe-a1a2-180d041914ff <!-- [screenshots/recordings] --> ### **After** https://github.com/user-attachments/assets/150d2f57-6bff-4274-bfbb-ab0386c89ff1 <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Resets the QR hardware sign flow to `play` when a new request arrives by adding a `useEffect` tied to `request.requestId`. > > - **UI** > - **`ui/components/app/qr-hardware-popover/qr-hardware-sign-request/qr-hardware-sign-request.component.js`**: > - Add `useEffect` to reset `status` to `play` when `request.requestId` changes. > - Import `useEffect` to support the new behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7cc4861. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> In this PR, Downgrades Rive file load errors to warnings and removes redundant error logging in social backup restore, adding a new @rive-app/canvas patch reference. [](https://codespaces.new/MetaMask/metamask-extension/pull/37649?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Downgrades Rive file load errors to warnings and removes redundant error logging in social backup restore, adding a new @rive-app/canvas patch reference. > > - **Animations (@rive-app/canvas patch)**: > - Suppress hard failures in `rive.js` by commenting out `fireLoadError`/`throw` paths and using `console.warn`; add early return when missing source. > - **Error Logging**: > - Remove `log.error` lines in `restoreSocialBackupAndGetSeedPhrase` (background and UI) to reduce noisy reports. > - **Dependencies**: > - Add new yarn patch `@rive-app-canvas-patch-03752f0c3b.patch` and update `package.json`/`yarn.lock` to chain patches for `@rive-app/[email protected]`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1f9a476. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Upgrading bitcoin to `1.4.5` * https://github.com/MetaMask/snap-bitcoin-wallet/releases/tag/v1.4.5 <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37657?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: #37616 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrade `@metamask/bitcoin-wallet-snap` from `1.4.4` to `1.4.5` in `package.json` and `yarn.lock`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9bb76cf. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…#37660) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Fix sentry error saying alIgnoredTokens is undefined. I could not repro but believe this is the fix <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37660?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: fix cannot read properties of undefined (allIgnoredTokens) ## **Related issues** Fixes: #37659 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Defaults `getAllIgnoredAssets` to `EMPTY_OBJECT` to prevent undefined access errors. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 0230527. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37658?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: #37645 ## **Manual testing steps** 1. In firefox, start new onboarding with social login. 2. Before completing the social login, close the window. 3. User should not see Login Error modal ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds cross-browser detection of user-cancelled OAuth login (including Firefox) and updates flows to treat it as a non-error. > > - **Shared Errors**: > - Add `OAuthErrorMessages.USER_CANCELLED_LOGIN_ERROR_FIREFOX`. > - Introduce `isUserCancelledLoginError(error)` helper for cross-browser detection. > - **OAuth Service (`app/scripts/services/oauth/oauth-service.ts`)**: > - Replace `#isUserCancelledLoginError()` with `#getUserCancelledLoginError()` returning the actual `Error` when cancel is detected via `checkForLastError()` and `isUserCancelledLoginError`. > - When no `responseUrl`, reject with user-cancelled error if present; otherwise default to `OAuthErrorMessages.NO_REDIRECT_URL_FOUND_ERROR`. > - **Onboarding UI (`ui/pages/onboarding-flow/welcome/welcome.js`)**: > - Use `isUserCancelledLoginError` in login error handlers to suppress UI errors when the user cancels. > - Map remaining OAuth errors to existing UI error states as before. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f3ff026. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…on alerts (#37542) ## **Description** Disables default "Alert" text and the arrow for inline Confirmation alerts. [](https://codespaces.new/MetaMask/metamask-extension/pull/37542?quickstart=1) ## **Changelog** CHANGELOG entry: fix: Disable default "Alert" text and the arrow for inline Confirmation alerts ## **Related issues** Fixes: #37362 ## **Manual testing steps** 1. Go to the test dapp (https://metamask.github.io/test-dapp/) 2. Connect your wallet 3. Click on "SEND LEGACY TRANSACTION" 4. See that we don't show the "Error" text and the arrow anymore ## **Screenshots/Recordings** ### **Before** <img width="388" height="214" alt="image" src="https://github.com/user-attachments/assets/419bf910-99f1-466a-9a02-82bac9b6af65" /> ### **After** <img width="385" height="219" alt="image" src="https://github.com/user-attachments/assets/9ea51aec-ed59-4f26-bab2-e03dcb62f4fe" /> <img width="391" height="327" alt="image" src="https://github.com/user-attachments/assets/8a97a265-1ff2-4bcf-8a77-36e7a2b7f63e" /> <img width="347" height="49" alt="image" src="https://github.com/user-attachments/assets/575afd7b-7c4f-47fd-85f3-55a4acdce87a" /> <img width="395" height="416" alt="image" src="https://github.com/user-attachments/assets/56d9caa8-3df2-43cc-b846-368efb0d8968" /> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Removes default inline alert label and arrow, only showing an arrow when custom text exists and forcing no arrow/empty text in simulation alerts. > > - **UI** > - **`ui/components/app/confirm/info/row/alert-row/alert-row.tsx`**: > - `InlineAlert` now sets `showArrow` only if both `showArrow` and `inlineAlertText` are truthy, and defaults `textOverride` to an empty string. > - **`ui/pages/confirmations/components/simulation-details/simulation-details.tsx`**: > - Simulation inline alerts explicitly set `showArrow={false}` and `textOverride={''}` to hide the default label and arrow. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6035091. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** The feature to hide tokens is available for EVM assets but not for non-EVM assets. This task involves implementing a similar token hiding feature for non-EVM assets. This is crucial for improving user experience by allowing users to hide unwanted tokens, especially in light of spam and malicious token issues. The implementation should be prioritized to align with upcoming Solana campaigns. In order to get this done the following PRs have been merged: - Support for ignoring non-evm tokens in core [here](MetaMask/core#6981) - Support for importing non-evm tokens in Extension [here](#37501) <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37423?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: support ignoring non-evm tokens ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/ASSETS-1425 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** https://github.com/user-attachments/assets/acdaf634-dee2-418a-bf8f-23c5832b9d53 ### **After** https://github.com/user-attachments/assets/512bcae8-d326-4987-8345-577207c69375 <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds support to hide/ignore non‑EVM assets via multichain API, passes chainId for EVM token hides, removes isEvm prop from asset options, and bumps assets controller. > > - **Multichain/Background**: > - Add `getApi()` method `multichainIgnoreAssets(assetIds, accountId)` delegating to `MultichainAssetsController.ignoreAssets`. > - **UI**: > - Update `HideTokenConfirmationModal` to: > - Detect non‑EVM chains and dispatch `multichainIgnoreAssets([address], accountId)`. > - For EVM, dispatch `ignoreTokens` with `networkClientId` and `chainId`. > - Use selector `getInternalAccountBySelectedAccountGroupAndCaip` to resolve account for non‑EVM. > - Simplify `AssetOptions`: > - Remove `isEvm` prop and logic; show Hide option whenever `!isNativeAsset`. > - Adjust `native-asset.tsx` and `token-asset.tsx` to stop passing `isEvm` to `AssetOptions`. > - **Store/Actions**: > - Add thunk `multichainIgnoreAssets(assetIds, accountId)`; keep `ignoreTokens` flow for EVM, now provided `chainId` from UI. > - **Tests**: > - Update `hide-token-confirmation-modal` tests to assert `chainId` passed to `ignoreTokens` and existing flows. > - **Dependencies**: > - Bump `@metamask/assets-controllers` to `^87.1.1`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 731f870. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Bernardo Garces Chapero <[email protected]>
…ata (#37662) ## **Description** This PR makes it so that when: - if we've determined that a user has opted in rewards - if we can't determine the season status because of an API error - there's no cached season status state we show a distinct state for this edge case instead of showing 0 points. ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/RWDS-772 ## **Screenshots/Recordings** ### **After** <img width="247" height="75" alt="image" src="https://github.com/user-attachments/assets/3d3ab2bc-888f-4282-bf90-a510861c3e80" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Display a "Couldn't load" error state for Rewards points when season status fetch errors and no balance is available; adds i18n strings and tests. > > - **Rewards UI**: > - Update `ui/components/app/rewards/RewardsPointsBalance.tsx` to render an error badge ("Couldn't load") when `seasonStatusError` exists and no `seasonStatus.balance`. > - Integrate `useI18nContext` and adjust styles (`bg-background-transparent`, `text-alternative`, alternative icon color) for the error state. > - **Localization**: > - Add `rewardsPointsBalance_couldntLoad` to `app/_locales/en/messages.json` and `app/_locales/en_GB/messages.json`. > - **Tests**: > - Expand `RewardsPointsBalance.test.tsx` with cases for error vs loading states and mock the new i18n key; verify classes and rendered text. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 93914fc. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Add support for the Tron network through a preinstalled Tron Wallet Snap [](https://codespaces.new/MetaMask/metamask-extension/pull/35984?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added support for Tron ## **Related issues** n/a ## **Manual testing steps** 1. Checkout this branch locally 2. Disable BIP44 changes using the `enableMultichainAccountsState2` flag on the `.manifest-overrides.json` 3. After onboarding, "Create Tron account" ## **Screenshots/Recordings** ### **Before** n/a ### **After** <img width="1547" height="859" alt="Screenshot 2025-09-30 at 18 44 50" src="https://github.com/user-attachments/assets/2e7439b5-d508-400d-8ad9-f05db9519396" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds Tron network/account support powered by a preinstalled Tron Wallet Snap, with address validation, UI flows, controllers, build flags, and policies. > > - **Multichain/Networks & Assets** > - Introduces Tron networks (`TrxScope.{Mainnet,Nile,Shasta}`) with nicknames, icons, block explorers, and native asset mappings (`TRX`, CAIP19) in `shared/constants/multichain/{networks,assets}.ts` and `shared/constants/network.ts`. > - Extends network ordering and enablement to include Tron (`TrxScope.Mainnet`). > - **Snaps & Build** > - Preinstalls `@metamask/tron-wallet-snap` in `shared/lib/snaps/snaps.ts`, `app/scripts/constants/snaps.ts`, and `builds.yml` (feature flag `tron`, assets copy rule). > - Exposes Tron Snap IDs/names via `shared/lib/accounts/tron-wallet-snap.ts`; whitelists in `shared/lib/accounts/snaps.ts`. > - **Accounts/Controllers** > - Adds Tron provider to `MultichainAccountService` with enable/disable via remote feature flags (`tronAccounts`) in `app/scripts/controller-init/multichain/...`. > - Updates network enablement init to include Tron and auto-enable EVM mainnet when only a Tron/SOL/BTC network is enabled. > - `metamask-controller`: counts/discovers/creates Tron accounts; integrates Tron Snap client and types; updates tests accordingly. > - **Validation & Utilities** > - Implements Tron address validation (Base58/hex) in `shared/lib/multichain/addresses/tron.ts` with tests; adds `isTronAddress`, `isTronChainId` and recipient validations. > - Maps Tron account types to snaps/names in `shared/constants/multichain/accounts.ts`. > - **UI** > - Adds Tron to account creation flows, menus, wallet details, account overview/details (`ui/components/...`, `ui/pages/...`); supports Tron in send flow (type detection, recipients, validation, loader). > - Network manager shows Tron where applicable. > - **Selectors** > - Extends selectors for Tron enablement, detection, balances, last-selected account, and multichain configs (`ui/selectors/...`). > - **Localization & Assets** > - Adds `networkNameTron` and `addNewTronAccountLabel` strings (`app/_locales/*`); adds `app/images/tron-logo.svg`. > - **Policies/Deps** > - Adds dependency `@metamask/tron-wallet-snap` and `@scure/base` bump; updates LavaMoat policies to reference `@scure/base` directly. > - Updates `.depcheckrc.yml`, `.github/CODEOWNERS` (new networks path). > - **Tests** > - Adds unit tests for Tron address validation and multichain selectors; updates controller tests for discovery counts. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f1c81bd. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: OGPoyraz <[email protected]> Co-authored-by: MetaMask Bot <[email protected]> Co-authored-by: Alejandro Garcia <[email protected]>
) ## **Description** Upgrades @metamask/gator-permissions-snap from `^0.6.0` to `^0.6.1` - Corrects Accounts API URL, which caused permission requests on Mainnet to fail https://github.com/MetaMask/snap-7715-permissions/releases/tag/v10.0.0 [](https://codespaces.new/MetaMask/metamask-extension/pull/37675?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Fixed a bug causing advanced permissions requests on mainnet to fail before showing the permission picker ## **Related issues** Fixes: MetaMask/delegator-readable-permissions#471 ## **Manual testing steps** 1. Open Gator Permissions test page 2. Select Mainnet 3. Request Permission Expect permission picker to appear ## **Screenshots/Recordings** <img width="512" height="732" alt="image" src="https://github.com/user-attachments/assets/24973492-10d6-4de8-b504-18815ebf311f" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrades `@metamask/gator-permissions-snap` from `^0.6.0` to `^0.6.1`. > > - **Dependencies**: > - Bump `@metamask/gator-permissions-snap` from `^0.6.0` to `^0.6.1` in `package.json`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9b4aacb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…om-v5-compat (#37586) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Migrate migrate unlock, deeplink, defi page and MetaMetricsContext to `react-router-dom-v5-compat` <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37586?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: part of MetaMask/MetaMask-planning#3261 ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Migrate unlock, deep link, DeFi details, reveal-seed, and lock flows to react-router-dom-v5-compat with a v5→v5-compat routing bridge; update MetaMetrics page matching and tests accordingly. > > - **Router / Navigation**: > - Introduce `createV5CompatRoute` helper and use it across routes to pass `navigate`, `location`, `params`, and wrappers. > - Switch several routes to render v5-compat components (`UnlockPage`, `DeepLink`, `DeFiPage`, `RevealSeedConfirmation`, swaps/bridge variants) and wrap with `AuthenticatedV5Compat`/`InitializedV5Compat` where needed. > - Replace history pushes with `navigate` usage; update `ToastMaster` instantiation to accept `location`. > - **Components migrated to v5-compat props**: > - `unlock-page`: accept `navigate`, read redirect from `location.state` or `navState`; container injects `navState` and uses `withRouterHooks`. > - `deep-link`: accept `location` prop from v5-compat. > - `defi-details-page`: accept `navigate` and `params`; use `Navigate` for redirects. > - `reveal-seed`: accept `navigate` and optional `keyringId`; replace history calls with `navigate`. > - `lock`: accept `navigate` and replace history with `navigate`. > - **New / Updated HOCs & Context**: > - Add `InitializedV5Compat` to gate routes by onboarding completion (uses v5-compat `Navigate`). > - MetaMetrics: use `react-router-dom-v5-compat` `matchPath` (v6-style) with manual loop over `getPaths()` and normalize default route; update effect deps and path comparisons to `match.pattern.path`. > - **Tests / Stories / Docs**: > - Update tests to `render-helpers-navigate`, v5-compat hooks (`useNavigate`, `useParams`), and new props; snapshot updates. > - Update Unlock README and Story to use `navigate`/`location` props. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3fcd4e9. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** 1. What is the reason for the change? - Properties within segment events are just as important as the events themselves these days. Properties are used to deduplicate events with more details and are often more difficult to test than the mere event. - Printing the properties by default will make event testing much easier to debug. - This server also did not support logging Identify events which are fired when updating the user properties, logging these make it easier to debug when these properties are updated. 3. What is the improvement/solution? - Pretty print event properties that are fired with the events. - This is a developer facing change and will have no impact on users. - Add support for event type === identify [](https://codespaces.new/MetaMask/metamask-extension/pull/37635?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** - checkout this branch - follow these exact steps: https://github.com/MetaMask/metamask-extension/blob/main/development/README.md#segment - Notice that there are now properties being logged with each event. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** // Identify event (not supported) ``` [mock-segment]: Events received: [Unrecognized event type: identify] [mock-segment]: POST /v1/batch ``` ``` [mock-segment]: Events received: Account Menu Opened [mock-segment]: POST /v1/batch [mock-segment]: Events received: Account List Page [mock-segment]: POST /v1/batch [mock-segment]: Events received: Import Secret Recovery Phrase Page [mock-segment]: POST /v1/batch [mock-segment]: Events received: Home [mock-segment]: POST /v1/batch [mock-segment]: Events received: DeFi Stats [mock-segment]: POST /v1/batch [mock-segment]: Events received: [Unrecognized event type: identify] ... [mock-segment]: Events received: [Unrecognized event type: identify] [mock-segment]: POST /v1/batch [mock-segment]: Events received: Port Stream Chunked [mock-segment]: POST /v1/batch [mock-segment]: Events received: Import Secret Recovery Phrase Completed ``` ### **After** // Identify event ``` [mock-segment]: Identify event received: 0x51c51cdfc644de86d3df8f612e349787cfd279e485ba472bc59c6a50d18b11f0 { "address_book_entries": 12, "number_of_accounts": 36, "petname_addresses_count": 12 } ``` // Importing a new wallet ``` [mock-segment]: Track event received: Account Menu Opened { "location": "Home", "category": "Navigation", "locale": "en", "chain_id": "0xaa36a7", "environment_type": "popup" } [mock-segment]: Page event received: Account List Page { "params": {}, "locale": "en", "chain_id": "0xaa36a7", "environment_type": "popup" } [mock-segment]: Page event received: Import Secret Recovery Phrase Page { "params": {}, "locale": "en", "chain_id": "0xaa36a7", "environment_type": "popup" } [mock-segment]: Page event received: Home { "params": {}, "locale": "en", "chain_id": "0xaa36a7", "environment_type": "popup" } [mock-segment]: Identify event received: 0x51c51cdfc644de86d3df8f612e349787cfd279e485ba472bc59c6a50d18b11f0 { "address_book_entries": 2, "number_of_accounts": 4, "number_of_hd_entropies": 2, "petname_addresses_count": 2 } [mock-segment]: Track event received: DeFi Stats { "totalMarketValueUSD": 0, "totalPositions": 0, "breakdown": [], "category": "DeFi", "locale": "en", "chain_id": "0xaa36a7", "environment_type": "background" } [mock-segment]: Track event received: Profile Activity Updated { "event": { "feature_name": "Multichain Account Syncing", "action": "group_added", "profile_id": "4796375c-f5f1-4868-a761-6ff84eab8bad" }, "category": "Backup And Sync", "locale": "en", "chain_id": "0xaa36a7", "environment_type": "background" } ..... [mock-segment]: Track event received: Import Secret Recovery Phrase Completed { "hd_entropy_index": 1, "number_of_solana_accounts_discovered": 0, "number_of_bitcoin_accounts_discovered": 0, "locale": "en", "chain_id": "0xaa36a7", "environment_type": "background" } ``` ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Improves `development/mock-segment.js` to log each Segment event with type, name/id, and pretty-printed properties, adding support for `identify` events. > > - **Mock Segment Server (`development/mock-segment.js`)**: > - Logs each event individually with type labels (`Track`, `Page`, `Identify`) and name/id. > - Pretty-prints event data: uses `event.properties` for non-identify and `event.traits` for `identify`. > - Adds support for `identify` events and handles unknown types gracefully. > - Simplifies output by removing request URL/method and aggregate "Events received" summary. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit a3d1061. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Collaborator
Author
Builds ready [ec2a0e6]
UI Startup Metrics (1258 ± 95 ms)
|
7 tasks
…p-13.10.0 (#37986) - fix: added support link to unlock page (#37967) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/37967?quickstart=1) In this PR, we have enabled the MetaMask Support link in unlock page. Jira Link: https://consensyssoftware.atlassian.net/browse/SL-329 Figma Link: https://www.figma.com/design/pViOUcmjwhEzFsdrwknpNc/Onboarding-Redesign?node-id=18656-27472&m=dev ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: added the support link back in unlock page. ## **Related issues** Fixes: ## **Manual testing steps** 1. Open Extension 2. Create Wallet 3. Lock the app 4. Validate changes in unlock page. 5. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> <img width="1728" height="1007" alt="Screenshot 2025-11-19 at 1 06 31 PM" src="https://github.com/user-attachments/assets/9dbf610c-1d7a-4aad-9a9f-de52bc23a71a" /> ### **After** <!-- [screenshots/recordings] --> <img width="385" height="1002" alt="Screenshot 2025-11-19 at 12 51 52 PM" src="https://github.com/user-attachments/assets/8172d54e-09d1-4eb7-ae85-b0b56fa9f1fc" /> <img width="381" height="994" alt="Screenshot 2025-11-19 at 12 52 07 PM" src="https://github.com/user-attachments/assets/c29c2a40-dc66-402b-9812-63e008d116f2" /> <img width="498" height="761" alt="Screenshot 2025-11-19 at 12 52 37 PM" src="https://github.com/user-attachments/assets/58f4cd6e-89c0-46b1-8b48-44fcf5f90c40" /> <img width="494" height="647" alt="Screenshot 2025-11-19 at 12 53 04 PM" src="https://github.com/user-attachments/assets/69b15d7f-ff87-4d6d-b9cc-02d2f3379ff4" /> <img width="1727" height="987" alt="Screenshot 2025-11-19 at 12 53 20 PM" src="https://github.com/user-attachments/assets/1eeabfae-30c7-4dd0-8090-0701eb8cba88" /> <img width="1722" height="1031" alt="Screenshot 2025-11-19 at 12 53 38 PM" src="https://github.com/user-attachments/assets/e5eea7ee-d609-4956-b397-a29b75e74e93" /> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds a help/support link to the unlock page and tweaks horizontal logo spacing with a popup-specific style, wiring `isPopup` from container to component. > > - **Unlock Page UI** (`ui/pages/unlock-page/unlock-page.component.js`) > - Add persistent "Need help?" text with link to `SUPPORT_LINK` and tracking. > - Reduce "Forgot password?" button bottom margin (`marginBottom` 6 → 4). > - Apply popup-specific class to `MetaFoxHorizontalLogo` when `isPopup` is true. > - Add `isPopup` to `PropTypes`. > - **Styling** (`ui/pages/unlock-page/index.scss`) > - Decrease `unlock-page__mascot-container__horizontal-logo` margin-bottom (60px → 24px) and add `--popup` modifier (margin-bottom: 0). > - **Container** (`ui/pages/unlock-page/unlock-page.container.js`) > - Determine `isPopup` via `getEnvironmentType()` and pass to component; reuse for restore-in-browser logic. > - **Tests** (`__snapshots__/unlock-page.test.js.snap`) > - Update snapshot to reflect new help text/link, spacing changes, and logo class. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 477688e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Lwin <[email protected]> [355e33f](355e33f) Co-authored-by: Ganesh Suresh Patra <[email protected]> Co-authored-by: Lwin <[email protected]>
Collaborator
Author
Builds ready [10ba674]
UI Startup Metrics (1195 ± 101 ms)
|
7 tasks
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** Update 13.10.0 changelog based on new cherry-picks <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> [](https://codespaces.new/MetaMask/metamask-extension/pull/38050?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] 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/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Adds Shield eligibility and error-state metrics with UI/flow updates, refines multichain address UX and deep-linking, and bumps key dependencies with build/config tweaks. > > - **Shield (metrics + UX)**: > - Metrics: add `ShieldPrioritySupportClicked`, `ShieldEligibilityCohort{Assigned,Timeout}`, common tracking props (`getShieldCommonTrackingProps`), error-state clicked events; refactor existing events to use common props. > - Eligibility: cohort assignment/timeout tracking in `ui/contexts/shield`; e2e mocks include eligibility payload. > - UI: paused toast now contextual (card/crypto) with tracking; entry modal uses static image, responsive styles; settings banner/error actions improved; support link action includes user IDs; CTA text reflects trial status. > - Deep link: `/shield` accepts `showShieldEntryModal=true` to open settings and modal. > - **Deep Links**: > - Redirect `/predict` → `/prediction-markets`; export `SETTINGS_ROUTE`. > - **Multichain accounts (UI/behavior)**: > - Network group avatars size/limit and alignment tweaks; hovered list row renamed/styled; clicking row copies address (tests updated); header uses `--header-height` CSS var. > - **Confirmations/Navigation**: > - Make cancel/submit flows async-safe, navigate appropriately (incl. addEthereumChain → default route); gasless check null-safe; sidepanel/popup open-in-browser handling; global menu adds popup/sidepanel toggle and priority support tracking. > - **Settings/Unlock UX**: > - Mobile settings layout scroll fixes; unlock page spacing and persistent “Need help?” support link; shield plan and claim form spacing/responsiveness. > - **Icons/Constants**: > - Add `Popup`, `Sidepanel` icons; new Shield enums and constants. > - **Tests/Mocks**: > - Update deep-link expectations, Shield entry modal/hovered list/confirm footer tests; add subscription eligibility mock. > - **Build/Config**: > - Enable `METAMASK_SHIELD_ENABLED` by default; adjust build features (remove `tron` from `main`); sidepanel env var cleanup. > - **Dependencies**: > - Bump `@metamask/bitcoin-wallet-snap` to `^1.6.0`, `@metamask/core-backend` to `^4.1.0`; add `addons-linter/glob@^10.5.0`; lockfile updates. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fdcbb3b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Collaborator
Author
Builds ready [115187a]
UI Startup Metrics (1277 ± 137 ms)
|
gauthierpetetin
approved these changes
Nov 20, 2025
chloeYue
approved these changes
Nov 20, 2025
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Labels
release-13.10.0
Issue or pull request that will be included in release 13.10.0
team-bots
Bot team (for MetaMask Bot, Runway Bot, etc.)
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🚀 v13.10.0 Testing & Release Quality Process
Hi Team,
As part of our new MetaMask Release Quality Process, here’s a quick overview of the key processes, testing strategies, and milestones to ensure a smooth and high-quality deployment.
📋 Key Processes
Testing Strategy
Conduct regression and exploratory testing for your functional areas, including automated and manual tests for critical workflows.
Focus on exploratory testing across the wallet, prioritize high-impact areas, and triage any Sentry errors found during testing.
Validate new functionalities and provide feedback to support release monitoring.
GitHub Signoff
Issue Resolution
Cherry-Picking Criteria
🗓️ Timeline and Milestones
✅ Signoff Checklist
Each team is responsible for signing off via GitHub. Use the checkbox below to track signoff completion:
Team sign-off checklist
This process is a major step forward in ensuring release stability and quality. Let’s stay aligned and make this release a success! 🚀
Feel free to reach out if you have questions or need clarification.
Many thanks in advance
Reference
Note
Adds Tron send support, enhances Shield claims and metrics, refactors notifications to new payload API, and migrates routing/unlock to v5-compat with swap, gasless, and stability improvements.
QuoteSwapSimulationDetailsUI; improve dapp swap comparison parsing, error handling, metrics, and original tx param usage; adduseSwapCheck.INotificationwithpayloadstructure; add Platform notifications; update details/footer/stories.Written by Cursor Bugbot for commit 115187a. This will update automatically on new commits. Configure here.