[pull] main from MetaMask:main#518
Merged
Merged
Conversation
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> This PR removes the usage of the selector `selectMultichainAccountsState2Enabled` which gets the value for the BIP-44 feature flag. Moving forward, BIP-44 is the default behaviour and any alternative logic branch will be remove alongside tests. The scope of the changes is limited to files inside the `app/components/UI` and `app/components/Views` directory. - Blocked by #24886 ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MUL-1384 ## **Manual testing steps** Not applicable ## **Screenshots/Recordings** Not applicable ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches core navigation and account selection/receive flows by removing fallback branches, so regressions could surface if any callers still rely on legacy (non-group) behavior or missing `selectedAccountGroup` handling. > > **Overview** > **BIP-44 multichain behavior is now treated as the default** by removing `selectMultichainAccountsState2Enabled`-gated branches and legacy account-view code paths. > > `AccountSelector` drops the EVM-only/legacy list and always renders `MultichainAccountSelectorList`, always uses “Add wallet” actions, and simplifies selection to `setSelectedAccountGroup`; its tests are rewritten accordingly and the old snapshot is removed. Related screens/tests are updated to remove legacy navigation paths (e.g., `BaseAccountDetails` now always routes to account-group edit-name), SRP import tracking always happens via the discovery callback, and the Wallet “Receive” flow always navigates to the multichain address list when a selected group is present. Confirmation account/network row UI is simplified by removing legacy network badge/name rendering and showing wallet name when multiple wallets exist, with test expectations updated. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3f0e0c7. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** These resolutions were either holding back new versions, or had no impact at all. Some resolutions were preserved but scoped to a single parent package, in cases where they only applied to one parent. ## **Changelog** CHANGELOG entry: null ## **Related issues** N/A ## **Manual testing steps** N/A ## **Screenshots/Recordings** N/A ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Dependency resolution changes can subtly alter transitive package versions and behavior, potentially impacting builds/tests even though no app runtime code is modified. > > **Overview** > Reduces and refines Yarn `resolutions` in `package.json` by **removing several global overrides** and **scoping a few remaining ones to specific parent packages** (e.g., `ganache/secp256k1`, `eas-cli/nanoid`, `@appium/schema/json-schema`). > > Regenerates `yarn.lock` to reflect the new resolution strategy, which results in **updated transitive versions** for a handful of packages (notably `@metamask/rpc-errors` to `7.0.3` and `@playwright/test`/`playwright` to `1.58.2`) and adds additional lock entries where multiple version ranges are now allowed. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9a8202b. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR adds a multi-functional provider selection modal by querying quotes and mapping them to the available providers. Users can now change their preferred provider by interacting with the payment method selection modal. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Adds a page for changing preferred ramp provider ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-3052 ## **Manual testing steps** ```gherkin Feature: my feature name Scenario: user [verb for user action] Given [describe expected initial app state] When user [verb for user action] Then [describe expected outcome] ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** Loom video demo of the feature: https://www.loom.com/share/0fcb15a5c937437c95eb24e4dc8cccf3 <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches ramp quote-fetching and selection flows across multiple screens/modals; mistakes could lead to incorrect quote context or polling behavior, though changes are UI-scoped and covered by updated tests. > > **Overview** > The ramp payment selection bottom sheet now **fetches/display quotes** and uses them to drive a new provider-selection experience: it calls `getQuotes` based on the current amount/wallet/token, shows per-payment-method quote output amounts, and lets users switch providers by selecting a provider’s quote (which also sets the selected quote). > > The modal UI adds **loading/empty/error states** (skeleton list + alert banners), disables “Change provider” when payment methods are loading/errored, and introduces reusable `QuoteDisplay` for rendering quote values, skeletons, or a warning icon (replacing the old `PaymentMethodQuote`). > > `BuildQuote` now passes the current amount into the payment selection modal, stops quote polling before navigating, and uses `useFocusEffect` to prevent polling when the screen is unfocused; tests/snapshots were updated accordingly (including new route param callback support on payment-method select). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 413e1b6. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** This PR brings back the Analytics checks on the swap spec file that was previously removed and enables back the dapp initiated transfer test. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-1157 ## **Manual testing steps** N/A ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** N/A ### **After** N/A <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Test-only changes that tighten/restore analytics assertions; main risk is increased smoke test flakiness due to stricter event/property expectations and reliance on mocked requests. > > **Overview** > Re-enables the `DApp Initiated Transfer` smoke spec (previously skipped) and updates its request mocks/fixtures to use `DEFAULT_ANVIL_PORT`, allow specific ignored request fields, and validate only the key transaction-related analytics events. > > Restores analytics validation in the swap action smoke test by opting into MetaMetrics, capturing analytics payloads from the first swap run, and adding a dedicated assertion test that checks expected SwapBridge event presence, counts, and property shapes. Also factors repeated transaction analytics property/type expectations into a shared `commonTransactionPropertiesAndTypes` helper. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f984c18. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!-- CURSOR_SUMMARY --> > [!NOTE] > **Low Risk** > Translation-only changes; no runtime logic changes, with the main risk being missing/inconsistent locale strings causing user-facing copy issues. > > **Overview** > Refreshes German (`de.json`) and Greek (`el.json`) locale files with **new and corrected translations** across multiple UI areas. > > Adds new i18n keys for newer flows (e.g., gas sponsorship reserve-balance warnings, first-time address interaction warning, wallet creation error reporting, provider selection/payment method strings, additional perps status/validation/tooltips, card provisioning/onboarding consent/legal text, and new mUSD claim-related labels), and replaces several leftover English strings with localized equivalents while introducing some new English placeholders that may still need translation. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit b1cb594. This will update automatically on 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 been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
The purpose of this PR is to add intial e2e coverage for the unified buy
flow.
> Primarily test/mocking changes, but it alters fixture state shape and
expands network allowlisting, which can impact E2E reliability and
masking of unmocked calls if misconfigured.
>
> **Overview**
> Adds initial E2E coverage for the new **Unified Buy (v2) onramp**
flow, including a new smoke test (`onramp-unified-buy.spec.ts`) and
updates to page objects to support unified-buy interactions (new
`unifiedBuyButton`, token search screen naming, and keypad/amount entry
behavior differences).
>
> Extends test infrastructure to support unified routing: adds region
eligibility + `v2/quotes` mocks, introduces unified ramps remote
feature-flag mock helpers, expands the e2e allowlist for onramp hosts,
and updates fixtures/region types so tests set
`RampsController.userRegion` (with country/state ISO metadata) instead
of legacy `fiatOrders.selectedRegionAgg`.
>
> Minor app-side testability tweaks: centralizes the Build Quote
continue button selector and adds `testID`s for amount display and
token-search input.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Mostly test/mocking changes, but it expands allowed network hosts and
changes fixture state shape (`RampsController.userRegion`), which could
mask unmocked calls or break other E2E setups if misconfigured.
>
> **Overview**
> Adds an initial Detox smoke test for *Unified Buy (v2) onramp*
(`onramp-unified-buy.spec.ts`) and updates page objects to support
unified-buy interactions (new `unifiedBuyButton`, token-select screen
helper, and amount entry differences).
>
> Extends E2E test infrastructure for unified routing by adding remote
feature-flag helpers (`rampsUnifiedBuyV1`/`rampsUnifiedBuyV2`), new
region-eligibility and `v2/quotes` API mocks, and expanding the
API-mocking allowlist to include additional UAT onramp hosts.
>
> Updates fixture/state typing to set
`engine.backgroundState.RampsController.userRegion` (with country/state
ISO metadata) while keeping legacy `fiatOrders.selectedRegionAgg` for
backwards compatibility, and adds a couple of app-side `testID`/selector
centralizations to stabilize tests (amount display, token search input,
continue button).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
def9458. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**
The PredictController was designed with multi-provider support (using a
`Map<string, PredictProvider>`), but we only ever use Polymarket and
have no plans to support additional providers. This PR simplifies the
entire Predict feature to single-provider architecture.
### Changes:
- **Controller core**: Replace `providers: Map<string, PredictProvider>`
with a single `provider: PolymarketProvider` instance. Remove
initialization machinery (`initializeProviders`,
`performInitialization`, `isInitialized`).
- **State shape**: Flatten `eligibility`, `balances`, and
`pendingDeposits` by removing the provider-key nesting. `accountMeta` is
left unchanged for backwards compatibility (persisted data).
- **Type interfaces**: Remove `providerId` from all param types
(`GetMarketsParams`, `GetPositionsParams`, `PlaceOrderParams`,
`PreviewOrderParams`, `GetPriceHistoryParams`, `GetPriceParams`,
`GetBalanceParams`, etc.)
- **Hooks**: Remove `providerId` option from all ~20 hooks
- **Selectors**: Update `selectPredictBalanceByAddress` and
`selectPredictPendingDepositByAddress` to use flat state
- **Components/Views**: Remove `providerId` prop passing throughout UI
layer
- **Tests**: Update all test files for new state shapes and method
signatures
## **Changelog**
CHANGELOG entry: null
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: Predict market functionality
Scenario: user interacts with prediction markets
Given user has the Predict feature enabled
When user browses markets, views positions, places orders, deposits, withdraws, or claims
Then all functionality works identically to before the refactoring
```
## **Screenshots/Recordings**
N/A — no UI changes, purely internal refactoring.
### **Before**
Multi-provider architecture with `Map<string, PredictProvider>` and
`providerId` params throughout.
### **After**
Single `PolymarketProvider` instance, flat state shapes, no `providerId`
params needed.
## **Pre-merge author checklist**
- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Broad signature/state refactor across Predict hooks and components
could cause subtle runtime breakage if any call sites or controller
methods still expect `providerId`. Risk is mitigated by updated unit
tests but warrants focused regression on deposit/claim/cashout flows and
price-history fetching.
>
> **Overview**
> Refactors Predict toward a **single-provider (Polymarket) model** by
removing `providerId` parameters/props from UI calls into Predict hooks
(e.g., `usePredictActionGuard`, `usePredictClaim`, `useUnrealizedPnL`,
`usePredictPriceHistory`).
>
> Updates affected components (e.g., balance/add-funds sheets, market
cards, picks, position details, game chart) to rely on navigation/market
IDs only, and adjusts tests accordingly (replacing hardcoded
`'polymarket'` strings with `POLYMARKET_PROVIDER_ID` and deleting
coverage for custom provider IDs).
>
> Reworks `PredictController.getActivity` unit test to construct a real
messenger-backed controller and to mock `PolymarketProvider` directly,
validating default selected-address behavior and explicit-address
overrides without multi-provider merging/lookup scenarios.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b1f33c3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
The purpose of this PR is to fix universal link handling for buy/sell
deeplinks by removing the unnecessary "Proceed with
caution" interstitial modal. The issue was that Buy, sell, and swap
deeplinks (e.g., `metamask://buy?chainId=1&amount=275`) were triggering
an interstitial modal requiring user confirmation. What I did here was
to add `BUY, BUY_CRYPTO, SELL, SELL_CRYPTO`, actions to
`WHITELISTED_ACTIONS` in `handleUniversalLink.ts`.
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry:
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Low Risk**
> Small, localized change to deep link gating logic; risk is limited to
potentially bypassing the interstitial for buy/sell links if the
whitelist is too permissive.
>
> **Overview**
> Buy/sell universal links now skip the “Proceed with caution”
interstitial by adding `BUY`, `BUY_CRYPTO`, `SELL`, and `SELL_CRYPTO` to
`WHITELISTED_ACTIONS` in `handleUniversalLink.ts`.
>
> This changes universal link handling so these ramp-related deeplinks
proceed directly while still being treated as supported actions for
downstream routing/analytics.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9e1fc60. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
init the new assets controller under a feature flag
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: init the new assets controller under a feature flag
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Introduces a new core Engine controller and messaging surface area,
which can affect persisted state shape and background state change
handling even though runtime behavior is gated behind a remote feature
flag.
>
> **Overview**
> Initializes and registers the new `AssetsController` (from
`@metamask/assets-controller`) in the Engine, including adding it to
controller init lists, Engine context/state export, and background
`stateChange` event tracking.
>
> Adds `assetsControllerInit` plus a dedicated messenger pair
(`AssetsController` + `AssetsControllerInit`) that wires required
actions/events and gates activation via the `assetsUnifyState` remote
feature flag (version-checked), while also providing an API platform
client (bearer token) and token-detection preference into the
controller.
>
> Updates test fixtures/snapshots and API-mocking defaults to include
the new controller’s initial state and an additional
`v2/supportedNetworks` response; also cleans up a Login test to use
`DeepPartial` for mocked Redux state.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a998149. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## Version Bump After Release This PR bumps the main branch version from 7.66.0 to 7.67.0 after cutting the release branch. ### Why this is needed: - **Nightly builds**: Each nightly build needs to be one minor version ahead of the current release candidate - **Version conflicts**: Prevents conflicts between nightlies and release candidates - **Platform alignment**: Maintains version alignment between MetaMask mobile and extension - **Update systems**: Ensures nightlies are accepted by app stores and browser update systems ### What changed: - Version bumped from `7.66.0` to `7.67.0` - Platform: `mobile` - Files updated by `set-semvar-version.sh` script ### Next steps: This PR should be **manually reviewed and merged by the release manager** to maintain proper version flow. ### Related: - Release version: 7.66.0 - Release branch: release/7.66.0 - Platform: mobile - Test mode: false --- *This PR was automatically created by the `create-platform-release-pr.sh` script.* Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
## **Description** These were not referenced anywhere, and had no lockfile impact. ## **Changelog** CHANGELOG entry: null ## **Related issues** N/A ## **Manual testing steps** N/A ## **Screenshots/Recordings** N/A ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Deletes unreferenced patch artifacts only; risk is limited to the unlikely case a patch was implicitly relied on despite not being wired into dependency resolution. > > **Overview** > Removes several unused Yarn patch files under `.yarn/patches`, including patches previously targeting `@metamask/*` controllers and `appwright`/Appium configuration tweaks. > > No runtime or dependency behavior is intended to change, since these patches were not referenced by `package.json` resolutions/lockfile. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3e4d52e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->
## **Description**
Uses the priceImpact or destTokenAmount to sort bridge quotes if fiat
cost is not available
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`
If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`
(This helps the Release Engineer do their job more quickly and
accurately)
-->
CHANGELOG entry: fix: fall back to priceImpact or destTokenAmount for
swap quote sorting
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: my feature name
Scenario: user [verb for user action]
Given [describe expected initial app state]
When user [verb for user action]
Then [describe expected outcome]
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
### **After**
<!-- [screenshots/recordings] -->
## **Pre-merge author checklist**
- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.
## **Pre-merge reviewer checklist**
- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> Changes quote ordering logic and timing of exchange-rate fetching,
which can affect which quote is recommended and potentially alter
user-facing swap/bridge outcomes when data is missing.
>
> **Overview**
> Improves `selectSortedBridgeQuotes` sorting behavior in the patched
`@metamask/bridge-controller` so the default sort no longer treats
missing fiat cost as `0`; it now sorts by fiat cost when available for
all quotes, otherwise falls back to `priceImpact`, and finally
`destTokenAmount`.
>
> Moves `fetchAssetExchangeRates` from the quote-request update path to
the `fetchBridgeQuotes` path (fire-and-forget with logging), aligning
rate fetching with quote retrieval.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b977cf1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…ack local (#25990) <!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** - Added new scripts in `package.json` for running MM Connect tests on BrowserStack, including local tunnel support. - Updated `appwright.config.ts` to define specific test matches for MM Connect scenarios. - Enhanced the `BrowserStackDeviceProvider` to support local testing capabilities. - Updated README with instructions for running MM Connect tests locally and on BrowserStack. This improves the testing framework for MM Connect, allowing for better integration with BrowserStack's local testing features. <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-1419 ## **Manual testing steps** ```gherkin Feature: MM Connect – Multichain API connection to local Browser Scenario: Connect wallet to local test dapp and verify multichain connection Given the user is logged into MetaMask on a mobile device And a local Browser Playground dapp server is running on port 8090 When the user launches the mobile browser (Chrome) And the browser opens with a single tab and any first-run modals are dismissed And the user navigates to the dapp URL (local emulator or BrowserStack Local tunnel) And the user taps "Connect" in the dapp And the user approves the connection in MetaMask And the test switches back to the browser without reloading the page Then the dapp shows the wallet as connected with multichain scope cards And at least the default scope "eip155:1" is visible And the user can disconnect from the dapp Scenario: Connect to local dapp from BrowserStack cloud device via Local tunnel Given the BrowserStack Local binary is running with the same access key as in .e2e.env And the local Browser Playground dapp server is running on port 8090 on the host machine When the tester runs the test with BROWSERSTACK_LOCAL=true (e.g. yarn run-appwright:mm-connect-android-bs-local) Then the BrowserStack session is created with Local testing "On" (local: true in capabilities) And the cloud device loads the dapp at "http://bs-local.com:8090" through the tunnel And the test completes the connect flow and verifies multichain connection on the same dapp tab ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** Test run passes on [browserstack](https://app-automate.browserstack.com/builds/5848fa614265dae9ee9ed2b2882ec1679f932355/sessions/805740cfcc0ba3ec8a3ce2b6cdb5ddab4018eaab?auth_token=3473bf0be3da94c4f637f168377b6ed98eadf6280c53bdeaa7b61c551cb5fe36) <!-- [screenshots/recordings] --> No impact on existing appwright performance tests [workflows](https://github.com/MetaMask/metamask-mobile/actions/runs/21965341810). ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I've included tests if applicable - [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Touches test infrastructure and the patched `appwright` runtime (BrowserStack/Appium capabilities, locator selection), which can change how CI sessions are created and how elements are resolved across many tests, but does not affect production app code. > > **Overview** > Enables running MM Connect performance tests on BrowserStack with optional **BrowserStack Local** tunneling, including new `package.json` scripts and doc updates, and updates the multichain connect spec to use `bs-local.com` when `BROWSERSTACK_LOCAL=true` and to switch back to the existing browser tab after approvals. > > Hardens Android browser automation by clearing/launching Chrome with FRE disabled, dismissing common first-run modals with bounded timeouts, and making navigation more resilient when the search box is missing. > > Updates the patched `appwright@0.1.45` provider behavior for CI stability/perf: single-worker/single-retry defaults, improved element lookup when `textToMatch` is unset, added Appium chromedriver auto-download support, expanded BrowserStack capabilities (local flag, build name override, logging/profiling/self-heal, and Appium settings), and allows skipping BrowserStack video downloads via `DISABLE_VIDEO_DOWNLOAD` (set in the performance runner workflow). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ce3dada. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )