@metamask-previews/bridge-status-controller 72.1.0-preview-5e683f2 → 72.2.0-preview-be04faa3e

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.
@@ -581,10 +581,11 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
581
581
  * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.
582
582
  * @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
583
583
  * @param batchSellTrades - Contains transaction data for the quotes, provided by the obtainGaslessBatch API
584
+ * @param inputPrimaryDenomination - The denomination shown as the primary source amount input at submission time.
584
585
  * @returns The transaction meta
585
586
  * @throws An error if transaction submission fails before it gets published
586
587
  */
587
- this.submitTx = async (accountAddress, maybeQuoteResponses, isStxEnabled, quotesReceivedContext, location = MetaMetricsSwapsEventSource.MainView, abTests, activeAbTests, tokenSecurityTypeDestination, batchSellTrades) => {
588
+ this.submitTx = async (accountAddress, maybeQuoteResponses, isStxEnabled, quotesReceivedContext, location = MetaMetricsSwapsEventSource.MainView, abTests, activeAbTests, tokenSecurityTypeDestination, batchSellTrades, inputPrimaryDenomination) => {
588
589
  /**
589
590
  * If there are multiple quote responses, we assume that they all originate from the same src chain
590
591
  * and the same account. In this case its safe to use the first quote response's properties for
@@ -614,7 +615,10 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
614
615
  const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(quoteResponse, isStxEnabled, accountHardwareType, location, abTests, activeAbTests, tokenSecurityTypeDestination, batchSellTrades, batchId);
615
616
  try {
616
617
  // Emit Submitted event after submit button is clicked
617
- __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, UnifiedSwapBridgeEventName.Submitted, undefined, preConfirmationProperties);
618
+ __classPrivateFieldGet(this, _BridgeStatusController_trackUnifiedSwapBridgeEvent, "f").call(this, UnifiedSwapBridgeEventName.Submitted, undefined, {
619
+ ...preConfirmationProperties,
620
+ input_primary_denomination: inputPrimaryDenomination ?? 'token_amount',
621
+ });
618
622
  /**
619
623
  * Check if the account is an EIP-7702 delegated account.
620
624
  * Delegated accounts only allow 1 in-flight tx, so approve + swap
@@ -645,6 +649,7 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
645
649
  abTests,
646
650
  activeAbTests,
647
651
  tokenSecurityTypeDestination,
652
+ inputPrimaryDenomination,
648
653
  }));
649
654
  }
650
655
  catch (error) {
@@ -666,15 +671,16 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
666
671
  * @param params.abTests - Legacy A/B test context for `ab_tests` (backward compatibility)
667
672
  * @param params.activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.
668
673
  * @param params.tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
674
+ * @param params.inputPrimaryDenomination - The denomination shown as the primary source amount input at submission time.
669
675
  * @param params.isStxEnabled - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
670
676
  * @param params.quotesReceivedContext - The context for the QuotesReceived event
671
677
  * @returns A lightweight TransactionMeta-like object for history linking
672
678
  * @throws An error if intent or transaction submission fails before they get published
673
679
  */
674
680
  this.submitIntent = async (params) => {
675
- const { quoteResponse, accountAddress, location, abTests, activeAbTests, tokenSecurityTypeDestination, isStxEnabled = false, quotesReceivedContext, } = params;
681
+ const { quoteResponse, accountAddress, location, abTests, activeAbTests, tokenSecurityTypeDestination, inputPrimaryDenomination, isStxEnabled = false, quotesReceivedContext, } = params;
676
682
  // TODO add metrics context
677
- return await this.submitTx(accountAddress, quoteResponse, isStxEnabled, quotesReceivedContext, location, abTests, activeAbTests, tokenSecurityTypeDestination);
683
+ return await this.submitTx(accountAddress, quoteResponse, isStxEnabled, quotesReceivedContext, location, abTests, activeAbTests, tokenSecurityTypeDestination, undefined, inputPrimaryDenomination);
678
684
  };
679
685
  this.submitBatchSell = async (params) => {
680
686
  /**
@@ -776,6 +782,9 @@ export class BridgeStatusController extends StaticIntervalPollingController() {
776
782
  ...getTxStatusesFromHistory(historyItem),
777
783
  ...getFinalizedTxProperties(historyItem, txMeta, approvalTxMeta),
778
784
  ...getPriceImpactFromQuote(quote),
785
+ ...(eventName === UnifiedSwapBridgeEventName.Completed && {
786
+ input_primary_denomination: historyItem.inputPrimaryDenomination ?? 'token_amount',
787
+ }),
779
788
  };
780
789
  trackMetricsEvent({
781
790
  messenger: this.messenger,
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport {\n QuoteMetadata,\n RequiredEventContextFromClient,\n QuoteResponse,\n Trade,\n FeatureId,\n BatchSellTradesResponse,\n} from '@metamask/bridge-controller';\nimport {\n isNonEvmChainId,\n StatusTypes,\n getAccountHardwareType,\n UnifiedSwapBridgeEventName,\n isCrossChain,\n MetricsActionType,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n formatChainIdToHex,\n} from '@metamask/bridge-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport {\n TransactionStatus,\n TransactionType,\n TransactionController,\n generateBatchId,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport { numberToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { IntentManager } from './bridge-status-controller.intent';\nimport {\n ALLOWED_FEATURE_IDS_FOR_STATUS_EVENTS,\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n MAX_ATTEMPTS,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport executeSubmitStrategy from './strategy';\nimport { SubmitStep } from './strategy/types';\nimport type { SubmitStrategyParams } from './strategy/types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeHistoryItem,\n} from './types';\nimport type { BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport { getAccountByAddress } from './utils/accounts';\nimport { getJwt } from './utils/authentication';\nimport {\n getBatchSellTrades,\n stopPollingForQuotes,\n trackMetricsEvent,\n} from './utils/bridge';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n shouldWaitForFinalBridgeStatus,\n} from './utils/bridge-status';\nimport {\n getInitialHistoryItem,\n getMatchingHistoryEntryForTxMeta,\n rekeyHistoryItemInState,\n shouldPollHistoryItem,\n getMatchingHistoryEntryForApprovalTxMeta,\n} from './utils/history';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport { getSelectedChainId } from './utils/network';\nimport { getTraceParams } from './utils/trace';\nimport {\n getTransactionMetaById,\n getTransactions,\n checkIsDelegatedAccount,\n isCrossChainTx,\n updateTransactionsInBatch,\n hasNestedSwapTransactions,\n} from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'startPollingForBridgeTxStatus',\n 'wipeBridgeStatus',\n 'resetState',\n 'submitTx',\n 'submitIntent',\n 'submitBatchSell',\n 'restartPollingForFailedAttempts',\n 'getBridgeHistoryItemByTxMetaId',\n] as const;\n\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #intentManager: IntentManager;\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionBatchFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#intentManager = new IntentManager({\n messenger: this.messenger,\n customBridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n fetchFn: this.#fetchFn,\n });\n\n // Register action handlers\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.messenger.subscribe<\n 'TransactionController:transactionStatusUpdated',\n {\n historyKey?: string;\n historyItem?: BridgeHistoryItem;\n txMeta: TransactionMeta;\n isApprovalTxMeta: boolean;\n }\n >(\n 'TransactionController:transactionStatusUpdated',\n ({ txMeta, historyKey, historyItem, isApprovalTxMeta }) => {\n if (!txMeta) {\n return;\n }\n const { type, status } = txMeta;\n\n // Allow event publishing if the txMeta is a swap/bridge OR if the\n // corresponding history item exists\n const isSwapOrBridgeTransaction = type && isCrossChainTx(type);\n if (!isSwapOrBridgeTransaction && !historyKey && !historyItem) {\n return;\n }\n\n switch (status) {\n case TransactionStatus.confirmed:\n this.#onTransactionConfirmed({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n });\n break;\n case TransactionStatus.failed:\n case TransactionStatus.dropped:\n case TransactionStatus.rejected:\n this.#onTransactionFailed({ txMeta, historyKey, isApprovalTxMeta });\n break;\n default:\n break;\n }\n },\n ({ transactionMeta }) => {\n const entry = getMatchingHistoryEntryForTxMeta(\n this.state.txHistory,\n transactionMeta,\n );\n const approvalEntry = getMatchingHistoryEntryForApprovalTxMeta(\n this.state.txHistory,\n transactionMeta,\n );\n const entryToUse = entry ?? approvalEntry;\n\n return {\n historyKey: entryToUse?.[0],\n historyItem: entryToUse?.[1],\n txMeta: transactionMeta,\n isApprovalTxMeta:\n entryToUse?.[1]?.approvalTxId === transactionMeta.id,\n };\n },\n );\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n readonly #onTransactionFailed = ({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n }: {\n txMeta: TransactionMeta;\n historyKey?: string;\n isApprovalTxMeta: boolean;\n }): void => {\n // Check if the history item is already marked as a failure\n const isHistoryItemAlreadyFailed = historyKey\n ? this.state.txHistory[historyKey]?.status.status === StatusTypes.FAILED\n : false;\n\n this.#updateHistoryItem({\n historyKey,\n status: StatusTypes.FAILED,\n txHash: isApprovalTxMeta ? undefined : txMeta.hash,\n completionTime: Date.now(),\n });\n\n if (txMeta.status === TransactionStatus.rejected) {\n return;\n }\n\n // Skip tracking if this is a duplicate failed event for the same history item\n // This can happen if the transaction includes an approval tx that fails\n if (isHistoryItemAlreadyFailed) {\n return;\n }\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n historyKey,\n getEVMTxPropertiesFromTransactionMeta(txMeta),\n );\n };\n\n // Only EVM txs\n readonly #onTransactionConfirmed = ({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n }: {\n txMeta: TransactionMeta;\n historyKey?: string;\n isApprovalTxMeta: boolean;\n }): void => {\n // Return early if the confirmed txMeta is for an approval since we\n // still need to wait for the trade to be confirmed\n if (isApprovalTxMeta) {\n return;\n }\n\n this.#updateHistoryItem({\n historyKey,\n txHash: txMeta.hash,\n });\n\n const isSwap =\n txMeta.type === TransactionType.swap || hasNestedSwapTransactions(txMeta);\n\n switch (isSwap) {\n case true:\n this.#updateHistoryItem({\n historyKey,\n status: StatusTypes.COMPLETE,\n completionTime: Date.now(),\n });\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n historyKey,\n );\n break;\n default:\n if (historyKey) {\n this.#startPollingForTxId(historyKey);\n }\n break;\n }\n };\n\n resetState = (): void => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }): void => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const selectedChainId = getSelectedChainId(this.messenger);\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n /**\n * Resets the attempts counter for a bridge transaction history item\n * and restarts polling if it was previously stopped due to max attempts\n *\n * @param identifier - Object containing either txMetaId or txHash to identify the history item\n * @param identifier.txMetaId - The transaction meta ID\n * @param identifier.txHash - The transaction hash\n */\n restartPollingForFailedAttempts = (identifier: {\n txMetaId?: string;\n txHash?: string;\n }): void => {\n const { txMetaId, txHash } = identifier;\n\n if (!txMetaId && !txHash) {\n throw new Error('Either txMetaId or txHash must be provided');\n }\n\n // Find the history item by txMetaId or txHash\n let targetTxMetaId: string | undefined;\n\n if (txMetaId) {\n // Direct lookup by txMetaId\n if (this.state.txHistory[txMetaId]) {\n targetTxMetaId = txMetaId;\n }\n } else if (txHash) {\n // Search by txHash in status.srcChain.txHash\n targetTxMetaId = Object.keys(this.state.txHistory).find(\n (id) => this.state.txHistory[id].status.srcChain.txHash === txHash,\n );\n }\n\n if (!targetTxMetaId) {\n throw new Error(\n `No bridge transaction history found for ${\n txMetaId ? `txMetaId: ${txMetaId}` : `txHash: ${txHash}`\n }`,\n );\n }\n\n const historyItem = this.state.txHistory[targetTxMetaId];\n\n // Capture attempts count before resetting for metrics\n const previousAttempts = historyItem.attempts?.counter ?? 0;\n\n // Reset the attempts counter\n this.update((state) => {\n if (targetTxMetaId) {\n state.txHistory[targetTxMetaId].attempts = undefined;\n }\n });\n\n // Restart polling if it was stopped and this tx still needs status updates\n if (shouldPollHistoryItem(historyItem)) {\n // Check if polling was stopped (no active polling token)\n const existingPollingToken =\n this.#pollingTokensByTxMetaId[targetTxMetaId];\n\n if (!existingPollingToken) {\n // Restart polling\n this.#startPollingForTxId(targetTxMetaId);\n\n // Track polling manually restarted event\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n targetTxMetaId,\n {\n polling_status: PollingStatus.ManuallyRestarted,\n retry_attempts: previousAttempts,\n },\n );\n }\n }\n };\n\n /**\n * Gets a bridge history item from the history by its transaction meta ID\n *\n * @param txMetaId - The transaction meta ID to look up\n * @returns The bridge history item if found, undefined otherwise\n */\n getBridgeHistoryItemByTxMetaId = (\n txMetaId: string,\n ): BridgeHistoryItem | undefined => {\n return this.state.txHistory[txMetaId];\n };\n\n /**\n * Restart polling for txs that are not in a final state\n * This is called during initialization\n */\n readonly #restartPollingForIncompleteHistoryItems = (): void => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.entries(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n ([_, historyItem]) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n // Only poll items with txMetaId (post-submission items)\n .filter(([_, historyItem]: [string, BridgeHistoryItem]) => {\n if (!historyItem.txMetaId) {\n return false;\n }\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const pollingToken =\n this.#pollingTokensByTxMetaId[historyItem.txMetaId];\n return !pollingToken;\n })\n // Only restart polling for items that still require status updates\n .filter(([_, historyItem]: [string, BridgeHistoryItem]) => {\n return shouldPollHistoryItem(historyItem);\n });\n\n incompleteHistoryItems.forEach(\n ([historyKey, historyItem]: [string, BridgeHistoryItem]) => {\n const shouldSkipFetch = shouldSkipFetchDueToFetchFailures(\n historyItem.attempts,\n );\n if (shouldSkipFetch) {\n return;\n }\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#startPollingForTxId(historyKey);\n },\n );\n };\n\n readonly #addTxToHistory = (\n historyKey: string,\n ...args: Parameters<typeof getInitialHistoryItem>\n ): string => {\n const txHistoryItem = getInitialHistoryItem(...args);\n this.update((state) => {\n state.txHistory[historyKey] = txHistoryItem;\n });\n return historyKey;\n };\n\n /**\n * Rekeys a history item from actionId to txMeta.id after successful submission.\n * Also updates txMetaId and srcTxHash which weren't available pre-submission.\n *\n * @param oldKey - The temporary key to use for the history item, usually the actionId\n * @param newKey - The new key to use, typcally the txmeta.id\n * @param txMeta - The transaction meta from the successful submission\n * @param txMeta.id - The transaction meta id to use as the new key\n * @param txMeta.hash - The transaction hash to set on the history item\n */\n readonly #rekeyHistoryItem = (\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n ): void => {\n this.update((state) => {\n rekeyHistoryItemInState(state, oldKey, newKey, txMeta);\n });\n };\n\n readonly #startPollingForTxId = (txId: string): void => {\n // If we are already polling for this tx, stop polling for it before restarting\n const existingPollingToken = this.#pollingTokensByTxMetaId[txId];\n if (existingPollingToken) {\n this.stopPollingByPollingToken(existingPollingToken);\n }\n\n const txHistoryItem = this.state.txHistory[txId];\n if (txHistoryItem && shouldPollHistoryItem(txHistoryItem)) {\n this.#pollingTokensByTxMetaId[txId] = this.startPolling({\n bridgeTxMetaId: txId,\n });\n }\n };\n\n /**\n * @deprecated For EVM/Solana swap/bridge txs we add tx to history in submitTx()\n * For Solana swap/bridge we start polling in submitTx()\n * For EVM bridge we listen for 'TransactionController:transactionConfirmed' and start polling there\n * No clients currently call this, safe to remove in future versions\n *\n * Adds tx to history and starts polling for the bridge tx status\n *\n * @param txHistoryMeta - The parameters for creating the history item\n */\n startPollingForBridgeTxStatus = (\n txHistoryMeta: StartPollingForBridgeTxStatusArgsSerialized,\n ): void => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n if (!bridgeTxMeta?.id) {\n throw new Error(\n 'Cannot start polling: bridgeTxMeta.id is required for polling',\n );\n }\n\n const historyKey = this.#addTxToHistory(bridgeTxMeta.id, txHistoryMeta);\n this.#startPollingForTxId(historyKey);\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (\n pollingInput: BridgeStatusPollingInput,\n ): Promise<void> => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n /**\n * Handles the failure to fetch the bridge tx status\n * We eventually stop polling for the tx if we fail too many times\n * Failures (500 errors) can be due to:\n * - The srcTxHash not being available immediately for STX\n * - The srcTxHash being invalid for the chain. This case will never resolve so we stop polling for it to avoid hammering the Bridge API forever.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleFetchFailure = (bridgeTxMetaId: string): void => {\n const { attempts } = this.state.txHistory[bridgeTxMetaId];\n\n const newAttempts = attempts\n ? {\n counter: attempts.counter + 1,\n lastAttemptTime: Date.now(),\n }\n : {\n counter: 1,\n lastAttemptTime: Date.now(),\n };\n\n // If we've failed too many times, stop polling for the tx\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n if (newAttempts.counter >= MAX_ATTEMPTS && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track max polling reached event\n const historyItem = this.state.txHistory[bridgeTxMetaId];\n if (historyItem) {\n // Track polling status updated event\n this.#trackPollingStatusUpdatedEvent(\n bridgeTxMetaId,\n PollingStatus.MaxPollingReached,\n );\n }\n }\n\n // Update the attempts counter\n this.#updateHistoryItem({\n historyKey: bridgeTxMetaId,\n attempts: newAttempts,\n });\n };\n\n /**\n * Checks if the history item should be preserved so its status can be fetched.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleOldHistoryItem = async (\n bridgeTxMetaId: string,\n ): Promise<void> => {\n // Continue polling on next restart if the history item is valid\n if (\n this.state.txHistory[bridgeTxMetaId] &&\n (await shouldWaitForFinalBridgeStatus(\n this.messenger,\n this.state.txHistory[bridgeTxMetaId],\n ))\n ) {\n return;\n }\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track polling status updated event\n this.#trackPollingStatusUpdatedEvent(\n bridgeTxMetaId,\n PollingStatus.InvalidTransactionHash,\n );\n\n // If we've failed too many times, stop polling for the tx\n if (pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n }\n\n // Delete the history item so polling doesn't start over on the next restart\n this.#deleteHistoryItem(bridgeTxMetaId);\n };\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs): Promise<void> => {\n // 1. Check for history item\n\n const { txHistory } = this.state;\n const historyItem = txHistory[bridgeTxMetaId];\n if (!historyItem) {\n return;\n }\n\n // 2. Check for previous failures\n\n if (shouldSkipFetchDueToFetchFailures(historyItem.attempts)) {\n return;\n }\n\n // 3. Fetch transaction status\n\n try {\n let status: BridgeHistoryItem['status'];\n let validationFailures: string[] = [];\n\n if (historyItem.quote.intent) {\n const intentTxStatus =\n await this.#intentManager.getIntentTransactionStatus(\n bridgeTxMetaId,\n historyItem.quote.srcChainId,\n historyItem.quote.intent.protocol,\n this.#clientId,\n historyItem.status.srcChain.txHash,\n );\n\n if (\n intentTxStatus?.bridgeStatus === null ||\n intentTxStatus?.bridgeStatus === undefined\n ) {\n return;\n }\n status = intentTxStatus.bridgeStatus.status;\n } else {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const srcTxHash = this.#setAndGetSrcTxHash(bridgeTxMetaId);\n\n if (!srcTxHash) {\n return;\n }\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const response = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n await getJwt(this.messenger),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n status = response.status;\n validationFailures = response.validationFailures;\n }\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\n\n // 4. Create bridge history item\n\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n attempts: undefined,\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n if (historyItem.quote.intent) {\n this.#intentManager.syncTransactionFromIntentStatus(\n bridgeTxMetaId,\n historyItem,\n );\n }\n\n // 5. After effects\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n const isFinalStatus =\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED;\n\n if (isFinalStatus && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (status.status === StatusTypes.COMPLETE) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n this.messenger.publish(\n 'BridgeStatusController:destinationTransactionCompleted',\n historyItem.quote.destAsset.assetId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (error) {\n console.warn('Failed to fetch bridge tx status', error);\n this.#handleFetchFailure(bridgeTxMetaId);\n } finally {\n await this.#handleOldHistoryItem(bridgeTxMetaId);\n }\n };\n\n /**\n * Returns the srcTxHash for a non-STX EVM tx, the hash from the bridge status api,\n * or the local hash from the TransactionController if the tx is in a finalized state\n *\n * @param bridgeTxMetaId - The bridge tx meta id\n * @returns The srcTxHash\n */\n readonly #setAndGetSrcTxHash = (\n bridgeTxMetaId: string,\n ): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to look up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (\n srcTxHash ||\n isNonEvmChainId(txHistory[bridgeTxMetaId].quote.srcChainId)\n ) {\n return srcTxHash;\n }\n\n // Update history with TransactionController's hash if it has been updated\n const txMeta = getTransactionMetaById(this.messenger, bridgeTxMetaId);\n\n if (!txMeta) {\n return undefined;\n }\n\n // Wait for finalized status before updating the history item\n const localTxHash = [\n TransactionStatus.confirmed,\n TransactionStatus.dropped,\n TransactionStatus.rejected,\n TransactionStatus.failed,\n ].includes(txMeta.status)\n ? txMeta.hash\n : undefined;\n this.#updateHistoryItem({\n historyKey: bridgeTxMetaId,\n txHash: localTxHash,\n });\n\n return localTxHash;\n };\n\n readonly #updateHistoryItem = ({\n historyKey,\n status,\n txHash,\n attempts,\n completionTime,\n }: {\n historyKey?: string;\n status?: StatusTypes;\n txHash?: string;\n attempts?: BridgeHistoryItem['attempts'];\n completionTime?: BridgeHistoryItem['completionTime'];\n }): void => {\n if (!historyKey) {\n return;\n }\n this.update((currentState) => {\n if (status) {\n currentState.txHistory[historyKey].status.status = status;\n }\n if (txHash) {\n currentState.txHistory[historyKey].status.srcChain.txHash = txHash;\n }\n if (attempts) {\n currentState.txHistory[historyKey].attempts = attempts;\n }\n if (completionTime) {\n currentState.txHistory[historyKey].completionTime = completionTime;\n }\n });\n };\n\n readonly #deleteHistoryItem = (historyKey: string): void => {\n this.update((currentState) => {\n delete currentState.txHistory[historyKey];\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ): void => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n delete this.#pollingTokensByTxMetaId[sourceTxMetaId];\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n readonly #executeSubmitStrategy = async (\n params: SubmitStrategyParams<Trade>,\n sharedHistoryItemProperties: {\n startTime: number;\n location: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n tokenSecurityTypeDestination?: string | null;\n },\n ): Promise<TransactionMeta> => {\n let tradeTxMeta!: TransactionMeta;\n\n const steps = executeSubmitStrategy(params);\n\n // Each submission strategy determines when to execute step, which means these actions can happen in any order\n for await (const { type, payload } of steps) {\n try {\n switch (type) {\n case SubmitStep.RekeyHistoryItem:\n this.#rekeyHistoryItem(\n payload.oldHistoryKey,\n payload.newHistoryKey,\n payload.tradeMeta,\n );\n break;\n\n case SubmitStep.UpdateBatchTransactions:\n updateTransactionsInBatch({\n messenger: this.messenger,\n allTradesWithMetadata: payload.quoteAndTxMetas,\n });\n break;\n\n case SubmitStep.SetTradeMeta:\n tradeTxMeta = payload.tradeMeta;\n break;\n\n case SubmitStep.AddHistoryItem:\n this.#addTxToHistory(payload.historyKey, {\n ...payload,\n ...sharedHistoryItemProperties,\n quoteResponse: payload.quoteResponse,\n accountAddress: params.selectedAccount.address,\n isStxEnabled: params.isStxEnabled,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n });\n break;\n\n case SubmitStep.StartPolling:\n this.#startPollingForTxId(payload.historyKey);\n break;\n\n case SubmitStep.PublishCompletedEvent:\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n payload.historyKey,\n );\n break;\n\n /* c8 ignore start */\n default:\n throw new Error(`Unknown submit step type: ${String(type)}`);\n /* c8 ignore end */\n }\n } catch (error) {\n console.error(\n 'Failed to add to bridge history and start polling.',\n error,\n );\n }\n }\n\n return tradeTxMeta;\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param accountAddress - The address of the account to submit the transaction for\n * @param maybeQuoteResponses - A single quote response or an array of quote responses\n * @param isStxEnabled - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param quotesReceivedContext - The context for the QuotesReceived event\n * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.\n * @param batchSellTrades - Contains transaction data for the quotes, provided by the obtainGaslessBatch API\n * @returns The transaction meta\n * @throws An error if transaction submission fails before it gets published\n */\n submitTx = async (\n accountAddress: string,\n maybeQuoteResponses:\n | (QuoteResponse<Trade, Trade> & QuoteMetadata)\n | (QuoteResponse<Trade, Trade> & QuoteMetadata)[],\n isStxEnabled: boolean,\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\n tokenSecurityTypeDestination?: string | null,\n batchSellTrades?: BatchSellTradesResponse | null,\n ): Promise<TransactionMeta> => {\n /**\n * If there are multiple quote responses, we assume that they all originate from the same src chain\n * and the same account. In this case its safe to use the first quote response's properties for\n * metrics and other pre-submission logic\n */\n const quoteResponses = Array.isArray(maybeQuoteResponses)\n ? maybeQuoteResponses\n : [maybeQuoteResponses];\n const quoteResponse = quoteResponses[0];\n\n const { quote } = quoteResponse;\n const startTime = Date.now();\n\n stopPollingForQuotes(this.messenger, quotesReceivedContext);\n\n const selectedAccount = getAccountByAddress(this.messenger, accountAddress);\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const accountHardwareType = getAccountHardwareType(selectedAccount);\n\n /**\n * For hardware wallets on Mobile, this is fixes an issue where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue\n */\n const requireApproval =\n this.#clientId === BridgeClientId.MOBILE && accountHardwareType !== null;\n const isBridgeTx = isCrossChain(quote.srcChainId, quote.destChainId);\n\n const batchId = quoteResponses.some(\n ({ featureId: quoteFeatureId }) =>\n quoteFeatureId === FeatureId.BATCH_SELL,\n )\n ? generateBatchId()\n : undefined;\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabled,\n accountHardwareType,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n batchSellTrades,\n batchId,\n );\n\n try {\n // Emit Submitted event after submit button is clicked\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n preConfirmationProperties,\n );\n\n /**\n * Check if the account is an EIP-7702 delegated account.\n * Delegated accounts only allow 1 in-flight tx, so approve + swap\n * must be batched into a single transaction\n */\n const isDelegatedAccount = isNonEvmChainId(quote.srcChainId)\n ? false\n : await checkIsDelegatedAccount(\n this.messenger,\n selectedAccount.address as Hex,\n [formatChainIdToHex(quote.srcChainId)],\n );\n\n const strategyParams: SubmitStrategyParams<Trade> = {\n messenger: this.messenger,\n quoteResponses,\n batchSellTrades,\n isStxEnabled,\n isBridgeTx,\n isDelegatedAccount,\n selectedAccount,\n requireApproval,\n clientId: this.#clientId,\n bridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n addTransactionBatchFn: this.#addTransactionBatchFn,\n fetchFn: this.#fetchFn,\n traceFn: this.#trace,\n batchId,\n };\n\n return await this.#trace(\n getTraceParams(quoteResponse, isStxEnabled),\n async () =>\n await this.#executeSubmitStrategy(strategyParams, {\n startTime,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n }),\n );\n } catch (error) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n undefined,\n {\n error_message: (error as Error)?.message,\n ...preConfirmationProperties,\n },\n );\n throw error;\n }\n };\n\n /**\n * Submits an intent order and creates a synthetic history entry for UX.\n * The EIP-712 payload is always signed inside this controller via KeyringController.\n *\n * @param params - Object containing intent submission parameters\n * @param params.quoteResponse - Quote carrying intent data\n * @param params.accountAddress - The EOA submitting the order\n * @param params.location - The entry point from which the user initiated the swap or bridge\n * @param params.abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param params.activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @param params.tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.\n * @param params.isStxEnabled - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param params.quotesReceivedContext - The context for the QuotesReceived event\n * @returns A lightweight TransactionMeta-like object for history linking\n * @throws An error if intent or transaction submission fails before they get published\n */\n submitIntent = async (params: {\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata;\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n tokenSecurityTypeDestination?: string | null;\n isStxEnabled?: boolean;\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived];\n }): Promise<TransactionMeta> => {\n const {\n quoteResponse,\n accountAddress,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n isStxEnabled = false,\n quotesReceivedContext,\n } = params;\n\n // TODO add metrics context\n return await this.submitTx(\n accountAddress,\n quoteResponse,\n isStxEnabled,\n quotesReceivedContext,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n );\n };\n\n submitBatchSell = async (params: {\n quoteResponses: ((QuoteResponse<Trade, Trade> & QuoteMetadata) | null)[];\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n isStxEnabled?: boolean;\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived];\n tokenSecurityTypeDestination?: string | null;\n }): Promise<TransactionMeta> => {\n /**\n * Retrieve the batch sell trades from the BridgeController's state to ensure we submit\n * the original response data from the bridge-api\n */\n const batchSellTrades = getBatchSellTrades(this.messenger);\n return await this.submitTx(\n params.accountAddress,\n params.quoteResponses.filter(\n (\n quoteResponse,\n ): quoteResponse is QuoteResponse<Trade, Trade> & QuoteMetadata =>\n quoteResponse !== null,\n ),\n params.isStxEnabled ?? false,\n params.quotesReceivedContext,\n params.location,\n params.abTests,\n params.activeAbTests,\n params.tokenSecurityTypeDestination,\n batchSellTrades,\n );\n };\n\n readonly #trackPollingStatusUpdatedEvent = (\n historyKey: string,\n pollingStatus: PollingStatus,\n ): void => {\n // Track polling status updated event\n const historyItem = this.state.txHistory[historyKey];\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n historyKey,\n {\n polling_status: pollingStatus,\n retry_attempts: historyItem.attempts?.counter ?? 0,\n },\n );\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txHistoryKey - The txMetaId, actionId or intentUid of the history item to track the event for\n * @param eventProperties - The properties for the event\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n EventName extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed\n | typeof UnifiedSwapBridgeEventName.PollingStatusUpdated,\n EventProperties extends Omit<\n RequiredEventContextFromClient[EventName],\n 'feature_id'\n > & {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n feature_id?: FeatureId;\n },\n >(\n eventName: EventName,\n txHistoryKey?: string,\n eventProperties?: EventProperties,\n ): void => {\n const historyItem: BridgeHistoryItem | undefined = txHistoryKey\n ? this.state.txHistory[txHistoryKey]\n : undefined;\n\n const featureId =\n eventProperties?.feature_id ??\n historyItem?.featureId ??\n FeatureId.UNIFIED_SWAP_BRIDGE;\n\n if (\n !(\n ALLOWED_FEATURE_IDS_FOR_STATUS_EVENTS.includes(featureId) ||\n eventName === UnifiedSwapBridgeEventName.StatusValidationFailed\n )\n ) {\n return;\n }\n\n // Legacy/new metrics fields are intentionally kept independent during migration.\n const historyAbTests = txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.abTests\n : undefined;\n const historyActiveAbTests = txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.activeAbTests\n : undefined;\n const resolvedAbTests = eventProperties?.ab_tests ?? historyAbTests;\n const resolvedActiveAbTests =\n eventProperties?.active_ab_tests ?? historyActiveAbTests;\n\n const location =\n (txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.location\n : undefined) ?? MetaMetricsSwapsEventSource.MainView;\n\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n feature_id: featureId ?? FeatureId.UNIFIED_SWAP_BRIDGE,\n ...(historyItem?.batchId ? { batch_id: historyItem.batchId } : {}),\n ...(eventProperties ?? {}),\n location,\n ...(resolvedAbTests &&\n Object.keys(resolvedAbTests).length > 0 && {\n ab_tests: resolvedAbTests,\n }),\n ...(resolvedActiveAbTests &&\n resolvedActiveAbTests.length > 0 && {\n active_ab_tests: resolvedActiveAbTests,\n }),\n };\n\n // This will publish events for PERPS dropped tx failures as well\n if (!historyItem) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const { approvalTxId, quote } = historyItem;\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: {\n ...baseProperties,\n chain_id_source: requestParamProperties.chain_id_source,\n chain_id_destination: requestParamProperties.chain_id_destination,\n token_address_source: requestParamProperties.token_address_source,\n token_address_destination:\n requestParamProperties.token_address_destination,\n token_security_type_destination:\n requestParamProperties.token_security_type_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n });\n return;\n }\n\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n\n const transactions = getTransactions(this.messenger);\n const txMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === txHistoryKey,\n );\n const approvalTxMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === approvalTxId,\n );\n\n const requiredEventProperties = {\n ...baseProperties,\n ...requestParamProperties,\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem, txMeta, approvalTxMeta),\n ...getPriceImpactFromQuote(quote),\n };\n\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: requiredEventProperties,\n });\n };\n}\n"]}
1
+ {"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport {\n QuoteMetadata,\n RequiredEventContextFromClient,\n QuoteResponse,\n Trade,\n FeatureId,\n BatchSellTradesResponse,\n InputPrimaryDenomination,\n} from '@metamask/bridge-controller';\nimport {\n isNonEvmChainId,\n StatusTypes,\n getAccountHardwareType,\n UnifiedSwapBridgeEventName,\n isCrossChain,\n MetricsActionType,\n MetaMetricsSwapsEventSource,\n PollingStatus,\n formatChainIdToHex,\n} from '@metamask/bridge-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport {\n TransactionStatus,\n TransactionType,\n TransactionController,\n generateBatchId,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport { numberToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { IntentManager } from './bridge-status-controller.intent';\nimport {\n ALLOWED_FEATURE_IDS_FOR_STATUS_EVENTS,\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n MAX_ATTEMPTS,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport executeSubmitStrategy from './strategy';\nimport { SubmitStep } from './strategy/types';\nimport type { SubmitStrategyParams } from './strategy/types';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n BridgeHistoryItem,\n} from './types';\nimport type { BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport { getAccountByAddress } from './utils/accounts';\nimport { getJwt } from './utils/authentication';\nimport {\n getBatchSellTrades,\n stopPollingForQuotes,\n trackMetricsEvent,\n} from './utils/bridge';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n shouldWaitForFinalBridgeStatus,\n} from './utils/bridge-status';\nimport {\n getInitialHistoryItem,\n getMatchingHistoryEntryForTxMeta,\n rekeyHistoryItemInState,\n shouldPollHistoryItem,\n getMatchingHistoryEntryForApprovalTxMeta,\n} from './utils/history';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport { getSelectedChainId } from './utils/network';\nimport { getTraceParams } from './utils/trace';\nimport {\n getTransactionMetaById,\n getTransactions,\n checkIsDelegatedAccount,\n isCrossChainTx,\n updateTransactionsInBatch,\n hasNestedSwapTransactions,\n} from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'startPollingForBridgeTxStatus',\n 'wipeBridgeStatus',\n 'resetState',\n 'submitTx',\n 'submitIntent',\n 'submitBatchSell',\n 'restartPollingForFailedAttempts',\n 'getBridgeHistoryItemByTxMetaId',\n] as const;\n\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #intentManager: IntentManager;\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionBatchFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#intentManager = new IntentManager({\n messenger: this.messenger,\n customBridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n fetchFn: this.#fetchFn,\n });\n\n // Register action handlers\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.messenger.subscribe<\n 'TransactionController:transactionStatusUpdated',\n {\n historyKey?: string;\n historyItem?: BridgeHistoryItem;\n txMeta: TransactionMeta;\n isApprovalTxMeta: boolean;\n }\n >(\n 'TransactionController:transactionStatusUpdated',\n ({ txMeta, historyKey, historyItem, isApprovalTxMeta }) => {\n if (!txMeta) {\n return;\n }\n const { type, status } = txMeta;\n\n // Allow event publishing if the txMeta is a swap/bridge OR if the\n // corresponding history item exists\n const isSwapOrBridgeTransaction = type && isCrossChainTx(type);\n if (!isSwapOrBridgeTransaction && !historyKey && !historyItem) {\n return;\n }\n\n switch (status) {\n case TransactionStatus.confirmed:\n this.#onTransactionConfirmed({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n });\n break;\n case TransactionStatus.failed:\n case TransactionStatus.dropped:\n case TransactionStatus.rejected:\n this.#onTransactionFailed({ txMeta, historyKey, isApprovalTxMeta });\n break;\n default:\n break;\n }\n },\n ({ transactionMeta }) => {\n const entry = getMatchingHistoryEntryForTxMeta(\n this.state.txHistory,\n transactionMeta,\n );\n const approvalEntry = getMatchingHistoryEntryForApprovalTxMeta(\n this.state.txHistory,\n transactionMeta,\n );\n const entryToUse = entry ?? approvalEntry;\n\n return {\n historyKey: entryToUse?.[0],\n historyItem: entryToUse?.[1],\n txMeta: transactionMeta,\n isApprovalTxMeta:\n entryToUse?.[1]?.approvalTxId === transactionMeta.id,\n };\n },\n );\n\n // If you close the extension, but keep the browser open, the polling continues\n // If you close the browser, the polling stops\n // Check for historyItems that do not have a status of complete and restart polling\n this.#restartPollingForIncompleteHistoryItems();\n }\n\n readonly #onTransactionFailed = ({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n }: {\n txMeta: TransactionMeta;\n historyKey?: string;\n isApprovalTxMeta: boolean;\n }): void => {\n // Check if the history item is already marked as a failure\n const isHistoryItemAlreadyFailed = historyKey\n ? this.state.txHistory[historyKey]?.status.status === StatusTypes.FAILED\n : false;\n\n this.#updateHistoryItem({\n historyKey,\n status: StatusTypes.FAILED,\n txHash: isApprovalTxMeta ? undefined : txMeta.hash,\n completionTime: Date.now(),\n });\n\n if (txMeta.status === TransactionStatus.rejected) {\n return;\n }\n\n // Skip tracking if this is a duplicate failed event for the same history item\n // This can happen if the transaction includes an approval tx that fails\n if (isHistoryItemAlreadyFailed) {\n return;\n }\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n historyKey,\n getEVMTxPropertiesFromTransactionMeta(txMeta),\n );\n };\n\n // Only EVM txs\n readonly #onTransactionConfirmed = ({\n txMeta,\n historyKey,\n isApprovalTxMeta,\n }: {\n txMeta: TransactionMeta;\n historyKey?: string;\n isApprovalTxMeta: boolean;\n }): void => {\n // Return early if the confirmed txMeta is for an approval since we\n // still need to wait for the trade to be confirmed\n if (isApprovalTxMeta) {\n return;\n }\n\n this.#updateHistoryItem({\n historyKey,\n txHash: txMeta.hash,\n });\n\n const isSwap =\n txMeta.type === TransactionType.swap || hasNestedSwapTransactions(txMeta);\n\n switch (isSwap) {\n case true:\n this.#updateHistoryItem({\n historyKey,\n status: StatusTypes.COMPLETE,\n completionTime: Date.now(),\n });\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n historyKey,\n );\n break;\n default:\n if (historyKey) {\n this.#startPollingForTxId(historyKey);\n }\n break;\n }\n };\n\n resetState = (): void => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }): void => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const selectedChainId = getSelectedChainId(this.messenger);\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n /**\n * Resets the attempts counter for a bridge transaction history item\n * and restarts polling if it was previously stopped due to max attempts\n *\n * @param identifier - Object containing either txMetaId or txHash to identify the history item\n * @param identifier.txMetaId - The transaction meta ID\n * @param identifier.txHash - The transaction hash\n */\n restartPollingForFailedAttempts = (identifier: {\n txMetaId?: string;\n txHash?: string;\n }): void => {\n const { txMetaId, txHash } = identifier;\n\n if (!txMetaId && !txHash) {\n throw new Error('Either txMetaId or txHash must be provided');\n }\n\n // Find the history item by txMetaId or txHash\n let targetTxMetaId: string | undefined;\n\n if (txMetaId) {\n // Direct lookup by txMetaId\n if (this.state.txHistory[txMetaId]) {\n targetTxMetaId = txMetaId;\n }\n } else if (txHash) {\n // Search by txHash in status.srcChain.txHash\n targetTxMetaId = Object.keys(this.state.txHistory).find(\n (id) => this.state.txHistory[id].status.srcChain.txHash === txHash,\n );\n }\n\n if (!targetTxMetaId) {\n throw new Error(\n `No bridge transaction history found for ${\n txMetaId ? `txMetaId: ${txMetaId}` : `txHash: ${txHash}`\n }`,\n );\n }\n\n const historyItem = this.state.txHistory[targetTxMetaId];\n\n // Capture attempts count before resetting for metrics\n const previousAttempts = historyItem.attempts?.counter ?? 0;\n\n // Reset the attempts counter\n this.update((state) => {\n if (targetTxMetaId) {\n state.txHistory[targetTxMetaId].attempts = undefined;\n }\n });\n\n // Restart polling if it was stopped and this tx still needs status updates\n if (shouldPollHistoryItem(historyItem)) {\n // Check if polling was stopped (no active polling token)\n const existingPollingToken =\n this.#pollingTokensByTxMetaId[targetTxMetaId];\n\n if (!existingPollingToken) {\n // Restart polling\n this.#startPollingForTxId(targetTxMetaId);\n\n // Track polling manually restarted event\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n targetTxMetaId,\n {\n polling_status: PollingStatus.ManuallyRestarted,\n retry_attempts: previousAttempts,\n },\n );\n }\n }\n };\n\n /**\n * Gets a bridge history item from the history by its transaction meta ID\n *\n * @param txMetaId - The transaction meta ID to look up\n * @returns The bridge history item if found, undefined otherwise\n */\n getBridgeHistoryItemByTxMetaId = (\n txMetaId: string,\n ): BridgeHistoryItem | undefined => {\n return this.state.txHistory[txMetaId];\n };\n\n /**\n * Restart polling for txs that are not in a final state\n * This is called during initialization\n */\n readonly #restartPollingForIncompleteHistoryItems = (): void => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.entries(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n ([_, historyItem]) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n // Only poll items with txMetaId (post-submission items)\n .filter(([_, historyItem]: [string, BridgeHistoryItem]) => {\n if (!historyItem.txMetaId) {\n return false;\n }\n // Check if we are already polling this tx, if so, skip restarting polling for that\n const pollingToken =\n this.#pollingTokensByTxMetaId[historyItem.txMetaId];\n return !pollingToken;\n })\n // Only restart polling for items that still require status updates\n .filter(([_, historyItem]: [string, BridgeHistoryItem]) => {\n return shouldPollHistoryItem(historyItem);\n });\n\n incompleteHistoryItems.forEach(\n ([historyKey, historyItem]: [string, BridgeHistoryItem]) => {\n const shouldSkipFetch = shouldSkipFetchDueToFetchFailures(\n historyItem.attempts,\n );\n if (shouldSkipFetch) {\n return;\n }\n\n // We manually call startPolling() here rather than go through startPollingForBridgeTxStatus()\n // because we don't want to overwrite the existing historyItem in state\n this.#startPollingForTxId(historyKey);\n },\n );\n };\n\n readonly #addTxToHistory = (\n historyKey: string,\n ...args: Parameters<typeof getInitialHistoryItem>\n ): string => {\n const txHistoryItem = getInitialHistoryItem(...args);\n this.update((state) => {\n state.txHistory[historyKey] = txHistoryItem;\n });\n return historyKey;\n };\n\n /**\n * Rekeys a history item from actionId to txMeta.id after successful submission.\n * Also updates txMetaId and srcTxHash which weren't available pre-submission.\n *\n * @param oldKey - The temporary key to use for the history item, usually the actionId\n * @param newKey - The new key to use, typcally the txmeta.id\n * @param txMeta - The transaction meta from the successful submission\n * @param txMeta.id - The transaction meta id to use as the new key\n * @param txMeta.hash - The transaction hash to set on the history item\n */\n readonly #rekeyHistoryItem = (\n oldKey: string,\n newKey: string,\n txMeta: { id: string; hash?: string },\n ): void => {\n this.update((state) => {\n rekeyHistoryItemInState(state, oldKey, newKey, txMeta);\n });\n };\n\n readonly #startPollingForTxId = (txId: string): void => {\n // If we are already polling for this tx, stop polling for it before restarting\n const existingPollingToken = this.#pollingTokensByTxMetaId[txId];\n if (existingPollingToken) {\n this.stopPollingByPollingToken(existingPollingToken);\n }\n\n const txHistoryItem = this.state.txHistory[txId];\n if (txHistoryItem && shouldPollHistoryItem(txHistoryItem)) {\n this.#pollingTokensByTxMetaId[txId] = this.startPolling({\n bridgeTxMetaId: txId,\n });\n }\n };\n\n /**\n * @deprecated For EVM/Solana swap/bridge txs we add tx to history in submitTx()\n * For Solana swap/bridge we start polling in submitTx()\n * For EVM bridge we listen for 'TransactionController:transactionConfirmed' and start polling there\n * No clients currently call this, safe to remove in future versions\n *\n * Adds tx to history and starts polling for the bridge tx status\n *\n * @param txHistoryMeta - The parameters for creating the history item\n */\n startPollingForBridgeTxStatus = (\n txHistoryMeta: StartPollingForBridgeTxStatusArgsSerialized,\n ): void => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n if (!bridgeTxMeta?.id) {\n throw new Error(\n 'Cannot start polling: bridgeTxMeta.id is required for polling',\n );\n }\n\n const historyKey = this.#addTxToHistory(bridgeTxMeta.id, txHistoryMeta);\n this.#startPollingForTxId(historyKey);\n };\n\n // This will be called after you call this.startPolling()\n // The args passed in are the args you passed in to startPolling()\n _executePoll = async (\n pollingInput: BridgeStatusPollingInput,\n ): Promise<void> => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n /**\n * Handles the failure to fetch the bridge tx status\n * We eventually stop polling for the tx if we fail too many times\n * Failures (500 errors) can be due to:\n * - The srcTxHash not being available immediately for STX\n * - The srcTxHash being invalid for the chain. This case will never resolve so we stop polling for it to avoid hammering the Bridge API forever.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleFetchFailure = (bridgeTxMetaId: string): void => {\n const { attempts } = this.state.txHistory[bridgeTxMetaId];\n\n const newAttempts = attempts\n ? {\n counter: attempts.counter + 1,\n lastAttemptTime: Date.now(),\n }\n : {\n counter: 1,\n lastAttemptTime: Date.now(),\n };\n\n // If we've failed too many times, stop polling for the tx\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n if (newAttempts.counter >= MAX_ATTEMPTS && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track max polling reached event\n const historyItem = this.state.txHistory[bridgeTxMetaId];\n if (historyItem) {\n // Track polling status updated event\n this.#trackPollingStatusUpdatedEvent(\n bridgeTxMetaId,\n PollingStatus.MaxPollingReached,\n );\n }\n }\n\n // Update the attempts counter\n this.#updateHistoryItem({\n historyKey: bridgeTxMetaId,\n attempts: newAttempts,\n });\n };\n\n /**\n * Checks if the history item should be preserved so its status can be fetched.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleOldHistoryItem = async (\n bridgeTxMetaId: string,\n ): Promise<void> => {\n // Continue polling on next restart if the history item is valid\n if (\n this.state.txHistory[bridgeTxMetaId] &&\n (await shouldWaitForFinalBridgeStatus(\n this.messenger,\n this.state.txHistory[bridgeTxMetaId],\n ))\n ) {\n return;\n }\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track polling status updated event\n this.#trackPollingStatusUpdatedEvent(\n bridgeTxMetaId,\n PollingStatus.InvalidTransactionHash,\n );\n\n // If we've failed too many times, stop polling for the tx\n if (pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n }\n\n // Delete the history item so polling doesn't start over on the next restart\n this.#deleteHistoryItem(bridgeTxMetaId);\n };\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs): Promise<void> => {\n // 1. Check for history item\n\n const { txHistory } = this.state;\n const historyItem = txHistory[bridgeTxMetaId];\n if (!historyItem) {\n return;\n }\n\n // 2. Check for previous failures\n\n if (shouldSkipFetchDueToFetchFailures(historyItem.attempts)) {\n return;\n }\n\n // 3. Fetch transaction status\n\n try {\n let status: BridgeHistoryItem['status'];\n let validationFailures: string[] = [];\n\n if (historyItem.quote.intent) {\n const intentTxStatus =\n await this.#intentManager.getIntentTransactionStatus(\n bridgeTxMetaId,\n historyItem.quote.srcChainId,\n historyItem.quote.intent.protocol,\n this.#clientId,\n historyItem.status.srcChain.txHash,\n );\n\n if (\n intentTxStatus?.bridgeStatus === null ||\n intentTxStatus?.bridgeStatus === undefined\n ) {\n return;\n }\n status = intentTxStatus.bridgeStatus.status;\n } else {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const srcTxHash = this.#setAndGetSrcTxHash(bridgeTxMetaId);\n\n if (!srcTxHash) {\n return;\n }\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const response = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n await getJwt(this.messenger),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n status = response.status;\n validationFailures = response.validationFailures;\n }\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\n\n // 4. Create bridge history item\n\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n attempts: undefined,\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n if (historyItem.quote.intent) {\n this.#intentManager.syncTransactionFromIntentStatus(\n bridgeTxMetaId,\n historyItem,\n );\n }\n\n // 5. After effects\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n const isFinalStatus =\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED;\n\n if (isFinalStatus && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (status.status === StatusTypes.COMPLETE) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n this.messenger.publish(\n 'BridgeStatusController:destinationTransactionCompleted',\n historyItem.quote.destAsset.assetId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (error) {\n console.warn('Failed to fetch bridge tx status', error);\n this.#handleFetchFailure(bridgeTxMetaId);\n } finally {\n await this.#handleOldHistoryItem(bridgeTxMetaId);\n }\n };\n\n /**\n * Returns the srcTxHash for a non-STX EVM tx, the hash from the bridge status api,\n * or the local hash from the TransactionController if the tx is in a finalized state\n *\n * @param bridgeTxMetaId - The bridge tx meta id\n * @returns The srcTxHash\n */\n readonly #setAndGetSrcTxHash = (\n bridgeTxMetaId: string,\n ): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to look up in TransactionController\n // But it is possible to have bridgeHistoryItem in state without the srcTxHash yet when it is an STX\n const srcTxHash = txHistory[bridgeTxMetaId].status.srcChain.txHash;\n\n if (\n srcTxHash ||\n isNonEvmChainId(txHistory[bridgeTxMetaId].quote.srcChainId)\n ) {\n return srcTxHash;\n }\n\n // Update history with TransactionController's hash if it has been updated\n const txMeta = getTransactionMetaById(this.messenger, bridgeTxMetaId);\n\n if (!txMeta) {\n return undefined;\n }\n\n // Wait for finalized status before updating the history item\n const localTxHash = [\n TransactionStatus.confirmed,\n TransactionStatus.dropped,\n TransactionStatus.rejected,\n TransactionStatus.failed,\n ].includes(txMeta.status)\n ? txMeta.hash\n : undefined;\n this.#updateHistoryItem({\n historyKey: bridgeTxMetaId,\n txHash: localTxHash,\n });\n\n return localTxHash;\n };\n\n readonly #updateHistoryItem = ({\n historyKey,\n status,\n txHash,\n attempts,\n completionTime,\n }: {\n historyKey?: string;\n status?: StatusTypes;\n txHash?: string;\n attempts?: BridgeHistoryItem['attempts'];\n completionTime?: BridgeHistoryItem['completionTime'];\n }): void => {\n if (!historyKey) {\n return;\n }\n this.update((currentState) => {\n if (status) {\n currentState.txHistory[historyKey].status.status = status;\n }\n if (txHash) {\n currentState.txHistory[historyKey].status.srcChain.txHash = txHash;\n }\n if (attempts) {\n currentState.txHistory[historyKey].attempts = attempts;\n }\n if (completionTime) {\n currentState.txHistory[historyKey].completionTime = completionTime;\n }\n });\n };\n\n readonly #deleteHistoryItem = (historyKey: string): void => {\n this.update((currentState) => {\n delete currentState.txHistory[historyKey];\n });\n };\n\n // Wipes the bridge status for the given address and chainId\n // Will match only source chainId to the selectedChainId\n readonly #wipeBridgeStatusByChainId = (\n address: string,\n selectedChainId: Hex,\n ): void => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n delete this.#pollingTokensByTxMetaId[sourceTxMetaId];\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n readonly #executeSubmitStrategy = async (\n params: SubmitStrategyParams<Trade>,\n sharedHistoryItemProperties: {\n startTime: number;\n location: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n tokenSecurityTypeDestination?: string | null;\n inputPrimaryDenomination?: InputPrimaryDenomination;\n },\n ): Promise<TransactionMeta> => {\n let tradeTxMeta!: TransactionMeta;\n\n const steps = executeSubmitStrategy(params);\n\n // Each submission strategy determines when to execute step, which means these actions can happen in any order\n for await (const { type, payload } of steps) {\n try {\n switch (type) {\n case SubmitStep.RekeyHistoryItem:\n this.#rekeyHistoryItem(\n payload.oldHistoryKey,\n payload.newHistoryKey,\n payload.tradeMeta,\n );\n break;\n\n case SubmitStep.UpdateBatchTransactions:\n updateTransactionsInBatch({\n messenger: this.messenger,\n allTradesWithMetadata: payload.quoteAndTxMetas,\n });\n break;\n\n case SubmitStep.SetTradeMeta:\n tradeTxMeta = payload.tradeMeta;\n break;\n\n case SubmitStep.AddHistoryItem:\n this.#addTxToHistory(payload.historyKey, {\n ...payload,\n ...sharedHistoryItemProperties,\n quoteResponse: payload.quoteResponse,\n accountAddress: params.selectedAccount.address,\n isStxEnabled: params.isStxEnabled,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n });\n break;\n\n case SubmitStep.StartPolling:\n this.#startPollingForTxId(payload.historyKey);\n break;\n\n case SubmitStep.PublishCompletedEvent:\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n payload.historyKey,\n );\n break;\n\n /* c8 ignore start */\n default:\n throw new Error(`Unknown submit step type: ${String(type)}`);\n /* c8 ignore end */\n }\n } catch (error) {\n console.error(\n 'Failed to add to bridge history and start polling.',\n error,\n );\n }\n }\n\n return tradeTxMeta;\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param accountAddress - The address of the account to submit the transaction for\n * @param maybeQuoteResponses - A single quote response or an array of quote responses\n * @param isStxEnabled - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param quotesReceivedContext - The context for the QuotesReceived event\n * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.\n * @param batchSellTrades - Contains transaction data for the quotes, provided by the obtainGaslessBatch API\n * @param inputPrimaryDenomination - The denomination shown as the primary source amount input at submission time.\n * @returns The transaction meta\n * @throws An error if transaction submission fails before it gets published\n */\n submitTx = async (\n accountAddress: string,\n maybeQuoteResponses:\n | (QuoteResponse<Trade, Trade> & QuoteMetadata)\n | (QuoteResponse<Trade, Trade> & QuoteMetadata)[],\n isStxEnabled: boolean,\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\n tokenSecurityTypeDestination?: string | null,\n batchSellTrades?: BatchSellTradesResponse | null,\n inputPrimaryDenomination?: InputPrimaryDenomination,\n ): Promise<TransactionMeta> => {\n /**\n * If there are multiple quote responses, we assume that they all originate from the same src chain\n * and the same account. In this case its safe to use the first quote response's properties for\n * metrics and other pre-submission logic\n */\n const quoteResponses = Array.isArray(maybeQuoteResponses)\n ? maybeQuoteResponses\n : [maybeQuoteResponses];\n const quoteResponse = quoteResponses[0];\n\n const { quote } = quoteResponse;\n const startTime = Date.now();\n\n stopPollingForQuotes(this.messenger, quotesReceivedContext);\n\n const selectedAccount = getAccountByAddress(this.messenger, accountAddress);\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const accountHardwareType = getAccountHardwareType(selectedAccount);\n\n /**\n * For hardware wallets on Mobile, this is fixes an issue where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue\n */\n const requireApproval =\n this.#clientId === BridgeClientId.MOBILE && accountHardwareType !== null;\n const isBridgeTx = isCrossChain(quote.srcChainId, quote.destChainId);\n\n const batchId = quoteResponses.some(\n ({ featureId: quoteFeatureId }) =>\n quoteFeatureId === FeatureId.BATCH_SELL,\n )\n ? generateBatchId()\n : undefined;\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabled,\n accountHardwareType,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n batchSellTrades,\n batchId,\n );\n\n try {\n // Emit Submitted event after submit button is clicked\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n {\n ...preConfirmationProperties,\n input_primary_denomination:\n inputPrimaryDenomination ?? 'token_amount',\n },\n );\n\n /**\n * Check if the account is an EIP-7702 delegated account.\n * Delegated accounts only allow 1 in-flight tx, so approve + swap\n * must be batched into a single transaction\n */\n const isDelegatedAccount = isNonEvmChainId(quote.srcChainId)\n ? false\n : await checkIsDelegatedAccount(\n this.messenger,\n selectedAccount.address as Hex,\n [formatChainIdToHex(quote.srcChainId)],\n );\n\n const strategyParams: SubmitStrategyParams<Trade> = {\n messenger: this.messenger,\n quoteResponses,\n batchSellTrades,\n isStxEnabled,\n isBridgeTx,\n isDelegatedAccount,\n selectedAccount,\n requireApproval,\n clientId: this.#clientId,\n bridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n addTransactionBatchFn: this.#addTransactionBatchFn,\n fetchFn: this.#fetchFn,\n traceFn: this.#trace,\n batchId,\n };\n\n return await this.#trace(\n getTraceParams(quoteResponse, isStxEnabled),\n async () =>\n await this.#executeSubmitStrategy(strategyParams, {\n startTime,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n }),\n );\n } catch (error) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n undefined,\n {\n error_message: (error as Error)?.message,\n ...preConfirmationProperties,\n },\n );\n throw error;\n }\n };\n\n /**\n * Submits an intent order and creates a synthetic history entry for UX.\n * The EIP-712 payload is always signed inside this controller via KeyringController.\n *\n * @param params - Object containing intent submission parameters\n * @param params.quoteResponse - Quote carrying intent data\n * @param params.accountAddress - The EOA submitting the order\n * @param params.location - The entry point from which the user initiated the swap or bridge\n * @param params.abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param params.activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @param params.tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.\n * @param params.inputPrimaryDenomination - The denomination shown as the primary source amount input at submission time.\n * @param params.isStxEnabled - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param params.quotesReceivedContext - The context for the QuotesReceived event\n * @returns A lightweight TransactionMeta-like object for history linking\n * @throws An error if intent or transaction submission fails before they get published\n */\n submitIntent = async (params: {\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata;\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n tokenSecurityTypeDestination?: string | null;\n inputPrimaryDenomination?: InputPrimaryDenomination;\n isStxEnabled?: boolean;\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived];\n }): Promise<TransactionMeta> => {\n const {\n quoteResponse,\n accountAddress,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n inputPrimaryDenomination,\n isStxEnabled = false,\n quotesReceivedContext,\n } = params;\n\n // TODO add metrics context\n return await this.submitTx(\n accountAddress,\n quoteResponse,\n isStxEnabled,\n quotesReceivedContext,\n location,\n abTests,\n activeAbTests,\n tokenSecurityTypeDestination,\n undefined,\n inputPrimaryDenomination,\n );\n };\n\n submitBatchSell = async (params: {\n quoteResponses: ((QuoteResponse<Trade, Trade> & QuoteMetadata) | null)[];\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n isStxEnabled?: boolean;\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived];\n tokenSecurityTypeDestination?: string | null;\n }): Promise<TransactionMeta> => {\n /**\n * Retrieve the batch sell trades from the BridgeController's state to ensure we submit\n * the original response data from the bridge-api\n */\n const batchSellTrades = getBatchSellTrades(this.messenger);\n return await this.submitTx(\n params.accountAddress,\n params.quoteResponses.filter(\n (\n quoteResponse,\n ): quoteResponse is QuoteResponse<Trade, Trade> & QuoteMetadata =>\n quoteResponse !== null,\n ),\n params.isStxEnabled ?? false,\n params.quotesReceivedContext,\n params.location,\n params.abTests,\n params.activeAbTests,\n params.tokenSecurityTypeDestination,\n batchSellTrades,\n );\n };\n\n readonly #trackPollingStatusUpdatedEvent = (\n historyKey: string,\n pollingStatus: PollingStatus,\n ): void => {\n // Track polling status updated event\n const historyItem = this.state.txHistory[historyKey];\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n historyKey,\n {\n polling_status: pollingStatus,\n retry_attempts: historyItem.attempts?.counter ?? 0,\n },\n );\n };\n\n /**\n * Tracks post-submission events for a cross-chain swap based on the history item\n *\n * @param eventName - The name of the event to track\n * @param txHistoryKey - The txMetaId, actionId or intentUid of the history item to track the event for\n * @param eventProperties - The properties for the event\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n EventName extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed\n | typeof UnifiedSwapBridgeEventName.PollingStatusUpdated,\n EventProperties extends Omit<\n RequiredEventContextFromClient[EventName],\n 'feature_id'\n > & {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n feature_id?: FeatureId;\n },\n >(\n eventName: EventName,\n txHistoryKey?: string,\n eventProperties?: EventProperties,\n ): void => {\n const historyItem: BridgeHistoryItem | undefined = txHistoryKey\n ? this.state.txHistory[txHistoryKey]\n : undefined;\n\n const featureId =\n eventProperties?.feature_id ??\n historyItem?.featureId ??\n FeatureId.UNIFIED_SWAP_BRIDGE;\n\n if (\n !(\n ALLOWED_FEATURE_IDS_FOR_STATUS_EVENTS.includes(featureId) ||\n eventName === UnifiedSwapBridgeEventName.StatusValidationFailed\n )\n ) {\n return;\n }\n\n // Legacy/new metrics fields are intentionally kept independent during migration.\n const historyAbTests = txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.abTests\n : undefined;\n const historyActiveAbTests = txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.activeAbTests\n : undefined;\n const resolvedAbTests = eventProperties?.ab_tests ?? historyAbTests;\n const resolvedActiveAbTests =\n eventProperties?.active_ab_tests ?? historyActiveAbTests;\n\n const location =\n (txHistoryKey\n ? this.state.txHistory?.[txHistoryKey]?.location\n : undefined) ?? MetaMetricsSwapsEventSource.MainView;\n\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n feature_id: featureId ?? FeatureId.UNIFIED_SWAP_BRIDGE,\n ...(historyItem?.batchId ? { batch_id: historyItem.batchId } : {}),\n ...(eventProperties ?? {}),\n location,\n ...(resolvedAbTests &&\n Object.keys(resolvedAbTests).length > 0 && {\n ab_tests: resolvedAbTests,\n }),\n ...(resolvedActiveAbTests &&\n resolvedActiveAbTests.length > 0 && {\n active_ab_tests: resolvedActiveAbTests,\n }),\n };\n\n // This will publish events for PERPS dropped tx failures as well\n if (!historyItem) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const { approvalTxId, quote } = historyItem;\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: {\n ...baseProperties,\n chain_id_source: requestParamProperties.chain_id_source,\n chain_id_destination: requestParamProperties.chain_id_destination,\n token_address_source: requestParamProperties.token_address_source,\n token_address_destination:\n requestParamProperties.token_address_destination,\n token_security_type_destination:\n requestParamProperties.token_security_type_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n });\n return;\n }\n\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n\n const transactions = getTransactions(this.messenger);\n const txMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === txHistoryKey,\n );\n const approvalTxMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === approvalTxId,\n );\n\n const requiredEventProperties = {\n ...baseProperties,\n ...requestParamProperties,\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem, txMeta, approvalTxMeta),\n ...getPriceImpactFromQuote(quote),\n ...(eventName === UnifiedSwapBridgeEventName.Completed && {\n input_primary_denomination:\n historyItem.inputPrimaryDenomination ?? 'token_amount',\n }),\n };\n\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: requiredEventProperties,\n });\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA4CA,+CAA4D;AAG5D,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAyCD,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AAyGD;;;GAGG;AACH,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,qFAA+D,CAAA;IAC/D,2DAAqC,CAAA;IACrC,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,2CAAqB,CAAA;IACrB,mDAA6B,CAAA;IAC7B,yFAAmE,CAAA;IACnE,uFAAiE,CAAA;AACnE,CAAC,EATW,kBAAkB,kCAAlB,kBAAkB,QAS7B","sourcesContent":["import type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type {\n ChainId,\n FeatureId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n MetaMetricsSwapsEventSource,\n SimulatedGasFeeLimits,\n TxData,\n TxFeeGasLimits,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerStopPollingForQuotesAction,\n BatchSellTradesResponse,\n BridgeControllerGetStateAction,\n} from '@metamask/bridge-controller';\nimport type { KeyringControllerSignTypedMessageAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\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 TransactionControllerAddTransactionAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetStateAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerTransactionStatusUpdatedEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { BridgeStatusControllerMethodActions } from './bridge-status-controller-method-action-types';\nimport { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\nimport type { StatusResponseSchema } from './utils/validators';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<unknown>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport type StatusResponse = Infer<typeof StatusResponseSchema>;\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\n/**\n * This type ties together the quote, its tx params and the submitted txMeta.\n * Each trade/approval will have its own QuoteAndTxMetadata object.\n */\nexport type QuoteAndTxMetadata = {\n type: TransactionType;\n quoteResponse: QuoteResponse & QuoteMetadata;\n /**\n * The approval or trade object from the quote response\n */\n tx: TxData;\n assetsFiatValues?: { sending?: string; receiving?: string };\n /**\n * The simulated gas fee limits for the transaction provided by the bridge-api\n */\n txFee?: SimulatedGasFeeLimits | TxFeeGasLimits;\n /**\n * Transaction metadata from the TransactionController after submission\n */\n txMeta?: TransactionMeta;\n};\n\nexport type BridgeHistoryItem = {\n txMetaId?: string; // Optional: not available pre-submission or on sync failure\n actionId?: string; // Only for non-batch EVM transactions\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string; // Keep original transaction ID for intent transactions\n batchId?: string;\n /**\n * This is defined when the history item is for a batch sell transaction\n */\n batchSellData?: BatchSellTradesResponse;\n /**\n * This is defined when the history item corresponds to the 7702 batch's delegation tx.\n * It contains the list of quoteIds for the BatchSell quotes that are part of the 7702 batch.\n * Each quote can be retrieved from txHistory as `txHistory[quoteId]`.\n */\n quoteIds?: string[];\n quote: Quote;\n status: StatusResponse;\n startTime: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * The actual amount sent by user in non-atomic decimal form\n */\n amountSent: QuoteMetadata['sentAmount']['amount'];\n amountSentInUsd?: QuoteMetadata['sentAmount']['usd'];\n quotedGasInUsd?: QuoteMetadata['gasFee']['effective']['usd'];\n quotedGasAmount?: QuoteMetadata['gasFee']['effective']['amount'];\n quotedReturnInUsd?: QuoteMetadata['toTokenAmount']['usd'];\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n featureId?: FeatureId;\n isStxEnabled?: boolean;\n /**\n * The location/entry point from which the user initiated the swap or bridge.\n * Used to attribute swaps to specific flows (e.g. Trending Explore).\n */\n location?: MetaMetricsSwapsEventSource;\n /**\n * Legacy A/B test metrics context (`ab_tests`) kept for backward compatibility.\n * Keys are test names, values are variant names (e.g. { token_details_layout: 'treatment' }).\n */\n abTests?: Record<string, string>;\n /**\n * New A/B test metrics context (`active_ab_tests`) that replaces `ab_tests`.\n * Kept separate so migration can run both payloads in parallel.\n * This field is an array of test objects.\n */\n activeAbTests?: { key: string; value: string }[];\n /**\n * Attempts tracking for exponential backoff on failed fetches.\n * We track the number of attempts and the last attempt time for each txMetaId that has failed at least once\n */\n attempts?: {\n counter: number;\n lastAttemptTime: number; // timestamp in ms\n };\n /**\n * Client-supplied security classification for the destination token at the\n * time the swap/bridge was submitted. Persisted so post-submit analytics\n * events (Completed, Failed, StatusValidationFailed) can include\n * `token_security_type_destination`. `null` when no security data was\n * available for the destination token.\n */\n tokenSecurityTypeDestination?: string | null;\n};\n\n/**\n * @deprecated Use the separate action types instead (e.g.\n * `BridgeStatusControllerStartPollingForBridgeTxStatusAction`).\n */\nexport enum BridgeStatusAction {\n StartPollingForBridgeTxStatus = 'StartPollingForBridgeTxStatus',\n WipeBridgeStatus = 'WipeBridgeStatus',\n GetState = 'GetState',\n ResetState = 'ResetState',\n SubmitTx = 'SubmitTx',\n SubmitIntent = 'SubmitIntent',\n RestartPollingForFailedAttempts = 'RestartPollingForFailedAttempts',\n GetBridgeHistoryItemByTxMetaId = 'GetBridgeHistoryItemByTxMetaId',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta?: Pick<TransactionMeta, 'id' | 'hash' | 'batchId'>;\n actionId?: string;\n batchSellData?: BridgeHistoryItem['batchSellData'];\n quoteIds?: BridgeHistoryItem['quoteIds'];\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n location: MetaMetricsSwapsEventSource;\n // Legacy field for `ab_tests` metrics payload.\n abTests?: BridgeHistoryItem['abTests'];\n // New field for `active_ab_tests` metrics payload.\n activeAbTests?: BridgeHistoryItem['activeAbTests'];\n accountAddress: string;\n // Client-supplied destination token security classification, persisted on\n // the history item for post-submit analytics events.\n tokenSecurityTypeDestination?: BridgeHistoryItem['tokenSecurityTypeDestination'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerMethodActions;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n/**\n * This event is published when the destination bridge transaction is completed\n * The payload is the asset received on the destination chain\n */\nexport type BridgeStatusControllerDestinationTransactionCompletedEvent = {\n type: 'BridgeStatusController:destinationTransactionCompleted';\n payload: [CaipAssetType];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerDestinationTransactionCompletedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | RemoteFeatureFlagControllerGetStateAction\n | SnapControllerHandleRequestAction\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction\n | TransactionControllerAddTransactionAction\n | TransactionControllerEstimateGasFeeAction\n | TransactionControllerIsAtomicBatchSupportedAction\n | BridgeControllerTrackUnifiedSwapBridgeEventAction\n | BridgeControllerStopPollingForQuotesAction\n | BridgeControllerGetStateAction\n | AccountsControllerGetAccountByAddressAction\n | AuthenticationControllerGetBearerTokenAction\n | KeyringControllerSignTypedMessageAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = TransactionControllerTransactionStatusUpdatedEvent;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = Messenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents\n>;\n"]}
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA6CA,+CAA4D;AAG5D,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAyCD,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AA8GD;;;GAGG;AACH,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,qFAA+D,CAAA;IAC/D,2DAAqC,CAAA;IACrC,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,2CAAqB,CAAA;IACrB,mDAA6B,CAAA;IAC7B,yFAAmE,CAAA;IACnE,uFAAiE,CAAA;AACnE,CAAC,EATW,kBAAkB,kCAAlB,kBAAkB,QAS7B","sourcesContent":["import type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type {\n ChainId,\n FeatureId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n MetaMetricsSwapsEventSource,\n SimulatedGasFeeLimits,\n TxData,\n TxFeeGasLimits,\n BridgeControllerTrackUnifiedSwapBridgeEventAction,\n BridgeControllerStopPollingForQuotesAction,\n BatchSellTradesResponse,\n BridgeControllerGetStateAction,\n InputPrimaryDenomination,\n} from '@metamask/bridge-controller';\nimport type { KeyringControllerSignTypedMessageAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\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 TransactionControllerAddTransactionAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetStateAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerTransactionStatusUpdatedEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { BridgeStatusControllerMethodActions } from './bridge-status-controller-method-action-types';\nimport { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\nimport type { StatusResponseSchema } from './utils/validators';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<unknown>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport type StatusResponse = Infer<typeof StatusResponseSchema>;\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\n/**\n * This type ties together the quote, its tx params and the submitted txMeta.\n * Each trade/approval will have its own QuoteAndTxMetadata object.\n */\nexport type QuoteAndTxMetadata = {\n type: TransactionType;\n quoteResponse: QuoteResponse & QuoteMetadata;\n /**\n * The approval or trade object from the quote response\n */\n tx: TxData;\n assetsFiatValues?: { sending?: string; receiving?: string };\n /**\n * The simulated gas fee limits for the transaction provided by the bridge-api\n */\n txFee?: SimulatedGasFeeLimits | TxFeeGasLimits;\n /**\n * Transaction metadata from the TransactionController after submission\n */\n txMeta?: TransactionMeta;\n};\n\nexport type BridgeHistoryItem = {\n txMetaId?: string; // Optional: not available pre-submission or on sync failure\n actionId?: string; // Only for non-batch EVM transactions\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string; // Keep original transaction ID for intent transactions\n batchId?: string;\n /**\n * This is defined when the history item is for a batch sell transaction\n */\n batchSellData?: BatchSellTradesResponse;\n /**\n * This is defined when the history item corresponds to the 7702 batch's delegation tx.\n * It contains the list of quoteIds for the BatchSell quotes that are part of the 7702 batch.\n * Each quote can be retrieved from txHistory as `txHistory[quoteId]`.\n */\n quoteIds?: string[];\n quote: Quote;\n status: StatusResponse;\n startTime: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * The actual amount sent by user in non-atomic decimal form\n */\n amountSent: QuoteMetadata['sentAmount']['amount'];\n amountSentInUsd?: QuoteMetadata['sentAmount']['usd'];\n quotedGasInUsd?: QuoteMetadata['gasFee']['effective']['usd'];\n quotedGasAmount?: QuoteMetadata['gasFee']['effective']['amount'];\n quotedReturnInUsd?: QuoteMetadata['toTokenAmount']['usd'];\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n featureId?: FeatureId;\n isStxEnabled?: boolean;\n /**\n * The location/entry point from which the user initiated the swap or bridge.\n * Used to attribute swaps to specific flows (e.g. Trending Explore).\n */\n location?: MetaMetricsSwapsEventSource;\n /**\n * Legacy A/B test metrics context (`ab_tests`) kept for backward compatibility.\n * Keys are test names, values are variant names (e.g. { token_details_layout: 'treatment' }).\n */\n abTests?: Record<string, string>;\n /**\n * New A/B test metrics context (`active_ab_tests`) that replaces `ab_tests`.\n * Kept separate so migration can run both payloads in parallel.\n * This field is an array of test objects.\n */\n activeAbTests?: { key: string; value: string }[];\n /**\n * Attempts tracking for exponential backoff on failed fetches.\n * We track the number of attempts and the last attempt time for each txMetaId that has failed at least once\n */\n attempts?: {\n counter: number;\n lastAttemptTime: number; // timestamp in ms\n };\n /**\n * Client-supplied security classification for the destination token at the\n * time the swap/bridge was submitted. Persisted so post-submit analytics\n * events (Completed, Failed, StatusValidationFailed) can include\n * `token_security_type_destination`. `null` when no security data was\n * available for the destination token.\n */\n tokenSecurityTypeDestination?: string | null;\n /**\n * The denomination shown as the primary source amount input when the\n * swap/bridge was submitted.\n */\n inputPrimaryDenomination?: InputPrimaryDenomination;\n};\n\n/**\n * @deprecated Use the separate action types instead (e.g.\n * `BridgeStatusControllerStartPollingForBridgeTxStatusAction`).\n */\nexport enum BridgeStatusAction {\n StartPollingForBridgeTxStatus = 'StartPollingForBridgeTxStatus',\n WipeBridgeStatus = 'WipeBridgeStatus',\n GetState = 'GetState',\n ResetState = 'ResetState',\n SubmitTx = 'SubmitTx',\n SubmitIntent = 'SubmitIntent',\n RestartPollingForFailedAttempts = 'RestartPollingForFailedAttempts',\n GetBridgeHistoryItemByTxMetaId = 'GetBridgeHistoryItemByTxMetaId',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta?: Pick<TransactionMeta, 'id' | 'hash' | 'batchId'>;\n actionId?: string;\n batchSellData?: BridgeHistoryItem['batchSellData'];\n quoteIds?: BridgeHistoryItem['quoteIds'];\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n location: MetaMetricsSwapsEventSource;\n // Legacy field for `ab_tests` metrics payload.\n abTests?: BridgeHistoryItem['abTests'];\n // New field for `active_ab_tests` metrics payload.\n activeAbTests?: BridgeHistoryItem['activeAbTests'];\n accountAddress: string;\n // Client-supplied destination token security classification, persisted on\n // the history item for post-submit analytics events.\n tokenSecurityTypeDestination?: BridgeHistoryItem['tokenSecurityTypeDestination'];\n // Primary denomination at submission time, persisted for post-submit analytics.\n inputPrimaryDenomination?: BridgeHistoryItem['inputPrimaryDenomination'];\n};\n\n/**\n * Chrome: The BigNumber values are automatically serialized to strings when sent to the background\n * Firefox: The BigNumber values are not serialized to strings when sent to the background,\n * so we force the ui to do it manually, by using StartPollingForBridgeTxStatusArgsSerialized type on the startPollingForBridgeTxStatus action\n */\nexport type StartPollingForBridgeTxStatusArgsSerialized = Omit<\n StartPollingForBridgeTxStatusArgs,\n 'quoteResponse'\n> & {\n quoteResponse: QuoteResponse & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerMethodActions;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n/**\n * This event is published when the destination bridge transaction is completed\n * The payload is the asset received on the destination chain\n */\nexport type BridgeStatusControllerDestinationTransactionCompletedEvent = {\n type: 'BridgeStatusController:destinationTransactionCompleted';\n payload: [CaipAssetType];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerDestinationTransactionCompletedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | RemoteFeatureFlagControllerGetStateAction\n | SnapControllerHandleRequestAction\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction\n | TransactionControllerAddTransactionAction\n | TransactionControllerEstimateGasFeeAction\n | TransactionControllerIsAtomicBatchSupportedAction\n | BridgeControllerTrackUnifiedSwapBridgeEventAction\n | BridgeControllerStopPollingForQuotesAction\n | BridgeControllerGetStateAction\n | AccountsControllerGetAccountByAddressAction\n | AuthenticationControllerGetBearerTokenAction\n | KeyringControllerSignTypedMessageAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents = TransactionControllerTransactionStatusUpdatedEvent;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = Messenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents\n>;\n"]}
package/dist/types.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { AccountsControllerGetAccountByAddressAction } from "@metamask/accounts-controller";
2
2
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
3
- import type { ChainId, FeatureId, Quote, QuoteMetadata, QuoteResponse, MetaMetricsSwapsEventSource, SimulatedGasFeeLimits, TxData, TxFeeGasLimits, BridgeControllerTrackUnifiedSwapBridgeEventAction, BridgeControllerStopPollingForQuotesAction, BatchSellTradesResponse, BridgeControllerGetStateAction } from "@metamask/bridge-controller";
3
+ import type { ChainId, FeatureId, Quote, QuoteMetadata, QuoteResponse, MetaMetricsSwapsEventSource, SimulatedGasFeeLimits, TxData, TxFeeGasLimits, BridgeControllerTrackUnifiedSwapBridgeEventAction, BridgeControllerStopPollingForQuotesAction, BatchSellTradesResponse, BridgeControllerGetStateAction, InputPrimaryDenomination } from "@metamask/bridge-controller";
4
4
  import type { KeyringControllerSignTypedMessageAction } from "@metamask/keyring-controller";
5
5
  import type { Messenger } from "@metamask/messenger";
6
6
  import type { NetworkControllerFindNetworkClientIdByChainIdAction, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction } from "@metamask/network-controller";
@@ -163,6 +163,11 @@ export type BridgeHistoryItem = {
163
163
  * available for the destination token.
164
164
  */
165
165
  tokenSecurityTypeDestination?: string | null;
166
+ /**
167
+ * The denomination shown as the primary source amount input when the
168
+ * swap/bridge was submitted.
169
+ */
170
+ inputPrimaryDenomination?: InputPrimaryDenomination;
166
171
  };
167
172
  /**
168
173
  * @deprecated Use the separate action types instead (e.g.
@@ -234,6 +239,7 @@ export type StartPollingForBridgeTxStatusArgs = {
234
239
  activeAbTests?: BridgeHistoryItem['activeAbTests'];
235
240
  accountAddress: string;
236
241
  tokenSecurityTypeDestination?: BridgeHistoryItem['tokenSecurityTypeDestination'];
242
+ inputPrimaryDenomination?: BridgeHistoryItem['inputPrimaryDenomination'];
237
243
  };
238
244
  /**
239
245
  * Chrome: The BigNumber values are automatically serialized to strings when sent to the background
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2CAA2C,EAAE,sCAAsC;AACjG,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,EACN,cAAc,EACd,iDAAiD,EACjD,0CAA0C,EAC1C,uBAAuB,EACvB,8BAA8B,EAC/B,oCAAoC;AACrC,OAAO,KAAK,EAAE,uCAAuC,EAAE,qCAAqC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,mDAAmD,EACnD,2CAA2C,EAC3C,+BAA+B,EAChC,qCAAqC;AACtC,OAAO,KAAK,EAAE,4CAA4C,EAAE,+CAA+C;AAC3G,OAAO,KAAK,EAAE,yCAAyC,EAAE,iDAAiD;AAC1G,OAAO,KAAK,EAAE,iCAAiC,EAAE,oCAAoC;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AACnD,OAAO,KAAK,EACV,yCAAyC,EACzC,yCAAyC,EACzC,mCAAmC,EACnC,iDAAiD,EACjD,kDAAkD,EAClD,4CAA4C,EAC5C,eAAe,EACf,eAAe,EAChB,yCAAyC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AAErD,OAAO,KAAK,EAAE,mCAAmC,EAAE,2DAAuD;AAC1G,OAAO,EAAE,6BAA6B,EAAE,wBAAoB;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,+BAA2B;AAK/D,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,aAAa,EACb,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAClD,GAAG;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,cAAc,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;IAC7C;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAAC;IAC/C;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC,EAAE,MAAM,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ;;WAEG;QACH,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClD,eAAe,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,eAAe,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjE,iBAAiB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1D,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF;;;;;;OAMG;IACH,4BAA4B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,6BAA6B,kCAAkC;IAC/D,gBAAgB,qBAAqB;IACrC,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,+BAA+B,oCAAoC;IACnE,8BAA8B,mCAAmC;CAClE;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,2BAA2B,CAAC;IACpC;;;OAGG;IACH,eAAe,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,aAAa,EAAE,2BAA2B,CAAC;IAC3C;;;OAGG;IACH,cAAc,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;IAC5D;;;OAGG;IACH,UAAU,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;IAC7C,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC1C,kBAAkB,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACvE,qBAAqB,CAAC,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,EAAE,2BAA2B,CAAC;IAEtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEvC,aAAa,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC;IAGvB,4BAA4B,CAAC,EAAE,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;CAClF,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,2CAA2C,GAAG,IAAI,CAC5D,iCAAiC,EACjC,eAAe,CAChB,GAAG;IACF,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;CAC3D,CAAC;AAGF,MAAM,MAAM,oCAAoC,GAAG,wBAAwB,CACzE,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GACrC,oCAAoC,GACpC,mCAAmC,CAAC;AAGxC,MAAM,MAAM,sCAAsC,GAAG,0BAA0B,CAC7E,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AACF;;;GAGG;AACH,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,wDAAwD,CAAC;IAC/D,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,sCAAsC,GACtC,0DAA0D,CAAC;AAE/D;;GAEG;AACH,KAAK,cAAc,GACf,mDAAmD,GACnD,+BAA+B,GAC/B,2CAA2C,GAC3C,yCAAyC,GACzC,iCAAiC,GACjC,mCAAmC,GACnC,4CAA4C,GAC5C,yCAAyC,GACzC,yCAAyC,GACzC,iDAAiD,GACjD,iDAAiD,GACjD,0CAA0C,GAC1C,8BAA8B,GAC9B,2CAA2C,GAC3C,4CAA4C,GAC5C,uCAAuC,CAAC;AAE5C;;GAEG;AACH,KAAK,aAAa,GAAG,kDAAkD,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,SAAS,CACrD,OAAO,6BAA6B,EACpC,6BAA6B,GAAG,cAAc,EAC9C,4BAA4B,GAAG,aAAa,CAC7C,CAAC"}
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2CAA2C,EAAE,sCAAsC;AACjG,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,EACN,cAAc,EACd,iDAAiD,EACjD,0CAA0C,EAC1C,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACzB,oCAAoC;AACrC,OAAO,KAAK,EAAE,uCAAuC,EAAE,qCAAqC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,mDAAmD,EACnD,2CAA2C,EAC3C,+BAA+B,EAChC,qCAAqC;AACtC,OAAO,KAAK,EAAE,4CAA4C,EAAE,+CAA+C;AAC3G,OAAO,KAAK,EAAE,yCAAyC,EAAE,iDAAiD;AAC1G,OAAO,KAAK,EAAE,iCAAiC,EAAE,oCAAoC;AACrF,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AACnD,OAAO,KAAK,EACV,yCAAyC,EACzC,yCAAyC,EACzC,mCAAmC,EACnC,iDAAiD,EACjD,kDAAkD,EAClD,4CAA4C,EAC5C,eAAe,EACf,eAAe,EAChB,yCAAyC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB;AAErD,OAAO,KAAK,EAAE,mCAAmC,EAAE,2DAAuD;AAC1G,OAAO,EAAE,6BAA6B,EAAE,wBAAoB;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,+BAA2B;AAK/D,oBAAY,cAAc;IACxB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,aAAa,EACb,OAAO,GAAG,YAAY,GAAG,aAAa,GAAG,QAAQ,CAClD,GAAG;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,cAAc,CAAC;AAE3D;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;IAC7C;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D;;OAEG;IACH,KAAK,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAAC;IAC/C;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC,EAAE,MAAM,CAAC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ;;WAEG;QACH,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClD,eAAe,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,eAAe,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjE,iBAAiB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1D,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,2BAA2B,CAAC,EAAE,MAAM,CAAC;KACtC,CAAC;IACF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF;;;;;;OAMG;IACH,4BAA4B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C;;;OAGG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,6BAA6B,kCAAkC;IAC/D,gBAAgB,qBAAqB;IACrC,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,+BAA+B,oCAAoC;IACnE,8BAA8B,mCAAmC;CAClE;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,2BAA2B,CAAC;IACpC;;;OAGG;IACH,eAAe,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,aAAa,EAAE,2BAA2B,CAAC;IAC3C;;;OAGG;IACH,cAAc,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;IAC5D;;;OAGG;IACH,UAAU,EAAE,2BAA2B,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;IAC7C,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC1C,kBAAkB,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACvE,qBAAqB,CAAC,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,EAAE,2BAA2B,CAAC;IAEtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEvC,aAAa,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC;IAGvB,4BAA4B,CAAC,EAAE,iBAAiB,CAAC,8BAA8B,CAAC,CAAC;IAEjF,wBAAwB,CAAC,EAAE,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;CAC1E,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,2CAA2C,GAAG,IAAI,CAC5D,iCAAiC,EACjC,eAAe,CAChB,GAAG;IACF,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;CAC3D,CAAC;AAGF,MAAM,MAAM,oCAAoC,GAAG,wBAAwB,CACzE,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GACrC,oCAAoC,GACpC,mCAAmC,CAAC;AAGxC,MAAM,MAAM,sCAAsC,GAAG,0BAA0B,CAC7E,OAAO,6BAA6B,EACpC,2BAA2B,CAC5B,CAAC;AACF;;;GAGG;AACH,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,wDAAwD,CAAC;IAC/D,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,sCAAsC,GACtC,0DAA0D,CAAC;AAE/D;;GAEG;AACH,KAAK,cAAc,GACf,mDAAmD,GACnD,+BAA+B,GAC/B,2CAA2C,GAC3C,yCAAyC,GACzC,iCAAiC,GACjC,mCAAmC,GACnC,4CAA4C,GAC5C,yCAAyC,GACzC,yCAAyC,GACzC,iDAAiD,GACjD,iDAAiD,GACjD,0CAA0C,GAC1C,8BAA8B,GAC9B,2CAA2C,GAC3C,4CAA4C,GAC5C,uCAAuC,CAAC;AAE5C;;GAEG;AACH,KAAK,aAAa,GAAG,kDAAkD,CAAC;AAExE;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG,SAAS,CACrD,OAAO,6BAA6B,EACpC,6BAA6B,GAAG,cAAc,EAC9C,4BAA4B,GAAG,aAAa,CAC7C,CAAC"}
package/dist/types.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { AccountsControllerGetAccountByAddressAction } from "@metamask/accounts-controller";
2
2
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
3
- import type { ChainId, FeatureId, Quote, QuoteMetadata, QuoteResponse, MetaMetricsSwapsEventSource, SimulatedGasFeeLimits, TxData, TxFeeGasLimits, BridgeControllerTrackUnifiedSwapBridgeEventAction, BridgeControllerStopPollingForQuotesAction, BatchSellTradesResponse, BridgeControllerGetStateAction } from "@metamask/bridge-controller";
3
+ import type { ChainId, FeatureId, Quote, QuoteMetadata, QuoteResponse, MetaMetricsSwapsEventSource, SimulatedGasFeeLimits, TxData, TxFeeGasLimits, BridgeControllerTrackUnifiedSwapBridgeEventAction, BridgeControllerStopPollingForQuotesAction, BatchSellTradesResponse, BridgeControllerGetStateAction, InputPrimaryDenomination } from "@metamask/bridge-controller";
4
4
  import type { KeyringControllerSignTypedMessageAction } from "@metamask/keyring-controller";
5
5
  import type { Messenger } from "@metamask/messenger";
6
6
  import type { NetworkControllerFindNetworkClientIdByChainIdAction, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction } from "@metamask/network-controller";
@@ -163,6 +163,11 @@ export type BridgeHistoryItem = {
163
163
  * available for the destination token.
164
164
  */
165
165
  tokenSecurityTypeDestination?: string | null;
166
+ /**
167
+ * The denomination shown as the primary source amount input when the
168
+ * swap/bridge was submitted.
169
+ */
170
+ inputPrimaryDenomination?: InputPrimaryDenomination;
166
171
  };
167
172
  /**
168
173
  * @deprecated Use the separate action types instead (e.g.
@@ -234,6 +239,7 @@ export type StartPollingForBridgeTxStatusArgs = {
234
239
  activeAbTests?: BridgeHistoryItem['activeAbTests'];
235
240
  accountAddress: string;
236
241
  tokenSecurityTypeDestination?: BridgeHistoryItem['tokenSecurityTypeDestination'];
242
+ inputPrimaryDenomination?: BridgeHistoryItem['inputPrimaryDenomination'];
237
243
  };
238
244
  /**
239
245
  * Chrome: The BigNumber values are automatically serialized to strings when sent to the background