Skip to content

feat(ramps): adds widget url to ramps controller state#7920

Merged
georgeweiler merged 12 commits intomainfrom
ramps-provider-widget-url
Feb 13, 2026
Merged

feat(ramps): adds widget url to ramps controller state#7920
georgeweiler merged 12 commits intomainfrom
ramps-provider-widget-url

Conversation

@georgeweiler
Copy link
Contributor

@georgeweiler georgeweiler commented Feb 12, 2026

Explanation

Summary

  • Adds a widgetUrl resource to RampsControllerState with data, isLoading, and error fields, following the existing ResourceState pattern
  • Whenever the selected quote changes (via setSelectedQuote or auto-selection during polling), the widget URL is automatically fetched from the service and stored in state
  • The widget URL state is reset when the selected quote is cleared or when dependent resources are reset (e.g. provider/token changes)
  • The existing getWidgetUrl() method is preserved for backwards compatibility but marked as @deprecated in favor of reading state.widgetUrl

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
Introduces new async side effects on quote selection/polling and changes controller state shape, which could affect consumers and increase request volume if not handled carefully.

Overview
Adds a new state.widgetUrl ResourceState<BuyWidget | null> to RampsController and wires it to automatically fetch buy widget info via RampsService:getBuyWidgetUrl whenever quotes.selected changes (manual selection or polling auto-selection), using a stale-while-revalidate approach to avoid loading-state flicker.

Resets widgetUrl alongside other dependent-resource resets (e.g., provider/token changes or clearing the quote), marks getWidgetUrl() as deprecated in favor of reading state.widgetUrl, and updates/extends tests and changelog to cover the new state shape and error handling.

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

@georgeweiler georgeweiler requested a review from a team as a code owner February 12, 2026 16:21
@georgeweiler georgeweiler changed the title feat: adds widget url to ramps controller state feat(ramps): adds widget url to ramps controller state Feb 12, 2026
@georgeweiler georgeweiler requested a review from a team as a code owner February 12, 2026 17:31
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-38a9cf6c3",
  "@metamask-previews/accounts-controller": "36.0.0-preview-38a9cf6c3",
  "@metamask-previews/address-book-controller": "7.0.1-preview-38a9cf6c3",
  "@metamask-previews/ai-controllers": "0.0.0-preview-38a9cf6c3",
  "@metamask-previews/analytics-controller": "1.0.0-preview-38a9cf6c3",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-38a9cf6c3",
  "@metamask-previews/announcement-controller": "8.0.0-preview-38a9cf6c3",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-38a9cf6c3",
  "@metamask-previews/approval-controller": "8.0.0-preview-38a9cf6c3",
  "@metamask-previews/assets-controller": "1.0.0-preview-38a9cf6c3",
  "@metamask-previews/assets-controllers": "99.3.2-preview-38a9cf6c3",
  "@metamask-previews/base-controller": "9.0.0-preview-38a9cf6c3",
  "@metamask-previews/bridge-controller": "66.1.1-preview-38a9cf6c3",
  "@metamask-previews/bridge-status-controller": "66.0.2-preview-38a9cf6c3",
  "@metamask-previews/build-utils": "3.0.4-preview-38a9cf6c3",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-38a9cf6c3",
  "@metamask-previews/claims-controller": "0.4.2-preview-38a9cf6c3",
  "@metamask-previews/composable-controller": "12.0.0-preview-38a9cf6c3",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-38a9cf6c3",
  "@metamask-previews/controller-utils": "11.18.0-preview-38a9cf6c3",
  "@metamask-previews/core-backend": "5.1.1-preview-38a9cf6c3",
  "@metamask-previews/delegation-controller": "2.0.1-preview-38a9cf6c3",
  "@metamask-previews/earn-controller": "11.1.0-preview-38a9cf6c3",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-38a9cf6c3",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-38a9cf6c3",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-38a9cf6c3",
  "@metamask-previews/ens-controller": "19.0.2-preview-38a9cf6c3",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-38a9cf6c3",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-38a9cf6c3",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-38a9cf6c3",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-38a9cf6c3",
  "@metamask-previews/foundryup": "1.0.1-preview-38a9cf6c3",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-38a9cf6c3",
  "@metamask-previews/gator-permissions-controller": "1.1.2-preview-38a9cf6c3",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-38a9cf6c3",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-38a9cf6c3",
  "@metamask-previews/keyring-controller": "25.1.0-preview-38a9cf6c3",
  "@metamask-previews/logging-controller": "7.0.1-preview-38a9cf6c3",
  "@metamask-previews/message-manager": "14.1.0-preview-38a9cf6c3",
  "@metamask-previews/messenger": "0.3.0-preview-38a9cf6c3",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-38a9cf6c3",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-38a9cf6c3",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-38a9cf6c3",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-38a9cf6c3",
  "@metamask-previews/name-controller": "9.0.0-preview-38a9cf6c3",
  "@metamask-previews/network-controller": "29.0.0-preview-38a9cf6c3",
  "@metamask-previews/network-enablement-controller": "4.1.0-preview-38a9cf6c3",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-38a9cf6c3",
  "@metamask-previews/permission-controller": "12.2.0-preview-38a9cf6c3",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-38a9cf6c3",
  "@metamask-previews/perps-controller": "0.0.0-preview-38a9cf6c3",
  "@metamask-previews/phishing-controller": "16.2.0-preview-38a9cf6c3",
  "@metamask-previews/polling-controller": "16.0.2-preview-38a9cf6c3",
  "@metamask-previews/preferences-controller": "22.1.0-preview-38a9cf6c3",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-38a9cf6c3",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-38a9cf6c3",
  "@metamask-previews/ramps-controller": "8.0.0-preview-38a9cf6c3",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-38a9cf6c3",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-38a9cf6c3",
  "@metamask-previews/sample-controllers": "4.0.2-preview-38a9cf6c3",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-38a9cf6c3",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-38a9cf6c3",
  "@metamask-previews/shield-controller": "5.0.1-preview-38a9cf6c3",
  "@metamask-previews/signature-controller": "39.0.2-preview-38a9cf6c3",
  "@metamask-previews/storage-service": "1.0.0-preview-38a9cf6c3",
  "@metamask-previews/subscription-controller": "6.0.0-preview-38a9cf6c3",
  "@metamask-previews/transaction-controller": "62.17.0-preview-38a9cf6c3",
  "@metamask-previews/transaction-pay-controller": "14.0.0-preview-38a9cf6c3",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-38a9cf6c3"
}

Copy link
Contributor

@amitabh94 amitabh94 left a comment

Choose a reason for hiding this comment

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

LGTM !

Approving but let's try to complete the reviewer checklist in the PR description going forward.

@georgeweiler georgeweiler added this pull request to the merge queue Feb 13, 2026
Merged via the queue into main with commit 6f64703 Feb 13, 2026
302 checks passed
@georgeweiler georgeweiler deleted the ramps-provider-widget-url branch February 13, 2026 19:59
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