diff --git a/CHANGELOG.md b/CHANGELOG.md index 985f34f0f8c7..5bf134cd11bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,754 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [7.58.0] + +### Added + +- feat(predict): Predict details outcome / status improvements ([#21486](https://github.com/MetaMask/metamask-mobile/pull/21486)) +- feat(card): disable swaps if selected address is different from priority token owner address ([#21454](https://github.com/MetaMask/metamask-mobile/pull/21454)) +- feat(card): OTP Authentication ([#21451](https://github.com/MetaMask/metamask-mobile/pull/21451)) +- feat(perps): new TPSL view design ([#21396](https://github.com/MetaMask/metamask-mobile/pull/21396)) +- feat(predict): update buy confirmation to include balance check ([#21488](https://github.com/MetaMask/metamask-mobile/pull/21488)) +- feat(card): move Card authentication verification out of CardSDK context ([#21399](https://github.com/MetaMask/metamask-mobile/pull/21399)) +- feat(predict): add slippage to orders to improve failure rate ([#21443](https://github.com/MetaMask/metamask-mobile/pull/21443)) +- feat(INFRA-3034): ci cirrus 2 ([#21421](https://github.com/MetaMask/metamask-mobile/pull/21421)) +- feat(card): Card authenticated info ([#21390](https://github.com/MetaMask/metamask-mobile/pull/21390)) +- feat(deposit): Locks user's region if they have submitted KYC ([#20822](https://github.com/MetaMask/metamask-mobile/pull/20822)) +- feat(card): display card button with geolocation and feature flag guards ([#21306](https://github.com/MetaMask/metamask-mobile/pull/21306)) +- feat(MultichainPermissionsSummary): Add disconnect button cp-7.57.0 ([#21285](https://github.com/MetaMask/metamask-mobile/pull/21285)) +- feat(predict): claim ux ([#21311](https://github.com/MetaMask/metamask-mobile/pull/21311)) +- feat(core-backend): add AccountActivity and Websocket for TokenBalancesController ([#21111](https://github.com/MetaMask/metamask-mobile/pull/21111)) +- feat(predict): Adds predict transaction activity detail view ([#21293](https://github.com/MetaMask/metamask-mobile/pull/21293)) +- feat(deposit): implement user limits fetch before proceeding with an order ([#21174](https://github.com/MetaMask/metamask-mobile/pull/21174)) +- feat(predict): deposit ux ([#21198](https://github.com/MetaMask/metamask-mobile/pull/21198)) +- feat(predict): adds transaction activity ([#21148](https://github.com/MetaMask/metamask-mobile/pull/21148)) +- feat(rewards): add new referred-related identities ([#21049](https://github.com/MetaMask/metamask-mobile/pull/21049)) +- feat(INFRA-3009): ios only in GHA ([#20944](https://github.com/MetaMask/metamask-mobile/pull/20944)) +- feat(predict): integrate fee collection via clob relayer ([#21119](https://github.com/MetaMask/metamask-mobile/pull/21119)) +- feat(predict): Predict Position Updates ([#20779](https://github.com/MetaMask/metamask-mobile/pull/20779)) +- feat(ramp): mark country as selected if state is selected ([#21055](https://github.com/MetaMask/metamask-mobile/pull/21055)) +- feat (ramps): reset input when keyboard is reopened ([#20992](https://github.com/MetaMask/metamask-mobile/pull/20992)) +- feat(card): Card API foundations and Authentication screen ([#20984](https://github.com/MetaMask/metamask-mobile/pull/20984)) +- feat(predict): trade via proxy wallet rather than eoa ([#20994](https://github.com/MetaMask/metamask-mobile/pull/20994)) +- feat(predict): Adds predict region check ([#20661](https://github.com/MetaMask/metamask-mobile/pull/20661)) +- feat(deposit): hide unsupported cryptocurrencies cp-7.57.0 ([#20993](https://github.com/MetaMask/metamask-mobile/pull/20993)) +- feat(predict): new buy/sell logic without on-chain tx ([#20665](https://github.com/MetaMask/metamask-mobile/pull/20665)) +- feat(SDKConnectV2): allow shared ws connection on `WebSocketTransport` ([#20977](https://github.com/MetaMask/metamask-mobile/pull/20977)) +- feat(perps): correct tab positions in market detail list ([#20716](https://github.com/MetaMask/metamask-mobile/pull/20716)) +- feat(predict): Predict Details Outcome Sorting / Chart Performance ([#20880](https://github.com/MetaMask/metamask-mobile/pull/20880)) +- feat(SDKConnectV2): Add "Return to App" Toasts ([#20647](https://github.com/MetaMask/metamask-mobile/pull/20647)) +- feat(perps): redirect to correct tab on order ([#20449](https://github.com/MetaMask/metamask-mobile/pull/20449)) +- feat(ramp): add activation keys to all non-prod envs ([#20781](https://github.com/MetaMask/metamask-mobile/pull/20781)) +- feat(ds): accept labelTextVariant prop ([#20773](https://github.com/MetaMask/metamask-mobile/pull/20773)) +- feat(predict): implement Safe fee authorization logic ([#20704](https://github.com/MetaMask/metamask-mobile/pull/20704)) +- feat(SDKConnectV2): UX improvements ([#19984](https://github.com/MetaMask/metamask-mobile/pull/19984)) +- feat(perps): align sentry performance events ([#20301](https://github.com/MetaMask/metamask-mobile/pull/20301)) +- feat(predict): initial predict details view with chart ([#20480](https://github.com/MetaMask/metamask-mobile/pull/20480)) +- feat(rewards): add metrics ([#20521](https://github.com/MetaMask/metamask-mobile/pull/20521)) +- feat(INFRA-2989): test repack iOS ([#20573](https://github.com/MetaMask/metamask-mobile/pull/20573)) +- feat(e2e): script and CI job to use AI for e2e test selection ([#20372](https://github.com/MetaMask/metamask-mobile/pull/20372)) +- feat(card): add Welcome screen and small UI improvements on CardHome ([#20281](https://github.com/MetaMask/metamask-mobile/pull/20281)) +- feat(card): change Card Home Viewed metric params from string to number ([#20607](https://github.com/MetaMask/metamask-mobile/pull/20607)) +- feat(predict): implement claim winnings ([#20396](https://github.com/MetaMask/metamask-mobile/pull/20396)) +- feat(rewards): add deeplink support for rewards ([#20508](https://github.com/MetaMask/metamask-mobile/pull/20508)) +- feat(perps): mixpanels events consolidation ([#20468](https://github.com/MetaMask/metamask-mobile/pull/20468)) +- feat(infra-2854): implement expo fingerprint caching and APK repacking for Android CI optimization ([#20454](https://github.com/MetaMask/metamask-mobile/pull/20454)) +- feat(ramp): add new CAIP-19 Ramp Intent ([#20476](https://github.com/MetaMask/metamask-mobile/pull/20476)) +- feat(SDKConnectV2): RPC Message Handling ([#19823](https://github.com/MetaMask/metamask-mobile/pull/19823)) +- feat(ramp): remove selectedChainId deps ([#20206](https://github.com/MetaMask/metamask-mobile/pull/20206)) +- feat(deposit): Replace hardcoded constants with dynamic SDK data fetching ([#19402](https://github.com/MetaMask/metamask-mobile/pull/19402)) +- feat(card): remove useSupportedTokens from deposit ([#20335](https://github.com/MetaMask/metamask-mobile/pull/20335)) +- feat(predict): initial PR ([#19996](https://github.com/MetaMask/metamask-mobile/pull/19996)) +- feat: control btc provider state via remote feature flag ([#20989](https://github.com/MetaMask/metamask-mobile/pull/20989)) +- feat: TAT-1662 trade fee does not adjust for market or limit order maker or taker ([#21428](https://github.com/MetaMask/metamask-mobile/pull/21428)) +- feat: add analytics tracking for Predict trade actions ([#21216](https://github.com/MetaMask/metamask-mobile/pull/21216)) +- feat: add BalanceEmptyState component ([#20782](https://github.com/MetaMask/metamask-mobile/pull/20782)) +- feat: l runners, cache updates ([#21327](https://github.com/MetaMask/metamask-mobile/pull/21327)) +- feat: predict confirmation metrics ([#21348](https://github.com/MetaMask/metamask-mobile/pull/21348)) +- feat: predict withdraw confirmation ([#21309](https://github.com/MetaMask/metamask-mobile/pull/21309)) +- feat: Add support for gas sponsorship ([#21121](https://github.com/MetaMask/metamask-mobile/pull/21121)) +- feat: TAT-1778 fix mm earn confirmation card account name issue ([#21238](https://github.com/MetaMask/metamask-mobile/pull/21238)) +- feat: cp-7.57.0 support external-link for notifications ([#21367](https://github.com/MetaMask/metamask-mobile/pull/21367)) +- feat: cp-7.58.0 max button in perps deposit ([#21257](https://github.com/MetaMask/metamask-mobile/pull/21257)) +- feat: card onboarding ([#21206](https://github.com/MetaMask/metamask-mobile/pull/21206)) +- feat: Add build type to version string ([#21326](https://github.com/MetaMask/metamask-mobile/pull/21326)) +- feat: Onboarding and ChoosePassword Loader update ([#21281](https://github.com/MetaMask/metamask-mobile/pull/21281)) +- feat: onboarding deeplink ([#20566](https://github.com/MetaMask/metamask-mobile/pull/20566)) +- feat: Swaps show BTC Native Segwit tag ([#21228](https://github.com/MetaMask/metamask-mobile/pull/21228)) +- feat: add action button event ([#20967](https://github.com/MetaMask/metamask-mobile/pull/20967)) +- feat: debounce metamask pay alerts ([#21243](https://github.com/MetaMask/metamask-mobile/pull/21243)) +- feat: Add trace callback in `TransactionController` constructor ([#20569](https://github.com/MetaMask/metamask-mobile/pull/20569)) +- feat: swaps recipient row ([#20921](https://github.com/MetaMask/metamask-mobile/pull/20921)) +- feat: btc swap button, BIP44 default pair ([#21062](https://github.com/MetaMask/metamask-mobile/pull/21062)) +- feat: Implement unsupported deeplink modal ([#20795](https://github.com/MetaMask/metamask-mobile/pull/20795)) +- feat: cp-7.57.0 TAT-1883 perps tutorial regressions animations are cut off and ready to trade text and subtext overlap ([#21220](https://github.com/MetaMask/metamask-mobile/pull/21220)) +- feat: add gasless support via 7702 ([#20233](https://github.com/MetaMask/metamask-mobile/pull/20233)) +- feat: update onboarding screen and replace lottie with rive animations. ([#19907](https://github.com/MetaMask/metamask-mobile/pull/19907)) +- feat: show card spend events in activity tab ([#21193](https://github.com/MetaMask/metamask-mobile/pull/21193)) +- feat: add lukso network ([#20846](https://github.com/MetaMask/metamask-mobile/pull/20846)) +- feat: rewards bip-44 match designs ([#21190](https://github.com/MetaMask/metamask-mobile/pull/21190)) +- feat: enable fullscreen browser view from clone ([#20956](https://github.com/MetaMask/metamask-mobile/pull/20956)) +- feat: social login check added in description in create password. cp-7.57.0 ([#21187](https://github.com/MetaMask/metamask-mobile/pull/21187)) +- feat: retry in perps deposit transaction details ([#21169](https://github.com/MetaMask/metamask-mobile/pull/21169)) +- feat: add network logo and native logo for Plasma network ([#20567](https://github.com/MetaMask/metamask-mobile/pull/20567)) +- feat: add ways to earn sheet for referrals ([#21124](https://github.com/MetaMask/metamask-mobile/pull/21124)) +- feat: rwds-492 make level image tappable ([#21136](https://github.com/MetaMask/metamask-mobile/pull/21136)) +- feat: add how to earn for card spend ([#21108](https://github.com/MetaMask/metamask-mobile/pull/21108)) +- feat: update transaction pay bridge estimates ([#21093](https://github.com/MetaMask/metamask-mobile/pull/21093)) +- feat: cp-7.57.0 Perps 7.57.0 Mandatory UI Fixes ([#21060](https://github.com/MetaMask/metamask-mobile/pull/21060)) +- feat: bump `@metamask/multichain-api-middleware` to `1.2.0` ([#20550](https://github.com/MetaMask/metamask-mobile/pull/20550)) +- feat: rewards bip-44 ([#20729](https://github.com/MetaMask/metamask-mobile/pull/20729)) +- feat: predict claim confirmation ([#21007](https://github.com/MetaMask/metamask-mobile/pull/21007)) +- feat: cp-7.57.0 updated PerpsController to use v2 perps geo block remote flag ([#21067](https://github.com/MetaMask/metamask-mobile/pull/21067)) +- feat: 14414 Replace redux-persist with barebones JS persist system using FileSystemStorage ([#17685](https://github.com/MetaMask/metamask-mobile/pull/17685)) +- feat: update bitcoin snap version ([#21031](https://github.com/MetaMask/metamask-mobile/pull/21031)) +- feat: add activity details bottom sheet ([#20988](https://github.com/MetaMask/metamask-mobile/pull/20988)) +- feat: adapt emulator configs for cirrus runners ([#21041](https://github.com/MetaMask/metamask-mobile/pull/21041)) +- feat: Implement BTC labels in send flow ([#21028](https://github.com/MetaMask/metamask-mobile/pull/21028)) +- feat: predict deposit confirmation ([#20926](https://github.com/MetaMask/metamask-mobile/pull/20926)) +- feat: rehydration flow ios update ([#20799](https://github.com/MetaMask/metamask-mobile/pull/20799)) +- feat: swaps btc tx and history ([#20863](https://github.com/MetaMask/metamask-mobile/pull/20863)) +- feat: create `GasFeeTokenToast` component ([#18611](https://github.com/MetaMask/metamask-mobile/pull/18611)) +- feat: add labels for btc assets ([#20859](https://github.com/MetaMask/metamask-mobile/pull/20859)) +- feat: agentic unit test automation ([#20837](https://github.com/MetaMask/metamask-mobile/pull/20837)) +- feat: add deeplink decompression logic for sdk v2 payload ([#20924](https://github.com/MetaMask/metamask-mobile/pull/20924)) +- feat: social login success screen added for social login users and ios platform. ([#20800](https://github.com/MetaMask/metamask-mobile/pull/20800)) +- feat: Bitcoin+Tron BIP44 integration ([#19971](https://github.com/MetaMask/metamask-mobile/pull/19971)) +- feat: cicd migration self-hosted to cirrus ([#20890](https://github.com/MetaMask/metamask-mobile/pull/20890)) +- feat: Swaps btc network ([#18851](https://github.com/MetaMask/metamask-mobile/pull/18851)) +- feat: Feat/introduce native utils margelo ([#20778](https://github.com/MetaMask/metamask-mobile/pull/20778)) +- feat: cp-7.56.3 disable perps build flag and add belgium to build flag blocked regions fallback ([#20790](https://github.com/MetaMask/metamask-mobile/pull/20790)) +- feat: add dynamic carousel preview updates ([#20712](https://github.com/MetaMask/metamask-mobile/pull/20712)) +- feat: pending deposit withdraw ([#20657](https://github.com/MetaMask/metamask-mobile/pull/20657)) +- feat: introduce native utils margelo ([#20654](https://github.com/MetaMask/metamask-mobile/pull/20654)) +- feat: TAT-1820: Added tpsl and liquidation tags to perps fill history items ([#20658](https://github.com/MetaMask/metamask-mobile/pull/20658)) +- feat: reward points component animation ([#20664](https://github.com/MetaMask/metamask-mobile/pull/20664)) +- feat: update pk reveal with link to support page ([#20693](https://github.com/MetaMask/metamask-mobile/pull/20693)) +- feat: TAT-1491: use existing position leverage when placing an perps order ([#20668](https://github.com/MetaMask/metamask-mobile/pull/20668)) +- feat: TAT-1810 varada sync perps misc UI fixes ([#20660](https://github.com/MetaMask/metamask-mobile/pull/20660)) +- feat: NFT Grid View ([#20150](https://github.com/MetaMask/metamask-mobile/pull/20150)) +- feat: add pnl for perps points events ([#20638](https://github.com/MetaMask/metamask-mobile/pull/20638)) +- feat: MM SDK, add option to hide return modal ([#20524](https://github.com/MetaMask/metamask-mobile/pull/20524)) +- feat: use `wallet.status` ([#20639](https://github.com/MetaMask/metamask-mobile/pull/20639)) +- feat: PerpsTransactionsSkeleton ([#20666](https://github.com/MetaMask/metamask-mobile/pull/20666)) +- feat: add paymentRequestEnabled to webview ([#18845](https://github.com/MetaMask/metamask-mobile/pull/18845)) +- feat: Swaps consume bip44 default pairs from LD ([#20179](https://github.com/MetaMask/metamask-mobile/pull/20179)) +- feat: Perps max order error messaging ([#20559](https://github.com/MetaMask/metamask-mobile/pull/20559)) +- feat: run e2e builds on build.sh changes ([#20629](https://github.com/MetaMask/metamask-mobile/pull/20629)) +- feat: use bottom sheet navigation for fiat selection modal ([#20600](https://github.com/MetaMask/metamask-mobile/pull/20600)) +- feat: Add empty state to market list when no results found after search ([#20601](https://github.com/MetaMask/metamask-mobile/pull/20601)) +- feat: update network selector 'all networks' copy to 'popular networks' ([#20570](https://github.com/MetaMask/metamask-mobile/pull/20570)) +- feat: Metametrics UI changes ([#20104](https://github.com/MetaMask/metamask-mobile/pull/20104)) +- feat: remove selected address dependency ([#20544](https://github.com/MetaMask/metamask-mobile/pull/20544)) +- feat: add support for preview content deep links ([#19868](https://github.com/MetaMask/metamask-mobile/pull/19868)) +- feat: android cirrus temp workflows ([#20542](https://github.com/MetaMask/metamask-mobile/pull/20542)) +- feat: add animations for AccountGroupDetails and WalletDetails view transitions ([#20525](https://github.com/MetaMask/metamask-mobile/pull/20525)) +- feat: Improve Earn and Perps remote feature flags ([#20486](https://github.com/MetaMask/metamask-mobile/pull/20486)) +- feat: Add rewards to Perps close position flow ([#20355](https://github.com/MetaMask/metamask-mobile/pull/20355)) +- feat: add network connection banner with direct edit functionality ([#19202](https://github.com/MetaMask/metamask-mobile/pull/19202)) +- feat: update NFT tab empty state ([#20270](https://github.com/MetaMask/metamask-mobile/pull/20270)) +- feat: update Perps tab empty state ([#20196](https://github.com/MetaMask/metamask-mobile/pull/20196)) +- feat: consume quoteBpsFee for dynamic fee disclaimer ([#20388](https://github.com/MetaMask/metamask-mobile/pull/20388)) +- feat: import SRP design changes. ([#20101](https://github.com/MetaMask/metamask-mobile/pull/20101)) +- feat: add multichain account syncing E2Es ([#20315](https://github.com/MetaMask/metamask-mobile/pull/20315)) +- feat: update DeFi tab empty state ([#20279](https://github.com/MetaMask/metamask-mobile/pull/20279)) +- feat: add a "Way to Earn" for loyalty bonus ([#20300](https://github.com/MetaMask/metamask-mobile/pull/20300)) +- feat: cp-7.56.0 TAT-1709: updated copy and styling for perps fullscreen announcement modal ([#20276](https://github.com/MetaMask/metamask-mobile/pull/20276)) +- feat: network manager e2e tests ([#19847](https://github.com/MetaMask/metamask-mobile/pull/19847)) +- feat: integrating `SelectedGasFeeToken` in the transaction confirmation (STX) ([#18450](https://github.com/MetaMask/metamask-mobile/pull/18450)) +- feat: client integration for `auxiliaryFunds` + `requiredAssets` support (EIP-7682) ([#19965](https://github.com/MetaMask/metamask-mobile/pull/19965)) +- feat: Adding support to send ERC-1155 tokens ([#20153](https://github.com/MetaMask/metamask-mobile/pull/20153)) +- feat: bump solana snap ([#20265](https://github.com/MetaMask/metamask-mobile/pull/20265)) +- feat: amount page related improvements in new send flow ([#20119](https://github.com/MetaMask/metamask-mobile/pull/20119)) +- feat: add megaeth mainnet support ([#20056](https://github.com/MetaMask/metamask-mobile/pull/20056)) +- feat: add HEMI network ([#20111](https://github.com/MetaMask/metamask-mobile/pull/20111)) +- feat: cp-7.56.0 TAT-1486 update tutorial animations ([#20207](https://github.com/MetaMask/metamask-mobile/pull/20207)) +- feat: cp-7.56.0 TAT-1767: update perps tpsl bottom sheet copy button placement and behaviour ([#20163](https://github.com/MetaMask/metamask-mobile/pull/20163)) +- feat: remove password strength check ([#20100](https://github.com/MetaMask/metamask-mobile/pull/20100)) +- feat: add UI loading states for backup & sync ([#20043](https://github.com/MetaMask/metamask-mobile/pull/20043)) +- feat: enhance wallet alignment process in MultichainAccountsIntroModal ([#19970](https://github.com/MetaMask/metamask-mobile/pull/19970)) +- feat: Display account group names in Snaps components ([#20031](https://github.com/MetaMask/metamask-mobile/pull/20031)) +- feat: respect basic functionality state when disabling swaps buttons ([#20102](https://github.com/MetaMask/metamask-mobile/pull/20102)) +- feat: add no-fee badge to mUSD token row ([#20022](https://github.com/MetaMask/metamask-mobile/pull/20022)) +- feat: cp-7.56.0 TAT-1749: Added missing event properties when placing order and closing position ([#20062](https://github.com/MetaMask/metamask-mobile/pull/20062)) +- feat: cp-7.55.0 bump solana snap to 2.3.10 ([#20046](https://github.com/MetaMask/metamask-mobile/pull/20046)) +- feat: claim reward flow ([#19954](https://github.com/MetaMask/metamask-mobile/pull/19954)) +- feat: display account names for Loyalty and Sign up bonuses ([#19969](https://github.com/MetaMask/metamask-mobile/pull/19969)) +- feat: add tab empty state UI components ([#19991](https://github.com/MetaMask/metamask-mobile/pull/19991)) +- feat: Add fast coverage analysis system ([#19962](https://github.com/MetaMask/metamask-mobile/pull/19962)) +- feat: Add tracking events for account existence pages ([#19645](https://github.com/MetaMask/metamask-mobile/pull/19645)) +- feat: Prevent adding multiple txs in the BIP-44 send flow fix ([#19859](https://github.com/MetaMask/metamask-mobile/pull/19859)) +- feat: Unified activity list for BIP-44 ([#19590](https://github.com/MetaMask/metamask-mobile/pull/19590)) +- feat: add metadata properties to `RewardsController` ([#19782](https://github.com/MetaMask/metamask-mobile/pull/19782)) +- feat: update AccountCell styles and add placeholder color to search input ([#19666](https://github.com/MetaMask/metamask-mobile/pull/19666)) +- feat: add skeleton loaders to perps deposit ([#19741](https://github.com/MetaMask/metamask-mobile/pull/19741)) +- feat: add new trade menu ([#19459](https://github.com/MetaMask/metamask-mobile/pull/19459)) +- feat: display active seasonal boosts ([#19562](https://github.com/MetaMask/metamask-mobile/pull/19562)) +- feat: replace account syncing with multichain account syncing ([#19246](https://github.com/MetaMask/metamask-mobile/pull/19246)) +- feat: add Rewards 'Ways to Earn' section ([#19606](https://github.com/MetaMask/metamask-mobile/pull/19606)) +- feat: add xdc network ([#19524](https://github.com/MetaMask/metamask-mobile/pull/19524)) +- feat: choose password design updates ([#19758](https://github.com/MetaMask/metamask-mobile/pull/19758)) +- feat: rename Orders to Transfers cp-7.56.0 ([#19754](https://github.com/MetaMask/metamask-mobile/pull/19754)) +- feat: faster non env address check ([#19788](https://github.com/MetaMask/metamask-mobile/pull/19788)) +- feat: change Maskicons to Polycons for users cp-7.56.0 ([#19769](https://github.com/MetaMask/metamask-mobile/pull/19769)) +- feat: swaps rewards rive icon ([#19634](https://github.com/MetaMask/metamask-mobile/pull/19634)) +- feat: Biometrics lock fix ([#19316](https://github.com/MetaMask/metamask-mobile/pull/19316)) +- feat: implement reassure ([#19010](https://github.com/MetaMask/metamask-mobile/pull/19010)) + +### Changed + +- chore: Update @metamask/signature-controller ([#20202](https://github.com/MetaMask/metamask-mobile/pull/20202)) +- chore: remove old reward animations ([#21299](https://github.com/MetaMask/metamask-mobile/pull/21299)) +- chore: update phishing-controller to version 14.1.2 and add migration for urlScanCache reset ([#21417](https://github.com/MetaMask/metamask-mobile/pull/21417)) +- chore: Revert "fix: conditionally apply onPress for Accessibility mode for Android TouchableOpacity" ([#21342](https://github.com/MetaMask/metamask-mobile/pull/21342)) +- chore: Alphabetize list of controllers in `state` getter ([#21480](https://github.com/MetaMask/metamask-mobile/pull/21480)) +- chore: refactor homepage spacing to use flexbox layout with gap ([#21427](https://github.com/MetaMask/metamask-mobile/pull/21427)) +- chore: homogenize experience when adding NFT and adding token ([#21259](https://github.com/MetaMask/metamask-mobile/pull/21259)) +- chore: Bump Snaps packages ([#21415](https://github.com/MetaMask/metamask-mobile/pull/21415)) +- chore: Rename FoxRiveLoaderAnimation mock ([#21431](https://github.com/MetaMask/metamask-mobile/pull/21431)) +- chore: adds TRX Staking feature flag ([#21458](https://github.com/MetaMask/metamask-mobile/pull/21458)) +- chore: update to yarn v4 ([#21207](https://github.com/MetaMask/metamask-mobile/pull/21207)) +- chore: Remove `RewardsController` constructor side-effects ([#21437](https://github.com/MetaMask/metamask-mobile/pull/21437)) +- chore: Swaps design adjustments ([#21321](https://github.com/MetaMask/metamask-mobile/pull/21321)) +- chore(predict): adds initial logic to handle a resolved market ([#21382](https://github.com/MetaMask/metamask-mobile/pull/21382)) +- chore: update buffer polyfills - Margelo ([#21386](https://github.com/MetaMask/metamask-mobile/pull/21386)) +- chore: sync stable to main for version 7.58.0 ([#21001](https://github.com/MetaMask/metamask-mobile/pull/21001)) +- chore: format ([#21422](https://github.com/MetaMask/metamask-mobile/pull/21422)) +- chore: Update `build-utils` ([#21414](https://github.com/MetaMask/metamask-mobile/pull/21414)) +- chore: bump Tron snap version to 1.5.0 ([#21358](https://github.com/MetaMask/metamask-mobile/pull/21358)) +- chore: fix e2e test reports ([#21354](https://github.com/MetaMask/metamask-mobile/pull/21354)) +- chore: New Crowdin translations by Github Action cp-7.57.0 ([#21379](https://github.com/MetaMask/metamask-mobile/pull/21379)) +- chore(predict): refactor predict market list ([#21378](https://github.com/MetaMask/metamask-mobile/pull/21378)) +- chore: Update `eth-json-rpc-middleware` from v19 to v21 ([#21366](https://github.com/MetaMask/metamask-mobile/pull/21366)) +- chore(predict): feed / search improvements ([#21353](https://github.com/MetaMask/metamask-mobile/pull/21353)) +- chore(card): add new Baanx API key environment variables on build.sh ([#21317](https://github.com/MetaMask/metamask-mobile/pull/21317)) +- chore(predict): disable slippage (for now) ([#21322](https://github.com/MetaMask/metamask-mobile/pull/21322)) +- chore: update animations for perps ([#21241](https://github.com/MetaMask/metamask-mobile/pull/21241)) +- chore: clean e2e stuff ([#21266](https://github.com/MetaMask/metamask-mobile/pull/21266)) +- chore: remove self hosted runners ([#21289](https://github.com/MetaMask/metamask-mobile/pull/21289)) +- chore: useBridgeQuoteEvents hook ([#21249](https://github.com/MetaMask/metamask-mobile/pull/21249)) +- chore: update tron snap to latest version ([#21265](https://github.com/MetaMask/metamask-mobile/pull/21265)) +- chore: bump `@metamask/remote-feature-flag-controller` to `^1.9.0` ([#21194](https://github.com/MetaMask/metamask-mobile/pull/21194)) +- chore: add env exp to profiler ([#21219](https://github.com/MetaMask/metamask-mobile/pull/21219)) +- chore: Update activity list codeowners ([#21052](https://github.com/MetaMask/metamask-mobile/pull/21052)) +- chore: clean e2e stuff ([#21196](https://github.com/MetaMask/metamask-mobile/pull/21196)) +- chore: Ignore warning log of keychain ([#21166](https://github.com/MetaMask/metamask-mobile/pull/21166)) +- chore: Bump bridge and bridge status controller to v50.0.0 ([#21137](https://github.com/MetaMask/metamask-mobile/pull/21137)) +- chore: update js example ([#21164](https://github.com/MetaMask/metamask-mobile/pull/21164)) +- chore: e2e cleaning ([#21143](https://github.com/MetaMask/metamask-mobile/pull/21143)) +- chore: local flask builds ([#21154](https://github.com/MetaMask/metamask-mobile/pull/21154)) +- chore: update rewards animation ([#21153](https://github.com/MetaMask/metamask-mobile/pull/21153)) +- chore: integrate delegation-controller ([#19964](https://github.com/MetaMask/metamask-mobile/pull/19964)) +- chore: Cleanup remove old collectible list ([#21133](https://github.com/MetaMask/metamask-mobile/pull/21133)) +- chore: clean e2e stuff ([#21081](https://github.com/MetaMask/metamask-mobile/pull/21081)) +- chore: cp-7.57.0 improve performance on accounts list ([#21098](https://github.com/MetaMask/metamask-mobile/pull/21098)) +- chore: cp-7.57.0 chain filtering should not affect account picker balances ([#21122](https://github.com/MetaMask/metamask-mobile/pull/21122)) +- chore: add `@metamask/wallet-integrations` team as codeowners for `BackgroundBridge/` ([#21117](https://github.com/MetaMask/metamask-mobile/pull/21117)) +- chore: run AI analysis on all PRs ([#21053](https://github.com/MetaMask/metamask-mobile/pull/21053)) +- chore: split new network manager tests ([#21112](https://github.com/MetaMask/metamask-mobile/pull/21112)) +- chore: Update keychain to v^9 ([#20625](https://github.com/MetaMask/metamask-mobile/pull/20625)) +- chore: Bump `@metamask/ens-resolver-snap` to `1.0.0` ([#21047](https://github.com/MetaMask/metamask-mobile/pull/21047)) +- chore(SDKConnectV2): Update package ([#21087](https://github.com/MetaMask/metamask-mobile/pull/21087)) +- chore: add environment to the state logs ([#20783](https://github.com/MetaMask/metamask-mobile/pull/20783)) +- chore: cicd - revert to lg runners ([#21009](https://github.com/MetaMask/metamask-mobile/pull/21009)) +- chore(perps): remove mistakenly pushed task file ([#20919](https://github.com/MetaMask/metamask-mobile/pull/20919)) +- chore: Added font preloader cp-7.57.0 ([#20331](https://github.com/MetaMask/metamask-mobile/pull/20331)) +- chore: Update perps related .js.env build flags to align with main-rc ([#20913](https://github.com/MetaMask/metamask-mobile/pull/20913)) +- chore: disable RC auto generation ([#20896](https://github.com/MetaMask/metamask-mobile/pull/20896)) +- chore: cp-7.57.0 add padding between 'Your balance' and action buttons on token detail page ([#20843](https://github.com/MetaMask/metamask-mobile/pull/20843)) +- chore: bump `@metamask/smart-transactions-controller` to `^19.2.0` ([#20152](https://github.com/MetaMask/metamask-mobile/pull/20152)) +- chore: Bump Snaps packages ([#20834](https://github.com/MetaMask/metamask-mobile/pull/20834)) +- chore: New Crowdin translations by Github Action ([#20670](https://github.com/MetaMask/metamask-mobile/pull/20670)) +- chore: Bump main version to 7.58.0 ([#20786](https://github.com/MetaMask/metamask-mobile/pull/20786)) +- chore: add deprecation notices to component-library components with design-system replacements ([#20760](https://github.com/MetaMask/metamask-mobile/pull/20760)) +- chore: move appwright to dev dependency ([#20354](https://github.com/MetaMask/metamask-mobile/pull/20354)) +- chore: update `CODEOWNERS.md` -> `@metamask/sdk-devs` to `@metamask/wallet-integrations` ([#20745](https://github.com/MetaMask/metamask-mobile/pull/20745)) +- chore: fix recently introduced lint issue ([#20776](https://github.com/MetaMask/metamask-mobile/pull/20776)) +- chore: account for rc builds on browserstack ([#20753](https://github.com/MetaMask/metamask-mobile/pull/20753)) +- chore: Update Earn controller to resolve peer dependency warnings ([#20044](https://github.com/MetaMask/metamask-mobile/pull/20044)) +- chore: Bump target SDK to 35 ([#20461](https://github.com/MetaMask/metamask-mobile/pull/20461)) +- chore: Bump Snaps packages ([#20684](https://github.com/MetaMask/metamask-mobile/pull/20684)) +- chore(test): add option to skip react native reload in test cleanup ([#20527](https://github.com/MetaMask/metamask-mobile/pull/20527)) +- chore: set BIP-44 as default cp-13.5.0 ([#20250](https://github.com/MetaMask/metamask-mobile/pull/20250)) +- chore: E2E docu updated ([#20709](https://github.com/MetaMask/metamask-mobile/pull/20709)) +- chore: rewards show stale state when error ([#20637](https://github.com/MetaMask/metamask-mobile/pull/20637)) +- chore: filters out Tron energy and bandwidth ([#20685](https://github.com/MetaMask/metamask-mobile/pull/20685)) +- chore: rewards splash screen ([#20604](https://github.com/MetaMask/metamask-mobile/pull/20604)) +- chore: bump `@metamask/multichain-account-service` to `^1.5.0` ([#20687](https://github.com/MetaMask/metamask-mobile/pull/20687)) +- chore: design fixes in swaps ([#20662](https://github.com/MetaMask/metamask-mobile/pull/20662)) +- chore: Make remote image use expo-image ([#20606](https://github.com/MetaMask/metamask-mobile/pull/20606)) +- chore: upcoming rewards to locked rewards ([#20618](https://github.com/MetaMask/metamask-mobile/pull/20618)) +- chore: use sids from ois endpoint ([#20628](https://github.com/MetaMask/metamask-mobile/pull/20628)) +- chore: Standardize network connection banner type/metrics ([#20602](https://github.com/MetaMask/metamask-mobile/pull/20602)) +- chore: dedicated github runners for android e2e ([#20463](https://github.com/MetaMask/metamask-mobile/pull/20463)) +- chore: rewards bottom sheet modal description bodyMd ([#20619](https://github.com/MetaMask/metamask-mobile/pull/20619)) +- chore: remove network restrictions from swaps buttons ([#20529](https://github.com/MetaMask/metamask-mobile/pull/20529)) +- chore: Prioritize target and environment values from js env for build.sh ([#20614](https://github.com/MetaMask/metamask-mobile/pull/20614)) +- chore: bump `@metamask/multichain-account-service` to `^1.4.0` ([#20572](https://github.com/MetaMask/metamask-mobile/pull/20572)) +- chore: removes null snapshot ([#19269](https://github.com/MetaMask/metamask-mobile/pull/19269)) +- chore: tweaks to settings view for multi subscription case ([#20575](https://github.com/MetaMask/metamask-mobile/pull/20575)) +- chore: adds Tron snap support ([#18303](https://github.com/MetaMask/metamask-mobile/pull/18303)) +- chore: switch to mobile optin endpoint ([#20554](https://github.com/MetaMask/metamask-mobile/pull/20554)) +- chore: add segment error tracking to vault issues ([#19425](https://github.com/MetaMask/metamask-mobile/pull/19425)) +- chore: Make close position values reactive to price changes ([#20546](https://github.com/MetaMask/metamask-mobile/pull/20546)) +- chore: Add missing locale string ([#20540](https://github.com/MetaMask/metamask-mobile/pull/20540)) +- chore: modals for unlinked accounts in rewards dashboard ([#20511](https://github.com/MetaMask/metamask-mobile/pull/20511)) +- chore: bump `@metamask/profile-sync-controller` to `^25.1.0` ([#20513](https://github.com/MetaMask/metamask-mobile/pull/20513)) +- chore: update old identity code ownership ([#20502](https://github.com/MetaMask/metamask-mobile/pull/20502)) +- chore: refactor recipient validation in new send implementation ([#20229](https://github.com/MetaMask/metamask-mobile/pull/20229)) +- chore: scale e2e-tests to large runners ([#20391](https://github.com/MetaMask/metamask-mobile/pull/20391)) +- chore: add cursoragent to CLA exception ([#20475](https://github.com/MetaMask/metamask-mobile/pull/20475)) +- chore: enhanced tab to lazy load and scrollable cp-7.56.0 ([#19990](https://github.com/MetaMask/metamask-mobile/pull/19990)) +- chore: stable main sync 7.57.0 ([#20334](https://github.com/MetaMask/metamask-mobile/pull/20334)) +- chore: Update .js.env.example with dev and qa values ([#20485](https://github.com/MetaMask/metamask-mobile/pull/20485)) +- chore: Remove unused patch scripts and script that was using patch package ([#20443](https://github.com/MetaMask/metamask-mobile/pull/20443)) +- chore: rewards error banner match designs & onboarding modal for geo/… ([#20452](https://github.com/MetaMask/metamask-mobile/pull/20452)) +- chore: Replace local with dev environment and point to correct environments ([#18064](https://github.com/MetaMask/metamask-mobile/pull/18064)) +- chore: update network icons ([#20438](https://github.com/MetaMask/metamask-mobile/pull/20438)) +- chore: update network names ([#19745](https://github.com/MetaMask/metamask-mobile/pull/19745)) +- chore: bump multichain accounts deps ([#20255](https://github.com/MetaMask/metamask-mobile/pull/20255)) +- chore: add e2e smoke release label to release PR when created ([#18010](https://github.com/MetaMask/metamask-mobile/pull/18010)) +- chore: replace react native tcp by react-native-tcp-socket package ([#20384](https://github.com/MetaMask/metamask-mobile/pull/20384)) +- chore: remove nft controller patch ([#20312](https://github.com/MetaMask/metamask-mobile/pull/20312)) +- chore: reduce mobile login ([#20400](https://github.com/MetaMask/metamask-mobile/pull/20400)) +- chore: improved rewards ui for error and loading ([#20389](https://github.com/MetaMask/metamask-mobile/pull/20389)) +- chore: solana snap update ([#20382](https://github.com/MetaMask/metamask-mobile/pull/20382)) +- chore(deps): bump `@metamask/eth-hd-keyring` to 13.0.0 ([#20325](https://github.com/MetaMask/metamask-mobile/pull/20325)) +- chore: cleanup code to use assets returned by selector selectAssetsBySelectedAccountGroup ([#20316](https://github.com/MetaMask/metamask-mobile/pull/20316)) +- chore: error timeout feedback ([#20329](https://github.com/MetaMask/metamask-mobile/pull/20329)) +- chore: bump utils version ([#20320](https://github.com/MetaMask/metamask-mobile/pull/20320)) +- chore: yarn v3 breaking changes ([#19213](https://github.com/MetaMask/metamask-mobile/pull/19213)) + +### Fixed + +- fix(predict): empty state ([#21479](https://github.com/MetaMask/metamask-mobile/pull/21479)) +- fix(perps): balance display without full decimals cp-7.58.0 ([#21355](https://github.com/MetaMask/metamask-mobile/pull/21355)) +- fix(predict): fee collector address for prod environment ([#21444](https://github.com/MetaMask/metamask-mobile/pull/21444)) +- fix(predict): order toasts ([#21395](https://github.com/MetaMask/metamask-mobile/pull/21395)) +- fix(predict): small ui/ux fixes ([#21381](https://github.com/MetaMask/metamask-mobile/pull/21381)) +- fix(predict): change order toasts and show claim amount correctly ([#21356](https://github.com/MetaMask/metamask-mobile/pull/21356)) +- fix(predict): predict resolved positions component ([#21301](https://github.com/MetaMask/metamask-mobile/pull/21301)) +- fix(SDKConnectV2): Fix storage regression ([#21283](https://github.com/MetaMask/metamask-mobile/pull/21283)) +- fix(deposit): remove unresponsive period from keypad cp-7.57.0 ([#21233](https://github.com/MetaMask/metamask-mobile/pull/21233)) +- fix(perps): adjust decimals logic accross perps codebase ([#20971](https://github.com/MetaMask/metamask-mobile/pull/20971)) +- fix(perps): optimize connection speed and consolidate architecture cp-7.57.0 ([#20946](https://github.com/MetaMask/metamask-mobile/pull/20946)) +- fix(deposit): payment method duration badge ([#21140](https://github.com/MetaMask/metamask-mobile/pull/21140)) +- fix(SDKConnectV2): Fixed race condition and expiry bug ([#20990](https://github.com/MetaMask/metamask-mobile/pull/20990)) +- fix(action): require changelog entry even if the PR description doesn't match template ([#21021](https://github.com/MetaMask/metamask-mobile/pull/21021)) +- fix(pr template): Use latest version of release pr template ([#21019](https://github.com/MetaMask/metamask-mobile/pull/21019)) +- fix(perps): remove loading delay from tutorial screen ([#20918](https://github.com/MetaMask/metamask-mobile/pull/20918)) +- fix(predict): market details tabs ([#20970](https://github.com/MetaMask/metamask-mobile/pull/20970)) +- fix(perps): cp-7.57.0 missing trace attachment in sentry measurements ([#20817](https://github.com/MetaMask/metamask-mobile/pull/20817)) +- fix(predict): safe nonce when contract is not deployed ([#20963](https://github.com/MetaMask/metamask-mobile/pull/20963)) +- fix(deposit): get started mUSD cp-7.57.0 ([#20915](https://github.com/MetaMask/metamask-mobile/pull/20915)) +- fix(ramp): prevent 'undefined' flash in sell amount input during load cp-7.57.0 ([#20881](https://github.com/MetaMask/metamask-mobile/pull/20881)) +- fix(deposit): error modal cp-7.57.0 ([#20772](https://github.com/MetaMask/metamask-mobile/pull/20772)) +- fix(deposit): region selector modal param cp-7.57.0 ([#20793](https://github.com/MetaMask/metamask-mobile/pull/20793)) +- fix(release pr approval): add more explicit name for the job ([#20856](https://github.com/MetaMask/metamask-mobile/pull/20856)) +- fix(SDKConnectV2): Storage will automatically delete expired connections ([#20565](https://github.com/MetaMask/metamask-mobile/pull/20565)) +- fix(perps): cp-7.57.0 perps reward discount not applied correctly ([#20738](https://github.com/MetaMask/metamask-mobile/pull/20738)) +- fix(SDKConnectV2): Fix in-app QR Code scanner to handle SDK V2 deeplinks ([#20691](https://github.com/MetaMask/metamask-mobile/pull/20691)) +- fix(SDKConnectV2): UI not showing the right dapp name/url/icon ([#20623](https://github.com/MetaMask/metamask-mobile/pull/20623)) +- fix(SDKConnectV2): SDKDisconnectModal `toHex` issue ([#20680](https://github.com/MetaMask/metamask-mobile/pull/20680)) +- fix(sign off list): remove legacy list of teams ([#20720](https://github.com/MetaMask/metamask-mobile/pull/20720)) +- fix(card): card home viewed metric returning NaN error ([#20707](https://github.com/MetaMask/metamask-mobile/pull/20707)) +- fix(rewards): added reset rewards state call in useDeleteWallet hook ([#20656](https://github.com/MetaMask/metamask-mobile/pull/20656)) +- fix(deposit): add missing paymentMethod parameter to createOrder ([#20595](https://github.com/MetaMask/metamask-mobile/pull/20595)) +- fix(ramp): payment method selector height ([#20651](https://github.com/MetaMask/metamask-mobile/pull/20651)) +- fix(perps): invalid reward icon in perps market list ([#20444](https://github.com/MetaMask/metamask-mobile/pull/20444)) +- fix(account-tree-controller): re-use computed names for groups ([#20630](https://github.com/MetaMask/metamask-mobile/pull/20630)) +- fix(perps): Update fee display text color to alternative in Perps trade screen ([#20445](https://github.com/MetaMask/metamask-mobile/pull/20445)) +- fix(perps): invalid candle interval button styles ([#20447](https://github.com/MetaMask/metamask-mobile/pull/20447)) +- fix(rewards): added relevant margins for alignment on rewards dashboard ([#20586](https://github.com/MetaMask/metamask-mobile/pull/20586)) +- fix(multichain-accounts): use proper `selectedAccountGroup` (instead of `selectedInternalAccount`) ([#20517](https://github.com/MetaMask/metamask-mobile/pull/20517)) +- fix(SnapKeyring): do not use approval flow if confirmation is skipped ([#20456](https://github.com/MetaMask/metamask-mobile/pull/20456)) +- fix(ramp): display all orders from account ([#20432](https://github.com/MetaMask/metamask-mobile/pull/20432)) +- fix(perps): cp-7.56.0 events name in snake_case ([#20455](https://github.com/MetaMask/metamask-mobile/pull/20455)) +- fix(fitness function): add more explicit name for the job ([#20395](https://github.com/MetaMask/metamask-mobile/pull/20395)) +- fix(rewards): fixed toast postion and network list spacing issues ([#20352](https://github.com/MetaMask/metamask-mobile/pull/20352)) +- fix(ramp): safe area view ([#20322](https://github.com/MetaMask/metamask-mobile/pull/20322)) +- fix(rewards): fixed alignment and referral code validation logic ([#20305](https://github.com/MetaMask/metamask-mobile/pull/20305)) +- fix(ramp): order list for items with wrong network cp-7.56.0 ([#20251](https://github.com/MetaMask/metamask-mobile/pull/20251)) +- fix(ramp): use account group name ([#20319](https://github.com/MetaMask/metamask-mobile/pull/20319)) +- refactor: use `@metamask/eth-qr-keyring` ([#17157](https://github.com/MetaMask/metamask-mobile/pull/17157)) +- test: improve test execution consistency ([#20266](https://github.com/MetaMask/metamask-mobile/pull/20266)) +- test: adds unit tests to run-e2e-tags-gha.mjs ([#20306](https://github.com/MetaMask/metamask-mobile/pull/20306)) +- test: Fixed test `e2e/specs/wallet/send-ERC-token.spec.js` ([#20261](https://github.com/MetaMask/metamask-mobile/pull/20261)) +- chore: rwds-390 wrong level image ([#20303](https://github.com/MetaMask/metamask-mobile/pull/20303)) +- test: disables flaky test ([#19974](https://github.com/MetaMask/metamask-mobile/pull/19974)) +- test: refactors the e2e sh script to mjs for flakiness detection ([#19838](https://github.com/MetaMask/metamask-mobile/pull/19838)) +- chore: Add Solana devnet support ([#20155](https://github.com/MetaMask/metamask-mobile/pull/20155)) +- chore: rwds-468 fix stale balance ([#20243](https://github.com/MetaMask/metamask-mobile/pull/20243)) +- chore: RWDS string changes based on testing / user feedback ([#20288](https://github.com/MetaMask/metamask-mobile/pull/20288)) +- refactor: refactor BIP-44 feature flag ([#20109](https://github.com/MetaMask/metamask-mobile/pull/20109)) +- chore(ramps): migrate to react-native-safearea-context for android 35 ([#19136](https://github.com/MetaMask/metamask-mobile/pull/19136)) +- feat(card): use supported list of deposit tokens on Card home ([#19949](https://github.com/MetaMask/metamask-mobile/pull/19949)) +- feat(card): add card home viewed metric ([#20041](https://github.com/MetaMask/metamask-mobile/pull/20041)) +- chore: update tab empty state button to secondary variant ([#20262](https://github.com/MetaMask/metamask-mobile/pull/20262)) +- refactor: remove iconUrl from event asset and update ActivityEventRow to use network images ([#20244](https://github.com/MetaMask/metamask-mobile/pull/20244)) +- fix(perps): cp-7.56.0 validate metametrics events ([#20227](https://github.com/MetaMask/metamask-mobile/pull/20227)) +- chore: cicd cleanup sha-pinning ([#20242](https://github.com/MetaMask/metamask-mobile/pull/20242)) +- feat(perps): cp-7.56.0 market balance actions component ([#20107](https://github.com/MetaMask/metamask-mobile/pull/20107)) +- test: update account name change flow in multichain accounts tests ([#20216](https://github.com/MetaMask/metamask-mobile/pull/20216)) +- test: BIP-44 Account wallet details e2e tests ([#20213](https://github.com/MetaMask/metamask-mobile/pull/20213)) +- refactor: portfolio value format ([#20195](https://github.com/MetaMask/metamask-mobile/pull/20195)) +- feat(INFRA-2969): small runners ([#20224](https://github.com/MetaMask/metamask-mobile/pull/20224)) +- chore: rwds-475 ([#20235](https://github.com/MetaMask/metamask-mobile/pull/20235)) +- fix(rewards): removed prefix text on referral link ([#20232](https://github.com/MetaMask/metamask-mobile/pull/20232)) +- feat(MultichainAccountSelectorList): do not show wallet footer for hardware wallets and imported accounts ([#20129](https://github.com/MetaMask/metamask-mobile/pull/20129)) +- chore: rewards fix multi account subscription issues ([#20162](https://github.com/MetaMask/metamask-mobile/pull/20162)) +- chore(deps): bump `@metamask/solana-wallet-snap` to 2.3.10 ([#20220](https://github.com/MetaMask/metamask-mobile/pull/20220)) +- chore: Change one word in en.json for RWDS ([#20215](https://github.com/MetaMask/metamask-mobile/pull/20215)) +- refactor(ramps): update aggregator token modal to a bottom sheet ([#19185](https://github.com/MetaMask/metamask-mobile/pull/19185)) +- test: add multichainAccountsIntroModalSeen flag to default FixtureBuilder ([#20210](https://github.com/MetaMask/metamask-mobile/pull/20210)) +- ci: fix triggering performance e2e jobs ([#20208](https://github.com/MetaMask/metamask-mobile/pull/20208)) +- New Crowdin translations by Github Action ([#20176](https://github.com/MetaMask/metamask-mobile/pull/20176)) +- fix(perps): cp-7.56.0 fee calculation discrepency between ui and order execution ([#20184](https://github.com/MetaMask/metamask-mobile/pull/20184)) +- chore: send up usd price per token with rewards API request in Swaps ([#19768](https://github.com/MetaMask/metamask-mobile/pull/19768)) +- chore(CODEOWNERS): update wallet-ux to be mobile-core-ux ([#19851](https://github.com/MetaMask/metamask-mobile/pull/19851)) +- chore: integrate @metamask/gator-permissions-controller ([#20006](https://github.com/MetaMask/metamask-mobile/pull/20006)) +- ci: clean up performance e2e workflow ([#20192](https://github.com/MetaMask/metamask-mobile/pull/20192)) +- chore: bump SelectedNetworkController package ([#19235](https://github.com/MetaMask/metamask-mobile/pull/19235)) +- chore: rewards rwds 358 ([#20140](https://github.com/MetaMask/metamask-mobile/pull/20140)) +- refactor(perps): change reward controller cache duration to 5min ([#20134](https://github.com/MetaMask/metamask-mobile/pull/20134)) +- fix(perps): cp-7.56.0 invalid margin computation in close position screen ([#20172](https://github.com/MetaMask/metamask-mobile/pull/20172)) +- fix(perps): cp-7.56.0 inconsistent style in fee display ([#20174](https://github.com/MetaMask/metamask-mobile/pull/20174)) +- chore: updated fox icon for rewards ([#20175](https://github.com/MetaMask/metamask-mobile/pull/20175)) +- chore: Update `multichain-network-controller` ([#19978](https://github.com/MetaMask/metamask-mobile/pull/19978)) +- New Crowdin translations by Github Action ([#19898](https://github.com/MetaMask/metamask-mobile/pull/19898)) +- chore: bump account-tree-controller to ^0.18.1 ([#20151](https://github.com/MetaMask/metamask-mobile/pull/20151)) +- chore: change reward tab icon ([#20118](https://github.com/MetaMask/metamask-mobile/pull/20118)) +- style: Overview tab UI tweaks ([#20130](https://github.com/MetaMask/metamask-mobile/pull/20130)) +- chore: Collect metrics for unavailable/degraded custom RPC ([#20030](https://github.com/MetaMask/metamask-mobile/pull/20030)) +- fix(AccountGroupDetails): hide private keys button for hardware wallets ([#20045](https://github.com/MetaMask/metamask-mobile/pull/20045)) +- chore: reward auth compatible with solana ([#20052](https://github.com/MetaMask/metamask-mobile/pull/20052)) +- Fix: bip 44 bugs ([#20013](https://github.com/MetaMask/metamask-mobile/pull/20013)) +- chore: sentry rewrite breadcrumb perf ([#20012](https://github.com/MetaMask/metamask-mobile/pull/20012)) +- chore: Updated slide animation for settings to slide in from the right ([#19989](https://github.com/MetaMask/metamask-mobile/pull/19989)) +- chore: bump multichain accounts deps ([#20040](https://github.com/MetaMask/metamask-mobile/pull/20040)) +- chore: Add disable Husky instructions to readme ([#20003](https://github.com/MetaMask/metamask-mobile/pull/20003)) +- chore: Update `@metamask/swaps-controller` to v14 ([#19935](https://github.com/MetaMask/metamask-mobile/pull/19935)) +- INFRA-2911: Hardcoded parameters values for create release pull request ([#19353](https://github.com/MetaMask/metamask-mobile/pull/19353)) +- refactor(AccountCell): update navigation to account group details ([#20035](https://github.com/MetaMask/metamask-mobile/pull/20035)) +- chore: use exported constants for user storage paths ([#20024](https://github.com/MetaMask/metamask-mobile/pull/20024)) +- chore: update default swap pairs for Ethereum and Linea to mUSD ([#20018](https://github.com/MetaMask/metamask-mobile/pull/20018)) +- feat(SDKConnectV2): Connection Resumption & App State Handling ([#19505](https://github.com/MetaMask/metamask-mobile/pull/19505)) +- chore: update BIP-44 feature flag override to disable the feature ([#19886](https://github.com/MetaMask/metamask-mobile/pull/19886)) +- test: Account list - import SRP ([#19955](https://github.com/MetaMask/metamask-mobile/pull/19955)) +- test: fix performance e2e: ios onboarding ([#20009](https://github.com/MetaMask/metamask-mobile/pull/20009)) +- test: Fixed onramp tests ([#20005](https://github.com/MetaMask/metamask-mobile/pull/20005)) +- test: perps perf e2e onboarding ([#19966](https://github.com/MetaMask/metamask-mobile/pull/19966)) +- feat(perps): integrate MetaMask Points rewards and fee discounts for Perps trading ([#19808](https://github.com/MetaMask/metamask-mobile/pull/19808)) +- chore: upgrade assets controllers to v75.2.0 ([#19742](https://github.com/MetaMask/metamask-mobile/pull/19742)) +- test: add profiling data to performance test reports ([#19875](https://github.com/MetaMask/metamask-mobile/pull/19875)) +- chore: Fix rive docs ([#19878](https://github.com/MetaMask/metamask-mobile/pull/19878)) +- chore: Add additional safeguard measures to further prevent unnecessary truncations cp-7.56.0 ([#19857](https://github.com/MetaMask/metamask-mobile/pull/19857)) +- chore: bump multichain accounts deps ([#19932](https://github.com/MetaMask/metamask-mobile/pull/19932)) +- ci: remove clean runner step for iOS E2E tests ([#19940](https://github.com/MetaMask/metamask-mobile/pull/19940)) +- test: Delete and import account with PK ([#19795](https://github.com/MetaMask/metamask-mobile/pull/19795)) +- chore: remove low prio ([#19379](https://github.com/MetaMask/metamask-mobile/pull/19379)) +- chore: Update `ppom-validator` ([#19340](https://github.com/MetaMask/metamask-mobile/pull/19340)) +- chore: Update `eth-snap-keyring` and `keyring-api` ([#19917](https://github.com/MetaMask/metamask-mobile/pull/19917)) +- ci: remove nick-retries from E2E run step ([#19909](https://github.com/MetaMask/metamask-mobile/pull/19909)) +- Rwds 270 level image name points threshold should come from rewards backend ([#19728](https://github.com/MetaMask/metamask-mobile/pull/19728)) +- New Crowdin translations by Github Action ([#19796](https://github.com/MetaMask/metamask-mobile/pull/19796)) +- test: update mock profile-sync fixtures ([#19879](https://github.com/MetaMask/metamask-mobile/pull/19879)) +- chore: draft workflow for rc builds in rwy ([#19472](https://github.com/MetaMask/metamask-mobile/pull/19472)) +- chore: cp-7.56.0 update perps build flags ahead of launch ([#19853](https://github.com/MetaMask/metamask-mobile/pull/19853)) +- chore: Add new metadata to `PerpsController` ([#19827](https://github.com/MetaMask/metamask-mobile/pull/19827)) +- ci: only run performance job on release commit messages ([#19840](https://github.com/MetaMask/metamask-mobile/pull/19840)) +- chore: faster network icon ([#19789](https://github.com/MetaMask/metamask-mobile/pull/19789)) +- RWDS-289 new header key for rewards auth ([#19767](https://github.com/MetaMask/metamask-mobile/pull/19767)) +- chore: adds Bitcoin testnet feature flag ([#19752](https://github.com/MetaMask/metamask-mobile/pull/19752)) +- Feat/default-biometric-choice ([#19732](https://github.com/MetaMask/metamask-mobile/pull/19732)) +- INFRA-2919: Fix running infinite bitrise workflows on autotriggers ([#19771](https://github.com/MetaMask/metamask-mobile/pull/19771)) +- chore: sync stable to main for version 7.54.2 ([#19639](https://github.com/MetaMask/metamask-mobile/pull/19639)) +- New Crowdin translations by Github Action ([#18904](https://github.com/MetaMask/metamask-mobile/pull/18904)) +- feat(deposit): adds ETH to list of deposit tokens ([#19757](https://github.com/MetaMask/metamask-mobile/pull/19757)) +- chore: Bump main version to 7.57.0 ([#19762](https://github.com/MetaMask/metamask-mobile/pull/19762)) +- chore: migrate to new SafeAreaView ([#19747](https://github.com/MetaMask/metamask-mobile/pull/19747)) +- fix: ShareAddressQR displays correct address for non-EVM assets ([#21449](https://github.com/MetaMask/metamask-mobile/pull/21449)) +- fix: Added TempTouchableOpacity to conditionally simulate tap behavior for android cp-7.57.0 ([#21426](https://github.com/MetaMask/metamask-mobile/pull/21426)) +- fix: Check case sensitive `Content-Length` header ([#21475](https://github.com/MetaMask/metamask-mobile/pull/21475)) +- fix: incorrect network when adding token ([#21461](https://github.com/MetaMask/metamask-mobile/pull/21461)) +- fix: cp-7.57.0 update destination chain balances after bridge transaction ([#21430](https://github.com/MetaMask/metamask-mobile/pull/21430)) +- fix: invalid balance passed to parseUnits ([#21464](https://github.com/MetaMask/metamask-mobile/pull/21464)) +- fix: cp-7.57.0 caip-issue causing failure to show points estimation ([#21462](https://github.com/MetaMask/metamask-mobile/pull/21462)) +- fix: update default swap destination for Sei ([#20731](https://github.com/MetaMask/metamask-mobile/pull/20731)) +- fix: improve perps tutorial carousel layout for longer translations ([#21295](https://github.com/MetaMask/metamask-mobile/pull/21295)) +- fix: exit useLatestBalance early on undefined chain ([#21407](https://github.com/MetaMask/metamask-mobile/pull/21407)) +- fix: cp-7.57.0 deeplink for rewards populates referral code ([#21403](https://github.com/MetaMask/metamask-mobile/pull/21403)) +- fix: Navigation title misalignment on Android ([#21280](https://github.com/MetaMask/metamask-mobile/pull/21280)) +- fix: formatting diffs 20904 ([#21315](https://github.com/MetaMask/metamask-mobile/pull/21315)) +- fix: cp-7.57.0 TAT-1888 fix perps controller geo block remote feature flag race condition ([#21385](https://github.com/MetaMask/metamask-mobile/pull/21385)) +- fix: patch bridge status controller 50 ([#21374](https://github.com/MetaMask/metamask-mobile/pull/21374)) +- fix: cp-7.58.0 metamask pay transaction failures ([#21287](https://github.com/MetaMask/metamask-mobile/pull/21287)) +- fix: update package to fix staking balance issue ([#21222](https://github.com/MetaMask/metamask-mobile/pull/21222)) +- fix: cp-7.58: fix amount/decimals in rewards activity ([#21334](https://github.com/MetaMask/metamask-mobile/pull/21334)) +- fix: Swaps incorrect token icon ([#21304](https://github.com/MetaMask/metamask-mobile/pull/21304)) +- fix: Fix stale block tracker cache bug ([#21288](https://github.com/MetaMask/metamask-mobile/pull/21288)) +- fix: rewards third iteration for bip-44 ([#21286](https://github.com/MetaMask/metamask-mobile/pull/21286)) +- fix: reduce number of notification details ([#21279](https://github.com/MetaMask/metamask-mobile/pull/21279)) +- fix: metamask pay metrics in finalized events ([#21237](https://github.com/MetaMask/metamask-mobile/pull/21237)) +- fix: fix displayed warning for network ([#21091](https://github.com/MetaMask/metamask-mobile/pull/21091)) +- fix: NFT image does not load when importing nft after app restart ([#21267](https://github.com/MetaMask/metamask-mobile/pull/21267)) +- fix: chart not displaying sometimes on android ([#21211](https://github.com/MetaMask/metamask-mobile/pull/21211)) +- fix: cp-7.57.0 prevent unnecessary reward navigation on account change ([#21264](https://github.com/MetaMask/metamask-mobile/pull/21264)) +- fix: cp-7.57.0 app bricks on asset sorting ([#21256](https://github.com/MetaMask/metamask-mobile/pull/21256)) +- fix: cp-7.57.0 target PRD for rc/pre-release ([#21254](https://github.com/MetaMask/metamask-mobile/pull/21254)) +- fix: now consider non-EVM account names for group names - cp-7.57.0 ([#21189](https://github.com/MetaMask/metamask-mobile/pull/21189)) +- fix: select first gas fee token automatically ([#18753](https://github.com/MetaMask/metamask-mobile/pull/18753)) +- fix: Broken deposit monitor toasts cp-7.57.0 ([#21165](https://github.com/MetaMask/metamask-mobile/pull/21165)) +- fix: BackgroundBridge should not check the request origin when the connection is from WC or SDK ([#21118](https://github.com/MetaMask/metamask-mobile/pull/21118)) +- fix: cp-7.57.0 Initialize feature flags from state ([#21168](https://github.com/MetaMask/metamask-mobile/pull/21168)) +- fix: cp-7.57.0 slow reward signing, update sol snap ([#21202](https://github.com/MetaMask/metamask-mobile/pull/21202)) +- fix: conditionally apply onPress for Accessibility mode for Android TouchableOpacity cp-7.57.0 ([#21146](https://github.com/MetaMask/metamask-mobile/pull/21146)) +- fix: prevent swaps screen from briefly flashing bridgeview when loading ([#21116](https://github.com/MetaMask/metamask-mobile/pull/21116)) +- fix: multichain account network permissions switch cp-7.57.0 ([#21043](https://github.com/MetaMask/metamask-mobile/pull/21043)) +- fix: adds solana and btc account balances back to ramp quote page ([#21104](https://github.com/MetaMask/metamask-mobile/pull/21104)) +- fix: polygon in metamask pay ([#21191](https://github.com/MetaMask/metamask-mobile/pull/21191)) +- fix: cp-7.57.0 accounts list not scrollable on android ([#21180](https://github.com/MetaMask/metamask-mobile/pull/21180)) +- fix: Update text size in Tag to match designs ([#20999](https://github.com/MetaMask/metamask-mobile/pull/20999)) +- fix: update padding and icon sizing on the homepage ([#21171](https://github.com/MetaMask/metamask-mobile/pull/21171)) +- fix: cp-7.57.0 hide 0 balances account picker ([#21139](https://github.com/MetaMask/metamask-mobile/pull/21139)) +- fix: order size and margin displayed on trade screen differ from execution for small amounts ([#20576](https://github.com/MetaMask/metamask-mobile/pull/20576)) +- fix: rewards bip-44 modify opt out event emit ([#21123](https://github.com/MetaMask/metamask-mobile/pull/21123)) +- fix: critical type safety issue in tracing system cp-7.57.0 ([#21075](https://github.com/MetaMask/metamask-mobile/pull/21075)) +- fix: align perps activity items with perps activity UI ([#21097](https://github.com/MetaMask/metamask-mobile/pull/21097)) +- fix: BackgroundBridge onMessage origin check ([#20987](https://github.com/MetaMask/metamask-mobile/pull/20987)) +- fix: transaction pay loading ([#21090](https://github.com/MetaMask/metamask-mobile/pull/21090)) +- fix: update font size in RPC flow ([#21056](https://github.com/MetaMask/metamask-mobile/pull/21056)) +- fix: bump `@metamask/account-tree-controller` to `v1.4.2` cp-7.57.0 ([#21046](https://github.com/MetaMask/metamask-mobile/pull/21046)) +- fix: asset details showing -100% token price in Swaps UI ([#21026](https://github.com/MetaMask/metamask-mobile/pull/21026)) +- fix: consume send bundle feature flag to determine alternateGasFee support ([#19899](https://github.com/MetaMask/metamask-mobile/pull/19899)) +- fix: cp-7.67.0 improve tabs click and move polling provider to parent element ([#20898](https://github.com/MetaMask/metamask-mobile/pull/20898)) +- fix: cp-7.57.0 fix api fetcher balances ([#21014](https://github.com/MetaMask/metamask-mobile/pull/21014)) +- fix: Prevent throwing exception when save is clicked on cancel and speedup with a UI error ([#21038](https://github.com/MetaMask/metamask-mobile/pull/21038)) +- fix: Fix fallback of gas market estimates on send flow ([#21037](https://github.com/MetaMask/metamask-mobile/pull/21037)) +- fix: Adding missing metrics property is_smart_transaction for smart transactions ([#21027](https://github.com/MetaMask/metamask-mobile/pull/21027)) +- fix: Fix issue 20841 QR confirmation screen appearing after re-open MM. Unable to close. cp-13.5.0 ([#21024](https://github.com/MetaMask/metamask-mobile/pull/21024)) +- fix: cp-7.57.0 fix padding after tabslist change ([#20986](https://github.com/MetaMask/metamask-mobile/pull/20986)) +- fix: lock time when skipping onboarding and test coverage ([#20865](https://github.com/MetaMask/metamask-mobile/pull/20865)) +- fix: seedless-rehydrate and sync issue ([#20829](https://github.com/MetaMask/metamask-mobile/pull/20829)) +- fix: deprecate legacy swaps ([#20947](https://github.com/MetaMask/metamask-mobile/pull/20947)) +- fix: Fix name of Snap keyring builder messenger ([#20981](https://github.com/MetaMask/metamask-mobile/pull/20981)) +- fix: cp-7.57.0 wallet initiated Send transactions are validated by security alerts API on mobile ([#20979](https://github.com/MetaMask/metamask-mobile/pull/20979)) +- fix: account backup screen ui in SRP flow. ([#20972](https://github.com/MetaMask/metamask-mobile/pull/20972)) +- fix: network `gasFeeTokenIcon` and display native amount as fallback cp-7.57.0 ([#20931](https://github.com/MetaMask/metamask-mobile/pull/20931)) +- fix: Addressing designs feedbacks on send amount page ([#20973](https://github.com/MetaMask/metamask-mobile/pull/20973)) +- fix: Updated rewards page spacing to allow active boosts's carousel to go to edge of screen cp-7.57.0 ([#20939](https://github.com/MetaMask/metamask-mobile/pull/20939)) +- fix: cp-7.57.0 Minimal pending deposit UI ([#20910](https://github.com/MetaMask/metamask-mobile/pull/20910)) +- fix: cp-7.57.0 handle URL-encoded characters in browser URL processing to fix home button navigation ([#20883](https://github.com/MetaMask/metamask-mobile/pull/20883)) +- fix: cp-7.57.0 no duplicate season status calls on account add ([#20942](https://github.com/MetaMask/metamask-mobile/pull/20942)) +- fix: webview protocols alert dialogs ([#19383](https://github.com/MetaMask/metamask-mobile/pull/19383)) +- fix: cp-7.57.0 Fix insufficient alert on send max ([#20933](https://github.com/MetaMask/metamask-mobile/pull/20933)) +- fix: prevent duplicate switch requests in account network row modal ([#20633](https://github.com/MetaMask/metamask-mobile/pull/20633)) +- fix: skip specific regression tests for android and skip ios suite in ci ([#20920](https://github.com/MetaMask/metamask-mobile/pull/20920)) +- fix: Streamlined tabs underline bar logic and added padding to tabs content for better scroll experience cp-7.57.0 ([#20740](https://github.com/MetaMask/metamask-mobile/pull/20740)) +- fix: cp-7.57.0 Change rewards feature flag ([#20886](https://github.com/MetaMask/metamask-mobile/pull/20886)) +- fix: cp-7.57.0 bump assets controllers to v78.0.1 ([#20801](https://github.com/MetaMask/metamask-mobile/pull/20801)) +- fix: fix push events to contain better mixpanel data querying ([#20855](https://github.com/MetaMask/metamask-mobile/pull/20855)) +- fix: cp-7.57.0 update rewards event type for take profit and stop loss ([#20869](https://github.com/MetaMask/metamask-mobile/pull/20869)) +- fix: cp-7.57.0 disable swaps for unsupported chains ([#20838](https://github.com/MetaMask/metamask-mobile/pull/20838)) +- fix: Fix simulation total value to be settled in `properties` instead of `sensitiveProperties` ([#20840](https://github.com/MetaMask/metamask-mobile/pull/20840)) +- fix: cp-7.57.0 Fix new send flow metrics ([#20826](https://github.com/MetaMask/metamask-mobile/pull/20826)) +- fix: use old account indicator instead of checkmark cp-7.57.0 ([#20643](https://github.com/MetaMask/metamask-mobile/pull/20643)) +- fix: adds backup button click handler and navigates to backup flow ([#20832](https://github.com/MetaMask/metamask-mobile/pull/20832)) +- fix: cp-7.57.0 rewards gtm spawn modal different session than bip44 ([#20807](https://github.com/MetaMask/metamask-mobile/pull/20807)) +- fix: cp-7.57.0 remove rewards auth grace concept ([#20804](https://github.com/MetaMask/metamask-mobile/pull/20804)) +- fix: cp-7.57.0 prevent duplicate points events api calls ([#20802](https://github.com/MetaMask/metamask-mobile/pull/20802)) +- fix: cp-7.57.0 UI tour images are narrow small ([#20775](https://github.com/MetaMask/metamask-mobile/pull/20775)) +- fix: align connection logic with extension cp-7.57.0 ([#20578](https://github.com/MetaMask/metamask-mobile/pull/20578)) +- fix: cp-7.57.0 MM Poly font on iOS & onboarding title cropped ([#20736](https://github.com/MetaMask/metamask-mobile/pull/20736)) +- fix: cp-7.56.2 add contentful max version number segmentation ([#20706](https://github.com/MetaMask/metamask-mobile/pull/20706)) +- fix: cp-7.57.0 filter chainIds for staked balances ([#20755](https://github.com/MetaMask/metamask-mobile/pull/20755)) +- fix: cp-7.57.0 rive asset state machine name ([#20758](https://github.com/MetaMask/metamask-mobile/pull/20758)) +- fix: wallet-connect qrcode redirect ([#20636](https://github.com/MetaMask/metamask-mobile/pull/20636)) +- fix: cp-7.56.2 force rendering on token list when order changes ([#20697](https://github.com/MetaMask/metamask-mobile/pull/20697)) +- fix: tab bar alignment ([#20746](https://github.com/MetaMask/metamask-mobile/pull/20746)) +- fix: cp-7.57.0 side effect opt in default account in srp ([#20747](https://github.com/MetaMask/metamask-mobile/pull/20747)) +- fix: cp-7.57.0 handle session expiration for rewards module ([#20690](https://github.com/MetaMask/metamask-mobile/pull/20690)) +- fix: cp-7.57.0 make sure rewards session token exists when importing SRP that h… ([#20742](https://github.com/MetaMask/metamask-mobile/pull/20742)) +- fix: Nft grid refresh control not working correctly ([#20726](https://github.com/MetaMask/metamask-mobile/pull/20726)) +- fix: cp-7.56.2 remove unintended metrics from transaction finalised event ([#20700](https://github.com/MetaMask/metamask-mobile/pull/20700)) +- fix: add a loading state when loading prices instead of 0 00 incl in perp asset page ([#20708](https://github.com/MetaMask/metamask-mobile/pull/20708)) +- fix: change backup text color in account details ([#20703](https://github.com/MetaMask/metamask-mobile/pull/20703)) +- fix: env vars reading utils ([#20701](https://github.com/MetaMask/metamask-mobile/pull/20701)) +- fix: add missing Rewards translations ([#20696](https://github.com/MetaMask/metamask-mobile/pull/20696)) +- fix: design inconsistencies for wallet details ([#20669](https://github.com/MetaMask/metamask-mobile/pull/20669)) +- fix: standardize button icon sizes to md (default) for bottomsheets, navigation and modals ([#20547](https://github.com/MetaMask/metamask-mobile/pull/20547)) +- fix: remove 'Your QR code' tab from QR scanner ([#20583](https://github.com/MetaMask/metamask-mobile/pull/20583)) +- fix: clear destAddress when destAccountSelector unmounts ([#20686](https://github.com/MetaMask/metamask-mobile/pull/20686)) +- fix: only enable solana devnet in flask ([#20682](https://github.com/MetaMask/metamask-mobile/pull/20682)) +- fix: recipient validation for internal accounts ([#20674](https://github.com/MetaMask/metamask-mobile/pull/20674)) +- fix: multichain accounts intro modal animation and copy ([#20672](https://github.com/MetaMask/metamask-mobile/pull/20672)) +- fix: show toast when switching account ([#20394](https://github.com/MetaMask/metamask-mobile/pull/20394)) +- fix: improve performance of MultichainAccountSelectorList with pre-rendering and scroll optimizations ([#20577](https://github.com/MetaMask/metamask-mobile/pull/20577)) +- fix: resolve prop override in PerpsEmptyState component ([#20534](https://github.com/MetaMask/metamask-mobile/pull/20534)) +- fix: custom simulator name with space failing to start ([#20646](https://github.com/MetaMask/metamask-mobile/pull/20646)) +- fix: Returned Scrollview to Perps and Defi tab cp-7.56.1 ([#20642](https://github.com/MetaMask/metamask-mobile/pull/20642)) +- fix: Update styling of tag component for Bitcoin support ([#20585](https://github.com/MetaMask/metamask-mobile/pull/20585)) +- fix: remove ">" on ways to earn and align fonts ([#20632](https://github.com/MetaMask/metamask-mobile/pull/20632)) +- fix: reduce re-renders for token items ([#20620](https://github.com/MetaMask/metamask-mobile/pull/20620)) +- fix: Rewards activity tab timestamp truncated ([#20581](https://github.com/MetaMask/metamask-mobile/pull/20581)) +- fix: Perps token logo rendering ([#20596](https://github.com/MetaMask/metamask-mobile/pull/20596)) +- fix: Temp Revert page-level scroll for Wallet ([#20579](https://github.com/MetaMask/metamask-mobile/pull/20579)) +- fix: style design inconsistencies for account group details ([#20488](https://github.com/MetaMask/metamask-mobile/pull/20488)) +- fix: hardware back button on android goes back too far in smart account view ([#20479](https://github.com/MetaMask/metamask-mobile/pull/20479)) +- fix: cp-7.56.1 dApp swaps failure on non-permitted network ([#20551](https://github.com/MetaMask/metamask-mobile/pull/20551)) +- fix: add wallet toast message ([#20568](https://github.com/MetaMask/metamask-mobile/pull/20568)) +- fix: Autodetect NFTs does not detect NFTs on Linea and Ethereum Mainnet ([#20504](https://github.com/MetaMask/metamask-mobile/pull/20504)) +- fix: prevent crash opening swaps for tokens with large balances ([#20523](https://github.com/MetaMask/metamask-mobile/pull/20523)) +- fix: handle invalid timestamp ([#20484](https://github.com/MetaMask/metamask-mobile/pull/20484)) +- fix: Improvements in ens resolution code in new send implmentation ([#20532](https://github.com/MetaMask/metamask-mobile/pull/20532)) +- fix: Clean up watcher commands and make it platform agnostic ([#20560](https://github.com/MetaMask/metamask-mobile/pull/20560)) +- fix: Dont error when MM_SENTRY_AUTH_TOKEN is absent ([#20556](https://github.com/MetaMask/metamask-mobile/pull/20556)) +- fix: resolve account balance display issue in account lists ([#20417](https://github.com/MetaMask/metamask-mobile/pull/20417)) +- fix: properly show 0 balance tokens as 0 ([#20535](https://github.com/MetaMask/metamask-mobile/pull/20535)) +- fix: if network exist do not switch ([#20245](https://github.com/MetaMask/metamask-mobile/pull/20245)) +- fix: not being able to see the apply button in swaps source network picker ([#20531](https://github.com/MetaMask/metamask-mobile/pull/20531)) +- fix: bug where 501 would be shown under sol native asset ([#20537](https://github.com/MetaMask/metamask-mobile/pull/20537)) +- fix: tab empty state design polish ([#20483](https://github.com/MetaMask/metamask-mobile/pull/20483)) +- fix: guard setBasicFunctionality calls with state 2 feature flag ([#19939](https://github.com/MetaMask/metamask-mobile/pull/19939)) +- fix: Update tooltip header for petname ([#20503](https://github.com/MetaMask/metamask-mobile/pull/20503)) +- fix: view on blockexplorer links and names for supported networks ([#20506](https://github.com/MetaMask/metamask-mobile/pull/20506)) +- fix: fixed minus symbol position in fiat formatting ([#20514](https://github.com/MetaMask/metamask-mobile/pull/20514)) +- fix: not using the correct solana balances ([#20349](https://github.com/MetaMask/metamask-mobile/pull/20349)) +- fix: missing transactions in activity after perps deposit ([#20507](https://github.com/MetaMask/metamask-mobile/pull/20507)) +- fix: App State Handling (SDKConnectV2) - Permission Revoke ([#20509](https://github.com/MetaMask/metamask-mobile/pull/20509)) +- fix: fixed leverage typo in perps tutorial ([#20496](https://github.com/MetaMask/metamask-mobile/pull/20496)) +- fix: cp-7.56.0 keyboard pushing swaps search bar off screen ([#20492](https://github.com/MetaMask/metamask-mobile/pull/20492)) +- fix: resolve Segment analytics initialization failure on app restart ([#20465](https://github.com/MetaMask/metamask-mobile/pull/20465)) +- fix: (Browser) URL with RTL chars validation ([#20280](https://github.com/MetaMask/metamask-mobile/pull/20280)) +- fix: cp-7.56.0 use BottomSheet and set a height for it ([#20406](https://github.com/MetaMask/metamask-mobile/pull/20406)) +- fix: improved UI/UX of SmartAccountNetworkList ([#20401](https://github.com/MetaMask/metamask-mobile/pull/20401)) +- fix: use correct account name variable for QR code shader header ([#20433](https://github.com/MetaMask/metamask-mobile/pull/20433)) +- fix: keyboard overlapping search results on iOS ([#20428](https://github.com/MetaMask/metamask-mobile/pull/20428)) +- fix: fix network selector dapp ([#20448](https://github.com/MetaMask/metamask-mobile/pull/20448)) +- fix: cp-7.46.0 New Crowdin translations by Github Action ([#20212](https://github.com/MetaMask/metamask-mobile/pull/20212)) +- fix: unable to perform solana transaction if an ethereum provider was connected first ([#20249](https://github.com/MetaMask/metamask-mobile/pull/20249)) +- fix: performance tests ([#20439](https://github.com/MetaMask/metamask-mobile/pull/20439)) +- fix: debounce swap token selection for slower devices ([#20404](https://github.com/MetaMask/metamask-mobile/pull/20404)) +- fix: Bump Sentry to 6.15.0 to fix Promise.allSettled crash on local iOS ([#20423](https://github.com/MetaMask/metamask-mobile/pull/20423)) +- fix: browserstack build names for performance tests ([#20434](https://github.com/MetaMask/metamask-mobile/pull/20434)) +- fix: check workflow ([#20425](https://github.com/MetaMask/metamask-mobile/pull/20425)) +- fix: regression with new TradeWalletActions not linking to perps tutorial ([#20341](https://github.com/MetaMask/metamask-mobile/pull/20341)) +- fix: remove redundant marketing consent bottom sheet for social login user cp-7.56.0 ([#20379](https://github.com/MetaMask/metamask-mobile/pull/20379)) +- fix: Missing Perps translations ([#20278](https://github.com/MetaMask/metamask-mobile/pull/20278)) +- fix: cp-7.56.0 TAT-1789 fix PerpsBottomSheetTooltip freezing on android ([#20398](https://github.com/MetaMask/metamask-mobile/pull/20398)) +- fix: Fix Solana send to redirect activity list ([#20387](https://github.com/MetaMask/metamask-mobile/pull/20387)) +- fix: skip `multipleApprovalsAlerts` when simulations is not supported ([#19435](https://github.com/MetaMask/metamask-mobile/pull/19435)) +- fix: existing EVM permissions removed when a Solana Wallet Standard connection is rejected ([#20309](https://github.com/MetaMask/metamask-mobile/pull/20309)) +- fix: Update Petnames to show Account and Wallet name with BIP44 flag ([#19973](https://github.com/MetaMask/metamask-mobile/pull/19973)) +- fix: handle transaction failures in confirmation ([#20314](https://github.com/MetaMask/metamask-mobile/pull/20314)) +- fix: SDK "return to app" modal ([#19921](https://github.com/MetaMask/metamask-mobile/pull/19921)) +- fix: cp-7.56.0 Misc Fixes for Perps GTM fullscreen modal and Tutorial flow ([#20348](https://github.com/MetaMask/metamask-mobile/pull/20348)) +- fix: handle rewards url per env ([#20304](https://github.com/MetaMask/metamask-mobile/pull/20304)) +- fix: cp-7.46.0 wrap useInitialSource/DestToken in useEffect ([#20336](https://github.com/MetaMask/metamask-mobile/pull/20336)) +- fix: cp-7.56.0 allow tpsl form to enter profit in sl and loss in tp for existing position ([#20317](https://github.com/MetaMask/metamask-mobile/pull/20317)) +- fix: bold account list item text ([#20264](https://github.com/MetaMask/metamask-mobile/pull/20264)) +- fix: reset onboarding step if user exits ([#20332](https://github.com/MetaMask/metamask-mobile/pull/20332)) +- fix: use rewards toast ([#20328](https://github.com/MetaMask/metamask-mobile/pull/20328)) +- fix: add metametrics section in security settings for social login users cp-7.56.0 ([#20298](https://github.com/MetaMask/metamask-mobile/pull/20298)) +- fix: restore unified activity footers ([#20260](https://github.com/MetaMask/metamask-mobile/pull/20260)) +- fix: e2e setup and teardown settings ([#20299](https://github.com/MetaMask/metamask-mobile/pull/20299)) +- fix: cp-7.56.0 speed up source token picker network change, skip token fetching ([#20211](https://github.com/MetaMask/metamask-mobile/pull/20211)) +- fix: seedless controller lock ([#20116](https://github.com/MetaMask/metamask-mobile/pull/20116)) +- fix: remove src asset when gotoswap ([#20275](https://github.com/MetaMask/metamask-mobile/pull/20275)) +- fix: correct feature flag name in useAccountInfo test ([#20282](https://github.com/MetaMask/metamask-mobile/pull/20282)) +- fix: resolve AddressList header flickering issue ([#20197](https://github.com/MetaMask/metamask-mobile/pull/20197)) +- fix: cp-7.56.0 fix hidden pooled-staking learn more button in historic apy bottom sheet ([#20272](https://github.com/MetaMask/metamask-mobile/pull/20272)) +- fix: recalculate trade button cutout on font scale change ([#20256](https://github.com/MetaMask/metamask-mobile/pull/20256)) +- fix: ways to earn to perps route ([#20263](https://github.com/MetaMask/metamask-mobile/pull/20263)) +- fix: rewards input and small screen issues ([#20252](https://github.com/MetaMask/metamask-mobile/pull/20252)) +- fix: delay for 5s after submitting Base approval cp-7.56.0 ([#20190](https://github.com/MetaMask/metamask-mobile/pull/20190)) +- fix: cp-7.56.0 generate metrics for failed transactions on startup ([#20248](https://github.com/MetaMask/metamask-mobile/pull/20248)) +- fix: account switching in account permission list ([#19730](https://github.com/MetaMask/metamask-mobile/pull/19730)) +- fix: cancelling send request from confirmation footer should go back to home page ([#20239](https://github.com/MetaMask/metamask-mobile/pull/20239)) +- fix: Truncate URL appropriately on iOS ([#17924](https://github.com/MetaMask/metamask-mobile/pull/17924)) +- fix: social login disable metametric option cp-7.56.0 ([#20221](https://github.com/MetaMask/metamask-mobile/pull/20221)) +- fix: solana account switching ([#20131](https://github.com/MetaMask/metamask-mobile/pull/20131)) +- fix: Display account & wallet name in the `AccountNetworkInfo` component ([#19975](https://github.com/MetaMask/metamask-mobile/pull/19975)) +- fix: add `autoCapitalize=none` to password input fields in PrivateKeyList and RevealPrivateCredential components ([#20230](https://github.com/MetaMask/metamask-mobile/pull/20230)) +- fix: account maximum length name on account list ([#20226](https://github.com/MetaMask/metamask-mobile/pull/20226)) +- fix: cp-7.56.0 metamask pay alert button flicker ([#20103](https://github.com/MetaMask/metamask-mobile/pull/20103)) +- fix: wait for snap keyring before account sync ([#20219](https://github.com/MetaMask/metamask-mobile/pull/20219)) +- fix: cp-7.56.0 missing bridge symbols in transaction details ([#20067](https://github.com/MetaMask/metamask-mobile/pull/20067)) +- fix: fix price chart for solana ([#20145](https://github.com/MetaMask/metamask-mobile/pull/20145)) +- fix: cp-7.56.0 Perps socket persisting on account switch v5 ([#20060](https://github.com/MetaMask/metamask-mobile/pull/20060)) +- fix: show check for selected account group in dapp connection ([#20137](https://github.com/MetaMask/metamask-mobile/pull/20137)) +- fix: update login log ([#19923](https://github.com/MetaMask/metamask-mobile/pull/19923)) +- fix: rewards onboarding for small screens ([#20204](https://github.com/MetaMask/metamask-mobile/pull/20204)) +- fix: cp-7.56.0 order initial amount is 0 when it should be 10 ([#20203](https://github.com/MetaMask/metamask-mobile/pull/20203)) +- fix: navigate to address list on receive button ([#20015](https://github.com/MetaMask/metamask-mobile/pull/20015)) +- fix: cp-7.56.0 prevent destination account picker infinite reload ([#20180](https://github.com/MetaMask/metamask-mobile/pull/20180)) +- fix: cp-7.56.0 add multichain prices polling ([#20149](https://github.com/MetaMask/metamask-mobile/pull/20149)) +- fix: disable skeleton animation in unit tests ([#20127](https://github.com/MetaMask/metamask-mobile/pull/20127)) +- fix: remove account permissions before account removal ([#20042](https://github.com/MetaMask/metamask-mobile/pull/20042)) +- fix: account avatars in site cell ([#19972](https://github.com/MetaMask/metamask-mobile/pull/19972)) +- fix: Send flow design defects ([#20142](https://github.com/MetaMask/metamask-mobile/pull/20142)) +- fix: cp-7.56.0 force USD currency in perps deposit ([#19952](https://github.com/MetaMask/metamask-mobile/pull/19952)) +- fix: onboarding metametric with social login cp-7.56.0 ([#20027](https://github.com/MetaMask/metamask-mobile/pull/20027)) +- fix: Correct one locale entry for rwds ([#20110](https://github.com/MetaMask/metamask-mobile/pull/20110)) +- fix: activity decimal places ([#20108](https://github.com/MetaMask/metamask-mobile/pull/20108)) +- fix: swap bottom sheet triggers old swap UI ([#20106](https://github.com/MetaMask/metamask-mobile/pull/20106)) +- fix: rewards stack navigation ([#20105](https://github.com/MetaMask/metamask-mobile/pull/20105)) +- fix: UI fixes to onboarding flow ([#20066](https://github.com/MetaMask/metamask-mobile/pull/20066)) +- fix: removed all remaining centra-no1 references cp-7.56.0 ([#19855](https://github.com/MetaMask/metamask-mobile/pull/19855)) +- fix: fixes multiple UI/UX Rewards elements ([#20055](https://github.com/MetaMask/metamask-mobile/pull/20055)) +- fix: disabled solana filter ([#20053](https://github.com/MetaMask/metamask-mobile/pull/20053)) +- fix: cp-7.56.0 readd steps for workflow dispatch ([#20051](https://github.com/MetaMask/metamask-mobile/pull/20051)) +- fix: cp-7.56.0 make performance e2e account for [skip-ci] ([#19953](https://github.com/MetaMask/metamask-mobile/pull/19953)) +- fix: changing rewards default backend host ([#19931](https://github.com/MetaMask/metamask-mobile/pull/19931)) +- fix: remove old and unused UserStorageController state properties ([#20026](https://github.com/MetaMask/metamask-mobile/pull/20026)) +- fix: cp-7.56.0 hide networks with no tokens in metamask pay ([#19908](https://github.com/MetaMask/metamask-mobile/pull/19908)) +- fix: non blocking Account sync & discovery operations when importing a new SRP ([#19985](https://github.com/MetaMask/metamask-mobile/pull/19985)) +- fix: isolate ActiveBoosts horizontal swipes from TabsList ([#19997](https://github.com/MetaMask/metamask-mobile/pull/19997)) +- fix: cp-7.56.0 TAT-1761 no toast displayed for deposit transaction failure ([#20008](https://github.com/MetaMask/metamask-mobile/pull/20008)) +- fix: cp-7.56.0 TAT-1703 Perps pre-release toast fixes ([#19934](https://github.com/MetaMask/metamask-mobile/pull/19934)) +- fix: cp-7.55.0 Update hardcoded staking duration ([#19992](https://github.com/MetaMask/metamask-mobile/pull/19992)) +- fix: Account group details Mask icon to match the account list ([#19988](https://github.com/MetaMask/metamask-mobile/pull/19988)) +- fix: cp-7.56.0 tpsl internationalization keyboard ([#19764](https://github.com/MetaMask/metamask-mobile/pull/19764)) +- fix: navigate to appropriate token modal in edge cases ([#19942](https://github.com/MetaMask/metamask-mobile/pull/19942)) +- fix: show default selected account first in dapp connection ([#19731](https://github.com/MetaMask/metamask-mobile/pull/19731)) +- fix: should not switch network after swap transaction ([#19410](https://github.com/MetaMask/metamask-mobile/pull/19410)) +- fix: move multichain accounts discovery to when onboarding is complete ([#19920](https://github.com/MetaMask/metamask-mobile/pull/19920)) +- fix: cp-7.56.0 handle small fiat values in metamask pay ([#19906](https://github.com/MetaMask/metamask-mobile/pull/19906)) +- fix: replace Pressable with ButtonBase to resolve Android touch issue cp-7.55.0 ([#19948](https://github.com/MetaMask/metamask-mobile/pull/19948)) +- fix: show checkbox with multiselect ([#19665](https://github.com/MetaMask/metamask-mobile/pull/19665)) +- fix: Initial scroll to selected account for MultichainAccountSelectorList ([#19880](https://github.com/MetaMask/metamask-mobile/pull/19880)) +- fix: prevents showing multichain accounts new feature modal on fresh install ([#19933](https://github.com/MetaMask/metamask-mobile/pull/19933)) +- fix: add ellipsis to long account names in AccountGroupDetails ([#19915](https://github.com/MetaMask/metamask-mobile/pull/19915)) +- fix: Cannot read property 'requiredScopes' of undefined cp-7.56.0 ([#19837](https://github.com/MetaMask/metamask-mobile/pull/19837)) +- fix: cp-7.56.0 Persisting toasts ([#19784](https://github.com/MetaMask/metamask-mobile/pull/19784)) +- fix: BIP44 asset overview balance issues ([#19912](https://github.com/MetaMask/metamask-mobile/pull/19912)) +- fix: change how icon scam warning is detected ([#19820](https://github.com/MetaMask/metamask-mobile/pull/19820)) +- fix: cp-7.56.0 notification item/modal style fixes ([#19863](https://github.com/MetaMask/metamask-mobile/pull/19863)) +- fix: Segment analytics events not being sent to servers ([#19856](https://github.com/MetaMask/metamask-mobile/pull/19856)) +- fix: `usePerpsLiveAccount` stream to update balance via websocket ([#19883](https://github.com/MetaMask/metamask-mobile/pull/19883)) +- fix: cp-7.56.0 add fiat formatting utility settings for liquidation price ([#19861](https://github.com/MetaMask/metamask-mobile/pull/19861)) +- fix: cp-7.56.0 if no position tpsl but >1 general tpsl show count ([#19783](https://github.com/MetaMask/metamask-mobile/pull/19783)) +- fix: cp-7.56.0 fix network enablement ([#19734](https://github.com/MetaMask/metamask-mobile/pull/19734)) +- fix: remove top edge for new SafeAreaView ([#19798](https://github.com/MetaMask/metamask-mobile/pull/19798)) +- fix: Scroll to the selected account index automatically in MultichainAccountSelectorList ([#19766](https://github.com/MetaMask/metamask-mobile/pull/19766)) +- fix: cp-7.56.0 fix selector for performance test ([#19778](https://github.com/MetaMask/metamask-mobile/pull/19778)) +- fix: cp-7.56.0 fix network list crashing due to bad evm logic ([#19759](https://github.com/MetaMask/metamask-mobile/pull/19759)) +- fix: keep error stack trace with modified lockdown option ([#19736](https://github.com/MetaMask/metamask-mobile/pull/19736)) +- fix: Replace hostname with origin in SDK connection JSON RPC pipeline ([#19542](https://github.com/MetaMask/metamask-mobile/pull/19542)) + +## [7.57.2] + +### Added + +- feat: Implement extra validations and alert when sending burn address in EVM transfer transactions ([#22018](https://github.com/MetaMask/metamask-mobile/pull/22018)) +- feat: Accurate opt out translations for rewards cp-7.57.2 ([#22021](https://github.com/MetaMask/metamask-mobile/pull/22021)) + +### Fixed + +- fix: cp-7.58.0 formatTimeRemaining to correctly display time remaining ([#21868](https://github.com/MetaMask/metamask-mobile/pull/21868)) +- fix: remove currency rates multichain ([#22022](https://github.com/MetaMask/metamask-mobile/pull/22022)) + ## [7.57.1] ### Fixed @@ -410,35 +1158,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [7.56.5] ### Fixed -* fix: use SharedDeeplinkManager to parse instead of Linking API ([#20960](https://github.com/MetaMask/metamask-mobile/pull/20960)) +- fix: use SharedDeeplinkManager to parse instead of Linking API ([#20960](https://github.com/MetaMask/metamask-mobile/pull/20960)) ## [7.56.4] ### Fixed -* fix: address feature flag config issue +- fix: address feature flag config issue ## [7.56.3] ### Fixed -* fix: remove unintended metrics from transaction finalised event ([#20733](https://github.com/MetaMask/metamask-mobile/pull/20733)) -* fix: force rendering on token list when order changes ([#20771](https://github.com/MetaMask/metamask-mobile/pull/20771)) -* fix: add contentful max version number segmentation ([#20769](https://github.com/MetaMask/metamask-mobile/pull/20769)) +- fix: remove unintended metrics from transaction finalised event ([#20733](https://github.com/MetaMask/metamask-mobile/pull/20733)) +- fix: force rendering on token list when order changes ([#20771](https://github.com/MetaMask/metamask-mobile/pull/20771)) +- fix: add contentful max version number segmentation ([#20769](https://github.com/MetaMask/metamask-mobile/pull/20769)) ## [7.56.2] ### Fixed -* fix: address feature flag config issue +- fix: address feature flag config issue ## [7.56.1] ### Fixed -* fix: in recipient validations for internal accounts ([#20694](https://github.com/MetaMask/metamask-mobile/pull/20694)) -* feat: iOS Rehydration Flow Update to release/7.56.1 ([#20681](https://github.com/MetaMask/metamask-mobile/pull/20681)) -* feat: social login success screen added for social login users and ios platform. ([#20679](https://github.com/MetaMask/metamask-mobile/pull/20679)) -* fix: Returned Scrollview to Perps and Defi tab cp-7.56.1 ([#20650](https://github.com/MetaMask/metamask-mobile/pull/20650)) -* fix: missing transactions in activity after perps deposit (\#20507) ([09ef7e5](https://github.com/MetaMask/metamask-mobile/commit/09ef7e5f5111d0d3592b5e6d60499f31dc22f013)) -* fix: cp-7.56.1 Temp Revert page-level scroll for Wallet (#20579) ([#20616](https://github.com/MetaMask/metamask-mobile/pull/20616)) -* fix: Temp Revert page-level scroll for Wallet (\#20579) ([9022244](https://github.com/MetaMask/metamask-mobile/commit/902224410fbdf37250b990c75986eb7a948fb5ec)) +- fix: in recipient validations for internal accounts ([#20694](https://github.com/MetaMask/metamask-mobile/pull/20694)) +- feat: iOS Rehydration Flow Update to release/7.56.1 ([#20681](https://github.com/MetaMask/metamask-mobile/pull/20681)) +- feat: social login success screen added for social login users and ios platform. ([#20679](https://github.com/MetaMask/metamask-mobile/pull/20679)) +- fix: Returned Scrollview to Perps and Defi tab cp-7.56.1 ([#20650](https://github.com/MetaMask/metamask-mobile/pull/20650)) +- fix: missing transactions in activity after perps deposit (\#20507) ([09ef7e5](https://github.com/MetaMask/metamask-mobile/commit/09ef7e5f5111d0d3592b5e6d60499f31dc22f013)) +- fix: cp-7.56.1 Temp Revert page-level scroll for Wallet (#20579) ([#20616](https://github.com/MetaMask/metamask-mobile/pull/20616)) +- fix: Temp Revert page-level scroll for Wallet (\#20579) ([9022244](https://github.com/MetaMask/metamask-mobile/commit/902224410fbdf37250b990c75986eb7a948fb5ec)) ## [7.56.0] @@ -473,11 +1221,29 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat(pr template): make changelog entry mandatory ([#18638](https://github.com/MetaMask/metamask-mobile/pull/18638)) - feat(deposit): add mUSD token to deposit via feature flag ([#18981](https://github.com/MetaMask/metamask-mobile/pull/18981)) - feat(deposit): updates home page CTA to send users to deposit page ([#18852](https://github.com/MetaMask/metamask-mobile/pull/18852)) +- feat(perps): replace close position bottom sheet with full-screen view ([#18815](https://github.com/MetaMask/metamask-mobile/pull/18815)) +- feat(perps): Add data lake API integration for order tracking ([#18817](https://github.com/MetaMask/metamask-mobile/pull/18817)) +- feat(INFRA-2864): add rca needed label removal workflow ([#18829](https://github.com/MetaMask/metamask-mobile/pull/18829)) +- feat(perps): update Perps withdrawal screen and remove Hyperliquid network ([#18763](https://github.com/MetaMask/metamask-mobile/pull/18763)) +- feat(card): add basic cache strategy with Redux ([#18587](https://github.com/MetaMask/metamask-mobile/pull/18587)) +- feat(multichain-account): update wallet details to state 2 and add hideMenu prop to AccountCell and update tests ([#18613](https://github.com/MetaMask/metamask-mobile/pull/18613)) +- feat(perps): add deeplink support for perps ([#18568](https://github.com/MetaMask/metamask-mobile/pull/18568)) +- feat(card): implement skeleton loading states ([#18541](https://github.com/MetaMask/metamask-mobile/pull/18541)) +- feat(assets): add account group balance selectors and components ([#18315](https://github.com/MetaMask/metamask-mobile/pull/18315)) +- feat(multichain): add MultichainAddWalletActions component and related types, styles, and tests ([#18462](https://github.com/MetaMask/metamask-mobile/pull/18462)) +- feat(multichain-accounts): Add AccountGroupDetails component with styles and subcomponents ([#18569](https://github.com/MetaMask/metamask-mobile/pull/18569)) +- feat(base branch): make it possible to define name of release PR base branch ([#18495](https://github.com/MetaMask/metamask-mobile/pull/18495)) +- feat(INFRA-2845): restrict release pr merges ([#18349](https://github.com/MetaMask/metamask-mobile/pull/18349)) +- feat(perps): migrate to react-native-safearea-context for android 35 ([#18547](https://github.com/MetaMask/metamask-mobile/pull/18547)) +- feat(perps): improve hyperliquid fee estimation based on trading and staking volume ([#18544](https://github.com/MetaMask/metamask-mobile/pull/18544)) +- feat(card): rename add funds bottomsheet options ([#18366](https://github.com/MetaMask/metamask-mobile/pull/18366)) +- feat(perps): implement stream architecture for optimized rendering performance ([#18383](https://github.com/MetaMask/metamask-mobile/pull/18383)) - feat(SDKConnectV2): UI integration ([#18760](https://github.com/MetaMask/metamask-mobile/pull/18760)) - feat(SDKConnectV2): Headless Connection Handling ([#18752](https://github.com/MetaMask/metamask-mobile/pull/18752)) - feat(perps): add missing icon in perps funding history ([#19371](https://github.com/MetaMask/metamask-mobile/pull/19371)) - feat(perps): optimize Intl formatting performance to reduce tab switc… ([#19438](https://github.com/MetaMask/metamask-mobile/pull/19438)) - Add rewards referral view & rewards home view ([#19081](https://github.com/MetaMask/metamask-mobile/pull/19081)) +- add(SDKConnectV2) - Scaffolding ([#18305](https://github.com/MetaMask/metamask-mobile/pull/18305)) - Feat/change-password-error-prompt ([#19523](https://github.com/MetaMask/metamask-mobile/pull/19523)) - feat: marketing opt in API ([#19653](https://github.com/MetaMask/metamask-mobile/pull/19653)) - feat: rewards with multi account subscriptions ([#19739](https://github.com/MetaMask/metamask-mobile/pull/19739)) @@ -559,7 +1325,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: BIP-44 account support for Earn ([#18779](https://github.com/MetaMask/metamask-mobile/pull/18779)) - feat: MultichainAccountConnectMultiselector ([#18800](https://github.com/MetaMask/metamask-mobile/pull/18800)) - feat: Replace `hostname` with `origin` for permissions and per dapp selected network state ([#17523](https://github.com/MetaMask/metamask-mobile/pull/17523)) +- feat: useAccountGroupsForPermissions hook ([#18570](https://github.com/MetaMask/metamask-mobile/pull/18570)) +- feat: network manager redesign ([#18701](https://github.com/MetaMask/metamask-mobile/pull/18701)) +- feat: Implement `sendRedesign` feature flag ([#18872](https://github.com/MetaMask/metamask-mobile/pull/18872)) +- feat: New asset selectors in `asset` page in send flow ([#18773](https://github.com/MetaMask/metamask-mobile/pull/18773)) +- feat: MultichainPermissionSummary ([#18727](https://github.com/MetaMask/metamask-mobile/pull/18727)) +- feat: add perps balance to total wallet balance, add pnl to perps tab ([#18545](https://github.com/MetaMask/metamask-mobile/pull/18545)) +- feat: bip44 assets selector ([#18733](https://github.com/MetaMask/metamask-mobile/pull/18733)) +- feat: deprecated hardcoded carousel banners ([#18754](https://github.com/MetaMask/metamask-mobile/pull/18754)) +- feat: support selected currency in perps deposit ([#18818](https://github.com/MetaMask/metamask-mobile/pull/18818)) +- feat: update layout of perps deposit confirmation ([#18385](https://github.com/MetaMask/metamask-mobile/pull/18385)) +- feat: multichain accounts connected list ([#18721](https://github.com/MetaMask/metamask-mobile/pull/18721)) +- feat: Implement `balance` for NFTs in BIP-44 send ([#18711](https://github.com/MetaMask/metamask-mobile/pull/18711)) +- feat: Swaps UnifiedSwapBridgeEventName.AssetDetailTooltipClicked ([#18645](https://github.com/MetaMask/metamask-mobile/pull/18645)) +- feat: add navigation to address list view ([#18698](https://github.com/MetaMask/metamask-mobile/pull/18698)) +- feat: rewards-controller ([#18582](https://github.com/MetaMask/metamask-mobile/pull/18582)) +- feat: implement navigation to address list in MultichainAccountActions ([#18716](https://github.com/MetaMask/metamask-mobile/pull/18716)) +- feat: reveal private key list (BIP-44) ([#18441](https://github.com/MetaMask/metamask-mobile/pull/18441)) - feat: add `gasFeeTokenModal` and `gasFeeTokenListItem` components ([#18102](https://github.com/MetaMask/metamask-mobile/pull/18102)) +- feat: Add NFT list in asset page in send flow ([#18602](https://github.com/MetaMask/metamask-mobile/pull/18602)) +- feat: Add `SnapUIDropdown` and `SnapUIRadioGroup` ([#18468](https://github.com/MetaMask/metamask-mobile/pull/18468)) +- feat: stable delete screen ([#18457](https://github.com/MetaMask/metamask-mobile/pull/18457)) +- feat: Submit solana transaction to snap for review and confirmation ([#18560](https://github.com/MetaMask/metamask-mobile/pull/18560)) +- feat: add address list (BIP-44) ([#18325](https://github.com/MetaMask/metamask-mobile/pull/18325)) +- feat: add useAccountGroupName hook and integrate into Wallet view ([#18494](https://github.com/MetaMask/metamask-mobile/pull/18494)) +- feat: Integrate lightweight-charts into Perps ([#18418](https://github.com/MetaMask/metamask-mobile/pull/18418)) +- feat: update pay with row design ([#18332](https://github.com/MetaMask/metamask-mobile/pull/18332)) +- feat: display total network fee in perps deposit ([#18378](https://github.com/MetaMask/metamask-mobile/pull/18378)) +- feat: BIP-44 account support for Perps with seamless Solana account handling ([#18546](https://github.com/MetaMask/metamask-mobile/pull/18546)) +- feat: add multichain accounts dapp connection selectors ([#18343](https://github.com/MetaMask/metamask-mobile/pull/18343)) +- feat: nonevm deeplink handler ([#18497](https://github.com/MetaMask/metamask-mobile/pull/18497)) +- feat: Filter from account in the recipient page ([#18489](https://github.com/MetaMask/metamask-mobile/pull/18489)) +- feat: live prices with market data screen ([#18455](https://github.com/MetaMask/metamask-mobile/pull/18455)) +- feat: Add `useSnapNameResolution` hook ([#18453](https://github.com/MetaMask/metamask-mobile/pull/18453)) +- feat: implement react native release profiler ([#18109](https://github.com/MetaMask/metamask-mobile/pull/18109)) +- feat: removal all wizard related logic ([#17824](https://github.com/MetaMask/metamask-mobile/pull/17824)) +- feat: Implement multichain account actions and navigation ([#18308](https://github.com/MetaMask/metamask-mobile/pull/18308)) +- feat: Changes in amount page for NFT send ([#18429](https://github.com/MetaMask/metamask-mobile/pull/18429)) +- feat: optimize Perps account/network monitoring with lifecycle manage… ([#18451](https://github.com/MetaMask/metamask-mobile/pull/18451)) +- feat: Add real-time account data streaming for Perps via WebSocket ([#18434](https://github.com/MetaMask/metamask-mobile/pull/18434)) +- feat: broke out perps balance modal into its own view instead of rend… ([#18439](https://github.com/MetaMask/metamask-mobile/pull/18439)) +- feat: add real-time WebSocket streaming to Perps with performance optimizations ([#18430](https://github.com/MetaMask/metamask-mobile/pull/18430)) +- feat: as a user i can subscribe to push notifications ([#18165](https://github.com/MetaMask/metamask-mobile/pull/18165)) +- feat: TAT-1306: add image animation to tutorial ([#18397](https://github.com/MetaMask/metamask-mobile/pull/18397)) - chore: Remove arrow next to available balance icon ([#19723](https://github.com/MetaMask/metamask-mobile/pull/19723)) - chore: Updated the homepage carousel with the new stacked cards ([#19607](https://github.com/MetaMask/metamask-mobile/pull/19607)) - chore: Updated Buy Button's label and icon ([#19629](https://github.com/MetaMask/metamask-mobile/pull/19629)) @@ -602,9 +1410,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ci: add job for nightly performance e2e runs ([#18895](https://github.com/MetaMask/metamask-mobile/pull/18895)) - chore: Updated tokens order in token list items ([#18289](https://github.com/MetaMask/metamask-mobile/pull/18289)) - New Crowdin translations by Github Action ([#17879](https://github.com/MetaMask/metamask-mobile/pull/17879)) +- chore: Added ShareAddressQR code to AddressList and aligned QR screens ([#18836](https://github.com/MetaMask/metamask-mobile/pull/18836)) +- test: add remote feature flags mock in server setup ([#18876](https://github.com/MetaMask/metamask-mobile/pull/18876)) +- chore: cp-7.54.0 buy view switches to param chainId ([#18879](https://github.com/MetaMask/metamask-mobile/pull/18879)) +- chore: Improve metrics for failed network requests ([#18059](https://github.com/MetaMask/metamask-mobile/pull/18059)) +- chore: cp-7.54.0 - deeplink- use the native asset for the passed chain ([#18765](https://github.com/MetaMask/metamask-mobile/pull/18765)) +- test: add regression workflow ([#18780](https://github.com/MetaMask/metamask-mobile/pull/18780)) +- INFRA-2867: Added chore prefix to PR, await for create release, remove commits.csv from changelog pr, add workflow artifact ([#18840](https://github.com/MetaMask/metamask-mobile/pull/18840)) +- chore: bitcoin v1 ([#18789](https://github.com/MetaMask/metamask-mobile/pull/18789)) +- INFRA-2867: Update inputs for workflow, update input parameter ([#18786](https://github.com/MetaMask/metamask-mobile/pull/18786)) +- chore(card): add metamask card website on dapps-url-list.js file ([#18744](https://github.com/MetaMask/metamask-mobile/pull/18744)) +- chore: Bump webview to 14.5.0 ([#18736](https://github.com/MetaMask/metamask-mobile/pull/18736)) +- chore: add appwright packages ([#18579](https://github.com/MetaMask/metamask-mobile/pull/18579)) +- test: pass testSpecificMocks as function ([#18551](https://github.com/MetaMask/metamask-mobile/pull/18551)) +- chore: add testID prop to base component ([#18637](https://github.com/MetaMask/metamask-mobile/pull/18637)) +- architecture updates + sharding ([#18604](https://github.com/MetaMask/metamask-mobile/pull/18604)) +- test: add appwright reporter ([#18630](https://github.com/MetaMask/metamask-mobile/pull/18630)) +- test: add ci workflows for running performance ([#18584](https://github.com/MetaMask/metamask-mobile/pull/18584)) - MPW 101 ([#19720](https://github.com/MetaMask/metamask-mobile/pull/19720)) - chore: bump communication layer package of sdk ([#19753](https://github.com/MetaMask/metamask-mobile/pull/19753)) - test: enable profiling skip onboarding for performance ([#19447](https://github.com/MetaMask/metamask-mobile/pull/19447)) +- ci: split smoke E2E tests between android and iOS platforms ([#18567](https://github.com/MetaMask/metamask-mobile/pull/18567)) +- test: Add E2E for getFile example Snap ([#18081](https://github.com/MetaMask/metamask-mobile/pull/18081)) +- test: update default mocks logic and logic to handle live requests in tests ([#18437](https://github.com/MetaMask/metamask-mobile/pull/18437)) +- chore: central rca form/sheet ([#18482](https://github.com/MetaMask/metamask-mobile/pull/18482)) +- ci: better manage automatic labeling of Sentry issues ([#18254](https://github.com/MetaMask/metamask-mobile/pull/18254)) +- chore: update cursor rule PR creation guidelines with auto team label detection ([#18288](https://github.com/MetaMask/metamask-mobile/pull/18288)) +- chore: deprecate reusable modal and suggest bottom sheet ([#18111](https://github.com/MetaMask/metamask-mobile/pull/18111)) +- test: disables bitrise android e2e and adds GHA e2e to CI ([#18316](https://github.com/MetaMask/metamask-mobile/pull/18316)) +- ci: add the build saving/caching to the new templates ([#18438](https://github.com/MetaMask/metamask-mobile/pull/18438)) +- test: add default mocks ([#18384](https://github.com/MetaMask/metamask-mobile/pull/18384)) ### Fixed @@ -627,7 +1462,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix(card): cache prevent loading different address ([#18997](https://github.com/MetaMask/metamask-mobile/pull/18997)) - fix(deposit): add reverse lookup for musd ([#19047](https://github.com/MetaMask/metamask-mobile/pull/19047)) - fix(perps): leverage slider liquidation price TAT-1367 ([#19026](https://github.com/MetaMask/metamask-mobile/pull/19026)) +- fix(card): failing E2E tests ([#18833](https://github.com/MetaMask/metamask-mobile/pull/18833)) +- fix(next semver version): no longer rely on tags to determine next semver version ([#18755](https://github.com/MetaMask/metamask-mobile/pull/18755)) +- fix(perps): resolve multiple order flow issues and UX improvements ([#18746](https://github.com/MetaMask/metamask-mobile/pull/18746)) +- fix(perps): resolve Perps token logo rendering issues ([#18732](https://github.com/MetaMask/metamask-mobile/pull/18732)) +- fix(perps): perps WebSocket lifecycle - tab visibility & app state management ([#18703](https://github.com/MetaMask/metamask-mobile/pull/18703)) +- fix(ramp): enable fund menu for bitcoin ([#18642](https://github.com/MetaMask/metamask-mobile/pull/18642)) +- fix(ramp): successful order redirection handler ([#18647](https://github.com/MetaMask/metamask-mobile/pull/18647)) +- fix(next semver version): revert calculation method to no longer rely on package.json ([#18500](https://github.com/MetaMask/metamask-mobile/pull/18500)) +- fix(perps): initial qa feedbacks ([#18490](https://github.com/MetaMask/metamask-mobile/pull/18490)) - fix(INFRA-2932): retry yarn packages installation ([#19491](https://github.com/MetaMask/metamask-mobile/pull/19491)) +- fix(INFRA-2864): add permissions to rca needed label removal workflow ([#18877](https://github.com/MetaMask/metamask-mobile/pull/18877)) +- fix(reveal-srp): adjust styles for better layout and icon positioning on password input screen ([#18816](https://github.com/MetaMask/metamask-mobile/pull/18816)) +- fix(action): be more explicit about the fact that parameter can be a tag OR a commit hash ([#18255](https://github.com/MetaMask/metamask-mobile/pull/18255)) +- fix swap button ([#18803](https://github.com/MetaMask/metamask-mobile/pull/18803)) +- Fix: Internet connection not available check added during social onboarding. ([#18706](https://github.com/MetaMask/metamask-mobile/pull/18706)) - fix: updated border for network selectors to be muted ([#19756](https://github.com/MetaMask/metamask-mobile/pull/19756)) - fix: tp sl solution in perps proposal B ([#19726](https://github.com/MetaMask/metamask-mobile/pull/19726)) - fix: cp-7.55.0 Fix previous confirmation shown in send flow ([#19737](https://github.com/MetaMask/metamask-mobile/pull/19737)) @@ -745,7 +1594,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: shorten account name for smaller screen ci flake ([#18934](https://github.com/MetaMask/metamask-mobile/pull/18934)) - fix: bigger input focus area for inputs ([#18784](https://github.com/MetaMask/metamask-mobile/pull/18784)) - fix: infinity spinner for lending deposit cp-7.54.0 ([#18887](https://github.com/MetaMask/metamask-mobile/pull/18887)) +- fix: double press interaction on android cp-7.54.0 ([#18729](https://github.com/MetaMask/metamask-mobile/pull/18729)) +- fix: update assets controllers with fix ([#18884](https://github.com/MetaMask/metamask-mobile/pull/18884)) +- fix: cp-7.54.0 Launchdarkly flag added carousel-banners ([#18855](https://github.com/MetaMask/metamask-mobile/pull/18855)) +- fix: stable sync secret ([#18867](https://github.com/MetaMask/metamask-mobile/pull/18867)) +- fix: define `transactionType` before adding transaction ([#18234](https://github.com/MetaMask/metamask-mobile/pull/18234)) +- fix: stop account tracker polling ([#18603](https://github.com/MetaMask/metamask-mobile/pull/18603)) +- fix: smart transactions mobile feature flags #18781 ([#18820](https://github.com/MetaMask/metamask-mobile/pull/18820)) +- fix: checkbox reset on No Thanks click ([#18748](https://github.com/MetaMask/metamask-mobile/pull/18748)) +- fix: amount validation on send page ([#18870](https://github.com/MetaMask/metamask-mobile/pull/18870)) +- fix: Fix group name for Name components ([#18865](https://github.com/MetaMask/metamask-mobile/pull/18865)) +- fix: NFT balance related fixes on amount page ([#18812](https://github.com/MetaMask/metamask-mobile/pull/18812)) +- fix: remove invalid header for accountbackup page ([#18747](https://github.com/MetaMask/metamask-mobile/pull/18747)) +- fix: Bundle lightweight-charts package locally ([#18847](https://github.com/MetaMask/metamask-mobile/pull/18847)) +- fix: Reintroduced scan button to Wallet Homepage cp-7.54.0 ([#18832](https://github.com/MetaMask/metamask-mobile/pull/18832)) +- fix: WC universal links ([#18741](https://github.com/MetaMask/metamask-mobile/pull/18741)) +- fix: Fix network switcher not appearing on legacy Swaps ([#18643](https://github.com/MetaMask/metamask-mobile/pull/18643)) +- fix: deescalate google error cp-7.54.0 ([#18745](https://github.com/MetaMask/metamask-mobile/pull/18745)) +- fix: cp-7.54.0 solana ws lifecycle ([#18759](https://github.com/MetaMask/metamask-mobile/pull/18759)) +- fix: support fallback to sequential batch ([#17449](https://github.com/MetaMask/metamask-mobile/pull/17449)) +- fix: Updated MainActionItem and bottom nav's TabItem to reduce padding for small screens ([#18734](https://github.com/MetaMask/metamask-mobile/pull/18734)) +- fix: cp-7.54 close solana websockets on inactive ([#18718](https://github.com/MetaMask/metamask-mobile/pull/18718)) +- fix: text style update ([#18722](https://github.com/MetaMask/metamask-mobile/pull/18722)) +- fix: Update the copy writing of the SRP login button ([#18713](https://github.com/MetaMask/metamask-mobile/pull/18713)) +- fix: disable linktext btn Use a different login method ([#18607](https://github.com/MetaMask/metamask-mobile/pull/18607)) +- fix: forced light theme colors for buttons cp-7.54.0 ([#17756](https://github.com/MetaMask/metamask-mobile/pull/17756)) +- fix: account_status img update ([#18609](https://github.com/MetaMask/metamask-mobile/pull/18609)) +- fix: add missing properties in transaction event ([#18169](https://github.com/MetaMask/metamask-mobile/pull/18169)) +- fix: create password loading ([#18606](https://github.com/MetaMask/metamask-mobile/pull/18606)) +- fix: reset wallet button disabled while loading ([#18608](https://github.com/MetaMask/metamask-mobile/pull/18608)) +- fix: SRP image cp-7.54.0 ([#18376](https://github.com/MetaMask/metamask-mobile/pull/18376)) +- fix: fix transaction history for new network manager ([#18436](https://github.com/MetaMask/metamask-mobile/pull/18436)) +- fix: flickering input srp ([#18562](https://github.com/MetaMask/metamask-mobile/pull/18562)) +- fix: cp-7.54.0 update liveness logic ([#18364](https://github.com/MetaMask/metamask-mobile/pull/18364)) +- fix: google cancel login in android cp-7.53.0 ([#18596](https://github.com/MetaMask/metamask-mobile/pull/18596)) +- fix: enter keydown ([#18564](https://github.com/MetaMask/metamask-mobile/pull/18564)) - fix: Allow most WebView options on all pages (including homepage) ([#18477](https://github.com/MetaMask/metamask-mobile/pull/18477)) +- fix: network manager scroll bug for android ([#18535](https://github.com/MetaMask/metamask-mobile/pull/18535)) +- fix: cp-7.54.0 use navigation.dispatch to properly navigate to asset page ([#18461](https://github.com/MetaMask/metamask-mobile/pull/18461)) +- fix: Reveal Private Credentials cp-7.54.0 ([#18484](https://github.com/MetaMask/metamask-mobile/pull/18484)) +- fix: font-size for input value on amount page ([#18549](https://github.com/MetaMask/metamask-mobile/pull/18549)) +- fix: Fix send flow hang on custom RPC by signaling blocked XHR ([#18304](https://github.com/MetaMask/metamask-mobile/pull/18304)) +- fix: cp-7.53.0 swaps weth fee ([#18538](https://github.com/MetaMask/metamask-mobile/pull/18538)) +- fix: user data being wiped after upgrading to new version from 7.51.4 ([#18398](https://github.com/MetaMask/metamask-mobile/pull/18398)) +- fix: cp-7.54.0 remove network/account filters from deposit order selector ([#18499](https://github.com/MetaMask/metamask-mobile/pull/18499)) +- fix: cp-7.54.0 quotes on Optimism crashing app ([#18486](https://github.com/MetaMask/metamask-mobile/pull/18486)) +- fix: Implement network selector in asset page for BIP-44 send ([#18466](https://github.com/MetaMask/metamask-mobile/pull/18466)) +- fix: fix aggregated balance gns ([#18471](https://github.com/MetaMask/metamask-mobile/pull/18471)) +- fix: BIP-44 send flow design updates ([#18379](https://github.com/MetaMask/metamask-mobile/pull/18379)) +- fix: Prevent clearing Snap permissions when clearing dapp approvals ([#18380](https://github.com/MetaMask/metamask-mobile/pull/18380)) +- fix: Update Perps order keypad buttons to match latest design ([#18447](https://github.com/MetaMask/metamask-mobile/pull/18447)) - chore: bump `account-tree-controller` + `accounts-controller` ([#19504](https://github.com/MetaMask/metamask-mobile/pull/19504)) - test: fix regression tests ([#19657](https://github.com/MetaMask/metamask-mobile/pull/19657)) - test: update failing e2e for per dapp selected network ([#19644](https://github.com/MetaMask/metamask-mobile/pull/19644)) @@ -814,11 +1712,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - test: fix ui for performance e2e ([#18908](https://github.com/MetaMask/metamask-mobile/pull/18908)) - test: fix swap-action-smoke-spec.ts e2e test ([#18898](https://github.com/MetaMask/metamask-mobile/pull/18898)) - chore: Bump main version to 7.56.0 ([#18901](https://github.com/MetaMask/metamask-mobile/pull/18901)) +- test: disables flaky swap test ([#18883](https://github.com/MetaMask/metamask-mobile/pull/18883)) +- INFRA-2867: Skip version bump PR creation if already exists, commit in main ([#18881](https://github.com/MetaMask/metamask-mobile/pull/18881)) +- test: fail new untracked/unmocked urls in e2e tests ([#18724](https://github.com/MetaMask/metamask-mobile/pull/18724)) +- test: add cursor rules for E2E testing ([#18087](https://github.com/MetaMask/metamask-mobile/pull/18087)) +- build: ignore unit test coverage files ([#18871](https://github.com/MetaMask/metamask-mobile/pull/18871)) +- test: adds missing build step ([#18846](https://github.com/MetaMask/metamask-mobile/pull/18846)) +- chore: display `AAVE` icon on earning workflow ([#18702](https://github.com/MetaMask/metamask-mobile/pull/18702)) +- chore: Update PerpsPositionCard to include Funding cost ([#18858](https://github.com/MetaMask/metamask-mobile/pull/18858)) +- chore(deps): bump `@metamask/signature-controller` to `^32.0.0` ([#18806](https://github.com/MetaMask/metamask-mobile/pull/18806)) - test: skip perps e2e ([#19654](https://github.com/MetaMask/metamask-mobile/pull/19654)) - test: update create account test and add fixture helper to suppress modal ([#19743](https://github.com/MetaMask/metamask-mobile/pull/19743)) +- chore: cleaned up AddressList style ([#18834](https://github.com/MetaMask/metamask-mobile/pull/18834)) +- test: Adds unit tests for mockHelpers ([#18809](https://github.com/MetaMask/metamask-mobile/pull/18809)) +- test: Fix mock request body matching for multiple POST requests to sa… ([#18813](https://github.com/MetaMask/metamask-mobile/pull/18813)) +- test: performance e2e suite ([#17773](https://github.com/MetaMask/metamask-mobile/pull/17773)) +- refactor: enable multiselect in MultichainAccountSelectorList ([#18719](https://github.com/MetaMask/metamask-mobile/pull/18719)) +- chore(deps): bump eip1193-permission, multichain-api, and notification-services controllers ([#18726](https://github.com/MetaMask/metamask-mobile/pull/18726)) +- chore: revert contextual chain id prs ([#18487](https://github.com/MetaMask/metamask-mobile/pull/18487)) +- test: fixes confirmation test detection ([#18730](https://github.com/MetaMask/metamask-mobile/pull/18730)) +- chore: Bump version number to 2296 ([#18739](https://github.com/MetaMask/metamask-mobile/pull/18739)) +- ci: fail tests so we can see flakiness on the pipelines ([#18708](https://github.com/MetaMask/metamask-mobile/pull/18708)) +- style: fix defi empty positions copy from being cut. ([#18470](https://github.com/MetaMask/metamask-mobile/pull/18470)) +- test: fixes android tests for reveal SRP ([#18621](https://github.com/MetaMask/metamask-mobile/pull/18621)) +- refactor: refactor `MultichainAddressRow` ([#18593](https://github.com/MetaMask/metamask-mobile/pull/18593)) +- test: disable flaky test ([#18610](https://github.com/MetaMask/metamask-mobile/pull/18610)) +- chore: remove OVERRIDE_REMOTE_FEATURE_FLAGS condition ([#18594](https://github.com/MetaMask/metamask-mobile/pull/18594)) +- test: adds a mock to the favicon to avoid test starvation ([#18552](https://github.com/MetaMask/metamask-mobile/pull/18552)) +- refactor: import getCaip25PermissionFromLegacyPermissions and requestPermittedChainsPermissionIncremental from chain agnostic permission package ([#17908](https://github.com/MetaMask/metamask-mobile/pull/17908)) +- test: fixes artifact upload on failures ([#18479](https://github.com/MetaMask/metamask-mobile/pull/18479)) +- test: fix confirmations default erc20 e2e test ([#18518](https://github.com/MetaMask/metamask-mobile/pull/18518)) +- refactor: cleanup unused Perps deposit code and improve deposit status feedback ([#18463](https://github.com/MetaMask/metamask-mobile/pull/18463)) +- refactor: refactor `MultichainAddressRow` ([#18442](https://github.com/MetaMask/metamask-mobile/pull/18442)) +- test: quarantine flaky browser tests ([#18432](https://github.com/MetaMask/metamask-mobile/pull/18432)) - test: move onboarding tests to somke wallet platform ([#19755](https://github.com/MetaMask/metamask-mobile/pull/19755)) - test: Fix Per dapp selected network e2e to include GNS disabled scenario ([#19750](https://github.com/MetaMask/metamask-mobile/pull/19750)) - test: Fixed test `e2e/specs/settings/addressbook-tests.spec.ts` ([#19622](https://github.com/MetaMask/metamask-mobile/pull/19622)) +- chore: Bump main version to 7.55.0 ([#18401](https://github.com/MetaMask/metamask-mobile/pull/18401)) +- chore: bump assets controllers to v73.3.0 ([#18483](https://github.com/MetaMask/metamask-mobile/pull/18483)) +- chore: bump shajs and cipher base ([#18578](https://github.com/MetaMask/metamask-mobile/pull/18578)) +- chore: bitcoin v0.19.3 ([#18493](https://github.com/MetaMask/metamask-mobile/pull/18493)) ## [7.55.1] @@ -848,6 +1781,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat(perps): improve hyperliquid fee estimation based on trading and staking volume ([#18544](https://github.com/MetaMask/metamask-mobile/pull/18544)) - feat(card): rename add funds bottomsheet options ([#18366](https://github.com/MetaMask/metamask-mobile/pull/18366)) - feat(perps): implement stream architecture for optimized rendering performance ([#18383](https://github.com/MetaMask/metamask-mobile/pull/18383)) +- feat(deposit): add linea supported tokens for cardholders ([#18361](https://github.com/MetaMask/metamask-mobile/pull/18361)) - feat: useAccountGroupsForPermissions hook ([#18570](https://github.com/MetaMask/metamask-mobile/pull/18570)) - feat: network manager redesign ([#18701](https://github.com/MetaMask/metamask-mobile/pull/18701)) - feat: Implement `sendRedesign` feature flag ([#18872](https://github.com/MetaMask/metamask-mobile/pull/18872)) @@ -858,6 +1792,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: deprecated hardcoded carousel banners ([#18754](https://github.com/MetaMask/metamask-mobile/pull/18754)) - feat: support selected currency in perps deposit ([#18818](https://github.com/MetaMask/metamask-mobile/pull/18818)) - feat: update layout of perps deposit confirmation ([#18385](https://github.com/MetaMask/metamask-mobile/pull/18385)) +- feat: implement search functionality in MultichainAccountSelectorList ([#18242](https://github.com/MetaMask/metamask-mobile/pull/18242)) +- feat: fix arithmetic used for non-evm send on amount page ([#18296](https://github.com/MetaMask/metamask-mobile/pull/18296)) +- feat: improve perps deposit totals ([#18252](https://github.com/MetaMask/metamask-mobile/pull/18252)) +- feat: UX related improvements in send amount page ([#18293](https://github.com/MetaMask/metamask-mobile/pull/18293)) +- feat: Adding metrics for new send implementation ([#18237](https://github.com/MetaMask/metamask-mobile/pull/18237)) +- feat: When user clicks "View on block explorer" open Reborn browser instead of SimpleWebView ([#17912](https://github.com/MetaMask/metamask-mobile/pull/17912)) +- feat: Add more E2E tests for the Browser: ([#17460](https://github.com/MetaMask/metamask-mobile/pull/17460)) +- feat: get all internal accounts for a given scope (non user facing change) ([#18275](https://github.com/MetaMask/metamask-mobile/pull/18275)) +- feat: transition bridge controllers to new init pattern ([#17676](https://github.com/MetaMask/metamask-mobile/pull/17676)) +- feat: add MultichainAccountSelectorList ([#17904](https://github.com/MetaMask/metamask-mobile/pull/17904)) +- feat: Network Manager UI ([#16642](https://github.com/MetaMask/metamask-mobile/pull/16642)) +- feat: multichain account selectors ([#17766](https://github.com/MetaMask/metamask-mobile/pull/17766)) +- feat: Centralise send navigation bar ([#18192](https://github.com/MetaMask/metamask-mobile/pull/18192)) +- feat: new selectors and hooks for the network enablement controller ([#18151](https://github.com/MetaMask/metamask-mobile/pull/18151)) +- feat: as a user i can view the perp tutorial and first time user state ([#18113](https://github.com/MetaMask/metamask-mobile/pull/18113)) +- feat: automatically select transaction pay token ([#18106](https://github.com/MetaMask/metamask-mobile/pull/18106)) +- feat: add tracing for navigation ([#18168](https://github.com/MetaMask/metamask-mobile/pull/18168)) +- feat: component library updates for the Network Manager ([#18149](https://github.com/MetaMask/metamask-mobile/pull/18149)) +- feat: add `GasFeeTokenIcon` component ([#17614](https://github.com/MetaMask/metamask-mobile/pull/17614)) +- feat: network enablement controller ([#18052](https://github.com/MetaMask/metamask-mobile/pull/18052)) +- feat: Perps chart improvements (all pricing lines, x-axis time intervals, y-axis price info) ([#18043](https://github.com/MetaMask/metamask-mobile/pull/18043)) +- feat: Session Expiry Bottomsheet added for social login flow only ([#17689](https://github.com/MetaMask/metamask-mobile/pull/17689)) +- feat: perps deposit confirmation keyboard ([#18007](https://github.com/MetaMask/metamask-mobile/pull/18007)) +- feat: Implement `asset` page design ([#18076](https://github.com/MetaMask/metamask-mobile/pull/18076)) +- feat: Adding custom keyboard to amount page ([#18062](https://github.com/MetaMask/metamask-mobile/pull/18062)) +- feat: TAT-1148 implement educational bottom sheets ([#18009](https://github.com/MetaMask/metamask-mobile/pull/18009)) +- feat: Improvements in amount page formatting ([#17944](https://github.com/MetaMask/metamask-mobile/pull/17944)) +- feat: solana websockets ([#17600](https://github.com/MetaMask/metamask-mobile/pull/17600)) +- feat: add alerts to perps deposit confirmation ([#17892](https://github.com/MetaMask/metamask-mobile/pull/17892)) +- feat: Add support for fiat conversion for non-evm send ([#17906](https://github.com/MetaMask/metamask-mobile/pull/17906)) +- feat: MultichainPermissionSummary ([#18727](https://github.com/MetaMask/metamask-mobile/pull/18727)) +- feat: add perps balance to total wallet balance, add pnl to perps tab ([#18545](https://github.com/MetaMask/metamask-mobile/pull/18545)) +- feat: bip44 assets selector ([#18733](https://github.com/MetaMask/metamask-mobile/pull/18733)) +- feat: deprecated hardcoded carousel banners ([#18754](https://github.com/MetaMask/metamask-mobile/pull/18754)) +- feat: support selected currency in perps deposit ([#18818](https://github.com/MetaMask/metamask-mobile/pull/18818)) +- feat: update layout of perps deposit confirmation ([#18385](https://github.com/MetaMask/metamask-mobile/pull/18385)) - feat: multichain accounts connected list ([#18721](https://github.com/MetaMask/metamask-mobile/pull/18721)) - feat: Implement `balance` for NFTs in BIP-44 send ([#18711](https://github.com/MetaMask/metamask-mobile/pull/18711)) - feat: Swaps UnifiedSwapBridgeEventName.AssetDetailTooltipClicked ([#18645](https://github.com/MetaMask/metamask-mobile/pull/18645)) @@ -865,6 +1835,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: rewards-controller ([#18582](https://github.com/MetaMask/metamask-mobile/pull/18582)) - feat: implement navigation to address list in MultichainAccountActions ([#18716](https://github.com/MetaMask/metamask-mobile/pull/18716)) - feat: reveal private key list (BIP-44) ([#18441](https://github.com/MetaMask/metamask-mobile/pull/18441)) +- feat: add `gasFeeTokenModal` and `gasFeeTokenListItem` components ([#18102](https://github.com/MetaMask/metamask-mobile/pull/18102)) - feat: Add NFT list in asset page in send flow ([#18602](https://github.com/MetaMask/metamask-mobile/pull/18602)) - feat: Add `SnapUIDropdown` and `SnapUIRadioGroup` ([#18468](https://github.com/MetaMask/metamask-mobile/pull/18468)) - feat: stable delete screen ([#18457](https://github.com/MetaMask/metamask-mobile/pull/18457)) @@ -890,12 +1861,68 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: add real-time WebSocket streaming to Perps with performance optimizations ([#18430](https://github.com/MetaMask/metamask-mobile/pull/18430)) - feat: as a user i can subscribe to push notifications ([#18165](https://github.com/MetaMask/metamask-mobile/pull/18165)) - feat: TAT-1306: add image animation to tutorial ([#18397](https://github.com/MetaMask/metamask-mobile/pull/18397)) +- feat: add performance tracking and analytics for Perps ([#18067](https://github.com/MetaMask/metamask-mobile/pull/18067)) +- feat: get quotes directly in metamask pay ([#18352](https://github.com/MetaMask/metamask-mobile/pull/18352)) +- feat: Implement `recipient` in new send flow ([#18346](https://github.com/MetaMask/metamask-mobile/pull/18346)) +- feat: TAT-1298: Perps Screen Design Adjustments ([#18212](https://github.com/MetaMask/metamask-mobile/pull/18212)) +- feat: perps builder and referral fee collection ([#18276](https://github.com/MetaMask/metamask-mobile/pull/18276)) - feat: Add Linea and Base for Smart Transactions, bump smart-transactions-controller to v18.1.0 ([#18350](https://github.com/MetaMask/metamask-mobile/pull/18350)) +- feat: use perps deposit confirmation ([#18224](https://github.com/MetaMask/metamask-mobile/pull/18224)) +- feat: implement search functionality in MultichainAccountSelectorList ([#18242](https://github.com/MetaMask/metamask-mobile/pull/18242)) +- feat: fix arithmetic used for non-evm send on amount page ([#18296](https://github.com/MetaMask/metamask-mobile/pull/18296)) +- feat: improve perps deposit totals ([#18252](https://github.com/MetaMask/metamask-mobile/pull/18252)) +- feat: UX related improvements in send amount page ([#18293](https://github.com/MetaMask/metamask-mobile/pull/18293)) +- feat: Adding metrics for new send implementation ([#18237](https://github.com/MetaMask/metamask-mobile/pull/18237)) +- feat: When user clicks "View on block explorer" open Reborn browser instead of SimpleWebView ([#17912](https://github.com/MetaMask/metamask-mobile/pull/17912)) +- feat: Add more E2E tests for the Browser: ([#17460](https://github.com/MetaMask/metamask-mobile/pull/17460)) +- feat: get all internal accounts for a given scope (non user facing change) ([#18275](https://github.com/MetaMask/metamask-mobile/pull/18275)) - feat: transition bridge controllers to new init pattern ([#17676](https://github.com/MetaMask/metamask-mobile/pull/17676)) +- feat: add MultichainAccountSelectorList ([#17904](https://github.com/MetaMask/metamask-mobile/pull/17904)) +- feat: Network Manager UI ([#16642](https://github.com/MetaMask/metamask-mobile/pull/16642)) +- feat: multichain account selectors ([#17766](https://github.com/MetaMask/metamask-mobile/pull/17766)) +- feat: Centralise send navigation bar ([#18192](https://github.com/MetaMask/metamask-mobile/pull/18192)) +- feat: new selectors and hooks for the network enablement controller ([#18151](https://github.com/MetaMask/metamask-mobile/pull/18151)) +- feat: as a user i can view the perp tutorial and first time user state ([#18113](https://github.com/MetaMask/metamask-mobile/pull/18113)) +- feat: automatically select transaction pay token ([#18106](https://github.com/MetaMask/metamask-mobile/pull/18106)) +- feat: add tracing for navigation ([#18168](https://github.com/MetaMask/metamask-mobile/pull/18168)) +- feat: component library updates for the Network Manager ([#18149](https://github.com/MetaMask/metamask-mobile/pull/18149)) +- feat: add `GasFeeTokenIcon` component ([#17614](https://github.com/MetaMask/metamask-mobile/pull/17614)) +- feat: network enablement controller ([#18052](https://github.com/MetaMask/metamask-mobile/pull/18052)) - feat: Perps chart improvements (all pricing lines, x-axis time intervals, y-axis price info) ([#18043](https://github.com/MetaMask/metamask-mobile/pull/18043)) +- feat: Session Expiry Bottomsheet added for social login flow only ([#17689](https://github.com/MetaMask/metamask-mobile/pull/17689)) +- feat: perps deposit confirmation keyboard ([#18007](https://github.com/MetaMask/metamask-mobile/pull/18007)) +- feat: Implement `asset` page design ([#18076](https://github.com/MetaMask/metamask-mobile/pull/18076)) +- feat: Adding custom keyboard to amount page ([#18062](https://github.com/MetaMask/metamask-mobile/pull/18062)) +- feat: TAT-1148 implement educational bottom sheets ([#18009](https://github.com/MetaMask/metamask-mobile/pull/18009)) +- feat: Improvements in amount page formatting ([#17944](https://github.com/MetaMask/metamask-mobile/pull/17944)) - feat: solana websockets ([#17600](https://github.com/MetaMask/metamask-mobile/pull/17600)) +- feat: add alerts to perps deposit confirmation ([#17892](https://github.com/MetaMask/metamask-mobile/pull/17892)) +- feat: Add support for fiat conversion for non-evm send ([#17906](https://github.com/MetaMask/metamask-mobile/pull/17906)) +- feat: perps transactions history ([#17688](https://github.com/MetaMask/metamask-mobile/pull/17688)) +- feat: selectors for the contextual network selector ([#18042](https://github.com/MetaMask/metamask-mobile/pull/18042)) +- feat: redux infra for contextual chain id for send flow ([#18012](https://github.com/MetaMask/metamask-mobile/pull/18012)) +- feat: contextual network picker component ([#18014](https://github.com/MetaMask/metamask-mobile/pull/18014)) +- feat: Adding wizard for send flow ([#17885](https://github.com/MetaMask/metamask-mobile/pull/17885)) +- feat: add initial perps deposit confirmation ([#17702](https://github.com/MetaMask/metamask-mobile/pull/17702)) +- feat: Adding solana infrastructure to send page ([#17771](https://github.com/MetaMask/metamask-mobile/pull/17771)) +- feat: add pay publish hook ([#17659](https://github.com/MetaMask/metamask-mobile/pull/17659)) +- feat: add `SelectedGasFeeToken` component ([#17556](https://github.com/MetaMask/metamask-mobile/pull/17556)) +- feat: adding fait conversion option on send page ([#17704](https://github.com/MetaMask/metamask-mobile/pull/17704)) +- feat: update perps trading tooltips ([#17942](https://github.com/MetaMask/metamask-mobile/pull/17942)) +- feat: perps improve protocol abstraction and handle edge order edge cases ([#17809](https://github.com/MetaMask/metamask-mobile/pull/17809)) - feat: Integrate Rive animation library ([#17919](https://github.com/MetaMask/metamask-mobile/pull/17919)) +- feat: Add tp&sl lines to Perps chart ([#18005](https://github.com/MetaMask/metamask-mobile/pull/18005)) - feat: Perps chart improvements time interval, candle period ([#17917](https://github.com/MetaMask/metamask-mobile/pull/17917)) +- feat: added temp action list item ([#17851](https://github.com/MetaMask/metamask-mobile/pull/17851)) +- feat: wallet selector ([#17502](https://github.com/MetaMask/metamask-mobile/pull/17502)) +- feat: price impact warning modal ([#17781](https://github.com/MetaMask/metamask-mobile/pull/17781)) +- feat: TAT-1318 Move perps sandbox wallet action into developer options ([#17850](https://github.com/MetaMask/metamask-mobile/pull/17850)) +- feat: implement Reactotron ([#17780](https://github.com/MetaMask/metamask-mobile/pull/17780)) +- feat: Implement RN Worklets/Background Threads ([#17674](https://github.com/MetaMask/metamask-mobile/pull/17674)) +- feat: Adding validations for to address in send flow ([#17671](https://github.com/MetaMask/metamask-mobile/pull/17671)) +- feat: decoupling PerpsController error strings for Core Monorepo Integration ([#17797](https://github.com/MetaMask/metamask-mobile/pull/17797)) +- feat: TAT-1235 Add "Perps Enabled" and "Perps Maintenance Banner" Remote Flags ([#17783](https://github.com/MetaMask/metamask-mobile/pull/17783)) +- feat: Updated wallet header ([#17712](https://github.com/MetaMask/metamask-mobile/pull/17712)) ### Fixed @@ -947,8 +1974,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: fixes account related failures in wallet platform and identity tests ([#17863](https://github.com/MetaMask/metamask-mobile/pull/17863)) - fix: bump @metamask/multichain-api-client to v0.6.5 ([#17817](https://github.com/MetaMask/metamask-mobile/pull/17817)) - fix: cp-7.51.2 solana modal android font ([#17829](https://github.com/MetaMask/metamask-mobile/pull/17829)) +- fix: Update how utm params are parsed in deeplinks ([#17235](https://github.com/MetaMask/metamask-mobile/pull/17235)) - fix: Fix padding issue of transactions view ([#17804](https://github.com/MetaMask/metamask-mobile/pull/17804)) - fix: cp-7.51.2 scroll behaviour on Solana New Feature view ([#17807](https://github.com/MetaMask/metamask-mobile/pull/17807)) +- fix: refactor recreatevault -> change password cp-7.53.0 ([#17642](https://github.com/MetaMask/metamask-mobile/pull/17642)) +- fix: double press interaction on android cp-7.54.0 ([#18729](https://github.com/MetaMask/metamask-mobile/pull/18729)) +- fix: update assets controllers with fix ([#18884](https://github.com/MetaMask/metamask-mobile/pull/18884)) +- fix: cp-7.54.0 Launchdarkly flag added carousel-banners ([#18855](https://github.com/MetaMask/metamask-mobile/pull/18855)) +- fix: stable sync secret ([#18867](https://github.com/MetaMask/metamask-mobile/pull/18867)) +- fix: define `transactionType` before adding transaction ([#18234](https://github.com/MetaMask/metamask-mobile/pull/18234)) +- fix: stop account tracker polling ([#18603](https://github.com/MetaMask/metamask-mobile/pull/18603)) +- fix: smart transactions mobile feature flags #18781 ([#18820](https://github.com/MetaMask/metamask-mobile/pull/18820)) +- fix: checkbox reset on No Thanks click ([#18748](https://github.com/MetaMask/metamask-mobile/pull/18748)) +- fix: amount validation on send page ([#18870](https://github.com/MetaMask/metamask-mobile/pull/18870)) +- fix: Fix group name for Name components ([#18865](https://github.com/MetaMask/metamask-mobile/pull/18865)) +- fix: NFT balance related fixes on amount page ([#18812](https://github.com/MetaMask/metamask-mobile/pull/18812)) +- fix: remove invalid header for accountbackup page ([#18747](https://github.com/MetaMask/metamask-mobile/pull/18747)) +- fix: Bundle lightweight-charts package locally ([#18847](https://github.com/MetaMask/metamask-mobile/pull/18847)) +- fix: Reintroduced scan button to Wallet Homepage cp-7.54.0 ([#18832](https://github.com/MetaMask/metamask-mobile/pull/18832)) +- fix: WC universal links ([#18741](https://github.com/MetaMask/metamask-mobile/pull/18741)) +- fix: Fix network switcher not appearing on legacy Swaps ([#18643](https://github.com/MetaMask/metamask-mobile/pull/18643)) +- fix: deescalate google error cp-7.54.0 ([#18745](https://github.com/MetaMask/metamask-mobile/pull/18745)) +- fix: cp-7.54.0 solana ws lifecycle ([#18759](https://github.com/MetaMask/metamask-mobile/pull/18759)) +- fix: support fallback to sequential batch ([#17449](https://github.com/MetaMask/metamask-mobile/pull/17449)) +- fix: Updated MainActionItem and bottom nav's TabItem to reduce padding for small screens ([#18734](https://github.com/MetaMask/metamask-mobile/pull/18734)) +- fix: cp-7.54 close solana websockets on inactive ([#18718](https://github.com/MetaMask/metamask-mobile/pull/18718)) +- fix: text style update ([#18722](https://github.com/MetaMask/metamask-mobile/pull/18722)) +- fix: Update the copy writing of the SRP login button ([#18713](https://github.com/MetaMask/metamask-mobile/pull/18713)) +- fix: disable linktext btn Use a different login method ([#18607](https://github.com/MetaMask/metamask-mobile/pull/18607)) +- fix: forced light theme colors for buttons cp-7.54.0 ([#17756](https://github.com/MetaMask/metamask-mobile/pull/17756)) +- fix: account_status img update ([#18609](https://github.com/MetaMask/metamask-mobile/pull/18609)) +- fix: add missing properties in transaction event ([#18169](https://github.com/MetaMask/metamask-mobile/pull/18169)) +- fix: create password loading ([#18606](https://github.com/MetaMask/metamask-mobile/pull/18606)) +- fix: reset wallet button disabled while loading ([#18608](https://github.com/MetaMask/metamask-mobile/pull/18608)) - fix: SRP image cp-7.54.0 ([#18376](https://github.com/MetaMask/metamask-mobile/pull/18376)) - fix: fix transaction history for new network manager ([#18436](https://github.com/MetaMask/metamask-mobile/pull/18436)) - fix: flickering input srp ([#18562](https://github.com/MetaMask/metamask-mobile/pull/18562)) @@ -963,6 +2021,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: Fix send flow hang on custom RPC by signaling blocked XHR ([#18304](https://github.com/MetaMask/metamask-mobile/pull/18304)) - fix: cp-7.53.0 swaps weth fee ([#18538](https://github.com/MetaMask/metamask-mobile/pull/18538)) - fix: user data being wiped after upgrading to new version from 7.51.4 ([#18398](https://github.com/MetaMask/metamask-mobile/pull/18398)) +- fix: cp-7.54.0 add global notification mocks to e2e tests ([#17830](https://github.com/MetaMask/metamask-mobile/pull/17830)) +- fix: cp-7.53.0 disables flaky E2E tests ([#17911](https://github.com/MetaMask/metamask-mobile/pull/17911)) +- fix: fixes account related failures in wallet platform and identity tests ([#17863](https://github.com/MetaMask/metamask-mobile/pull/17863)) +- fix: bump @metamask/multichain-api-client to v0.6.5 ([#17817](https://github.com/MetaMask/metamask-mobile/pull/17817)) +- fix: cp-7.51.2 solana modal android font ([#17829](https://github.com/MetaMask/metamask-mobile/pull/17829)) +- fix: Update how utm params are parsed in deeplinks ([#17235](https://github.com/MetaMask/metamask-mobile/pull/17235)) +- fix: Fix padding issue of transactions view ([#17804](https://github.com/MetaMask/metamask-mobile/pull/17804)) +- fix: cp-7.51.2 scroll behaviour on Solana New Feature view ([#17807](https://github.com/MetaMask/metamask-mobile/pull/17807)) - New Crowdin translations by Github Action ([#17879](https://github.com/MetaMask/metamask-mobile/pull/17879)) - chore: Added ShareAddressQR code to AddressList and aligned QR screens ([#18836](https://github.com/MetaMask/metamask-mobile/pull/18836)) - test: add remote feature flags mock in server setup ([#18876](https://github.com/MetaMask/metamask-mobile/pull/18876)) @@ -1020,6 +2086,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ci: better manage automatic labeling of Sentry issues ([#18254](https://github.com/MetaMask/metamask-mobile/pull/18254)) - chore: update cursor rule PR creation guidelines with auto team label detection ([#18288](https://github.com/MetaMask/metamask-mobile/pull/18288)) - chore: deprecate reusable modal and suggest bottom sheet ([#18111](https://github.com/MetaMask/metamask-mobile/pull/18111)) +- refactor: refactor `MultichainAddressRow` ([#18442](https://github.com/MetaMask/metamask-mobile/pull/18442)) - test: disables bitrise android e2e and adds GHA e2e to CI ([#18316](https://github.com/MetaMask/metamask-mobile/pull/18316)) - ci: add the build saving/caching to the new templates ([#18438](https://github.com/MetaMask/metamask-mobile/pull/18438)) - test: quarantine flaky browser tests ([#18432](https://github.com/MetaMask/metamask-mobile/pull/18432)) @@ -1035,6 +2102,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - chore: add variant prop to BottomSheetHeader ([#18284](https://github.com/MetaMask/metamask-mobile/pull/18284)) - docs: Add deeplink docs for universal links ([#18219](https://github.com/MetaMask/metamask-mobile/pull/18219)) - chore: add `selectSelectedAccountGroupId` and `selectInternalAccountListSpreadByScopesByGroupId` selectors ([#18326](https://github.com/MetaMask/metamask-mobile/pull/18326)) +- feat(gh-action): add reusable workflow for Android and iOS build change detection ([#18142](https://github.com/MetaMask/metamask-mobile/pull/18142)) +- feat(card): add useIsCardholder hook ([#18355](https://github.com/MetaMask/metamask-mobile/pull/18355)) - chore: bump earn-controller package to 5.0.0 and update EarnController initialisation and methods ([#17445](https://github.com/MetaMask/metamask-mobile/pull/17445)) - test: Skip flaky tests ([#18347](https://github.com/MetaMask/metamask-mobile/pull/18347)) - test(e2e): Snaps UI link E2E ([#18301](https://github.com/MetaMask/metamask-mobile/pull/18301)) @@ -1042,6 +2111,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - chore: add fraxtal network and frax icon ([#18188](https://github.com/MetaMask/metamask-mobile/pull/18188)) - chore: add QuickActionButtons component ([#18218](https://github.com/MetaMask/metamask-mobile/pull/18218)) - chore: adding quick action button component ([#18324](https://github.com/MetaMask/metamask-mobile/pull/18324)) +- feat(deposit): submit basic info and address kyc forms separately ([#17873](https://github.com/MetaMask/metamask-mobile/pull/17873)) - chore: HeaderBase component improvements ([#18314](https://github.com/MetaMask/metamask-mobile/pull/18314)) - chore: update jest config to ignore storybook files ([#18270](https://github.com/MetaMask/metamask-mobile/pull/18270)) - chore: updating bottom sheet stories ([#18278](https://github.com/MetaMask/metamask-mobile/pull/18278)) @@ -1057,12 +2127,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - chore: use bridge API instead of swaps API for topAssets call ([#18213](https://github.com/MetaMask/metamask-mobile/pull/18213)) - chore: updated Trade Action Menu to use ActionListItem ([#17848](https://github.com/MetaMask/metamask-mobile/pull/17848)) - test(e2e): Add error snap E2E tests ([#18243](https://github.com/MetaMask/metamask-mobile/pull/18243)) +- feat(TAT-575): add fixture to import random generated accounts ([#17849](https://github.com/MetaMask/metamask-mobile/pull/17849)) - test: Add Snaps cronjob E2E ([#18244](https://github.com/MetaMask/metamask-mobile/pull/18244)) - test: Add Snaps JSX E2E ([#18235](https://github.com/MetaMask/metamask-mobile/pull/18235)) - chore: update `SEI` network's name and RPC name from `Sei Network` to `Sei Mainnet` ([#18167](https://github.com/MetaMask/metamask-mobile/pull/18167)) +- feat(card): add card home UI ([#17082](https://github.com/MetaMask/metamask-mobile/pull/17082)) - refactor(deposit): change default payment method cp-7.53.0 ([#18211](https://github.com/MetaMask/metamask-mobile/pull/18211)) - chore: Updated Wallet's Buy interaction to Fund Action Menu ([#17923](https://github.com/MetaMask/metamask-mobile/pull/17923)) - chore: unifying Keypad UI across mobile - part 2 ([#18055](https://github.com/MetaMask/metamask-mobile/pull/18055)) +- feat(4173): Send flow with contextual chain selector ([#13938](https://github.com/MetaMask/metamask-mobile/pull/13938)) - chore: Enable Why did you render dev tool ([#18160](https://github.com/MetaMask/metamask-mobile/pull/18160)) - test: Clean up e2e & tweak tests for the GHA migration ([#18090](https://github.com/MetaMask/metamask-mobile/pull/18090)) - chore: add debugging with React Native DevTools ([#17995](https://github.com/MetaMask/metamask-mobile/pull/17995)) @@ -1074,6 +2147,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ci: adapt PR size job to have permissions to add labels ([#18158](https://github.com/MetaMask/metamask-mobile/pull/18158)) - chore: add multichain accounts local flag ([#18056](https://github.com/MetaMask/metamask-mobile/pull/18056)) - feat(deposit): cp-7.53.0 use order status description from API ([#18057](https://github.com/MetaMask/metamask-mobile/pull/18057)) +- feat(bridge): add deep link support for bridge functionality ([#17187](https://github.com/MetaMask/metamask-mobile/pull/17187)) - chore: unifying Keypad UI across mobile - part 1 ([#17782](https://github.com/MetaMask/metamask-mobile/pull/17782)) - chore(card): add redux card slices on CODEOWNERS file ([#18129](https://github.com/MetaMask/metamask-mobile/pull/18129)) - chore(deps): bump multichain deps ([#17734](https://github.com/MetaMask/metamask-mobile/pull/17734)) @@ -1115,6 +2189,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ci: Only do required setup for CI step ([#17900](https://github.com/MetaMask/metamask-mobile/pull/17900)) - fix(deposit): cp-7.53.0 make manual transfer orders unique ([#17875](https://github.com/MetaMask/metamask-mobile/pull/17875)) - chore: skip sonar on failure ([#17899](https://github.com/MetaMask/metamask-mobile/pull/17899)) +- feat(deposit): prefill personal details form with user data ([#17770](https://github.com/MetaMask/metamask-mobile/pull/17770)) - New Crowdin translations by Github Action ([#17762](https://github.com/MetaMask/metamask-mobile/pull/17762)) - chore: Revert "feat: Implement RN Worklets/Background Threads (#17674)" ([#17674](https://github.com/MetaMask/metamask-mobile/pull/17674)) - test(e2e): Add Snaps E2E tests ([#17416](https://github.com/MetaMask/metamask-mobile/pull/17416)) @@ -1122,7 +2197,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - chore: Polish homepage UI ([#17794](https://github.com/MetaMask/metamask-mobile/pull/17794)) - test: fix fixture server paths ([#17792](https://github.com/MetaMask/metamask-mobile/pull/17792)) - chore: Bump main version to 7.54.0 ([#17787](https://github.com/MetaMask/metamask-mobile/pull/17787)) +- feat(deposit): route to build quote after otp authentication ([#17776](https://github.com/MetaMask/metamask-mobile/pull/17776)) - chore: Refactor build configuration to use new build config as well as correct build targets ([#17397](https://github.com/MetaMask/metamask-mobile/pull/17397)) +- fix: double press interaction on android cp-7.54.0 ([#18729](https://github.com/MetaMask/metamask-mobile/pull/18729)) +- fix: update assets controllers with fix ([#18884](https://github.com/MetaMask/metamask-mobile/pull/18884)) +- fix: cp-7.54.0 Launchdarkly flag added carousel-banners ([#18855](https://github.com/MetaMask/metamask-mobile/pull/18855)) +- fix: stable sync secret ([#18867](https://github.com/MetaMask/metamask-mobile/pull/18867)) +- fix: define `transactionType` before adding transaction ([#18234](https://github.com/MetaMask/metamask-mobile/pull/18234)) +- fix: stop account tracker polling ([#18603](https://github.com/MetaMask/metamask-mobile/pull/18603)) +- fix: smart transactions mobile feature flags #18781 ([#18820](https://github.com/MetaMask/metamask-mobile/pull/18820)) +- fix: checkbox reset on No Thanks click ([#18748](https://github.com/MetaMask/metamask-mobile/pull/18748)) +- fix: amount validation on send page ([#18870](https://github.com/MetaMask/metamask-mobile/pull/18870)) +- fix: Fix group name for Name components ([#18865](https://github.com/MetaMask/metamask-mobile/pull/18865)) +- fix: NFT balance related fixes on amount page ([#18812](https://github.com/MetaMask/metamask-mobile/pull/18812)) +- fix: remove invalid header for accountbackup page ([#18747](https://github.com/MetaMask/metamask-mobile/pull/18747)) +- fix: Bundle lightweight-charts package locally ([#18847](https://github.com/MetaMask/metamask-mobile/pull/18847)) +- fix: Reintroduced scan button to Wallet Homepage cp-7.54.0 ([#18832](https://github.com/MetaMask/metamask-mobile/pull/18832)) +- fix: WC universal links ([#18741](https://github.com/MetaMask/metamask-mobile/pull/18741)) +- fix: Fix network switcher not appearing on legacy Swaps ([#18643](https://github.com/MetaMask/metamask-mobile/pull/18643)) +- fix: deescalate google error cp-7.54.0 ([#18745](https://github.com/MetaMask/metamask-mobile/pull/18745)) +- fix: cp-7.54.0 solana ws lifecycle ([#18759](https://github.com/MetaMask/metamask-mobile/pull/18759)) +- fix: support fallback to sequential batch ([#17449](https://github.com/MetaMask/metamask-mobile/pull/17449)) +- fix: Updated MainActionItem and bottom nav's TabItem to reduce padding for small screens ([#18734](https://github.com/MetaMask/metamask-mobile/pull/18734)) +- fix: cp-7.54 close solana websockets on inactive ([#18718](https://github.com/MetaMask/metamask-mobile/pull/18718)) +- fix: text style update ([#18722](https://github.com/MetaMask/metamask-mobile/pull/18722)) +- fix: Update the copy writing of the SRP login button ([#18713](https://github.com/MetaMask/metamask-mobile/pull/18713)) +- fix: disable linktext btn Use a different login method ([#18607](https://github.com/MetaMask/metamask-mobile/pull/18607)) +- fix: forced light theme colors for buttons cp-7.54.0 ([#17756](https://github.com/MetaMask/metamask-mobile/pull/17756)) +- fix: account_status img update ([#18609](https://github.com/MetaMask/metamask-mobile/pull/18609)) +- fix: add missing properties in transaction event ([#18169](https://github.com/MetaMask/metamask-mobile/pull/18169)) +- fix: create password loading ([#18606](https://github.com/MetaMask/metamask-mobile/pull/18606)) +- fix: reset wallet button disabled while loading ([#18608](https://github.com/MetaMask/metamask-mobile/pull/18608)) +- fix: SRP image cp-7.54.0 ([#18376](https://github.com/MetaMask/metamask-mobile/pull/18376)) +- fix: fix transaction history for new network manager ([#18436](https://github.com/MetaMask/metamask-mobile/pull/18436)) +- fix: flickering input srp ([#18562](https://github.com/MetaMask/metamask-mobile/pull/18562)) +- fix: cp-7.54.0 update liveness logic ([#18364](https://github.com/MetaMask/metamask-mobile/pull/18364)) +- fix: google cancel login in android cp-7.53.0 ([#18596](https://github.com/MetaMask/metamask-mobile/pull/18596)) +- fix: enter keydown ([#18564](https://github.com/MetaMask/metamask-mobile/pull/18564)) +- fix: Allow most WebView options on all pages (including homepage) ([#18477](https://github.com/MetaMask/metamask-mobile/pull/18477)) +- fix: network manager scroll bug for android ([#18535](https://github.com/MetaMask/metamask-mobile/pull/18535)) +- fix: cp-7.54.0 use navigation.dispatch to properly navigate to asset page ([#18461](https://github.com/MetaMask/metamask-mobile/pull/18461)) +- fix: Reveal Private Credentials cp-7.54.0 ([#18484](https://github.com/MetaMask/metamask-mobile/pull/18484)) +- fix: font-size for input value on amount page ([#18549](https://github.com/MetaMask/metamask-mobile/pull/18549)) +- fix: Fix send flow hang on custom RPC by signaling blocked XHR ([#18304](https://github.com/MetaMask/metamask-mobile/pull/18304)) +- fix: cp-7.53.0 swaps weth fee ([#18538](https://github.com/MetaMask/metamask-mobile/pull/18538)) +- fix: user data being wiped after upgrading to new version from 7.51.4 ([#18398](https://github.com/MetaMask/metamask-mobile/pull/18398)) - fix: cp-7.54.0 remove network/account filters from deposit order selector ([#18499](https://github.com/MetaMask/metamask-mobile/pull/18499)) - fix: cp-7.54.0 quotes on Optimism crashing app ([#18486](https://github.com/MetaMask/metamask-mobile/pull/18486)) - fix: Implement network selector in asset page for BIP-44 send ([#18466](https://github.com/MetaMask/metamask-mobile/pull/18466)) @@ -1132,13 +2251,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: Update Perps order keypad buttons to match latest design ([#18447](https://github.com/MetaMask/metamask-mobile/pull/18447)) - fix: Updated ButtonBase and ListItems to have gesture detection on Android cp-7.53.0 ([#18104](https://github.com/MetaMask/metamask-mobile/pull/18104)) - fix: cp-7.53.0 add account title mismatch ([#18363](https://github.com/MetaMask/metamask-mobile/pull/18363)) +- fix: updated asset hooks to fetch enabled networks only when feature flag on ([#18280](https://github.com/MetaMask/metamask-mobile/pull/18280)) - fix: Bump expo patch version to fix Android crasher - cp-7.53.0 ([#18321](https://github.com/MetaMask/metamask-mobile/pull/18321)) - fix: cp-7.53.0 swaps show effective gas ([#18318](https://github.com/MetaMask/metamask-mobile/pull/18318)) - fix: sanitize seedless controller state - cp-7.53.0 ([#18299](https://github.com/MetaMask/metamask-mobile/pull/18299)) +- fix: Updated Wallet Header's alignment ([#18323](https://github.com/MetaMask/metamask-mobile/pull/18323)) - fix: srp input text cuttoff, ios focus issue, back focus on click ([#18222](https://github.com/MetaMask/metamask-mobile/pull/18222)) +- fix: Hide `origin` from MM originated confirmations ([#17820](https://github.com/MetaMask/metamask-mobile/pull/17820)) +- fix: handle disable seedless for e2e ([#18124](https://github.com/MetaMask/metamask-mobile/pull/18124)) +- fix: adjust color and alignment of source network overflow ([#18215](https://github.com/MetaMask/metamask-mobile/pull/18215)) +- fix: reorganize migration file ([#18233](https://github.com/MetaMask/metamask-mobile/pull/18233)) - fix: OnboardingSuccess Social Login Update ([#18161](https://github.com/MetaMask/metamask-mobile/pull/18161)) +- fix: import srp loading indicator ([#18116](https://github.com/MetaMask/metamask-mobile/pull/18116)) +- fix: fix sev1 issues network manager ([#18249](https://github.com/MetaMask/metamask-mobile/pull/18249)) +- fix: add is enabled network function ([#18260](https://github.com/MetaMask/metamask-mobile/pull/18260)) +- fix: prevent network label overflow ([#18190](https://github.com/MetaMask/metamask-mobile/pull/18190)) - fix: cp-7.53.0 select non-evm transactions irrespective of account ([#18247](https://github.com/MetaMask/metamask-mobile/pull/18247)) - fix: cp-7.53.0 solana content page button color in dark theme ([#18206](https://github.com/MetaMask/metamask-mobile/pull/18206)) +- fix: Tweak send max calculation to use max possible actual gas fees ([#18128](https://github.com/MetaMask/metamask-mobile/pull/18128)) - fix: cp-7.51.4 skip bridge and bridgeApproval tx types in STX ([#18207](https://github.com/MetaMask/metamask-mobile/pull/18207)) - fix: cp-7.53.0 Solana onboarding modal - make the buttons visible at the bottom ([#18196](https://github.com/MetaMask/metamask-mobile/pull/18196)) - fix: throw on response not ok - cp-7.53.0 ([#18221](https://github.com/MetaMask/metamask-mobile/pull/18221)) @@ -1153,29 +2283,44 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - fix: cp-7.53.0 use flatlist for android ([#18100](https://github.com/MetaMask/metamask-mobile/pull/18100)) - fix: cp-7.53.0 native token balance updates and optimise controller calls ([#18092](https://github.com/MetaMask/metamask-mobile/pull/18092)) - fix: Social Login Link Update ([#18049](https://github.com/MetaMask/metamask-mobile/pull/18049)) +- fix: UI Bugs ([#18093](https://github.com/MetaMask/metamask-mobile/pull/18093)) +- fix: Fix flickering alert trigger in batched transaction confirmation ([#18084](https://github.com/MetaMask/metamask-mobile/pull/18084)) +- fix: usd values in simulation metrics ([#17728](https://github.com/MetaMask/metamask-mobile/pull/17728)) - fix: Market price should render market price, not liquidity price ([#18101](https://github.com/MetaMask/metamask-mobile/pull/18101)) - fix: cp-7.53.0 hide price impact for wrapping quotes ([#18078](https://github.com/MetaMask/metamask-mobile/pull/18078)) - fix: Revert Android SDK bump to fix nav overlay issue ([#18105](https://github.com/MetaMask/metamask-mobile/pull/18105)) +- fix: remove the old js utils ([#17847](https://github.com/MetaMask/metamask-mobile/pull/17847)) - fix: cp-7.53.0 update styles for SafeAreaView and ScrollView to ensure proper layout ([#18089](https://github.com/MetaMask/metamask-mobile/pull/18089)) - fix: cp-7.53.0 handle unrecognised Blockaid reasons in confirmation alerts ([#18077](https://github.com/MetaMask/metamask-mobile/pull/18077)) +- fix: face id run twice during rehydration ([#18036](https://github.com/MetaMask/metamask-mobile/pull/18036)) +- fix: optinmetric screen show up even metric accepted ([#18030](https://github.com/MetaMask/metamask-mobile/pull/18030)) +- fix: next version fix label PR ([#17822](https://github.com/MetaMask/metamask-mobile/pull/17822)) - fix: add `account_type` property to the Wallet Created event cp-7.53.0 ([#18024](https://github.com/MetaMask/metamask-mobile/pull/18024)) - fix: remaining time format cp-7.53.0 ([#17801](https://github.com/MetaMask/metamask-mobile/pull/17801)) - fix: QA Bugs cp-7.53.0 ([#17976](https://github.com/MetaMask/metamask-mobile/pull/17976)) - fix: action view update to get the scrollview cp-7.53.0 ([#17987](https://github.com/MetaMask/metamask-mobile/pull/17987)) - fix: synced srp discover accounts - cp-7.53.0 ([#17925](https://github.com/MetaMask/metamask-mobile/pull/17925)) +- fix: oauth uat config ([#17811](https://github.com/MetaMask/metamask-mobile/pull/17811)) - fix: cp-7.53.0 swaps default slippage ([#17880](https://github.com/MetaMask/metamask-mobile/pull/17880)) - fix: cp-7.53.0 swaps solana tx history ([#17870](https://github.com/MetaMask/metamask-mobile/pull/17870)) - fix: Make accounts list cell not clickable cp-7.53.0 ([#17876](https://github.com/MetaMask/metamask-mobile/pull/17876)) +- fix: disable failing network expansion e2e ([#17935](https://github.com/MetaMask/metamask-mobile/pull/17935)) - fix: cp-7.53.0 Remove `assetId` when undefined ([#17927](https://github.com/MetaMask/metamask-mobile/pull/17927)) - fix: cp-7.53.0 Properly stop Snaps when clearing state ([#17810](https://github.com/MetaMask/metamask-mobile/pull/17810)) - fix: cp-7.53.0 e2e misusing checksum addresses ([#17896](https://github.com/MetaMask/metamask-mobile/pull/17896)) - fix: cp-7.53.0 add global notification mocks to e2e tests ([#17830](https://github.com/MetaMask/metamask-mobile/pull/17830)) +- fix: cp-7.53.0 disables flaky E2E tests ([#17911](https://github.com/MetaMask/metamask-mobile/pull/17911)) +- fix: fixes account related failures in wallet platform and identity tests ([#17863](https://github.com/MetaMask/metamask-mobile/pull/17863)) +- fix: bump @metamask/multichain-api-client to v0.6.5 ([#17817](https://github.com/MetaMask/metamask-mobile/pull/17817)) +- fix: cp-7.51.2 solana modal android font ([#17829](https://github.com/MetaMask/metamask-mobile/pull/17829)) +- fix: Update how utm params are parsed in deeplinks ([#17235](https://github.com/MetaMask/metamask-mobile/pull/17235)) +- fix: Fix padding issue of transactions view ([#17804](https://github.com/MetaMask/metamask-mobile/pull/17804)) +- fix: cp-7.51.2 scroll behaviour on Solana New Feature view ([#17807](https://github.com/MetaMask/metamask-mobile/pull/17807)) - fix: refactor recreatevault -> change password cp-7.53.0 ([#17642](https://github.com/MetaMask/metamask-mobile/pull/17642)) ## [7.54.2] ### Fixed - - fix(deposit): disable Base & Linea USDT ([#19557](https://github.com/MetaMask/metamask-mobile/pull/19557)) - fix(deposit): get started mUSD ([#19552](https://github.com/MetaMask/metamask-mobile/pull/19552)) - fix(deposit): add force update and fix faulty data migration ([#19541](https://github.com/MetaMask/metamask-mobile/pull/19541)) @@ -1185,12 +2330,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [7.54.1] ### Added - - Added auto-create-release-pr workflow to automatically create release ([#19254](https://github.com/MetaMask/metamask-mobile/pull/19254)) - fix: add logging to get more info around blocking login biometrics: ([#19274](https://github.com/MetaMask/metamask-mobile/pull/19274)) ### Fixed - - update solana to 2.3.6 ([#19241](https://github.com/MetaMask/metamask-mobile/pull/19241)) - fix: stable sync secret ([#19252](https://github.com/MetaMask/metamask-mobile/pull/19252)) @@ -1274,6 +2417,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - feat: redux infra for contextual chain id for send flow ([#18012](https://github.com/MetaMask/metamask-mobile/pull/18012)) - feat: selectors for the contextual network selector ([#18042](https://github.com/MetaMask/metamask-mobile/pull/18042)) - feat: solana websockets ([#17600](https://github.com/MetaMask/metamask-mobile/pull/17600)) +- feat: transition bridge controllers to new init pattern ([#17676](https://github.com/MetaMask/metamask-mobile/pull/17676)) - feat: update perps trading tooltips ([#17942](https://github.com/MetaMask/metamask-mobile/pull/17942)) - feat: use perps deposit confirmation ([#18224](https://github.com/MetaMask/metamask-mobile/pull/18224)) - feat: wallet selector ([#17502](https://github.com/MetaMask/metamask-mobile/pull/17502)) @@ -7639,7 +8783,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#957](https://github.com/MetaMask/metamask-mobile/pull/957): fix timeouts (#957) - [#954](https://github.com/MetaMask/metamask-mobile/pull/954): Bugfix: onboarding navigation (#954) -[Unreleased]: https://github.com/MetaMask/metamask-mobile/compare/v7.57.1...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-mobile/compare/v7.58.0...HEAD +[7.58.0]: https://github.com/MetaMask/metamask-mobile/compare/v7.57.2...v7.58.0 +[7.57.2]: https://github.com/MetaMask/metamask-mobile/compare/v7.57.1...v7.57.2 [7.57.1]: https://github.com/MetaMask/metamask-mobile/compare/v7.57.0...v7.57.1 [7.57.0]: https://github.com/MetaMask/metamask-mobile/compare/v7.56.5...v7.57.0 [7.56.5]: https://github.com/MetaMask/metamask-mobile/compare/v7.56.4...v7.56.5 diff --git a/android/app/build.gradle b/android/app/build.gradle index 4a81577088ce..0593c3c562d0 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -393,4 +393,4 @@ dependencies { androidTestImplementation "net.java.dev.jna:jna:5.12.1" androidTestImplementation "net.java.dev.jna:jna-platform:5.12.1" androidTestImplementation "org.opentest4j:opentest4j:1.2.0" -} \ No newline at end of file +} diff --git a/app/components/UI/Perps/Views/PerpsCancelAllOrdersView/PerpsCancelAllOrdersView.tsx b/app/components/UI/Perps/Views/PerpsCancelAllOrdersView/PerpsCancelAllOrdersView.tsx index 12af280b6bf9..3fd7d96d1fbf 100644 --- a/app/components/UI/Perps/Views/PerpsCancelAllOrdersView/PerpsCancelAllOrdersView.tsx +++ b/app/components/UI/Perps/Views/PerpsCancelAllOrdersView/PerpsCancelAllOrdersView.tsx @@ -177,11 +177,22 @@ const PerpsCancelAllOrdersView: React.FC = ({ } }, [navigation, externalSheetRef, sheetRef, onExternalClose]); + // Wrapper for "Keep Orders" button that properly handles overlay dismissal + const handleKeepButtonPress = useCallback(() => { + if (externalSheetRef) { + // When used as overlay, close the sheet properly to remove overlay + handleClose(); + } else { + // When used as standalone screen, use hook's navigation + handleKeepOrders(); + } + }, [externalSheetRef, handleClose, handleKeepOrders]); + const footerButtons = useMemo( () => [ { label: strings('perps.cancel_all_modal.keep_orders'), - onPress: handleKeepOrders, + onPress: handleKeepButtonPress, variant: ButtonVariants.Secondary, size: ButtonSize.Lg, disabled: isCanceling, @@ -197,13 +208,17 @@ const PerpsCancelAllOrdersView: React.FC = ({ danger: true, }, ], - [handleKeepOrders, handleCancelAll, isCanceling], + [handleKeepButtonPress, handleCancelAll, isCanceling], ); // Show empty state if no orders (WebSocket data loads instantly, no loading state needed) if (!orders || orders.length === 0) { return ( - + {strings('perps.cancel_all_modal.title')} @@ -219,7 +234,11 @@ const PerpsCancelAllOrdersView: React.FC = ({ } return ( - + {strings('perps.cancel_all_modal.title')} diff --git a/app/components/UI/Perps/Views/PerpsCloseAllPositionsView/PerpsCloseAllPositionsView.tsx b/app/components/UI/Perps/Views/PerpsCloseAllPositionsView/PerpsCloseAllPositionsView.tsx index f31ba65ec9b0..c8a1731d0989 100644 --- a/app/components/UI/Perps/Views/PerpsCloseAllPositionsView/PerpsCloseAllPositionsView.tsx +++ b/app/components/UI/Perps/Views/PerpsCloseAllPositionsView/PerpsCloseAllPositionsView.tsx @@ -204,11 +204,22 @@ const PerpsCloseAllPositionsView: React.FC = ({ } }, [navigation, externalSheetRef, sheetRef, onExternalClose]); + // Wrapper for "Keep Positions" button that properly handles overlay dismissal + const handleKeepButtonPress = useCallback(() => { + if (externalSheetRef) { + // When used as overlay, close the sheet properly to remove overlay + handleClose(); + } else { + // When used as standalone screen, use hook's navigation + handleKeepPositions(); + } + }, [externalSheetRef, handleClose, handleKeepPositions]); + const footerButtons = useMemo( () => [ { label: strings('perps.close_all_modal.keep_positions'), - onPress: handleKeepPositions, + onPress: handleKeepButtonPress, variant: ButtonVariants.Secondary, size: ButtonSize.Lg, disabled: isClosing, @@ -224,13 +235,17 @@ const PerpsCloseAllPositionsView: React.FC = ({ danger: true, }, ], - [handleKeepPositions, handleCloseAll, isClosing], + [handleKeepButtonPress, handleCloseAll, isClosing], ); // Show loading state while fetching positions if (isInitialLoading) { return ( - + {strings('perps.close_all_modal.title')} @@ -249,7 +264,11 @@ const PerpsCloseAllPositionsView: React.FC = ({ // Show empty state if no positions if (!positions || positions.length === 0) { return ( - + {strings('perps.close_all_modal.title')} @@ -265,7 +284,11 @@ const PerpsCloseAllPositionsView: React.FC = ({ } return ( - + {strings('perps.close_all_modal.title')} diff --git a/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.test.tsx b/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.test.tsx index 05b0ae6fc6b7..790e9be709dc 100644 --- a/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.test.tsx +++ b/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.test.tsx @@ -1,5 +1,5 @@ +import { fireEvent, render } from '@testing-library/react-native'; import React from 'react'; -import { render, fireEvent } from '@testing-library/react-native'; import { PerpsAmountDisplaySelectorsIDs } from '../../../../../../e2e/selectors/Perps/Perps.selectors'; import PredictAmountDisplay from './PredictAmountDisplay'; diff --git a/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.tsx b/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.tsx index f4a27fa6f206..d693b02bf4cf 100644 --- a/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.tsx +++ b/app/components/UI/Predict/components/PredictAmountDisplay/PredictAmountDisplay.tsx @@ -101,7 +101,7 @@ const PredictAmountDisplay: React.FC = ({ = ({ {strings('predict.fee_summary.provider_fee')} - {formatPrice(providerFee, { @@ -54,11 +42,6 @@ const PredictFeeSummary: React.FC = ({ {strings('predict.fee_summary.metamask_fee')} - {formatPrice(metamaskFee, { @@ -71,11 +54,6 @@ const PredictFeeSummary: React.FC = ({ {strings('predict.fee_summary.total')} - {formatPrice(total, { diff --git a/app/components/UI/Predict/components/PredictPosition/PredictPosition.styles.ts b/app/components/UI/Predict/components/PredictPosition/PredictPosition.styles.ts index 6596f65a2278..12bfbe1f790c 100644 --- a/app/components/UI/Predict/components/PredictPosition/PredictPosition.styles.ts +++ b/app/components/UI/Predict/components/PredictPosition/PredictPosition.styles.ts @@ -23,11 +23,14 @@ const styleSheet = () => width: '100%', flex: 5, }, + positionImageContainer: { + paddingTop: 4, + }, positionImage: { width: 40, height: 40, borderRadius: 100, - alignSelf: 'center', + alignSelf: 'flex-start', }, positionPnl: { flexDirection: 'column', diff --git a/app/components/UI/Predict/components/PredictPosition/PredictPosition.tsx b/app/components/UI/Predict/components/PredictPosition/PredictPosition.tsx index 0a4fbd8cd7e5..2c5ad3193461 100644 --- a/app/components/UI/Predict/components/PredictPosition/PredictPosition.tsx +++ b/app/components/UI/Predict/components/PredictPosition/PredictPosition.tsx @@ -36,16 +36,11 @@ const PredictPosition: React.FC = ({ style={styles.positionContainer} onPress={() => onPress?.(position)} > - + - + {title} diff --git a/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.test.tsx b/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.test.tsx index 727db874bcd5..de0bef53cc6f 100644 --- a/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.test.tsx +++ b/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.test.tsx @@ -17,12 +17,8 @@ declare global { } jest.mock('../../../../../../locales/i18n', () => ({ - strings: (key: string, vars?: Record) => { + strings: (key: string, _vars?: Record) => { switch (key) { - case 'predict.market_details.amount_on_outcome': - return `$${vars?.amount} on ${vars?.outcome}`; - case 'predict.market_details.outcome_at_price': - return `${vars?.outcome} at ${vars?.price}¢`; case 'predict.market_details.won': return 'Won'; case 'predict.market_details.lost': @@ -189,8 +185,10 @@ describe('PredictPositionDetail', () => { it('renders open position with current value, percent change and cash out', () => { renderComponent(); - expect(screen.getByText('$123.45 on Yes')).toBeOnTheScreen(); - expect(screen.getByText('Yes at 34¢')).toBeOnTheScreen(); + expect(screen.getByText('Group')).toBeOnTheScreen(); + expect( + screen.getByText('$123.45 on Yes • 34¢', { exact: false }), + ).toBeOnTheScreen(); expect(screen.getByText('$2,345.67')).toBeOnTheScreen(); expect(screen.getByText('+5.25%')).toBeOnTheScreen(); @@ -210,8 +208,10 @@ describe('PredictPositionDetail', () => { it('renders initial value line and avgPrice cents', () => { renderComponent({ initialValue: 50, outcome: 'No', avgPrice: 0.7 }); - expect(screen.getByText('$50.00 on No')).toBeOnTheScreen(); - expect(screen.getByText('No at 70¢')).toBeOnTheScreen(); + expect(screen.getByText('Group')).toBeOnTheScreen(); + expect( + screen.getByText('$50.00 on No • 70¢', { exact: false }), + ).toBeOnTheScreen(); }); it('renders won result with current value when market is closed and percent positive', () => { diff --git a/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.tsx b/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.tsx index e11bfa96c3ad..8cc0b114d4d6 100644 --- a/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.tsx +++ b/app/components/UI/Predict/components/PredictPositionDetail/PredictPositionDetail.tsx @@ -37,8 +37,16 @@ const PredictPosition: React.FC = ({ marketStatus, }: PredictPositionProps) => { const tw = useTailwind(); - const { icon, initialValue, percentPnl, outcome, avgPrice, currentValue } = - position; + + const { + icon, + initialValue, + percentPnl, + outcome, + avgPrice, + currentValue, + title, + } = position; const navigation = useNavigation>(); const { navigate } = navigation; @@ -47,6 +55,10 @@ const PredictPosition: React.FC = ({ navigation, }); + const groupItemTitle = market?.outcomes.find( + (o) => o.id === position.outcomeId && o.groupItemTitle, + )?.groupItemTitle; + const onCashOut = () => { executeGuardedAction(() => { const _outcome = market?.outcomes.find( @@ -91,38 +103,34 @@ const PredictPosition: React.FC = ({ }; return ( - + {Boolean(icon) && ( - + + + )} - + - {strings('predict.market_details.amount_on_outcome', { - amount: initialValue.toFixed(2), - outcome, - })} + {groupItemTitle ?? title} - {strings('predict.market_details.outcome_at_price', { - outcome, - price: (avgPrice * 100).toFixed(0), - })} + ${initialValue.toFixed(2)} on {outcome} •{' '} + {(avgPrice * 100).toFixed(0)}¢ - + {renderValueText()} {marketStatus === PredictMarketStatus.OPEN && ( { expect(screen.getByText('12/31/2024')).toBeOnTheScreen(); }); - it('displays provider information', () => { + it('displays resolution details information', () => { setupPredictMarketDetailsTest(); const aboutTab = screen.getByTestId( @@ -606,23 +606,9 @@ describe('PredictMarketDetails', () => { fireEvent.press(aboutTab); expect( - screen.getByText('predict.market_details.powered_by'), + screen.getByText('predict.market_details.resolution_details'), ).toBeOnTheScreen(); - expect(screen.getByText('polymarket')).toBeOnTheScreen(); - }); - - it('displays resolver information', () => { - setupPredictMarketDetailsTest(); - - const aboutTab = screen.getByTestId( - 'predict-market-details-tab-bar-tab-1', - ); - fireEvent.press(aboutTab); - - expect( - screen.getByText('predict.market_details.resolver'), - ).toBeOnTheScreen(); - expect(screen.getByText('UMA')).toBeOnTheScreen(); + expect(screen.getByText('Polymarket')).toBeOnTheScreen(); }); }); @@ -707,7 +693,7 @@ describe('PredictMarketDetails', () => { screen.getByText('predict.market_details.end_date'), ).toBeOnTheScreen(); expect( - screen.getByText('predict.market_details.resolver'), + screen.getByText('predict.market_details.resolution_details'), ).toBeOnTheScreen(); }); @@ -1060,6 +1046,7 @@ describe('PredictMarketDetails', () => { id: 'position-1', outcomeId: 'outcome-1', outcome: 'Yes', + title: 'Yes', size: 100, initialValue: 65, currentValue: 70, @@ -1082,10 +1069,7 @@ describe('PredictMarketDetails', () => { expect(screen.getByText('predict.cash_out')).toBeOnTheScreen(); expect( - screen.getByText('predict.market_details.amount_on_outcome'), - ).toBeOnTheScreen(); - expect( - screen.getByText('predict.market_details.outcome_at_price'), + screen.getByText('$65.00 on Yes • 65¢', { exact: false }), ).toBeOnTheScreen(); expect(screen.getByText('+7.70%')).toBeOnTheScreen(); }); @@ -1095,6 +1079,7 @@ describe('PredictMarketDetails', () => { id: 'position-1', outcomeId: 'outcome-1', outcome: 'Yes', + title: 'Yes', size: 100, initialValue: 65, currentValue: 60, @@ -1229,6 +1214,7 @@ describe('PredictMarketDetails', () => { id: 'position-1', outcomeId: 'outcome-1', outcome: 'Yes', + title: 'Yes', size: 100, initialValue: 65, currentValue: 70, @@ -1248,11 +1234,9 @@ describe('PredictMarketDetails', () => { ); fireEvent.press(positionsTab); + expect(screen.getByText('Yes Option')).toBeOnTheScreen(); expect( - screen.getByText('predict.market_details.amount_on_outcome'), - ).toBeOnTheScreen(); - expect( - screen.getByText('predict.market_details.outcome_at_price'), + screen.getByText('$65.00 on Yes • 65¢', { exact: false }), ).toBeOnTheScreen(); }); @@ -1261,6 +1245,7 @@ describe('PredictMarketDetails', () => { id: 'position-1', outcomeId: 'outcome-1', outcome: 'Yes', + title: 'Yes', size: 100, initialValue: 65, currentValue: 70, @@ -1280,11 +1265,9 @@ describe('PredictMarketDetails', () => { ); fireEvent.press(positionsTab); + expect(screen.getByText('Yes')).toBeOnTheScreen(); expect( - screen.getByText('predict.market_details.amount_on_outcome'), - ).toBeOnTheScreen(); - expect( - screen.getByText('predict.market_details.outcome_at_price'), + screen.getByText('$65.00 on Yes • 65¢', { exact: false }), ).toBeOnTheScreen(); }); @@ -1293,6 +1276,7 @@ describe('PredictMarketDetails', () => { id: 'position-1', outcomeId: 'outcome-1', outcome: 'Yes', + title: 'Yes', size: 100, initialValue: 65, currentValue: 65, diff --git a/app/components/UI/Predict/views/PredictMarketDetails/PredictMarketDetails.tsx b/app/components/UI/Predict/views/PredictMarketDetails/PredictMarketDetails.tsx index 5aef19bcc56d..4dee2854a788 100644 --- a/app/components/UI/Predict/views/PredictMarketDetails/PredictMarketDetails.tsx +++ b/app/components/UI/Predict/views/PredictMarketDetails/PredictMarketDetails.tsx @@ -5,7 +5,13 @@ import { useRoute, } from '@react-navigation/native'; import React, { useMemo, useState, useEffect, useCallback } from 'react'; -import { Image, Pressable, RefreshControl, ScrollView } from 'react-native'; +import { + Image, + Linking, + Pressable, + RefreshControl, + ScrollView, +} from 'react-native'; import { SafeAreaView, useSafeAreaInsets, @@ -24,11 +30,7 @@ import Routes from '../../../../../constants/navigation/Routes'; import { useTheme } from '../../../../../util/theme'; import { PredictNavigationParamList } from '../../types/navigation'; import { PredictEventValues } from '../../constants/eventNames'; -import { - formatVolume, - formatAddress, - estimateLineCount, -} from '../../utils/format'; +import { formatVolume, estimateLineCount } from '../../utils/format'; import Engine from '../../../../../core/Engine'; import { PredictMarketDetailsSelectorsIDs } from '../../../../../../e2e/selectors/Predict/Predict.selectors'; import { @@ -466,7 +468,7 @@ const PredictMarketDetails: React.FC = () => { @@ -513,7 +515,7 @@ const PredictMarketDetails: React.FC = () => { ); const renderMarketStatus = () => ( - + {winningOutcomeToken && !multipleOpenOutcomesPartiallyResolved && ( = () => { color={colors.text.muted} /> - {strings('predict.market_details.resolver')} - - - UMA + {strings('predict.market_details.resolution_details')} = () => { alignItems={BoxAlignItems.Center} twClassName="gap-2" > - - - {isMarketFetching || !market?.outcomes[0]?.resolvedBy - ? strings('predict.loading') - : formatAddress(market.outcomes[0].resolvedBy)} + { + Linking.openURL( + 'https://docs.polymarket.com/polymarket-learn/markets/how-are-markets-resolved', + ); + }} + > + + Polymarket = () => { /> - - - - - - {strings('predict.market_details.powered_by')} - - - - - {market?.providerId} - - - = () => { multipleOutcomes && multipleOpenOutcomesPartiallyResolved ? ( + {openOutcomes.map((outcome) => ( + + ))} setIsResolvedExpanded((prev) => !prev)} style={({ pressed }) => @@ -986,13 +968,6 @@ const PredictMarketDetails: React.FC = () => { ))} - {openOutcomes.map((outcome) => ( - - ))} ) : ( diff --git a/docs/readme/deeplinking-graphs.md b/docs/readme/deeplinking-graphs.md new file mode 100644 index 000000000000..58fed1cd9755 --- /dev/null +++ b/docs/readme/deeplinking-graphs.md @@ -0,0 +1,213 @@ +# Deeplink Processing Visual Flowcharts + +> 📚 **[Back to Main Deeplink Guide](./deeplinking.md)** for detailed explanations, implementation steps, and code examples + +## Quick Navigation + +- [Complete Deeplink Flow](#complete-deeplink-flow-with-signature-verification) - Main processing pipeline +- [Signature Creation & Verification](#signature-creation-and-verification-detail) - How signing works +- [Dynamic Parameters](#dynamic-parameters-example) - Adding unsigned params +- [Common Scenarios](#common-scenarios) - Real-world examples + +--- + +## Complete Deeplink Flow with Signature Verification + +**Related Documentation:** [How Link Processing Works](./deeplinking.md#how-link-processing-works) + +```mermaid +flowchart TD + Start[User Clicks Deeplink
https://link.metamask.io/perps?...] --> Parse[DeeplinkManager.parse
Extract URL components and params] + + Parse --> Protocol{Protocol?} + Protocol -->|HTTPS| Universal[handleUniversalLink] + Protocol -->|Other| Other[Other Protocols
metamask://, wc://] + + Universal --> Domain{Domain Valid?
link.metamask.io or
link-test.metamask.io?} + Domain -->|No| InvalidDomain[INVALID DOMAIN
Show error modal] + Domain -->|Yes| CheckSig{Has Signature?
url.searchParams.has'sig'} + + CheckSig -->|Yes| VerifySig[Verify Signature] + CheckSig -->|No| PublicLink1[PUBLIC LINK] + + VerifySig --> BuildCanonical[Build Canonical URL
• Get params from sig_params list
• Include sig_params itself
• Sort alphabetically] + BuildCanonical --> CryptoVerify[Verify with Public Key
ECDSA P-256] + + CryptoVerify -->|VALID| PrivateLink[PRIVATE LINK
Trusted source] + CryptoVerify -->|INVALID| InvalidLink[INVALID LINK
Tampered/Wrong signature] + CryptoVerify -->|MISSING| PublicLink2[PUBLIC LINK
No signature] + + PrivateLink --> Modal + PublicLink1 --> Modal + PublicLink2 --> Modal + InvalidLink --> Modal + InvalidDomain --> Modal + + Modal[Interstitial Modal Decision] --> ModalType{Link Type?} + ModalType -->|Private| ShowPrivate[Show confirmation
can remember choice] + ModalType -->|Public| ShowPublic[Show security warning] + ModalType -->|Invalid| ShowInvalid[Show 'Page doesn't exist' modal] + ModalType -->|Unsupported| ShowUnsupported[Show 'Not supported' modal] + ModalType -->|Whitelisted| Skip[Skip modal
WC, enable-card-button] + + ShowPrivate --> UserContinue{User Continues?} + ShowPublic --> UserContinue + ShowInvalid --> UserContinue + ShowUnsupported --> UserContinue + Skip --> Route + + UserContinue -->|Yes| Route[Action Routing] + UserContinue -->|No| End[End] + + Route --> Action{Action Type?} + Action -->|swap| HandleSwap[_handleSwap] + Action -->|buy| HandleBuy[_handleBuyCrypto] + Action -->|perps| HandlePerps[_handlePerps] + Action -->|send| HandleSend[_handleEthereumUrl] + Action -->|dapp| HandleDapp[_handleBrowserUrl] + Action -->|rewards| HandleRewards[_handleRewards] + Action -->|other| HandleOther[Other Handlers...] + + HandleSwap --> Execute + HandleBuy --> Execute + HandlePerps --> Execute + HandleSend --> Execute + HandleDapp --> Execute + HandleRewards --> Execute + HandleOther --> Execute + + Execute[Handler Execution
1. Parse parameters
2. Navigate to screen
3. Pass data to components
4. Update app state] + + style Start fill:#e1f5ff + style PrivateLink fill:#d4edda + style PublicLink1 fill:#fff3cd + style PublicLink2 fill:#fff3cd + style InvalidLink fill:#f8d7da + style InvalidDomain fill:#f8d7da + style Execute fill:#d4edda +``` + +## Signature Creation and Verification Detail + +**Related Documentation:** [Signature Verification](./deeplinking.md#signature-verification) + +### Server-Side (link-signer-api) + +```mermaid +flowchart TD + Input[INPUT:
https://link.metamask.io/perps?screen=asset&symbol=BTC] + + Input --> Extract[Extract All Parameters
params = screen, symbol] + Extract --> CreateSigParams[Create sig_params
sig_params = 'screen,symbol'] + CreateSigParams --> AddToURL[Add sig_params to URL
Sort all parameters] + AddToURL --> Sign[Sign Complete URL
ECDSA P-256 with Private Key] + Sign --> Append[Append Signature
sig = base64url signature] + Append --> Output[OUTPUT:
https://link.metamask.io/perps?screen=asset&
sig_params=screen,symbol&symbol=BTC&sig=MEUCIQDx...] + + style Input fill:#e1f5ff + style Output fill:#d4edda +``` + +### Client-Side (MetaMask Mobile) + +```mermaid +flowchart TD + Input[INPUT:
https://link.metamask.io/perps?screen=asset&
sig_params=screen,symbol&symbol=BTC&sig=MEUCIQDx...] + + Input --> ExtractParams[Extract sig_params
'screen,symbol' → screen, symbol] + ExtractParams --> BuildCanonical[Build Canonical URL
Include ONLY:
• params in sig_params list
• sig_params itself
• Sort alphabetically] + BuildCanonical --> Canonical[Canonical URL:
?screen=asset&sig_params=screen,symbol&symbol=BTC] + Canonical --> Verify[Verify Signature
ECDSA P-256 with Public Key] + + Verify -->|✅| Valid[VALID
Signature matches] + Verify -->|❌| Invalid[INVALID
Signature doesn't match] + + style Input fill:#e1f5ff + style Valid fill:#d4edda + style Invalid fill:#f8d7da +``` + +## Dynamic Parameters Example + +**Related Documentation:** [Benefits of Dynamic Signing (sig_params)](./deeplinking.md#benefits-of-dynamic-signing-sig_params) + +```mermaid +flowchart TD + Server[SIGNED URL FROM SERVER
https://link.metamask.io/swap?
chainId=1&sig_params=chainId&sig=X] + + Server --> Client[CLIENT ADDS UNSIGNED PARAMS
debug=true, userId=123] + + Client --> Final[FINAL URL TO VERIFY
https://link.metamask.io/swap?chainId=1&
debug=true&userId=123&
sig_params=chainId&sig=X] + + Final --> Canonicalize[CANONICALIZATION FOR VERIFY

sig_params says: 'chainId'
canonical URL = ?chainId=1&sig_params=chainId

debug and userId are IGNORED
not in sig_params] + + Canonicalize --> Valid[✅ SIGNATURE VALID!
Because canonical URL
matches what was signed] + + style Server fill:#e1f5ff + style Client fill:#fff3cd + style Final fill:#e1f5ff + style Canonicalize fill:#f0f0f0 + style Valid fill:#d4edda +``` + +## Common Scenarios + +**Related Documentation:** [Link Types](./deeplinking.md#link-types) | [Testing Links](./deeplinking.md#testing-links) + +### Scenario 1: Marketing Campaign (Public Link) + +```mermaid +flowchart LR + Click[User clicks
https://link.metamask.io/buy] --> NoSig[No signature] + NoSig --> Warning[Shows warning interstitial] + Warning --> Proceed{User proceeds?} + Proceed -->|Yes| Buy[Opens buy screen] + Proceed -->|No| Cancel[Cancelled] + + style Click fill:#e1f5ff + style Warning fill:#fff3cd + style Buy fill:#d4edda +``` + +### Scenario 2: Internal Testing (Private Link) + +```mermaid +flowchart LR + Click[User clicks
https://link.metamask.io/perps?
sig=XXX&sig_params=...] --> HasSig[Has valid signature] + HasSig --> Confirm[Shows confirmation
or skips if remembered] + Confirm --> Proceed{User proceeds?} + Proceed -->|Yes| Perps[Opens perps with
trusted params] + Proceed -->|No| Cancel[Cancelled] + + style Click fill:#e1f5ff + style HasSig fill:#d4edda + style Perps fill:#d4edda +``` + +### Scenario 3: Tampered Link (Invalid) + +```mermaid +flowchart LR + Click[User clicks
https://link.metamask.io/swap?
amount=1000&sig=XXX] --> Check[Signature doesn't match
amount was changed] + Check --> Modal[Shows 'This page
doesn't exist' modal] + Modal --> Options[Options:
• Update app
• Go to home page] + Options --> Rejected[Link rejected] + + style Click fill:#e1f5ff + style Check fill:#f8d7da + style Modal fill:#f8d7da + style Rejected fill:#f8d7da +``` + +### Scenario 4: WalletConnect (Whitelisted) + +```mermaid +flowchart LR + Click[User clicks
https://link.metamask.io/wc?
uri=wc:123...] --> Whitelist[WC action is whitelisted] + Whitelist --> Skip[Skips interstitial
completely] + Skip --> WC[Direct to WalletConnect
handler] + + style Click fill:#e1f5ff + style Whitelist fill:#d4edda + style WC fill:#d4edda +``` diff --git a/docs/readme/deeplinking.md b/docs/readme/deeplinking.md new file mode 100644 index 000000000000..bc5eca04c309 --- /dev/null +++ b/docs/readme/deeplinking.md @@ -0,0 +1,794 @@ +# MetaMask Mobile Deeplink Handling Guide + +> 💡 **Visual Learner?** Check out the [Deeplink Visual Flowcharts](./deeplinking-graphs.md) for interactive diagrams of the entire flow! + +## Table of Contents + +- [Overview](#overview) +- [Link Types](#link-types) +- [How Link Processing Works](#how-link-processing-works) → [See Visual Flow](./deeplinking-graphs.md#complete-deeplink-flow-with-signature-verification) +- [Creating New Links](#creating-new-links) +- [Adding New Handlers](#adding-new-handlers) +- [Signature Verification](#signature-verification) → [See Verification Diagrams](./deeplinking-graphs.md#signature-creation-and-verification-detail) +- [Testing Links](#testing-links) +- [Security Considerations](#security-considerations) + +Please note that custom `metamask://...` schemed links are being phased out in favor of universal links: `https://link.metamask.io/somePath?someParam=someValue` + +## Overview + +### In-app Support: + +- UI element link routing +- In-app-browser web view selection +- QR code scanning + +### External Support: + +- External app link selection +- External browser website link selection +- External camera QR code link scan + +### ⚠️ Does not support: + +- Pasting link into external browser + +MetaMask Mobile supports multiple deeplink protocols to enable various app interactions: + +- **Universal Links** (iOS) / **App Links** (Android): `https://link.metamask.io/*` +- **Custom URI Schemes**: `metamask://`, `ethereum://`, `wc://` +- **Test Environment Links**: `https://link-test.metamask.io/*` + +All deeplinks are processed through a unified pipeline that handles security verification, user consent, and routing to appropriate handlers. + +## Link Types + +> 📊 **[View Scenario Examples](./deeplinking-graphs.md#common-scenarios)** - See visual flows for each link type + +### 1. Public / Unsigned Links + +Used for general marketing and public-facing features: + +``` +https://link.metamask.io/buy +https://link.metamask.io/swap?chainId=1 +``` + +- **User Experience**: Shows interstitial warning about untrusted links +- **Use Cases**: Marketing campaigns, documentation, public features + +### 2. Private / Signed Links + +Cryptographically signed links for trusted internal use: + +``` +https://link.metamask.io/perps?sig=ABC123...&sig_params=screen,symbol +``` + +- **User Experience**: Shows confirmation dialog (can be disabled) +- **Use Cases**: Internal testing, controlled feature rollouts, trusted campaigns + +### 3. Invalid Links + +Links with invalid domains or corrupted signatures: + +- **User Experience**: Shows modal with "This page doesn't exist" message and option to update app or go home +- **Examples**: Wrong domain, malformed URL, tampered signature + +### 4. Unsupported Links + +Links with valid signature but unsupported action in current app version: + +- **User Experience**: Shows modal with "This page is not supported in current version" message +- **Examples**: New feature not yet available in user's app version + +## Link Formats + +| Type | Format | Example | +| ------ | ------------------------------------------------------------------------------ | -------------------------------------------------------------------- | +| Public | `https://link.metamask.io/{action}?{params}` | `https://link.metamask.io/swap?chainId=1` | +| Signed | `https://link.metamask.io/{action}?{params}&sig_params={list}&sig={signature}` | `https://link.metamask.io/swap?chainId=1&sig_params=chainId&sig=XXX` | +| Test | `https://link-test.metamask.io/{action}?{params}` | `https://link-test.metamask.io/swap` | +| Legacy | `metamask://{action}?{params}` | `metamask://wc?uri=wc:123...` | + +## How Link Processing Works + +> 📊 **[View Complete Flow Diagram](./deeplinking-graphs.md#complete-deeplink-flow-with-signature-verification)** - Interactive Mermaid flowchart showing the entire process + +### 1. Entry Points + +``` +User Clicks Link + ↓ +Branch.io / React Native Linking + ↓ +DeeplinkManager.parse() + ↓ +parseDeeplink() +``` + +### 2. URL Classification + +```typescript +// In parseDeeplink.ts +const { urlObj, params } = extractURLParams(url); + +// Determine protocol and route accordingly +if (urlObj.protocol === PROTOCOLS.HTTPS) { + → handleUniversalLink() // Universal links +} else if (urlObj.protocol === PROTOCOLS.ETHEREUM) { + → handleEthereumUrl() // Ethereum transactions +} else if (urlObj.protocol === PROTOCOLS.METAMASK) { + → handleMetaMaskDeeplink() // MetaMask SDK +} +``` + +### 3. Signature Verification (for HTTPS links) + +```typescript +// In handleUniversalLink.ts +if (hasSignature(validatedUrl)) { + const result = await verifyDeeplinkSignature(validatedUrl); + + switch (result) { + case VALID: // Signature verified ✅ + isPrivateLink = true; + break; + case INVALID: // Signature failed ❌ + case MISSING: // No signature + isPrivateLink = false; + break; + } +} +``` + +### 4. User Consent Modal + +Unless the action is whitelisted, users see an interstitial: + +- **Public Links**: Security warning about untrusted source +- **Private Links**: Confirmation dialog (can remember choice) +- **Invalid Links**: "Page doesn't exist" modal with update/home options +- **Unsupported Links**: "Not supported in current version" modal + +### 5. Action Routing + +```typescript +// In handleUniversalLink.ts +switch (action) { + case SUPPORTED_ACTIONS.SWAP: + instance._handleSwap(swapPath); + break; + case SUPPORTED_ACTIONS.PERPS: + instance._handlePerps(perpsPath); + break; + // ... other actions +} +``` + +## Creating New Links + +### Basic Structure + +``` +https://link.metamask.io/{action}?{parameters} +``` + +### Examples + +#### Public Link (Marketing) + +``` +https://link.metamask.io/buy?chain=1&token=ETH +``` + +#### Private Link (Signed) + +To create a signed link, use the `link-signer-api`: + +1. **Server-Side Signing Process**: + +```javascript +// The server takes your URL with parameters +const url = 'https://link.metamask.io/perps?screen=asset&symbol=BTC'; + +// Lists ALL parameters in sig_params +// sig_params = "screen,symbol" + +// Signs the canonical URL including sig_params +// Adds signature as 'sig' parameter +// Final URL: +('https://link.metamask.io/perps?screen=asset&sig_params=screen,symbol&symbol=BTC&sig=ABC123...'); +``` + +2. **Dynamic Parameters with sig_params**: + +``` +// Only 'screen' is signed, 'debug' can be added without breaking signature +https://link.metamask.io/perps?screen=asset&sig_params=screen&sig=XXX&debug=true +``` + +## Adding New Handlers + +### Step 1: Define the Action + +```typescript +// app/constants/deeplinks.ts +export enum ACTIONS { + // ... existing actions + YOUR_NEW_ACTION = 'your-new-action', +} +``` + +### Step 2: Add to Supported Actions + +```typescript +// app/core/DeeplinkManager/ParseManager/handleUniversalLink.ts +enum SUPPORTED_ACTIONS { + // ... existing actions + YOUR_NEW_ACTION = ACTIONS.YOUR_NEW_ACTION, +} +``` + +### Step 3: Create Handler Function + +```typescript +// app/core/DeeplinkManager/Handlers/handleYourAction.ts +export const handleYourAction = async ({ path }: { path: string }) => { + // Parse parameters from path + const params = new URLSearchParams(path); + const someParam = params.get('someParam'); + + // Navigate or perform action + NavigationService.navigation.navigate(Routes.YOUR_SCREEN, { + someParam, + }); +}; +``` + +### Step 4: Wire Up Handler in DeeplinkManager + +```typescript +// app/core/DeeplinkManager/DeeplinkManager.ts +class DeeplinkManager { + // ... existing code + + _handleYourAction(path: string) { + handleYourAction({ path }); + } +} +``` + +### Step 5: Add Routing Logic + +```typescript +// app/core/DeeplinkManager/ParseManager/handleUniversalLink.ts +async function handleUniversalLink(/* ... */) { + // ... existing code + + if (action === SUPPORTED_ACTIONS.YOUR_NEW_ACTION) { + const actionPath = urlObj.href.replace(BASE_URL_ACTION, ''); + instance._handleYourAction(actionPath); + } +} +``` + +### Step 6: Add Tests + +```typescript +// app/core/DeeplinkManager/ParseManager/handleUniversalLink.test.ts +describe('YOUR_NEW_ACTION', () => { + it('calls _handleYourAction with correct path', () => { + const url = 'https://link.metamask.io/your-new-action?param=value'; + + await handleUniversalLinks(url); + + expect(instance._handleYourAction).toHaveBeenCalledWith('?param=value'); + }); +}); +``` + +## Signature Verification + +> 📊 **[View Signature Flow Diagrams](./deeplinking-graphs.md#signature-creation-and-verification-detail)** - See how signing and verification work visually + +### How It Works + +1. **Server Signs URL**: + - Includes all parameters listed in `sig_params` + - Uses ECDSA with P-256 curve + - Produces base64url-encoded signature + +2. **Client (metamask-mobile) Verifies**: + + ```typescript + // Canonicalization (with sig_params) + if (params.has('sig_params')) { + const signedParams = sigParamsList.split(','); + // Only include params listed in sig_params + signedParams.forEach((param) => { + if (params.has(param)) { + canonicalParams.set(param, params.get(param)); + } + }); + // Always include sig_params itself + canonicalParams.set('sig_params', sigParamsList); + } + + // Verification + const valid = await crypto.verify( + algorithm, + publicKey, + signature, + canonicalUrl, + ); + ``` + +### Verification Results + +- `MISSING`: No `sig` parameter (public link) +- `VALID`: Signature verified successfully +- `INVALID`: Signature present but verification failed + +### Benefits of Dynamic Signing (sig_params) + +> 📊 **[View Dynamic Parameters Diagram](./deeplinking-graphs.md#dynamic-parameters-example)** - See how unsigned params can be added + +- **Selective Signing**: Only critical params need signing +- **Forward Compatibility**: Add new unsigned params without breaking signatures +- **Flexible Testing**: Add debug params to signed production links + +## Testing Links + +### Development Environment + +```bash +# Test link format +https://link-test.metamask.io/{action} + +# iOS Simulator +xcrun simctl openurl booted "https://link-test.metamask.io/swap" + +# Android Emulator +adb shell am start -W -a android.intent.action.VIEW \ + -d "https://link-test.metamask.io/swap" \ + com.metamask.debug +``` + +### Testing Signed Links + +1. **Generate Test Signature** (using link-signer-api): + + ```bash + curl -X POST https://your-signer-api/sign \ + -d "url=https://link.metamask.io/perps?screen=asset" + ``` + +2. **Verify Locally**: + ```typescript + // Add test in verifySignature.test.ts + it('verifies production signed link', async () => { + const url = new URL('your-signed-url-here'); + const result = await verifyDeeplinkSignature(url); + expect(result).toBe(VALID); + }); + ``` + +### Common Test Scenarios + +- ✅ Valid signed link with all params +- ✅ Valid signed link with sig_params subset +- ✅ Public link without signature +- ✅ Tampered signature +- ✅ Missing parameters referenced in sig_params +- ✅ Expired signatures (if implemented) +- ✅ Wrong domain + +## Security Considerations + +### 1. Signature Verification + +- **Always verify** signatures for sensitive actions +- **Never trust** client-provided sig_params without verification +- **Reject** if signature doesn't match canonical URL + +### 2. Parameter Validation + +```typescript +// Always validate and sanitize parameters +const symbol = params.get('symbol'); +if (!isValidSymbol(symbol)) { + throw new Error('Invalid symbol parameter'); +} +``` + +### 3. Domain Validation + +```typescript +const isSupportedDomain = + urlObj.hostname === MM_UNIVERSAL_LINK_HOST || + urlObj.hostname === MM_IO_UNIVERSAL_LINK_HOST || + urlObj.hostname === MM_IO_UNIVERSAL_LINK_TEST_HOST; + +if (!isSupportedDomain) { + // Reject as invalid +} +``` + +### 4. Action Whitelisting + +```typescript +// Some actions bypass interstitial for UX +const WHITELISTED_ACTIONS = [ + SUPPORTED_ACTIONS.WC, // WalletConnect needs immediate handling + SUPPORTED_ACTIONS.ENABLE_CARD_BUTTON, +]; +``` + +## Best Practices + +### Do's ✅ + +- **Test all link variations** before deploying +- **Use signed links** for internal/trusted features +- **Validate all parameters** before using them +- **Log deeplink events** for debugging +- **Handle errors gracefully** with user feedback +- **Document your handlers** with usage examples + +### Don'ts ❌ + +- **Don't bypass** signature verification for convenience +- **Don't trust** user-provided parameters without validation +- **Don't expose** sensitive features via public links +- **Don't forget** to test edge cases (missing params, etc.) +- **Don't hardcode** URLs - use constants + +## Troubleshooting + +### Link Not Opening App + +1. Check domain is correctly configured +2. Verify app association files (iOS/Android) +3. Ensure Branch.io is configured +4. Check if app is installed + +### Signature Verification Failing + +1. Verify public key configuration (metamask-mobile only uses production signatures) +2. Check sig_params includes all signed parameters +3. Ensure base64 encoding is correct +4. Verify canonical URL generation + +### Handler Not Called + +1. Check action is in SUPPORTED_ACTIONS +2. Verify routing logic in handleUniversalLink +3. Check for early returns or exceptions +4. Review interstitial modal behavior + +## References + +- [MetaMask Signer (Consensys employees only)](https://api.signer.link.metamask.consensys.io) +- [Signature Verification Implementation](./app/core/DeeplinkManager/ParseManager/utils/verifySignature.ts) +- [Universal Link Handler](./app/core/DeeplinkManager/ParseManager/handleUniversalLink.ts) +- [Deeplink Constants](./app/constants/deeplinks.ts) +- [Test Suite](./app/core/DeeplinkManager/ParseManager/handleUniversalLink.test.ts) +- [Link Signer API](https://github.com/MetaMask/link-signer-api) + +## Example: Complete Flow + +```mermaid +graph TD + A[User clicks link] --> B{Protocol?} + B -->|HTTPS| C[handleUniversalLink] + B -->|ethereum://| D[handleEthereumUrl] + B -->|metamask://| E[handleMetaMaskDeeplink] + + C --> F{Has signature?} + F -->|Yes| G[Verify signature] + F -->|No| H[Public link] + + G -->|Valid| I[Private link] + G -->|Invalid| H + + I --> J[Show confirmation] + H --> K[Show warning] + + J -->|Continue| L[Route to handler] + K -->|Continue| L + + L --> M[Execute action] +``` + +# Deeplink Guide Appendix: Creating Signed Links + +## Using the Link Signer API + +The `link-signer-api` is a separate service that creates cryptographically signed deeplinks for MetaMask Mobile. + +### How the Signer Works + +1. **Input**: A URL with parameters +2. **Process**: + - Lists all parameter keys in `sig_params` + - Sorts parameters alphabetically + - Signs the complete URL with ECDSA P-256 +3. **Output**: URL with `sig_params` and `sig` added + +### Server-Side Signing Process + +MetaMask internal links can be signed [here](https://api.signer.link.metamask.consensys.io) + +### Example: Creating a Signed Link + +#### Step 1: Original URL + +``` +https://link.metamask.io/perps?screen=asset&symbol=BTC +``` + +#### Step 2: Server Processing + +``` +Parameters found: screen, symbol +Creates sig_params: "screen,symbol" +Signs: https://link.metamask.io/perps?screen=asset&sig_params=screen%2Csymbol&symbol=BTC +``` + +#### Step 3: Final Signed URL + +``` +https://link.metamask.io/perps?screen=asset&sig_params=screen,symbol&symbol=BTC&sig=MEUCIQDx... +``` + +## Dynamic Parameter Signing + +### The Power of sig_params + +The `sig_params` parameter enables flexible link creation: + +```javascript +// Only 'action' and 'chainId' are signed +// 'debug' and 'timestamp' can be added later without breaking signature +const signedUrl = + 'https://link.metamask.io/swap?action=swap&chainId=1&sig_params=action,chainId&sig=XXX'; + +// Client can add unsigned parameters +const urlWithDebug = signedUrl + '&debug=true×tamp=123456'; +// ✅ Signature still valid! +``` + +### Use Cases + +1. **A/B Testing**: Add tracking params to signed production links +2. **Debugging**: Add debug flags without re-signing +3. **Analytics**: Add UTM parameters post-signature +4. **Personalization**: Add user-specific params client-side + +## Creating Links Programmatically + +### For Development/Testing + +```javascript +// Quick test link generator +function createTestLink(action, params = {}) { + const url = new URL(`https://link-test.metamask.io/${action}`); + + Object.entries(params).forEach(([key, value]) => { + url.searchParams.append(key, value); + }); + + return url.toString(); +} + +// Usage +const swapLink = createTestLink('swap', { + chainId: '1', + inputCurrency: 'ETH', + outputCurrency: 'USDC', +}); +``` + +### For Production (Requires Signing) + +```javascript +// Using the link-signer-api +async function createSignedLink(action, params = {}) { + const url = new URL(`https://link.metamask.io/${action}`); + + Object.entries(params).forEach(([key, value]) => { + url.searchParams.append(key, value); + }); + + // Call your signing endpoint + const response = await fetch('https://your-signer-api/sign', { + method: 'POST', + body: new URLSearchParams({ url: url.toString() }), + }); + + const { result } = await response.json(); + return result; // Signed URL +} +``` + +## Signature Verification Edge Cases + +### Case 1: Missing Parameters in sig_params + +``` +URL: ?param1=value1&sig_params=param1,param2,param3&sig=XXX +``` + +- `param2` and `param3` listed but not present +- Canonical URL only includes `param1` and `sig_params` +- Signature will FAIL (different from what was signed) + +### Case 2: Extra Parameters Not in sig_params + +``` +URL: ?param1=value1¶m2=value2&sig_params=param1&sig=XXX +``` + +- `param2` not listed in sig_params +- Canonical URL only includes `param1` and `sig_params` +- Signature VALID (param2 ignored) + +### Case 3: Empty sig_params + +``` +URL: ?sig_params=&sig=XXX +``` + +- No parameters are signed (except sig_params itself) +- Valid use case for simple signed confirmation + +### Case 4: No sig_params (Legacy) + +``` +URL: ?param1=value1¶m2=value2&sig=XXX +``` + +- Falls back to old behavior +- ALL parameters (except sig) are verified +- Maintains backward compatibility + +## Security Implementation Details + +### Client-Side Canonicalization + +```typescript +function canonicalize(url: URL): string { + const params = new URLSearchParams(url.searchParams); + + if (params.has('sig_params')) { + // New behavior: selective parameter verification + const sigParamsList = params.get('sig_params') || ''; + const signedParams = sigParamsList.split(',').filter(Boolean); + const canonicalParams = new URLSearchParams(); + + // Include only listed params + signedParams.forEach((paramName) => { + const value = params.get(paramName); + if (value !== null) { + canonicalParams.set(paramName, value); + } + }); + + // Always include sig_params itself + canonicalParams.set('sig_params', sigParamsList); + canonicalParams.sort(); + + const queryString = canonicalParams.toString(); + return url.origin + url.pathname + (queryString ? `?${queryString}` : ''); + } + + // Legacy behavior: verify all params except sig + params.delete('sig'); + params.sort(); + const queryString = params.toString(); + return url.origin + url.pathname + (queryString ? `?${queryString}` : ''); +} +``` + +### Why This Design? + +1. **Forward Compatibility**: New parameters can be added without breaking old signatures +2. **Selective Security**: Choose which params need cryptographic protection +3. **Performance**: Only verify what matters +4. **Flexibility**: Mix signed and unsigned data + +## Common Pitfalls + +### ❌ Don't Include 'sig' in sig_params + +```javascript +// WRONG - sig should never be in sig_params +'?sig_params=action,sig&sig=XXX'; + +// The server can't create this (sig doesn't exist yet when signing) +``` + +### ❌ Don't Modify Parameters Listed in sig_params + +```javascript +// Original signed URL +'?action=swap&chainId=1&sig_params=action,chainId&sig=XXX'; + +// WRONG - Modifying signed parameter +'?action=send&chainId=1&sig_params=action,chainId&sig=XXX'; +// ❌ Signature verification will fail +``` + +### ✅ Only Modify Unlisted Parameters + +```javascript +// Original signed URL +'?action=swap&sig_params=action&sig=XXX'; + +// OK - Adding unsigned parameter +'?action=swap&chainId=1&sig_params=action&sig=XXX'; +// ✅ Signature still valid (chainId not in sig_params) +``` + +## Testing Signature Verification + +### Unit Test Examples + +```typescript +describe('Dynamic signature verification', () => { + it('verifies with sig_params subset', async () => { + // Only param1 and param2 are signed + const url = new URL( + 'https://link.metamask.io/test?param1=a¶m2=b¶m3=c&sig_params=param1,param2&sig=VALID_SIG', + ); + + const result = await verifyDeeplinkSignature(url); + expect(result).toBe(VALID); + }); + + it('allows unsigned parameters', async () => { + // debug is not in sig_params, so it's ignored + const url = new URL( + 'https://link.metamask.io/test?action=swap&sig_params=action&debug=true&sig=VALID_SIG', + ); + + const result = await verifyDeeplinkSignature(url); + expect(result).toBe(VALID); + }); + + it('fails when signed param is modified', async () => { + // action is in sig_params, so changing it breaks signature + const url = new URL( + 'https://link.metamask.io/test?action=send&sig_params=action&sig=SWAP_SIGNATURE', + ); + + const result = await verifyDeeplinkSignature(url); + expect(result).toBe(INVALID); + }); +}); +``` + +## Quick Reference | + +### Verification Results + +| Result | Meaning | User Experience | +| --------- | --------------------- | ------------------------------- | +| `MISSING` | No signature present | Shows public link warning | +| `VALID` | Signature verified ✅ | Shows trusted link confirmation | +| `INVALID` | Signature failed ❌ | Shows invalid link error | + +### Action Types + +| Action | Purpose | Handler | +| ---------------------- | ------------------ | ----------------------- | +| `swap` | Token swapping | `_handleSwap` | +| `buy` / `buy-crypto` | Buy crypto | `_handleBuyCrypto` | +| `sell` / `sell-crypto` | Sell crypto | `_handleSellCrypto` | +| `send` | Send transaction | `_handleEthereumUrl` | +| `dapp` | Open dApp browser | `_handleBrowserUrl` | +| `perps` | Perpetuals trading | `_handlePerps` | +| `rewards` | Rewards program | `_handleRewards` | +| `wc` | WalletConnect | `parse` (recursive) | +| `onboarding` | Fast onboarding | `_handleFastOnboarding` | diff --git a/docs/readme/deeplinks.md b/docs/readme/deeplinks.md deleted file mode 100644 index 7b69c8fb40c6..000000000000 --- a/docs/readme/deeplinks.md +++ /dev/null @@ -1,85 +0,0 @@ -# Deeplinks - -The mobile app supports two types of deeplinks for each platform: - -- iOS - - [Universal Links](#universal-links--app-links) - - [Basic Deep links](#basic-deep-links) -- Android - - [App Links](#universal-links--app-links) - - [Basic Deep links](#basic-deep-links) - -We also use a deeplinking service called [Branch](https://branch.io/) for providing a seamless deeplinking experience. Under the hood, Branch handles the following features for us: - -- [Basic deep links](https://www.branch.io/glossary/uri-schemes/) -- [Deferred deep links](https://www.branch.io/glossary/deferred-deep-linking/) -- [Universal links](https://www.branch.io/glossary/universal-links/) (iOS) & [App Links](https://www.branch.io/glossary/app-links/) (Android) - -## Universal Links & App Links - -Both Universal Links (iOS) and App Links (Android) are standardized ways for each platform to seamlessly handle transitioning between web and mobile apps. They are most commonly recognized by using the `https://` or `https://` scheme in the URL and essentially function the same way, respectively. - -### Expected Behavior - -When a user clicks on this type of deeplink, the app will open and the user will initially experience one of the following conditions: - -- **Unsigned/Public links** - The user will see an interstitial page with a message reminding them of the risks of clicking on an untrusted links. Proceeding forward will reroute the user to the link's destination. -- **Signed/Private links** - The user will see a page with a message confirming where the user will be redirected to with the ability to check a box to not be reminded again. Proceeding forward will reroute the user to the link's destination. -- **Invalid links** - The user will see a page with a message stating that the page is not found. - -### Usage - -All deeplinks are parsed by the [DeeplinkManager](../../app/core/DeeplinkManager/DeeplinkManager.ts) service, which is responsible triaging them into their appropriate handlers. Since these links use `https://` and `http://` schemes, they are routed to the [handleUniversalLink](../../app/core/DeeplinkManager/ParseManager/handleUniversalLink.ts) utility function, which further triages them into their respective handlers based on the parsed action. **Each handler is implemented and owned by their respective teams.** - -For example, if the link is `https://link.metamask.io/swaps`, the parsed action will be `swaps`: - -To handle a new action: - -```javascript -// app/core/DeeplinkManager/ParseManager/handleUniversalLink.ts - -async function handleUniversalLink(/* ... */) { - /* ... */ - if (action === SUPPORTED_ACTIONS.SWAPS) { - // Handle swaps - instance.handleSwaps(); - } else if ( - // Add your new action here - action === SUPPORTED_ACTIONS.NEW_ACTION - ) { - // Handle your new action here - instance.handleNewAction(); - } -} -``` - -### Troubleshooting - -- Link routes to the page not found interstitial - - Verify that the link format is correct - - Verify that the link's action is handled -- Interstitial appears after clicking on a deeplink - - As long as the user has not checked the box to not be reminded again, the interstitial is expected to appear -- Interstitial does not appear after clicking on a deeplink - - Verify that the user has checked the box to not be reminded again - - Verify that you are clicking on a deeplink with the `https://` or `http://` scheme -- Clicking on a deeplink does not open the app - - Verify that you are clicking on a deeplink with the `https://` or `http:// - - Verify that the hostname is either `link.metamask.io` or `metamask.app.link` in production builds - - Verify that the hostname is either `link-test.metamask.io` or `metamask.test-app.link` for development builds - -## Basic Deep Links - -Traditionally, deeplinks utilized custom URI schemes in place of the protocol. For example, a basic deep link might've started with `metamask://...`. - -### Expected Behavior - -WIP - We are working on adding better documentation. Thank you for your patience. - -### Usage - -WIP - We are working on adding better documentation. Thank you for your patience. - -## Troubleshooting - -WIP - We are working on adding better documentation. Thank you for your patience. diff --git a/locales/languages/en.json b/locales/languages/en.json index 4ff8c0ee62be..eb84e8b3b635 100644 --- a/locales/languages/en.json +++ b/locales/languages/en.json @@ -1747,6 +1747,7 @@ "end_date": "End date", "resolver": "Resolver", "powered_by": "Powered by", + "resolution_details": "Resolution details", "yes": "Yes", "no": "No", "on": "on",