Skip to content

feat(swaps): track input primary denomination#9147

Open
bfullam wants to merge 30 commits into
mainfrom
swaps/fiat-denomination-analytics
Open

feat(swaps): track input primary denomination#9147
bfullam wants to merge 30 commits into
mainfrom
swaps/fiat-denomination-analytics

Conversation

@bfullam

@bfullam bfullam commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add persisted bridge-controller state for the source input primary denomination (token_amount or fiat_value) and expose it through setInputPrimaryDenomination.
  • Emit input_primary_denomination on Unified SwapBridge page/quote/submission/completion analytics.
  • Add the Unified SwapBridge Fiat Crypto Toggle Clicked event and allow clients to provide selected source/destination chain, token, security, and swap type metadata before a quote request exists.
  • Persist the submit-time denomination in bridge-status history so Submitted and Completed analytics use the denomination selected at submission time.

Test plan

  • yarn workspace @metamask/bridge-controller jest src/bridge-controller.test.ts --coverage=false
  • yarn jest src/bridge-controller.sse.test.ts src/bridge-controller.sse.batch.test.ts --updateSnapshot --coverage=false
  • yarn jest src/bridge-status-controller.test.ts src/bridge-status-controller.intent.test.ts src/utils/history.test.ts src/utils/metrics.test.ts --updateSnapshot --coverage=false
  • NODE_OPTIONS=--experimental-vm-modules yarn jest bridge-controller.test.ts -t "updateBridgeQuoteRequestParams" --runInBand --collectCoverage=false

Note

Medium Risk
Breaking persisted state and new required client wiring for submit APIs; changes are mostly analytics and UX preference with no swap execution logic changes.

Overview
Adds persisted inputPrimaryDenomination (token_amount | fiat_value) on bridge-controller, defaulting to token_amount, with setInputPrimaryDenomination exposed via messenger actions and public exports.

Analytics: input_primary_denomination is attached from controller state on Page Viewed, Quotes Requested/Received, and related quote flows. A new Unified SwapBridge Fiat Crypto Toggle Clicked event is typed and wired; clients can pass previous/new denomination plus token/chain metadata (including before a quote exists).

Post-submit: bridge-status-controller accepts optional inputPrimaryDenomination on submitTx / submitIntent, stores it on bridge history, includes it on Submitted, and on Completed when present in history. Dependent packages bump to bridge-controller ^76.0.0 (marked BREAKING in changelog).

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

@bfullam bfullam requested review from a team as code owners June 16, 2026 13:29
@bfullam bfullam temporarily deployed to default-branch June 16, 2026 13:29 — with GitHub Actions Inactive
@bfullam

bfullam commented Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

bfullam added 2 commits June 16, 2026 14:44
Required when package versions are bumped so the release check passes.
Update downstream bridge-controller dependencies, add coverage for
setInputPrimaryDenomination and FiatCryptoToggleClicked, and align batch
sell submitted-event expectations with input_primary_denomination.
@bfullam bfullam requested a review from a team as a code owner June 16, 2026 13:49
bfullam added 5 commits June 16, 2026 14:53
Fold setInputPrimaryDenomination coverage into the toggle event test and
drop the redundant history omit assertion while keeping thresholds green.
Add 75.2.0 and 72.2.0 version sections, link feature entries to the PR,
and document downstream bridge package dependency bumps.
The github-tools changelog check validates Unreleased when package.json
only has a version bump; keep the 75.2.0 section for auto-changelog too.
Merge main, bump root to 1047.0.0, fix changelog footer links and keep
transaction-pay bridge dependency bumps in Unreleased, and format types.ts.
@bfullam

bfullam commented Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

Preview publish runs yarn install with immutable lockfile validation, which
failed because package.json dependency ranges were bumped without updating
yarn.lock.
@bfullam

bfullam commented Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

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.2-preview-be04faa3e
@metamask-previews/accounts-controller@39.0.1-preview-be04faa3e
@metamask-previews/address-book-controller@7.1.2-preview-be04faa3e
@metamask-previews/ai-controllers@0.7.0-preview-be04faa3e
@metamask-previews/analytics-controller@1.1.1-preview-be04faa3e
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-be04faa3e
@metamask-previews/announcement-controller@8.1.0-preview-be04faa3e
@metamask-previews/app-metadata-controller@2.0.1-preview-be04faa3e
@metamask-previews/approval-controller@9.0.2-preview-be04faa3e
@metamask-previews/assets-controller@9.0.1-preview-be04faa3e
@metamask-previews/assets-controllers@109.1.0-preview-be04faa3e
@metamask-previews/authenticated-user-storage@2.0.0-preview-be04faa3e
@metamask-previews/base-controller@9.1.0-preview-be04faa3e
@metamask-previews/base-data-service@0.1.3-preview-be04faa3e
@metamask-previews/bridge-controller@75.2.0-preview-be04faa3e
@metamask-previews/bridge-status-controller@72.2.0-preview-be04faa3e
@metamask-previews/build-utils@3.0.4-preview-be04faa3e
@metamask-previews/chain-agnostic-permission@1.6.2-preview-be04faa3e
@metamask-previews/chomp-api-service@3.1.0-preview-be04faa3e
@metamask-previews/claims-controller@0.5.3-preview-be04faa3e
@metamask-previews/client-controller@1.0.1-preview-be04faa3e
@metamask-previews/compliance-controller@2.1.0-preview-be04faa3e
@metamask-previews/composable-controller@12.0.1-preview-be04faa3e
@metamask-previews/config-registry-controller@0.4.1-preview-be04faa3e
@metamask-previews/connectivity-controller@0.2.0-preview-be04faa3e
@metamask-previews/controller-utils@12.2.0-preview-be04faa3e
@metamask-previews/core-backend@6.3.3-preview-be04faa3e
@metamask-previews/delegation-controller@3.0.2-preview-be04faa3e
@metamask-previews/earn-controller@12.2.0-preview-be04faa3e
@metamask-previews/eip-5792-middleware@3.0.4-preview-be04faa3e
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-be04faa3e
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-be04faa3e
@metamask-previews/ens-controller@19.1.3-preview-be04faa3e
@metamask-previews/eth-block-tracker@15.0.1-preview-be04faa3e
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-be04faa3e
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-be04faa3e
@metamask-previews/foundryup@1.0.1-preview-be04faa3e
@metamask-previews/gas-fee-controller@26.2.2-preview-be04faa3e
@metamask-previews/gator-permissions-controller@4.2.0-preview-be04faa3e
@metamask-previews/geolocation-controller@0.1.3-preview-be04faa3e
@metamask-previews/json-rpc-engine@10.5.0-preview-be04faa3e
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-be04faa3e
@metamask-previews/keyring-controller@27.1.0-preview-be04faa3e
@metamask-previews/logging-controller@8.0.2-preview-be04faa3e
@metamask-previews/message-manager@14.1.2-preview-be04faa3e
@metamask-previews/messenger@1.2.0-preview-be04faa3e
@metamask-previews/messenger-cli@0.2.0-preview-be04faa3e
@metamask-previews/money-account-balance-service@2.0.0-preview-be04faa3e
@metamask-previews/money-account-controller@0.3.3-preview-be04faa3e
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-be04faa3e
@metamask-previews/multichain-account-service@10.0.3-preview-be04faa3e
@metamask-previews/multichain-api-middleware@3.1.4-preview-be04faa3e
@metamask-previews/multichain-network-controller@3.1.3-preview-be04faa3e
@metamask-previews/multichain-transactions-controller@7.1.1-preview-be04faa3e
@metamask-previews/name-controller@9.1.2-preview-be04faa3e
@metamask-previews/network-controller@32.0.0-preview-be04faa3e
@metamask-previews/network-enablement-controller@5.3.0-preview-be04faa3e
@metamask-previews/notification-services-controller@24.1.3-preview-be04faa3e
@metamask-previews/passkey-controller@2.0.1-preview-be04faa3e
@metamask-previews/permission-controller@13.1.1-preview-be04faa3e
@metamask-previews/permission-log-controller@5.1.0-preview-be04faa3e
@metamask-previews/perps-controller@8.1.0-preview-be04faa3e
@metamask-previews/phishing-controller@17.2.0-preview-be04faa3e
@metamask-previews/polling-controller@16.0.6-preview-be04faa3e
@metamask-previews/preferences-controller@23.1.0-preview-be04faa3e
@metamask-previews/profile-metrics-controller@3.2.0-preview-be04faa3e
@metamask-previews/profile-sync-controller@28.2.0-preview-be04faa3e
@metamask-previews/ramps-controller@14.2.0-preview-be04faa3e
@metamask-previews/rate-limit-controller@7.0.1-preview-be04faa3e
@metamask-previews/react-data-query@0.2.1-preview-be04faa3e
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-be04faa3e
@metamask-previews/sample-controllers@5.0.1-preview-be04faa3e
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-be04faa3e
@metamask-previews/selected-network-controller@26.1.3-preview-be04faa3e
@metamask-previews/shield-controller@5.1.2-preview-be04faa3e
@metamask-previews/signature-controller@39.2.5-preview-be04faa3e
@metamask-previews/smart-transactions-controller@24.2.1-preview-be04faa3e
@metamask-previews/snap-account-service@0.3.1-preview-be04faa3e
@metamask-previews/social-controllers@2.3.0-preview-be04faa3e
@metamask-previews/storage-service@1.0.2-preview-be04faa3e
@metamask-previews/subscription-controller@6.2.0-preview-be04faa3e
@metamask-previews/transaction-controller@68.0.0-preview-be04faa3e
@metamask-previews/transaction-pay-controller@23.8.0-preview-be04faa3e
@metamask-previews/user-operation-controller@41.2.4-preview-be04faa3e
@metamask-previews/wallet@3.0.0-preview-be04faa3e
@metamask-previews/wallet-cli@0.0.0-preview-be04faa3e

@bfullam

bfullam commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

1 similar comment
@bfullam

bfullam commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@bfullam bfullam force-pushed the swaps/fiat-denomination-analytics branch from 61cf50a to 40b61a6 Compare June 17, 2026 10:40
@bfullam

bfullam commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@github-actions

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.2-preview-5588db68c
@metamask-previews/accounts-controller@39.0.1-preview-5588db68c
@metamask-previews/address-book-controller@7.1.2-preview-5588db68c
@metamask-previews/ai-controllers@0.7.0-preview-5588db68c
@metamask-previews/analytics-controller@1.1.1-preview-5588db68c
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-5588db68c
@metamask-previews/announcement-controller@8.1.0-preview-5588db68c
@metamask-previews/app-metadata-controller@2.0.1-preview-5588db68c
@metamask-previews/approval-controller@9.0.2-preview-5588db68c
@metamask-previews/assets-controller@9.0.1-preview-5588db68c
@metamask-previews/assets-controllers@109.1.0-preview-5588db68c
@metamask-previews/authenticated-user-storage@2.0.0-preview-5588db68c
@metamask-previews/base-controller@9.1.0-preview-5588db68c
@metamask-previews/base-data-service@0.1.3-preview-5588db68c
@metamask-previews/bridge-controller@75.2.0-preview-5588db68c
@metamask-previews/bridge-status-controller@72.2.0-preview-5588db68c
@metamask-previews/build-utils@3.0.4-preview-5588db68c
@metamask-previews/chain-agnostic-permission@1.6.2-preview-5588db68c
@metamask-previews/chomp-api-service@3.1.0-preview-5588db68c
@metamask-previews/claims-controller@0.5.3-preview-5588db68c
@metamask-previews/client-controller@1.0.1-preview-5588db68c
@metamask-previews/compliance-controller@2.1.0-preview-5588db68c
@metamask-previews/composable-controller@12.0.1-preview-5588db68c
@metamask-previews/config-registry-controller@0.4.1-preview-5588db68c
@metamask-previews/connectivity-controller@0.2.0-preview-5588db68c
@metamask-previews/controller-utils@12.2.0-preview-5588db68c
@metamask-previews/core-backend@6.3.3-preview-5588db68c
@metamask-previews/delegation-controller@3.0.2-preview-5588db68c
@metamask-previews/earn-controller@12.2.0-preview-5588db68c
@metamask-previews/eip-5792-middleware@3.0.4-preview-5588db68c
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-5588db68c
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-5588db68c
@metamask-previews/ens-controller@19.1.3-preview-5588db68c
@metamask-previews/eth-block-tracker@15.0.1-preview-5588db68c
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-5588db68c
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-5588db68c
@metamask-previews/foundryup@1.0.1-preview-5588db68c
@metamask-previews/gas-fee-controller@26.2.2-preview-5588db68c
@metamask-previews/gator-permissions-controller@4.2.0-preview-5588db68c
@metamask-previews/geolocation-controller@0.1.3-preview-5588db68c
@metamask-previews/json-rpc-engine@10.5.0-preview-5588db68c
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-5588db68c
@metamask-previews/keyring-controller@27.1.0-preview-5588db68c
@metamask-previews/logging-controller@8.0.2-preview-5588db68c
@metamask-previews/message-manager@14.1.2-preview-5588db68c
@metamask-previews/messenger@1.2.0-preview-5588db68c
@metamask-previews/messenger-cli@0.2.0-preview-5588db68c
@metamask-previews/money-account-balance-service@2.0.0-preview-5588db68c
@metamask-previews/money-account-controller@0.3.3-preview-5588db68c
@metamask-previews/money-account-upgrade-controller@2.0.5-preview-5588db68c
@metamask-previews/multichain-account-service@10.0.3-preview-5588db68c
@metamask-previews/multichain-api-middleware@3.1.4-preview-5588db68c
@metamask-previews/multichain-network-controller@3.1.3-preview-5588db68c
@metamask-previews/multichain-transactions-controller@7.1.1-preview-5588db68c
@metamask-previews/name-controller@9.1.2-preview-5588db68c
@metamask-previews/network-controller@32.0.0-preview-5588db68c
@metamask-previews/network-enablement-controller@5.3.0-preview-5588db68c
@metamask-previews/notification-services-controller@24.1.3-preview-5588db68c
@metamask-previews/passkey-controller@2.0.1-preview-5588db68c
@metamask-previews/permission-controller@13.1.1-preview-5588db68c
@metamask-previews/permission-log-controller@5.1.0-preview-5588db68c
@metamask-previews/perps-controller@8.1.0-preview-5588db68c
@metamask-previews/phishing-controller@17.2.0-preview-5588db68c
@metamask-previews/polling-controller@16.0.6-preview-5588db68c
@metamask-previews/preferences-controller@23.1.0-preview-5588db68c
@metamask-previews/profile-metrics-controller@3.2.0-preview-5588db68c
@metamask-previews/profile-sync-controller@28.2.0-preview-5588db68c
@metamask-previews/ramps-controller@14.2.0-preview-5588db68c
@metamask-previews/rate-limit-controller@7.0.1-preview-5588db68c
@metamask-previews/react-data-query@0.2.1-preview-5588db68c
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-5588db68c
@metamask-previews/sample-controllers@5.0.1-preview-5588db68c
@metamask-previews/seedless-onboarding-controller@10.0.2-preview-5588db68c
@metamask-previews/selected-network-controller@26.1.3-preview-5588db68c
@metamask-previews/shield-controller@5.1.2-preview-5588db68c
@metamask-previews/signature-controller@39.2.5-preview-5588db68c
@metamask-previews/smart-transactions-controller@24.2.1-preview-5588db68c
@metamask-previews/snap-account-service@0.3.1-preview-5588db68c
@metamask-previews/social-controllers@2.3.1-preview-5588db68c
@metamask-previews/storage-service@1.0.2-preview-5588db68c
@metamask-previews/subscription-controller@6.2.0-preview-5588db68c
@metamask-previews/transaction-controller@68.0.0-preview-5588db68c
@metamask-previews/transaction-pay-controller@23.8.0-preview-5588db68c
@metamask-previews/user-operation-controller@41.2.4-preview-5588db68c
@metamask-previews/wallet@3.0.0-preview-5588db68c
@metamask-previews/wallet-cli@0.0.0-preview-5588db68c

Comment thread packages/bridge-controller/src/bridge-controller.ts Outdated

@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 4e6f05e. Configure here.

Comment thread packages/bridge-status-controller/src/bridge-status-controller.ts
Comment thread packages/bridge-controller/src/types.ts
Comment thread packages/bridge-status-controller/src/bridge-status-controller.ts
@bfullam bfullam enabled auto-merge June 22, 2026 11:05
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.

3 participants