Skip to content

Comments

feat(ramps): removes quote polling functionality#7999

Merged
georgeweiler merged 6 commits intomainfrom
ramp-remove-quote-polling
Feb 20, 2026
Merged

feat(ramps): removes quote polling functionality#7999
georgeweiler merged 6 commits intomainfrom
ramp-remove-quote-polling

Conversation

@georgeweiler
Copy link
Contributor

@georgeweiler georgeweiler commented Feb 20, 2026

Explanation

Replaces the automatic 15-second quote polling mechanism (startQuotePolling/stopQuotePolling) in RampsController with a single one-shot fetchQuotesForSelection() method. Quote freshness is now the caller's responsibility — the controller fetches quotes once per invocation rather than on an interval.

This simplifies the controller by removing:

  • The setInterval-based polling loop and its stored interval ID
  • The #quotePollingOptions private field used to restart polling
  • The #restartPollingIfActive() helper that was called from setSelectedProvider, setSelectedToken, and setSelectedPaymentMethod
  • All stopQuotePolling() calls in #cleanupState, setUserRegion, setSelectedProvider, setSelectedToken, and destroy

The auto-selection and selection-preservation behavior is unchanged: a single-quote response is auto-selected, and multi-quote responses preserve the existing selection if it's still present in the new results.

References

mobile PR using preview build MetaMask/metamask-mobile#26301

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
Behavior change is user-visible (quotes no longer auto-refresh) and is a breaking API removal, so consumers must update call sites and manage refresh timing themselves.

Overview
BREAKING: Removes the 15-second quote polling API (startQuotePolling/stopQuotePolling) and replaces it with fetchQuotesForSelection(), which fetches quotes once per call and keeps the existing auto-select / selection-preservation behavior.

Cleans up related controller logic by deleting interval/state used for polling and removing automatic “restart polling on dependency change” behavior from setSelectedProvider, setSelectedToken, and setSelectedPaymentMethod; tests and changelog are updated accordingly (including destroy() no longer stopping polling and a new assertion that destroy() clears stateChange subscriptions).

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

@georgeweiler georgeweiler requested review from a team as code owners February 20, 2026 00:03
@georgeweiler
Copy link
Contributor Author

@metamaskbot publish-preview

@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": "4.1.1-preview-25c8c1fad",
  "@metamask-previews/accounts-controller": "36.0.1-preview-25c8c1fad",
  "@metamask-previews/address-book-controller": "7.0.1-preview-25c8c1fad",
  "@metamask-previews/ai-controllers": "0.1.0-preview-25c8c1fad",
  "@metamask-previews/analytics-controller": "1.0.0-preview-25c8c1fad",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-25c8c1fad",
  "@metamask-previews/announcement-controller": "8.0.0-preview-25c8c1fad",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-25c8c1fad",
  "@metamask-previews/approval-controller": "8.0.0-preview-25c8c1fad",
  "@metamask-previews/assets-controller": "2.0.2-preview-25c8c1fad",
  "@metamask-previews/assets-controllers": "100.0.1-preview-25c8c1fad",
  "@metamask-previews/base-controller": "9.0.0-preview-25c8c1fad",
  "@metamask-previews/bridge-controller": "67.1.1-preview-25c8c1fad",
  "@metamask-previews/bridge-status-controller": "67.0.1-preview-25c8c1fad",
  "@metamask-previews/build-utils": "3.0.4-preview-25c8c1fad",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-25c8c1fad",
  "@metamask-previews/claims-controller": "0.4.2-preview-25c8c1fad",
  "@metamask-previews/client-controller": "1.0.0-preview-25c8c1fad",
  "@metamask-previews/compliance-controller": "0.0.0-preview-25c8c1fad",
  "@metamask-previews/composable-controller": "12.0.0-preview-25c8c1fad",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-25c8c1fad",
  "@metamask-previews/controller-utils": "11.19.0-preview-25c8c1fad",
  "@metamask-previews/core-backend": "6.0.0-preview-25c8c1fad",
  "@metamask-previews/delegation-controller": "2.0.1-preview-25c8c1fad",
  "@metamask-previews/earn-controller": "11.1.1-preview-25c8c1fad",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-25c8c1fad",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-25c8c1fad",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-25c8c1fad",
  "@metamask-previews/ens-controller": "19.0.3-preview-25c8c1fad",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-25c8c1fad",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-25c8c1fad",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-25c8c1fad",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-25c8c1fad",
  "@metamask-previews/foundryup": "1.0.1-preview-25c8c1fad",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-25c8c1fad",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-25c8c1fad",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-25c8c1fad",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-25c8c1fad",
  "@metamask-previews/keyring-controller": "25.1.0-preview-25c8c1fad",
  "@metamask-previews/logging-controller": "7.0.1-preview-25c8c1fad",
  "@metamask-previews/message-manager": "14.1.0-preview-25c8c1fad",
  "@metamask-previews/messenger": "0.3.0-preview-25c8c1fad",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-25c8c1fad",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-25c8c1fad",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-25c8c1fad",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-25c8c1fad",
  "@metamask-previews/name-controller": "9.0.0-preview-25c8c1fad",
  "@metamask-previews/network-controller": "30.0.0-preview-25c8c1fad",
  "@metamask-previews/network-enablement-controller": "4.1.2-preview-25c8c1fad",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-25c8c1fad",
  "@metamask-previews/permission-controller": "12.2.0-preview-25c8c1fad",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-25c8c1fad",
  "@metamask-previews/perps-controller": "0.0.0-preview-25c8c1fad",
  "@metamask-previews/phishing-controller": "16.3.0-preview-25c8c1fad",
  "@metamask-previews/polling-controller": "16.0.3-preview-25c8c1fad",
  "@metamask-previews/preferences-controller": "22.1.0-preview-25c8c1fad",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-25c8c1fad",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-25c8c1fad",
  "@metamask-previews/ramps-controller": "8.1.0-preview-25c8c1fad",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-25c8c1fad",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-25c8c1fad",
  "@metamask-previews/sample-controllers": "4.0.3-preview-25c8c1fad",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-25c8c1fad",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-25c8c1fad",
  "@metamask-previews/shield-controller": "5.0.1-preview-25c8c1fad",
  "@metamask-previews/signature-controller": "39.0.4-preview-25c8c1fad",
  "@metamask-previews/storage-service": "1.0.0-preview-25c8c1fad",
  "@metamask-previews/subscription-controller": "6.0.0-preview-25c8c1fad",
  "@metamask-previews/transaction-controller": "62.17.1-preview-25c8c1fad",
  "@metamask-previews/transaction-pay-controller": "15.1.2-preview-25c8c1fad",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-25c8c1fad"
}

@georgeweiler georgeweiler changed the title Ramp remove quote polling feat(ramps): removes quote polling functionality Feb 20, 2026
@georgeweiler georgeweiler added this pull request to the merge queue Feb 20, 2026
Merged via the queue into main with commit 7051e0f Feb 20, 2026
310 checks passed
@georgeweiler georgeweiler deleted the ramp-remove-quote-polling branch February 20, 2026 21:44
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