@metamask-previews/bridge-status-controller 42.0.0-preview-661f11a → 42.0.0-preview-331bec5d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n formatChainIdToCaip,\n isCrossChain,\n isHardwareWallet,\n MetricsActionType,\n} from '@metamask/bridge-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { toHex } from '@metamask/controller-utils';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\n\nimport {\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 TraceName,\n} from './constants';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport {\n findAndUpdateTransactionsInBatch,\n getAddTransactionBatchParams,\n getClientRequest,\n getStatusRequestParams,\n getUSDTAllowanceResetTx,\n handleLineaDelay,\n handleMobileHardwareWalletDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } 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 persist: true,\n anonymous: false,\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};\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 #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addTransactionBatchFn,\n updateTransactionFn,\n estimateGasFeeFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\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.#addTransactionFn = addTransactionFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#updateTransactionFn = updateTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:restartPollingForFailedAttempts`,\n this.restartPollingForFailedAttempts.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:getBridgeHistoryItemByTxMetaId`,\n this.getBridgeHistoryItemByTxMetaId.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.messagingSystem.subscribe(\n 'TransactionController:transactionFailed',\n ({ transactionMeta }) => {\n const { type, status, id } = transactionMeta;\n if (\n type &&\n [\n TransactionType.bridge,\n TransactionType.swap,\n TransactionType.bridgeApproval,\n TransactionType.swapApproval,\n ].includes(type) &&\n [\n TransactionStatus.failed,\n TransactionStatus.dropped,\n TransactionStatus.rejected,\n ].includes(status)\n ) {\n // Mark tx as failed in txHistory\n this.#markTxAsFailed(transactionMeta);\n // Track failed event\n if (status !== TransactionStatus.rejected) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n id,\n getEVMTxPropertiesFromTransactionMeta(transactionMeta),\n );\n }\n }\n },\n );\n\n this.messagingSystem.subscribe(\n 'TransactionController:transactionConfirmed',\n (transactionMeta) => {\n const { type, id, chainId } = transactionMeta;\n if (type === TransactionType.swap) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n id,\n );\n }\n if (type === TransactionType.bridge && !isSolanaChainId(chainId)) {\n this.#startPollingForTxId(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 // Mark tx as failed in txHistory if either the approval or trade fails\n readonly #markTxAsFailed = ({ id }: TransactionMeta) => {\n const txHistoryKey = this.state.txHistory[id]\n ? id\n : Object.keys(this.state.txHistory).find(\n (key) => this.state.txHistory[key].approvalTxId === id,\n );\n if (!txHistoryKey) {\n return;\n }\n this.update((statusState) => {\n statusState.txHistory[txHistoryKey].status.status = StatusTypes.FAILED;\n });\n };\n\n resetState = () => {\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 }) => {\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 { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\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 }) => {\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 // 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 is a bridge transaction\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n\n if (isBridgeTx) {\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 }\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 = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\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 // Swap txs don't need to have their statuses polled\n .filter((historyItem) => {\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n return isBridgeTx;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\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(bridgeTxMetaId);\n });\n };\n\n readonly #addTxToHistory = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n accountAddress: selectedAddress,\n } = startPollingForBridgeTxStatusArgs;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n batchId: bridgeTxMeta.batchId,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n };\n\n readonly #startPollingForTxId = (txId: string) => {\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) {\n return;\n }\n const { quote } = txHistoryItem;\n\n const isBridgeTx = isCrossChain(quote.srcChainId, quote.destChainId);\n if (isBridgeTx) {\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 ) => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n this.#addTxToHistory(txHistoryMeta);\n this.#startPollingForTxId(bridgeTxMeta.id);\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 (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\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) => {\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\n // Update the attempts counter\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].attempts = newAttempts;\n });\n };\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n if (\n shouldSkipFetchDueToFetchFailures(txHistory[bridgeTxMetaId]?.attempts)\n ) {\n return;\n }\n\n try {\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 historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const { status, validationFailures } = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\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 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 }\n if (status.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (e) {\n console.warn('Failed to fetch bridge tx status', e);\n this.#handleFetchFailure(bridgeTxMetaId);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook 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 (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\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 ) => {\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 }\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 /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param selectedAccount - The account to submit the transaction for\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n ) => {\n if (!selectedAccount.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n\n const request = getClientRequest(quoteResponse, selectedAccount);\n const requestResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n request,\n )) as string | { result: Record<string, string> } | { signature: string };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n requestResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?: Awaited<\n ReturnType<TransactionController['addTransaction']>\n >['result'],\n ): Promise<TransactionMeta> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n if (!finalTransactionMeta) {\n throw new Error(\n 'Failed to submit cross-chain swap tx: txMeta for txHash was not found',\n );\n }\n return finalTransactionMeta;\n };\n\n readonly #handleApprovalTx = async (\n isBridgeTx: boolean,\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n requireApproval?: boolean,\n ): Promise<TransactionMeta | undefined> => {\n const { approval } = quoteResponse;\n\n if (approval) {\n const approveTx = async () => {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n\n const approvalTxMeta = await this.#handleEvmTransaction({\n transactionType: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n trade: approval,\n requireApproval,\n });\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n };\n\n return await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionApprovalCompleted\n : TraceName.SwapTransactionApprovalCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: false,\n },\n },\n approveTx,\n );\n }\n\n return undefined;\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param params - The parameters for the transaction\n * @param params.transactionType - The type of transaction to submit\n * @param params.trade - The trade data to confirm\n * @param params.requireApproval - Whether to require approval for the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async ({\n transactionType,\n trade,\n requireApproval = false,\n }: {\n transactionType: TransactionType;\n trade: TxData;\n requireApproval?: boolean;\n }): Promise<TransactionMeta> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval,\n type: transactionType,\n origin: 'metamask',\n };\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...trade,\n chainId: hexChainId,\n gasLimit: trade.gasLimit?.toString(),\n gas: trade.gasLimit?.toString(),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n const { result } = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const resetApproval = await getUSDTAllowanceResetTx(\n this.messagingSystem,\n quoteResponse,\n );\n if (resetApproval) {\n await this.#handleEvmTransaction({\n transactionType: TransactionType.bridgeApproval,\n trade: resetApproval,\n });\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits batched EVM transactions to the TransactionController\n *\n * @param args - The parameters for the transaction\n * @param args.isBridgeTx - Whether the transaction is a bridge transaction\n * @param args.trade - The trade data to confirm\n * @param args.approval - The approval data to confirm\n * @param args.resetApproval - The ethereum:USDT reset approval data to confirm\n * @param args.quoteResponse - The quote response\n * @param args.requireApproval - Whether to require approval for the transaction\n * @returns The approvalMeta and tradeMeta for the batched transaction\n */\n readonly #handleEvmTransactionBatch = async (\n args: Omit<\n Parameters<typeof getAddTransactionBatchParams>[0],\n 'messagingSystem' | 'estimateGasFeeFn'\n >,\n ) => {\n const transactionParams = await getAddTransactionBatchParams({\n messagingSystem: this.messagingSystem,\n estimateGasFeeFn: this.#estimateGasFeeFn,\n ...args,\n });\n const txDataByType = {\n [TransactionType.bridgeApproval]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.bridgeApproval,\n )?.params.data,\n [TransactionType.swapApproval]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.swapApproval,\n )?.params.data,\n [TransactionType.bridge]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.bridge,\n )?.params.data,\n [TransactionType.swap]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.swap,\n )?.params.data,\n };\n\n const { batchId } = await this.#addTransactionBatchFn(transactionParams);\n\n const { approvalMeta, tradeMeta } = findAndUpdateTransactionsInBatch({\n messagingSystem: this.messagingSystem,\n updateTransactionFn: this.#updateTransactionFn,\n batchId,\n txDataByType,\n });\n\n if (!tradeMeta) {\n throw new Error(\n 'Failed to update cross-chain swap transaction batch: tradeMeta not found',\n );\n }\n\n return { approvalMeta, tradeMeta };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ): Promise<TransactionMeta & Partial<SolanaTransactionMeta>> => {\n this.messagingSystem.call('BridgeController:stopPollingForQuotes');\n\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const isHardwareAccount = isHardwareWallet(selectedAccount);\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabledOnClient,\n isHardwareAccount,\n );\n // Emit Submitted event after submit button is clicked\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n preConfirmationProperties,\n );\n\n let txMeta: TransactionMeta & Partial<SolanaTransactionMeta>;\n let approvalTxId: string | undefined;\n const startTime = Date.now();\n\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionCompleted\n : TraceName.SwapTransactionCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: false,\n },\n },\n async () => {\n try {\n return await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n selectedAccount,\n );\n } catch (error) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n txMeta?.id,\n {\n error_message: (error as Error)?.message,\n ...preConfirmationProperties,\n },\n );\n throw error;\n }\n },\n );\n } else {\n // Submit EVM tx\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 const requireApproval =\n this.#clientId === BridgeClientId.MOBILE && isHardwareAccount;\n\n // Handle smart transactions if enabled\n txMeta = await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionCompleted\n : TraceName.SwapTransactionCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: isStxEnabledOnClient,\n },\n },\n async () => {\n if (isStxEnabledOnClient || quoteResponse.quote.gasIncluded7702) {\n const { tradeMeta, approvalMeta } =\n await this.#handleEvmTransactionBatch({\n isBridgeTx,\n resetApproval: await getUSDTAllowanceResetTx(\n this.messagingSystem,\n quoteResponse,\n ),\n approval: quoteResponse.approval,\n trade: quoteResponse.trade as TxData,\n quoteResponse,\n requireApproval,\n });\n\n approvalTxId = approvalMeta?.id;\n return tradeMeta;\n }\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(\n isBridgeTx,\n quoteResponse,\n requireApproval,\n );\n\n approvalTxId = approvalTxMeta?.id;\n\n await handleMobileHardwareWalletDelay(requireApproval);\n\n return await this.#handleEvmTransaction({\n transactionType: isBridgeTx\n ? TransactionType.bridge\n : TransactionType.swap,\n trade: quoteResponse.trade as TxData,\n requireApproval,\n });\n },\n );\n }\n\n try {\n // Add swap or bridge tx to history\n this.#addTxToHistory({\n accountAddress: selectedAccount.address,\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime,\n approvalTxId,\n });\n\n if (isSolanaChainId(quoteResponse.quote.srcChainId)) {\n // Start polling for bridge tx status\n this.#startPollingForTxId(txMeta.id);\n // Track Solana Swap completed event\n if (!isBridgeTx) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n txMeta.id,\n );\n }\n }\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\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 txMetaId - The txMetaId of the history item to track the event for\n * @param eventProperties - The properties for the event\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed,\n >(\n eventName: T,\n txMetaId?: string,\n eventProperties?: Pick<RequiredEventContextFromClient, T>[T],\n ) => {\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n ...(eventProperties ?? {}),\n };\n\n if (!txMetaId) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n baseProperties,\n );\n return;\n }\n\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n eventProperties ?? {},\n );\n return;\n }\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n const { transactions } = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = transactions?.find(({ id }) => id === txMetaId);\n const approvalTxMeta = transactions?.find(\n ({ id }) => id === historyItem.approvalTxId,\n );\n\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n const {\n chain_id_source,\n chain_id_destination,\n token_address_source,\n token_address_destination,\n } = requestParamProperties;\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {\n ...baseProperties,\n chain_id_source,\n chain_id_destination,\n token_address_source,\n token_address_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n return;\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(historyItem.quote),\n };\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n 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 { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n Intent,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n isSolanaChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n formatChainIdToCaip,\n isCrossChain,\n isHardwareWallet,\n MetricsActionType,\n} from '@metamask/bridge-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { toHex } from '@metamask/controller-utils';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type {\n TransactionController,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { numberToHex, type Hex } from '@metamask/utils';\n\nimport {\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 TraceName,\n} from './constants';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport { type BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport {\n findAndUpdateTransactionsInBatch,\n getAddTransactionBatchParams,\n getClientRequest,\n getStatusRequestParams,\n getUSDTAllowanceResetTx,\n handleLineaDelay,\n handleMobileHardwareWalletDelay,\n handleSolanaTxResponse,\n} from './utils/transaction';\nimport { generateActionId } from './utils/transaction';\n\n// CoW intent: API base and network path mapping (adjust as needed)\nconst COW_API_BASE = 'https://api.cow.fi';\nconst COW_NETWORK_PATHS: Record<number, string> = {\n // Ethereum Mainnet\n 1: 'mainnet',\n // Arbitrum One\n 42161: 'arbitrum_one',\n // Base\n 8453: 'base',\n // Avalanche C-Chain\n 43114: 'avalanche',\n // Polygon PoS\n 137: 'polygon',\n};\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 persist: true,\n anonymous: false,\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};\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 #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionFn: typeof TransactionController.prototype.addTransaction;\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n\n readonly #estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionFn,\n addTransactionBatchFn,\n updateTransactionFn,\n estimateGasFeeFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionFn: typeof TransactionController.prototype.addTransaction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\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.#addTransactionFn = addTransactionFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#updateTransactionFn = updateTransactionFn;\n this.#estimateGasFeeFn = estimateGasFeeFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n\n // Register action handlers\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitIntent`,\n this.submitIntent.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:restartPollingForFailedAttempts`,\n this.restartPollingForFailedAttempts.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:getBridgeHistoryItemByTxMetaId`,\n this.getBridgeHistoryItemByTxMetaId.bind(this),\n );\n\n // Set interval\n this.setIntervalLength(REFRESH_INTERVAL_MS);\n\n this.messagingSystem.subscribe(\n 'TransactionController:transactionFailed',\n ({ transactionMeta }) => {\n const { type, status, id } = transactionMeta;\n\n // Skip intent transactions - they have their own tracking via CoW API\n // Skip intent transactions - they have their own tracking via CoW API\n if (\n (transactionMeta as { swapMetaData?: { isIntentTx?: boolean } })\n .swapMetaData?.isIntentTx\n ) {\n return;\n }\n\n if (\n type &&\n [\n TransactionType.bridge,\n TransactionType.swap,\n TransactionType.bridgeApproval,\n TransactionType.swapApproval,\n ].includes(type) &&\n [\n TransactionStatus.failed,\n TransactionStatus.dropped,\n TransactionStatus.rejected,\n ].includes(status)\n ) {\n // Mark tx as failed in txHistory\n this.#markTxAsFailed(transactionMeta);\n // Track failed event\n if (status !== TransactionStatus.rejected) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n id,\n getEVMTxPropertiesFromTransactionMeta(transactionMeta),\n );\n }\n }\n },\n );\n\n this.messagingSystem.subscribe(\n 'TransactionController:transactionConfirmed',\n (transactionMeta) => {\n const { type, id, chainId } = transactionMeta;\n if (type === TransactionType.swap) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n id,\n );\n }\n if (type === TransactionType.bridge && !isSolanaChainId(chainId)) {\n this.#startPollingForTxId(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 // Mark tx as failed in txHistory if either the approval or trade fails\n readonly #markTxAsFailed = ({ id }: TransactionMeta) => {\n const txHistoryKey = this.state.txHistory[id]\n ? id\n : Object.keys(this.state.txHistory).find(\n (key) => this.state.txHistory[key].approvalTxId === id,\n );\n if (!txHistoryKey) {\n return;\n }\n this.update((statusState) => {\n statusState.txHistory[txHistoryKey].status.status = StatusTypes.FAILED;\n });\n };\n\n resetState = () => {\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 }) => {\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 { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const selectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n const selectedChainId = selectedNetworkClient.configuration.chainId;\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 }) => {\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 // 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 is a bridge transaction\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n\n if (isBridgeTx) {\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 }\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 = () => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n .filter((historyItem) => {\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 // Swap txs don't need to have their statuses polled\n .filter((historyItem) => {\n const isBridgeTx = isCrossChain(\n historyItem.quote.srcChainId,\n historyItem.quote.destChainId,\n );\n return isBridgeTx;\n });\n\n incompleteHistoryItems.forEach((historyItem) => {\n const bridgeTxMetaId = historyItem.txMetaId;\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(bridgeTxMetaId);\n });\n };\n\n readonly #addTxToHistory = (\n startPollingForBridgeTxStatusArgs: StartPollingForBridgeTxStatusArgsSerialized,\n ) => {\n const {\n bridgeTxMeta,\n statusRequest,\n quoteResponse,\n startTime,\n slippagePercentage,\n initialDestAssetBalance,\n targetContractAddress,\n approvalTxId,\n isStxEnabled,\n accountAddress: selectedAddress,\n } = startPollingForBridgeTxStatusArgs;\n\n // Write all non-status fields to state so we can reference the quote in Activity list without the Bridge API\n // We know it's in progress but not the exact status yet\n const txHistoryItem = {\n txMetaId: bridgeTxMeta.id,\n\n originalTransactionId:\n (bridgeTxMeta as unknown as { originalTransactionId: string })\n .originalTransactionId || bridgeTxMeta.id, // Keep original for intent transactions\n batchId: bridgeTxMeta.batchId,\n quote: quoteResponse.quote,\n startTime,\n estimatedProcessingTimeInSeconds:\n quoteResponse.estimatedProcessingTimeInSeconds,\n slippagePercentage,\n pricingData: {\n amountSent: quoteResponse.sentAmount.amount,\n amountSentInUsd: quoteResponse.sentAmount.usd ?? undefined,\n quotedGasInUsd: quoteResponse.gasFee.effective?.usd ?? undefined,\n quotedReturnInUsd: quoteResponse.toTokenAmount.usd ?? undefined,\n quotedGasAmount: quoteResponse.gasFee.effective?.amount ?? undefined,\n },\n initialDestAssetBalance,\n targetContractAddress,\n account: selectedAddress,\n status: {\n // We always have a PENDING status when we start polling for a tx, don't need the Bridge API for that\n // Also we know the bare minimum fields for status at this point in time\n status: StatusTypes.PENDING,\n srcChain: {\n chainId: statusRequest.srcChainId,\n txHash: statusRequest.srcTxHash,\n },\n },\n hasApprovalTx: Boolean(quoteResponse.approval),\n approvalTxId,\n isStxEnabled: isStxEnabled ?? false,\n };\n this.update((state) => {\n // Use the txMeta.id as the key so we can reference the txMeta in TransactionController\n state.txHistory[bridgeTxMeta.id] = txHistoryItem;\n });\n };\n\n readonly #startPollingForTxId = (txId: string) => {\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) {\n return;\n }\n const { quote } = txHistoryItem;\n const isIntent = txId.startsWith('intent:');\n const isBridgeTx = isCrossChain(quote.srcChainId, quote.destChainId);\n if (isBridgeTx || isIntent) {\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 ) => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n this.#addTxToHistory(txHistoryMeta);\n this.#startPollingForTxId(bridgeTxMeta.id);\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 (pollingInput: BridgeStatusPollingInput) => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n #getMultichainSelectedAccount() {\n return this.messagingSystem.call(\n 'AccountsController:getSelectedMultichainAccount',\n );\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) => {\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\n // Update the attempts counter\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].attempts = newAttempts;\n });\n };\n\n readonly #fetchBridgeTxStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n\n // Intent-based items: poll CoW API instead of Bridge API\n if (bridgeTxMetaId.startsWith('intent:')) {\n await this.#fetchCowOrderStatus({ bridgeTxMetaId });\n return;\n }\n\n if (\n shouldSkipFetchDueToFetchFailures(txHistory[bridgeTxMetaId]?.attempts)\n ) {\n return;\n }\n\n try {\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 historyItem = txHistory[bridgeTxMetaId];\n const srcTxHash = this.#getSrcTxHash(bridgeTxMetaId);\n if (!srcTxHash) {\n return;\n }\n\n this.#updateSrcTxHash(bridgeTxMetaId, srcTxHash);\n\n const statusRequest = getStatusRequestWithSrcTxHash(\n historyItem.quote,\n srcTxHash,\n );\n const { status, validationFailures } = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\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 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 }\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 }\n };\n\n readonly #fetchCowOrderStatus = async ({\n bridgeTxMetaId,\n }: FetchBridgeTxStatusArgs) => {\n const { txHistory } = this.state;\n const historyItem = txHistory[bridgeTxMetaId];\n if (!historyItem) {\n return;\n }\n\n // Backoff handling\n if (shouldSkipFetchDueToFetchFailures(historyItem.attempts)) {\n return;\n }\n\n const orderUid = bridgeTxMetaId.replace(/^intent:/u, '');\n const { srcChainId } = historyItem.quote;\n const networkPath = COW_NETWORK_PATHS[srcChainId];\n if (!networkPath) {\n // Unsupported mapping: stop polling with failure\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status = {\n status: StatusTypes.FAILED,\n srcChain: {\n chainId: srcChainId,\n txHash: '',\n },\n } as unknown as (typeof state.txHistory)[string]['status'];\n });\n return;\n }\n\n try {\n const url = `${COW_API_BASE}/${networkPath}/api/v1/orders/${orderUid}`;\n const res = await this.#fetchFn(url, { method: 'GET' });\n\n // CoW API status enum mapping\n const rawStatus =\n typeof res === 'object' && res !== null && 'status' in res\n ? ((res as { status?: string }).status ?? '')\n : '';\n const isComplete = rawStatus === 'fulfilled';\n const isFailed = ['cancelled', 'expired'].includes(rawStatus);\n const isPending = ['presignaturePending', 'open'].includes(rawStatus);\n\n // Try to find a tx hash in common fields\n let txHash = '';\n let allHashes: string[] = [];\n\n if (isComplete) {\n // Prefer authoritative trades endpoint for one or multiple fills\n const tradesUrl = `${COW_API_BASE}/${networkPath}/api/v1/trades?orderUid=${orderUid}`;\n const trades =\n (await this.#fetchFn(tradesUrl, { method: 'GET' })) ?? [];\n allHashes = Array.isArray(trades)\n ? trades\n .map(\n (t: { txHash?: unknown; transactionHash?: unknown }) =>\n t?.txHash || t?.transactionHash,\n )\n .filter(\n (h: unknown): h is string =>\n typeof h === 'string' && h.length > 0,\n )\n : [];\n // Fallback to any hash on order if trades missing\n if (allHashes.length === 0) {\n const possible = [\n (res as { txHash?: string }).txHash,\n (res as { transactionHash?: string }).transactionHash,\n (res as { executedTransaction?: string }).executedTransaction,\n (res as { executedTransactionHash?: string })\n .executedTransactionHash,\n ].filter(\n (h: unknown): h is string => typeof h === 'string' && h.length > 0,\n );\n allHashes = possible;\n }\n txHash = allHashes[allHashes.length - 1] || '';\n }\n\n let statusType: StatusTypes;\n if (isComplete) {\n statusType = StatusTypes.COMPLETE;\n } else if (isFailed) {\n statusType = StatusTypes.FAILED;\n } else if (isPending) {\n statusType = StatusTypes.PENDING;\n } else {\n statusType = StatusTypes.PENDING; // Default to pending for unknown statuses\n }\n\n const newStatus = {\n status: statusType,\n srcChain: {\n chainId: srcChainId,\n txHash: txHash || historyItem.status.srcChain.txHash || '',\n },\n } as typeof historyItem.status;\n\n const newBridgeHistoryItem = {\n ...historyItem,\n status: newStatus,\n completionTime:\n newStatus.status === StatusTypes.COMPLETE ||\n newStatus.status === StatusTypes.FAILED\n ? Date.now()\n : undefined,\n attempts: undefined,\n srcTxHashes:\n allHashes.length > 0\n ? Array.from(\n new Set([...(historyItem.srcTxHashes ?? []), ...allHashes]),\n )\n : historyItem.srcTxHashes,\n };\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n // Update the actual transaction in TransactionController to sync with CoW status\n // Use the original transaction ID (not the intent: prefixed bridge history key)\n const originalTxId =\n (historyItem as unknown as { originalTransactionId: string })\n .originalTransactionId || historyItem.txMetaId;\n if (originalTxId && !originalTxId.startsWith('intent:')) {\n try {\n let transactionStatus: TransactionStatus;\n if (isComplete) {\n transactionStatus = TransactionStatus.confirmed;\n } else if (isFailed) {\n transactionStatus = TransactionStatus.failed;\n } else if (isPending) {\n transactionStatus = TransactionStatus.submitted;\n } else {\n transactionStatus = TransactionStatus.submitted; // Default to submitted for unknown statuses\n }\n\n // Merge with existing TransactionMeta to avoid wiping required fields\n const { transactions } = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const existingTxMeta = (transactions as TransactionMeta[]).find(\n (t) => t.id === originalTxId,\n );\n\n if (!existingTxMeta) {\n console.warn(\n '📝 [fetchCowOrderStatus] Skipping update; transaction not found',\n { originalTxId, bridgeHistoryKey: bridgeTxMetaId },\n );\n } else {\n const updatedTxMeta: TransactionMeta = {\n ...existingTxMeta,\n status: transactionStatus,\n ...(txHash ? { hash: txHash } : {}),\n ...(txHash\n ? ({\n txReceipt: {\n ...(\n existingTxMeta as unknown as {\n txReceipt: Record<string, unknown>;\n }\n ).txReceipt,\n transactionHash: txHash,\n status: (isComplete ? '0x1' : '0x0') as unknown as string,\n },\n } as Partial<TransactionMeta>)\n : {}),\n } as TransactionMeta;\n\n this.#updateTransactionFn(\n updatedTxMeta,\n `BridgeStatusController - CoW order status updated: ${rawStatus}`,\n );\n }\n } catch (error) {\n console.error(\n '📝 [fetchCowOrderStatus] Failed to update transaction status',\n {\n originalTxId,\n bridgeHistoryKey: bridgeTxMetaId,\n error,\n },\n );\n }\n }\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n const isFinal =\n newStatus.status === StatusTypes.COMPLETE ||\n newStatus.status === StatusTypes.FAILED;\n if (isFinal && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n if (newStatus.status === StatusTypes.COMPLETE) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n } else if (newStatus.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch {\n // Network or API error: apply backoff\n this.#handleFetchFailure(bridgeTxMetaId);\n }\n };\n\n readonly #getSrcTxHash = (bridgeTxMetaId: string): string | undefined => {\n const { txHistory } = this.state;\n // Prefer the srcTxHash from bridgeStatusState so we don't have to l ook 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 (srcTxHash) {\n return srcTxHash;\n }\n\n // Look up in TransactionController if txMeta has been updated with the srcTxHash\n const txControllerState = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = txControllerState.transactions.find(\n (tx: TransactionMeta) => tx.id === bridgeTxMetaId,\n );\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (bridgeTxMetaId: string, srcTxHash: string) => {\n const { txHistory } = this.state;\n if (txHistory[bridgeTxMetaId].status.srcChain.txHash) {\n return;\n }\n\n this.update((state) => {\n state.txHistory[bridgeTxMetaId].status.srcChain.txHash = srcTxHash;\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 ) => {\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 }\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 /**\n * Submits the transaction to the snap using the keyring rpc method\n * This adds an approval tx to the ApprovalsController in the background\n * The client needs to handle the approval tx by redirecting to the confirmation page with the approvalTxId in the URL\n *\n * @param quoteResponse - The quote response\n * @param quoteResponse.quote - The quote\n * @param selectedAccount - The account to submit the transaction for\n * @returns The transaction meta\n */\n readonly #handleSolanaTx = async (\n quoteResponse: QuoteResponse<string> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n ) => {\n if (!selectedAccount.metadata?.snap?.id) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined snap id',\n );\n }\n\n const request = getClientRequest(quoteResponse, selectedAccount);\n const requestResponse = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n request,\n )) as string | { result: Record<string, string> } | { signature: string };\n\n // The extension client actually redirects before it can do anytyhing with this meta\n const txMeta = handleSolanaTxResponse(\n requestResponse,\n quoteResponse,\n selectedAccount,\n );\n\n // TODO remove this eventually, just returning it now to match extension behavior\n // OR if the snap can propagate the snapRequestId or keyringReqId to the ApprovalsController, this can return the approvalTxId instead and clients won't need to subscribe to the ApprovalsController state to redirect\n return txMeta;\n };\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?: Awaited<\n ReturnType<TransactionController['addTransaction']>\n >['result'],\n ): Promise<TransactionMeta> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined =\n this.messagingSystem\n .call('TransactionController:getState')\n .transactions.find(\n (tx: TransactionMeta) => tx.hash === transactionHash,\n );\n if (!finalTransactionMeta) {\n throw new Error(\n 'Failed to submit cross-chain swap tx: txMeta for txHash was not found',\n );\n }\n return finalTransactionMeta;\n };\n\n // Waits until a given transaction (by id) reaches confirmed/finalized status or fails/times out.\n readonly #waitForTxConfirmation = async (\n txId: string,\n {\n timeoutMs = 5 * 60_000, // 5 minutes default\n pollMs = 2_000,\n }: { timeoutMs?: number; pollMs?: number } = {},\n ): Promise<TransactionMeta> => {\n const start = Date.now();\n // Poll the TransactionController state for status changes\n // We intentionally keep this simple to avoid extra wiring/subscriptions in this controller\n // and because we only need it for the rare intent+approval path.\n while (true) {\n const { transactions } = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const meta = transactions.find((t: TransactionMeta) => t.id === txId);\n\n if (meta) {\n // Treat both 'confirmed' and 'finalized' as success to match TC lifecycle\n if (\n meta.status === TransactionStatus.confirmed ||\n // Some environments move directly to finalized\n (TransactionStatus as unknown as { finalized: string }).finalized ===\n meta.status\n ) {\n return meta;\n }\n if (\n meta.status === TransactionStatus.failed ||\n meta.status === TransactionStatus.dropped ||\n meta.status === TransactionStatus.rejected\n ) {\n throw new Error('Approval transaction did not confirm');\n }\n }\n\n if (Date.now() - start > timeoutMs) {\n throw new Error('Timed out waiting for approval confirmation');\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollMs));\n }\n };\n\n readonly #handleApprovalTx = async (\n isBridgeTx: boolean,\n quoteResponse: QuoteResponse<string | TxData> & QuoteMetadata,\n requireApproval?: boolean,\n ): Promise<TransactionMeta | undefined> => {\n const { approval } = quoteResponse;\n\n if (approval) {\n const approveTx = async () => {\n await this.#handleUSDTAllowanceReset(quoteResponse);\n\n const approvalTxMeta = await this.#handleEvmTransaction({\n transactionType: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n trade: approval,\n requireApproval,\n });\n\n await handleLineaDelay(quoteResponse);\n return approvalTxMeta;\n };\n\n return await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionApprovalCompleted\n : TraceName.SwapTransactionApprovalCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: false,\n },\n },\n approveTx,\n );\n }\n\n return undefined;\n };\n\n /**\n * Submits an EVM transaction to the TransactionController\n *\n * @param params - The parameters for the transaction\n * @param params.transactionType - The type of transaction to submit\n * @param params.trade - The trade data to confirm\n * @param params.requireApproval - Whether to require approval for the transaction\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async ({\n transactionType,\n trade,\n requireApproval = false,\n }: {\n transactionType: TransactionType;\n trade: TxData;\n requireApproval?: boolean;\n }): Promise<TransactionMeta> => {\n const actionId = generateActionId().toString();\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n const requestOptions = {\n actionId,\n networkClientId,\n requireApproval,\n type: transactionType,\n origin: 'metamask',\n };\n // Exclude gasLimit from trade to avoid type issues (it can be null)\n const { gasLimit: tradeGasLimit, ...tradeWithoutGasLimit } = trade;\n\n const transactionParams: Parameters<\n TransactionController['addTransaction']\n >[0] = {\n ...tradeWithoutGasLimit,\n chainId: hexChainId,\n // Only add gasLimit and gas if they're valid (not undefined/null/zero)\n ...(tradeGasLimit &&\n tradeGasLimit !== 0 && {\n gasLimit: tradeGasLimit.toString(),\n gas: tradeGasLimit.toString(),\n }),\n };\n const transactionParamsWithMaxGas: TransactionParams = {\n ...transactionParams,\n ...(await this.#calculateGasFees(\n transactionParams,\n networkClientId,\n hexChainId,\n )),\n };\n\n const { result } = await this.#addTransactionFn(\n transactionParamsWithMaxGas,\n requestOptions,\n );\n\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n };\n\n readonly #handleUSDTAllowanceReset = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n ) => {\n const resetApproval = await getUSDTAllowanceResetTx(\n this.messagingSystem,\n quoteResponse,\n );\n if (resetApproval) {\n await this.#handleEvmTransaction({\n transactionType: TransactionType.bridgeApproval,\n trade: resetApproval,\n });\n }\n };\n\n readonly #calculateGasFees = async (\n transactionParams: TransactionParams,\n networkClientId: string,\n chainId: Hex,\n ) => {\n const { gasFeeEstimates } = this.messagingSystem.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.#estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n\n // Let the TransactionController handle gas limit estimation when no gas is provided\n // This fixes the issue where approval transactions had zero gas\n const maxGasLimit = transactionParams.gas\n ? toHex(transactionParams.gas)\n : undefined;\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n };\n\n /**\n * Submits batched EVM transactions to the TransactionController\n *\n * @param args - The parameters for the transaction\n * @param args.isBridgeTx - Whether the transaction is a bridge transaction\n * @param args.trade - The trade data to confirm\n * @param args.approval - The approval data to confirm\n * @param args.resetApproval - The ethereum:USDT reset approval data to confirm\n * @param args.quoteResponse - The quote response\n * @param args.requireApproval - Whether to require approval for the transaction\n * @returns The approvalMeta and tradeMeta for the batched transaction\n */\n readonly #handleEvmTransactionBatch = async (\n args: Omit<\n Parameters<typeof getAddTransactionBatchParams>[0],\n 'messagingSystem' | 'estimateGasFeeFn'\n >,\n ) => {\n const transactionParams = await getAddTransactionBatchParams({\n messagingSystem: this.messagingSystem,\n estimateGasFeeFn: this.#estimateGasFeeFn,\n ...args,\n });\n const txDataByType = {\n [TransactionType.bridgeApproval]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.bridgeApproval,\n )?.params.data,\n [TransactionType.swapApproval]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.swapApproval,\n )?.params.data,\n [TransactionType.bridge]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.bridge,\n )?.params.data,\n [TransactionType.swap]: transactionParams.transactions.find(\n ({ type }) => type === TransactionType.swap,\n )?.params.data,\n };\n\n const { batchId } = await this.#addTransactionBatchFn(transactionParams);\n\n const { approvalMeta, tradeMeta } = findAndUpdateTransactionsInBatch({\n messagingSystem: this.messagingSystem,\n updateTransactionFn: this.#updateTransactionFn,\n batchId,\n txDataByType,\n });\n\n if (!tradeMeta) {\n throw new Error(\n 'Failed to update cross-chain swap transaction batch: tradeMeta not found',\n );\n }\n\n return { approvalMeta, tradeMeta };\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @returns The transaction meta\n */\n submitTx = async (\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n ): Promise<TransactionMeta & Partial<SolanaTransactionMeta>> => {\n this.messagingSystem.call('BridgeController:stopPollingForQuotes');\n\n const selectedAccount = this.#getMultichainSelectedAccount();\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const isHardwareAccount = isHardwareWallet(selectedAccount);\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabledOnClient,\n isHardwareAccount,\n );\n // Emit Submitted event after submit button is clicked\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n preConfirmationProperties,\n );\n\n let txMeta: TransactionMeta & Partial<SolanaTransactionMeta>;\n let approvalTxId: string | undefined;\n const startTime = Date.now();\n\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Submit SOLANA tx\n if (\n isSolanaChainId(quoteResponse.quote.srcChainId) &&\n typeof quoteResponse.trade === 'string'\n ) {\n txMeta = await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionCompleted\n : TraceName.SwapTransactionCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: false,\n },\n },\n async () => {\n try {\n return await this.#handleSolanaTx(\n quoteResponse as QuoteResponse<string> & QuoteMetadata,\n selectedAccount,\n );\n } catch (error) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n txMeta?.id,\n {\n error_message: (error as Error)?.message,\n ...preConfirmationProperties,\n },\n );\n throw error;\n }\n },\n );\n } else {\n // Submit EVM tx\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 const requireApproval =\n this.#clientId === BridgeClientId.MOBILE && isHardwareAccount;\n\n // Handle smart transactions if enabled\n txMeta = await this.#trace(\n {\n name: isBridgeTx\n ? TraceName.BridgeTransactionCompleted\n : TraceName.SwapTransactionCompleted,\n data: {\n srcChainId: formatChainIdToCaip(quoteResponse.quote.srcChainId),\n stxEnabled: isStxEnabledOnClient,\n },\n },\n async () => {\n if (isStxEnabledOnClient || quoteResponse.quote.gasIncluded7702) {\n const { tradeMeta, approvalMeta } =\n await this.#handleEvmTransactionBatch({\n isBridgeTx,\n resetApproval: await getUSDTAllowanceResetTx(\n this.messagingSystem,\n quoteResponse,\n ),\n approval: quoteResponse.approval,\n trade: quoteResponse.trade as TxData,\n quoteResponse,\n requireApproval,\n });\n\n approvalTxId = approvalMeta?.id;\n return tradeMeta;\n }\n // Set approval time and id if an approval tx is needed\n const approvalTxMeta = await this.#handleApprovalTx(\n isBridgeTx,\n quoteResponse,\n requireApproval,\n );\n\n approvalTxId = approvalTxMeta?.id;\n\n await handleMobileHardwareWalletDelay(requireApproval);\n\n return await this.#handleEvmTransaction({\n transactionType: isBridgeTx\n ? TransactionType.bridge\n : TransactionType.swap,\n trade: quoteResponse.trade as TxData,\n requireApproval,\n });\n },\n );\n }\n\n try {\n // Add swap or bridge tx to history\n this.#addTxToHistory({\n accountAddress: selectedAccount.address,\n bridgeTxMeta: txMeta, // Only the id field is used by the BridgeStatusController\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: txMeta.hash,\n },\n quoteResponse,\n slippagePercentage: 0, // TODO include slippage provided by quote if using dynamic slippage, or slippage from quote request\n isStxEnabled: isStxEnabledOnClient,\n startTime,\n approvalTxId,\n });\n\n if (isSolanaChainId(quoteResponse.quote.srcChainId)) {\n // Start polling for bridge tx status\n this.#startPollingForTxId(txMeta.id);\n // Track Solana Swap completed event\n if (!isBridgeTx) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n txMeta.id,\n );\n }\n }\n } catch {\n // Ignore errors here, we don't want to crash the app if this fails and tx submission succeeds\n }\n return txMeta;\n };\n\n /**\n * UI-signed intent submission (fast path): the UI generates the EIP-712 signature and calls this with the raw signature.\n * Here we POST the order to the intent backend (e.g., CoW) and create a synthetic history entry for UX.\n *\n * @param params - Object containing intent submission parameters\n * @param params.quoteResponse - Quote carrying intent data\n * @param params.signature - Hex signature produced by eth_signTypedData_v4\n * @param params.accountAddress - The EOA submitting the order\n * @returns A lightweight TransactionMeta-like object for history linking\n */\n submitIntent = async (params: {\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata;\n signature: string;\n accountAddress: string;\n }): Promise<Pick<TransactionMeta, 'id' | 'chainId' | 'type' | 'status'>> => {\n const { quoteResponse, signature, accountAddress } = params;\n\n // Build pre-confirmation properties for error tracking parity with submitTx\n const account = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n accountAddress,\n );\n const isHardwareAccount = Boolean(account) && isHardwareWallet(account);\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n false,\n isHardwareAccount,\n );\n\n try {\n const { intent } = (quoteResponse as QuoteResponse & { intent?: Intent })\n .quote;\n if (!intent || intent.protocol !== 'cowswap') {\n throw new Error('submitIntent: missing or unsupported intent');\n }\n\n // If backend provided an approval tx for this intent quote, submit it first (on-chain),\n // then proceed with off-chain intent submission.\n let approvalTxId: string | undefined;\n if (quoteResponse.approval) {\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Handle approval silently for better UX in intent flows\n const approvalTxMeta = await this.#handleApprovalTx(\n isBridgeTx,\n quoteResponse,\n /* requireApproval */ false,\n );\n approvalTxId = approvalTxMeta?.id;\n\n // Optionally wait for approval confirmation with timeout and graceful fallback\n // CoW order can be created before allowance is mined, but waiting helps avoid MEV issues\n if (approvalTxId) {\n try {\n // Wait with a shorter timeout and continue if it fails\n await this.#waitForTxConfirmation(approvalTxId, {\n timeoutMs: 30_000, // 30 seconds instead of 5 minutes\n pollMs: 3_000, // Poll less frequently to avoid rate limits\n });\n } catch (error) {\n // Log but don't throw - continue with CoW order submission\n console.warn(\n 'Approval confirmation failed, continuing with intent submission:',\n error,\n );\n }\n }\n }\n\n // Map chainId to CoW API server path (prod)\n const chainId = quoteResponse.quote.srcChainId;\n const serverPath = COW_NETWORK_PATHS[chainId];\n if (!serverPath) {\n throw new Error(\n `submitIntent: unsupported chainId for CoW intents: ${chainId}`,\n );\n }\n\n // Build OrderCreation payload (simplified)\n const orderBody = {\n ...intent.order,\n feeAmount: '0',\n from: accountAddress,\n signature,\n signingScheme: 'eip712',\n } as Record<string, unknown>;\n\n // POST to CoW prod\n const url = `https://api.cow.fi/${serverPath}/api/v1/orders`;\n const res = await this.#fetchFn(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(orderBody),\n });\n\n const orderUid: string | undefined =\n typeof res === 'string'\n ? res\n : ((res as { uid?: string; orderUid?: string; id?: string })?.uid ??\n (res as { uid?: string; orderUid?: string; id?: string })\n ?.orderUid ??\n (res as { uid?: string; orderUid?: string; id?: string })?.id);\n if (!orderUid) {\n throw new Error('submitIntent: failed to submit order');\n }\n\n // Get initial order status from CoW API\n let initialOrderStatus = 'open'; // Default status\n try {\n const orderStatusUrl = `${COW_API_BASE}/${serverPath}/api/v1/orders/${orderUid}`;\n const orderStatusRes = await this.#fetchFn(orderStatusUrl, {\n method: 'GET',\n });\n initialOrderStatus =\n (orderStatusRes as { status?: string })?.status ?? 'open';\n } catch (error) {\n console.warn(\n '📝 [submitIntent] Failed to get initial order status, using default:',\n error,\n );\n }\n\n // Determine transaction type: swap for same-chain, bridge for cross-chain\n const isCrossChainTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n const transactionType = isCrossChainTx\n ? TransactionType.bridge\n : TransactionType.swap;\n\n // Create actual transaction in Transaction Controller first\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n formatChainIdToHex(chainId),\n );\n\n const intentTransactionParams = {\n chainId: formatChainIdToHex(chainId),\n from: accountAddress,\n to:\n intent.settlementContract ||\n '0x9008D19f58AAbd9eD0D60971565AA8510560ab41', // CoW settlement contract\n data: `0x${orderUid.slice(-8)}`, // Use last 8 chars of orderUid to make each transaction unique\n value: '0x0',\n gas: '0x5208', // Minimal gas for display purposes\n gasPrice: '0x3b9aca00', // 1 Gwei - will be converted to EIP-1559 fees if network supports it\n };\n\n const { transactionMeta: txMetaPromise } = await this.#addTransactionFn(\n intentTransactionParams,\n {\n origin: 'metamask',\n actionId: generateActionId(),\n requireApproval: false,\n networkClientId,\n type: transactionType,\n swaps: {\n meta: {\n // Add token symbols from quoteResponse for proper display\n sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n destinationTokenAddress: quoteResponse.quote.destAsset.address,\n swapTokenValue: quoteResponse.sentAmount.amount,\n approvalTxId,\n swapMetaData: {\n isIntentTx: true,\n orderUid,\n intentType: isCrossChainTx ? 'bridge' : 'swap',\n },\n },\n },\n },\n );\n\n const intentTxMeta = txMetaPromise;\n\n // Map initial CoW order status to TransactionController status\n const isComplete = initialOrderStatus === 'fulfilled';\n const isFailed = ['cancelled', 'expired'].includes(initialOrderStatus);\n const isPending = ['presignaturePending', 'open'].includes(\n initialOrderStatus,\n );\n\n let initialTransactionStatus: TransactionStatus;\n if (isComplete) {\n initialTransactionStatus = TransactionStatus.confirmed;\n } else if (isFailed) {\n initialTransactionStatus = TransactionStatus.failed;\n } else if (isPending) {\n initialTransactionStatus = TransactionStatus.submitted;\n } else {\n initialTransactionStatus = TransactionStatus.submitted;\n }\n\n // Update transaction with proper initial status based on CoW order\n const statusUpdatedTxMeta = {\n ...intentTxMeta,\n status: initialTransactionStatus,\n };\n\n this.#updateTransactionFn(\n statusUpdatedTxMeta,\n `BridgeStatusController - Initial CoW order status: ${initialOrderStatus}`,\n );\n\n // Update with actual transaction metadata\n const syntheticMeta = {\n ...statusUpdatedTxMeta,\n isIntentTx: true,\n orderUid,\n intentType: isCrossChainTx ? 'bridge' : 'swap',\n } as unknown as TransactionMeta;\n\n // Record in bridge history with actual transaction metadata\n try {\n // Use intent: prefix for CoW transactions to route to CoW API\n const bridgeHistoryKey = `intent:${orderUid}`;\n\n // Create a bridge transaction metadata that includes the original txId\n const bridgeTxMetaForHistory = {\n ...syntheticMeta,\n id: bridgeHistoryKey, // Use intent: prefix for bridge history key\n originalTransactionId: syntheticMeta.id, // Keep original txId for TransactionController updates\n } as TransactionMeta;\n\n this.#addTxToHistory({\n accountAddress,\n bridgeTxMeta: bridgeTxMetaForHistory,\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: syntheticMeta.hash || '',\n },\n quoteResponse,\n slippagePercentage: 0,\n isStxEnabled: false,\n approvalTxId,\n });\n\n // Debug: Check if the bridge history was added\n\n // Start polling using the intent: prefixed key to route to CoW API\n this.#startPollingForTxId(bridgeHistoryKey);\n } catch (error) {\n console.error(\n '📝 [submitIntent] Failed to add to bridge history',\n error,\n );\n // non-fatal but log the error\n }\n\n return syntheticMeta;\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 * 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 txMetaId - The txMetaId of the history item to track the event for\n * @param eventProperties - The properties for the event\n */\n readonly #trackUnifiedSwapBridgeEvent = <\n T extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.SnapConfirmationViewed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed,\n >(\n eventName: T,\n txMetaId?: string,\n eventProperties?: Pick<RequiredEventContextFromClient, T>[T],\n ) => {\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n ...(eventProperties ?? {}),\n };\n\n if (!txMetaId) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n baseProperties,\n );\n return;\n }\n\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n if (!historyItem) {\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n eventProperties ?? {},\n );\n return;\n }\n\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n historyItem.account,\n );\n\n const { transactions } = this.messagingSystem.call(\n 'TransactionController:getState',\n );\n const txMeta = transactions?.find(\n (t: TransactionMeta) => t.id === txMetaId,\n );\n const approvalTxMeta = transactions?.find(\n (t: TransactionMeta) => t.id === historyItem.approvalTxId,\n );\n\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n const {\n chain_id_source,\n chain_id_destination,\n token_address_source,\n token_address_destination,\n } = requestParamProperties;\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n {\n ...baseProperties,\n chain_id_source,\n chain_id_destination,\n token_address_source,\n token_address_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n return;\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(historyItem.quote),\n };\n\n this.messagingSystem.call(\n 'BridgeController:trackUnifiedSwapBridgeEvent',\n eventName,\n requiredEventProperties,\n );\n };\n}\n"]}
package/dist/types.cjs CHANGED
@@ -30,6 +30,7 @@ var BridgeStatusAction;
30
30
  BridgeStatusAction["GET_STATE"] = "getState";
31
31
  BridgeStatusAction["RESET_STATE"] = "resetState";
32
32
  BridgeStatusAction["SUBMIT_TX"] = "submitTx";
33
+ BridgeStatusAction["SUBMIT_INTENT"] = "submitIntent";
33
34
  BridgeStatusAction["RESTART_POLLING_FOR_FAILED_ATTEMPTS"] = "restartPollingForFailedAttempts";
34
35
  BridgeStatusAction["GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID"] = "getBridgeHistoryItemByTxMetaId";
35
36
  })(BridgeStatusAction || (exports.BridgeStatusAction = BridgeStatusAction = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAsCA,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AA0CD,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;AA2CD,IAAY,kBAQX;AARD,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;IACtB,6FAAuE,CAAA;IACvE,8FAAwE,CAAA;AAC1E,CAAC,EARW,kBAAkB,kCAAlB,kBAAkB,QAQ7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n TransactionControllerGetStateAction,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { 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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) => Promise<any>;\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\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n batchId?: 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 isStxEnabled?: boolean;\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\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n RESTART_POLLING_FOR_FAILED_ATTEMPTS = 'restartPollingForFailedAttempts',\n GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID = '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: TransactionMeta;\n statusRequest: StatusRequest;\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 accountAddress: string;\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<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerRestartPollingForFailedAttemptsAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESTART_POLLING_FOR_FAILED_ATTEMPTS>;\n\nexport type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction =\n BridgeStatusControllerAction<BridgeStatusAction.GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction\n | BridgeStatusControllerRestartPollingForFailedAttemptsAction\n | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerEvents =\n BridgeStatusControllerStateChangeEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents =\n | TransactionControllerTransactionFailedEvent\n | TransactionControllerTransactionConfirmedEvent;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAsCA,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;AAmDD,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,0FAAoE,CAAA;IACpE,6DAAuC,CAAA;IACvC,4CAAsB,CAAA;IACtB,gDAA0B,CAAA;IAC1B,4CAAsB,CAAA;IACtB,oDAA8B,CAAA;IAC9B,6FAAuE,CAAA;IACvE,8FAAwE,CAAA;AAC1E,CAAC,EATW,kBAAkB,kCAAlB,kBAAkB,QAS7B","sourcesContent":["import type {\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n TxData,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n TransactionControllerGetStateAction,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionMeta,\n} from '@metamask/transaction-controller';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport type { 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\nexport type BridgeHistoryItem = {\n txMetaId: string; // Need this to handle STX that might not have a txHash immediately\n originalTransactionId?: string; // Keep original transaction ID for intent transactions\n batchId?: string;\n quote: Quote;\n status: StatusResponse;\n /**\n * For intent-based orders (e.g., CoW) that can be partially filled across\n * multiple on-chain settlements, we keep all discovered source tx hashes here.\n * The canonical status.srcChain.txHash continues to hold the latest known hash\n * for backward compatibility with consumers expecting a single hash.\n */\n srcTxHashes?: string[];\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 isStxEnabled?: boolean;\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\nexport enum BridgeStatusAction {\n START_POLLING_FOR_BRIDGE_TX_STATUS = 'startPollingForBridgeTxStatus',\n WIPE_BRIDGE_STATUS = 'wipeBridgeStatus',\n GET_STATE = 'getState',\n RESET_STATE = 'resetState',\n SUBMIT_TX = 'submitTx',\n SUBMIT_INTENT = 'submitIntent',\n RESTART_POLLING_FOR_FAILED_ATTEMPTS = 'restartPollingForFailedAttempts',\n GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID = '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: TransactionMeta;\n statusRequest: StatusRequest;\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 accountAddress: string;\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<string | TxData> & QuoteMetadata;\n};\n\nexport type SourceChainTxMetaId = string;\n\nexport type BridgeStatusControllerState = {\n txHistory: Record<SourceChainTxMetaId, BridgeHistoryItem>;\n};\n\n// Actions\ntype BridgeStatusControllerAction<\n FunctionName extends keyof BridgeStatusController,\n> = {\n type: `${typeof BRIDGE_STATUS_CONTROLLER_NAME}:${FunctionName}`;\n handler: BridgeStatusController[FunctionName];\n};\n\nexport type BridgeStatusControllerGetStateAction = ControllerGetStateAction<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\n// Maps to BridgeController function names\nexport type BridgeStatusControllerStartPollingForBridgeTxStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.START_POLLING_FOR_BRIDGE_TX_STATUS>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;\n\nexport type BridgeStatusControllerSubmitIntentAction =\n BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_INTENT>;\n\nexport type BridgeStatusControllerRestartPollingForFailedAttemptsAction =\n BridgeStatusControllerAction<BridgeStatusAction.RESTART_POLLING_FOR_FAILED_ATTEMPTS>;\n\nexport type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction =\n BridgeStatusControllerAction<BridgeStatusAction.GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID>;\n\nexport type BridgeStatusControllerActions =\n | BridgeStatusControllerStartPollingForBridgeTxStatusAction\n | BridgeStatusControllerWipeBridgeStatusAction\n | BridgeStatusControllerResetStateAction\n | BridgeStatusControllerGetStateAction\n | BridgeStatusControllerSubmitTxAction\n | BridgeStatusControllerSubmitIntentAction\n | BridgeStatusControllerRestartPollingForFailedAttemptsAction\n | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;\n\n// Events\nexport type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState\n>;\n\nexport type BridgeStatusControllerEvents =\n BridgeStatusControllerStateChangeEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | BridgeControllerAction<BridgeBackgroundAction.GET_BRIDGE_ERC20_ALLOWANCE>\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | RemoteFeatureFlagControllerGetStateAction;\n\n/**\n * The external events available to the BridgeStatusController.\n */\ntype AllowedEvents =\n | TransactionControllerTransactionFailedEvent\n | TransactionControllerTransactionConfirmedEvent;\n\n/**\n * The messenger for the BridgeStatusController.\n */\nexport type BridgeStatusControllerMessenger = RestrictedMessenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
package/dist/types.d.cts CHANGED
@@ -14,7 +14,7 @@ export declare enum BridgeClientId {
14
14
  EXTENSION = "extension",
15
15
  MOBILE = "mobile"
16
16
  }
17
- export type FetchFunction = (input: RequestInfo | URL, init?: RequestInit) => Promise<any>;
17
+ export type FetchFunction = (input: RequestInfo | URL, init?: RequestInit) => Promise<unknown>;
18
18
  /**
19
19
  * These fields are specific to Solana transactions and can likely be infered from TransactionMeta
20
20
  *
@@ -60,9 +60,17 @@ export type StatusResponse = Infer<typeof StatusResponseSchema>;
60
60
  export type RefuelStatusResponse = object & StatusResponse;
61
61
  export type BridgeHistoryItem = {
62
62
  txMetaId: string;
63
+ originalTransactionId?: string;
63
64
  batchId?: string;
64
65
  quote: Quote;
65
66
  status: StatusResponse;
67
+ /**
68
+ * For intent-based orders (e.g., CoW) that can be partially filled across
69
+ * multiple on-chain settlements, we keep all discovered source tx hashes here.
70
+ * The canonical status.srcChain.txHash continues to hold the latest known hash
71
+ * for backward compatibility with consumers expecting a single hash.
72
+ */
73
+ srcTxHashes?: string[];
66
74
  startTime?: number;
67
75
  estimatedProcessingTimeInSeconds: number;
68
76
  slippagePercentage: number;
@@ -100,6 +108,7 @@ export declare enum BridgeStatusAction {
100
108
  GET_STATE = "getState",
101
109
  RESET_STATE = "resetState",
102
110
  SUBMIT_TX = "submitTx",
111
+ SUBMIT_INTENT = "submitIntent",
103
112
  RESTART_POLLING_FOR_FAILED_ATTEMPTS = "restartPollingForFailedAttempts",
104
113
  GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID = "getBridgeHistoryItemByTxMetaId"
105
114
  }
@@ -171,9 +180,10 @@ export type BridgeStatusControllerStartPollingForBridgeTxStatusAction = BridgeSt
171
180
  export type BridgeStatusControllerWipeBridgeStatusAction = BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;
172
181
  export type BridgeStatusControllerResetStateAction = BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;
173
182
  export type BridgeStatusControllerSubmitTxAction = BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;
183
+ export type BridgeStatusControllerSubmitIntentAction = BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_INTENT>;
174
184
  export type BridgeStatusControllerRestartPollingForFailedAttemptsAction = BridgeStatusControllerAction<BridgeStatusAction.RESTART_POLLING_FOR_FAILED_ATTEMPTS>;
175
185
  export type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction = BridgeStatusControllerAction<BridgeStatusAction.GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID>;
176
- export type BridgeStatusControllerActions = BridgeStatusControllerStartPollingForBridgeTxStatusAction | BridgeStatusControllerWipeBridgeStatusAction | BridgeStatusControllerResetStateAction | BridgeStatusControllerGetStateAction | BridgeStatusControllerSubmitTxAction | BridgeStatusControllerRestartPollingForFailedAttemptsAction | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;
186
+ export type BridgeStatusControllerActions = BridgeStatusControllerStartPollingForBridgeTxStatusAction | BridgeStatusControllerWipeBridgeStatusAction | BridgeStatusControllerResetStateAction | BridgeStatusControllerGetStateAction | BridgeStatusControllerSubmitTxAction | BridgeStatusControllerSubmitIntentAction | BridgeStatusControllerRestartPollingForFailedAttemptsAction | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;
177
187
  export type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<typeof BRIDGE_STATUS_CONTROLLER_NAME, BridgeStatusControllerState>;
178
188
  export type BridgeStatusControllerEvents = BridgeStatusControllerStateChangeEvent;
179
189
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.d.mts CHANGED
@@ -14,7 +14,7 @@ export declare enum BridgeClientId {
14
14
  EXTENSION = "extension",
15
15
  MOBILE = "mobile"
16
16
  }
17
- export type FetchFunction = (input: RequestInfo | URL, init?: RequestInit) => Promise<any>;
17
+ export type FetchFunction = (input: RequestInfo | URL, init?: RequestInit) => Promise<unknown>;
18
18
  /**
19
19
  * These fields are specific to Solana transactions and can likely be infered from TransactionMeta
20
20
  *
@@ -60,9 +60,17 @@ export type StatusResponse = Infer<typeof StatusResponseSchema>;
60
60
  export type RefuelStatusResponse = object & StatusResponse;
61
61
  export type BridgeHistoryItem = {
62
62
  txMetaId: string;
63
+ originalTransactionId?: string;
63
64
  batchId?: string;
64
65
  quote: Quote;
65
66
  status: StatusResponse;
67
+ /**
68
+ * For intent-based orders (e.g., CoW) that can be partially filled across
69
+ * multiple on-chain settlements, we keep all discovered source tx hashes here.
70
+ * The canonical status.srcChain.txHash continues to hold the latest known hash
71
+ * for backward compatibility with consumers expecting a single hash.
72
+ */
73
+ srcTxHashes?: string[];
66
74
  startTime?: number;
67
75
  estimatedProcessingTimeInSeconds: number;
68
76
  slippagePercentage: number;
@@ -100,6 +108,7 @@ export declare enum BridgeStatusAction {
100
108
  GET_STATE = "getState",
101
109
  RESET_STATE = "resetState",
102
110
  SUBMIT_TX = "submitTx",
111
+ SUBMIT_INTENT = "submitIntent",
103
112
  RESTART_POLLING_FOR_FAILED_ATTEMPTS = "restartPollingForFailedAttempts",
104
113
  GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID = "getBridgeHistoryItemByTxMetaId"
105
114
  }
@@ -171,9 +180,10 @@ export type BridgeStatusControllerStartPollingForBridgeTxStatusAction = BridgeSt
171
180
  export type BridgeStatusControllerWipeBridgeStatusAction = BridgeStatusControllerAction<BridgeStatusAction.WIPE_BRIDGE_STATUS>;
172
181
  export type BridgeStatusControllerResetStateAction = BridgeStatusControllerAction<BridgeStatusAction.RESET_STATE>;
173
182
  export type BridgeStatusControllerSubmitTxAction = BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_TX>;
183
+ export type BridgeStatusControllerSubmitIntentAction = BridgeStatusControllerAction<BridgeStatusAction.SUBMIT_INTENT>;
174
184
  export type BridgeStatusControllerRestartPollingForFailedAttemptsAction = BridgeStatusControllerAction<BridgeStatusAction.RESTART_POLLING_FOR_FAILED_ATTEMPTS>;
175
185
  export type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction = BridgeStatusControllerAction<BridgeStatusAction.GET_BRIDGE_HISTORY_ITEM_BY_TX_META_ID>;
176
- export type BridgeStatusControllerActions = BridgeStatusControllerStartPollingForBridgeTxStatusAction | BridgeStatusControllerWipeBridgeStatusAction | BridgeStatusControllerResetStateAction | BridgeStatusControllerGetStateAction | BridgeStatusControllerSubmitTxAction | BridgeStatusControllerRestartPollingForFailedAttemptsAction | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;
186
+ export type BridgeStatusControllerActions = BridgeStatusControllerStartPollingForBridgeTxStatusAction | BridgeStatusControllerWipeBridgeStatusAction | BridgeStatusControllerResetStateAction | BridgeStatusControllerGetStateAction | BridgeStatusControllerSubmitTxAction | BridgeStatusControllerSubmitIntentAction | BridgeStatusControllerRestartPollingForFailedAttemptsAction | BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction;
177
187
  export type BridgeStatusControllerStateChangeEvent = ControllerStateChangeEvent<typeof BRIDGE_STATUS_CONTROLLER_NAME, BridgeStatusControllerState>;
178
188
  export type BridgeStatusControllerEvents = BridgeStatusControllerStateChangeEvent;
179
189
  /**