Skip to content

feat: use QuoteResponse V2 in bridge-controller - #9726

Open
micaelae wants to merge 19 commits into
swaps4546-v2-metadatafrom
swaps4546-v2-controller-update
Open

feat: use QuoteResponse V2 in bridge-controller#9726
micaelae wants to merge 19 commits into
swaps4546-v2-metadatafrom
swaps4546-v2-controller-update

Conversation

@micaelae

@micaelae micaelae commented Jul 31, 2026

Copy link
Copy Markdown
Member

Explanation

Store and consume QuoteResponse v2 in the bridge-controller. Implements v1<>v2 coercers and metadata merge logic for client and controller compatibility during migration. See changelogs for more details

Draft client PRs

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

High Risk
Breaking type and behavior changes across quote fetching, fee attachment, selectors, and tx submission paths for unified swap/bridge and batch-sell; consumers must adopt V2 or use coercers.

Overview
BREAKING: BridgeController state, quote streaming, and public QuoteResponse typing now use QuoteResponse V2 (V1 remains as QuoteResponseV1). Incoming SSE/API payloads are coerced with toQuoteResponseV2; batch gasless calls still post V1 via toQuoteResponseV1.

appendFeesToQuotes now takes a CAIP chainId first and skips fee enrichment when a fetch has multiple source chains. Selectors, metrics, and batch-sell rollups are updated for the V2 quote shape (quote.src / quote.dest, top-level chainId, sumAmounts for totals).

bridge-status-controller submitTx / submitIntent / submitBatchSell accept V2 quotes from clients but normalize to V1 before internal submission and history.

Reviewed by Cursor Bugbot for commit 2d0732a. Bugbot is set up for automated code reviews on this repo. Configure here.

@micaelae
micaelae changed the base branch from swaps4546-v2-coercers to swaps4546-v2-metadata July 31, 2026 04:06
@micaelae

micaelae commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@micaelae micaelae changed the title Swaps4546 v2 controller update feat: use QuoteResponse V2 in bridge-controller and bridge-status-controller Aug 3, 2026
@micaelae

micaelae commented Aug 3, 2026

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.5-preview-60e0d4cd3
@metamask-previews/accounts-controller@39.0.6-preview-60e0d4cd3
@metamask-previews/address-book-controller@7.1.2-preview-60e0d4cd3
@metamask-previews/ai-controllers@0.8.0-preview-60e0d4cd3
@metamask-previews/analytics-controller@2.0.0-preview-60e0d4cd3
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-60e0d4cd3
@metamask-previews/announcement-controller@8.1.0-preview-60e0d4cd3
@metamask-previews/app-metadata-controller@2.0.1-preview-60e0d4cd3
@metamask-previews/approval-controller@9.0.2-preview-60e0d4cd3
@metamask-previews/assets-controller@13.1.0-preview-60e0d4cd3
@metamask-previews/assets-controllers@110.1.0-preview-60e0d4cd3
@metamask-previews/authenticated-user-storage@3.0.1-preview-60e0d4cd3
@metamask-previews/base-controller@9.1.0-preview-60e0d4cd3
@metamask-previews/base-data-service@0.1.3-preview-60e0d4cd3
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-60e0d4cd3
@metamask-previews/bridge-controller@78.0.3-preview-60e0d4cd3
@metamask-previews/bridge-status-controller@74.6.1-preview-60e0d4cd3
@metamask-previews/build-utils@3.0.4-preview-60e0d4cd3
@metamask-previews/chain-agnostic-permission@1.7.0-preview-60e0d4cd3
@metamask-previews/chomp-api-service@4.0.0-preview-60e0d4cd3
@metamask-previews/claims-controller@0.5.3-preview-60e0d4cd3
@metamask-previews/client-controller@1.0.1-preview-60e0d4cd3
@metamask-previews/client-utils@1.5.0-preview-60e0d4cd3
@metamask-previews/compliance-controller@2.1.0-preview-60e0d4cd3
@metamask-previews/composable-controller@12.0.1-preview-60e0d4cd3
@metamask-previews/config-registry-controller@2.0.0-preview-60e0d4cd3
@metamask-previews/connectivity-controller@0.3.0-preview-60e0d4cd3
@metamask-previews/controller-utils@12.3.0-preview-60e0d4cd3
@metamask-previews/core-backend@8.1.0-preview-60e0d4cd3
@metamask-previews/delegation-controller@3.0.2-preview-60e0d4cd3
@metamask-previews/earn-controller@12.2.3-preview-60e0d4cd3
@metamask-previews/eip-5792-middleware@3.0.5-preview-60e0d4cd3
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-60e0d4cd3
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-60e0d4cd3
@metamask-previews/ens-controller@19.1.6-preview-60e0d4cd3
@metamask-previews/eth-block-tracker@15.0.1-preview-60e0d4cd3
@metamask-previews/eth-json-rpc-middleware@24.0.0-preview-60e0d4cd3
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-60e0d4cd3
@metamask-previews/foundryup@1.0.1-preview-60e0d4cd3
@metamask-previews/gas-fee-controller@26.3.1-preview-60e0d4cd3
@metamask-previews/gator-permissions-controller@5.0.1-preview-60e0d4cd3
@metamask-previews/geolocation-controller@1.0.0-preview-60e0d4cd3
@metamask-previews/java-tron-up@1.0.0-preview-60e0d4cd3
@metamask-previews/json-rpc-engine@10.5.0-preview-60e0d4cd3
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-60e0d4cd3
@metamask-previews/keyring-controller@27.1.0-preview-60e0d4cd3
@metamask-previews/local-node-utils@1.0.0-preview-60e0d4cd3
@metamask-previews/logging-controller@8.0.2-preview-60e0d4cd3
@metamask-previews/message-manager@14.1.2-preview-60e0d4cd3
@metamask-previews/messenger@2.0.0-preview-60e0d4cd3
@metamask-previews/messenger-cli@0.2.0-preview-60e0d4cd3
@metamask-previews/money-account-api-data-service@0.4.0-preview-60e0d4cd3
@metamask-previews/money-account-balance-service@2.4.1-preview-60e0d4cd3
@metamask-previews/money-account-controller@0.3.3-preview-60e0d4cd3
@metamask-previews/money-account-upgrade-controller@3.0.1-preview-60e0d4cd3
@metamask-previews/money-account-utils@1.1.0-preview-60e0d4cd3
@metamask-previews/multichain-account-service@13.0.0-preview-60e0d4cd3
@metamask-previews/multichain-api-middleware@4.0.2-preview-60e0d4cd3
@metamask-previews/multichain-network-controller@3.2.2-preview-60e0d4cd3
@metamask-previews/multichain-transactions-controller@7.1.1-preview-60e0d4cd3
@metamask-previews/name-controller@9.1.2-preview-60e0d4cd3
@metamask-previews/network-connection-banner-controller@0.1.2-preview-60e0d4cd3
@metamask-previews/network-controller@35.0.1-preview-60e0d4cd3
@metamask-previews/network-enablement-controller@6.0.2-preview-60e0d4cd3
@metamask-previews/notification-services-controller@26.0.0-preview-60e0d4cd3
@metamask-previews/passkey-controller@3.0.0-preview-60e0d4cd3
@metamask-previews/permission-controller@13.1.1-preview-60e0d4cd3
@metamask-previews/permission-log-controller@5.1.0-preview-60e0d4cd3
@metamask-previews/perps-controller@10.0.0-preview-60e0d4cd3
@metamask-previews/phishing-controller@17.3.1-preview-60e0d4cd3
@metamask-previews/platform-api-docs@0.0.0-preview-60e0d4cd3
@metamask-previews/polling-controller@16.0.9-preview-60e0d4cd3
@metamask-previews/preferences-controller@23.1.0-preview-60e0d4cd3
@metamask-previews/profile-metrics-controller@4.0.2-preview-60e0d4cd3
@metamask-previews/profile-sync-controller@28.3.0-preview-60e0d4cd3
@metamask-previews/ramps-controller@18.0.1-preview-60e0d4cd3
@metamask-previews/rate-limit-controller@7.0.1-preview-60e0d4cd3
@metamask-previews/react-data-query@0.2.2-preview-60e0d4cd3
@metamask-previews/remote-feature-flag-controller@5.0.0-preview-60e0d4cd3
@metamask-previews/sample-controllers@5.0.4-preview-60e0d4cd3
@metamask-previews/seedless-onboarding-controller@10.1.0-preview-60e0d4cd3
@metamask-previews/selected-network-controller@26.1.6-preview-60e0d4cd3
@metamask-previews/sentinel-api-service@1.0.0-preview-60e0d4cd3
@metamask-previews/shield-controller@5.1.3-preview-60e0d4cd3
@metamask-previews/signature-controller@39.2.9-preview-60e0d4cd3
@metamask-previews/smart-transactions-controller@25.0.2-preview-60e0d4cd3
@metamask-previews/snap-account-service@2.1.1-preview-60e0d4cd3
@metamask-previews/social-controllers@2.7.0-preview-60e0d4cd3
@metamask-previews/solana-test-validator-up@1.0.0-preview-60e0d4cd3
@metamask-previews/stellar-quickstart-up@0.0.0-preview-60e0d4cd3
@metamask-previews/storage-service@1.0.2-preview-60e0d4cd3
@metamask-previews/subscription-controller@6.2.1-preview-60e0d4cd3
@metamask-previews/transaction-controller@69.4.0-preview-60e0d4cd3
@metamask-previews/transaction-pay-controller@26.2.0-preview-60e0d4cd3
@metamask-previews/user-operation-controller@41.2.8-preview-60e0d4cd3
@metamask-previews/wallet@9.0.0-preview-60e0d4cd3
@metamask-previews/wallet-cli@0.0.0-preview-60e0d4cd3

@micaelae micaelae changed the title feat: use QuoteResponse V2 in bridge-controller and bridge-status-controller feat: use QuoteResponse V2 in bridge-controller Aug 4, 2026
@micaelae
micaelae marked this pull request as ready for review August 4, 2026 16:38
@micaelae
micaelae requested review from a team as code owners August 4, 2026 16:38
Comment thread packages/bridge-controller/src/selectors.ts

@cursor cursor Bot left a comment

Copy link
Copy Markdown

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.

Fix All in Cursor

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

Reviewed by Cursor Bugbot for commit 2d0732a. Configure here.

QuoteStreamCompleteReason,
} from './validators/quote-stream-complete.js';
export { BatchSellTransactionType } from './validators/batch-sell.js';
export { type AmountsAndAssetSchema } from './validators/amount-and-asset.js';

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Schema exported as type-only

Medium Severity

AmountsAndAssetSchema is a runtime Superstruct schema, but it is exported with type, so importers only get a type and cannot use the schema for validation at runtime. Sibling schemas like BridgeAssetSchema are exported as values.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 2d0732a. Configure here.

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