Skip to content

[pull] main from MetaMask:main#403

Merged
pull[bot] merged 12 commits into
Reality2byte:mainfrom
MetaMask:main
Dec 11, 2025
Merged

[pull] main from MetaMask:main#403
pull[bot] merged 12 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull

@pull pull Bot commented Dec 11, 2025

Copy link
Copy Markdown

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

dan437 and others added 12 commits December 11, 2025 18:37
#23922)

## **Description**
Changes:
https://github.com/MetaMask/smart-transactions-controller/releases/tag/v21.0.0

## **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**
Quickest way is to upgrade or downgrade an EIP-7702 account and use any
gas fee token, with STX enabled.

Before this fix only one transaction from a batch would be marked as
failed, with this all transactions in a batch are marked as failed. It
only started happening after we started returning a txHash asap. Before
that all transactions were being marked as failed in the
TransactionController.

## **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]
> Upgrades smart-transactions controller to ^21.0.0 and removes
`TransactionController:confirmExternalTransaction` from delegated
messenger actions, updating tests accordingly.
> 
> - **Dependencies**:
>   - Bump `@metamask/smart-transactions-controller` to `^21.0.0`.
> - **Engine/Messenger**:
> - Update
`app/core/Engine/messengers/smart-transactions-controller-messenger.ts`
to stop delegating `TransactionController:confirmExternalTransaction`.
> - **Tests**:
> - Align `app/util/smart-transactions/smart-publish-hook.test.ts`
messenger actions by removing
`TransactionController:confirmExternalTransaction`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6915565. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
## **Description**

PR adds metrics for trending.

|       Metric                   | Event Name  | Key Property
| ---------------------- | ------------- |---------------
| Trending Feed visitsl | TRENDING_FEED_VIEWED | session_id,
is_session_end
| Time spent on page  | TRENDING_FEED_VIEWED  | session_time
| Swap volume from Trending | SWAP_BUTTON_CLICKED  | from_trending: true
| Perps volume from Trending | PERPS_TRADE_TRANSACTION | source:
'trending'
| Predict volume from Trending | PREDICT_TRADE_TRANSACTION |
entry_point: 'trending'

To test this i added logs where it should emit the events:

1️⃣ & 2️⃣ Trending Feed Session (Visits + Time Spent)
File: app/components/UI/Trending/services/TrendingFeedSessionManager.ts

```
private trackEvent(isSessionEnd: boolean = false): void {
  if (!this.sessionId) return;

  const analyticsProperties = {
    session_id: this.sessionId,
    session_time: this.getElapsedTime(),
    is_session_end: isSessionEnd,
    entry_point: this.entryPoint,
  };

  // eslint-disable-next-line no-console
  console.log('=== TRENDING_FEED_VIEWED ===', analyticsProperties);

  MetaMetrics.getInstance().trackEvent(
    // ... existing code
  );
}
```

3️⃣ Swap Volume from Trending
File: app/components/UI/Bridge/hooks/useSwapBridgeNavigation/index.ts
```
      const swapEventProperties = {
        location,
        chain_id_source: getDecimalChainId(sourceToken.chainId),
        token_symbol_source: sourceToken?.symbol,
        token_address_source: sourceToken?.address,
        from_trending: fromTrending ?? false,
      };
      // eslint-disable-next-line no-console
      console.log('=== SWAP_BUTTON_CLICKED ===', swapEventProperties);
      trackEvent(
        createEventBuilder(MetaMetricsEvents.SWAP_BUTTON_CLICKED)
          .addProperties(swapEventProperties)
          .build(),
      );
```

4️⃣ Perps Volume from Trending
File: app/components/UI/Perps/controllers/services/TradingService.ts

```
     .......
    } else {
      // Add failure-specific properties
      eventBuilder.addProperties({
        [PerpsEventProperties.ERROR_MESSAGE]:
          error?.message || result?.error || 'Unknown error',
      });
    }

    // eslint-disable-next-line no-console
    console.log('=== PERPS_TRADE_TRANSACTION ===', {
      asset: params.coin,
      source: params.trackingData?.source || 'none',
      status,
    });
```

5️⃣ Predict Volume from Trending
File: app/components/UI/Predict/controllers/PredictController.ts

```
console.log('=== PREDICT_TRADE_TRANSACTION ===', {
  marketId: analyticsProperties?.marketId,
  entryPoint: analyticsProperties?.entryPoint,
  transactionType: analyticsProperties?.transactionType,
  status,
});

MetaMetrics.getInstance().trackEvent(
  // ... existing code
);
```


### 🧪 Test Scenarios

**Test 1: Trending Feed Session**
Navigate to Trending tab
Check: Log shows TRENDING_FEED_VIEWED with is_session_end: false
Wait 30 seconds
Navigate away OR background the app
Check: Log shows TRENDING_FEED_VIEWED with is_session_end: true,
session_time: ~30

**Test 2: Swap from Trending**
Go to Trending → Click on a token card
On Token Details, click Swap
Check: Log shows from_trending: true
Test 3: Swap NOT from Trending
Go to Wallet → Click on any token
Click Swap
Check: Log shows from_trending: false

**Test 4: Perps from Trending (Carousel)**
Go to Trending → Click on a Perps market card in carousel
Click Long/Short → Place order
Check: Log shows source: "trending"

**Test 5: Perps from Trending (QuickAction)**
Go to Trending → Click Perps QuickAction button
Click on a market from the list
Click Long/Short → Place order
Check: Log shows source: "trending"

**Test 6: Perps NOT from Trending**
Go to Perps tab from home (not from Trending)
Click on start trading → Choose any crypto → Place order
Check: Log shows source: "none" or different source

**Test 7: Predict from Trending**
Go to Trending → Click on a Predict market card in carousel
Click Yes/No → Complete trade
Check: Log shows entryPoint: "trending"

**Test 8: Predict NOT from Trending**
Go to Predict tab directly
Click on a market → Complete trade
Check: Log shows entryPoint: "predict_feed"


## **Changelog**

CHANGELOG entry: Adds metrics for trending feature

## **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]
> Adds Trending Feed session analytics and propagates “from
trending”/entry point to Swaps, Perps, and Predict events.
> 
> - **Analytics**:
> - **Trending session**: Introduces `TrendingFeedSessionManager` to
track sessions (start/end, app state) and emits `TRENDING_FEED_VIEWED`
with `session_id`, `session_time`, `is_session_end`, `entry_point`.
> - **Events**: Registers `TRENDING_FEED_VIEWED` in
`MetaMetrics.events`.
> - **Trending View**:
> - Initializes/destroys trending sessions in `Views/TrendingView.tsx`
(enable AppState listener, start/end session).
> - **Swaps**:
> - In `useSwapBridgeNavigation`, augments `SWAP_BUTTON_CLICKED` with
`from_trending` based on active trending session.
> - **Perps**:
> - Auto-sets tracking `source: 'trending'` in `PerpsOrderView` when
session active; `TradingService` includes `source` in
`PERPS_TRADE_TRANSACTION`.
>   - Extends `TrackingData` with optional `source`.
> - **Predict**:
> - Auto-resolves `entryPoint` to `ENTRY_POINT.TRENDING` in
`PredictMarketSingle`/`PredictMarketMultiple` and propagates via
navigation (including market details); adds `ENTRY_POINT.TRENDING` to
constants and types.
> - **Tests**:
>   - Adds comprehensive tests for `TrendingFeedSessionManager`.
> - Updates Predict component tests to mock session manager and validate
navigation params.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ca00a11. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

When deeplinking the user into the wallet for non-initial connection
cases, the wallet has no idea which connection/session the user is
opening the wallet from. In the case that the connection the dapp is
using no longer exists on the wallet side, the user will sit in the
wallet indefinitely waiting for a request that will never arrive.

This PR fixes that by checking the connection id from the new simple
deeplink of format `metamask://connect/mwp?id=CONN_ID_HERE. This will
allow the wallet to prompt the user with an error toast if that
connection no longer exists on the wallet side.

## **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

MetaMask Connect has not been released yet

## **Related issues**

See: MetaMask/connect-monorepo#63

## **Manual testing steps**
Writing these testing steps as if you have context already. If not,
please reach out to the Wallet Integrations team.

1. Build the connect-monorepo packages in the branch linked above
2. Delete all node_modules from wagmi and reinstall them
3. Rebuild wagmi packages
4. Start the wagmi react playground
5. Visit the wagmi dapp from the native mobile browser
6. Create a new connection
7. In the wallet, clear all MMC connections by going to settings ->
privacy -> connections
8. From the dapp in the native mobile browser, make a sign request
9. Open the deeplink
10. the wallet should show you a not found error toast like the one in
the recording

NOTE: if you are using expo, I highly recommend swiping away the
metamask app between each deeplink

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/95f8f602-f6cc-40a6-9494-32843ae02374

## **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]
> Adds simple MWP deeplink handling that shows a “Connection Not Found”
toast when a referenced session is missing, and updates QR
scanner/deeplink logic to new isMwpDeeplink/handleMwpDeeplink APIs.
> 
> - **SDK Connect V2 (Core)**:
> - Introduces `isMwpDeeplink`, `handleMwpDeeplink(url)` and
`handleSimpleDeeplink(id)` in `connection-registry`.
> - Simple deeplink (`metamask://connect/mwp?id=...`) checks store for
the connection; if missing, waits for unlock and shows error via host
app.
> - Adds `showNotFoundError()` to `HostApplicationAdapter` and
`IHostApplicationAdapter` to display a new error toast.
> - Updates global deeplink entry (`handleDeeplink`) to use
`isMwpDeeplink/handleMwpDeeplink`.
> - **QR Scanner**:
> - Switches SDK deeplink detection/handling to
`SDKConnectV2.isMwpDeeplink` and `handleMwpDeeplink` in `index.tsx` and
`utils.ts`.
> - **Localization**:
>   - Adds `sdk_connect_v2.show_not_found` strings for the new toast.
> - **Tests**:
> - Comprehensive tests for `isMwpDeeplink`, `handleMwpDeeplink`,
`handleSimpleDeeplink` paths (unlocked/locked-then-unlocked), and
updated QRScanner/utils tests.
>   - Test/mocks updated to new API names and new host adapter method.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2c3af8f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
Bumping `@metamask/profile-metrics-controller` to `^1.1.0`:

```markdown
## [1.1.0]

### Changed

- Polling only starts on `KeyringController:unlock` if the user has opted in ([#7450](MetaMask/core#7196))
```

## **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]
> Upgrade @metamask/profile-metrics-controller from ^1.0.0 to ^1.1.0 and
update yarn.lock accordingly.
> 
> - **Dependencies**:
> - Bump `@metamask/profile-metrics-controller` from `^1.0.0` to
`^1.1.0` in `package.json`.
> - Refresh `yarn.lock` to resolve the new version and its
sub-dependencies.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
cb403c1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…ve (#23888)

<!--
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**

- Replace component-library Text imports with
@metamask/design-system-react-native
- Update TextVariant enum values to new naming convention:
  - HeadingLG → HeadingLg, HeadingSM → HeadingSm
  - BodyMDMedium/BodyMD → BodyMd
  - BodySMMedium/BodySM → BodySm
  - BodyXSMedium/BodyXS → BodyXs
- Update TextColor enum values to new naming convention:
  - Default → TextDefault
  - Alternative → TextAlternative
  - Success → SuccessDefault
  - Error → ErrorDefault
- Apply font-medium via Tailwind for previously *Medium variants

Files updated:
- PredictFeedHeader
- PredictBalance
- PredictMarketRowItem
- PredictMarketOutcomeResolved
- PredictPositionResolved
- PredictPosition
- PredictMarketSingle
- PredictPositionDetail
- PredictMarketMultiple

<!--
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]
> Migrates Predict UI to design-system-react-native Text with updated
variant/color enums and adds carousel-mode tests for multiple/single
market cards.
> 
> - **UI (Predict)**:
> - Replace `component-library` `Text` with
`@metamask/design-system-react-native` across `Predict*` components
(`PredictBalance`, `PredictFeedHeader`,
`PredictMarket{Single,Multiple,RowItem,OutcomeResolved}`,
`PredictPosition{,Detail,Resolved}`).
> - Update `TextVariant` names (`HeadingLg`, `HeadingSm`, `BodyMd`,
`BodySm`, `BodyXs`) and `TextColor` to new scheme (`TextDefault`,
`TextAlternative`, `SuccessDefault`, `ErrorDefault`); apply
`font-medium` where prior Medium variants were used.
>   - Adjust icon color props to `IconColor.*` where needed.
> - **Tests**:
> - Add carousel-mode tests for `PredictMarketSingle` and
`PredictMarketMultiple` verifying rendering and navigation to
`BUY_PREVIEW`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ab99a86. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

When user select Solana network on the source picker, the calculation
for the gas fee results in a fatal error due to the incorrect number of
decimal values passed to the parseUnit function.

## **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: resolves issue with parseUnit function throwing error
when size of decimals of effective gas is bigger than value of token
decimals

## **Related issues**

Fixes: #23919

## **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**

- [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]
> Introduce helpers to truncate effective gas fee to token decimals
before parsing, use them in the insufficient balance hook, and add
focused unit tests.
> 
> - **Bridge hook (`useInsufficientBalance`)**:
> - Add `formatEffectiveGasFee` and `transformEffectiveToAtomic` to
truncate `effectiveGasFee` to `token.decimals` and safely convert to
atomic units.
> - Replace direct `parseUnits(effectiveGasFee, token.decimals)` with
`transformEffectiveToAtomic(...)` to prevent overflow/errors.
> - **Tests**:
> - Import new helpers and add targeted test suites for
`formatEffectiveGasFee` and `transformEffectiveToAtomic`.
> - Minor test description tweaks; existing coverage for
native/ERC-20/SOL and scientific notation retained.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f6074e1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
… cp-7.61.0 (#23926)

<!--
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**

- Fixes outcome title when a market has `moneyline` sport market type.
- Fixes outcome detail button when has a large team name.

<!--
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**

<img width="431" height="892" alt="Screenshot 2025-12-11 at 12 09 57"
src="https://github.com/user-attachments/assets/3972ed64-4723-46ad-a460-1787a3a62d4f"
/>
<img width="429" height="888" alt="Screenshot 2025-12-11 at 12 10 05"
src="https://github.com/user-attachments/assets/ef7c56e4-b262-4364-ba81-c4ffb61c8d01"
/>

<!-- [screenshots/recordings] -->

### **After**

<img width="435" height="898" alt="Screenshot 2025-12-11 at 11 57 14"
src="https://github.com/user-attachments/assets/9a153a3d-cd51-4f85-9ab5-c9e41d48ddc7"
/>
<img width="449" height="891" alt="Screenshot 2025-12-11 at 11 57 19"
src="https://github.com/user-attachments/assets/ed939ef9-13ac-420e-a6ca-d90ab17cfc78"
/>


<!-- [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]
> Adjusts outcome button sizing for long labels and correctly formats
titles for moneyline sports markets.
> 
> - **UI**:
> - Update `PredictMarketOutcome.tsx` button styles for long labels
(`isBiggerLabel`): use `h-full py-2` for both `Yes` and `No` buttons to
improve sizing.
> - **Polymarket utils**:
>   - Add `isMoneylineMarket(market)` helper.
> - Update `formatMarketGroupItemTitle` to return `market.groupItemTitle
|| market.question` for moneyline markets (retain spread-specific dash
removal).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
fe05211. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

PNA copy update

## **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**

`~`

### **Before**

`~`

### **After**

`~`

## **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**

- [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]
> Updates `privacy_policy.pna25_description` text in
`locales/languages/en.json` to adjust analytics phrasing.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
582b47c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Users on iOS devices are unable to paste the email verification code by
long pressing into the input field. The paste menu does not appear,
possibly due to the input being already focused when the screen opens.

This PR adds a "Paste" pressable text button above the OTP code input
field, similar to the SRP (Secret Recovery Phrase) input implementation.
When pressed, it reads from the clipboard, extracts only numeric
characters, limits to 6 digits, and populates the input field
(overriding any existing content). If all 6 digits are pasted,
auto-submit is triggered.

## **Changelog**

CHANGELOG entry: Added paste button for email verification code input on
Deposit flow

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TRAM-2892

## **Manual testing steps**

```gherkin
Feature: Paste OTP verification code

  Scenario: user pastes verification code from clipboard
    Given user is on the OTP verification screen in Deposit flow
    And user has copied a 6-digit code to clipboard

    When user taps the "Paste" button
    Then the code input is populated with the numeric characters from clipboard
    And the code is auto-submitted if 6 digits are pasted

  Scenario: user pastes code with non-numeric characters
    Given user is on the OTP verification screen
    And user has copied text with mixed characters (e.g. "abc123def456") to clipboard

    When user taps the "Paste" button
    Then only numeric characters are extracted and populated (e.g. "123456")

  Scenario: user pastes code longer than 6 digits
    Given user is on the OTP verification screen
    And user has copied a code longer than 6 digits to clipboard

    When user taps the "Paste" button
    Then only the first 6 digits are populated
```

## **Screenshots/Recordings**

### **Before**

<img width="299" alt="image"
src="https://github.com/user-attachments/assets/ea96bfcd-7828-41ff-9fca-b86715b32524"
/>


### **After**

<img width="299" alt="paste"
src="https://github.com/user-attachments/assets/3afb422c-82aa-4648-b51f-385b7fa1ea3c"
/>


https://github.com/user-attachments/assets/c93e17ec-1a6c-435c-81fa-2cab4d8dee78



## **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]
> Adds a Paste action to the Deposit OTP screen that reads numeric
digits from clipboard (max 6) and auto-submits when complete, with tests
and i18n updates.
> 
> - **Deposit OTP UI (`OtpCode.tsx`)**:
> - Add clipboard-based Paste action (`otp-code-paste-button`) using
`@react-native-clipboard/clipboard`.
> - Extract only numeric chars and cap to `CELL_COUNT` (6); updates
input and triggers auto-submit on 6 digits.
> - Minor UI addition using `Box` and `TextColor`; focus logic
unchanged.
> - **Tests (`OtpCode.test.tsx`)**:
> - Mock clipboard and add test suite covering paste button presence,
clipboard read, numeric extraction, length cap, no-op on non-numeric,
overwrite behavior, and auto-submit on 6 digits.
> - **Snapshots**:
>   - Updated to include the new Paste button in the screen.
> - **Localization (`locales/languages/en.json`)**:
>   - Add `deposit.otp_code.paste` string.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
2bd5f36. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
We are seeing high failure rates in low liquidity markets. Therefore, we
are bumping the slippage values:
- Buy - 1.5% -> 3%
- Sell - 3%    -> 5%

In addition, we are also adding an informational row to the Buy
confirmation to show the users the amount of slippage for the order
(3%). This is just a UI change.

## **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: #23941

## **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**

<img width="1179" height="2556"
alt="simulator_screenshot_F3291BA0-3F07-4D34-919A-B2770688A04D"
src="https://github.com/user-attachments/assets/e5bbb024-438f-4f24-806e-a3ac910a9ff3"
/>


<!-- [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
- [ ] 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.
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

> Adds E2E tests for claiming winnings from market details and
predictions tab, with supporting testIDs, scroll helpers, and Polymarket
mocks (incl. Cowboys vs. Commanders).
> 
> - **E2E Tests**:
> - Add new flow to claim winnings from market details and extend
predictions-tab claim test, including balance/activity assertions and
retries.
> - Introduce helpers: scroll-to-position in wallet, tap claim on market
details, and robust tab/position tapping with retries.
> - Refactor spec with `verifyResolvedPositionsRemoved` and constants
for open/lost/won positions.
> - **Mocks/Fixtures**:
> - Add `POLYMARKET_EVENT_DETAILS_COWBOYS_COMMANDERS_RESPONSE` and
return it for `eventId=58319`.
> - Update positions/activity/balance mocks to support claim flow and
post-claim state.
> - **Selectors/UI hooks**:
> - Add `CLAIM_WINNINGS_BUTTON` selector and wire testID on claim button
in `PredictMarketDetails`.
> - Expose Predict tab scroll view testID in `PredictTabView` and wallet
page; add scroll helpers.
>   - Add claim button accessors in Predict details page.

## **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]
> Adds e2e coverage to claim winnings from both predictions tab and
market details, with new testIDs, scroll helpers, and Polymarket mocks
(incl. Cowboys–Commanders).
> 
> - **E2E**:
> - Add `predict-claim-positions.spec.ts` with flows to claim winnings
via predictions tab and via market details, including post-claim
balance/activity assertions and resolved-position cleanup.
> - Page objects: extend `PredictDetailsPage` (claim button tap),
`WalletView` (scroll helpers, tap position, predict scroll identifier),
and adjust `TabBarComponent.tapActivity` timing/assertion.
> - **Selectors/UI hooks**:
> - Add `PredictMarketDetailsSelectorsIDs.CLAIM_WINNINGS_BUTTON` and
wire `testID` on claim button in `PredictMarketDetails.tsx`.
> - Expose/propagate `PredictTabViewSelectorsIDs.SCROLL_VIEW` on
`PredictTabView.tsx` and reference in wallet page helpers.
> - **Mocks**:
> - Add `POLYMARKET_EVENT_DETAILS_COWBOYS_COMMANDERS_RESPONSE` and route
it for `eventId=58319`.
> - Enhance claim flow mocks: balance update, remove claimed positions,
append claim activity; support positions with winnings.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
96e1450. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
This PR introduces a new performance test for the Predict Deposit flow,
measuring various time metrics during the deposit process under 4G
network conditions. The test includes timers for navigating to the
Predict tab, opening the deposit screen, changing asset selection,
entering deposit amounts, and proceeding to the confirmation screen.
Additionally, new screen objects for PredictDepositScreen and
PredictConfirmationScreen are created to facilitate the test, along with
enhancements to the PredictMarketListScreen for adding funds.

The performance metrics are tracked and logged for analysis, ensuring a
comprehensive evaluation of the deposit flow's efficiency.

## **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-1192

## **Manual testing steps**

```gherkin
Feature: Predict Deposit Flow
  As a MetaMask user
  I want to deposit funds into the Predict feature
  So that I can participate in prediction markets

  Background:
    Given user has an existing wallet with USDC balance on Ethereum
    And user is logged into the MetaMask app

  Scenario: User navigates to Predict from wallet
    Given user is on the wallet main screen
    When user taps the action button
    And user taps the Predict button
    Then the Predict Market List screen is displayed

  Scenario: User opens the deposit screen
    Given user is on the Predict Market List screen
    When user taps the Add Funds button
    Then the Deposit screen is displayed
    And the amount input field is visible

  Scenario: User selects a payment method
    Given user is on the Deposit screen
    When user taps the Pay With button
    Then the Select Payment Method modal appears

  Scenario: User searches and selects USDC on Ethereum
    Given user is on the Select Payment Method modal
    When user searches for "USDC"
    And user taps the Ethereum filter
    And user taps the first USDC option
    Then USDC on Ethereum is selected as payment method

  Scenario: User enters deposit amount and proceeds to confirmation
    Given user has selected USDC on Ethereum as payment method
    When user enters "1" as the deposit amount
    And user taps the Continue button
    Then the Confirmation screen is displayed
    And the deposit amount "$1" is visible
    And the fees section is displayed

  Scenario: User completes full deposit flow
    Given user is logged into the MetaMask app
    When user navigates to Predict Market List
    And user taps Add Funds button
    And user taps Pay With button
    And user searches for "USDC"
    And user selects Ethereum network filter
    And user selects USDC token
    And user enters deposit amount "1"
    And user taps Continue
    Then the Confirmation screen displays deposit amount "$1"
    And the Confirmation screen displays fees information
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->
GHA performance job:
https://github.com/MetaMask/metamask-mobile/actions/runs/20146179233
### GHA perf test run:
iOS
https://app-automate.browserstack.com/dashboard/v2/public-build/TUdVMlhXdHRDcXgxSllsRUVFSDRmWlNrY3k5a2Q0WE1HQ00zOVpZa1RKSjFCSnlIZjJDZ1NmWmFrVzAzQnRhL1BBK25GeWIzV1VkRDNwakliemx3Unc9PS0tS0dERFpzSEFUK2xMeGgyNlJmdkUzQT09--5f94457f66c3810f21d2be9d267ee1b6e869490d
android
https://app-automate.browserstack.com/dashboard/v2/public-build/KzNIODFGOWdaK3lkSyswVFpSaFYzc2dpZ2RkOXFtdFoyN2piSms1WDQvZHlWOTJGQkx0c2J4ZHhXY2IxcmZzVXZqaDY2M2swRU1KY3hodEhyRVVtTUE9PS0tSGl6Y053WXduVWZ2Y2pWTXpOUU5sUT09--83d15d4cdd226172176fec0a01dd6dc90771cf23

## **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]
> Adds a Predict Deposit performance test with new screen objects and
patches Appwright to set BrowserStack geolocation options.
> 
> - **Tests**:
> - Add performance test
`appwright/tests/performance/login/predict/predict-deposit.spec.js`
measuring end-to-end deposit flow timings (navigate, open deposit,
select asset, enter amount, confirmation).
> - **Screen Objects**:
> - New `wdio/screen-objects/PredictDepositScreen.js` with
selectors/actions for payment method, amount input, network filter, and
continue/cancel.
> - New `wdio/screen-objects/PredictConfirmationScreen.js` to verify
amount/fees and confirm/cancel.
> - Enhance `wdio/screen-objects/PredictMarketListScreen.js` with
`tapAddFundsButton` and Appwright-based visibility/taps.
> - **Tooling/Patch**:
> - Patch Appwright BrowserStack provider to set `bstack:options`
`gpsLocation` and `geoLocation`.
> - Update `package.json` and Yarn patches to consume the new Appwright
patch.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
9b060ee. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@pull pull Bot locked and limited conversation to collaborators Dec 11, 2025
@pull pull Bot added the ⤵️ pull label Dec 11, 2025
@pull pull Bot merged commit 16a9c88 into Reality2byte:main Dec 11, 2025
2 of 37 checks passed
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.