Skip to content

Comments

refactor: removes quotes from ramp controller state#8013

Open
georgeweiler wants to merge 6 commits intomainfrom
ramps-quote-removal
Open

refactor: removes quotes from ramp controller state#8013
georgeweiler wants to merge 6 commits intomainfrom
ramps-quote-removal

Conversation

@georgeweiler
Copy link
Contributor

@georgeweiler georgeweiler commented Feb 22, 2026

Explanation

Refactor RampsController so quote and widget URL data are no longer kept in shared state. The controller is now a fetch-and-cache layer only; consumers manage quote and widget URL state themselves.

This removes the race where quotes became inconsistent when opening and closing PaymentSelectionModal (e.g., when fetchQuotesForSelection overwrote state.quotes.data with single-payment-method responses).

Changes

RampsController.ts

  • Removed state.quotes and state.widgetUrl from state type, metadata, and default state
  • Removed fetchQuotesForSelection() — consumers call getQuotes() directly
  • Removed setSelectedQuote() — consumers manage selection locally
  • Removed #syncWidgetUrl and all its usages
  • Simplified getQuotes() to fetch-and-return only (no state writes, no skipStateUpdate, no resourceType: 'quotes')
  • Kept getWidgetUrl() as a pure fetch-and-return API
  • Removed 'quotes' from DEPENDENT_RESOURCE_KEYS and all resetWidgetUrl usage in setSelectedProvider, setSelectedToken, and resetDependentResources

RequestCache.ts

  • Removed 'quotes' from ResourceType

Breaking Changes

  • state.quotes and state.widgetUrl — Quote and widget URL data are now managed by consuming components
  • fetchQuotesForSelection() — Removed; call getQuotes() directly with desired params
  • setSelectedQuote() — Removed; manage selection in local component state
  • skipStateUpdate in getQuotes() — Removed; getQuotes() no longer writes to state

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
This is a breaking API/state shape change that requires coordinated consumer updates; runtime risk is mainly in downstream integrations expecting state.quotes/state.widgetUrl or selection side effects.

Overview
Refactors RampsController to stop storing quotes and widget URL in shared controller state, making it primarily a fetch + request-cache layer while consumers manage quote selection and widget URL locally.

Removes the quotes/widgetUrl state slices and related reset/selection APIs (fetchQuotesForSelection(), setSelectedQuote(), and widget URL sync logic), and updates getQuotes()/getWidgetUrl() to be pure fetch-and-return methods (no state writes). Tests and RequestCache resource typing are updated accordingly, and the changelog marks these as breaking.

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

@georgeweiler georgeweiler requested review from a team as code owners February 22, 2026 20:54
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.

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

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.

1 participant