@metamask-previews/bridge-controller 83.1.4-preview-0f61514 → 83.1.4-preview-0095f3485

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-controller.d.ts","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge-controller.d.ts","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,6 @@ import { BRIDGE_FEATURE_ID_TO_FEATURE_TAG, TraceName, } from './constants/traces
13
13
  import { RequestStatus } from './types.js';
14
14
  import { getAssetIdsForToken, toExchangeRates } from './utils/assets.js';
15
15
  import { hasSufficientBalance } from './utils/balance.js';
16
- import { getAccountByAddress } from './utils/controllers/accounts.js';
17
16
  import { getDefaultBridgeControllerState, isCrossChain, isEthUsdt, isNonEvmChainId, isSolanaChainId, } from './utils/bridge.js';
18
17
  import { formatAddressToCaipReference, formatChainIdToCaip, formatChainIdToHex, } from './utils/caip-formatters.js';
19
18
  import { getBridgeFeatureFlags, hasMinimumRequiredVersion, } from './utils/feature-flags.js';
@@ -25,7 +24,6 @@ import { appendFeesToQuotes } from './utils/quote-fees.js';
25
24
  import { getMinimumBalanceForRentExemptionInLamports } from './utils/snaps.js';
26
25
  import { sortQuotes } from './utils/sort-quotes.js';
27
26
  import { isValidQuoteRequest, isValidBatchSellQuoteRequest, } from './validators/quote-request.js';
28
- import { getNetworkClientByChainId } from './utils/controllers/network.js';
29
27
  const metadata = {
30
28
  quoteRequest: {
31
29
  includeInStateLogs: true,
@@ -361,7 +359,7 @@ export class BridgeController extends StaticIntervalPollingController() {
361
359
  #hasInsufficientBalance = async (quoteRequest) => {
362
360
  try {
363
361
  const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);
364
- const provider = getNetworkClientByChainId(this.messenger, srcChainIdInHex)?.provider;
362
+ const provider = this.#getNetworkClientByChainId(srcChainIdInHex)?.provider;
365
363
  const normalizedSrcTokenAddress = formatAddressToCaipReference(quoteRequest.srcTokenAddress);
366
364
  return !(provider &&
367
365
  normalizedSrcTokenAddress &&
@@ -379,7 +377,7 @@ export class BridgeController extends StaticIntervalPollingController() {
379
377
  const isSrcChainNonEVM = isNonEvmChainId(quoteRequest.srcChainId);
380
378
  const providerConfig = isSrcChainNonEVM
381
379
  ? undefined
382
- : getNetworkClientByChainId(this.messenger, formatChainIdToHex(quoteRequest.srcChainId))?.configuration;
380
+ : this.#getNetworkClientByChainId(formatChainIdToHex(quoteRequest.srcChainId))?.configuration;
383
381
  let insufficientBal;
384
382
  let resetApproval = Boolean(quoteRequest.resetApproval);
385
383
  if (isSrcChainNonEVM) {
@@ -784,9 +782,17 @@ export class BridgeController extends StaticIntervalPollingController() {
784
782
  if (!addressToUse) {
785
783
  throw new Error('Account address is required');
786
784
  }
787
- const selectedAccount = getAccountByAddress(this.messenger, addressToUse);
785
+ const selectedAccount = this.messenger.call('AccountsController:getAccountByAddress', addressToUse);
788
786
  return selectedAccount;
789
787
  }
788
+ #getNetworkClientByChainId(chainId) {
789
+ const networkClientId = this.messenger.call('NetworkController:findNetworkClientIdByChainId', chainId);
790
+ if (!networkClientId) {
791
+ throw new Error(`No network client found for chainId: ${chainId}`);
792
+ }
793
+ const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
794
+ return networkClient;
795
+ }
790
796
  #getJwt = async () => {
791
797
  try {
792
798
  const token = await this.messenger.call('AuthenticationController:getBearerToken');
@@ -1016,7 +1022,8 @@ export class BridgeController extends StaticIntervalPollingController() {
1016
1022
  * @returns The atomic allowance of the ERC20 token contract
1017
1023
  */
1018
1024
  #getUSDTMainnetAllowance = async (walletAddress, contractAddress, destinationChainId) => {
1019
- const provider = getNetworkClientByChainId(this.messenger, CHAIN_IDS.MAINNET)?.provider;
1025
+ const networkClient = this.#getNetworkClientByChainId(CHAIN_IDS.MAINNET);
1026
+ const provider = networkClient?.provider;
1020
1027
  if (!provider) {
1021
1028
  throw new Error('No provider found');
1022
1029
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-controller.js","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider } from '@ethersproject/providers';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { TransactionController } from '@metamask/transaction-controller';\nimport type { CaipAssetType, Hex } from '@metamask/utils';\nimport { v4 as uuid } from 'uuid';\n\nimport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\nimport type { BridgeClientId } from './constants/bridge.js';\nimport {\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_PROD_API_BASE_URL,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_ETHEREUM_ADDRESS,\n REFRESH_INTERVAL_MS,\n} from './constants/bridge.js';\nimport { CHAIN_IDS } from './constants/chains.js';\nimport { SWAPS_CONTRACT_ADDRESSES } from './constants/swaps.js';\nimport {\n BRIDGE_FEATURE_ID_TO_FEATURE_TAG,\n TraceName,\n} from './constants/traces.js';\nimport type { SwapTraceFunction } from './index.js';\nimport { RequestStatus } from './types.js';\nimport type {\n L1GasFees,\n GenericQuoteRequest,\n NonEvmFees,\n QuoteRequest,\n BridgeControllerState,\n BridgeControllerMessenger,\n FetchFunction,\n InputPrimaryDenomination,\n SwapTraceRequest,\n} from './types.js';\nimport { getAssetIdsForToken, toExchangeRates } from './utils/assets.js';\nimport { hasSufficientBalance } from './utils/balance.js';\nimport { getAccountByAddress } from './utils/controllers/accounts.js';\nimport {\n getDefaultBridgeControllerState,\n isCrossChain,\n isEthUsdt,\n isNonEvmChainId,\n isSolanaChainId,\n} from './utils/bridge.js';\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters.js';\nimport {\n getBridgeFeatureFlags,\n hasMinimumRequiredVersion,\n} from './utils/feature-flags.js';\nimport {\n fetchAssetPrices,\n fetchBridgeQuotes,\n fetchBridgeQuoteStream,\n fetchBatchSellTrades,\n} from './utils/fetch.js';\nimport {\n AbortReason,\n BatchSellMetricsEventName,\n FailurePhase,\n MetaMetricsSwapsEventSource,\n MetricsActionType,\n SwapBridgeErrorCode,\n UnifiedSwapBridgeEventName,\n} from './utils/metrics/constants.js';\nimport type {\n BridgeControllerMetricsEventName,\n BridgeControllerMetricsLocation,\n} from './utils/metrics/constants.js';\nimport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\nimport {\n formatProviderLabel,\n getAccountHardwareType,\n getRequestParams,\n getSwapType,\n getSwapTypeFromQuote,\n isCustomSlippage,\n toInputChangedPropertyKey,\n toInputChangedPropertyValue,\n} from './utils/metrics/properties.js';\nimport type {\n QuoteFetchData,\n RequestMetadata,\n RequiredEventContextFromClient,\n} from './utils/metrics/types.js';\nimport type { CrossChainSwapsEventProperties } from './utils/metrics/types.js';\nimport { appendFeesToQuotes } from './utils/quote-fees.js';\nimport { getMinimumBalanceForRentExemptionInLamports } from './utils/snaps.js';\nimport { sortQuotes } from './utils/sort-quotes.js';\nimport type { FeatureId } from './validators/feature-flags.js';\nimport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\nimport type { QuoteResponseV1 } from './validators/quote-response-v1.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\nimport { getNetworkClientByChainId } from './utils/controllers/network.js';\n\nconst metadata: StateMetadata<BridgeControllerState> = {\n quoteRequest: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotes: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesInitialLoadTime: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesLastFetched: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesLoadingStatus: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quoteFetchError: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesRefreshCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n assetExchangeRates: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n minimumBalanceForRentExemptionInLamports: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n tokenWarnings: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n tokenSecurityTypeDestination: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n inputPrimaryDenomination: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quoteStreamComplete: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n batchSellTrades: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n batchSellTradesLoadingStatus: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/**\n * The input to start polling for the {@link BridgeController}\n *\n * @param updatedQuoteRequest - The updated quote request\n * @param context - The context contains properties that can't be populated by the\n * controller and need to be provided by the client for analytics\n */\ntype BridgePollingInput = {\n quoteRequests: GenericQuoteRequest[];\n context: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesError] &\n RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesRequested];\n};\n\ntype QuoteTraceResult = 'success' | 'cancelled' | 'no_quotes' | 'error';\n\nconst QUOTE_ABORT_REASONS = new Set<string>(Object.values(AbortReason));\n\nconst isExpectedQuoteAbort = (\n error: unknown,\n signal?: AbortSignal,\n): boolean => {\n if (signal?.aborted) {\n return true;\n }\n\n if (QUOTE_ABORT_REASONS.has(String(error))) {\n return true;\n }\n\n const errorText =\n error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\n return (\n errorText.includes('AbortError') ||\n errorText.includes('FetchRequestCanceledException')\n );\n};\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'updateBridgeQuoteRequestParams',\n 'fetchQuotes',\n 'updateBatchSellTrades',\n 'stopPollingForQuotes',\n 'setLocation',\n 'getLocation',\n 'setInputPrimaryDenomination',\n 'resetState',\n 'setChainIntervalLength',\n 'trackUnifiedSwapBridgeEvent',\n] as const;\n\nexport class BridgeController extends StaticIntervalPollingController<BridgePollingInput>()<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState,\n BridgeControllerMessenger\n> {\n #abortController: AbortController | undefined;\n\n #batchSellTradesAbortController: AbortController | undefined;\n\n #quotesFirstFetched: number | undefined;\n\n /**\n * Stores the location/entry point from which the user initiated the swap or bridge flow.\n * Set via setLocation() before navigating to the swap/bridge flow.\n * Used as default for all subsequent internal events.\n */\n #location: BridgeControllerMetricsLocation =\n MetaMetricsSwapsEventSource.Unknown;\n\n readonly #clientId: BridgeClientId;\n\n readonly #clientVersion: string;\n\n readonly #getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #trackMetaMetricsFn: <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n properties: CrossChainSwapsEventProperties<EventName>,\n ) => void;\n\n readonly #trace: SwapTraceFunction<TraceName>;\n\n readonly #config: {\n customBridgeApiBaseUrl?: string;\n };\n\n /**\n * Returns whether to use AssetsController for exchange rates.\n * Set via constructor option getUseAssetsControllerForRates; defaults to false.\n *\n * @returns True when exchange rates should be read from AssetsController:getExchangeRatesForBridge.\n */\n readonly #getUseAssetsControllerForRates: () => boolean;\n\n constructor({\n messenger,\n state,\n clientId,\n clientVersion,\n getLayer1GasFee,\n fetchFn,\n config,\n trackMetaMetricsFn,\n traceFn,\n getUseAssetsControllerForRates,\n }: {\n messenger: BridgeControllerMessenger;\n state?: Partial<BridgeControllerState>;\n clientId: BridgeClientId;\n clientVersion: string;\n getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n fetchFn: FetchFunction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n trackMetaMetricsFn: <EventName extends BridgeControllerMetricsEventName>(\n eventName: EventName,\n properties: CrossChainSwapsEventProperties<EventName>,\n ) => void;\n traceFn: SwapTraceFunction<TraceName>;\n /**\n * When provided, called to determine whether to use AssetsController for exchange rates.\n * When true, rates are read from AssetsController:getExchangeRatesForBridge instead of\n * MultichainAssetsRatesController, TokenRatesController, and CurrencyRateController.\n */\n getUseAssetsControllerForRates?: () => boolean;\n }) {\n super({\n name: BRIDGE_CONTROLLER_NAME,\n metadata,\n messenger,\n state: {\n ...getDefaultBridgeControllerState(),\n ...state,\n },\n });\n\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.#abortController = new AbortController();\n this.#getLayer1GasFee = getLayer1GasFee;\n this.#clientId = clientId;\n this.#clientVersion = clientVersion;\n this.#fetchFn = fetchFn;\n this.#trackMetaMetricsFn = trackMetaMetricsFn;\n this.#config = config ?? {};\n this.#trace = traceFn;\n this.#getUseAssetsControllerForRates =\n getUseAssetsControllerForRates ?? (() => false);\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n _executePoll = async (pollingInput: BridgePollingInput) => {\n await this.#fetchBridgeQuotes(pollingInput);\n };\n\n /**\n * Updates the quote request at the specified index with the given parameters, then starts\n * polling for quotes.\n *\n * @param paramsToUpdate - The parameters to update in the quote request at the specified index\n * @param context - metrics context\n * @param quoteRequestIndex - The index of the quote request to update\n * @param quoteRequestCount - The number of quote requests in the UI\n */\n updateBridgeQuoteRequestParams = async (\n paramsToUpdate: Partial<GenericQuoteRequest> & {\n walletAddress: GenericQuoteRequest['walletAddress'];\n },\n context: BridgePollingInput['context'],\n quoteRequestIndex: number = 0,\n quoteRequestCount: number = 1,\n ) => {\n // Guard against updating a quote request that doesn't exist\n if (quoteRequestIndex >= quoteRequestCount) {\n return;\n }\n this.#trackInputChangedEvents(\n paramsToUpdate,\n context.feature_id,\n quoteRequestIndex,\n );\n this.resetState(AbortReason.QuoteRequestUpdated, quoteRequestIndex);\n this.update((state) => {\n // Update only the specified quote request and keep the rest of the quote requests unchanged\n state.quoteRequest = state.quoteRequest\n .slice(0, quoteRequestIndex)\n .concat({\n ...DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0],\n ...paramsToUpdate,\n })\n .concat(\n state.quoteRequest.slice(quoteRequestIndex + 1, quoteRequestCount),\n );\n state.tokenSecurityTypeDestination =\n context.token_security_type_destination ?? null;\n });\n\n // BatchSell and Unified swaps both use the same polling logic so both validations should pass\n if (\n isValidQuoteRequest(paramsToUpdate) &&\n isValidBatchSellQuoteRequest(this.state.quoteRequest)\n ) {\n this.#quotesFirstFetched = Date.now();\n // Update the insufficientBal and resetApproval params for the quote request\n const quoteWithInsufficientBalAndResetApproval =\n await this.#appendInsufficientBalAndResetApproval(paramsToUpdate);\n this.update((state) => {\n state.quoteRequest[quoteRequestIndex] =\n quoteWithInsufficientBalAndResetApproval;\n });\n\n // Set refresh rate based on the source chain before starting polling\n this.setChainIntervalLength();\n this.startPolling({\n quoteRequests: this.state.quoteRequest,\n context,\n });\n }\n };\n\n /**\n * Fetches quotes for specified request without updating the controller state\n * This method does not start polling for quotes and does not emit UnifiedSwapBridge events\n *\n * @param quoteRequest - The parameters for quote requests to fetch\n * @param featureId - The feature ID that maps to quoteParam overrides from LD\n * @param abortSignal - The abort signal to cancel all the requests\n * @returns A list of validated quotes\n */\n fetchQuotes = async (\n quoteRequest: GenericQuoteRequest,\n featureId: FeatureId,\n abortSignal: AbortSignal | null = null,\n ): Promise<(QuoteResponseV1 & L1GasFees & NonEvmFees)[]> => {\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);\n const jwt = await this.#getJwt();\n // If featureId is specified, retrieve the quoteRequestOverrides for that featureId\n const quoteRequestOverrides = featureId\n ? bridgeFeatureFlags.quoteRequestOverrides?.[featureId]\n : undefined;\n const resetApproval = await this.#shouldResetApproval(quoteRequest);\n\n // If quoteRequestOverrides is specified, merge it with the quoteRequest\n const { quotes: baseQuotes, validationFailures } = await fetchBridgeQuotes(\n quoteRequestOverrides\n ? { ...quoteRequest, ...quoteRequestOverrides, resetApproval }\n : { ...quoteRequest, resetApproval },\n abortSignal,\n this.#clientId,\n jwt,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n featureId,\n this.#clientVersion,\n );\n\n this.#trackQuoteValidationFailures(validationFailures, featureId);\n const srcChainIds = Array.from(\n new Set(baseQuotes.map((quote) => quote.quote.srcChainId)),\n ).filter(Boolean);\n\n const quotesWithFees =\n srcChainIds.length > 1 || srcChainIds.length === 0\n ? // Don't append fees if there are multiple srcChainIds\n baseQuotes\n : await appendFeesToQuotes(\n formatChainIdToCaip(srcChainIds[0]),\n baseQuotes,\n this.messenger,\n this.#getLayer1GasFee,\n this.#getMultichainSelectedAccount(quoteRequest.walletAddress),\n );\n\n return sortQuotes(quotesWithFees, featureId);\n };\n\n /**\n * Fetches gasless transaction data and fees for BatchSell quotes.\n * To use this in the clients, add a listener for the recommendedQuotes and call\n * this handler whenever they change.\n *\n * @param quotes - The quotes to fetch the gasless transaction data and fees for\n * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.\n */\n updateBatchSellTrades = async (\n quotes: (QuoteResponse | null)[],\n stxEnabled: boolean,\n ): Promise<void> => {\n this.#batchSellTradesAbortController?.abort(\n AbortReason.GaslessTxBatchFetched,\n );\n this.#batchSellTradesAbortController = new AbortController();\n\n this.update((state) => {\n // Set loading status again if recommended quotes are re-ordered\n state.batchSellTradesLoadingStatus = RequestStatus.LOADING;\n });\n\n try {\n const batchSellTradesResponse = await fetchBatchSellTrades(\n quotes,\n stxEnabled,\n this.#batchSellTradesAbortController.signal,\n this.#clientId,\n await this.#getJwt(),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n this.#clientVersion,\n );\n\n this.update((state) => {\n state.batchSellTrades = batchSellTradesResponse;\n state.batchSellTradesLoadingStatus = RequestStatus.FETCHED;\n });\n\n // TODO if fee.asset.assetId is not in exchange rates, fetch the exchange rate and update the state\n } catch (error) {\n // Ignore abort errors\n if (\n (error as Error).toString().includes('AbortError') ||\n (error as Error).toString().includes('FetchRequestCanceledException') ||\n [\n AbortReason.ResetState,\n AbortReason.NewQuoteRequest,\n AbortReason.QuoteRequestUpdated,\n AbortReason.TransactionSubmitted,\n AbortReason.GaslessTxBatchFetched,\n ].includes(error as AbortReason)\n ) {\n // Exit the function early to prevent other state updates\n return;\n }\n\n this.update((state) => {\n // Reset the batch sell trades if the fetch fails to avoid showing stale data\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n // Update loading status\n state.batchSellTradesLoadingStatus = RequestStatus.ERROR;\n });\n console.log(`Failed to fetch batch sell trades`, error);\n }\n };\n\n readonly #trackQuoteValidationFailures = (\n validationFailures: string[],\n featureId: FeatureId,\n ) => {\n if (validationFailures.length === 0) {\n return;\n }\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesValidationFailed,\n {\n feature_id: featureId,\n failures: validationFailures,\n location: this.#location,\n },\n );\n };\n\n /**\n * Fetches the exchange rates for the assets in the quote request if they are not already in the state\n * In addition to the selected tokens, this also fetches the native asset for the source and destination chains\n *\n * @param quoteRequests - The quote requests to fetch the exchange rates for\n */\n readonly #fetchAssetExchangeRates = async (\n quoteRequests: GenericQuoteRequest[],\n ) => {\n // Get unique assetIds for all quote requests\n const assetIds = new Set<CaipAssetType>(\n quoteRequests.flatMap((quoteRequest) =>\n [\n getAssetIdsForToken(\n quoteRequest.srcTokenAddress,\n quoteRequest.srcChainId,\n ),\n getAssetIdsForToken(\n quoteRequest.destTokenAddress,\n quoteRequest.destChainId,\n ),\n ].flat(),\n ),\n );\n\n const currency = this.#getUseAssetsControllerForRates()\n ? this.messenger.call('AssetsController:getExchangeRatesForBridge')\n .currentCurrency\n : this.messenger.call('CurrencyRateController:getState').currentCurrency;\n\n if (assetIds.size === 0) {\n return;\n }\n\n const pricesByAssetId = await fetchAssetPrices({\n assetIds,\n currencies: new Set([currency, 'usd']),\n clientId: this.#clientId,\n clientVersion: this.#clientVersion,\n fetchFn: this.#fetchFn,\n signal: this.#abortController?.signal,\n });\n const exchangeRates = toExchangeRates(currency, pricesByAssetId);\n this.update((state) => {\n state.assetExchangeRates = {\n ...state.assetExchangeRates,\n ...exchangeRates,\n };\n });\n };\n\n readonly #hasInsufficientBalance = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n try {\n const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);\n const provider = getNetworkClientByChainId(\n this.messenger,\n srcChainIdInHex,\n )?.provider;\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n\n return !(\n provider &&\n normalizedSrcTokenAddress &&\n quoteRequest.srcTokenAmount &&\n srcChainIdInHex &&\n (await hasSufficientBalance(\n provider,\n quoteRequest.walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.srcTokenAmount,\n srcChainIdInHex,\n ))\n );\n } catch (error) {\n console.warn('Failed to set insufficientBal', error);\n // Fall back to true so the backend returns quotes\n return true;\n }\n };\n\n readonly #appendInsufficientBalAndResetApproval = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n const isSrcChainNonEVM = isNonEvmChainId(quoteRequest.srcChainId);\n const providerConfig = isSrcChainNonEVM\n ? undefined\n : getNetworkClientByChainId(\n this.messenger,\n formatChainIdToHex(quoteRequest.srcChainId),\n )?.configuration;\n\n let insufficientBal: boolean | undefined;\n let resetApproval: boolean = Boolean(quoteRequest.resetApproval);\n if (isSrcChainNonEVM) {\n // If the source chain is not an EVM network, use value from params\n insufficientBal = quoteRequest.insufficientBal;\n } else if (providerConfig?.rpcUrl?.includes('tenderly')) {\n // If the rpcUrl is a tenderly fork (e2e tests), set insufficientBal=true\n // The bridge-api filters out quotes if the balance on mainnet is insufficient so this override allows quotes to always be returned\n insufficientBal = true;\n } else {\n // Set loading status if RPC calls are made before the quotes are fetched\n this.update((state) => {\n state.quotesLoadingStatus = RequestStatus.LOADING;\n });\n resetApproval = await this.#shouldResetApproval(quoteRequest);\n // Otherwise query the src token balance from the RPC provider\n insufficientBal =\n quoteRequest.insufficientBal ??\n (await this.#hasInsufficientBalance(quoteRequest));\n }\n\n return {\n ...quoteRequest,\n insufficientBal,\n resetApproval,\n };\n };\n\n readonly #shouldResetApproval = async (quoteRequest: GenericQuoteRequest) => {\n if (isNonEvmChainId(quoteRequest.srcChainId)) {\n return false;\n }\n try {\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n if (isEthUsdt(quoteRequest.srcChainId, normalizedSrcTokenAddress)) {\n const allowance = BigNumber.from(\n await this.#getUSDTMainnetAllowance(\n quoteRequest.walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.destChainId,\n ),\n );\n return allowance.lt(quoteRequest.srcTokenAmount) && allowance.gt(0);\n }\n return false;\n } catch (error) {\n console.warn('Failed to set resetApproval', error);\n // Fall back to true so the backend returns quotes\n return true;\n }\n };\n\n stopPollingForQuotes = (\n reason?: AbortReason,\n context?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n ) => {\n this.stopAllPolling();\n // If polling is stopped before quotes finish loading, track QuotesReceived\n if (this.state.quotesLoadingStatus === RequestStatus.LOADING && context) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesReceived,\n context,\n );\n }\n // Clears quotes list in state\n this.#abortController?.abort(reason);\n this.#batchSellTradesAbortController?.abort(reason);\n };\n\n /**\n * Sets the location/entry point for the current swap or bridge flow.\n * Call this when the user enters the flow so that all internally-fired\n * events (InputChanged, QuotesRequested, etc.) carry the correct location.\n *\n * @param location - The entry point from which the user initiated the flow\n */\n setLocation = (location: BridgeControllerMetricsLocation) => {\n this.#location = location;\n };\n\n /**\n * Returns the location/entry point for the current swap or bridge flow.\n *\n * @returns The entry point from which the user initiated the flow\n */\n getLocation = (): BridgeControllerMetricsLocation => {\n return this.#location;\n };\n\n setInputPrimaryDenomination = (\n inputPrimaryDenomination: InputPrimaryDenomination,\n ) => {\n this.update((state) => {\n state.inputPrimaryDenomination = inputPrimaryDenomination;\n });\n };\n\n resetState = (\n reason = AbortReason.ResetState,\n quoteRequestIndex: number | null = null,\n context?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n ) => {\n this.stopPollingForQuotes(reason, context);\n this.update((state) => {\n // Cannot do direct assignment to state, i.e. state = {... }, need to manually assign each field\n if (quoteRequestIndex === null) {\n // Clear all requests if index is null\n state.quoteRequest = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest;\n } else {\n // Otherwise only clear the specified request\n state.quoteRequest = state.quoteRequest\n .slice(0, quoteRequestIndex)\n .concat(DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0])\n .concat(state.quoteRequest.slice(quoteRequestIndex + 1));\n }\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.assetExchangeRates =\n DEFAULT_BRIDGE_CONTROLLER_STATE.assetExchangeRates;\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;\n state.tokenSecurityTypeDestination =\n DEFAULT_BRIDGE_CONTROLLER_STATE.tokenSecurityTypeDestination;\n state.quoteStreamComplete =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n state.batchSellTradesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTradesLoadingStatus;\n });\n };\n\n /**\n * Sets the interval length based on the source chain\n */\n setChainIntervalLength = () => {\n const { state } = this;\n // Assume that BatchSell quote requests all have the same source chain\n // Use the first one to determine refresh rate\n const { srcChainId } = state.quoteRequest[0];\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);\n\n const refreshRateOverride = srcChainId\n ? bridgeFeatureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : undefined;\n const defaultRefreshRate = bridgeFeatureFlags.refreshRate;\n this.setIntervalLength(refreshRateOverride ?? defaultRefreshRate);\n };\n\n readonly #fetchBridgeQuotes = async ({\n quoteRequests,\n context,\n }: BridgePollingInput) => {\n this.#abortController?.abort(AbortReason.NewQuoteRequest);\n this.#batchSellTradesAbortController?.abort(AbortReason.NewQuoteRequest);\n\n this.#abortController = new AbortController();\n const quoteTraceStartTime = Date.now();\n const quoteTraceRequestId = uuid();\n const quoteAbortSignal = this.#abortController.signal;\n\n this.#fetchAssetExchangeRates(quoteRequests).catch((error) =>\n console.warn('Failed to fetch asset exchange rates', error),\n );\n\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesRequested,\n context,\n );\n\n const { sse, maxRefreshCount } = getBridgeFeatureFlags(this.messenger);\n const shouldStream =\n sse?.enabled &&\n hasMinimumRequiredVersion(this.#clientVersion, sse.minimumVersion);\n const isBatchSellRequest = quoteRequests.length > 1;\n\n this.update((state) => {\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;\n state.quoteStreamComplete =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;\n state.quotesLastFetched = Date.now();\n state.quotesLoadingStatus = RequestStatus.LOADING;\n // Prevent clients from displaying stale batch sell fees\n if (quoteRequests.length > 1) {\n state.batchSellTradesLoadingStatus = RequestStatus.LOADING;\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n }\n });\n\n const jwt = await this.#getJwt();\n\n const [firstQuoteRequest] = quoteRequests;\n let traceResult: QuoteTraceResult = 'error';\n let traceName: TraceName = TraceName.BatchSellQuotesFetched;\n if (!isBatchSellRequest) {\n traceName = isCrossChain(\n firstQuoteRequest.srcChainId,\n firstQuoteRequest.destChainId,\n )\n ? TraceName.BridgeQuotesFetched\n : TraceName.SwapQuotesFetched;\n }\n const tracedProviders = new Set<string>();\n const traceWithoutImpact = (\n request: Omit<SwapTraceRequest<TraceName>, 'tags'>,\n ) => {\n try {\n this.#trace(\n {\n ...request,\n tags: {\n feature: BRIDGE_FEATURE_ID_TO_FEATURE_TAG[context.feature_id],\n },\n },\n () => undefined,\n );\n } catch {\n // Telemetry failures must not affect quote fetching or state updates.\n }\n };\n const traceProviderFirstResult = (\n providerData: Parameters<typeof formatProviderLabel>[0],\n ) => {\n const provider = formatProviderLabel(providerData);\n if (isBatchSellRequest || tracedProviders.has(provider)) {\n return;\n }\n tracedProviders.add(provider);\n // Provider telemetry must not delay quote processing.\n traceWithoutImpact({\n name: TraceName.QuoteProviderFirstResult,\n startTime: quoteTraceStartTime,\n data: {\n provider,\n feature_id: context.feature_id,\n request_id: quoteTraceRequestId,\n swap_type: getSwapType(\n firstQuoteRequest.srcChainId,\n firstQuoteRequest.destChainId,\n ),\n srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),\n result: 'success',\n },\n });\n };\n\n try {\n const selectedAccount = this.#getMultichainSelectedAccount(\n firstQuoteRequest.walletAddress,\n );\n // This call is not awaited to prevent blocking quote fetching if the snap takes too long to respond\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#setMinimumBalanceForRentExemptionInLamports(\n firstQuoteRequest.srcChainId,\n selectedAccount?.metadata?.snap?.id,\n );\n // Use SSE if enabled and return early\n if (shouldStream || isBatchSellRequest) {\n const quoteCount = await this.#handleQuoteStreaming({\n quoteRequests,\n featureId: context.feature_id,\n jwt,\n selectedAccount,\n signal: quoteAbortSignal,\n traceProviderFirstResult,\n });\n if (quoteAbortSignal.aborted) {\n traceResult = 'cancelled';\n return;\n }\n traceResult = quoteCount > 0 ? 'success' : 'no_quotes';\n } else {\n // Otherwise use regular fetch\n const quotes = await this.fetchQuotes(\n firstQuoteRequest,\n context.feature_id,\n quoteAbortSignal,\n );\n for (const quote of quotes) {\n traceProviderFirstResult(quote.quote);\n }\n this.update((state) => {\n // Set the initial load time if this is the first fetch\n if (\n state.quotesRefreshCount ===\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount &&\n this.#quotesFirstFetched\n ) {\n state.quotesInitialLoadTime = Date.now() - this.#quotesFirstFetched;\n }\n state.quotes = quotes.map(toQuoteResponseV2);\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n traceResult = quotes.length > 0 ? 'success' : 'no_quotes';\n }\n } catch (error) {\n // Reset the quotes list if the fetch fails to avoid showing stale quotes\n this.update((state) => {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n });\n // Ignore abort errors\n if (isExpectedQuoteAbort(error, quoteAbortSignal)) {\n traceResult = 'cancelled';\n // Exit the function early to prevent other state updates\n return;\n }\n\n // Update loading status and error message\n this.update((state) => {\n // The error object reference is not guaranteed to exist on mobile so reading\n // the message directly could cause an error.\n let errorMessage;\n try {\n errorMessage =\n (error as Error)?.message ?? (error as Error).toString();\n } catch {\n // Intentionally empty\n } finally {\n state.quoteFetchError = errorMessage ?? 'Unknown error';\n }\n state.quotesLoadingStatus = RequestStatus.ERROR;\n });\n // Track event and log error\n this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesError, {\n ...context,\n failure_phase: FailurePhase.Quote,\n error_code: getQuoteFetchErrorCode(error),\n });\n console.log(\n `Failed to ${shouldStream ? 'stream' : 'fetch'} bridge quotes`,\n error,\n );\n } finally {\n traceWithoutImpact({\n name: traceName,\n startTime: quoteTraceStartTime,\n data: {\n srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),\n ...(!isBatchSellRequest && {\n request_id: quoteTraceRequestId,\n feature_id: context.feature_id,\n result: traceResult,\n }),\n },\n });\n }\n\n // Update refresh count after fetching, validation and fee calculation have completed\n this.update((state) => {\n state.quotesRefreshCount += 1;\n });\n const hasNoFundedQuoteRequests = quoteRequests.every(\n ({ insufficientBal }) => Boolean(insufficientBal),\n );\n\n if (\n hasNoFundedQuoteRequests\n ? // If all quote requests are insufficiently funded, stop polling\n // So if a BatchSell has at least 1 sufficiently funded quote request, polling continues\n true\n : // Otherwise continue polling until the maximum number of refreshes has been reached\n this.state.quotesRefreshCount >= maxRefreshCount\n ) {\n this.stopAllPolling();\n }\n };\n\n readonly #handleQuoteStreaming = async ({\n quoteRequests,\n featureId,\n jwt,\n selectedAccount,\n signal,\n traceProviderFirstResult,\n }: {\n quoteRequests: GenericQuoteRequest[];\n featureId: FeatureId;\n jwt?: string;\n selectedAccount?: InternalAccount;\n signal?: AbortSignal;\n traceProviderFirstResult: (\n providerData: Parameters<typeof formatProviderLabel>[0],\n ) => void;\n }): Promise<number> => {\n /**\n * Tracks the number of valid quotes received from the current stream, which is used\n * to determine when to clear the quotes list and set the initial load time\n */\n let validQuotesCounter = 0;\n /**\n * Tracks all pending promises from appendFeesToQuotes calls to ensure they complete\n * before setting quotesLoadingStatus to FETCHED\n */\n const pendingFeeAppendPromises = new Set<Promise<void>>();\n\n await fetchBridgeQuoteStream(\n this.#fetchFn,\n quoteRequests,\n signal,\n featureId,\n this.#clientId,\n jwt,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n {\n onQuoteValidationFailure: (validationFailures) =>\n this.#trackQuoteValidationFailures(validationFailures, featureId),\n onValidQuoteReceived: async (quote: QuoteResponse) => {\n const feeAppendPromise = (async () => {\n const quotesWithFees = await appendFeesToQuotes(\n quote.chainId,\n [quote],\n this.messenger,\n this.#getLayer1GasFee,\n selectedAccount,\n );\n if (quotesWithFees.length > 0) {\n validQuotesCounter += 1;\n traceProviderFirstResult(quote.quote);\n }\n this.update((state) => {\n // Clear previous quotes and quotes load time when first quote in the current\n // polling loop is received\n // This enables clients to continue showing the previous quotes while new\n // quotes are loading\n // Note: If there are no valid quotes until the 2nd fetch, quotesInitialLoadTime will be > refreshRate\n if (validQuotesCounter === 1) {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n if (!state.quotesInitialLoadTime && this.#quotesFirstFetched) {\n // Set the initial load time after the first quote is received\n state.quotesInitialLoadTime =\n Date.now() - this.#quotesFirstFetched;\n }\n }\n state.quotes = [...state.quotes, ...quotesWithFees];\n });\n })();\n pendingFeeAppendPromises.add(feeAppendPromise);\n feeAppendPromise\n .catch((error) => {\n // Catch errors to prevent them from breaking stream processing\n // If appendFeesToQuotes throws, the state update never happens, so no invalid entry is added\n console.error('Error appending fees to quote', error);\n })\n .finally(() => {\n pendingFeeAppendPromises.delete(feeAppendPromise);\n });\n // Await the promise to ensure errors are caught and handled before continuing\n // The promise is also tracked in pendingFeeAppendPromises for onClose to wait for\n await feeAppendPromise;\n },\n onTokenWarning: (warning) => {\n this.update((state) => {\n const isDuplicate = state.tokenWarnings.some(\n (existing) => existing.feature_id === warning.feature_id,\n );\n if (!isDuplicate) {\n state.tokenWarnings = [...state.tokenWarnings, warning];\n }\n });\n },\n onComplete: (data) => {\n this.update((state) => {\n state.quoteStreamComplete = data;\n });\n },\n onClose: async () => {\n // Wait for all pending appendFeesToQuotes operations to complete\n // before setting quotesLoadingStatus to FETCHED\n await Promise.allSettled(Array.from(pendingFeeAppendPromises));\n this.update((state) => {\n // If there are no valid quotes in the current stream, clear the quotes list\n // to remove quotes from the previous stream\n if (validQuotesCounter === 0) {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n }\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n },\n },\n this.#clientVersion,\n );\n\n return validQuotesCounter;\n };\n\n readonly #setMinimumBalanceForRentExemptionInLamports = async (\n srcChainId: GenericQuoteRequest['srcChainId'],\n snapId?: string,\n ) => {\n if (!isSolanaChainId(srcChainId) || !snapId) {\n return;\n }\n const minimumBalanceForRentExemptionInLamports =\n await getMinimumBalanceForRentExemptionInLamports(snapId, this.messenger);\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports =\n minimumBalanceForRentExemptionInLamports;\n });\n };\n\n #getMultichainSelectedAccount(\n walletAddress?: GenericQuoteRequest['walletAddress'],\n ) {\n // Assume that all quotes in a batch are for the same account\n const addressToUse =\n walletAddress ?? this.state.quoteRequest[0].walletAddress;\n if (!addressToUse) {\n throw new Error('Account address is required');\n }\n const selectedAccount = getAccountByAddress(this.messenger, addressToUse);\n return selectedAccount;\n }\n\n readonly #getJwt = async (): Promise<string | undefined> => {\n try {\n const token = await this.messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n return token;\n } catch (error) {\n console.error('Error getting JWT token for bridge-api request', error);\n return undefined;\n }\n };\n\n readonly #getRequestMetadata = (\n quoteRequestIndex: number = 0,\n ): Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > => {\n const quoteRequest = this.state.quoteRequest[quoteRequestIndex];\n const { walletAddress } = quoteRequest;\n const accountHardwareType = getAccountHardwareType(\n walletAddress\n ? this.#getMultichainSelectedAccount(walletAddress)\n : undefined,\n );\n\n return {\n slippage_limit: quoteRequest.slippage ?? 0,\n swap_type: getSwapTypeFromQuote(quoteRequest),\n custom_slippage: isCustomSlippage(quoteRequest.slippage),\n account_hardware_type: accountHardwareType,\n is_hardware_wallet: accountHardwareType !== null,\n };\n };\n\n readonly #getQuoteFetchData = (): Omit<\n QuoteFetchData,\n 'best_quote_provider' | 'price_impact' | 'can_submit'\n > => {\n return {\n quotes_count: this.state.quotes.length,\n quotes_list: this.state.quotes.map(({ quote }) =>\n formatProviderLabel(quote),\n ),\n initial_load_time_all_quotes: this.state.quotesInitialLoadTime ?? 0,\n has_gas_included_quote: this.state.quotes.some(\n ({ quote }) => quote.gasIncluded,\n ),\n };\n };\n\n readonly #getEventProperties = <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n propertiesFromClient: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n quoteRequestIndex: number = 0,\n ) => {\n const clientProps = propertiesFromClient as Record<string, unknown>;\n const baseProperties = {\n ...propertiesFromClient,\n location: clientProps?.location ?? this.#location,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n };\n const inputPrimaryDenominationProperties = {\n input_primary_denomination: this.state.inputPrimaryDenomination,\n };\n const batchSellClientChainProperties = propertiesFromClient as Pick<\n RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellTokenPageViewed],\n 'chain_id_source' | 'chain_id_destination'\n >;\n const batchSellBaseProperties = {\n chain_id_source: batchSellClientChainProperties.chain_id_source,\n chain_id_destination: batchSellClientChainProperties.chain_id_destination,\n location: clientProps?.location ?? this.#location,\n };\n const quoteRequest = this.state.quoteRequest[quoteRequestIndex];\n switch (eventName) {\n case UnifiedSwapBridgeEventName.ButtonClicked:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.PageViewed:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case BatchSellMetricsEventName.BatchSellTokenPageViewed:\n return batchSellBaseProperties;\n case BatchSellMetricsEventName.BatchSellTokenPageContinueClicked: {\n const propsFromClient =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellTokenPageContinueClicked];\n return {\n ...batchSellBaseProperties,\n source_token_count: propsFromClient.source_token_addresses.length,\n source_token_symbols: propsFromClient.source_token_symbols,\n source_token_addresses: propsFromClient.source_token_addresses,\n };\n }\n case BatchSellMetricsEventName.BatchSellQuotePageViewed:\n case BatchSellMetricsEventName.BatchSellQuotePageReviewClicked: {\n const propsFromClient =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellQuotePageViewed];\n return {\n ...batchSellBaseProperties,\n source_token_count: propsFromClient.source_token_addresses.length,\n source_token_symbols: propsFromClient.source_token_symbols,\n source_token_addresses: propsFromClient.source_token_addresses,\n destination_token_symbol: propsFromClient.destination_token_symbol,\n destination_token_address: propsFromClient.destination_token_address,\n usd_amount_source_tokens: propsFromClient.usd_amount_source_tokens,\n usd_amount_source_total: propsFromClient.usd_amount_source_total,\n source_token_slippages: propsFromClient.source_token_slippages,\n };\n }\n case BatchSellMetricsEventName.BatchSellReviewModalSubmitted: {\n const reviewModalProperties =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellReviewModalSubmitted];\n return {\n ...batchSellBaseProperties,\n source_token_count:\n reviewModalProperties.source_token_addresses.length,\n source_token_symbols: reviewModalProperties.source_token_symbols,\n source_token_addresses: reviewModalProperties.source_token_addresses,\n destination_token_symbol:\n reviewModalProperties.destination_token_symbol,\n destination_token_address:\n reviewModalProperties.destination_token_address,\n usd_amount_source_tokens:\n reviewModalProperties.usd_amount_source_tokens,\n usd_amount_source_total:\n reviewModalProperties.usd_amount_source_total,\n source_token_slippages: reviewModalProperties.source_token_slippages,\n usd_quoted_gas: reviewModalProperties.usd_quoted_gas,\n usd_quoted_return: reviewModalProperties.usd_quoted_return,\n };\n }\n case UnifiedSwapBridgeEventName.FiatCryptoToggleClicked:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n swap_type: getSwapTypeFromQuote(quoteRequest),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesValidationFailed:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesReceived:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n refresh_count: this.state.quotesRefreshCount,\n has_sufficient_funds: !quoteRequest.insufficientBal,\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesRequested:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n has_sufficient_funds: !quoteRequest.insufficientBal,\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesError:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n error_message: this.state.quoteFetchError,\n has_sufficient_funds: !quoteRequest.insufficientBal,\n failure_phase: FailurePhase.Quote,\n error_code: SwapBridgeErrorCode.QuoteFetchFailed,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.Failed:\n // Populate the properties that the error occurred before the tx was submitted\n return {\n ...baseProperties,\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...propertiesFromClient,\n };\n case UnifiedSwapBridgeEventName.AllQuotesOpened:\n case UnifiedSwapBridgeEventName.AllQuotesSorted:\n case UnifiedSwapBridgeEventName.QuoteSelected:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.AssetDetailTooltipClicked:\n case UnifiedSwapBridgeEventName.AssetPickerOpened:\n return baseProperties;\n // Inject `token_security_type_destination` from controller state so the\n // field is always present on this event. `baseProperties` (which spreads\n // `propertiesFromClient`) wins if the client supplies a value explicitly.\n case UnifiedSwapBridgeEventName.InputSourceDestinationSwitched:\n return {\n token_security_type_destination:\n this.state.tokenSecurityTypeDestination,\n ...baseProperties,\n };\n // These events may be published after the bridge-controller state is reset\n // So the BridgeStatusController populates all the properties\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n return propertiesFromClient;\n case UnifiedSwapBridgeEventName.InputChanged:\n default:\n return baseProperties;\n }\n };\n\n readonly #trackInputChangedEvents = (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n featureId: FeatureId,\n quoteRequestIndex: number = 0,\n ) => {\n Object.entries(paramsToUpdate).forEach(([key, value]) => {\n const inputKey = toInputChangedPropertyKey[key as keyof QuoteRequest];\n const inputValue =\n toInputChangedPropertyValue[key as keyof QuoteRequest]?.(\n paramsToUpdate,\n );\n if (\n inputKey &&\n inputValue !== undefined &&\n this.state.quoteRequest[quoteRequestIndex] &&\n value !==\n this.state.quoteRequest[quoteRequestIndex][\n key as keyof GenericQuoteRequest\n ]\n ) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.InputChanged,\n {\n input: inputKey,\n input_value: inputValue,\n location: this.#location,\n feature_id: featureId,\n },\n );\n }\n });\n };\n\n /**\n * This method tracks cross-chain swaps events\n *\n * @param eventName - The name of the event to track\n * @param propertiesFromClient - Properties that can't be calculated from the event name and need to be provided by the client\n * @param quoteRequestIndex - The index of the quote request to track the event for\n * @example\n * this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.ActionOpened, {\n * location: MetaMetricsSwapsEventSource.MainView,\n * });\n */\n trackUnifiedSwapBridgeEvent = <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n propertiesFromClient: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n quoteRequestIndex: number = 0,\n ) => {\n try {\n const combinedPropertiesForEvent = this.#getEventProperties<EventName>(\n eventName,\n propertiesFromClient,\n quoteRequestIndex,\n );\n\n this.#trackMetaMetricsFn(\n eventName,\n combinedPropertiesForEvent as CrossChainSwapsEventProperties<EventName>,\n );\n } catch (error) {\n console.error(\n `Error tracking cross-chain swaps MetaMetrics event ${eventName}`,\n error,\n );\n }\n };\n\n /**\n *\n * @param walletAddress - The address of the account to get the allowance for\n * @param contractAddress - The address of the ERC20 token contract on mainnet\n * @param destinationChainId - The chain ID of the destination network\n * @returns The atomic allowance of the ERC20 token contract\n */\n readonly #getUSDTMainnetAllowance = async (\n walletAddress: string,\n contractAddress: string,\n destinationChainId: GenericQuoteRequest['destChainId'],\n ): Promise<string> => {\n const provider = getNetworkClientByChainId(\n this.messenger,\n CHAIN_IDS.MAINNET,\n )?.provider;\n if (!provider) {\n throw new Error('No provider found');\n }\n\n const ethersProvider = new Web3Provider(provider);\n const contract = new Contract(contractAddress, abiERC20, ethersProvider);\n const spenderAddress = isCrossChain(CHAIN_IDS.MAINNET, destinationChainId)\n ? METABRIDGE_ETHEREUM_ADDRESS\n : SWAPS_CONTRACT_ADDRESSES[CHAIN_IDS.MAINNET];\n const allowance: BigNumber = await contract.allowance(\n walletAddress,\n spenderAddress,\n );\n return allowance.toString();\n };\n}\n"]}
1
+ {"version":3,"file":"bridge-controller.js","sourceRoot":"","sources":["../src/bridge-controller.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider } from '@ethersproject/providers';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { TransactionController } from '@metamask/transaction-controller';\nimport type { CaipAssetType, Hex } from '@metamask/utils';\nimport { v4 as uuid } from 'uuid';\n\nimport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\nimport type { BridgeClientId } from './constants/bridge.js';\nimport {\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_PROD_API_BASE_URL,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_ETHEREUM_ADDRESS,\n REFRESH_INTERVAL_MS,\n} from './constants/bridge.js';\nimport { CHAIN_IDS } from './constants/chains.js';\nimport { SWAPS_CONTRACT_ADDRESSES } from './constants/swaps.js';\nimport {\n BRIDGE_FEATURE_ID_TO_FEATURE_TAG,\n TraceName,\n} from './constants/traces.js';\nimport type { SwapTraceFunction } from './index.js';\nimport { RequestStatus } from './types.js';\nimport type {\n L1GasFees,\n GenericQuoteRequest,\n NonEvmFees,\n QuoteRequest,\n BridgeControllerState,\n BridgeControllerMessenger,\n FetchFunction,\n InputPrimaryDenomination,\n SwapTraceRequest,\n} from './types.js';\nimport { getAssetIdsForToken, toExchangeRates } from './utils/assets.js';\nimport { hasSufficientBalance } from './utils/balance.js';\nimport {\n getDefaultBridgeControllerState,\n isCrossChain,\n isEthUsdt,\n isNonEvmChainId,\n isSolanaChainId,\n} from './utils/bridge.js';\nimport {\n formatAddressToCaipReference,\n formatChainIdToCaip,\n formatChainIdToHex,\n} from './utils/caip-formatters.js';\nimport {\n getBridgeFeatureFlags,\n hasMinimumRequiredVersion,\n} from './utils/feature-flags.js';\nimport {\n fetchAssetPrices,\n fetchBridgeQuotes,\n fetchBridgeQuoteStream,\n fetchBatchSellTrades,\n} from './utils/fetch.js';\nimport {\n AbortReason,\n BatchSellMetricsEventName,\n FailurePhase,\n MetaMetricsSwapsEventSource,\n MetricsActionType,\n SwapBridgeErrorCode,\n UnifiedSwapBridgeEventName,\n} from './utils/metrics/constants.js';\nimport type {\n BridgeControllerMetricsEventName,\n BridgeControllerMetricsLocation,\n} from './utils/metrics/constants.js';\nimport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\nimport {\n formatProviderLabel,\n getAccountHardwareType,\n getRequestParams,\n getSwapType,\n getSwapTypeFromQuote,\n isCustomSlippage,\n toInputChangedPropertyKey,\n toInputChangedPropertyValue,\n} from './utils/metrics/properties.js';\nimport type {\n QuoteFetchData,\n RequestMetadata,\n RequiredEventContextFromClient,\n} from './utils/metrics/types.js';\nimport type { CrossChainSwapsEventProperties } from './utils/metrics/types.js';\nimport { appendFeesToQuotes } from './utils/quote-fees.js';\nimport { getMinimumBalanceForRentExemptionInLamports } from './utils/snaps.js';\nimport { sortQuotes } from './utils/sort-quotes.js';\nimport type { FeatureId } from './validators/feature-flags.js';\nimport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\nimport type { QuoteResponseV1 } from './validators/quote-response-v1.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\n\nconst metadata: StateMetadata<BridgeControllerState> = {\n quoteRequest: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotes: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesInitialLoadTime: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesLastFetched: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesLoadingStatus: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quoteFetchError: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quotesRefreshCount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n assetExchangeRates: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n minimumBalanceForRentExemptionInLamports: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n tokenWarnings: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n tokenSecurityTypeDestination: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n inputPrimaryDenomination: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n quoteStreamComplete: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n batchSellTrades: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n batchSellTradesLoadingStatus: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/**\n * The input to start polling for the {@link BridgeController}\n *\n * @param updatedQuoteRequest - The updated quote request\n * @param context - The context contains properties that can't be populated by the\n * controller and need to be provided by the client for analytics\n */\ntype BridgePollingInput = {\n quoteRequests: GenericQuoteRequest[];\n context: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesError] &\n RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesRequested];\n};\n\ntype QuoteTraceResult = 'success' | 'cancelled' | 'no_quotes' | 'error';\n\nconst QUOTE_ABORT_REASONS = new Set<string>(Object.values(AbortReason));\n\nconst isExpectedQuoteAbort = (\n error: unknown,\n signal?: AbortSignal,\n): boolean => {\n if (signal?.aborted) {\n return true;\n }\n\n if (QUOTE_ABORT_REASONS.has(String(error))) {\n return true;\n }\n\n const errorText =\n error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\n return (\n errorText.includes('AbortError') ||\n errorText.includes('FetchRequestCanceledException')\n );\n};\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'updateBridgeQuoteRequestParams',\n 'fetchQuotes',\n 'updateBatchSellTrades',\n 'stopPollingForQuotes',\n 'setLocation',\n 'getLocation',\n 'setInputPrimaryDenomination',\n 'resetState',\n 'setChainIntervalLength',\n 'trackUnifiedSwapBridgeEvent',\n] as const;\n\nexport class BridgeController extends StaticIntervalPollingController<BridgePollingInput>()<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState,\n BridgeControllerMessenger\n> {\n #abortController: AbortController | undefined;\n\n #batchSellTradesAbortController: AbortController | undefined;\n\n #quotesFirstFetched: number | undefined;\n\n /**\n * Stores the location/entry point from which the user initiated the swap or bridge flow.\n * Set via setLocation() before navigating to the swap/bridge flow.\n * Used as default for all subsequent internal events.\n */\n #location: BridgeControllerMetricsLocation =\n MetaMetricsSwapsEventSource.Unknown;\n\n readonly #clientId: BridgeClientId;\n\n readonly #clientVersion: string;\n\n readonly #getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #trackMetaMetricsFn: <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n properties: CrossChainSwapsEventProperties<EventName>,\n ) => void;\n\n readonly #trace: SwapTraceFunction<TraceName>;\n\n readonly #config: {\n customBridgeApiBaseUrl?: string;\n };\n\n /**\n * Returns whether to use AssetsController for exchange rates.\n * Set via constructor option getUseAssetsControllerForRates; defaults to false.\n *\n * @returns True when exchange rates should be read from AssetsController:getExchangeRatesForBridge.\n */\n readonly #getUseAssetsControllerForRates: () => boolean;\n\n constructor({\n messenger,\n state,\n clientId,\n clientVersion,\n getLayer1GasFee,\n fetchFn,\n config,\n trackMetaMetricsFn,\n traceFn,\n getUseAssetsControllerForRates,\n }: {\n messenger: BridgeControllerMessenger;\n state?: Partial<BridgeControllerState>;\n clientId: BridgeClientId;\n clientVersion: string;\n getLayer1GasFee: typeof TransactionController.prototype.getLayer1GasFee;\n fetchFn: FetchFunction;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n trackMetaMetricsFn: <EventName extends BridgeControllerMetricsEventName>(\n eventName: EventName,\n properties: CrossChainSwapsEventProperties<EventName>,\n ) => void;\n traceFn: SwapTraceFunction<TraceName>;\n /**\n * When provided, called to determine whether to use AssetsController for exchange rates.\n * When true, rates are read from AssetsController:getExchangeRatesForBridge instead of\n * MultichainAssetsRatesController, TokenRatesController, and CurrencyRateController.\n */\n getUseAssetsControllerForRates?: () => boolean;\n }) {\n super({\n name: BRIDGE_CONTROLLER_NAME,\n metadata,\n messenger,\n state: {\n ...getDefaultBridgeControllerState(),\n ...state,\n },\n });\n\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.#abortController = new AbortController();\n this.#getLayer1GasFee = getLayer1GasFee;\n this.#clientId = clientId;\n this.#clientVersion = clientVersion;\n this.#fetchFn = fetchFn;\n this.#trackMetaMetricsFn = trackMetaMetricsFn;\n this.#config = config ?? {};\n this.#trace = traceFn;\n this.#getUseAssetsControllerForRates =\n getUseAssetsControllerForRates ?? (() => false);\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n _executePoll = async (pollingInput: BridgePollingInput) => {\n await this.#fetchBridgeQuotes(pollingInput);\n };\n\n /**\n * Updates the quote request at the specified index with the given parameters, then starts\n * polling for quotes.\n *\n * @param paramsToUpdate - The parameters to update in the quote request at the specified index\n * @param context - metrics context\n * @param quoteRequestIndex - The index of the quote request to update\n * @param quoteRequestCount - The number of quote requests in the UI\n */\n updateBridgeQuoteRequestParams = async (\n paramsToUpdate: Partial<GenericQuoteRequest> & {\n walletAddress: GenericQuoteRequest['walletAddress'];\n },\n context: BridgePollingInput['context'],\n quoteRequestIndex: number = 0,\n quoteRequestCount: number = 1,\n ) => {\n // Guard against updating a quote request that doesn't exist\n if (quoteRequestIndex >= quoteRequestCount) {\n return;\n }\n this.#trackInputChangedEvents(\n paramsToUpdate,\n context.feature_id,\n quoteRequestIndex,\n );\n this.resetState(AbortReason.QuoteRequestUpdated, quoteRequestIndex);\n this.update((state) => {\n // Update only the specified quote request and keep the rest of the quote requests unchanged\n state.quoteRequest = state.quoteRequest\n .slice(0, quoteRequestIndex)\n .concat({\n ...DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0],\n ...paramsToUpdate,\n })\n .concat(\n state.quoteRequest.slice(quoteRequestIndex + 1, quoteRequestCount),\n );\n state.tokenSecurityTypeDestination =\n context.token_security_type_destination ?? null;\n });\n\n // BatchSell and Unified swaps both use the same polling logic so both validations should pass\n if (\n isValidQuoteRequest(paramsToUpdate) &&\n isValidBatchSellQuoteRequest(this.state.quoteRequest)\n ) {\n this.#quotesFirstFetched = Date.now();\n // Update the insufficientBal and resetApproval params for the quote request\n const quoteWithInsufficientBalAndResetApproval =\n await this.#appendInsufficientBalAndResetApproval(paramsToUpdate);\n this.update((state) => {\n state.quoteRequest[quoteRequestIndex] =\n quoteWithInsufficientBalAndResetApproval;\n });\n\n // Set refresh rate based on the source chain before starting polling\n this.setChainIntervalLength();\n this.startPolling({\n quoteRequests: this.state.quoteRequest,\n context,\n });\n }\n };\n\n /**\n * Fetches quotes for specified request without updating the controller state\n * This method does not start polling for quotes and does not emit UnifiedSwapBridge events\n *\n * @param quoteRequest - The parameters for quote requests to fetch\n * @param featureId - The feature ID that maps to quoteParam overrides from LD\n * @param abortSignal - The abort signal to cancel all the requests\n * @returns A list of validated quotes\n */\n fetchQuotes = async (\n quoteRequest: GenericQuoteRequest,\n featureId: FeatureId,\n abortSignal: AbortSignal | null = null,\n ): Promise<(QuoteResponseV1 & L1GasFees & NonEvmFees)[]> => {\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);\n const jwt = await this.#getJwt();\n // If featureId is specified, retrieve the quoteRequestOverrides for that featureId\n const quoteRequestOverrides = featureId\n ? bridgeFeatureFlags.quoteRequestOverrides?.[featureId]\n : undefined;\n const resetApproval = await this.#shouldResetApproval(quoteRequest);\n\n // If quoteRequestOverrides is specified, merge it with the quoteRequest\n const { quotes: baseQuotes, validationFailures } = await fetchBridgeQuotes(\n quoteRequestOverrides\n ? { ...quoteRequest, ...quoteRequestOverrides, resetApproval }\n : { ...quoteRequest, resetApproval },\n abortSignal,\n this.#clientId,\n jwt,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n featureId,\n this.#clientVersion,\n );\n\n this.#trackQuoteValidationFailures(validationFailures, featureId);\n const srcChainIds = Array.from(\n new Set(baseQuotes.map((quote) => quote.quote.srcChainId)),\n ).filter(Boolean);\n\n const quotesWithFees =\n srcChainIds.length > 1 || srcChainIds.length === 0\n ? // Don't append fees if there are multiple srcChainIds\n baseQuotes\n : await appendFeesToQuotes(\n formatChainIdToCaip(srcChainIds[0]),\n baseQuotes,\n this.messenger,\n this.#getLayer1GasFee,\n this.#getMultichainSelectedAccount(quoteRequest.walletAddress),\n );\n\n return sortQuotes(quotesWithFees, featureId);\n };\n\n /**\n * Fetches gasless transaction data and fees for BatchSell quotes.\n * To use this in the clients, add a listener for the recommendedQuotes and call\n * this handler whenever they change.\n *\n * @param quotes - The quotes to fetch the gasless transaction data and fees for\n * @param stxEnabled - Flag to estimate gas cost more precisely for the batch sell feature.\n */\n updateBatchSellTrades = async (\n quotes: (QuoteResponse | null)[],\n stxEnabled: boolean,\n ): Promise<void> => {\n this.#batchSellTradesAbortController?.abort(\n AbortReason.GaslessTxBatchFetched,\n );\n this.#batchSellTradesAbortController = new AbortController();\n\n this.update((state) => {\n // Set loading status again if recommended quotes are re-ordered\n state.batchSellTradesLoadingStatus = RequestStatus.LOADING;\n });\n\n try {\n const batchSellTradesResponse = await fetchBatchSellTrades(\n quotes,\n stxEnabled,\n this.#batchSellTradesAbortController.signal,\n this.#clientId,\n await this.#getJwt(),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n this.#clientVersion,\n );\n\n this.update((state) => {\n state.batchSellTrades = batchSellTradesResponse;\n state.batchSellTradesLoadingStatus = RequestStatus.FETCHED;\n });\n\n // TODO if fee.asset.assetId is not in exchange rates, fetch the exchange rate and update the state\n } catch (error) {\n // Ignore abort errors\n if (\n (error as Error).toString().includes('AbortError') ||\n (error as Error).toString().includes('FetchRequestCanceledException') ||\n [\n AbortReason.ResetState,\n AbortReason.NewQuoteRequest,\n AbortReason.QuoteRequestUpdated,\n AbortReason.TransactionSubmitted,\n AbortReason.GaslessTxBatchFetched,\n ].includes(error as AbortReason)\n ) {\n // Exit the function early to prevent other state updates\n return;\n }\n\n this.update((state) => {\n // Reset the batch sell trades if the fetch fails to avoid showing stale data\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n // Update loading status\n state.batchSellTradesLoadingStatus = RequestStatus.ERROR;\n });\n console.log(`Failed to fetch batch sell trades`, error);\n }\n };\n\n readonly #trackQuoteValidationFailures = (\n validationFailures: string[],\n featureId: FeatureId,\n ) => {\n if (validationFailures.length === 0) {\n return;\n }\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesValidationFailed,\n {\n feature_id: featureId,\n failures: validationFailures,\n location: this.#location,\n },\n );\n };\n\n /**\n * Fetches the exchange rates for the assets in the quote request if they are not already in the state\n * In addition to the selected tokens, this also fetches the native asset for the source and destination chains\n *\n * @param quoteRequests - The quote requests to fetch the exchange rates for\n */\n readonly #fetchAssetExchangeRates = async (\n quoteRequests: GenericQuoteRequest[],\n ) => {\n // Get unique assetIds for all quote requests\n const assetIds = new Set<CaipAssetType>(\n quoteRequests.flatMap((quoteRequest) =>\n [\n getAssetIdsForToken(\n quoteRequest.srcTokenAddress,\n quoteRequest.srcChainId,\n ),\n getAssetIdsForToken(\n quoteRequest.destTokenAddress,\n quoteRequest.destChainId,\n ),\n ].flat(),\n ),\n );\n\n const currency = this.#getUseAssetsControllerForRates()\n ? this.messenger.call('AssetsController:getExchangeRatesForBridge')\n .currentCurrency\n : this.messenger.call('CurrencyRateController:getState').currentCurrency;\n\n if (assetIds.size === 0) {\n return;\n }\n\n const pricesByAssetId = await fetchAssetPrices({\n assetIds,\n currencies: new Set([currency, 'usd']),\n clientId: this.#clientId,\n clientVersion: this.#clientVersion,\n fetchFn: this.#fetchFn,\n signal: this.#abortController?.signal,\n });\n const exchangeRates = toExchangeRates(currency, pricesByAssetId);\n this.update((state) => {\n state.assetExchangeRates = {\n ...state.assetExchangeRates,\n ...exchangeRates,\n };\n });\n };\n\n readonly #hasInsufficientBalance = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n try {\n const srcChainIdInHex = formatChainIdToHex(quoteRequest.srcChainId);\n const provider =\n this.#getNetworkClientByChainId(srcChainIdInHex)?.provider;\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n\n return !(\n provider &&\n normalizedSrcTokenAddress &&\n quoteRequest.srcTokenAmount &&\n srcChainIdInHex &&\n (await hasSufficientBalance(\n provider,\n quoteRequest.walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.srcTokenAmount,\n srcChainIdInHex,\n ))\n );\n } catch (error) {\n console.warn('Failed to set insufficientBal', error);\n // Fall back to true so the backend returns quotes\n return true;\n }\n };\n\n readonly #appendInsufficientBalAndResetApproval = async (\n quoteRequest: GenericQuoteRequest,\n ) => {\n const isSrcChainNonEVM = isNonEvmChainId(quoteRequest.srcChainId);\n const providerConfig = isSrcChainNonEVM\n ? undefined\n : this.#getNetworkClientByChainId(\n formatChainIdToHex(quoteRequest.srcChainId),\n )?.configuration;\n\n let insufficientBal: boolean | undefined;\n let resetApproval: boolean = Boolean(quoteRequest.resetApproval);\n if (isSrcChainNonEVM) {\n // If the source chain is not an EVM network, use value from params\n insufficientBal = quoteRequest.insufficientBal;\n } else if (providerConfig?.rpcUrl?.includes('tenderly')) {\n // If the rpcUrl is a tenderly fork (e2e tests), set insufficientBal=true\n // The bridge-api filters out quotes if the balance on mainnet is insufficient so this override allows quotes to always be returned\n insufficientBal = true;\n } else {\n // Set loading status if RPC calls are made before the quotes are fetched\n this.update((state) => {\n state.quotesLoadingStatus = RequestStatus.LOADING;\n });\n resetApproval = await this.#shouldResetApproval(quoteRequest);\n // Otherwise query the src token balance from the RPC provider\n insufficientBal =\n quoteRequest.insufficientBal ??\n (await this.#hasInsufficientBalance(quoteRequest));\n }\n\n return {\n ...quoteRequest,\n insufficientBal,\n resetApproval,\n };\n };\n\n readonly #shouldResetApproval = async (quoteRequest: GenericQuoteRequest) => {\n if (isNonEvmChainId(quoteRequest.srcChainId)) {\n return false;\n }\n try {\n const normalizedSrcTokenAddress = formatAddressToCaipReference(\n quoteRequest.srcTokenAddress,\n );\n if (isEthUsdt(quoteRequest.srcChainId, normalizedSrcTokenAddress)) {\n const allowance = BigNumber.from(\n await this.#getUSDTMainnetAllowance(\n quoteRequest.walletAddress,\n normalizedSrcTokenAddress,\n quoteRequest.destChainId,\n ),\n );\n return allowance.lt(quoteRequest.srcTokenAmount) && allowance.gt(0);\n }\n return false;\n } catch (error) {\n console.warn('Failed to set resetApproval', error);\n // Fall back to true so the backend returns quotes\n return true;\n }\n };\n\n stopPollingForQuotes = (\n reason?: AbortReason,\n context?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n ) => {\n this.stopAllPolling();\n // If polling is stopped before quotes finish loading, track QuotesReceived\n if (this.state.quotesLoadingStatus === RequestStatus.LOADING && context) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesReceived,\n context,\n );\n }\n // Clears quotes list in state\n this.#abortController?.abort(reason);\n this.#batchSellTradesAbortController?.abort(reason);\n };\n\n /**\n * Sets the location/entry point for the current swap or bridge flow.\n * Call this when the user enters the flow so that all internally-fired\n * events (InputChanged, QuotesRequested, etc.) carry the correct location.\n *\n * @param location - The entry point from which the user initiated the flow\n */\n setLocation = (location: BridgeControllerMetricsLocation) => {\n this.#location = location;\n };\n\n /**\n * Returns the location/entry point for the current swap or bridge flow.\n *\n * @returns The entry point from which the user initiated the flow\n */\n getLocation = (): BridgeControllerMetricsLocation => {\n return this.#location;\n };\n\n setInputPrimaryDenomination = (\n inputPrimaryDenomination: InputPrimaryDenomination,\n ) => {\n this.update((state) => {\n state.inputPrimaryDenomination = inputPrimaryDenomination;\n });\n };\n\n resetState = (\n reason = AbortReason.ResetState,\n quoteRequestIndex: number | null = null,\n context?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n ) => {\n this.stopPollingForQuotes(reason, context);\n this.update((state) => {\n // Cannot do direct assignment to state, i.e. state = {... }, need to manually assign each field\n if (quoteRequestIndex === null) {\n // Clear all requests if index is null\n state.quoteRequest = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest;\n } else {\n // Otherwise only clear the specified request\n state.quoteRequest = state.quoteRequest\n .slice(0, quoteRequestIndex)\n .concat(DEFAULT_BRIDGE_CONTROLLER_STATE.quoteRequest[0])\n .concat(state.quoteRequest.slice(quoteRequestIndex + 1));\n }\n state.quotesInitialLoadTime =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesInitialLoadTime;\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n state.quotesLastFetched =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLastFetched;\n state.quotesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesLoadingStatus;\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.quotesRefreshCount =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount;\n state.assetExchangeRates =\n DEFAULT_BRIDGE_CONTROLLER_STATE.assetExchangeRates;\n state.minimumBalanceForRentExemptionInLamports =\n DEFAULT_BRIDGE_CONTROLLER_STATE.minimumBalanceForRentExemptionInLamports;\n state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;\n state.tokenSecurityTypeDestination =\n DEFAULT_BRIDGE_CONTROLLER_STATE.tokenSecurityTypeDestination;\n state.quoteStreamComplete =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n state.batchSellTradesLoadingStatus =\n DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTradesLoadingStatus;\n });\n };\n\n /**\n * Sets the interval length based on the source chain\n */\n setChainIntervalLength = () => {\n const { state } = this;\n // Assume that BatchSell quote requests all have the same source chain\n // Use the first one to determine refresh rate\n const { srcChainId } = state.quoteRequest[0];\n const bridgeFeatureFlags = getBridgeFeatureFlags(this.messenger);\n\n const refreshRateOverride = srcChainId\n ? bridgeFeatureFlags.chains[formatChainIdToCaip(srcChainId)]?.refreshRate\n : undefined;\n const defaultRefreshRate = bridgeFeatureFlags.refreshRate;\n this.setIntervalLength(refreshRateOverride ?? defaultRefreshRate);\n };\n\n readonly #fetchBridgeQuotes = async ({\n quoteRequests,\n context,\n }: BridgePollingInput) => {\n this.#abortController?.abort(AbortReason.NewQuoteRequest);\n this.#batchSellTradesAbortController?.abort(AbortReason.NewQuoteRequest);\n\n this.#abortController = new AbortController();\n const quoteTraceStartTime = Date.now();\n const quoteTraceRequestId = uuid();\n const quoteAbortSignal = this.#abortController.signal;\n\n this.#fetchAssetExchangeRates(quoteRequests).catch((error) =>\n console.warn('Failed to fetch asset exchange rates', error),\n );\n\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.QuotesRequested,\n context,\n );\n\n const { sse, maxRefreshCount } = getBridgeFeatureFlags(this.messenger);\n const shouldStream =\n sse?.enabled &&\n hasMinimumRequiredVersion(this.#clientVersion, sse.minimumVersion);\n const isBatchSellRequest = quoteRequests.length > 1;\n\n this.update((state) => {\n state.quoteFetchError = DEFAULT_BRIDGE_CONTROLLER_STATE.quoteFetchError;\n state.tokenWarnings = DEFAULT_BRIDGE_CONTROLLER_STATE.tokenWarnings;\n state.quoteStreamComplete =\n DEFAULT_BRIDGE_CONTROLLER_STATE.quoteStreamComplete;\n state.quotesLastFetched = Date.now();\n state.quotesLoadingStatus = RequestStatus.LOADING;\n // Prevent clients from displaying stale batch sell fees\n if (quoteRequests.length > 1) {\n state.batchSellTradesLoadingStatus = RequestStatus.LOADING;\n state.batchSellTrades = DEFAULT_BRIDGE_CONTROLLER_STATE.batchSellTrades;\n }\n });\n\n const jwt = await this.#getJwt();\n\n const [firstQuoteRequest] = quoteRequests;\n let traceResult: QuoteTraceResult = 'error';\n let traceName: TraceName = TraceName.BatchSellQuotesFetched;\n if (!isBatchSellRequest) {\n traceName = isCrossChain(\n firstQuoteRequest.srcChainId,\n firstQuoteRequest.destChainId,\n )\n ? TraceName.BridgeQuotesFetched\n : TraceName.SwapQuotesFetched;\n }\n const tracedProviders = new Set<string>();\n const traceWithoutImpact = (\n request: Omit<SwapTraceRequest<TraceName>, 'tags'>,\n ) => {\n try {\n this.#trace(\n {\n ...request,\n tags: {\n feature: BRIDGE_FEATURE_ID_TO_FEATURE_TAG[context.feature_id],\n },\n },\n () => undefined,\n );\n } catch {\n // Telemetry failures must not affect quote fetching or state updates.\n }\n };\n const traceProviderFirstResult = (\n providerData: Parameters<typeof formatProviderLabel>[0],\n ) => {\n const provider = formatProviderLabel(providerData);\n if (isBatchSellRequest || tracedProviders.has(provider)) {\n return;\n }\n tracedProviders.add(provider);\n // Provider telemetry must not delay quote processing.\n traceWithoutImpact({\n name: TraceName.QuoteProviderFirstResult,\n startTime: quoteTraceStartTime,\n data: {\n provider,\n feature_id: context.feature_id,\n request_id: quoteTraceRequestId,\n swap_type: getSwapType(\n firstQuoteRequest.srcChainId,\n firstQuoteRequest.destChainId,\n ),\n srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),\n result: 'success',\n },\n });\n };\n\n try {\n const selectedAccount = this.#getMultichainSelectedAccount(\n firstQuoteRequest.walletAddress,\n );\n // This call is not awaited to prevent blocking quote fetching if the snap takes too long to respond\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#setMinimumBalanceForRentExemptionInLamports(\n firstQuoteRequest.srcChainId,\n selectedAccount?.metadata?.snap?.id,\n );\n // Use SSE if enabled and return early\n if (shouldStream || isBatchSellRequest) {\n const quoteCount = await this.#handleQuoteStreaming({\n quoteRequests,\n featureId: context.feature_id,\n jwt,\n selectedAccount,\n signal: quoteAbortSignal,\n traceProviderFirstResult,\n });\n if (quoteAbortSignal.aborted) {\n traceResult = 'cancelled';\n return;\n }\n traceResult = quoteCount > 0 ? 'success' : 'no_quotes';\n } else {\n // Otherwise use regular fetch\n const quotes = await this.fetchQuotes(\n firstQuoteRequest,\n context.feature_id,\n quoteAbortSignal,\n );\n for (const quote of quotes) {\n traceProviderFirstResult(quote.quote);\n }\n this.update((state) => {\n // Set the initial load time if this is the first fetch\n if (\n state.quotesRefreshCount ===\n DEFAULT_BRIDGE_CONTROLLER_STATE.quotesRefreshCount &&\n this.#quotesFirstFetched\n ) {\n state.quotesInitialLoadTime = Date.now() - this.#quotesFirstFetched;\n }\n state.quotes = quotes.map(toQuoteResponseV2);\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n traceResult = quotes.length > 0 ? 'success' : 'no_quotes';\n }\n } catch (error) {\n // Reset the quotes list if the fetch fails to avoid showing stale quotes\n this.update((state) => {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n });\n // Ignore abort errors\n if (isExpectedQuoteAbort(error, quoteAbortSignal)) {\n traceResult = 'cancelled';\n // Exit the function early to prevent other state updates\n return;\n }\n\n // Update loading status and error message\n this.update((state) => {\n // The error object reference is not guaranteed to exist on mobile so reading\n // the message directly could cause an error.\n let errorMessage;\n try {\n errorMessage =\n (error as Error)?.message ?? (error as Error).toString();\n } catch {\n // Intentionally empty\n } finally {\n state.quoteFetchError = errorMessage ?? 'Unknown error';\n }\n state.quotesLoadingStatus = RequestStatus.ERROR;\n });\n // Track event and log error\n this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.QuotesError, {\n ...context,\n failure_phase: FailurePhase.Quote,\n error_code: getQuoteFetchErrorCode(error),\n });\n console.log(\n `Failed to ${shouldStream ? 'stream' : 'fetch'} bridge quotes`,\n error,\n );\n } finally {\n traceWithoutImpact({\n name: traceName,\n startTime: quoteTraceStartTime,\n data: {\n srcChainId: formatChainIdToCaip(firstQuoteRequest.srcChainId),\n destChainId: formatChainIdToCaip(firstQuoteRequest.destChainId),\n ...(!isBatchSellRequest && {\n request_id: quoteTraceRequestId,\n feature_id: context.feature_id,\n result: traceResult,\n }),\n },\n });\n }\n\n // Update refresh count after fetching, validation and fee calculation have completed\n this.update((state) => {\n state.quotesRefreshCount += 1;\n });\n const hasNoFundedQuoteRequests = quoteRequests.every(\n ({ insufficientBal }) => Boolean(insufficientBal),\n );\n\n if (\n hasNoFundedQuoteRequests\n ? // If all quote requests are insufficiently funded, stop polling\n // So if a BatchSell has at least 1 sufficiently funded quote request, polling continues\n true\n : // Otherwise continue polling until the maximum number of refreshes has been reached\n this.state.quotesRefreshCount >= maxRefreshCount\n ) {\n this.stopAllPolling();\n }\n };\n\n readonly #handleQuoteStreaming = async ({\n quoteRequests,\n featureId,\n jwt,\n selectedAccount,\n signal,\n traceProviderFirstResult,\n }: {\n quoteRequests: GenericQuoteRequest[];\n featureId: FeatureId;\n jwt?: string;\n selectedAccount?: InternalAccount;\n signal?: AbortSignal;\n traceProviderFirstResult: (\n providerData: Parameters<typeof formatProviderLabel>[0],\n ) => void;\n }): Promise<number> => {\n /**\n * Tracks the number of valid quotes received from the current stream, which is used\n * to determine when to clear the quotes list and set the initial load time\n */\n let validQuotesCounter = 0;\n /**\n * Tracks all pending promises from appendFeesToQuotes calls to ensure they complete\n * before setting quotesLoadingStatus to FETCHED\n */\n const pendingFeeAppendPromises = new Set<Promise<void>>();\n\n await fetchBridgeQuoteStream(\n this.#fetchFn,\n quoteRequests,\n signal,\n featureId,\n this.#clientId,\n jwt,\n this.#config.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n {\n onQuoteValidationFailure: (validationFailures) =>\n this.#trackQuoteValidationFailures(validationFailures, featureId),\n onValidQuoteReceived: async (quote: QuoteResponse) => {\n const feeAppendPromise = (async () => {\n const quotesWithFees = await appendFeesToQuotes(\n quote.chainId,\n [quote],\n this.messenger,\n this.#getLayer1GasFee,\n selectedAccount,\n );\n if (quotesWithFees.length > 0) {\n validQuotesCounter += 1;\n traceProviderFirstResult(quote.quote);\n }\n this.update((state) => {\n // Clear previous quotes and quotes load time when first quote in the current\n // polling loop is received\n // This enables clients to continue showing the previous quotes while new\n // quotes are loading\n // Note: If there are no valid quotes until the 2nd fetch, quotesInitialLoadTime will be > refreshRate\n if (validQuotesCounter === 1) {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n if (!state.quotesInitialLoadTime && this.#quotesFirstFetched) {\n // Set the initial load time after the first quote is received\n state.quotesInitialLoadTime =\n Date.now() - this.#quotesFirstFetched;\n }\n }\n state.quotes = [...state.quotes, ...quotesWithFees];\n });\n })();\n pendingFeeAppendPromises.add(feeAppendPromise);\n feeAppendPromise\n .catch((error) => {\n // Catch errors to prevent them from breaking stream processing\n // If appendFeesToQuotes throws, the state update never happens, so no invalid entry is added\n console.error('Error appending fees to quote', error);\n })\n .finally(() => {\n pendingFeeAppendPromises.delete(feeAppendPromise);\n });\n // Await the promise to ensure errors are caught and handled before continuing\n // The promise is also tracked in pendingFeeAppendPromises for onClose to wait for\n await feeAppendPromise;\n },\n onTokenWarning: (warning) => {\n this.update((state) => {\n const isDuplicate = state.tokenWarnings.some(\n (existing) => existing.feature_id === warning.feature_id,\n );\n if (!isDuplicate) {\n state.tokenWarnings = [...state.tokenWarnings, warning];\n }\n });\n },\n onComplete: (data) => {\n this.update((state) => {\n state.quoteStreamComplete = data;\n });\n },\n onClose: async () => {\n // Wait for all pending appendFeesToQuotes operations to complete\n // before setting quotesLoadingStatus to FETCHED\n await Promise.allSettled(Array.from(pendingFeeAppendPromises));\n this.update((state) => {\n // If there are no valid quotes in the current stream, clear the quotes list\n // to remove quotes from the previous stream\n if (validQuotesCounter === 0) {\n state.quotes = DEFAULT_BRIDGE_CONTROLLER_STATE.quotes;\n }\n state.quotesLoadingStatus = RequestStatus.FETCHED;\n });\n },\n },\n this.#clientVersion,\n );\n\n return validQuotesCounter;\n };\n\n readonly #setMinimumBalanceForRentExemptionInLamports = async (\n srcChainId: GenericQuoteRequest['srcChainId'],\n snapId?: string,\n ) => {\n if (!isSolanaChainId(srcChainId) || !snapId) {\n return;\n }\n const minimumBalanceForRentExemptionInLamports =\n await getMinimumBalanceForRentExemptionInLamports(snapId, this.messenger);\n this.update((state) => {\n state.minimumBalanceForRentExemptionInLamports =\n minimumBalanceForRentExemptionInLamports;\n });\n };\n\n #getMultichainSelectedAccount(\n walletAddress?: GenericQuoteRequest['walletAddress'],\n ) {\n // Assume that all quotes in a batch are for the same account\n const addressToUse =\n walletAddress ?? this.state.quoteRequest[0].walletAddress;\n if (!addressToUse) {\n throw new Error('Account address is required');\n }\n const selectedAccount = this.messenger.call(\n 'AccountsController:getAccountByAddress',\n addressToUse,\n );\n return selectedAccount;\n }\n\n #getNetworkClientByChainId(chainId: Hex) {\n const networkClientId = this.messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n if (!networkClientId) {\n throw new Error(`No network client found for chainId: ${chainId}`);\n }\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n return networkClient;\n }\n\n readonly #getJwt = async (): Promise<string | undefined> => {\n try {\n const token = await this.messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n return token;\n } catch (error) {\n console.error('Error getting JWT token for bridge-api request', error);\n return undefined;\n }\n };\n\n readonly #getRequestMetadata = (\n quoteRequestIndex: number = 0,\n ): Omit<\n RequestMetadata,\n 'stx_enabled' | 'usd_amount_source' | 'security_warnings'\n > => {\n const quoteRequest = this.state.quoteRequest[quoteRequestIndex];\n const { walletAddress } = quoteRequest;\n const accountHardwareType = getAccountHardwareType(\n walletAddress\n ? this.#getMultichainSelectedAccount(walletAddress)\n : undefined,\n );\n\n return {\n slippage_limit: quoteRequest.slippage ?? 0,\n swap_type: getSwapTypeFromQuote(quoteRequest),\n custom_slippage: isCustomSlippage(quoteRequest.slippage),\n account_hardware_type: accountHardwareType,\n is_hardware_wallet: accountHardwareType !== null,\n };\n };\n\n readonly #getQuoteFetchData = (): Omit<\n QuoteFetchData,\n 'best_quote_provider' | 'price_impact' | 'can_submit'\n > => {\n return {\n quotes_count: this.state.quotes.length,\n quotes_list: this.state.quotes.map(({ quote }) =>\n formatProviderLabel(quote),\n ),\n initial_load_time_all_quotes: this.state.quotesInitialLoadTime ?? 0,\n has_gas_included_quote: this.state.quotes.some(\n ({ quote }) => quote.gasIncluded,\n ),\n };\n };\n\n readonly #getEventProperties = <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n propertiesFromClient: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n quoteRequestIndex: number = 0,\n ) => {\n const clientProps = propertiesFromClient as Record<string, unknown>;\n const baseProperties = {\n ...propertiesFromClient,\n location: clientProps?.location ?? this.#location,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n };\n const inputPrimaryDenominationProperties = {\n input_primary_denomination: this.state.inputPrimaryDenomination,\n };\n const batchSellClientChainProperties = propertiesFromClient as Pick<\n RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellTokenPageViewed],\n 'chain_id_source' | 'chain_id_destination'\n >;\n const batchSellBaseProperties = {\n chain_id_source: batchSellClientChainProperties.chain_id_source,\n chain_id_destination: batchSellClientChainProperties.chain_id_destination,\n location: clientProps?.location ?? this.#location,\n };\n const quoteRequest = this.state.quoteRequest[quoteRequestIndex];\n switch (eventName) {\n case UnifiedSwapBridgeEventName.ButtonClicked:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.PageViewed:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case BatchSellMetricsEventName.BatchSellTokenPageViewed:\n return batchSellBaseProperties;\n case BatchSellMetricsEventName.BatchSellTokenPageContinueClicked: {\n const propsFromClient =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellTokenPageContinueClicked];\n return {\n ...batchSellBaseProperties,\n source_token_count: propsFromClient.source_token_addresses.length,\n source_token_symbols: propsFromClient.source_token_symbols,\n source_token_addresses: propsFromClient.source_token_addresses,\n };\n }\n case BatchSellMetricsEventName.BatchSellQuotePageViewed:\n case BatchSellMetricsEventName.BatchSellQuotePageReviewClicked: {\n const propsFromClient =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellQuotePageViewed];\n return {\n ...batchSellBaseProperties,\n source_token_count: propsFromClient.source_token_addresses.length,\n source_token_symbols: propsFromClient.source_token_symbols,\n source_token_addresses: propsFromClient.source_token_addresses,\n destination_token_symbol: propsFromClient.destination_token_symbol,\n destination_token_address: propsFromClient.destination_token_address,\n usd_amount_source_tokens: propsFromClient.usd_amount_source_tokens,\n usd_amount_source_total: propsFromClient.usd_amount_source_total,\n source_token_slippages: propsFromClient.source_token_slippages,\n };\n }\n case BatchSellMetricsEventName.BatchSellReviewModalSubmitted: {\n const reviewModalProperties =\n propertiesFromClient as RequiredEventContextFromClient[BatchSellMetricsEventName.BatchSellReviewModalSubmitted];\n return {\n ...batchSellBaseProperties,\n source_token_count:\n reviewModalProperties.source_token_addresses.length,\n source_token_symbols: reviewModalProperties.source_token_symbols,\n source_token_addresses: reviewModalProperties.source_token_addresses,\n destination_token_symbol:\n reviewModalProperties.destination_token_symbol,\n destination_token_address:\n reviewModalProperties.destination_token_address,\n usd_amount_source_tokens:\n reviewModalProperties.usd_amount_source_tokens,\n usd_amount_source_total:\n reviewModalProperties.usd_amount_source_total,\n source_token_slippages: reviewModalProperties.source_token_slippages,\n usd_quoted_gas: reviewModalProperties.usd_quoted_gas,\n usd_quoted_return: reviewModalProperties.usd_quoted_return,\n };\n }\n case UnifiedSwapBridgeEventName.FiatCryptoToggleClicked:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n swap_type: getSwapTypeFromQuote(quoteRequest),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesValidationFailed:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n refresh_count: this.state.quotesRefreshCount,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesReceived:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n refresh_count: this.state.quotesRefreshCount,\n has_sufficient_funds: !quoteRequest.insufficientBal,\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesRequested:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n has_sufficient_funds: !quoteRequest.insufficientBal,\n ...inputPrimaryDenominationProperties,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.QuotesError:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n error_message: this.state.quoteFetchError,\n has_sufficient_funds: !quoteRequest.insufficientBal,\n failure_phase: FailurePhase.Quote,\n error_code: SwapBridgeErrorCode.QuoteFetchFailed,\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.Failed:\n // Populate the properties that the error occurred before the tx was submitted\n return {\n ...baseProperties,\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...propertiesFromClient,\n };\n case UnifiedSwapBridgeEventName.AllQuotesOpened:\n case UnifiedSwapBridgeEventName.AllQuotesSorted:\n case UnifiedSwapBridgeEventName.QuoteSelected:\n return {\n ...getRequestParams(\n quoteRequest,\n this.state.tokenSecurityTypeDestination,\n ),\n ...this.#getRequestMetadata(),\n ...this.#getQuoteFetchData(),\n ...baseProperties,\n };\n case UnifiedSwapBridgeEventName.AssetDetailTooltipClicked:\n case UnifiedSwapBridgeEventName.AssetPickerOpened:\n return baseProperties;\n // Inject `token_security_type_destination` from controller state so the\n // field is always present on this event. `baseProperties` (which spreads\n // `propertiesFromClient`) wins if the client supplies a value explicitly.\n case UnifiedSwapBridgeEventName.InputSourceDestinationSwitched:\n return {\n token_security_type_destination:\n this.state.tokenSecurityTypeDestination,\n ...baseProperties,\n };\n // These events may be published after the bridge-controller state is reset\n // So the BridgeStatusController populates all the properties\n case UnifiedSwapBridgeEventName.Submitted:\n case UnifiedSwapBridgeEventName.Completed:\n return propertiesFromClient;\n case UnifiedSwapBridgeEventName.InputChanged:\n default:\n return baseProperties;\n }\n };\n\n readonly #trackInputChangedEvents = (\n paramsToUpdate: Partial<GenericQuoteRequest>,\n featureId: FeatureId,\n quoteRequestIndex: number = 0,\n ) => {\n Object.entries(paramsToUpdate).forEach(([key, value]) => {\n const inputKey = toInputChangedPropertyKey[key as keyof QuoteRequest];\n const inputValue =\n toInputChangedPropertyValue[key as keyof QuoteRequest]?.(\n paramsToUpdate,\n );\n if (\n inputKey &&\n inputValue !== undefined &&\n this.state.quoteRequest[quoteRequestIndex] &&\n value !==\n this.state.quoteRequest[quoteRequestIndex][\n key as keyof GenericQuoteRequest\n ]\n ) {\n this.trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.InputChanged,\n {\n input: inputKey,\n input_value: inputValue,\n location: this.#location,\n feature_id: featureId,\n },\n );\n }\n });\n };\n\n /**\n * This method tracks cross-chain swaps events\n *\n * @param eventName - The name of the event to track\n * @param propertiesFromClient - Properties that can't be calculated from the event name and need to be provided by the client\n * @param quoteRequestIndex - The index of the quote request to track the event for\n * @example\n * this.trackUnifiedSwapBridgeEvent(UnifiedSwapBridgeEventName.ActionOpened, {\n * location: MetaMetricsSwapsEventSource.MainView,\n * });\n */\n trackUnifiedSwapBridgeEvent = <\n EventName extends BridgeControllerMetricsEventName,\n >(\n eventName: EventName,\n propertiesFromClient: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n quoteRequestIndex: number = 0,\n ) => {\n try {\n const combinedPropertiesForEvent = this.#getEventProperties<EventName>(\n eventName,\n propertiesFromClient,\n quoteRequestIndex,\n );\n\n this.#trackMetaMetricsFn(\n eventName,\n combinedPropertiesForEvent as CrossChainSwapsEventProperties<EventName>,\n );\n } catch (error) {\n console.error(\n `Error tracking cross-chain swaps MetaMetrics event ${eventName}`,\n error,\n );\n }\n };\n\n /**\n *\n * @param walletAddress - The address of the account to get the allowance for\n * @param contractAddress - The address of the ERC20 token contract on mainnet\n * @param destinationChainId - The chain ID of the destination network\n * @returns The atomic allowance of the ERC20 token contract\n */\n readonly #getUSDTMainnetAllowance = async (\n walletAddress: string,\n contractAddress: string,\n destinationChainId: GenericQuoteRequest['destChainId'],\n ): Promise<string> => {\n const networkClient = this.#getNetworkClientByChainId(CHAIN_IDS.MAINNET);\n const provider = networkClient?.provider;\n if (!provider) {\n throw new Error('No provider found');\n }\n\n const ethersProvider = new Web3Provider(provider);\n const contract = new Contract(contractAddress, abiERC20, ethersProvider);\n const spenderAddress = isCrossChain(CHAIN_IDS.MAINNET, destinationChainId)\n ? METABRIDGE_ETHEREUM_ADDRESS\n : SWAPS_CONTRACT_ADDRESSES[CHAIN_IDS.MAINNET];\n const allowance: BigNumber = await contract.allowance(\n walletAddress,\n spenderAddress,\n );\n return allowance.toString();\n };\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -62,6 +62,4 @@ export { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';
62
62
  export { getBridgeFeatureFlags } from './utils/feature-flags.js';
63
63
  export { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';
64
64
  export { isValidSwapsContractAddress, getSwapsContractAddress, fetchTokens, type SwapsToken, } from './utils/swaps.js';
65
- export { getAccountByAddress } from './utils/controllers/accounts.js';
66
- export { getFeatureFlags } from './utils/controllers/remote-feature-flags.js';
67
65
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EAAE,gCAAgC,EAAE,MAAM,8BAA8B,CAAC;AACrF,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAEpF,YAAY,EACV,mBAAmB,EACnB,8BAA8B,EAC9B,8BAA8B,EAC9B,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,4BAA4B,EAC5B,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAElF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,OAAO,EACP,MAAM,EACN,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oDAAoD,EACpD,iCAAiC,EACjC,0CAA0C,EAC1C,iCAAiC,EACjC,iCAAiC,EACjC,iDAAiD,EACjD,gCAAgC,EAChC,4CAA4C,EAC5C,iDAAiD,EACjD,2CAA2C,GAC5C,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,YAAY,EACV,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,KAAK,GACN,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,KAAK,aAAa,EAClB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO;AACL;;GAEG;AACH,KAAK,gBAAgB;AACrB;;GAEG;AACH,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EACzC,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gCAAgC,EAChC,eAAe,IAAI,cAAc,GAClC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -48,6 +48,4 @@ export { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';
48
48
  export { getBridgeFeatureFlags } from './utils/feature-flags.js';
49
49
  export { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';
50
50
  export { isValidSwapsContractAddress, getSwapsContractAddress, fetchTokens, } from './utils/swaps.js';
51
- export { getAccountByAddress } from './utils/controllers/accounts.js';
52
- export { getFeatureFlags } from './utils/controllers/remote-feature-flags.js';
53
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n InputPrimaryDenominationData,\n HashPresenceData,\n FailureTelemetryData,\n HashPresenceProperties,\n FailureTelemetryProperties,\n} from './utils/metrics/types.js';\n\nexport type { QuoteWarning } from './utils/quote-warnings/types.js';\nexport { hasSufficientGasForQuote } from './utils/quote-warnings/insufficient-gas-for-quote.js';\nexport { hasNetworkFee } from './utils/quote-warnings/network-fee-unavailable.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n SwapTraceRequest,\n SwapTraceFunction,\n SwapRelatedTraceName,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n QuoteMetadataMigrationPhase,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n isQuoteResponseV2,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport {\n sumAmounts,\n calcAtomicTokenAmount,\n calcNormalizedTokenAmount,\n} from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport {\n AmountsAndAssetSchema,\n type AmountsAndAsset,\n} from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport {\n BRIDGE_FEATURE_ID_TO_FEATURE_TAG,\n TraceFeatureTag as SwapFeatureTag,\n} from './constants/traces.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n\nexport { getAccountByAddress } from './utils/controllers/accounts.js';\nexport { getFeatureFlags } from './utils/controllers/remote-feature-flags.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,EACzB,kCAAkC,EAClC,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAsBtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAElF,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAmC9E,OAAO,EAGL,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AAepB,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAS3D,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EAErB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,qBAAqB,GAEtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,4BAA4B,EAC5B,6CAA6C,EAC7C,6BAA6B,EAC7B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAI/B,OAAO;AAKL;;GAEG;AACH,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,+BAA+B,EAC/B,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAE/B,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,EACxB,yCAAyC,EACzC,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gCAAgC,EAChC,eAAe,IAAI,cAAc,GAClC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,GAEZ,MAAM,kBAAkB,CAAC","sourcesContent":["export { BridgeController } from './bridge-controller.js';\n\nexport {\n BatchSellMetricsEventName,\n UnifiedSwapBridgeEventName,\n BATCH_SELL_EVENT_CATEGORY,\n UNIFIED_SWAP_BRIDGE_EVENT_CATEGORY,\n BatchSellMetricsLocation,\n InputAmountPreset,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n FailurePhase,\n SwapBridgeErrorCode,\n} from './utils/metrics/constants.js';\n\nexport type { BridgeControllerMetricsEventName } from './utils/metrics/constants.js';\nexport type { BridgeControllerMetricsLocation } from './utils/metrics/constants.js';\n\nexport type {\n AccountHardwareType,\n RequiredEventContextFromClient,\n CrossChainSwapsEventProperties,\n TradeData,\n RequestParams,\n RequestMetadata,\n TxStatusData,\n QuoteFetchData,\n InputPrimaryDenominationData,\n HashPresenceData,\n FailureTelemetryData,\n HashPresenceProperties,\n FailureTelemetryProperties,\n} from './utils/metrics/types.js';\n\nexport type { QuoteWarning } from './utils/quote-warnings/types.js';\nexport { hasSufficientGasForQuote } from './utils/quote-warnings/insufficient-gas-for-quote.js';\nexport { hasNetworkFee } from './utils/quote-warnings/network-fee-unavailable.js';\n\nexport {\n getAccountHardwareType,\n formatProviderLabel,\n getRequestParams,\n getSwapType,\n isHardwareWallet,\n isCustomSlippage,\n getQuotesReceivedProperties,\n} from './utils/metrics/properties.js';\n\nexport { getQuoteFetchErrorCode } from './utils/metrics/failure-telemetry.js';\n\nexport type {\n ChainConfiguration,\n L1GasFees,\n NonEvmFees,\n GasMultiplierByChainId,\n FeatureFlagResponse,\n GenericQuoteRequest,\n BatchSellTradesResponse,\n GaslessProperties,\n SimulatedGasFeeLimits,\n Step,\n RefuelData,\n FeeData,\n Intent,\n IntentOrderLike,\n BridgeControllerState,\n InputPrimaryDenomination,\n BridgeControllerAction,\n BridgeControllerActions,\n BridgeControllerEvents,\n BridgeControllerMessenger,\n FeatureFlagsPlatformConfig,\n TxFeeGasLimits,\n TokenFeature,\n QuoteStreamCompleteData,\n BridgeControllerGetStateAction,\n BridgeControllerStateChangeEvent,\n DeepPartial,\n SwapTraceRequest,\n SwapTraceFunction,\n SwapRelatedTraceName,\n} from './types.js';\n\nexport {\n type QuoteMetadata,\n type TokenAmountValues,\n QuoteMetadataMigrationPhase,\n} from './utils/quote-metadata/types.js';\nexport {\n validateQuoteResponseV1,\n QuoteResponseSchemaV1,\n type QuoteResponseV1,\n} from './validators/quote-response-v1.js';\nexport { mergeQuoteMetadata } from './utils/quote-metadata/merge.js';\n\nexport {\n AssetType,\n SortOrder,\n ChainId,\n RequestStatus,\n StatusTypes,\n} from './types.js';\n\nexport type {\n BridgeControllerUpdateBridgeQuoteRequestParamsAction,\n BridgeControllerFetchQuotesAction,\n BridgeControllerStopPollingForQuotesAction,\n BridgeControllerSetLocationAction,\n BridgeControllerGetLocationAction,\n BridgeControllerSetInputPrimaryDenominationAction,\n BridgeControllerResetStateAction,\n BridgeControllerSetChainIntervalLengthAction,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerUpdateBatchSellTradesAction,\n} from './bridge-controller-method-action-types.js';\n\nexport { AbortReason } from './utils/metrics/constants.js';\n\nexport type {\n TxData,\n BitcoinTradeData,\n TronTradeData,\n StellarTradeData,\n Trade,\n} from './validators/trade.js';\nexport {\n isBitcoinTrade,\n isTronTrade,\n isEvmTxData,\n isStellarTrade,\n} from './validators/trade.js';\nexport {\n validateQuoteResponse,\n type QuoteResponse,\n isQuoteResponseV2,\n} from './validators/quote-response.js';\nexport type { Quote } from './validators/quote.js';\nexport { FeeType, DiscountType } from './validators/quote.js';\nexport { ActionTypes } from './validators/step.js';\nexport { toQuoteResponseV1 } from './coercers/quote-response-v2-to-v1.js';\nexport { toQuoteResponseV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport { toQuoteMetadataV1 } from './utils/quote-metadata/to-quote-metadata-v1.js';\nexport { toQuoteMetadataV2 } from './utils/quote-metadata/to-quote-metadata-v2.js';\n\nexport {\n sumAmounts,\n calcAtomicTokenAmount,\n calcNormalizedTokenAmount,\n} from './utils/number-formatters.js';\nexport { assetIdsMatch } from './utils/assets.js';\n\nexport {\n validateQuoteStreamComplete,\n QuoteStreamCompleteReason,\n} from './validators/quote-stream-complete.js';\nexport { BatchSellTransactionType } from './validators/batch-sell.js';\nexport {\n AmountsAndAssetSchema,\n type AmountsAndAsset,\n} from './validators/amount-and-asset.js';\nexport { TokenFeatureType } from './validators/token-feature.js';\nexport type {\n BridgeAsset,\n BridgeAssetV2,\n MinimalAsset,\n} from './validators/bridge-asset.js';\nexport {\n BridgeAssetSchema,\n validateBridgeAsset,\n validateBridgeAssetV2,\n MinimalAssetSchema,\n BridgeAssetV2Schema,\n BridgeAssetSecurityDataType,\n} from './validators/bridge-asset.js';\nexport { FeatureId } from './validators/feature-flags.js';\nexport { toBridgeAssetV2 } from './coercers/quote-response-v1-to-v2.js';\n\nexport {\n ALLOWED_BRIDGE_CHAIN_IDS,\n BridgeClientId,\n BRIDGE_CONTROLLER_NAME,\n BRIDGE_QUOTE_MAX_ETA_SECONDS,\n BRIDGE_QUOTE_MAX_RETURN_DIFFERENCE_PERCENTAGE,\n BRIDGE_PREFERRED_GAS_ESTIMATE,\n BRIDGE_MM_FEE_RATE,\n REFRESH_INTERVAL_MS,\n DEFAULT_MAX_REFRESH_COUNT,\n DEFAULT_BRIDGE_CONTROLLER_STATE,\n METABRIDGE_CHAIN_TO_ADDRESS_MAP,\n BRIDGE_DEV_API_BASE_URL,\n BRIDGE_UAT_API_BASE_URL,\n BRIDGE_PROD_API_BASE_URL,\n} from './constants/bridge.js';\n\nexport type { AllowedBridgeChainIds } from './constants/bridge.js';\n\nexport {\n /**\n * @deprecated This type should not be used. Use {@link BridgeAsset} instead.\n */\n type SwapsTokenObject,\n /**\n * @deprecated This map should not be used. Use getNativeAssetForChainId\" } instead.\n */\n SWAPS_CHAINID_DEFAULT_TOKEN_MAP,\n} from './constants/tokens.js';\n\nexport {\n SWAPS_API_V2_BASE_URL,\n SWAPS_CONTRACT_ADDRESSES,\n SWAPS_WRAPPED_TOKENS_ADDRESSES,\n ALLOWED_CONTRACT_ADDRESSES,\n} from './constants/swaps.js';\n\nexport {\n MetricsActionType,\n MetricsSwapType,\n} from './utils/metrics/constants.js';\n\nexport {\n isEthUsdt,\n isNativeAddress,\n isSolanaChainId,\n isBitcoinChainId,\n isTronChainId,\n isStellarChainId,\n isNonEvmChainId,\n getNativeAssetForChainId,\n getDefaultBridgeControllerState,\n isCrossChain,\n} from './utils/bridge.js';\n\nexport {\n isValidQuoteRequest,\n isValidBatchSellQuoteRequest,\n} from './validators/quote-request.js';\n\nexport {\n calcSlippagePercentage,\n calcQuoteMetadata,\n} from './utils/quote-metadata/calculators.js';\n\nexport { calcLatestSrcBalance } from './utils/balance.js';\n\nexport {\n fetchBridgeTokens,\n getClientHeaders,\n fetchBridgeQuoteStream,\n} from './utils/fetch.js';\n\nexport { appendFeesToQuotes } from './utils/quote-fees.js';\n\nexport {\n formatChainIdToCaip,\n formatChainIdToHex,\n formatAddressToCaipReference,\n formatAddressToAssetId,\n formatChainIdToDec,\n} from './utils/caip-formatters.js';\n\nexport { extractTradeData } from './utils/trade-utils.js';\n\nexport {\n selectBridgeQuotes,\n selectBatchSellQuotes,\n selectBatchSellTrades,\n selectDefaultSlippagePercentage,\n type BridgeAppState,\n selectExchangeRateByAssetId,\n selectIsQuoteExpired,\n selectBridgeFeatureFlags,\n selectMinimumBalanceForRentExemptionInSOL,\n selectTokenWarnings,\n} from './selectors.js';\n\nexport {\n BRIDGE_FEATURE_ID_TO_FEATURE_TAG,\n TraceFeatureTag as SwapFeatureTag,\n} from './constants/traces.js';\n\nexport { DEFAULT_FEATURE_FLAG_CONFIG } from './constants/bridge.js';\n\nexport { getBridgeFeatureFlags } from './utils/feature-flags.js';\n\nexport { BRIDGE_DEFAULT_SLIPPAGE } from './utils/slippage.js';\n\nexport {\n isValidSwapsContractAddress,\n getSwapsContractAddress,\n fetchTokens,\n type SwapsToken,\n} from './utils/swaps.js';\n"]}
package/dist/types.d.ts CHANGED
@@ -299,7 +299,7 @@ export type BridgeControllerGetStateAction = ControllerGetStateAction<typeof BRI
299
299
  export type BridgeControllerStateChangeEvent = ControllerStateChangeEvent<typeof BRIDGE_CONTROLLER_NAME, BridgeControllerState>;
300
300
  export type BridgeControllerActions = BridgeControllerGetStateAction | BridgeControllerMethodActions;
301
301
  export type BridgeControllerEvents = BridgeControllerStateChangeEvent;
302
- export type AllowedActions = AccountsControllerGetAccountByAddressAction | AssetsControllerGetExchangeRatesForBridgeAction | AuthenticationControllerGetBearerTokenAction | CurrencyRateControllerGetStateAction | NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetNetworkClientByIdAction | RemoteFeatureFlagControllerGetStateAction | SnapControllerHandleRequestAction;
302
+ export type AllowedActions = AccountsControllerGetAccountByAddressAction | AuthenticationControllerGetBearerTokenAction | CurrencyRateControllerGetStateAction | SnapControllerHandleRequestAction | NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetNetworkClientByIdAction | RemoteFeatureFlagControllerGetStateAction | AssetsControllerGetExchangeRatesForBridgeAction;
303
303
  export type AllowedEvents = never;
304
304
  /**
305
305
  * The messenger for the BridgeController.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,KAAK,EAAE,+CAA+C,EAAE,MAAM,6BAA6B,CAAC;AACnG,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,mDAAmD,EACnD,2CAA2C,EAC5C,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,4CAA4C,EAAE,MAAM,wCAAwC,CAAC;AAC3G,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AAC1G,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,EACX,GAAG,EACJ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,SAAS,SAAS,MAAM,IAAI;KAC1D,KAAK,IAAI,SAAS,GAAG,GAAG,KAAK,EAAE,SAC5B,GAAG,MAAM,OAAO,MAAM,EAAE,GACxB,GAAG,MAAM,SAAS,MAAM,EAAE,GAC1B,GAAG,MAAM,aAAa,MAAM,EAAE,GAC9B,KAAK,GACL,KAAK;CACV,CAAC,SAAS,CAAC,CAAC;AAEb;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAC7C,YAAY,EACZ,MAAM,GAAG,MAAM,GAAG,eAAe,CAClC,GAAG;IACF,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,UAAU,SAAS,MAAM,IAAI;IACzD,CAAC,OAAO,EACN,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,EACrC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,GAC9B,OAAO,CAAC;IACX,CAAC,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,WAAW,GAAG,GAAG,GAAG,MAAM,EACjC,IAAI,CAAC,EAAE,WAAW,KAEf,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB;;GAEG;AACH,oBAAY,SAAS;IACnB,4DAA4D;IAC5D,MAAM,WAAW;IACjB,qBAAqB;IACrB,KAAK,UAAU;IACf,kCAAkC;IAClC,GAAG,QAAQ;IACX;;;OAGG;IACH,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAExE,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG,YAAY,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E;;GAEG;AACH,oBAAY,SAAS;IACnB,QAAQ,mBAAmB;IAC3B,OAAO,oBAAoB;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,WAAW,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,CAAC;AAC7B,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGrE;;;;GAIG;AACH,MAAM,MAAM,YAAY,CACtB,WAAW,GAAG,OAAO,GAAG,MAAM,EAC9B,gBAAgB,GAAG,MAAM,EACzB,iBAAiB,GAAG,MAAM,IACxB;IACF,aAAa,EAAE,iBAAiB,CAAC;IACjC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,gBAAgB,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,oBAAY,WAAW;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAC5C,GAAG,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,EAAE,WAAW;AAChD,AADqC,WAAW;AAChD,GAAG,GAAG,WAAW,GAAG,MAAM,EAAE,qBAAqB;AACjD,AAD4B,qBAAqB;AACjD,GAAG,GAAG,aAAa,GAAG,MAAM,CAC7B,CAAC;AAEF,MAAM,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAE5C,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC;AAE9B,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAElD,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAChD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE9C,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,KAAK,CACzC,OAAO,6BAA6B,CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtE,KAAK,gBAAgB,CAAC,IAAI,IACxB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACjC,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,WAAW,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5C,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,GACzB,WAAW,CAAC,IAAI,CAAC,SAAS,MAAM,GAC9B,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAC9B,IAAI,CAAC;AACf,MAAM,MAAM,WAAW,CAAC,IAAI,IAAI,IAAI,SAAS,MAAM,GAC/C,IAAI,GACJ;KACG,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,GACpC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAChC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEN,oBAAY,OAAO;IACjB,GAAG,IAAI;IACP,QAAQ,KAAK;IACb,GAAG,KAAK;IACR,OAAO,MAAM;IACb,MAAM,MAAM;IACZ,IAAI,OAAO;IACX,QAAQ,QAAQ;IAChB,SAAS,QAAQ;IACjB,KAAK,QAAQ;IACb,MAAM,mBAAmB;IACzB,GAAG,iBAAiB;IACpB,4FAA4F;IAC5F,OAAO,iBAAiB;IACxB,IAAI,YAAY;IAChB,GAAG,OAAO;IACV,KAAK,MAAM;IACX,QAAQ,MAAM;IACd,OAAO,OAAO;IACd,GAAG,OAAO;IACV,SAAS,OAAO;CACjB;AAED,MAAM,MAAM,0BAA0B,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE5E,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE9E,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;;OAEG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;;;;;;OASG;IACH,mBAAmB,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACxD;;;OAGG;IACH,wCAAwC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD;;;OAGG;IACH,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B;;;;;;OAMG;IACH,4BAA4B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C;;;;OAIG;IACH,wBAAwB,EAAE,wBAAwB,CAAC;IACnD;;;OAGG;IACH,mBAAmB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACpD;;OAEG;IACH,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAChD;;OAEG;IACH,4BAA4B,EAAE,aAAa,GAAG,IAAI,CAAC;CACpD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,CAChC,YAAY,SAAS,MAAM,gBAAgB,IACzC;IACF,IAAI,EAAE,GAAG,OAAO,sBAAsB,IAAI,YAAY,EAAE,CAAC;IACzD,OAAO,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,wBAAwB,CACnE,OAAO,sBAAsB,EAC7B,qBAAqB,CACtB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,0BAA0B,CACvE,OAAO,sBAAsB,EAC7B,qBAAqB,CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,8BAA8B,GAC9B,6BAA6B,CAAC;AAElC,MAAM,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;AAEtE,MAAM,MAAM,cAAc,GACtB,2CAA2C,GAC3C,4CAA4C,GAC5C,oCAAoC,GACpC,iCAAiC,GACjC,mDAAmD,GACnD,2CAA2C,GAC3C,yCAAyC,GACzC,+CAA+C,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,CAC/C,OAAO,sBAAsB,EAC7B,uBAAuB,GAAG,cAAc,EACxC,sBAAsB,GAAG,aAAa,CACvC,CAAC"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyFA;;GAEG;AACH,MAAM,CAAN,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,KAAT,SAAS,QAYpB;AA2BD;;GAEG;AACH,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAmED,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;AACvB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAsDD,MAAM,CAAN,IAAY,OAqBX;AArBD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;IACb,wDAAyB,CAAA;IACzB,gDAAoB,CAAA;IACpB,4FAA4F;IAC5F,wDAAwB,CAAA;IACxB,6CAAgB,CAAA;IAChB,sCAAU,CAAA;IACV,yCAAW,CAAA;IACX,+CAAc,CAAA;IACd,8CAAc,CAAA;IACd,sCAAU,CAAA;IACV,kDAAgB,CAAA;AAClB,CAAC,EArBW,OAAO,KAAP,OAAO,QAqBlB;AAQD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,uDAAW,CAAA;IACX,mDAAS,CAAA;AACX,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type { AssetsControllerGetExchangeRatesForBridgeAction } from '@metamask/assets-controller';\nimport type { CurrencyRateControllerGetStateAction } from '@metamask/assets-controllers';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { TraceRequest } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { AuthenticationControllerGetBearerTokenAction } from '@metamask/profile-sync-controller/auth';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { SnapControllerHandleRequestAction } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n CaipAccountId,\n CaipAssetId,\n CaipAssetType,\n CaipChainId,\n Hex,\n} from '@metamask/utils';\n\nimport type { BridgeControllerMethodActions } from './bridge-controller-method-action-types.js';\nimport type { BridgeController } from './bridge-controller.js';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge.js';\nimport { TraceFeatureTag } from './constants/traces.js';\nimport type { TraceOperation } from './constants/traces.js';\nimport type { SimulatedGasFeeLimitsSchema } from './validators/batch-sell.js';\nimport type { BatchSellTradesResponseSchema } from './validators/batch-sell.js';\nimport type {\n ChainConfigurationSchema,\n ChainRankingSchema,\n PlatformConfigSchema,\n} from './validators/feature-flags.js';\nimport type { IntentSchema } from './validators/intent.js';\nimport type { QuoteResponseV1 } from './validators/quote-response-v1.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\nimport type { QuoteStreamCompleteSchema } from './validators/quote-stream-complete.js';\nimport type { TxFeeGasLimitsSchema } from './validators/quote.js';\nimport type { FeeDataSchema } from './validators/quote.js';\nimport type { GaslessPropertiesSchema } from './validators/quote.js';\nimport type { StepSchema } from './validators/step.js';\nimport type { TokenFeatureSchema } from './validators/token-feature.js';\n\n/**\n * Filters the client-supplied trace names to only include swap/bridge/batch sell related names\n */\nexport type SwapRelatedTraceName<TNameEnum extends string> = {\n [TName in TNameEnum]: `${TName}` extends\n | `${string}Swap${string}`\n | `${string}Bridge${string}`\n | `${string}Batch Sell${string}`\n ? TName\n : never;\n}[TNameEnum];\n\n/**\n * Trace request type for swap/bridge traces\n */\nexport type SwapTraceRequest<TTraceName> = Omit<\n TraceRequest,\n 'name' | 'tags' | 'parentContext'\n> & {\n name: TTraceName;\n op?: TraceOperation;\n tags: { feature: TraceFeatureTag };\n};\n\n/**\n * Generic trace function type that supports both mobile and extension interfaces\n */\nexport type SwapTraceFunction<TTraceName extends string> = {\n <TResult>(\n request: SwapTraceRequest<TTraceName>,\n fn: (args?: unknown) => TResult,\n ): TResult;\n (request: SwapTraceRequest<TTraceName>): unknown;\n};\n\nexport type FetchFunction = (\n input: RequestInfo | URL | string,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = Infer<typeof ChainConfigurationSchema>;\n\nexport type ChainRanking = Infer<typeof ChainRankingSchema>;\n\n/**\n * @deprecated Avoid introducing new usages and use the QuoteResponseV2 feeData.network value instead\n */\nexport type L1GasFees = {\n l1GasFeesInHexWei?: Hex; // l1 fees for approval and trade in hex wei, appended by BridgeController.#appendL1GasFees\n};\n\n/**\n * @deprecated Avoid introducing new usages and use the QuoteResponseV2 feeData.network value instead\n */\nexport type NonEvmFees = {\n nonEvmFeesInNative?: string; // Non-EVM chain fees in native units (SOL for Solana, BTC for Bitcoin)\n};\n\nexport type InputPrimaryDenomination = 'token_amount' | 'fiat_value';\n\n/**\n * Asset exchange rate values for a given chain and address\n */\nexport type ExchangeRate = { exchangeRate?: string; usdExchangeRate?: string };\n\n/**\n * Sort order set by the user\n */\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\n/**\n * This is the interface for the token object used in the extension client\n * In addition to the {@link BridgeAsset} fields, it includes balance information\n */\nexport type BridgeToken = {\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: number | Hex | ChainId | CaipChainId;\n balance: string; // raw balance\n // TODO deprecate this field and use balance instead\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n occurrences?: number;\n};\n\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\nexport type FeatureFlagResponse = Infer<typeof PlatformConfigSchema>;\n\n// TODO move definition to validators.ts\n/**\n * This is the interface for the quote request sent to the bridge-api\n * and should only be used by the fetchBridgeQuotes utility function\n * Components and redux stores should use the {@link GenericQuoteRequest} type\n */\nexport type QuoteRequest<\n ChainIdType = ChainId | number,\n TokenAddressType = string,\n WalletAddressType = string,\n> = {\n walletAddress: WalletAddressType;\n destWalletAddress?: WalletAddressType;\n srcChainId: ChainIdType;\n destChainId: ChainIdType;\n srcTokenAddress: TokenAddressType;\n destTokenAddress: TokenAddressType;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage?: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n /**\n * Whether the response should include gasless swap quotes\n * This should be true if the user has opted in to STX on the client\n * and the current network has STX support\n */\n gasIncluded: boolean;\n /**\n * Whether to request quotes that use EIP-7702 delegated gasless execution\n */\n gasIncluded7702: boolean;\n /**\n * The fee that will be charged by MetaMask\n */\n fee?: number;\n};\n\nexport enum StatusTypes {\n SUBMITTED = 'SUBMITTED',\n UNKNOWN = 'UNKNOWN',\n FAILED = 'FAILED',\n PENDING = 'PENDING',\n COMPLETE = 'COMPLETE',\n}\n\n/**\n * These are types that components pass in. Since data is a mix of types when coming from the redux store, we need to use a generic type that can cover all the types.\n * Payloads with this type are transformed into QuoteRequest by fetchBridgeQuotes right before fetching quotes\n */\nexport type GenericQuoteRequest = QuoteRequest<\n Hex | CaipChainId | string | number, // chainIds\n Hex | CaipAssetId | string, // assetIds/addresses\n Hex | CaipAccountId | string // accountIds/addresses\n>;\n\nexport type Step = Infer<typeof StepSchema>;\n\nexport type RefuelData = Step;\n\nexport type FeeData = Infer<typeof FeeDataSchema>;\n\nexport type Intent = Infer<typeof IntentSchema>;\nexport type IntentOrderLike = Intent['order'];\n\nexport type BatchSellTradesRequest = {\n quotes: QuoteResponseV1[];\n stxEnabled: boolean;\n};\n\n/**\n * This is the bridge-api response for the obtainGaslessBatch method\n */\nexport type BatchSellTradesResponse = Infer<\n typeof BatchSellTradesResponseSchema\n>;\n\nexport type SimulatedGasFeeLimits = Infer<typeof SimulatedGasFeeLimitsSchema>;\nexport type TxFeeGasLimits = Infer<typeof TxFeeGasLimitsSchema>;\n\nexport type GaslessProperties = Infer<typeof GaslessPropertiesSchema>;\n\ntype DeepPartialValue<Type> =\n NonNullable<Type> extends (infer U)[]\n ? DeepPartial<U>[]\n : NonNullable<Type> extends readonly (infer U)[]\n ? readonly DeepPartial<U>[]\n : NonNullable<Type> extends object\n ? DeepPartial<NonNullable<Type>>\n : Type;\nexport type DeepPartial<Type> = Type extends string\n ? Type\n : {\n [K in keyof Type]?: null extends Type[K]\n ? DeepPartialValue<Type[K]> | null\n : DeepPartialValue<Type[K]>;\n };\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n SOLANA = 1151111081099710,\n BTC = 20000000000001,\n /** Internal bridge / token-list id for Stellar pubnet (Token API chain: stellar:pubnet). */\n STELLAR = 20000000000002,\n TRON = 728126428,\n SEI = 1329,\n MONAD = 143,\n HYPEREVM = 999,\n MEGAETH = 4326,\n ARC = 5042,\n ROBINHOOD = 4663,\n}\n\nexport type FeatureFlagsPlatformConfig = Infer<typeof PlatformConfigSchema>;\n\nexport type TokenFeature = Infer<typeof TokenFeatureSchema>;\n\nexport type QuoteStreamCompleteData = Infer<typeof QuoteStreamCompleteSchema>;\n\nexport enum RequestStatus {\n LOADING = 0,\n FETCHED = 1,\n ERROR = 2,\n}\n\nexport type BridgeControllerState = {\n quoteRequest: Partial<GenericQuoteRequest>[];\n quotes: QuoteResponse[];\n /**\n * The time elapsed between the initial quote fetch and when the first valid quote was received\n */\n quotesInitialLoadTime: number | null;\n /**\n * The timestamp of when the latest quote fetch started\n */\n quotesLastFetched: number | null;\n /**\n * The status of the quote fetch, including fee calculations and validations\n * This is set to\n * - LOADING when the quote fetch starts\n * - FETCHED when the process completes successfully, including when quotes are empty\n * - ERROR when any errors occur\n *\n * When SSE is enabled, this is set to LOADING even when a quote is available. It is only\n * set to FETCHED when the stream is closed and all quotes have been received\n */\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n /**\n * The number of times the quotes have been refreshed, starts at 0 and is\n * incremented at the end of each quote fetch\n */\n quotesRefreshCount: number;\n /**\n * Asset exchange rates for EVM and multichain assets that are not indexed by the assets controllers\n */\n assetExchangeRates: Record<CaipAssetType, ExchangeRate>;\n /**\n * When the src token is SOL, this needs to be subtracted from their balance to determine\n * the max amount that can be sent.\n */\n minimumBalanceForRentExemptionInLamports: string | null;\n /**\n * Security alerts for the destination token in the current quote request,\n * populated from `token_warning` SSE events.\n */\n tokenWarnings: TokenFeature[];\n /**\n * Client-supplied security classification for the destination token in the\n * current quote request, used as the `token_security_type_destination`\n * analytics property. Set via the `context` arg of\n * `updateBridgeQuoteRequestParams` and reset whenever the quote request is\n * reset. `null` when the client has no security data for the token.\n */\n tokenSecurityTypeDestination: string | null;\n /**\n * The denomination currently shown as the primary source amount input.\n * This is persisted as a user preference so returning to the flow restores\n * the last selected fiat/token display mode.\n */\n inputPrimaryDenomination: InputPrimaryDenomination;\n /**\n * Metadata about the completed quote stream, populated from the `complete` SSE event.\n * Set to null at the start of each fetch and updated when the complete event is received.\n */\n quoteStreamComplete: QuoteStreamCompleteData | null;\n /**\n * Contains gasless transaction data and fees for BatchSell quotes, provided by the obtainGaslessBatch API\n */\n batchSellTrades: BatchSellTradesResponse | null;\n /**\n * The status of the batch sell trades fetch, including fee calculations and validations\n */\n batchSellTradesLoadingStatus: RequestStatus | null;\n};\n\n/**\n * @deprecated Use the separate method action types (e.g.,\n * `BridgeControllerFetchQuotesAction`) instead.\n */\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\nexport type BridgeControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type BridgeControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type BridgeControllerActions =\n | BridgeControllerGetStateAction\n | BridgeControllerMethodActions;\n\nexport type BridgeControllerEvents = BridgeControllerStateChangeEvent;\n\nexport type AllowedActions =\n | AccountsControllerGetAccountByAddressAction\n | AssetsControllerGetExchangeRatesForBridgeAction\n | AuthenticationControllerGetBearerTokenAction\n | CurrencyRateControllerGetStateAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | RemoteFeatureFlagControllerGetStateAction\n | SnapControllerHandleRequestAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = Messenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents\n>;\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyFA;;GAEG;AACH,MAAM,CAAN,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,4DAA4D;IAC5D,8BAAiB,CAAA;IACjB,qBAAqB;IACrB,4BAAe,CAAA;IACf,kCAAkC;IAClC,wBAAW,CAAA;IACX;;;OAGG;IACH,gCAAmB,CAAA;AACrB,CAAC,EAZW,SAAS,KAAT,SAAS,QAYpB;AA2BD;;GAEG;AACH,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wCAA2B,CAAA;IAC3B,wCAA2B,CAAA;AAC7B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAmED,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;AACvB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAsDD,MAAM,CAAN,IAAY,OAqBX;AArBD,WAAY,OAAO;IACjB,mCAAO,CAAA;IACP,8CAAa,CAAA;IACb,oCAAQ,CAAA;IACR,6CAAa,CAAA;IACb,2CAAY,CAAA;IACZ,wCAAW,CAAA;IACX,iDAAgB,CAAA;IAChB,mDAAiB,CAAA;IACjB,2CAAa,CAAA;IACb,wDAAyB,CAAA;IACzB,gDAAoB,CAAA;IACpB,4FAA4F;IAC5F,wDAAwB,CAAA;IACxB,6CAAgB,CAAA;IAChB,sCAAU,CAAA;IACV,yCAAW,CAAA;IACX,+CAAc,CAAA;IACd,8CAAc,CAAA;IACd,sCAAU,CAAA;IACV,kDAAgB,CAAA;AAClB,CAAC,EArBW,OAAO,KAAP,OAAO,QAqBlB;AAQD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,uDAAW,CAAA;IACX,uDAAW,CAAA;IACX,mDAAS,CAAA;AACX,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\nimport type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type { AssetsControllerGetExchangeRatesForBridgeAction } from '@metamask/assets-controller';\nimport type { CurrencyRateControllerGetStateAction } from '@metamask/assets-controllers';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { TraceRequest } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n} from '@metamask/network-controller';\nimport type { AuthenticationControllerGetBearerTokenAction } from '@metamask/profile-sync-controller/auth';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { SnapControllerHandleRequestAction } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n CaipAccountId,\n CaipAssetId,\n CaipAssetType,\n CaipChainId,\n Hex,\n} from '@metamask/utils';\n\nimport type { BridgeControllerMethodActions } from './bridge-controller-method-action-types.js';\nimport type { BridgeController } from './bridge-controller.js';\nimport type { BRIDGE_CONTROLLER_NAME } from './constants/bridge.js';\nimport { TraceFeatureTag } from './constants/traces.js';\nimport type { TraceOperation } from './constants/traces.js';\nimport type { SimulatedGasFeeLimitsSchema } from './validators/batch-sell.js';\nimport type { BatchSellTradesResponseSchema } from './validators/batch-sell.js';\nimport type {\n ChainConfigurationSchema,\n ChainRankingSchema,\n PlatformConfigSchema,\n} from './validators/feature-flags.js';\nimport type { IntentSchema } from './validators/intent.js';\nimport type { QuoteResponseV1 } from './validators/quote-response-v1.js';\nimport type { QuoteResponse } from './validators/quote-response.js';\nimport type { QuoteStreamCompleteSchema } from './validators/quote-stream-complete.js';\nimport type { TxFeeGasLimitsSchema } from './validators/quote.js';\nimport type { FeeDataSchema } from './validators/quote.js';\nimport type { GaslessPropertiesSchema } from './validators/quote.js';\nimport type { StepSchema } from './validators/step.js';\nimport type { TokenFeatureSchema } from './validators/token-feature.js';\n\n/**\n * Filters the client-supplied trace names to only include swap/bridge/batch sell related names\n */\nexport type SwapRelatedTraceName<TNameEnum extends string> = {\n [TName in TNameEnum]: `${TName}` extends\n | `${string}Swap${string}`\n | `${string}Bridge${string}`\n | `${string}Batch Sell${string}`\n ? TName\n : never;\n}[TNameEnum];\n\n/**\n * Trace request type for swap/bridge traces\n */\nexport type SwapTraceRequest<TTraceName> = Omit<\n TraceRequest,\n 'name' | 'tags' | 'parentContext'\n> & {\n name: TTraceName;\n op?: TraceOperation;\n tags: { feature: TraceFeatureTag };\n};\n\n/**\n * Generic trace function type that supports both mobile and extension interfaces\n */\nexport type SwapTraceFunction<TTraceName extends string> = {\n <TResult>(\n request: SwapTraceRequest<TTraceName>,\n fn: (args?: unknown) => TResult,\n ): TResult;\n (request: SwapTraceRequest<TTraceName>): unknown;\n};\n\nexport type FetchFunction = (\n input: RequestInfo | URL | string,\n init?: RequestInit,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\n\n/**\n * The types of assets that a user can send\n */\nexport enum AssetType {\n /** The native asset for the current network, such as ETH */\n native = 'NATIVE',\n /** An ERC20 token */\n token = 'TOKEN',\n /** An ERC721 or ERC1155 token. */\n NFT = 'NFT',\n /**\n * A transaction interacting with a contract that isn't a token method\n * interaction will be marked as dealing with an unknown asset type.\n */\n unknown = 'UNKNOWN',\n}\n\nexport type ChainConfiguration = Infer<typeof ChainConfigurationSchema>;\n\nexport type ChainRanking = Infer<typeof ChainRankingSchema>;\n\n/**\n * @deprecated Avoid introducing new usages and use the QuoteResponseV2 feeData.network value instead\n */\nexport type L1GasFees = {\n l1GasFeesInHexWei?: Hex; // l1 fees for approval and trade in hex wei, appended by BridgeController.#appendL1GasFees\n};\n\n/**\n * @deprecated Avoid introducing new usages and use the QuoteResponseV2 feeData.network value instead\n */\nexport type NonEvmFees = {\n nonEvmFeesInNative?: string; // Non-EVM chain fees in native units (SOL for Solana, BTC for Bitcoin)\n};\n\nexport type InputPrimaryDenomination = 'token_amount' | 'fiat_value';\n\n/**\n * Asset exchange rate values for a given chain and address\n */\nexport type ExchangeRate = { exchangeRate?: string; usdExchangeRate?: string };\n\n/**\n * Sort order set by the user\n */\nexport enum SortOrder {\n COST_ASC = 'cost_ascending',\n ETA_ASC = 'time_descending',\n}\n\n/**\n * This is the interface for the token object used in the extension client\n * In addition to the {@link BridgeAsset} fields, it includes balance information\n */\nexport type BridgeToken = {\n address: string;\n symbol: string;\n image: string;\n decimals: number;\n chainId: number | Hex | ChainId | CaipChainId;\n balance: string; // raw balance\n // TODO deprecate this field and use balance instead\n string: string | undefined; // normalized balance as a stringified number\n tokenFiatAmount?: number | null;\n occurrences?: number;\n};\n\ntype DecimalChainId = string;\nexport type GasMultiplierByChainId = Record<DecimalChainId, number>;\n\nexport type FeatureFlagResponse = Infer<typeof PlatformConfigSchema>;\n\n// TODO move definition to validators.ts\n/**\n * This is the interface for the quote request sent to the bridge-api\n * and should only be used by the fetchBridgeQuotes utility function\n * Components and redux stores should use the {@link GenericQuoteRequest} type\n */\nexport type QuoteRequest<\n ChainIdType = ChainId | number,\n TokenAddressType = string,\n WalletAddressType = string,\n> = {\n walletAddress: WalletAddressType;\n destWalletAddress?: WalletAddressType;\n srcChainId: ChainIdType;\n destChainId: ChainIdType;\n srcTokenAddress: TokenAddressType;\n destTokenAddress: TokenAddressType;\n /**\n * This is the amount sent, in atomic amount\n */\n srcTokenAmount: string;\n slippage?: number;\n aggIds?: string[];\n bridgeIds?: string[];\n insufficientBal?: boolean;\n resetApproval?: boolean;\n refuel?: boolean;\n /**\n * Whether the response should include gasless swap quotes\n * This should be true if the user has opted in to STX on the client\n * and the current network has STX support\n */\n gasIncluded: boolean;\n /**\n * Whether to request quotes that use EIP-7702 delegated gasless execution\n */\n gasIncluded7702: boolean;\n /**\n * The fee that will be charged by MetaMask\n */\n fee?: number;\n};\n\nexport enum StatusTypes {\n SUBMITTED = 'SUBMITTED',\n UNKNOWN = 'UNKNOWN',\n FAILED = 'FAILED',\n PENDING = 'PENDING',\n COMPLETE = 'COMPLETE',\n}\n\n/**\n * These are types that components pass in. Since data is a mix of types when coming from the redux store, we need to use a generic type that can cover all the types.\n * Payloads with this type are transformed into QuoteRequest by fetchBridgeQuotes right before fetching quotes\n */\nexport type GenericQuoteRequest = QuoteRequest<\n Hex | CaipChainId | string | number, // chainIds\n Hex | CaipAssetId | string, // assetIds/addresses\n Hex | CaipAccountId | string // accountIds/addresses\n>;\n\nexport type Step = Infer<typeof StepSchema>;\n\nexport type RefuelData = Step;\n\nexport type FeeData = Infer<typeof FeeDataSchema>;\n\nexport type Intent = Infer<typeof IntentSchema>;\nexport type IntentOrderLike = Intent['order'];\n\nexport type BatchSellTradesRequest = {\n quotes: QuoteResponseV1[];\n stxEnabled: boolean;\n};\n\n/**\n * This is the bridge-api response for the obtainGaslessBatch method\n */\nexport type BatchSellTradesResponse = Infer<\n typeof BatchSellTradesResponseSchema\n>;\n\nexport type SimulatedGasFeeLimits = Infer<typeof SimulatedGasFeeLimitsSchema>;\nexport type TxFeeGasLimits = Infer<typeof TxFeeGasLimitsSchema>;\n\nexport type GaslessProperties = Infer<typeof GaslessPropertiesSchema>;\n\ntype DeepPartialValue<Type> =\n NonNullable<Type> extends (infer U)[]\n ? DeepPartial<U>[]\n : NonNullable<Type> extends readonly (infer U)[]\n ? readonly DeepPartial<U>[]\n : NonNullable<Type> extends object\n ? DeepPartial<NonNullable<Type>>\n : Type;\nexport type DeepPartial<Type> = Type extends string\n ? Type\n : {\n [K in keyof Type]?: null extends Type[K]\n ? DeepPartialValue<Type[K]> | null\n : DeepPartialValue<Type[K]>;\n };\n\nexport enum ChainId {\n ETH = 1,\n OPTIMISM = 10,\n BSC = 56,\n POLYGON = 137,\n ZKSYNC = 324,\n BASE = 8453,\n ARBITRUM = 42161,\n AVALANCHE = 43114,\n LINEA = 59144,\n SOLANA = 1151111081099710,\n BTC = 20000000000001,\n /** Internal bridge / token-list id for Stellar pubnet (Token API chain: stellar:pubnet). */\n STELLAR = 20000000000002,\n TRON = 728126428,\n SEI = 1329,\n MONAD = 143,\n HYPEREVM = 999,\n MEGAETH = 4326,\n ARC = 5042,\n ROBINHOOD = 4663,\n}\n\nexport type FeatureFlagsPlatformConfig = Infer<typeof PlatformConfigSchema>;\n\nexport type TokenFeature = Infer<typeof TokenFeatureSchema>;\n\nexport type QuoteStreamCompleteData = Infer<typeof QuoteStreamCompleteSchema>;\n\nexport enum RequestStatus {\n LOADING = 0,\n FETCHED = 1,\n ERROR = 2,\n}\n\nexport type BridgeControllerState = {\n quoteRequest: Partial<GenericQuoteRequest>[];\n quotes: QuoteResponse[];\n /**\n * The time elapsed between the initial quote fetch and when the first valid quote was received\n */\n quotesInitialLoadTime: number | null;\n /**\n * The timestamp of when the latest quote fetch started\n */\n quotesLastFetched: number | null;\n /**\n * The status of the quote fetch, including fee calculations and validations\n * This is set to\n * - LOADING when the quote fetch starts\n * - FETCHED when the process completes successfully, including when quotes are empty\n * - ERROR when any errors occur\n *\n * When SSE is enabled, this is set to LOADING even when a quote is available. It is only\n * set to FETCHED when the stream is closed and all quotes have been received\n */\n quotesLoadingStatus: RequestStatus | null;\n quoteFetchError: string | null;\n /**\n * The number of times the quotes have been refreshed, starts at 0 and is\n * incremented at the end of each quote fetch\n */\n quotesRefreshCount: number;\n /**\n * Asset exchange rates for EVM and multichain assets that are not indexed by the assets controllers\n */\n assetExchangeRates: Record<CaipAssetType, ExchangeRate>;\n /**\n * When the src token is SOL, this needs to be subtracted from their balance to determine\n * the max amount that can be sent.\n */\n minimumBalanceForRentExemptionInLamports: string | null;\n /**\n * Security alerts for the destination token in the current quote request,\n * populated from `token_warning` SSE events.\n */\n tokenWarnings: TokenFeature[];\n /**\n * Client-supplied security classification for the destination token in the\n * current quote request, used as the `token_security_type_destination`\n * analytics property. Set via the `context` arg of\n * `updateBridgeQuoteRequestParams` and reset whenever the quote request is\n * reset. `null` when the client has no security data for the token.\n */\n tokenSecurityTypeDestination: string | null;\n /**\n * The denomination currently shown as the primary source amount input.\n * This is persisted as a user preference so returning to the flow restores\n * the last selected fiat/token display mode.\n */\n inputPrimaryDenomination: InputPrimaryDenomination;\n /**\n * Metadata about the completed quote stream, populated from the `complete` SSE event.\n * Set to null at the start of each fetch and updated when the complete event is received.\n */\n quoteStreamComplete: QuoteStreamCompleteData | null;\n /**\n * Contains gasless transaction data and fees for BatchSell quotes, provided by the obtainGaslessBatch API\n */\n batchSellTrades: BatchSellTradesResponse | null;\n /**\n * The status of the batch sell trades fetch, including fee calculations and validations\n */\n batchSellTradesLoadingStatus: RequestStatus | null;\n};\n\n/**\n * @deprecated Use the separate method action types (e.g.,\n * `BridgeControllerFetchQuotesAction`) instead.\n */\nexport type BridgeControllerAction<\n FunctionName extends keyof BridgeController,\n> = {\n type: `${typeof BRIDGE_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeController[FunctionName];\n};\n\nexport type BridgeControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type BridgeControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerState\n>;\n\nexport type BridgeControllerActions =\n | BridgeControllerGetStateAction\n | BridgeControllerMethodActions;\n\nexport type BridgeControllerEvents = BridgeControllerStateChangeEvent;\n\nexport type AllowedActions =\n | AccountsControllerGetAccountByAddressAction\n | AuthenticationControllerGetBearerTokenAction\n | CurrencyRateControllerGetStateAction\n | SnapControllerHandleRequestAction\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetNetworkClientByIdAction\n | RemoteFeatureFlagControllerGetStateAction\n | AssetsControllerGetExchangeRatesForBridgeAction;\nexport type AllowedEvents = never;\n\n/**\n * The messenger for the BridgeController.\n */\nexport type BridgeControllerMessenger = Messenger<\n typeof BRIDGE_CONTROLLER_NAME,\n BridgeControllerActions | AllowedActions,\n BridgeControllerEvents | AllowedEvents\n>;\n"]}
@@ -38,9 +38,9 @@ export declare const processFeatureFlags: (bridgeFeatureFlags: unknown) => Featu
38
38
  * @param messenger - Any messenger with access to RemoteFeatureFlagController:getState
39
39
  * @returns The bridge feature flags
40
40
  */
41
- export declare const getBridgeFeatureFlags: <T extends {
41
+ export declare function getBridgeFeatureFlags<T extends {
42
42
  call(action: 'RemoteFeatureFlagController:getState'): RemoteFeatureFlagControllerState;
43
- }>(messenger: T) => FeatureFlagsPlatformConfig;
43
+ }>(messenger: T): FeatureFlagsPlatformConfig;
44
44
  /**
45
45
  * Checks if the client version is greater than or equal to the minimum required version
46
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAMjG,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AAKrB,eAAO,MAAM,kBAAkB,uBACT,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,uBACV,OAAO,KAC1B,0BAgBF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,CAAC,SAAS;IACR,IAAI,CACF,MAAM,EAAE,sCAAsC,GAC7C,gCAAgC,CAAC;CACrC,aAEU,CAAC,KACX,0BAcF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,kBACrB,MAAM,sBACD,MAAM,YAmB3B,CAAC"}
1
+ {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAMjG,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,kBAAkB,uBACT,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,uBACV,OAAO,KAC1B,0BAgBF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,SAAS;IACR,IAAI,CACF,MAAM,EAAE,sCAAsC,GAC7C,gCAAgC,CAAC;CACrC,EACD,SAAS,EAAE,CAAC,GAAG,0BAA0B,CAmB1C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,kBACrB,MAAM,sBACD,MAAM,YAmB3B,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import { DEFAULT_CHAIN_RANKING, DEFAULT_FEATURE_FLAG_CONFIG, } from '../constants/bridge.js';
2
2
  import { validateFeatureFlagsResponse } from '../validators/feature-flags.js';
3
3
  import { formatChainIdToCaip } from './caip-formatters.js';
4
- import { getFeatureFlags } from './controllers/remote-feature-flags.js';
5
4
  export const formatFeatureFlags = (bridgeFeatureFlags) => {
6
5
  const getChainsObj = (chains) => Object.entries(chains).reduce((acc, [chainId, value]) => ({
7
6
  ...acc,
@@ -33,18 +32,19 @@ export const processFeatureFlags = (bridgeFeatureFlags) => {
33
32
  * @param messenger - Any messenger with access to RemoteFeatureFlagController:getState
34
33
  * @returns The bridge feature flags
35
34
  */
36
- export const getBridgeFeatureFlags = (messenger) => {
37
- const remoteFeatureFlags = getFeatureFlags(messenger);
35
+ export function getBridgeFeatureFlags(messenger) {
36
+ // This will return the bridgeConfig for the current platform even without specifying the platform
37
+ const remoteFeatureFlagControllerState = messenger.call('RemoteFeatureFlagController:getState');
38
38
  // bridgeConfigV2 is the feature flag for the mobile app
39
39
  // bridgeConfig for Mobile has been deprecated since release of bridge and Solana in 7.46.0 was pushed back
40
40
  // and there's no way to turn on bridgeConfig for 7.47.0 without affecting 7.46.0 as well.
41
- // You will still get bridgeConfig returned from remoteFeatureFlags but you should use bridgeConfigV2 instead
41
+ // You will still get bridgeConfig returned from remoteFeatureFlagControllerState but you should use bridgeConfigV2 instead
42
42
  // Mobile's bridgeConfig will be permanently serving the disabled variation, so falling back to it in Mobile will be ok
43
- const rawMobileFlags = remoteFeatureFlags?.bridgeConfigV2;
43
+ const rawMobileFlags = remoteFeatureFlagControllerState?.remoteFeatureFlags?.bridgeConfigV2;
44
44
  // Extension LaunchDarkly will not have the bridgeConfigV2 field, so we'll continue to use bridgeConfig
45
- const rawBridgeConfig = remoteFeatureFlags?.bridgeConfig;
45
+ const rawBridgeConfig = remoteFeatureFlagControllerState?.remoteFeatureFlags?.bridgeConfig;
46
46
  return processFeatureFlags(rawMobileFlags || rawBridgeConfig);
47
- };
47
+ }
48
48
  /**
49
49
  * Checks if the client version is greater than or equal to the minimum required version
50
50
  *
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,kBAA8C,EAC9C,EAAE;IACF,MAAM,YAAY,GAAG,CAAC,MAA0C,EAAE,EAAE,CAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,GAAG;QACN,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;KACtC,CAAC,EACF,EAAE,CACH,CAAC;IAEJ,OAAO;QACL,GAAG,kBAAkB;QACrB,MAAM,EAAE,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,kBAA2B,EACC,EAAE;IAC9B,IAAI,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC9D,sEAAsE;QACtE,IACE,CAAC,cAAc,CAAC,YAAY;YAC5B,cAAc,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;YACD,OAAO;gBACL,GAAG,cAAc;gBACjB,YAAY,EAAE,CAAC,GAAG,qBAAqB,CAAC;aACzC,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAOnC,SAAY,EACgB,EAAE;IAC9B,MAAM,kBAAkB,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEtD,wDAAwD;IACxD,2GAA2G;IAC3G,0FAA0F;IAC1F,6GAA6G;IAC7G,uHAAuH;IACvH,MAAM,cAAc,GAAG,kBAAkB,EAAE,cAAc,CAAC;IAE1D,uGAAuG;IACvG,MAAM,eAAe,GAAG,kBAAkB,EAAE,YAAY,CAAC;IAEzD,OAAO,mBAAmB,CAAC,cAAc,IAAI,eAAe,CAAC,CAAC;AAChE,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,aAAqB,EACrB,kBAA0B,EAC1B,EAAE;IACF,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,aAAa;SAC1D,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,GAC1D,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,WAAW,KAAK,gBAAgB,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,WAAW,KAAK,gBAAgB;QAChC,WAAW,KAAK,gBAAgB;QAChC,WAAW,IAAI,gBAAgB,CAChC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { RemoteFeatureFlagControllerState } from '@metamask/remote-feature-flag-controller';\n\nimport {\n DEFAULT_CHAIN_RANKING,\n DEFAULT_FEATURE_FLAG_CONFIG,\n} from '../constants/bridge.js';\nimport type {\n FeatureFlagsPlatformConfig,\n ChainConfiguration,\n} from '../types.js';\nimport { validateFeatureFlagsResponse } from '../validators/feature-flags.js';\nimport { formatChainIdToCaip } from './caip-formatters.js';\nimport { getFeatureFlags } from './controllers/remote-feature-flags.js';\n\nexport const formatFeatureFlags = (\n bridgeFeatureFlags: FeatureFlagsPlatformConfig,\n) => {\n const getChainsObj = (chains: Record<string, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n ...bridgeFeatureFlags,\n chains: getChainsObj(bridgeFeatureFlags.chains),\n };\n};\n\nexport const processFeatureFlags = (\n bridgeFeatureFlags: unknown,\n): FeatureFlagsPlatformConfig => {\n if (validateFeatureFlagsResponse(bridgeFeatureFlags)) {\n const formattedFlags = formatFeatureFlags(bridgeFeatureFlags);\n // If chainRanking is undefined or empty, use the default chainRanking\n if (\n !formattedFlags.chainRanking ||\n formattedFlags.chainRanking.length === 0\n ) {\n return {\n ...formattedFlags,\n chainRanking: [...DEFAULT_CHAIN_RANKING],\n };\n }\n return formattedFlags;\n }\n return DEFAULT_FEATURE_FLAG_CONFIG;\n};\n\n/**\n * Gets the bridge feature flags from the remote feature flag controller\n *\n * @param messenger - Any messenger with access to RemoteFeatureFlagController:getState\n * @returns The bridge feature flags\n */\nexport const getBridgeFeatureFlags = <\n T extends {\n call(\n action: 'RemoteFeatureFlagController:getState',\n ): RemoteFeatureFlagControllerState;\n },\n>(\n messenger: T,\n): FeatureFlagsPlatformConfig => {\n const remoteFeatureFlags = getFeatureFlags(messenger);\n\n // bridgeConfigV2 is the feature flag for the mobile app\n // bridgeConfig for Mobile has been deprecated since release of bridge and Solana in 7.46.0 was pushed back\n // and there's no way to turn on bridgeConfig for 7.47.0 without affecting 7.46.0 as well.\n // You will still get bridgeConfig returned from remoteFeatureFlags but you should use bridgeConfigV2 instead\n // Mobile's bridgeConfig will be permanently serving the disabled variation, so falling back to it in Mobile will be ok\n const rawMobileFlags = remoteFeatureFlags?.bridgeConfigV2;\n\n // Extension LaunchDarkly will not have the bridgeConfigV2 field, so we'll continue to use bridgeConfig\n const rawBridgeConfig = remoteFeatureFlags?.bridgeConfig;\n\n return processFeatureFlags(rawMobileFlags || rawBridgeConfig);\n};\n\n/**\n * Checks if the client version is greater than or equal to the minimum required version\n *\n * @param clientVersion - The client version\n * @param minRequiredVersion - The minimum required version\n * @returns True if the client version is greater than or equal to the minimum required version, false otherwise\n */\nexport const hasMinimumRequiredVersion = (\n clientVersion: string,\n minRequiredVersion: string,\n) => {\n const [clientMajor, clientMinor, clientPatch] = clientVersion\n .split('.')\n .map(Number);\n const [minRequiredMajor, minRequiredMinor, minRequiredPatch] =\n minRequiredVersion.split('.').map(Number);\n\n if (clientMajor > minRequiredMajor) {\n return true;\n }\n if (clientMajor === minRequiredMajor && clientMinor > minRequiredMinor) {\n return true;\n }\n return (\n clientMajor === minRequiredMajor &&\n clientMinor === minRequiredMinor &&\n clientPatch >= minRequiredPatch\n );\n};\n"]}
1
+ {"version":3,"file":"feature-flags.js","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,kBAA8C,EAC9C,EAAE;IACF,MAAM,YAAY,GAAG,CAAC,MAA0C,EAAE,EAAE,CAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,GAAG;QACN,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;KACtC,CAAC,EACF,EAAE,CACH,CAAC;IAEJ,OAAO;QACL,GAAG,kBAAkB;QACrB,MAAM,EAAE,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,kBAA2B,EACC,EAAE;IAC9B,IAAI,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrD,MAAM,cAAc,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAC9D,sEAAsE;QACtE,IACE,CAAC,cAAc,CAAC,YAAY;YAC5B,cAAc,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EACxC,CAAC;YACD,OAAO;gBACL,GAAG,cAAc;gBACjB,YAAY,EAAE,CAAC,GAAG,qBAAqB,CAAC;aACzC,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAMnC,SAAY;IACZ,kGAAkG;IAClG,MAAM,gCAAgC,GAAG,SAAS,CAAC,IAAI,CACrD,sCAAsC,CACvC,CAAC;IAEF,wDAAwD;IACxD,2GAA2G;IAC3G,0FAA0F;IAC1F,2HAA2H;IAC3H,uHAAuH;IACvH,MAAM,cAAc,GAClB,gCAAgC,EAAE,kBAAkB,EAAE,cAAc,CAAC;IAEvE,uGAAuG;IACvG,MAAM,eAAe,GACnB,gCAAgC,EAAE,kBAAkB,EAAE,YAAY,CAAC;IAErE,OAAO,mBAAmB,CAAC,cAAc,IAAI,eAAe,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,aAAqB,EACrB,kBAA0B,EAC1B,EAAE;IACF,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,GAAG,aAAa;SAC1D,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,GAC1D,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,WAAW,KAAK,gBAAgB,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CACL,WAAW,KAAK,gBAAgB;QAChC,WAAW,KAAK,gBAAgB;QAChC,WAAW,IAAI,gBAAgB,CAChC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { RemoteFeatureFlagControllerState } from '@metamask/remote-feature-flag-controller';\n\nimport {\n DEFAULT_CHAIN_RANKING,\n DEFAULT_FEATURE_FLAG_CONFIG,\n} from '../constants/bridge.js';\nimport type {\n FeatureFlagsPlatformConfig,\n ChainConfiguration,\n} from '../types.js';\nimport { validateFeatureFlagsResponse } from '../validators/feature-flags.js';\nimport { formatChainIdToCaip } from './caip-formatters.js';\n\nexport const formatFeatureFlags = (\n bridgeFeatureFlags: FeatureFlagsPlatformConfig,\n) => {\n const getChainsObj = (chains: Record<string, ChainConfiguration>) =>\n Object.entries(chains).reduce(\n (acc, [chainId, value]) => ({\n ...acc,\n [formatChainIdToCaip(chainId)]: value,\n }),\n {},\n );\n\n return {\n ...bridgeFeatureFlags,\n chains: getChainsObj(bridgeFeatureFlags.chains),\n };\n};\n\nexport const processFeatureFlags = (\n bridgeFeatureFlags: unknown,\n): FeatureFlagsPlatformConfig => {\n if (validateFeatureFlagsResponse(bridgeFeatureFlags)) {\n const formattedFlags = formatFeatureFlags(bridgeFeatureFlags);\n // If chainRanking is undefined or empty, use the default chainRanking\n if (\n !formattedFlags.chainRanking ||\n formattedFlags.chainRanking.length === 0\n ) {\n return {\n ...formattedFlags,\n chainRanking: [...DEFAULT_CHAIN_RANKING],\n };\n }\n return formattedFlags;\n }\n return DEFAULT_FEATURE_FLAG_CONFIG;\n};\n\n/**\n * Gets the bridge feature flags from the remote feature flag controller\n *\n * @param messenger - Any messenger with access to RemoteFeatureFlagController:getState\n * @returns The bridge feature flags\n */\nexport function getBridgeFeatureFlags<\n T extends {\n call(\n action: 'RemoteFeatureFlagController:getState',\n ): RemoteFeatureFlagControllerState;\n },\n>(messenger: T): FeatureFlagsPlatformConfig {\n // This will return the bridgeConfig for the current platform even without specifying the platform\n const remoteFeatureFlagControllerState = messenger.call(\n 'RemoteFeatureFlagController:getState',\n );\n\n // bridgeConfigV2 is the feature flag for the mobile app\n // bridgeConfig for Mobile has been deprecated since release of bridge and Solana in 7.46.0 was pushed back\n // and there's no way to turn on bridgeConfig for 7.47.0 without affecting 7.46.0 as well.\n // You will still get bridgeConfig returned from remoteFeatureFlagControllerState but you should use bridgeConfigV2 instead\n // Mobile's bridgeConfig will be permanently serving the disabled variation, so falling back to it in Mobile will be ok\n const rawMobileFlags =\n remoteFeatureFlagControllerState?.remoteFeatureFlags?.bridgeConfigV2;\n\n // Extension LaunchDarkly will not have the bridgeConfigV2 field, so we'll continue to use bridgeConfig\n const rawBridgeConfig =\n remoteFeatureFlagControllerState?.remoteFeatureFlags?.bridgeConfig;\n\n return processFeatureFlags(rawMobileFlags || rawBridgeConfig);\n}\n\n/**\n * Checks if the client version is greater than or equal to the minimum required version\n *\n * @param clientVersion - The client version\n * @param minRequiredVersion - The minimum required version\n * @returns True if the client version is greater than or equal to the minimum required version, false otherwise\n */\nexport const hasMinimumRequiredVersion = (\n clientVersion: string,\n minRequiredVersion: string,\n) => {\n const [clientMajor, clientMinor, clientPatch] = clientVersion\n .split('.')\n .map(Number);\n const [minRequiredMajor, minRequiredMinor, minRequiredPatch] =\n minRequiredVersion.split('.').map(Number);\n\n if (clientMajor > minRequiredMajor) {\n return true;\n }\n if (clientMajor === minRequiredMajor && clientMinor > minRequiredMinor) {\n return true;\n }\n return (\n clientMajor === minRequiredMajor &&\n clientMinor === minRequiredMinor &&\n clientPatch >= minRequiredPatch\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/bridge-controller",
3
- "version": "83.1.4-preview-0f61514",
3
+ "version": "83.1.4-preview-0095f3485",
4
4
  "description": "Manages bridge-related quote fetching functionality for MetaMask",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -1,38 +0,0 @@
1
- import type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';
2
- export declare const getAccountByAddress: <T extends {
3
- call(action: AccountsControllerGetAccountByAddressAction['type'], address: string): ReturnType<AccountsControllerGetAccountByAddressAction['handler']>;
4
- }>(messenger: T, address: string) => {
5
- type: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "stellar:account" | "any:account";
6
- id: string;
7
- options: Record<string, import("@metamask/type-utils").Json> & {
8
- entropy?: {
9
- type: "mnemonic";
10
- id: string;
11
- derivationPath: string;
12
- groupIndex: number;
13
- } | {
14
- type: "private-key";
15
- } | {
16
- type: "custom";
17
- } | {
18
- type: "mpc";
19
- };
20
- exportable?: boolean;
21
- };
22
- address: string;
23
- scopes: `${string}:${string}`[];
24
- metadata: {
25
- name: string;
26
- importTime: number;
27
- keyring: {
28
- type: string;
29
- };
30
- snap?: {
31
- id: string;
32
- };
33
- nameLastUpdatedAt?: number;
34
- lastSelected?: number;
35
- };
36
- methods: string[];
37
- } | undefined;
38
- //# sourceMappingURL=accounts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/utils/controllers/accounts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2CAA2C,EAAE,MAAM,+BAA+B,CAAC;AAEjG,eAAO,MAAM,mBAAmB,GAC9B,CAAC,SAAS;IACR,IAAI,CACF,MAAM,EAAE,2CAA2C,CAAC,MAAM,CAAC,EAC3D,OAAO,EAAE,MAAM,GACd,UAAU,CAAC,2CAA2C,CAAC,SAAS,CAAC,CAAC,CAAC;CACvE,aAEU,CAAC,WACH,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAGhB,CAAC"}
@@ -1,4 +0,0 @@
1
- export const getAccountByAddress = (messenger, address) => {
2
- return messenger.call('AccountsController:getAccountByAddress', address);
3
- };
4
- //# sourceMappingURL=accounts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/utils/controllers/accounts.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAQjC,SAAY,EACZ,OAAe,EACf,EAAE;IACF,OAAO,SAAS,CAAC,IAAI,CAAC,wCAAwC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\n\nexport const getAccountByAddress = <\n T extends {\n call(\n action: AccountsControllerGetAccountByAddressAction['type'],\n address: string,\n ): ReturnType<AccountsControllerGetAccountByAddressAction['handler']>;\n },\n>(\n messenger: T,\n address: string,\n) => {\n return messenger.call('AccountsController:getAccountByAddress', address);\n};\n"]}
@@ -1,3 +0,0 @@
1
- import type { BridgeControllerMessenger } from '../../types.js';
2
- export declare const getNetworkClientByChainId: (messenger: BridgeControllerMessenger, chainId: `0x${string}`) => import("@metamask/network-controller").AutoManagedNetworkClient<import("@metamask/network-controller").CustomNetworkClientConfiguration>;
3
- //# sourceMappingURL=network.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/utils/controllers/network.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAYhE,eAAO,MAAM,yBAAyB,cACzB,yBAAyB,WAC3B,KAAK,MAAM,EAAE,6IAWvB,CAAC"}
@@ -1,12 +0,0 @@
1
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
- const getNetworkClientIdByChainId = (messenger, chainId) => {
3
- return messenger.call('NetworkController:findNetworkClientIdByChainId', chainId);
4
- };
5
- export const getNetworkClientByChainId = (messenger, chainId) => {
6
- const networkClientId = getNetworkClientIdByChainId(messenger, chainId);
7
- if (!networkClientId) {
8
- throw new Error(`No network client found for chainId: ${chainId}`);
9
- }
10
- return messenger.call('NetworkController:getNetworkClientById', networkClientId);
11
- };
12
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/utils/controllers/network.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAIrE,MAAM,2BAA2B,GAAG,CAClC,SAAoC,EACpC,OAAsB,EACtB,EAAE;IACF,OAAO,SAAS,CAAC,IAAI,CACnB,gDAAgD,EAChD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAoC,EACpC,OAAsB,EACtB,EAAE;IACF,MAAM,eAAe,GAAG,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CACnB,wCAAwC,EACxC,eAAe,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport type { BridgeControllerMessenger } from '../../types.js';\n\nconst getNetworkClientIdByChainId = (\n messenger: BridgeControllerMessenger,\n chainId: `0x${string}`,\n) => {\n return messenger.call(\n 'NetworkController:findNetworkClientIdByChainId',\n chainId,\n );\n};\n\nexport const getNetworkClientByChainId = (\n messenger: BridgeControllerMessenger,\n chainId: `0x${string}`,\n) => {\n const networkClientId = getNetworkClientIdByChainId(messenger, chainId);\n if (!networkClientId) {\n throw new Error(`No network client found for chainId: ${chainId}`);\n }\n\n return messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n};\n"]}
@@ -1,5 +0,0 @@
1
- import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';
2
- export declare const getFeatureFlags: <T extends {
3
- call(action: RemoteFeatureFlagControllerGetStateAction['type']): ReturnType<RemoteFeatureFlagControllerGetStateAction['handler']>;
4
- }>(messenger: T) => import("@metamask/remote-feature-flag-controller").FeatureFlags;
5
- //# sourceMappingURL=remote-feature-flags.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-feature-flags.d.ts","sourceRoot":"","sources":["../../../src/utils/controllers/remote-feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AAE1G,eAAO,MAAM,eAAe,GAC1B,CAAC,SAAS;IACR,IAAI,CACF,MAAM,EAAE,yCAAyC,CAAC,MAAM,CAAC,GACxD,UAAU,CAAC,yCAAyC,CAAC,SAAS,CAAC,CAAC,CAAC;CACrE,aAEU,CAAC,oEAMb,CAAC"}
@@ -1,5 +0,0 @@
1
- export const getFeatureFlags = (messenger) => {
2
- const remoteFeatureFlags = messenger.call('RemoteFeatureFlagController:getState')?.remoteFeatureFlags;
3
- return remoteFeatureFlags;
4
- };
5
- //# sourceMappingURL=remote-feature-flags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote-feature-flags.js","sourceRoot":"","sources":["../../../src/utils/controllers/remote-feature-flags.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAG,CAO7B,SAAY,EACZ,EAAE;IACF,MAAM,kBAAkB,GAAG,SAAS,CAAC,IAAI,CACvC,sCAAsC,CACvC,EAAE,kBAAkB,CAAC;IACtB,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC","sourcesContent":["import type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\n\nexport const getFeatureFlags = <\n T extends {\n call(\n action: RemoteFeatureFlagControllerGetStateAction['type'],\n ): ReturnType<RemoteFeatureFlagControllerGetStateAction['handler']>;\n },\n>(\n messenger: T,\n) => {\n const remoteFeatureFlags = messenger.call(\n 'RemoteFeatureFlagController:getState',\n )?.remoteFeatureFlags;\n return remoteFeatureFlags;\n};\n"]}