Skip to content

feat: defer eligibility to allow for onboarding to proceed without le…#8197

Open
gambinish wants to merge 4 commits intomainfrom
perps/feat/defer-eligibility
Open

feat: defer eligibility to allow for onboarding to proceed without le…#8197
gambinish wants to merge 4 commits intomainfrom
perps/feat/defer-eligibility

Conversation

@gambinish
Copy link
Member

@gambinish gambinish commented Mar 12, 2026

Explanation

Add deferEligibilityCheck constructor option that prevents the eager geolocation fetch to on-ramp.api.cx.metamask.io/geolocation from firing during wallet onboarding, fixing a privacy compliance violation in the extension's maximum-privacy onboarding E2E test

Add startEligibilityMonitoring() public method that the consumer calls post-onboarding to read the current feature flag state, perform the initial eligibility check, and unblock the already-registered RemoteFeatureFlagController:stateChange subscription

Implementation uses a single guard in refreshEligibilityOnFeatureFlagChange

Note: This does not update the perps-controller to use the new geolocation service. This would require removing the existing EligibilityService in order to keep the change as minimal as possible to unblock extension development. We can revisit to migrate to this new service soon after the blocked extension PRs have been merged.

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Changes the timing of geo-blocking eligibility evaluation, which can affect whether users are allowed into perps flows until monitoring is started. Risk is moderate due to new constructor option/public method and potential integration misuse (forgetting to call startEligibilityMonitoring()).

Overview
Adds deferEligibilityCheck to PerpsControllerOptions to skip eligibility/geolocation checks during controller construction and gate subsequent refreshEligibility() runs behind an internal deferral flag.

Introduces startEligibilityMonitoring() (also messenger-exposed) to resume eligibility monitoring post-onboarding by reading current RemoteFeatureFlagController state and triggering the initial eligibility refresh, with new tests covering deferred vs default behavior and changelog updates.

Written by Cursor Bugbot for commit d9c9893. This will update automatically on new commits. Configure here.

@gambinish gambinish requested review from a team as code owners March 12, 2026 19:40
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

@gambinish
Copy link
Member Author

@metamaskbot publish-previews

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "5.0.1-preview-935b6049c",
  "@metamask-previews/accounts-controller": "37.0.0-preview-935b6049c",
  "@metamask-previews/address-book-controller": "7.0.1-preview-935b6049c",
  "@metamask-previews/ai-controllers": "0.2.0-preview-935b6049c",
  "@metamask-previews/analytics-controller": "1.0.0-preview-935b6049c",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-935b6049c",
  "@metamask-previews/announcement-controller": "8.0.0-preview-935b6049c",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-935b6049c",
  "@metamask-previews/approval-controller": "8.0.0-preview-935b6049c",
  "@metamask-previews/assets-controller": "2.3.0-preview-935b6049c",
  "@metamask-previews/assets-controllers": "100.2.1-preview-935b6049c",
  "@metamask-previews/base-controller": "9.0.0-preview-935b6049c",
  "@metamask-previews/base-data-service": "0.0.0-preview-935b6049c",
  "@metamask-previews/bridge-controller": "69.1.0-preview-935b6049c",
  "@metamask-previews/bridge-status-controller": "68.1.0-preview-935b6049c",
  "@metamask-previews/build-utils": "3.0.4-preview-935b6049c",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-935b6049c",
  "@metamask-previews/claims-controller": "0.4.3-preview-935b6049c",
  "@metamask-previews/client-controller": "1.0.0-preview-935b6049c",
  "@metamask-previews/compliance-controller": "1.0.1-preview-935b6049c",
  "@metamask-previews/composable-controller": "12.0.0-preview-935b6049c",
  "@metamask-previews/config-registry-controller": "0.1.1-preview-935b6049c",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-935b6049c",
  "@metamask-previews/controller-utils": "11.19.0-preview-935b6049c",
  "@metamask-previews/core-backend": "6.1.1-preview-935b6049c",
  "@metamask-previews/delegation-controller": "2.0.2-preview-935b6049c",
  "@metamask-previews/earn-controller": "11.1.2-preview-935b6049c",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-935b6049c",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-935b6049c",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-935b6049c",
  "@metamask-previews/ens-controller": "19.0.3-preview-935b6049c",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-935b6049c",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-935b6049c",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-935b6049c",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-935b6049c",
  "@metamask-previews/foundryup": "1.0.1-preview-935b6049c",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-935b6049c",
  "@metamask-previews/gator-permissions-controller": "2.1.0-preview-935b6049c",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-935b6049c",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-935b6049c",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-935b6049c",
  "@metamask-previews/keyring-controller": "25.1.0-preview-935b6049c",
  "@metamask-previews/logging-controller": "7.0.1-preview-935b6049c",
  "@metamask-previews/message-manager": "14.1.0-preview-935b6049c",
  "@metamask-previews/messenger": "0.3.0-preview-935b6049c",
  "@metamask-previews/multichain-account-service": "7.1.0-preview-935b6049c",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-935b6049c",
  "@metamask-previews/multichain-network-controller": "3.0.5-preview-935b6049c",
  "@metamask-previews/multichain-transactions-controller": "7.0.2-preview-935b6049c",
  "@metamask-previews/name-controller": "9.0.0-preview-935b6049c",
  "@metamask-previews/network-controller": "30.0.0-preview-935b6049c",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-935b6049c",
  "@metamask-previews/notification-services-controller": "23.0.0-preview-935b6049c",
  "@metamask-previews/permission-controller": "12.2.0-preview-935b6049c",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-935b6049c",
  "@metamask-previews/perps-controller": "1.0.1-preview-935b6049c",
  "@metamask-previews/phishing-controller": "16.3.0-preview-935b6049c",
  "@metamask-previews/polling-controller": "16.0.3-preview-935b6049c",
  "@metamask-previews/preferences-controller": "23.0.0-preview-935b6049c",
  "@metamask-previews/profile-metrics-controller": "3.0.3-preview-935b6049c",
  "@metamask-previews/profile-sync-controller": "28.0.0-preview-935b6049c",
  "@metamask-previews/ramps-controller": "12.0.0-preview-935b6049c",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-935b6049c",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-935b6049c",
  "@metamask-previews/sample-controllers": "4.0.3-preview-935b6049c",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-935b6049c",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-935b6049c",
  "@metamask-previews/shield-controller": "5.0.1-preview-935b6049c",
  "@metamask-previews/signature-controller": "39.0.5-preview-935b6049c",
  "@metamask-previews/storage-service": "1.0.0-preview-935b6049c",
  "@metamask-previews/subscription-controller": "6.0.1-preview-935b6049c",
  "@metamask-previews/transaction-controller": "62.21.0-preview-935b6049c",
  "@metamask-previews/transaction-pay-controller": "16.4.1-preview-935b6049c",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-935b6049c"
}

Copy link
Contributor

@abretonc7s abretonc7s left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We cant modify core directly, it should come from mobile than sync to core or we loose mobile as source of truth

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants