From 59032578d13497c2d912a1a7c1f96294887dc1bb Mon Sep 17 00:00:00 2001 From: rarquevaux Date: Thu, 8 Jan 2026 14:50:23 -0800 Subject: [PATCH] feat(bridge-controller): add has_gas_included_quote and usd_balance_source to QuotesReceived event --- eslint-suppressions.json | 2 +- packages/bridge-controller/CHANGELOG.md | 5 +++++ .../src/__snapshots__/bridge-controller.test.ts.snap | 9 +++++++++ packages/bridge-controller/src/bridge-controller.test.ts | 3 +++ packages/bridge-controller/src/bridge-controller.ts | 3 +++ .../src/utils/metrics/properties.test.ts | 1 + .../bridge-controller/src/utils/metrics/properties.ts | 2 ++ packages/bridge-controller/src/utils/metrics/types.ts | 2 ++ .../__snapshots__/bridge-status-controller.test.ts.snap | 1 + 9 files changed, 27 insertions(+), 1 deletion(-) diff --git a/eslint-suppressions.json b/eslint-suppressions.json index 9fafda276e0..91bde59f4f6 100644 --- a/eslint-suppressions.json +++ b/eslint-suppressions.json @@ -687,7 +687,7 @@ }, "packages/bridge-controller/src/utils/metrics/types.ts": { "@typescript-eslint/naming-convention": { - "count": 81 + "count": 83 } }, "packages/bridge-controller/src/utils/quote-fees.ts": { diff --git a/packages/bridge-controller/CHANGELOG.md b/packages/bridge-controller/CHANGELOG.md index 08db08dae39..20d273442b6 100644 --- a/packages/bridge-controller/CHANGELOG.md +++ b/packages/bridge-controller/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add `has_gas_included_quote` property to `QuoteFetchData` type and compute it in `QuotesReceived` event to indicate if any received quote has gas included ([#7611](https://github.com/MetaMask/core/pull/7611)) +- Add optional `usd_balance_source` property to `QuotesReceived` event and `getQuotesReceivedProperties` utility to allow clients to pass the source token balance in USD ([#7611](https://github.com/MetaMask/core/pull/7611)) + ## [64.4.1] ### Changed diff --git a/packages/bridge-controller/src/__snapshots__/bridge-controller.test.ts.snap b/packages/bridge-controller/src/__snapshots__/bridge-controller.test.ts.snap index b2dd8b7993b..f8441e5766b 100644 --- a/packages/bridge-controller/src/__snapshots__/bridge-controller.test.ts.snap +++ b/packages/bridge-controller/src/__snapshots__/bridge-controller.test.ts.snap @@ -105,6 +105,7 @@ Array [ "error_message": "error_message", "gas_included": false, "gas_included_7702": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_hardware_wallet": false, "price_impact": 0, @@ -141,6 +142,7 @@ Array [ "error_message": "Failed to submit tx", "gas_included": false, "gas_included_7702": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_hardware_wallet": false, "price_impact": 12, @@ -219,6 +221,7 @@ Array [ "chain_id_source": "eip155:1", "custom_slippage": false, "gas_included": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_hardware_wallet": false, "price_impact": 6, @@ -248,6 +251,7 @@ Array [ "chain_id_source": "eip155:1", "custom_slippage": false, "gas_included": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_hardware_wallet": false, "price_impact": 6, @@ -349,6 +353,7 @@ Array [ "custom_slippage": false, "gas_included": false, "gas_included_7702": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_best_quote": true, "is_hardware_wallet": false, @@ -390,6 +395,7 @@ Array [ "custom_slippage": false, "gas_included": false, "gas_included_7702": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 0, "is_hardware_wallet": false, "price_impact": 0, @@ -402,6 +408,7 @@ Array [ "swap_type": "crosschain", "token_address_destination": null, "token_address_source": "eip155:1/slip44:60", + "usd_balance_source": 0, "usd_quoted_gas": 0, "usd_quoted_return": 100, "warnings": Array [ @@ -478,6 +485,7 @@ Array [ "custom_slippage": true, "gas_included": false, "gas_included_7702": false, + "has_gas_included_quote": false, "initial_load_time_all_quotes": 11000, "is_hardware_wallet": false, "price_impact": 0, @@ -493,6 +501,7 @@ Array [ "swap_type": "crosschain", "token_address_destination": "eip155:10/erc20:0x123", "token_address_source": "eip155:1/slip44:60", + "usd_balance_source": 0, "usd_quoted_gas": 0, "usd_quoted_return": 100, "warnings": Array [ diff --git a/packages/bridge-controller/src/bridge-controller.test.ts b/packages/bridge-controller/src/bridge-controller.test.ts index 545c045de33..5c4c4c21e39 100644 --- a/packages/bridge-controller/src/bridge-controller.test.ts +++ b/packages/bridge-controller/src/bridge-controller.test.ts @@ -1116,6 +1116,7 @@ describe('BridgeController', function () { provider: 'provider_bridge', best_quote_provider: 'provider_bridge2', can_submit: true, + usd_balance_source: 0, }, ); @@ -2366,6 +2367,7 @@ describe('BridgeController', function () { provider: 'provider_bridge', best_quote_provider: 'provider_bridge2', can_submit: true, + usd_balance_source: 0, }, ); expect(messengerMock.call.mock.calls).toMatchSnapshot(); @@ -2669,6 +2671,7 @@ describe('BridgeController', function () { provider: 'provider_bridge', best_quote_provider: 'provider_bridge2', can_submit: true, + usd_balance_source: 0, }, ); expect(trackMetaMetricsFn).toHaveBeenCalledTimes(0); diff --git a/packages/bridge-controller/src/bridge-controller.ts b/packages/bridge-controller/src/bridge-controller.ts index 56c620b2e95..b968037fd1a 100644 --- a/packages/bridge-controller/src/bridge-controller.ts +++ b/packages/bridge-controller/src/bridge-controller.ts @@ -867,6 +867,9 @@ export class BridgeController extends StaticIntervalPollingController quote.gasIncluded, + ), }; }; diff --git a/packages/bridge-controller/src/utils/metrics/properties.test.ts b/packages/bridge-controller/src/utils/metrics/properties.test.ts index fd47f58f684..3f8202d69de 100644 --- a/packages/bridge-controller/src/utils/metrics/properties.test.ts +++ b/packages/bridge-controller/src/utils/metrics/properties.test.ts @@ -368,6 +368,7 @@ describe('properties', () => { "price_impact": 0, "provider": "bridge1_bridge1", "quoted_time_minutes": 1, + "usd_balance_source": 0, "usd_quoted_gas": 0, "usd_quoted_return": 0, "warnings": Array [], diff --git a/packages/bridge-controller/src/utils/metrics/properties.ts b/packages/bridge-controller/src/utils/metrics/properties.ts index d25b700ffac..8f3ee9afe4d 100644 --- a/packages/bridge-controller/src/utils/metrics/properties.ts +++ b/packages/bridge-controller/src/utils/metrics/properties.ts @@ -127,6 +127,7 @@ export const getQuotesReceivedProperties = ( warnings: QuoteWarning[] = [], isSubmittable: boolean = true, recommendedQuote?: null | (QuoteResponse & Partial), + usdBalanceSource?: number, ) => { const provider = activeQuote ? formatProviderLabel(activeQuote.quote) : '_'; return { @@ -138,6 +139,7 @@ export const getQuotesReceivedProperties = ( : 0, usd_quoted_gas: Number(activeQuote?.gasFee?.effective?.usd ?? 0), usd_quoted_return: Number(activeQuote?.toTokenAmount?.usd ?? 0), + usd_balance_source: usdBalanceSource ?? 0, best_quote_provider: recommendedQuote ? formatProviderLabel(recommendedQuote.quote) : provider, diff --git a/packages/bridge-controller/src/utils/metrics/types.ts b/packages/bridge-controller/src/utils/metrics/types.ts index a149d721e35..fe6c7a0ef40 100644 --- a/packages/bridge-controller/src/utils/metrics/types.ts +++ b/packages/bridge-controller/src/utils/metrics/types.ts @@ -37,6 +37,7 @@ export type QuoteFetchData = { quotes_list: `${string}_${string}`[]; initial_load_time_all_quotes: number; price_impact: number; + has_gas_included_quote: boolean; }; export type TradeData = { @@ -117,6 +118,7 @@ export type RequiredEventContextFromClient = { best_quote_provider: QuoteFetchData['best_quote_provider']; price_impact: QuoteFetchData['price_impact']; can_submit: QuoteFetchData['can_submit']; + usd_balance_source?: number; }; [UnifiedSwapBridgeEventName.QuotesError]: Pick< RequestMetadata, diff --git a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap index df0f8dcb6db..a3a47e29fa4 100644 --- a/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap +++ b/packages/bridge-status-controller/src/__snapshots__/bridge-status-controller.test.ts.snap @@ -1304,6 +1304,7 @@ Array [ "price_impact": 0, "provider": "lifi_across", "quoted_time_minutes": 0.25, + "usd_balance_source": 0, "usd_quoted_gas": 2.5778, "usd_quoted_return": 0.134214, "warnings": Array [