Skip to content

[pull] main from MetaMask:main#513

Merged
pull[bot] merged 17 commits into
Reality2byte:mainfrom
MetaMask:main
Feb 11, 2026
Merged

[pull] main from MetaMask:main#513
pull[bot] merged 17 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Feb 11, 2026

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 : )

metamaskbot and others added 17 commits February 6, 2026 19:01
## Summary

This PR syncs the latest changes from `stable` into `release/7.64.1`.

## Why is this needed?

A release branch (`release/7.64.0`) was merged into `stable`. This PR
brings those changes (hotfixes, etc.) into `release/7.64.1`.

## Action Required

**Please review and resolve any merge conflicts manually.**

If there are conflicts, they will appear in this PR. Resolve them to
ensure the release branch has all the latest fixes from stable.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only change to the changelog with no runtime or
behavioral impact.
> 
> **Overview**
> Updates `CHANGELOG.md` for `7.64.0` by adding an entry noting the
CardHome button color change (`#25737`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
13e2756. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: João Loureiro <175489935+joaoloureirop@users.noreply.github.com>
…IDGE_CHAIN_IDS (#25808)

- fix: check chainRanking against ALLOWED_BRIDGE_CHAIN_IDS (#25788)

<!--
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**
When new networks are added to the chainRanking remote feature flag in
LaunchDarkly, older app versions that don't support those networks would
still surface them in the UI (destination network pills, source chain
checks). This creates a forward-compatibility gap where users could see
unsupported networks.

This change adds client-side filtering of chainRanking against
ALLOWED_BRIDGE_CHAIN_IDS — the hardcoded allowlist in
@metamask/bridge-controller that defines which chains this version of
the client actually supports. This ensures that chains added to the
remote flag in the future are silently ignored by older app versions
that lack support for them.

<!--
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: null

## **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**
> Touches bridge network selection/enablement selectors, so a mistake
could hide valid networks or incorrectly disable bridging, but the
change is narrow and well-covered by unit tests.
> 
> **Overview**
> Adds a client-side allowlist check (`isAllowedBridgeChainId`) so
`chainRanking` entries are filtered against `ALLOWED_BRIDGE_CHAIN_IDS`
before being surfaced.
> 
> `selectSourceChainRanking` now filters by *both* supported chains and
user-configured networks, `selectDestChainRanking` filters to supported
chains only, and `selectIsBridgeEnabledSourceFactory` now treats a
source chain as enabled only if it exists in the filtered
`chainRanking`. Tests are expanded to cover EVM/non-EVM unsupported
chains and the new source/dest filtering behavior.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
557c0e3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->


[2726418](2726418)

Co-authored-by: Bryan Fullam <bryan.fullam@consensys.net>
<!--
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**

**Reason for change:** `yarn audit:ci` was failing due to a
high-severity vulnerability in `axios` (GHSA-43fc-jf86-j433): Denial of
Service via the `__proto__` key in `mergeConfig`. Affected versions are
≤1.13.4; the project was on 1.12.2.

**Solution:**
- Bumped axios resolutions to `^1.13.5` in root `package.json` (both
resolution entries) and in `.github/scripts/package.json`.
- Added `axios` to `npmPreapprovedPackages` in `.yarnrc.yml` so Yarn’s
3-day minimal age gate allows the new release.
- Ran `yarn install --no-immutable` to update the lockfile to axios
1.13.5.

No code changes; dependency upgrade only. `yarn audit:ci` now passes.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes: N/A

## **Manual testing steps**

```gherkin
Feature: Security audit and dependency usage after axios upgrade

  Scenario: CI audit passes after axios upgrade
    Given the repo has axios resolved to 1.13.5
    When I run yarn audit:ci
    Then the command exits with code 0 and reports no audit suggestions

  Scenario: App and scripts still run with upgraded axios
    Given the branch is checked out and dependencies are installed
    When I run yarn install and then run any flow that uses axios (e.g. scripts or app network calls)
    Then no runtime errors occur and behavior is unchanged
```

## **Screenshots/Recordings**

Not applicable (dependency-only change; no UI changes).

### **Before**

N/A

### **After**

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).
- [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**
> Dependency upgrade plus bundler resolution changes could affect
runtime networking behavior or Metro module resolution, especially if
any code relied on Axios’ Node build.
> 
> **Overview**
> Bumps `axios` to `^1.13.5` (and updates both root `yarn.lock` and
`.github/scripts/yarn.lock`) to address the reported security advisory.
> 
> Updates `metro.config.js` resolver logic to always redirect `axios`
(and `axios/dist/node/*`) imports to `axios/dist/browser/axios.cjs`,
while preserving the existing E2E-only Sentry module mocking behavior
under the new unified `resolveRequest` handler.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
520829a. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: sethkfman <10342624+sethkfman@users.noreply.github.com>
Co-authored-by: Mark Stacey <markjstacey@gmail.com>
Co-authored-by: Cal-L <cal.leung@consensys.net>
# 🚀 v7.64.1 Testing & Release Quality Process

Hi Team,  
As part of our new **MetaMask Release Quality Process**, here’s a quick
overview of the key processes, testing strategies, and milestones to
ensure a smooth and high-quality deployment.

---

## 📋 Key Processes

### Testing Strategy
- **Developer Teams:**  
Conduct regression and exploratory testing for your functional areas,
including automated and manual tests for critical workflows.
- **QA Team:**  
Focus on exploratory testing across the wallet, prioritize high-impact
areas, and triage any Sentry errors found during testing.
- **Customer Success Team:**  
Validate new functionalities and provide feedback to support release
monitoring.

### GitHub Signoff
- Each team must **sign off on the Release Candidate (RC)** via GitHub
by the end of the validation timeline (**Tuesday EOD PT**).
- Ensure all tests outlined in the Testing Plan are executed, and any
identified issues are addressed.

### Issue Resolution
- **Resolve all Release Blockers** (Sev0 and Sev1) by **Tuesday EOD
PT**.
- For unresolved blockers, PRs may be reverted, or feature flags
disabled to maintain release quality and timelines.

### Cherry-Picking Criteria
- Only **critical fixes** meeting outlined criteria will be
cherry-picked.
- Developers must ensure these fixes are thoroughly reviewed, tested,
and merged by **Tuesday EOD PT**.

---

## 🗓️ Timeline and Milestones

1. **Today (Friday):** Begin Release Candidate validation.  
2. **Tuesday EOD PT:** Finalize RC with all fixes and cherry-picks.  
3. **Wednesday:** Buffer day for final checks.  
4. **Thursday:** Submit release to app stores and begin rollout to 1% of
users.
5. **Monday:** Scale deployment to 10%.  
6. **Tuesday:** Full rollout to 100%.

---

## ✅ Signoff Checklist

Each team is responsible for signing off via GitHub. Use the checkbox
below to track signoff completion:

# Team sign-off checklist
- [ ] Mobile Platform

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
- Testing plan sheet -
https://docs.google.com/spreadsheets/d/1tsoodlAlyvEUpkkcNcbZ4PM9HuC9cEM80RZeoVv5OCQ/edit?gid=404070372#gid=404070372
## **Description**

The region eligibility API (`/regions/countries/{region}`) was logging
errors to Sentry via `Logger.error` for every non-OK response (403, 404,
5xx), generating **16k Sentry events from 3.4k users** over 2 months.

These are API-side concerns, not FE bugs:
- **403**: User's IP blocked by Cloudflare/WAF (VPN, sanctions, bot
detection)
- **404**: Region code not in the eligibility dataset (e.g. Kosovo `XK`,
bare `US`/`CA` without state)
- **5xx**: API-side outage — the API team should monitor this, not the
FE

**Change:** Remove `Logger.error` from the catch block so these expected
failures stop flooding Sentry. The existing `ERROR` routing and
user-facing "Eligibility check failed" message remain unchanged.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Refs: https://metamask.sentry.io/issues/7034541328/
Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-3246

## **Manual testing steps**

```gherkin
Feature: Ramp region eligibility error handling

  Scenario: user in a supported region opens buy flow
    Given the user's geolocation returns a valid region (e.g. US-TX, GB, DE)

    When user taps "Buy" on the wallet screen
    Then the existing routing logic (deposit vs aggregator) works as before

  Scenario: user in an unsupported region opens buy flow
    Given the eligibility API returns a non-OK response (403, 404, etc.)

    When user taps "Buy" on the wallet screen
    Then user sees "Eligibility check failed" modal (same as before)
    And no error is logged to Sentry
```

## **Screenshots/Recordings**

### **Before**

N/A — no UI changes. The user-facing behavior is identical before and
after this change.

### **After**

N/A — same user-facing behavior. The only difference is that errors are
no longer logged to Sentry.

## **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**
> Removes only error logging and does not change routing decisions or
data handling; primary risk is reduced observability for unexpected
client-side failures.
> 
> **Overview**
> Stops logging ramp region eligibility fetch failures in
`useRampsSmartRouting` by removing `Logger.error` from the `catch` path.
> 
> The hook still falls back to `UnifiedRampRoutingType.ERROR` on any
exception/non-OK response, but these expected API-side failures will no
longer generate Sentry noise.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
303924d. 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 PR syncs the stable branch to main for version 7.66.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 7.66.0

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only changes to the changelog and version compare links;
no runtime code is affected.
> 
> **Overview**
> Adds a new `7.64.1` section to `CHANGELOG.md` documenting a fix for
validating `chainRanking` against `ALLOWED_BRIDGE_CHAIN_IDS`.
> 
> Also corrects a formatting issue in the `7.63.1` section (removes a
stray line and normalizes the Perps reconnect entry) and updates the
compare links at the bottom so `Unreleased` now points to `v7.64.1` and
includes a new `7.64.1` tag link.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2102d66. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

The `useDetectGeolocation` hook was throwing and reporting **all**
non-ok HTTP responses (e.g. 502 Bad Gateway) to Sentry via
`Logger.error`, generating **64k+ events** for server-side issues not
actionable by the mobile client.

**Root causes addressed:**
1. **Sentry noise**: The hook threw an error on any non-ok HTTP
response, which was then caught and sent to Sentry. HTTP error responses
(502, 404, etc.) are server-side issues — the mobile client cannot fix
them, so they should not be reported as app errors.
2. **Unhelpful error message**: The error used `response.statusText`
which is always empty under HTTP/2, producing `"Network response was not
ok: "` with no diagnostic value.

**What changed:**
- Non-ok HTTP responses now return early instead of throwing — no Sentry
report
- Genuine client-side exceptions (network failures, parsing errors) are
still reported to Sentry via `Logger.error` for platform team visibility
- Added explicit `void` return type to the hook
- Updated tests to verify the correct error handling behaviour
- Fixed typo in test describe block (`useDetecGeolocation` →
`useDetectGeolocation`)

**User-facing impact:**
When the geolocation endpoint returns an HTTP error,
`detectedGeolocation` remains `undefined` in Redux. This triggers the
existing fallback flow: `useRampsSmartRouting` sets
`rampRoutingDecision` to `ERROR`, and `useRampNavigation.goToBuy()`
intercepts navigation to show the **EligibilityFailedModal** instead of
the token selection screen. This behaviour is unchanged — users already
see this modal when geolocation fails. The only difference is that these
server-side HTTP errors are no longer flooding Sentry.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-3254
Refs: https://metamask.sentry.io/issues/7034541328/

## **Manual testing steps**

```gherkin
Feature: Geolocation detection on Ramp

  Scenario: user opens the Ramp flow when geolocation endpoint is healthy
    Given the geolocation API returns a valid country code
    When user navigates to Buy/Sell
    Then the detected geolocation is stored in Redux state

  Scenario: user opens the Ramp flow when geolocation endpoint returns an HTTP error
    Given the geolocation API returns a 502 Bad Gateway
    When user navigates to Buy/Sell
    Then no error is reported to Sentry
    And the user sees the EligibilityFailedModal with "Contact Support" and "Got it" buttons

  Scenario: user opens the Ramp flow when network is unavailable
    Given the device has no network connectivity
    When user navigates to Buy/Sell
    Then the network error is reported to Sentry for platform team visibility
    And the user sees the EligibilityFailedModal with "Contact Support" and "Got it" buttons
```

## **Screenshots/Recordings**

### **Before**

Not applicable (no UI changes)

### **After**

Not applicable (no UI changes)

## **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**
> Small, localized change to error-handling in `useDetectGeolocation`
with updated unit tests; main risk is silently ignoring HTTP error
responses if downstream expects a dispatched failure state.
> 
> **Overview**
> Geolocation detection no longer throws/logs when the geolocation
endpoint returns a non-OK HTTP response; it now returns early, avoiding
noisy Sentry reports for server-side failures.
> 
> Client-side exceptions (e.g., network failures or `response.text()`
errors) are still reported via `Logger.error`, the hook now has an
explicit `void` return type, and tests were updated to reflect the new
behavior (including fixing a `useDetecGeolocation` typo and removing
edge-case error tests that no longer apply).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
cbe7620. 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>
@pull pull Bot locked and limited conversation to collaborators Feb 11, 2026
@pull pull Bot added the ⤵️ pull label Feb 11, 2026
@pull pull Bot merged commit 769383e into Reality2byte:main Feb 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants