Skip to content

feat(swaps): track input primary denomination#9147

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

feat(swaps): track input primary denomination#9147
bfullam wants to merge 24 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

Low Risk
Mostly additive state, analytics, and optional submit parameters; no auth or transaction logic changes beyond persisting and emitting a new property.

Overview
Adds persisted inputPrimaryDenomination (token_amount | fiat_value) on bridge controller state (default token_amount), exposed via setInputPrimaryDenomination, and threads input_primary_denomination into Unified SwapBridge analytics for page view, quotes requested/received, and related flows.

Introduces Unified SwapBridge Fiat Crypto Toggle Clicked with client-supplied previous/new denomination and token/chain context (including cases before a quote exists). Bridge status accepts denomination at submitTx / submitIntent, stores it on bridge history, and attaches it to Submitted and Completed events. Bumps @metamask/bridge-controller to 75.2.0 and @metamask/bridge-status-controller to 72.2.0.

Reviewed by Cursor Bugbot for commit 2a5ddbf. 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
* This is persisted as a user preference so returning to the flow restores
* the last selected fiat/token display mode.
*/
inputPrimaryDenomination: InputPrimaryDenomination;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The client tests will need to be updated to bump to this version so please publish it as a breaking change

activeAbTests,
tokenSecurityTypeDestination,
undefined,
inputPrimaryDenomination,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Does this need to be added to submitBatchSell too? Since the toggle is not there, we could also use a hardcoded value

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