- Notifications
You must be signed in to change notification settings - Fork5.4k
release: 13.12.0#38384
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:stable
Are you sure you want to change the base?
release: 13.12.0#38384
Conversation
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**### What is the reason for the change?Currently, when a site is disconnected from MetaMask but still has Gatorpermissions (advanced permissions granted through the Gator permissionssystem), the site is not displayed in the permissions/connections UI.This creates confusion for users who have granted advanced permissionsbut cannot see or manage them after disconnecting the basic connection.### What is the improvement/solution?This PR updates the permissions page to display sites that have Gatorpermissions even when they don't have an active connection. The changesinclude:1. **Enhanced Site Display Logic**: Modified the site counting anddisplay logic to include sites with only Gator permissions, ensuringthey remain visible in the connections UI even without an activeconnection.2. **Advanced Permissions Visibility**: Added functionality to showadvanced permissions in the UI, allowing users to view and manage Gatorpermissions independently of the connection status.3. **State Management Optimization**: Updated the permission selectorsand state management to properly track and display sites based on theirpermission state rather than just connection status.This ensures users have full visibility and control over all permissionsgranted to sites, improving transparency and making permissionmanagement more comprehensive.[](https://codespaces.new/MetaMask/metamask-extension/pull/36811?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Shows a site if it has no connection but haspermissions granted to it.## **Related issues**Depends on:#36776## **Manual testing steps**1. Have gator permission enabled2. Set it up so that you granted a permission to website that does nothave connection to3. Go to permissions (under sites count it should include the websitethat has no connection)4. Click on sites 5. The site that has no connection but only permission should show andhave a subtitle of: n Advanced permissions6. Click on the site and it should show you the permissions that areenabled## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/9b16e1c5-9302-42bf-aac9-82cf1751355c### **After**https://github.com/user-attachments/assets/fb975ce7-280c-4e6d-96f3-1419967a202d<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Shows sites that have only Gator permissions in the Sites list, withcounts and "advanced permissions" labeling, powered by new selectors andtests.> > - **Permissions UI**:> - Display sites with only Gator permissions in `PermissionsPage`;merge traditional connections with Gator-derived sites via`getMergedConnectionsListWithGatorPermissions` (guarded by featureflag).> - Update `ConnectionListItem` to show `<n> advanced permission(s)`when no accounts or networks; add i18n keys`advancedPermissionSmallCase`/`advancedPermissionsSmallCase`.> - **Gator Permissions Page**:> - Use new selector `getTotalUniqueSitesCount` to compute Sites total;remove legacy site-count logic.> - **Selectors**(`ui/selectors/gator-permissions/gator-permissions.ts`):> - Add `getUniqueSiteOriginsFromTokenTransferPermissions`,`getGatorPermissionCountsBySiteOrigin`, `getTotalUniqueSitesCount`, and`getMergedConnectionsListWithGatorPermissions` (plus `ConnectionInfo`type); minor imports.> - **Tests**:> - Extend `gator-permissions.test.ts` with comprehensive cases for newselectors and scenarios.> - **Locales**:> - Add English strings for `advancedPermissionSmallCase` and`advancedPermissionsSmallCase`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit840616e. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Idris Bowman <34751375+V00D00-child@users.noreply.github.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**We are updating the Tron snap to the latest [version1.9.1](https://github.com/MetaMask/snap-tron-wallet/releases/tag/v1.9.1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->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 thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Bumps `@metamask/tron-wallet-snap` from `^1.8.0` to `^1.9.1` andupdates lockfile.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit1337aa6. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fixes onboarding intro modal confirm button hover color <!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38059?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->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 thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Make the onboarding confirm button hover color respect light/darktheme and update tests to provide theme context.> > - **Rewards Onboarding UI**:> - Use `useTheme` in `OnboardingIntroStep` to make the confirm buttonhover color theme-aware (`hover:bg-default-hover` for light,`hover:bg-icon-default-hover` for dark).> - **Tests**:> - Update `OnboardingIntroStep.test.tsx` to provide `metamask.theme`via `useSelector` and set `document.documentElement` `data-theme` fortheme resolution.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitb6eb887. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38060?quickstart=1)In `service-worker.ts` the keepalive function is not necessary:```tschrome.runtime.onMessage.addListener(() => { importAllScripts(); return false;});```as the [officialway](https://developer.chrome.com/docs/extensions/develop/migrate/to-service-workers#keep-sw-alive)to keep a service worker alive is by doing:```tssetInterval(saveTimestamp, SAVE_TIMESTAMP_INTERVAL_MS);```which we already do in background.js. ## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:MetaMask/MetaMask-planning#6320## **Manual testing steps**1. build MV3 via `yarn webpack`2. Open the home screen and wait five minutes. The service worker shouldnot disconnect, keep using the extension, it should still work.## **Screenshots/Recordings**Not applicable## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) isgenerating a summary for commit0649503. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## Version Bump After ReleaseThis PR bumps the main branch version from 13.11.0 to 13.12.0 aftercutting the release branch.### Why this is needed:- **Nightly builds**: Each nightly build needs to be one minor versionahead of the current release candidate- **Version conflicts**: Prevents conflicts between nightlies andrelease candidates- **Platform alignment**: Maintains version alignment between MetaMaskmobile and extension- **Update systems**: Ensures nightlies are accepted by app stores andbrowser update systems### What changed:- Version bumped from `13.11.0` to `13.12.0`- Platform: `extension`- Files updated by `set-semvar-version.sh` script### Next steps:This PR should be **manually reviewed and merged by the releasemanager** to maintain proper version flow.### Related:- Release version: 13.11.0- Release branch: release/13.11.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.11.0` to `13.12.0`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit75e88dc. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR aims to adjust design changes in the dapp swap comparisonbanner.Note: No changelog needed because this feature is not released yet.[](https://codespaces.new/MetaMask/metamask-extension/pull/38006?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:MetaMask/MetaMask-planning#6312## **Manual testing steps**N/A## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<img width="514" height="814" alt="before dark"src="https://github.com/user-attachments/assets/647201a7-8dce-4072-b945-c1f0fe99f945"/><img width="512" height="732" alt="before light"src="https://github.com/user-attachments/assets/00d779fb-44cc-473f-8b89-f33293f278c9"/>### **After**<img width="512" height="732" alt="after dark"src="https://github.com/user-attachments/assets/e89d1cc3-a598-4909-b825-97a5ccba6c7d"/><img width="512" height="732" alt="after light"src="https://github.com/user-attachments/assets/3cf520d7-d964-41f7-a3ac-3e26bcade9ed"/>## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Refactors the dapp swap comparison banner to a tabbed UI with updatedstyling/animations, fixes “MetaMask Swap” casing in locales, and updatestests accordingly.> > - **UI (Confirmations dapp swap comparison banner)**:> - Replace button toggle with memoized `Tabs` (`marketRate`,`metamaskSwap`) via `components/ui/tabs` and add `onTabClick` to switchswap views.> - Tweak banner visuals: use `BackgroundSection`, adjust padding, addborder, reposition close button, and redesign callout arrow; addanimated gradient text (`.animate-mm-swap-text`).> - Remove old button/text toggle code and wrapper.> - **Styles**:> - Add `.dapp-swap__tabs` and animation keyframes; update callout/arrowand close button CSS.> - **Locales**:> - Correct casing: `metamaskSwap` message to "MetaMask Swap" in`app/_locales/en/messages.json` and `app/_locales/en_GB/messages.json`.> - **Tests**:> - Update expectations from "Metamask Swap" to "MetaMask Swap";interact via tab `data-testid`s; assert `setQuotedSwapDisplayedInInfo`and metrics are called appropriately.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitbecd718. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…8052)## **Description**https://consensyssoftware.atlassian.net/browse/RWDS-268Part 7 of#36827install onboarding modal on homepageThis PR is put up as an alternative to#37920, to removeusage of `Link` and hopefully not need any policy.json changes.## **Changelog**CHANGELOG entry: Show onboarding tour when signing up for rewards## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Introduces a rewards onboarding feature flag and uses it toconditionally show the onboarding modal on Home and the sign-up badge inpoints balance.> > - **Rewards**:> - Add `selectRewardsOnboardingEnabled` selector (feature-flag +external services).> - Update `RewardsPointsBalance` to gate onboarding modal trigger andsign-up badge on `rewardsOnboardingEnabled`; extend effect deps; handlehidden badge/null.> - Tests updated to cover onboarding flag and badge visibility.> - **Home**:> - Map `rewardsEnabled` and `rewardsOnboardingEnabled` via selectors in`home.container.js`.> - Conditionally render `RewardsOnboardingModal` in `home.component.js`with existing modal gating.> - Minor refactor: extract `showRecoveryPhrase` condition variable.> - **Onboarding UI**:> - Replace deprecated `Link` with `TextButton` in `OnboardingStep4`legal disclaimer.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitad84c85. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: sophieqgu <sophieqgu@gmail.com>
… 2" (#38074)Reverts#37039, which incorrectly anddangerously bypassed the privacy snapshot.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes Shield subscription E2E tests and helpers, tightens privacyreporting in mocks, and updates Shield claim/plan pages and selectors tonew flows.> > - **E2E/Mocks**:> - Tighten privacy report: remove test-only host exclusions and relatedallowlist entries; only exclude browser API and Portfolio requests in`test/e2e/mock-e2e.js`.> - Update constants: switch `MOCK_CHECKOUT_SESSION_URL` to StripeCheckout; minor cleanup in `BASE_SHIELD_SUBSCRIPTION`.> - Simplify WebDriver locator building: remove `css+value` XPath pathin `driver.js`.> - **E2E/Pages & Tests**:> - Remove Shield subscription specs:`tests/shield/shield-plan-subscription.spec.ts`,`tests/shield/shield-subscription-management.spec.ts`.> - Delete `shield-claims-list-page.ts`; drop unused helpers/methodsacross pages (e.g., HomePage readiness wait, Settings waitFor...methods, ShieldDetail validate helper, ShieldPlan back/flow helper).> - Refactor Shield Claim page: replace account/network pickers withdirect inputs for `impactedWalletAddress` and `impactedTransactionHash`;add `clickHereLink`; adjust form fill API.> - **UI**:> - Remove some `data-testid` attributes in account selector and ShieldPlan header back button.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit7062a07. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…ts balances (#38065)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**prevent token list from fetching balances for all accounts<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38065?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: prevent token list from fetching balances for allaccounts## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Switches balance updates to use the non-all-accounts path and passes`platform: 'extension'` when initializing `TokenBalancesController`.> > - **Assets/Hooks**> - `useAssetsUpdateAllAccountBalances`: calls`updateBalancesFoAccounts(enabledChainIds, false)` instead of `true`.> - Tests updated to expect the new boolean flag where applicable.> - **Controller Init**> - `TokenBalancesControllerInit`: passes `platform: 'extension'` to`TokenBalancesController`.> - Corresponding test updated to assert the `platform` argument.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commite7ecafd. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38079?quickstart=1)refactor method `getErrorMessage`## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes: None## **Manual testing steps**N/A## **Screenshots/Recordings**N/A## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Simplifies `getErrorMessage` by directly localizing known Ledger errorcodes and falling back to the raw error code when unknown.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit51594c9. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Add animation to shield entry modal<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38001?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Add animation to shield entry modal## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**https://github.com/user-attachments/assets/362382fe-b402-46ec-b7c9-938dd412ab2e<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces the static shield image with an animated illustrationcomponent and updates responsive styles for its container/canvas.> > - **Shield Entry Modal (`ui/components/app/shield-entry-modal`)**> - **Illustration**: Replace static image with`ShieldIllustrationAnimation` in `shield-entry-modal.tsx`.> - **Styles (`index.scss`)**:> - Add `shield-entry-modal-shield-illustration__container` and`__canvas` with responsive sizing (`346x252`, `322x234` on smallscreens).> - Remove deprecated `shield-entry-modal-sheild-image` class and adjustlayout to use new container/canvas.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit0abcc80. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…8002)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38002?quickstart=1)This PR improves the `useTheme` hook implementation to provide morerobust theme resolution and updates the unlock page logo to properlyrespond to theme changes.### 1. **Enhanced `useTheme` Hook** (`ui/hooks/useTheme.ts`)- **Refactored theme resolution logic** into a separate `resolveTheme()`function for better code organization and testability- **Improved fallback mechanism** with the following priority: 1. User's explicit theme setting (`light` or `dark`) 2. System theme when "OS" is selected 3. Document theme attribute on initial load 4. System preference as final fallback### 2. **Unlock Page Logo Component** (`ui/pages/unlock-page/`)- Created new `MetaMaskWordmarkLogo` component that responds to themechanges- Updated styles to properly display logo based on theme- Integrated `useTheme` hook for dynamic theme-aware rendering### 3. **Test Snapshots Updates**Updated Jest snapshots to reflect the new consistent theme behavior:-`ui/components/multichain-accounts/smart-contract-account-toggle/__snapshots__/smart-contract-account-toggle.test.tsx.snap`-`ui/components/multichain/network-list-menu/__snapshots__/network-list-menu.test.tsx.snap`-`ui/pages/settings/advanced-tab/__snapshots__/advanced-tab.component.test.js.snap`-`ui/pages/settings/security-tab/__snapshots__/security-tab.test.js.snap`**Why snapshots changed:** The improved `useTheme` hook now properly resolves to `light` theme bydefault in tests (instead of `undefined`), causing `ToggleButton`components to consistently render with light theme colors (`rgb(183,187, 200)` = `#b7bbc8` = `lightTheme.colors.icon.muted`).## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Updated useTheme hook and logo for unlock page## **Related issues**Fixes:## **Manual testing steps**1. Open Extension2. Create Wallet3. Lock Wallet4. Validate the changes## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/d14095eb-b4e5-4db7-a93f-bad6682f91c6## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Refactors `useTheme` for reliable light/dark resolution and updatesthe unlock page wordmark logo to respond to theme, with minor CSS tweaksand snapshot updates.> > - **Hooks**:> - **`useTheme`**: Extracts `resolveTheme(settingTheme)` with clearpriority (explicit setting > OS when selected > document on initial load> system), validates against `validThemes`, warns and defaults to`light` if invalid; initializes state via resolver and applies onsetting changes.> - **Unlock Page UI**:> - **New `MetamaskWordmarkLogo`**: Uses `useTheme` and renders`MetaFoxHorizontalLogo` with theme awareness; replaces direct logo usagein `unlock-page.component.js`.> - **Styles**: Adjusts`unlock-page__mascot-container__horizontal-logo--popup` margins withresponsive override.> - **Tests**:> - Snapshot updates across settings and multichain componentsreflecting consistent toggle colors (e.g., off `rgb(183, 187, 200)`, on`rgb(68, 89, 255)`).> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit839eae4. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Chaitanya Potti <chaitanya.potti@gmail.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->Fixes issue with Tron resources not displaying in the details page.[](https://codespaces.new/MetaMask/metamask-extension/pull/38101?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Fixed issue with Tron resources not displaying in thedetails page.## **Related issues**Fixes:#38100## **Manual testing steps**1. Click on the Tron native asset2. Resources should be present## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] --><img width="1578" height="1880" alt="image"src="https://github.com/user-attachments/assets/e391e776-efe3-4c65-a5e5-bee9e84ab85c"/>### **After**<!-- [screenshots/recordings] --><img width="1622" height="1886" alt="image"src="https://github.com/user-attachments/assets/b55fe099-4f4c-4a45-9635-fdb3c44d20ea"/>## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds a new selector that includes Tron resource assets and updates theTron resources hook/tests to consume it, ensuring resources appear onthe asset details page.> > - **Selectors**:> - Extract `getStateForAssetSelector` helper to compose state for assetselectors.> - Keep `getAssetsBySelectedAccountGroup` (filters out Tron resources)and add `getAssetsBySelectedAccountGroupWithTronResources` to returnunfiltered assets.> - **Hook**:> - Update `useTronResources` to use`getAssetsBySelectedAccountGroupWithTronResources`, enablingenergy/bandwidth data to be found and displayed.> - **Tests**:> - Update mocks and usages to reference the new selector throughout`useTronResources.test.ts`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd772835. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…38102)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fix conversion rate for POL native token.## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:MetaMask/MetaMask-planning#6327## **Manual testing steps**1. Trigger swap including POL native token2. Check that metrics are recorded correctly and dapp-swap UI showscorrect values## **Screenshots/Recordings**TODO## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Fixes USD conversion for Polygon native token by mapping POL’s specialaddress and adds targeted unit tests.> > - **Hook `useDappSwapUSDValues`(`ui/pages/.../useDappSwapUSDValues.ts`)**:> - Map Polygon native token USD rate: when `chainId ===CHAIN_IDS.POLYGON`, set the native asset’s address rate from`0x0000000000000000000000000000000000001010`.> - Switch `isNativeAddress` to `helpers/utils/token-insights` andimport `CHAIN_IDS`.> - Refactor exchange-rate fetch to async IIFE within `useAsyncResult`.> - **Tests (`ui/pages/.../useDappSwapUSDValues.test.ts`)**:> - Enhance `runHook` to accept custom token addresses and confirmation.> - Add Polygon-specific test asserting fiat rates include both nativeaddresses with correct USD value.> - Mock token details and rates accordingly.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitccd13a6. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Adds animation to Settings shield banner<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/37998?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Adds animation to Settings shield banner## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**https://github.com/user-attachments/assets/6faed268-2015-4c9e-86ab-0202f0acbf2f<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds a Rive-based animated shield banner to the Transaction Shieldsettings page, with related style updates and test adjustments.> > - **UI (Settings > Transaction Shield)**:> - **New animation**: Introduces `ShieldBannerAnimation`(`ui/pages/settings/transaction-shield-tab/shield-banner-animation.tsx`)using Rive WASM with buffered file loading and guarded rendering.> - **Integration**: Replaces `ShieldIllustrationAnimation` with`ShieldBannerAnimation` in `transaction-shield.tsx`.> - **Styles**: Updates `index.scss` to support the banner(`transaction-shield-page-shield-banner__container/__canvas`), makemembership row `position: relative`/`overflow: hidden`, and centralizemembership text color handling; minor background-color tweak for loadingstate.> - **Tests**:> - Mocks `./shield-banner-animation` in `transaction-shield.test.tsx`and adjusts expectations accordingly.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit6b69115. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…nce state (#38126)## **Description**<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38126?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: fix missing native token balances in wallet balance## **Related issues**Fixes:#38114## **Manual testing steps**Onboard or existing user with AccountsAPI enabled1. Go to a network with native + erc tokens2. Notice aggregated wallet balance - it should have both native + erctokens aggregated together for the balance.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://www.loom.com/share/aeccc8e3cef4479da0e9d44fc5ebf4fa## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Patches `TokenBalancesController` to use lowercase account keys whenreading/writing `tokenBalances`, and wires the patch via a Yarn patcheddependency for `@metamask/assets-controllers@89.0.1`.> > - **Assets Controllers Patch**:> - Normalize `account` to lowercase in `TokenBalancesController`(`dist/TokenBalancesController.{cjs,mjs}`) when checking and setting`d.tokenBalances[account][chainId][tokenAddress]`.> - **Build/Deps**:> - Apply Yarn patch for `@metamask/assets-controllers@89.0.1` via`package.json` and update lockfile to reference the patched package.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd4370d9. This will update automaticallyon 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 beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Fixes the same problems as on MobileMetaMask/metamask-mobile#23106<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38122?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:MetaMask/metamask-mobile#22889## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Updates `@metamask/tron-wallet-snap` from `^1.9.1` to `^1.10.0`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitc9a57e5. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38078?quickstart=1)This PR implements .metamaskprodrc support for webpack.## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: null## **Related issues**Fixes:#30300## **Manual testing steps**1. .metamaskprodrc should be supported for webpack builds, and itsentries should have priority over .metamaskrc## **Screenshots/Recordings**Not applicable## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Add .metamaskprodrc support with higher precedence for configvariables, update tests, and include file in webpack cache dependencies.> > - **Config loading (utils)**:> - Add support for `.metamaskprodrc` and set precedence: `process.env`> `.metamaskprodrc` > `.metamaskrc` > `builds.yml`.> - **Build system (webpack)**:> - Include `.metamaskprodrc` in `buildDependencies.config` toinvalidate cache on changes.> - **Tests**:> - Extend rc mocking to handle `.metamaskprodrc` and assert itsprecedence over `.metamaskrc`.> - Use `afterEach` for restoring mocks; add/adjust tests for rcprecedence and non-default build vars.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit0fd844a. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**The recent addition of the `tabs` permission will result in newpermission warnings upon update, which is extremely disruptive and issomething we'd never do except as a last resort.The permission wasn't actually needed, and has been removed. Thisremoval uncovered a bug in our Webpack build (the `tabs` permission waserroneously only added for MV2 test builds, but we need it for MV3 testbuilds as well), which has been fixed.[](https://codespaces.new/MetaMask/metamask-extension/pull/38075?quickstart=1)## **Changelog**CHANGELOG entry: Remove unnecessary extension permission## **Related issues**N/A## **Manual testing steps**Test that the sidepanel still works in general. Particularly with dappconfirmations, and the "Connected status" indicator, and currentselected dapp.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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- [x] I’ve included tests if applicable- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes `tabs` from the MV3 manifest and updates the build transformto add `tabs` only for test builds (all manifest versions).> > - **Manifest (MV3)**:> - Remove `tabs` from `permissions` in `app/manifest/v3/_base.json`.> - **Build/Manifest transform**:> - Update `transformManifest` in`development/webpack/utils/plugins/ManifestPlugin/helpers.ts` to add`tabs` when `args.test` is true, regardless of `manifest_version`.> - Retains error if `tabs` already exists and continues adding dev/testmanifest key.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit862591e. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38110?quickstart=1)In this PR, we’ve removed the `isTestEnvironment` checks from all Riveanimation–related files. During the e2e tests, the animation componentstill calls `useRive`, and since the WASM file isn’t set for the testenvironment, useRive falls back to fetching the WASM from externaldomains `(unpkg.com and cdn.jsdelivr.net)`. This was causing unintendedexternal calls during test execution. These changes address that issue.Jira Link:https://consensyssoftware.atlassian.net/browse/SL-334## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: removed the `isTestEnvironment` checks from all Riveanimation–related files## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Removes IN_TEST checks from Rive-driven animations, centralizes WASMpreload logic, and updates onboarding/unlock flows and tests to mockanimations and reflect new rendering.> > - **Rive/WASM**:> - Remove `process.env.IN_TEST` checks across animation components(`wallet-ready`, `fox-appear`, `metamask-wordmark`, shieldicon/subscription, shield illustration).> - `useRiveWasmReady`: start with `isWasmReady=false`; if`RuntimeLoader` exists, fetch `./images/riv_animations/rive.wasm`, set`RuntimeLoader.wasmBinary`, and await instance; otherwise mark ready.> - **Onboarding/Unlock UI**:> - Always render animation components (no test-env gating) in`welcome`, `creation-successful`, and `unlock-page`.> - **Tests**:> - Integration/unit tests mock animation components to avoid real Riveusage; update snapshots for `welcome` and `unlock-page` to includeplaceholder containers.> - Keep background connection mocks; ensure onboarding completionevents still asserted.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit7518691. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…p-13.11.0 (#38155)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR updates the Shield subscription feature to properly handlemultichain account scenarios where the currently selected account may bea non-EVM account (e.g., Bitcoin, Solana). Previously, Shieldsubscription features would fail or throw errors when a non-EVM accountwas selected, as Shield is only supported for EVM accounts.1. **Multichain account support**: Added `OTHER` account type to`ShieldUserAccountTypeEnum` to handle cases where the selected accountis non-EVM (Bitcoin, Solana, etc.)2. **EVM account selection**: Updated Shield subscription hooks andmetrics to explicitly select EVM accounts (using `eip155:1` CAIP-2identifier) instead of relying on the currently selected account, whichmay be non-EVM[](https://codespaces.new/MetaMask/metamask-extension/pull/38155?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: Fixed Shield subscription feature to properly handlemultichain scenarios where non-EVM accounts (Bitcoin, Solana) areselected## **Related issues**Fixes:#38131## **Manual testing steps**1. Set up a wallet with both EVM and non-EVM accounts (e.g., Bitcoin orSolana account)2. Select a non-EVM account as the active account3. Navigate to Shield subscription features (e.g., Shield plan page,subscription settings)4. Verify that Shield subscription features work correctly and use theEVM account for balance calculations and metrics5. Verify that metrics tracking properly categorizes the account as`OTHER` when a non-EVM account is selected6. Test Shield subscription eligibility checks with non-EVM accountselected7. Test Shield subscription pricing and payment token selection withnon-EVM account selected## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> <sup>[Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) isgenerating a summary for commita3579a5. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**If a user has accounts in their srp's tied to more than 1 rewardsubscription, then right now the app might show the incorrect balance(i.e. showing balance of subscription A instead of subscription B) whenchanging accounts.The rule is (just like in mobile):- The first reward subscription we detect on the device (extension) andits balance should be shown for all accounts that are either added tothe first subscription OR not added yet to any subscription.- The balance of the second subscription is only shown when an accountis selected belonging to that subscription.Keep in mind that multiple reward subscriptions spread around 1 ormultiple SRP's are an edge case.## **Changelog**CHANGELOG entry: null## **Related issues**Fixes:#38129## **Manual testing steps**1. Have an SRP where account 1 is tied to a subscription A with points X2. Have an account in same SRP or different SRP tied to subscription Bwith points Y3. Switch between accounts, reward points balance will sometimes wronglyshow points of subscription B.## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Track and prioritize subscription selection by candidateAt/createdAt,prefer active account’s subscription, and improve UI/hooks loading anderror handling.> > - **RewardsController**:> - Add `INITIAL_DEVICE_SUBSCRIPTION_CANDIDATE_AT` and set`subscription.candidateAt` when missing (first on device vs subsequentnow/current time).> - Update `getCandidateSubscriptionId` to prefer`rewardsActiveAccount.subscriptionId`, then earliest by `candidateAt`(fallback `createdAt`), else discover via opt-in status with silentauth.> - Remove `RewardsController:getFirstSubscriptionId` action/handler.> - Store login/opt-in responses and ensure`subscription.createdAt`/`candidateAt` are present.> - **Types**:> - Extend `SubscriptionDto` with `createdAt` and optional`candidateAt`.> - **Hooks**:> - `useCandidateSubscriptionId`: return active account’s`subscriptionId` without fetching; maintain loading guard; testsupdated.> - `useSeasonStatus`: ignore invalid `subscriptionId` states, preventconcurrent fetches per id, clear state on auth/season errors; testsadded.> - **UI (OnboardingStep4)**:> - Add `isLoading` to opt-in Button; wrap opt-in error banner in paddedcontainer; enhance tests with mocked Button props.> - **Tests**:> - Widespread updates to align with `candidateAt`/`createdAt` handling,sorting logic, and removed action; data-service tests include`createdAt` in responses.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitb288fc4. This will update automaticallyon 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 beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR fixes the issue of deriving `chainId` in the dapp swapmiddleware.[](https://codespaces.new/MetaMask/metamask-extension/pull/38057?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes: Fixes a bug in previous PR#37980## **Manual testing steps**Dapp swap comparison banner should be shown properly## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [X] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [X] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Dapp swap middleware now reads `chainId` from network configurationusing `networkClientId`, with controller wiring and tests updatedaccordingly.> > - **Dapp Swap Middleware(`app/scripts/lib/dapp-swap/dapp-swap-middleware.ts`)**:> - Derives `chainId` from`getNetworkConfigurationByNetworkClientId(req.networkClientId)` insteadof request params; removes `chainId` from `getSwapDetails` and request`params` type.> - Requires `chainId` presence before fetching quotes; updates importsand factory to accept `getNetworkConfigurationByNetworkClientId`.> - **Controller (`app/scripts/metamask-controller.js`)**:> - Wires `getNetworkConfigurationByNetworkClientId` into`createDappSwapMiddleware`.> - **Tests(`app/scripts/lib/dapp-swap/dapp-swap-middleware.test.ts`)**:> - Add mock and expectations for`getNetworkConfigurationByNetworkClientId`; remove `chainId` fromparams; clear mocks in `beforeEach`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitae2f13b. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
This PR syncs the stable branch to main for version 13.12.0.*Synchronization Process:*- Fetches the latest changes from the remote repository- Resets the branch to match the stable branch- Attempts to merge changes from main into the branch- Handles merge conflicts if they occur*File Preservation:*Preserves specific files from the stable branch: - CHANGELOG.md - bitrise.yml - android/app/build.gradle - ios/MetaMask.xcodeproj/project.pbxproj - package.json Indicates the next version candidate of main to 13.12.0<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds 13.10.1 release notes with key fixes and updates changelogcomparison links.> > - **Docs — `CHANGELOG.md`**:> - Add `13.10.1` release notes under **Fixed**: token balance fetchingscope, dapp-swap fiat/conversion rates for native tokens, removal of anunnecessary extension permission, and missing native token balances inwallet.> - Update comparison links: set `[Unreleased]` to compare from`v13.10.1` and add `[13.10.1]` reference.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd66f832. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: runway-github[bot] <73448015+runway-github[bot]@users.noreply.github.com>Co-authored-by: Salim TOUBAL <salim.toubal@outlook.com>Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>Co-authored-by: Mark Stacey <mark.stacey@consensys.net>
…8116)## **Description**It seems that having concurrent calls to `keyring_createAccount` causesome synchronization issues between Snap's accounts and MetaMaskaccounts. We're not sure of the real root cause yet for this, butpreventing concurrent calls seems to mitigate (or even completelyprevent) this kind of issues.[](https://codespaces.new/MetaMask/metamask-extension/pull/38116?quickstart=1)## **Changelog**CHANGELOG entry: null## **Related issues**Mitigates (partially):#37228## **Manual testing steps**Nothing special to tests for this.## **Screenshots/Recordings**### **Before**### **After**## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Introduces a shared Snap account provider config (maxConcurrency=1)and applies it to BTC, TRX, and SOL providers, updating testsaccordingly.> > - **Multichain Account Service Init(`multichain-account-service-init.ts`)**:> - Add `snapAccountProviderConfig` with `maxConcurrency: 1` andtimeouts.> - Pass config to `BtcAccountProvider` and `TrxAccountProvider` via`AccountProviderWrapper`.> - Add `providerConfigs` mapping for `SOL_ACCOUNT_PROVIDER_NAME` to usethe same config.> - **Tests (`multichain-account-service-init.test.ts`)**:> - Expect `providerConfigs` in `MultichainAccountService` constructorargs.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita48ffee. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>
…counts cp-13.11.0 (#37987)## **Description**This will automatically fix corrupted states if users have desync'daccounts.This should mitigate some errors that were spotted with the rewardssystem where some Solana address could not be registered.[](https://codespaces.new/MetaMask/metamask-extension/pull/37987?quickstart=1)## **Changelog**CHANGELOG entry: Automatically re-sync accounts between Snaps andMetaMask## **Related issues**N/A## **Manual testing steps**> Difficult to manually test this since it implies to "hack" the non-EVMSnaps to trigger state-inconsistencies## **Screenshots/Recordings**### **Before**### **After**## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> On unlock, asynchronously resync Snap and MetaMask accounts, thenalign wallets; adds tests to verify both are invoked.> > - **Controller**:> - In `app/scripts/metamask-controller.js``submitPasswordOrEncryptionKey`, after init and account-tree refresh, ifmultichain state2 is enabled, run`multichainAccountService.resyncAccounts()` then `alignWallets()`asynchronously via a helper.> - **Tests**:> - Add `waitForAllPromises` utility.> - New test in `app/scripts/metamask-controller.test.js` asserts`resyncAccounts` and `alignWallets` are called asynchronously after`submitPasswordOrEncryptionKey`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitcfec6a9. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**This PR updates the minimum received amount on the swaps quote card tobe the `token amount` instead of the `dollar amount`.<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38150?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: changed minimum received amount to be the token amount.## **Related issues**Fixes:## **Manual testing steps**1. Go to the swaps page.2. Generate a quote.3. Notice the minimum received amount is now in the token amount.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] --><img width="970" height="1520" alt="image"src="https://github.com/user-attachments/assets/e149b216-4e1e-464b-9aee-4e7ae42c9c06"/>### **After**<!-- [screenshots/recordings] --><img width="398" height="597" alt="Screenshot 2025-11-21 at 2 10 47 PM"src="https://github.com/user-attachments/assets/0bb60e84-21fd-4f96-9b5a-c04d90887f8a"/>## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Switches the “Minimum received” display from fiat to token amount onthe Multichain Bridge quote card and updates tests accordingly.> > - **Bridge UI**:> - **Minimum received**: Render from `minToTokenAmount.amount` andformat via `formatTokenAmount(locale, amount, destSymbol)` instead offiat `valueInCurrency`.> - Removes unused `formatCurrencyAmount` import.> - **Tests**:> - Update snapshots to show token-denominated minimum received (e.g.,`13.98 USDC`, `14.44 USDC`).> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitbc0f4e1. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…cp-13.11.0 (#38061)## **Description**We have a problem with the way the `SnapKeyring` handles internaloptions. This keyring can be destroy/re-created sometimes and this causeits internal transient context to be cleared/reset.This can interfere with the Snap account creation flows(Bitcoin/Solana/Tron) when a previous instance of the `SnapKeyring`initiate the account creation but another one is created and finalizethe flow. In that case, the new instance won't have the correct mappingfor the internal options and will use the default options, thus,triggering some dialogs.We are currently reworking the Snap keyring entirely, thus, it's notworth to fix it at that level, but to prevent those dialogs frompopping-up, we now disable them for everything that's related to BIP-44accounts.[](https://codespaces.new/MetaMask/metamask-extension/pull/38061?quickstart=1)## **Changelog**CHANGELOG entry: Prevent any dialogs for multichain wallet Snaps(Solana, Bitcoin, Tron)## **Related issues**Fixes:-#38046## **Manual testing steps**> [!NOTE]> I did follow the same instructions than on the bug ticket and used`.zip` build1. `yarn build --build-type main dist`2. Install the extension by dropping the `.zip` (from the `builds`folder)3. Disable "Backup & Sync" during onboarding4. Onboard5. Wait for all accounts to be discovered - You should not have any dialogs> [!TIP]> You can follow the same procedure to test this bug and you might (not100% of the time) get a dialog that pops-up to enter the account name (in step 5)## **Screenshots/Recordings**### **Before**https://github.com/user-attachments/assets/b35e059f-6cb5-43fd-b079-3412d6834201### **After**https://github.com/user-attachments/assets/5b568199-dab8-4a2f-8453-8fbae0b29bb2## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Skips confirmation, name suggestion, and selection dialogs forpreinstalled multichain wallet Snaps, bypassing approval flow andsuppressing name suggestions (disabled under IN_TEST).> > - **Snap Keyring (`app/scripts/lib/snap-keyring/snap-keyring.ts`)**> - **Multichain wallet Snap handling**:> - Add `isMultichainWalletSnap` and compute `skipAll` for preinstalledmultichain Snaps (BIP-44), with `IN_TEST` override.> - Skip confirmation and name suggestion dialogs, and auto-skip accountselection when `skipAll`.> - Bypass approval flow when both dialogs are skipped.> - Avoid race-prone naming by passing empty `accountNameSuggestion`when `skipAll`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit9006456. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
## **Description**Simplifies the confirmation routing navigation. Removes the mixed use ofreact router v5 and v6 (v5-compat) from within the confirmation hook.## **Changelog**CHANGELOG entry: refactor: simplify confirmation routing## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces side-effecting confirmation navigation with a pure routebuilder and updates callers to navigate via returned URLs, removingmixed v5/v5-compat handling.> > - **Confirmations routing**> - Convert `navigateToConfirmation` into pure `getConfirmationRoute`that returns a URL (or empty string) based on approval type.> - Update `useConfirmationNavigation` to call `getConfirmationRoute`and navigate via `navigate(url, { replace: true })`.> - Update `home.component.js` and `routes.component.tsx` to use`getConfirmationRoute` and `history.replace(url)` for redirects.> - Remove mixed v5/v5-compat navigation handling and pathname skiplogic from the hook; eliminate passing of navigate/history to thehelper.> - Preserve query string handling for `ApprovalType.Transaction`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit18987bb. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…38351)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->Previously we are still showing shield coverage footer in confirmationscreen if basic functionality is off which lead to the coverage bannerkeep loading because of missing external api request. This PR hideshield coverage footer if basic functionality is off[](https://codespaces.new/MetaMask/metamask-extension/pull/38351?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: don't show shield coverage if basic functionality isoff## **Related issues**Fixes:#38316## **Manual testing steps**1. subscribe to shield2. turn basic functionality off3. initiate a transaction4. shield coverage footer should not show## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->https://github.com/user-attachments/assets/12c9c9be-e802-4288-ba14-0c6a64793bef## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Prevents Shield coverage from enabling when Basic Functionality is offby gating both controller behavior and UI hook, and adds correspondingtests.> > - **Controller (app/scripts/metamask-controller.js)**> - Gate Shield subscription handling on`preferences.state.useExternalServices`; skip when disabled.> - On external services toggle, query subscription state and`start/stop` `ShieldController` accordingly; also enable/disable relatedservices (token detection, non-RPC gas APIs).> - **UI Hook (useEnableShieldCoverageChecks.ts)**> - Require `getUseExternalServices` to be true for `isEnabled`; keeppause logic unchanged.> - **Tests (useEnableShieldCoverageChecks.test.ts)**> - Update tests to pass `metamask.useExternalServices` and add case forBasic Functionality disabled; maintain env-flag scenarios.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit1cf58c8. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Chaitanya Potti <chaitanya.potti@gmail.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Update shield claims guide url<!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38225?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Replaces the Transaction Shield claims guide link with the supportURL, updates success/call-to-action copy and locales, and aligns e2etests with the new messages.> > - **Settings > Transaction Shield > Claims Form**:> - Use `TRANSACTION_SHIELD_SUPPORT_LINK` instead of`TRANSACTION_SHIELD_LINK` for help links in `claims-form.tsx`.> - CTA text changed to `t('shieldClaimViewGuidelines')` (“View guide”).> - **Constants**:> - Add `TRANSACTION_SHIELD_SUPPORT_LINK` in`ui/helpers/constants/common.ts`.> - **i18n (en, en_GB)**:> - `shieldClaimDetails` copy adjusted; link text now externalized to`shieldClaimViewGuidelines`.> - Submission success strings updated: `shieldClaimSubmitSuccess` →“Claim submission received”; description made concise.> - Add `shieldClaimViewGuidelines` key.> - **Tests (e2e)**:> - Update mocks and expectations to new success message in`constants.ts` and `shield-claim-page.ts`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit39010f4. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: Chaitanya Potti <chaitanya.potti@gmail.com>
<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely 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 followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->This PR adds optimizations to the subscription polling such that ~- the polling will stop when UI is closed (fullScreen, popup orbackground)- the polling will stop when basic functionality is off.[](https://codespaces.new/MetaMask/metamask-extension/pull/38378?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: optimizes subscription polling## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [x] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Stops subscription polling when UI/environments close or externalservices are disabled; UI now returns a polling token; updates a Shieldmetrics event label.> > - **Controllers (background)**:> - `metamask-controller`:> - Stop `SubscriptionController` polling when external services aredisabled in `toggleExternalServices`.> - Stop all subscription polling on global client close`onClientClosed()`.> - Stop subscription polling when a specific environment type closes in`onEnvironmentTypeClosed()`.> - **UI/Redux**:> - `subscriptionsStartPolling` now returns a polling token (`string |undefined`) from background.> - **MetaMetrics**:> - Rename `ShieldSubscriptionUnexpectedErrorEvent` label to `ShieldSubscription Unexpected Error`.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit19e6dac. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
…38364)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Whenever there is the Backup Reminder modal, if we dismiss it using theClickElementSafe, we didn't wait for the modal to disappear. Then weperformed the next action (click menu), which if we do this while themodal being there, causes the click to take no effect/menu dont open inseveral cases (see artifacts).The solution is to wait until the modal disappears before performing thenext action<img width="1152" height="836" alt="image"src="https://github.com/user-attachments/assets/96addd50-546f-4bb7-b075-c880f49c2e95"/>[](https://codespaces.new/MetaMask/metamask-extension/pull/38364?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry:## **Related issues**Fixes:## **Manual testing steps**1. Check ci --- note that the change password spec has been run extratimes due to the quality gate, and it passed always## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Await the three-dot menu click and wait for the backup reminder modalto disappear, then dismiss it in change-password tests to proceedreliably.> > - **E2E Page Objects**:> - `test/e2e/page-objects/pages/header-navbar.ts`: `openThreeDotMenu`now awaits `clickElement` for non-Firefox.> - `test/e2e/page-objects/pages/home/homepage.ts`:`clickBackupRemindMeLaterButtonSafe` now asserts the button is notpresent after click (waits for modal dismissal).> - **Tests**:> - `test/e2e/tests/settings/change-password.spec.ts`: Invoke`clickBackupRemindMeLaterButtonSafe()` after landing on Home in bothflows before proceeding.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitd68e222. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->
This PR syncs the stable branch to main for version 13.12.0.*Synchronization Process:*- Fetches the latest changes from the remote repository- Resets the branch to match the stable branch- Attempts to merge changes from main into the branch- Handles merge conflicts if they occur*File Preservation:*Preserves specific files from the stable branch: - CHANGELOG.md - bitrise.yml - android/app/build.gradle - ios/MetaMask.xcodeproj/project.pbxproj - package.json Indicates the next version candidate of main to 13.12.0<!-- CURSOR_SUMMARY -->---> [!NOTE]> Updates CHANGELOG with 13.11.0 features/fixes and adjusts comparelinks to point from v13.11.0.> > - **Changelog updates (`CHANGELOG.md`)**:> - **13.11.0 section added**:> - Highlights include rewards onboarding (QR/tour), multiple ShieldUI/metrics updates, Token Insights modal, Nomina rename/logo, TRX dailyresources, sidepanel icon, and various UI polish.> - Extensive fixes across swaps/bridge, balances (incl. Tron/non‑EVM),social login, Snaps state sync, Shield plans/quotes, and layout/hoverregressions.> - **Links**:> - Update `[Unreleased]` to compare from `v13.11.0`.> - Add `[13.11.0]` compare link.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commitf6d4efa. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>Co-authored-by: runway-github[bot] <73448015+runway-github[bot]@users.noreply.github.com>Co-authored-by: Ulisses Ferreira <ulisses@hey.com>Co-authored-by: VGR <VanGulckRik@gmail.com>Co-authored-by: sophieqgu <sophieqgu@gmail.com>Co-authored-by: Salim TOUBAL <salim.toubal@outlook.com>Co-authored-by: Lionell Briones <llenoil@gmail.com>Co-authored-by: OGPoyraz <omergoktugpoyraz@gmail.com>Co-authored-by: Bernardo Garces Chapero <bernardo.chapero@consensys.net>Co-authored-by: Alejandro Garcia Anglada <aganglada@gmail.com>Co-authored-by: Jyoti Puri <jyotipuri@gmail.com>Co-authored-by: Nguyen Anh Tu <tunguyenanh@tunatech.org>Co-authored-by: Charly Chevalier <charly.chevalier@consensys.net>Co-authored-by: Mathieu Artu <mathieu.artu@consensys.net>Co-authored-by: Prithpal Sooriya <prithpal.sooriya@gmail.com>Co-authored-by: Lwin <147362763+lwin-kyaw@users.noreply.github.com>Co-authored-by: David Drazic <david@timechaser.org>Co-authored-by: seaona <54408225+seaona@users.noreply.github.com>Co-authored-by: hunty <hunter.goodreau@consensys.net>Co-authored-by: Antonio Regadas <antonio.regadas@consensys.net>Co-authored-by: Mark Stacey <mark.stacey@consensys.net>Co-authored-by: Danica Shen <zhaodanica@gmail.com>Co-authored-by: sophieqgu <37032128+sophieqgu@users.noreply.github.com>
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
socket-securitybot commentedNov 28, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Review the following changes in direct dependencies. Learn more aboutSocket for GitHub.
|
socket-securitybot commentedNov 28, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Warning MetaMask internal reviewing guidelines:
Ignoring alerts on:
|
This PR updates the change log for 13.12.0. (Hotfix - no test plangenerated.)<!-- CURSOR_SUMMARY -->---> [!NOTE]> Adds 13.12.0 release notes to `CHANGELOG.md` and updates comparisonlinks.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commit56c541f. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->---------Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>
metamaskbot commentedNov 28, 2025
Builds ready [15501cd]
UI Startup Metrics (1259 ± 122 ms)
|
gauthierpetetin commentedNov 28, 2025
@metamaskbot update-attributions |
metamaskbot commentedNov 28, 2025
Attributions updated |
metamaskbot commentedNov 28, 2025
Builds ready [74e4bd9]
UI Startup Metrics (1273 ± 94 ms)
|
…anel (#38394)- feat: confirmations for sidepanel (#38375)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**Enables the confirmation handler to listen from pages other than thehome page.There's a list of exempted routes including the confirmation routes.Depends on#38361 <!--Write a short description of the changes included in this pull request,also include relevant motivation and context. Have in mind the followingquestions:1. What is the reason for the change?2. What is the improvement/solution?-->[](https://codespaces.new/MetaMask/metamask-extension/pull/38375?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: feat: confirmations for sidepanel## **Related issues**Fixes:## **Manual testing steps**1. Switch to sidepanel2. Test requests and approvals## **Screenshots/Recordings**<!-- If applicable, add screenshots and/or recordings to visualize thebefore and after of your change. -->### **Before**<!-- [screenshots/recordings] -->### **After**<!-- [screenshots/recordings] -->## **Pre-merge author checklist**- [ ] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [ ] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Enables confirmation routing across routes (incl. sidepanel),centralizes modal handling with a network menu close action, and updatesmanifests/builds for side panel support.> > - **UI**:> - **Confirmation routing**: `ConfirmationHandler` now runs outside`DEFAULT_ROUTE`, adds exempt routes, and closes modals beforenavigating.> - **Modals**: New `useModalState` hook and `Modals` container torender `NetworkListMenu`; routes integrate `Modals` and remove inlinenetwork menu handling.> - **App state**: Add `CLOSE_NETWORK_MENU` action/reducer; export`closeNetworkMenu`; add selector `selectIsNetworkMenuOpen`.> - **Cleanup**: Remove unused sidepanel/env and swaps props in`home.container`.> - **Manifests/Build**:> - Add `"sidePanel"` permission and Chrome `side_panel.default_path`.> - Set `IS_SIDEPANEL: true` for main build.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita91ea96. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->[3c42ac3](3c42ac3)Co-authored-by: Francis Nepomuceno <n3ps@users.noreply.github.com>
metamaskbot commentedNov 28, 2025
Builds ready [20fc3c6]
UI Startup Metrics (1217 ± 99 ms)
|
gauthierpetetin commentedNov 28, 2025
@SocketSecurity ignore npm/@babel/plugin-proposal-private-methods@7.18.6 @SocketSecurity ignore npm/async-function@1.0.0 npm/string.prototype.repeat@1.0.0 (this comment was posted by@MajorLift onthis PR) |
gauthierpetetin commentedNov 28, 2025
@SocketSecurity ignore npm/http-errors@2.0.1 npm/statuses@2.0.2 npm/type-is@2.0.1 @SocketSecurity ignore npm/async-function@1.0.0 (this comment was posted by@MajorLift onthis PR) |
metamaskbot commentedNov 28, 2025
Builds ready [581d9a3]
UI Startup Metrics (1215 ± 103 ms)
|
…responsive timeout cp-13.12.0 (#38409)- chore: increase background connection unresponsive timeout (#38322)<!--Please submit this PR as a draft initially.Do not mark it as "Ready for review" until the template has beencompletely filled out, and PR status checks have passed at least once.-->## **Description**We are increasing the timeout value of our "Background connectionunresponsive" error screen to test if this screen is happening becauseit ACTUALLY can't connect, or if these incidents are just from slowdevices.[](https://codespaces.new/MetaMask/metamask-extension/pull/38322?quickstart=1)## **Changelog**<!--If this PR is not End-User-Facing and should not show up in theCHANGELOG, 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-Facingdescription 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 andaccurately)-->CHANGELOG entry: chore: increase background connection unresponsivetimeout<!--## **Related issues**Fixes:## **Manual testing steps**1. Go to this page...2.3.## **Screenshots/Recordings**### **Before**### **After**-->## **Pre-merge author checklist**- [x] I've followed [MetaMask ContributorDocs](https://github.com/MetaMask/contributor-docs) and [MetaMaskExtension CodingStandards](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/) formatif applicable- [x] I’ve applied the right labels on the PR (see [labelingguidelines](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 theapp, test code being changed).- [ ] I confirm that this PR addresses all acceptance criteria describedin the ticket it closes and includes the necessary testing evidence suchas recordings and or screenshots.<!-- CURSOR_SUMMARY -->---> [!NOTE]> Increase background connection unresponsive timeout from 10s to 15sand update the corresponding E2E test delay.> > - **Startup error handling**:> - Raise `BACKGROUND_CONNECTION_TIMEOUT` to `15_000` in`ui/helpers/utils/critical-startup-error-handler.ts`.> - **E2E tests**:> - Adjust delay to `15_000` in`test/e2e/tests/critical-errors/critical-errors.spec.ts` forunresponsive background case.> > <sup>Written by [CursorBugbot](https://cursor.com/dashboard?tab=bugbot) for commita5318b0. This will update automaticallyon new commits. Configure[here](https://cursor.com/dashboard?tab=bugbot).</sup><!-- /CURSOR_SUMMARY -->[c244b34](c244b34)Co-authored-by: David Murdoch <187813+davidmurdoch@users.noreply.github.com>Co-authored-by: Gauthier Petetin <gauthierpetetin@hotmail.com>
metamaskbot commentedNov 28, 2025
Builds ready [c07b2a0]
UI Startup Metrics (1228 ± 111 ms)
|
Uh oh!
There was an error while loading.Please reload this page.
🚀 v13.12.0 Testing & Release Quality Process
Hi Team,
As part of our newMetaMask 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