@metamask/bridge-status-controller 70.0.0 → 70.0.1
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.
- package/CHANGELOG.md +14 -1
- package/dist/bridge-status-controller.cjs +48 -172
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +2 -1
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +2 -1
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.intent.cjs +7 -19
- package/dist/bridge-status-controller.intent.cjs.map +1 -1
- package/dist/bridge-status-controller.intent.d.cts +2 -10
- package/dist/bridge-status-controller.intent.d.cts.map +1 -1
- package/dist/bridge-status-controller.intent.d.mts +2 -10
- package/dist/bridge-status-controller.intent.d.mts.map +1 -1
- package/dist/bridge-status-controller.intent.mjs +7 -19
- package/dist/bridge-status-controller.intent.mjs.map +1 -1
- package/dist/bridge-status-controller.mjs +51 -175
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +10 -4
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +10 -4
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/bridge-status.cjs +17 -1
- package/dist/utils/bridge-status.cjs.map +1 -1
- package/dist/utils/bridge-status.d.cts +8 -2
- package/dist/utils/bridge-status.d.cts.map +1 -1
- package/dist/utils/bridge-status.d.mts +8 -2
- package/dist/utils/bridge-status.d.mts.map +1 -1
- package/dist/utils/bridge-status.mjs +15 -0
- package/dist/utils/bridge-status.mjs.map +1 -1
- package/dist/utils/gas.cjs +1 -58
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +3 -26
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +3 -26
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +0 -55
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/history.cjs +9 -8
- package/dist/utils/history.cjs.map +1 -1
- package/dist/utils/history.d.cts +3 -2
- package/dist/utils/history.d.cts.map +1 -1
- package/dist/utils/history.d.mts +3 -2
- package/dist/utils/history.d.mts.map +1 -1
- package/dist/utils/history.mjs +9 -8
- package/dist/utils/history.mjs.map +1 -1
- package/dist/utils/intent-api.cjs +26 -26
- package/dist/utils/intent-api.cjs.map +1 -1
- package/dist/utils/intent-api.d.cts +7 -2
- package/dist/utils/intent-api.d.cts.map +1 -1
- package/dist/utils/intent-api.d.mts +7 -2
- package/dist/utils/intent-api.d.mts.map +1 -1
- package/dist/utils/intent-api.mjs +24 -25
- package/dist/utils/intent-api.mjs.map +1 -1
- package/dist/utils/snaps.cjs +5 -5
- package/dist/utils/snaps.cjs.map +1 -1
- package/dist/utils/snaps.d.cts +3 -17
- package/dist/utils/snaps.d.cts.map +1 -1
- package/dist/utils/snaps.d.mts +3 -17
- package/dist/utils/snaps.d.mts.map +1 -1
- package/dist/utils/snaps.mjs +6 -6
- package/dist/utils/snaps.mjs.map +1 -1
- package/dist/utils/transaction.cjs +250 -24
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +91 -169
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +91 -169
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +234 -19
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n Trade,\n TronTradeData,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n isNonEvmChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n isCrossChain,\n isTronChainId,\n isEvmTxData,\n isHardwareWallet,\n MetricsActionType,\n MetaMetricsSwapsEventSource,\n isBitcoinTrade,\n isTronTrade,\n PollingStatus,\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 {\n TransactionStatus,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type {\n IsAtomicBatchSupportedResultEntry,\n TransactionController,\n TransactionMeta,\n TransactionParams,\n} from '@metamask/transaction-controller';\nimport { numberToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { IntentManager } from './bridge-status-controller.intent';\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n MAX_ATTEMPTS,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport type { BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport { getAccountByAddress } from './utils/accounts';\nimport { getJwt } from './utils/authentication';\nimport { stopPollingForQuotes, trackMetricsEvent } from './utils/bridge';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n} from './utils/bridge-status';\nimport { getTxGasEstimates } from './utils/gas';\nimport {\n getInitialHistoryItem,\n rekeyHistoryItemInState,\n shouldPollHistoryItem,\n} from './utils/history';\nimport {\n getIntentFromQuote,\n IntentSubmissionParams,\n mapIntentOrderStatusToTransactionStatus,\n} from './utils/intent-api';\nimport { signTypedMessage } from './utils/keyring';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport {\n getNetworkClientIdByChainId,\n getSelectedChainId,\n} from './utils/network';\nimport { handleNonEvmTx } from './utils/snaps';\nimport { getApprovalTraceParams, getTraceParams } from './utils/trace';\nimport {\n findAndUpdateTransactionsInBatch,\n getAddTransactionBatchParams,\n getStatusRequestParams,\n handleApprovalDelay,\n handleMobileHardwareWalletDelay,\n generateActionId,\n waitForTxConfirmation,\n} from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #intentManager: IntentManager;\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionBatchFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#intentManager = new IntentManager({\n messenger: this.messenger,\n customBridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n fetchFn: this.#fetchFn,\n });\n\n // Register action handlers\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitIntent`,\n this.submitIntent.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:restartPollingForFailedAttempts`,\n this.restartPollingForFailedAttempts.bind(this),\n );\n this.messenger.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.messenger.subscribe(\n 'TransactionController:transactionFailed',\n ({ transactionMeta }) => {\n const { type, status, id: txMetaId, actionId } = transactionMeta;\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 // Look up history by txMetaId first, then by actionId (for pre-submission failures)\n let historyKey: string | undefined;\n if (this.state.txHistory[txMetaId]) {\n historyKey = txMetaId;\n } else if (actionId && this.state.txHistory[actionId]) {\n historyKey = actionId;\n }\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n historyKey ?? txMetaId,\n getEVMTxPropertiesFromTransactionMeta(transactionMeta),\n );\n }\n }\n },\n );\n\n this.messenger.subscribe(\n 'TransactionController:transactionConfirmed',\n (transactionMeta) => {\n const { type, id: txMetaId, chainId } = transactionMeta;\n if (type === TransactionType.swap) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n txMetaId,\n );\n }\n if (type === TransactionType.bridge && !isNonEvmChainId(chainId)) {\n this.#startPollingForTxId(txMetaId);\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 = ({\n id: txMetaId,\n actionId,\n }: TransactionMeta): void => {\n // Look up by txMetaId first\n let txHistoryKey: string | undefined = this.state.txHistory[txMetaId]\n ? txMetaId\n : undefined;\n\n // If not found by txMetaId, try looking up by actionId (for pre-submission failures)\n if (!txHistoryKey && actionId && this.state.txHistory[actionId]) {\n txHistoryKey = actionId;\n }\n\n // If still not found, try looking up by approvalTxId\n txHistoryKey ??= Object.keys(this.state.txHistory).find(\n (key) => this.state.txHistory[key].approvalTxId === txMetaId,\n );\n\n if (!txHistoryKey) {\n return;\n }\n const key = txHistoryKey;\n this.update((statusState) => {\n statusState.txHistory[key].status.status = StatusTypes.FAILED;\n });\n };\n\n resetState = (): void => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }): void => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const selectedChainId = getSelectedChainId(this.messenger);\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n /**\n * Resets the attempts counter for a bridge transaction history item\n * and restarts polling if it was previously stopped due to max attempts\n *\n * @param identifier - Object containing either txMetaId or txHash to identify the history item\n * @param identifier.txMetaId - The transaction meta ID\n * @param identifier.txHash - The transaction hash\n */\n restartPollingForFailedAttempts = (identifier: {\n txMetaId?: string;\n txHash?: string;\n }): void => {\n const { txMetaId, txHash } = identifier;\n\n if (!txMetaId && !txHash) {\n throw new Error('Either txMetaId or txHash must be provided');\n }\n\n // Find the history item by txMetaId or txHash\n let targetTxMetaId: string | undefined;\n\n if (txMetaId) {\n // Direct lookup by txMetaId\n if (this.state.txHistory[txMetaId]) {\n targetTxMetaId = txMetaId;\n }\n } else if (txHash) {\n // Search by txHash in status.srcChain.txHash\n targetTxMetaId = Object.keys(this.state.txHistory).find(\n (id) => this.state.txHistory[id].status.srcChain.txHash === txHash,\n );\n }\n\n if (!targetTxMetaId) {\n throw new Error(\n `No bridge transaction history found for ${\n txMetaId ? `txMetaId: ${txMetaId}` : `txHash: ${txHash}`\n }`,\n );\n }\n\n const historyItem = this.state.txHistory[targetTxMetaId];\n\n // Capture attempts count before resetting for metrics\n const previousAttempts = historyItem.attempts?.counter ?? 0;\n\n // Reset the attempts counter\n this.update((state) => {\n if (targetTxMetaId) {\n state.txHistory[targetTxMetaId].attempts = undefined;\n }\n });\n\n // Restart polling if it was stopped and this tx still needs status updates\n if (shouldPollHistoryItem(historyItem)) {\n // Check if polling was stopped (no active polling token)\n const existingPollingToken =\n this.#pollingTokensByTxMetaId[targetTxMetaId];\n\n if (!existingPollingToken) {\n // Restart polling\n this.#startPollingForTxId(targetTxMetaId);\n\n // Track polling manually restarted event\n if (!historyItem.featureId) {\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n const requestParams = getRequestParamFromHistory(historyItem);\n const requestMetadata = getRequestMetadataFromHistory(\n historyItem,\n selectedAccount,\n );\n const { security_warnings: _, ...metadataWithoutWarnings } =\n requestMetadata;\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n targetTxMetaId,\n {\n ...getTradeDataFromHistory(historyItem),\n ...getPriceImpactFromQuote(historyItem.quote),\n ...metadataWithoutWarnings,\n chain_id_source: requestParams.chain_id_source,\n chain_id_destination: requestParams.chain_id_destination,\n token_symbol_source: requestParams.token_symbol_source,\n token_symbol_destination: requestParams.token_symbol_destination,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n polling_status: PollingStatus.ManuallyRestarted,\n retry_attempts: previousAttempts,\n },\n );\n }\n }\n }\n };\n\n /**\n * Gets a bridge history item from the history by its transaction meta ID\n *\n * @param txMetaId - The transaction meta ID to look up\n * @returns The bridge history item if found, undefined otherwise\n */\n getBridgeHistoryItemByTxMetaId = (\n txMetaId: string,\n ): BridgeHistoryItem | undefined => {\n return this.state.txHistory[txMetaId];\n };\n\n /**\n * Restart polling for txs that are not in a final state\n * This is called during initialization\n */\n readonly #restartPollingForIncompleteHistoryItems = (): void => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n // Only poll items with txMetaId (post-submission items)\n .filter(\n (\n historyItem,\n ): historyItem is BridgeHistoryItem & { txMetaId: string } =>\n Boolean(historyItem.txMetaId),\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 // Only restart polling for items that still require status updates\n .filter((historyItem) => {\n return shouldPollHistoryItem(historyItem);\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 ...args: Parameters<typeof getInitialHistoryItem>\n ): void => {\n const { historyKey, txHistoryItem } = getInitialHistoryItem(...args);\n this.update((state) => {\n // Use actionId as key for pre-submission, or txMeta.id for post-submission\n state.txHistory[historyKey] = txHistoryItem;\n });\n };\n\n /**\n * Rekeys a history item from actionId to txMeta.id after successful submission.\n * Also updates txMetaId and srcTxHash which weren't available pre-submission.\n *\n * @param actionId - The actionId used as the temporary key for the history item\n * @param txMeta - The transaction meta from the successful submission\n * @param txMeta.id - The transaction meta id to use as the new key\n * @param txMeta.hash - The transaction hash to set on the history item\n */\n readonly #rekeyHistoryItem = (\n actionId: string,\n txMeta: { id: string; hash?: string },\n ): void => {\n this.update((state) => {\n rekeyHistoryItemInState(state, actionId, txMeta);\n });\n };\n\n readonly #startPollingForTxId = (txId: string): void => {\n // If we are already polling for this tx, stop polling for it before restarting\n const existingPollingToken = this.#pollingTokensByTxMetaId[txId];\n if (existingPollingToken) {\n this.stopPollingByPollingToken(existingPollingToken);\n }\n\n const txHistoryItem = this.state.txHistory[txId];\n if (!txHistoryItem) {\n return;\n }\n if (shouldPollHistoryItem(txHistoryItem)) {\n this.#pollingTokensByTxMetaId[txId] = this.startPolling({\n bridgeTxMetaId: txId,\n });\n }\n };\n\n /**\n * @deprecated For EVM/Solana swap/bridge txs we add tx to history in submitTx()\n * For Solana swap/bridge we start polling in submitTx()\n * For EVM bridge we listen for 'TransactionController:transactionConfirmed' and start polling there\n * No clients currently call this, safe to remove in future versions\n *\n * Adds tx to history and starts polling for the bridge tx status\n *\n * @param txHistoryMeta - The parameters for creating the history item\n */\n startPollingForBridgeTxStatus = (\n txHistoryMeta: StartPollingForBridgeTxStatusArgsSerialized,\n ): void => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n if (!bridgeTxMeta?.id) {\n throw new Error(\n 'Cannot start polling: bridgeTxMeta.id is required for polling',\n );\n }\n\n 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 (\n pollingInput: BridgeStatusPollingInput,\n ): Promise<void> => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n /**\n * Handles the failure to fetch the bridge tx status\n * We eventually stop polling for the tx if we fail too many times\n * Failures (500 errors) can be due to:\n * - The srcTxHash not being available immediately for STX\n * - The srcTxHash being invalid for the chain. This case will never resolve so we stop polling for it to avoid hammering the Bridge API forever.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleFetchFailure = (bridgeTxMetaId: string): void => {\n const { attempts } = this.state.txHistory[bridgeTxMetaId];\n\n const newAttempts = attempts\n ? {\n counter: attempts.counter + 1,\n lastAttemptTime: Date.now(),\n }\n : {\n counter: 1,\n lastAttemptTime: Date.now(),\n };\n\n // If we've failed too many times, stop polling for the tx\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n if (newAttempts.counter >= MAX_ATTEMPTS && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track max polling reached event\n const historyItem = this.state.txHistory[bridgeTxMetaId];\n if (historyItem && !historyItem.featureId) {\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n const requestParams = getRequestParamFromHistory(historyItem);\n const requestMetadata = getRequestMetadataFromHistory(\n historyItem,\n selectedAccount,\n );\n const { security_warnings: _, ...metadataWithoutWarnings } =\n requestMetadata;\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n bridgeTxMetaId,\n {\n ...getTradeDataFromHistory(historyItem),\n ...getPriceImpactFromQuote(historyItem.quote),\n ...metadataWithoutWarnings,\n chain_id_source: requestParams.chain_id_source,\n chain_id_destination: requestParams.chain_id_destination,\n token_symbol_source: requestParams.token_symbol_source,\n token_symbol_destination: requestParams.token_symbol_destination,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n polling_status: PollingStatus.MaxPollingReached,\n retry_attempts: newAttempts.counter,\n },\n );\n }\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): Promise<void> => {\n // 1. Check for history item\n\n const { txHistory } = this.state;\n const historyItem = txHistory[bridgeTxMetaId];\n if (!historyItem) {\n return;\n }\n\n // 2. Check for previous failures\n\n if (shouldSkipFetchDueToFetchFailures(historyItem.attempts)) {\n return;\n }\n\n // 3. Fetch transcation status\n\n try {\n let status: BridgeHistoryItem['status'];\n let validationFailures: string[] = [];\n\n if (historyItem.quote.intent) {\n const intentTxStatus =\n await this.#intentManager.getIntentTransactionStatus(\n bridgeTxMetaId,\n historyItem.quote.srcChainId,\n historyItem.quote.intent.protocol,\n this.#clientId,\n historyItem.status.srcChain.txHash,\n );\n\n if (\n intentTxStatus?.bridgeStatus === null ||\n intentTxStatus?.bridgeStatus === undefined\n ) {\n return;\n }\n status = intentTxStatus.bridgeStatus.status;\n } else {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const srcTxHash = this.#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 response = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n await getJwt(this.messenger),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n status = response.status;\n validationFailures = response.validationFailures;\n }\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\n\n // 4. Create bridge history item\n\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n attempts: undefined,\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n if (historyItem.quote.intent) {\n this.#intentManager.syncTransactionFromIntentStatus(\n bridgeTxMetaId,\n historyItem,\n );\n }\n\n // 5. After effects\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n const isFinalStatus =\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED;\n\n if (isFinalStatus && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Skip tracking events when featureId is set (i.e. PERPS)\n if (historyItem.featureId) {\n return;\n }\n\n if (status.status === StatusTypes.COMPLETE) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n this.messenger.publish(\n 'BridgeStatusController:destinationTransactionCompleted',\n historyItem.quote.destAsset.assetId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (error) {\n console.warn('Failed to fetch bridge tx status', error);\n this.#handleFetchFailure(bridgeTxMetaId);\n }\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.messenger.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 = (\n bridgeTxMetaId: string,\n srcTxHash: string,\n ): void => {\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 ): void => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n readonly #waitForHashAndReturnFinalTxMeta = async (\n hashPromise?: Awaited<\n ReturnType<TransactionController['addTransaction']>\n >['result'],\n ): Promise<TransactionMeta> => {\n const transactionHash = await hashPromise;\n const finalTransactionMeta: TransactionMeta | undefined = this.messenger\n .call('TransactionController:getState')\n .transactions.find((tx: TransactionMeta) => tx.hash === transactionHash);\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 = 3_000,\n }: { timeoutMs?: number; pollMs?: number } = {},\n ): Promise<TransactionMeta> => {\n return await waitForTxConfirmation(this.messenger, txId, {\n timeoutMs,\n pollMs,\n });\n };\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata,\n isBridgeTx: boolean,\n srcChainId: QuoteResponse['quote']['srcChainId'],\n approval?: TxData | TronTradeData,\n resetApproval?: TxData,\n requireApproval?: boolean,\n ): Promise<TransactionMeta | undefined> => {\n if (approval && isEvmTxData(approval)) {\n const approveTx = async (): Promise<TransactionMeta> => {\n await this.#handleUSDTAllowanceReset(resetApproval);\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 handleApprovalDelay(srcChainId);\n return approvalTxMeta;\n };\n\n return await this.#trace(\n getApprovalTraceParams(quoteResponse, false),\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 * @param params.txFee - Optional gas fee parameters from the quote (used when gasIncluded is true)\n * @param params.txFee.maxFeePerGas - The maximum fee per gas from the quote\n * @param params.txFee.maxPriorityFeePerGas - The maximum priority fee per gas from the quote\n * @param params.actionId - Optional actionId for pre-submission history (if not provided, one is generated)\n * @returns The transaction meta\n */\n readonly #handleEvmTransaction = async ({\n transactionType,\n trade,\n requireApproval = false,\n txFee,\n actionId: providedActionId,\n }: {\n transactionType: TransactionType;\n trade: TxData;\n requireApproval?: boolean;\n txFee?: { maxFeePerGas: string; maxPriorityFeePerGas: string };\n actionId?: string;\n }): Promise<TransactionMeta> => {\n // Use provided actionId (for pre-submission history) or generate one\n const actionId = providedActionId ?? generateActionId();\n const selectedAccount = getAccountByAddress(this.messenger, trade.from);\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 = getNetworkClientIdByChainId(\n this.messenger,\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 txFee,\n )),\n };\n\n const { result } = await this.messenger.call(\n 'TransactionController:addTransaction',\n transactionParamsWithMaxGas,\n requestOptions,\n );\n\n return await this.#waitForHashAndReturnFinalTxMeta(result);\n };\n\n readonly #handleUSDTAllowanceReset = async (\n resetApproval?: TxData,\n ): Promise<void> => {\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 txFee?: { maxFeePerGas: string; maxPriorityFeePerGas: string },\n ): Promise<{\n maxFeePerGas: Hex;\n maxPriorityFeePerGas: Hex;\n gas?: Hex;\n }> => {\n const { gas } = transactionParams;\n // If txFee is provided (gasIncluded case), use the quote's gas fees\n // Convert to hex since txFee values from the quote are decimal strings\n if (txFee) {\n return {\n maxFeePerGas: toHex(txFee.maxFeePerGas),\n maxPriorityFeePerGas: toHex(txFee.maxPriorityFeePerGas),\n gas: gas ? toHex(gas) : undefined,\n };\n }\n\n const { gasFeeEstimates } = this.messenger.call(\n 'GasFeeController:getState',\n );\n const { estimates: txGasFeeEstimates } = await this.messenger.call(\n 'TransactionController:estimateGasFee',\n { transactionParams, chainId, networkClientId },\n );\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: gas ? toHex(gas) : undefined,\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 'messenger' | 'estimateGasFeeFn'\n >,\n ): Promise<{\n approvalMeta?: TransactionMeta;\n tradeMeta: TransactionMeta;\n }> => {\n const transactionParams = await getAddTransactionBatchParams({\n messenger: this.messenger,\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 messenger: this.messenger,\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 accountAddress - The address of the account to submit the transaction for\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 * @param quotesReceivedContext - The context for the QuotesReceived event\n * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @returns The transaction meta\n */\n submitTx = async (\n accountAddress: string,\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\n ): Promise<TransactionMeta & Partial<SolanaTransactionMeta>> => {\n stopPollingForQuotes(\n this.messenger,\n quoteResponse.featureId,\n quotesReceivedContext,\n );\n\n const selectedAccount = getAccountByAddress(this.messenger, accountAddress);\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const isHardwareAccount = isHardwareWallet(selectedAccount);\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabledOnClient,\n isHardwareAccount,\n location,\n abTests,\n activeAbTests,\n );\n // Emit Submitted event after submit button is clicked\n !quoteResponse.featureId &&\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n preConfirmationProperties,\n );\n\n let txMeta: TransactionMeta & Partial<SolanaTransactionMeta>;\n let approvalTxId: string | undefined;\n let isDelegatedAccount = false;\n const startTime = Date.now();\n\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n const isTronTx = isTronChainId(quoteResponse.quote.srcChainId);\n\n // Submit non-EVM tx (Solana, BTC, Tron)\n if (isNonEvmChainId(quoteResponse.quote.srcChainId)) {\n // Handle non-EVM approval if present (e.g., Tron token approvals)\n if (quoteResponse.approval && isTronTrade(quoteResponse.approval)) {\n const approvalTxMeta = await this.#trace(\n getApprovalTraceParams(quoteResponse, false),\n async () => {\n try {\n return quoteResponse.approval &&\n isTronTrade(quoteResponse.approval)\n ? await handleNonEvmTx(\n this.messenger,\n quoteResponse.approval,\n quoteResponse,\n selectedAccount,\n )\n : /* c8 ignore start */\n undefined;\n /* c8 ignore end */\n } catch (error) {\n !quoteResponse.featureId &&\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 approvalTxId = approvalTxMeta?.id;\n\n // Add delay after approval similar to EVM flow\n await handleApprovalDelay(quoteResponse.quote.srcChainId);\n }\n\n txMeta = await this.#trace(\n getTraceParams(quoteResponse, false),\n async () => {\n try {\n if (\n !(\n isTronTrade(quoteResponse.trade) ||\n isBitcoinTrade(quoteResponse.trade) ||\n typeof quoteResponse.trade === 'string'\n )\n ) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: trade is not a non-EVM transaction',\n );\n }\n return await handleNonEvmTx(\n this.messenger,\n quoteResponse.trade,\n quoteResponse,\n selectedAccount,\n );\n } catch (error) {\n !quoteResponse.featureId &&\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 } 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 getTraceParams(quoteResponse, isStxEnabledOnClient),\n async () => {\n if (!isEvmTxData(quoteResponse.trade)) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: trade is not an EVM transaction',\n );\n }\n // Check if the account is an EIP-7702 delegated account\n // Delegated accounts only allow 1 in-flight tx, so approve + swap\n // must be batched into a single transaction\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n isDelegatedAccount = await (async (): Promise<boolean> => {\n try {\n const atomicBatchSupport = await this.messenger.call(\n 'TransactionController:isAtomicBatchSupported',\n {\n address: (quoteResponse.trade as TxData)\n .from as `0x${string}`,\n chainIds: [hexChainId],\n },\n );\n return atomicBatchSupport.some(\n (entry: IsAtomicBatchSupportedResultEntry) =>\n entry.isSupported && entry.delegationAddress,\n );\n } catch {\n return false;\n }\n })();\n\n if (\n isStxEnabledOnClient ||\n quoteResponse.quote.gasIncluded7702 ||\n isDelegatedAccount\n ) {\n const { tradeMeta, approvalMeta } =\n await this.#handleEvmTransactionBatch({\n isBridgeTx,\n resetApproval: quoteResponse.resetApproval,\n approval:\n quoteResponse.approval && isEvmTxData(quoteResponse.approval)\n ? quoteResponse.approval\n : undefined,\n trade: quoteResponse.trade,\n quoteResponse,\n requireApproval,\n isDelegatedAccount,\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 quoteResponse,\n isBridgeTx,\n quoteResponse.quote.srcChainId,\n quoteResponse.approval && isEvmTxData(quoteResponse.approval)\n ? quoteResponse.approval\n : undefined,\n quoteResponse.resetApproval,\n requireApproval,\n );\n\n approvalTxId = approvalTxMeta?.id;\n\n await handleMobileHardwareWalletDelay(requireApproval);\n\n // Generate actionId for pre-submission history (non-batch EVM only)\n const actionId = generateActionId().toString();\n\n // Add pre-submission history keyed by actionId\n // This ensures we have quote data available if transaction fails during submission\n this.#addTxToHistory(\n {\n accountAddress: selectedAccount.address,\n statusRequest: {\n ...getStatusRequestParams(quoteResponse),\n srcTxHash: '', // Not available yet\n },\n quoteResponse,\n slippagePercentage: 0,\n isStxEnabled: isStxEnabledOnClient,\n startTime,\n approvalTxId,\n location,\n abTests,\n activeAbTests,\n },\n actionId,\n );\n\n // Pass txFee when gasIncluded is true to use the quote's gas fees\n // instead of re-estimating (which would fail for max native token swaps)\n const tradeTxMeta = await this.#handleEvmTransaction({\n transactionType: isBridgeTx\n ? TransactionType.bridge\n : TransactionType.swap,\n trade: quoteResponse.trade,\n requireApproval,\n txFee: quoteResponse.quote.gasIncluded\n ? quoteResponse.quote.feeData.txFee\n : undefined,\n actionId,\n });\n\n // On success, rekey from actionId to txMeta.id and update srcTxHash\n this.#rekeyHistoryItem(actionId, tradeTxMeta);\n\n return tradeTxMeta;\n },\n );\n }\n\n try {\n // For non-batch EVM transactions, history was already added/rekeyed above\n // Only add history here for non-EVM and batch EVM transactions\n const isNonBatchEvm =\n !isNonEvmChainId(quoteResponse.quote.srcChainId) &&\n !isStxEnabledOnClient &&\n !quoteResponse.quote.gasIncluded7702 &&\n !isDelegatedAccount;\n\n if (!isNonBatchEvm) {\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 location,\n abTests,\n activeAbTests,\n });\n }\n\n if (isNonEvmChainId(quoteResponse.quote.srcChainId)) {\n // Start polling for bridge tx status\n this.#startPollingForTxId(txMeta.id);\n // Track non-EVM Swap completed event\n if (!(isBridgeTx || isTronTx)) {\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 * Submits an intent order and creates a synthetic history entry for UX.\n * The EIP-712 payload is always signed inside this controller via KeyringController.\n *\n * @param params - Object containing intent submission parameters\n * @param params.quoteResponse - Quote carrying intent data\n * @param params.accountAddress - The EOA submitting the order\n * @param params.location - The entry point from which the user initiated the swap or bridge\n * @param params.abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param params.activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @returns A lightweight TransactionMeta-like object for history linking\n */\n submitIntent = async (params: {\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata;\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n }): Promise<Pick<TransactionMeta, 'id' | 'chainId' | 'type' | 'status'>> => {\n const { quoteResponse, accountAddress, location, abTests, activeAbTests } =\n params;\n\n // TODO add metrics context\n stopPollingForQuotes(this.messenger);\n\n // Build pre-confirmation properties for error tracking parity with submitTx\n const account = getAccountByAddress(this.messenger, accountAddress);\n const isHardwareAccount = Boolean(account) && isHardwareWallet(account);\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n false,\n isHardwareAccount,\n location,\n abTests,\n activeAbTests,\n );\n\n try {\n const intent = getIntentFromQuote(quoteResponse);\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 const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n const requireApproval =\n isHardwareAccount && this.#clientId === BridgeClientId.MOBILE;\n // Handle approval silently for better UX in intent flows\n const approvalTxMeta = await this.#handleApprovalTx(\n quoteResponse,\n isBridgeTx,\n quoteResponse.quote.srcChainId,\n quoteResponse.approval,\n quoteResponse.resetApproval,\n requireApproval,\n );\n\n const approvalTxId = approvalTxMeta?.id;\n\n if (approvalTxId) {\n await this.#waitForTxConfirmation(approvalTxId);\n }\n\n const { srcChainId, requestId } = quoteResponse.quote;\n\n const signature = await signTypedMessage({\n messenger: this.messenger,\n accountAddress,\n typedData: intent.typedData,\n });\n\n const submissionParams: IntentSubmissionParams = {\n srcChainId,\n quoteId: requestId,\n signature,\n order: intent.order,\n userAddress: accountAddress,\n aggregatorId: intent.protocol,\n };\n\n const intentOrder = await this.#intentManager.submitIntent(\n submissionParams,\n this.#clientId,\n );\n\n const orderUid = intentOrder.id;\n\n // Determine transaction type: swap for same-chain, bridge for cross-chain\n const transactionType = isBridgeTx\n ? /* c8 ignore start */\n TransactionType.bridge\n : /* c8 ignore end */\n TransactionType.swap;\n\n // Create actual transaction in Transaction Controller first\n const networkClientId = getNetworkClientIdByChainId(\n this.messenger,\n srcChainId,\n );\n\n // This is a synthetic transaction whose purpose is to be able\n // to track the order status via the history\n const intentTransactionParams = {\n chainId: formatChainIdToHex(srcChainId),\n from: accountAddress,\n to:\n intent.settlementContract ??\n '0x9008D19f58AAbd9eD0D60971565AA8510560ab41', // Default 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.messenger.call(\n 'TransactionController:addTransaction',\n intentTransactionParams,\n {\n origin: 'metamask',\n actionId: generateActionId(),\n requireApproval: false,\n isStateOnly: true,\n networkClientId,\n type: transactionType,\n },\n );\n\n const intentTxMeta = txMetaPromise;\n\n // Map intent order status to TransactionController status\n const initialTransactionStatus = mapIntentOrderStatusToTransactionStatus(\n intentOrder.status,\n );\n\n // Update transaction with proper initial status based on intent order\n const statusUpdatedTxMeta = {\n ...intentTxMeta,\n status: initialTransactionStatus,\n };\n\n // Update with actual transaction metadata\n const syntheticMeta = {\n ...statusUpdatedTxMeta,\n isIntentTx: true,\n orderUid,\n };\n\n // Record in bridge history with actual transaction metadata\n try {\n // Use orderId as the history key for intent transactions\n const bridgeHistoryKey = orderUid;\n\n // Create a bridge transaction metadata that includes the original txId\n const bridgeTxMetaForHistory = {\n ...syntheticMeta,\n id: bridgeHistoryKey,\n originalTransactionId: syntheticMeta.id, // Keep original txId for TransactionController updates\n } as TransactionMeta;\n\n const startTime = Date.now();\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 startTime,\n location,\n abTests,\n activeAbTests,\n });\n\n // Start polling using the orderId key to route to intent manager\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 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\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 EventName extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed\n | typeof UnifiedSwapBridgeEventName.PollingStatusUpdated,\n >(\n eventName: EventName,\n txMetaId?: string,\n eventProperties?: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n ): void => {\n // Legacy/new metrics fields are intentionally kept independent during migration.\n const historyAbTests = txMetaId\n ? this.state.txHistory?.[txMetaId]?.abTests\n : undefined;\n const historyActiveAbTests = txMetaId\n ? this.state.txHistory?.[txMetaId]?.activeAbTests\n : undefined;\n const resolvedAbTests = eventProperties?.ab_tests ?? historyAbTests;\n const resolvedActiveAbTests =\n eventProperties?.active_ab_tests ?? historyActiveAbTests;\n\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n location:\n eventProperties?.location ??\n (txMetaId ? this.state.txHistory?.[txMetaId]?.location : undefined) ??\n MetaMetricsSwapsEventSource.MainView,\n ...(eventProperties ?? {}),\n ...(resolvedAbTests &&\n Object.keys(resolvedAbTests).length > 0 && {\n ab_tests: resolvedAbTests,\n }),\n ...(resolvedActiveAbTests &&\n resolvedActiveAbTests.length > 0 && {\n active_ab_tests: resolvedActiveAbTests,\n }),\n };\n\n // This will publish events for PERPS dropped tx failures as well\n if (!txMetaId) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n\n if (!historyItem) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n // Always publish StatusValidationFailed event, regardless of featureId\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: {\n ...baseProperties,\n chain_id_source: requestParamProperties.chain_id_source,\n chain_id_destination: requestParamProperties.chain_id_destination,\n token_address_source: requestParamProperties.token_address_source,\n token_address_destination:\n requestParamProperties.token_address_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n });\n return;\n }\n\n // Skip tracking all other events when featureId is set (i.e. PERPS)\n if (historyItem.featureId) {\n return;\n }\n\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n\n const { transactions } = this.messenger.call(\n 'TransactionController:getState',\n );\n const txMeta = transactions?.find(\n (tx: TransactionMeta) => tx.id === txMetaId,\n );\n const approvalTxMeta = transactions?.find(\n (tx: TransactionMeta) => tx.id === historyItem.approvalTxId,\n );\n\n const requiredEventProperties = {\n ...baseProperties,\n ...requestParamProperties,\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem, txMeta, approvalTxMeta),\n ...getPriceImpactFromQuote(historyItem.quote),\n };\n\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: requiredEventProperties,\n });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bridge-status-controller.mjs","sourceRoot":"","sources":["../src/bridge-status-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StateMetadata } from '@metamask/base-controller';\nimport type {\n QuoteMetadata,\n RequiredEventContextFromClient,\n TxData,\n QuoteResponse,\n Trade,\n TronTradeData,\n} from '@metamask/bridge-controller';\nimport {\n formatChainIdToHex,\n isNonEvmChainId,\n StatusTypes,\n UnifiedSwapBridgeEventName,\n isCrossChain,\n isTronChainId,\n isEvmTxData,\n isHardwareWallet,\n MetricsActionType,\n MetaMetricsSwapsEventSource,\n isBitcoinTrade,\n isTronTrade,\n PollingStatus,\n} from '@metamask/bridge-controller';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport {\n TransactionStatus,\n TransactionType,\n TransactionController,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport { numberToHex } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { IntentManager } from './bridge-status-controller.intent';\nimport {\n BRIDGE_PROD_API_BASE_URL,\n BRIDGE_STATUS_CONTROLLER_NAME,\n DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n MAX_ATTEMPTS,\n REFRESH_INTERVAL_MS,\n} from './constants';\nimport type {\n BridgeStatusControllerState,\n StartPollingForBridgeTxStatusArgsSerialized,\n FetchFunction,\n SolanaTransactionMeta,\n BridgeHistoryItem,\n} from './types';\nimport type { BridgeStatusControllerMessenger } from './types';\nimport { BridgeClientId } from './types';\nimport { getAccountByAddress } from './utils/accounts';\nimport { getJwt } from './utils/authentication';\nimport { stopPollingForQuotes, trackMetricsEvent } from './utils/bridge';\nimport {\n fetchBridgeTxStatus,\n getStatusRequestWithSrcTxHash,\n shouldSkipFetchDueToFetchFailures,\n} from './utils/bridge-status';\nimport {\n getInitialHistoryItem,\n rekeyHistoryItemInState,\n shouldPollHistoryItem,\n} from './utils/history';\nimport {\n getIntentFromQuote,\n IntentSubmissionParams,\n mapIntentOrderStatusToTransactionStatus,\n postSubmitOrder,\n} from './utils/intent-api';\nimport { signTypedMessage } from './utils/keyring';\nimport {\n getFinalizedTxProperties,\n getPriceImpactFromQuote,\n getRequestMetadataFromHistory,\n getRequestParamFromHistory,\n getTradeDataFromHistory,\n getEVMTxPropertiesFromTransactionMeta,\n getTxStatusesFromHistory,\n getPreConfirmationPropertiesFromQuote,\n} from './utils/metrics';\nimport {\n getNetworkClientIdByChainId,\n getSelectedChainId,\n} from './utils/network';\nimport { handleNonEvmTx } from './utils/snaps';\nimport { getApprovalTraceParams, getTraceParams } from './utils/trace';\nimport {\n getAddTransactionBatchParams,\n handleApprovalDelay,\n handleMobileHardwareWalletDelay,\n generateActionId,\n waitForTxConfirmation,\n getTransactionMetaById,\n addTransactionBatch,\n addSyntheticTransaction,\n getTransactions,\n submitEvmTransaction,\n checkIsDelegatedAccount,\n} from './utils/transaction';\n\nconst metadata: StateMetadata<BridgeStatusControllerState> = {\n // We want to persist the bridge status state so that we can show the proper data for the Activity list\n // basically match the behavior of TransactionController\n txHistory: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\n/** The input to start polling for the {@link BridgeStatusController} */\ntype BridgeStatusPollingInput = FetchBridgeTxStatusArgs;\n\ntype SrcTxMetaId = string;\nexport type FetchBridgeTxStatusArgs = {\n bridgeTxMetaId: string;\n};\nexport class BridgeStatusController extends StaticIntervalPollingController<BridgeStatusPollingInput>()<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerState,\n BridgeStatusControllerMessenger\n> {\n #pollingTokensByTxMetaId: Record<SrcTxMetaId, string> = {};\n\n readonly #intentManager: IntentManager;\n\n readonly #clientId: BridgeClientId;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #config: {\n customBridgeApiBaseUrl: string;\n };\n\n readonly #addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n\n readonly #trace: TraceCallback;\n\n constructor({\n messenger,\n state,\n clientId,\n fetchFn,\n addTransactionBatchFn,\n config,\n traceFn,\n }: {\n messenger: BridgeStatusControllerMessenger;\n state?: Partial<BridgeStatusControllerState>;\n clientId: BridgeClientId;\n fetchFn: FetchFunction;\n addTransactionBatchFn: typeof TransactionController.prototype.addTransactionBatch;\n config?: {\n customBridgeApiBaseUrl?: string;\n };\n traceFn?: TraceCallback;\n }) {\n super({\n name: BRIDGE_STATUS_CONTROLLER_NAME,\n metadata,\n messenger,\n // Restore the persisted state\n state: {\n ...DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE,\n ...state,\n },\n });\n\n this.#clientId = clientId;\n this.#fetchFn = fetchFn;\n this.#addTransactionBatchFn = addTransactionBatchFn;\n this.#config = {\n customBridgeApiBaseUrl:\n config?.customBridgeApiBaseUrl ?? BRIDGE_PROD_API_BASE_URL,\n };\n this.#trace = traceFn ?? (((_request, fn) => fn?.()) as TraceCallback);\n this.#intentManager = new IntentManager({\n messenger: this.messenger,\n customBridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n fetchFn: this.#fetchFn,\n });\n\n // Register action handlers\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:startPollingForBridgeTxStatus`,\n this.startPollingForBridgeTxStatus.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:wipeBridgeStatus`,\n this.wipeBridgeStatus.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:resetState`,\n this.resetState.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitTx`,\n this.submitTx.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:submitIntent`,\n this.submitIntent.bind(this),\n );\n this.messenger.registerActionHandler(\n `${BRIDGE_STATUS_CONTROLLER_NAME}:restartPollingForFailedAttempts`,\n this.restartPollingForFailedAttempts.bind(this),\n );\n this.messenger.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.messenger.subscribe(\n 'TransactionController:transactionFailed',\n ({ transactionMeta }) => {\n const { type, status, id: txMetaId, actionId } = transactionMeta;\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 // Look up history by txMetaId first, then by actionId (for pre-submission failures)\n let historyKey: string | undefined;\n if (this.state.txHistory[txMetaId]) {\n historyKey = txMetaId;\n } else if (actionId && this.state.txHistory[actionId]) {\n historyKey = actionId;\n }\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n historyKey ?? txMetaId,\n getEVMTxPropertiesFromTransactionMeta(transactionMeta),\n );\n }\n }\n },\n );\n\n this.messenger.subscribe(\n 'TransactionController:transactionConfirmed',\n (transactionMeta) => {\n const { type, id: txMetaId, chainId } = transactionMeta;\n if (type === TransactionType.swap) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n txMetaId,\n );\n }\n if (type === TransactionType.bridge && !isNonEvmChainId(chainId)) {\n this.#startPollingForTxId(txMetaId);\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 = ({\n id: txMetaId,\n actionId,\n }: TransactionMeta): void => {\n // Look up by txMetaId first\n let txHistoryKey: string | undefined = this.state.txHistory[txMetaId]\n ? txMetaId\n : undefined;\n\n // If not found by txMetaId, try looking up by actionId (for pre-submission failures)\n if (!txHistoryKey && actionId && this.state.txHistory[actionId]) {\n txHistoryKey = actionId;\n }\n\n // If still not found, try looking up by approvalTxId\n txHistoryKey ??= Object.keys(this.state.txHistory).find(\n (key) => this.state.txHistory[key].approvalTxId === txMetaId,\n );\n\n if (!txHistoryKey) {\n return;\n }\n const key = txHistoryKey;\n this.update((statusState) => {\n statusState.txHistory[key].status.status = StatusTypes.FAILED;\n });\n };\n\n resetState = (): void => {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n };\n\n wipeBridgeStatus = ({\n address,\n ignoreNetwork,\n }: {\n address: string;\n ignoreNetwork: boolean;\n }): void => {\n // Wipe all networks for this address\n if (ignoreNetwork) {\n this.update((state) => {\n state.txHistory = DEFAULT_BRIDGE_STATUS_CONTROLLER_STATE.txHistory;\n });\n } else {\n const selectedChainId = getSelectedChainId(this.messenger);\n\n this.#wipeBridgeStatusByChainId(address, selectedChainId);\n }\n };\n\n /**\n * Resets the attempts counter for a bridge transaction history item\n * and restarts polling if it was previously stopped due to max attempts\n *\n * @param identifier - Object containing either txMetaId or txHash to identify the history item\n * @param identifier.txMetaId - The transaction meta ID\n * @param identifier.txHash - The transaction hash\n */\n restartPollingForFailedAttempts = (identifier: {\n txMetaId?: string;\n txHash?: string;\n }): void => {\n const { txMetaId, txHash } = identifier;\n\n if (!txMetaId && !txHash) {\n throw new Error('Either txMetaId or txHash must be provided');\n }\n\n // Find the history item by txMetaId or txHash\n let targetTxMetaId: string | undefined;\n\n if (txMetaId) {\n // Direct lookup by txMetaId\n if (this.state.txHistory[txMetaId]) {\n targetTxMetaId = txMetaId;\n }\n } else if (txHash) {\n // Search by txHash in status.srcChain.txHash\n targetTxMetaId = Object.keys(this.state.txHistory).find(\n (id) => this.state.txHistory[id].status.srcChain.txHash === txHash,\n );\n }\n\n if (!targetTxMetaId) {\n throw new Error(\n `No bridge transaction history found for ${\n txMetaId ? `txMetaId: ${txMetaId}` : `txHash: ${txHash}`\n }`,\n );\n }\n\n const historyItem = this.state.txHistory[targetTxMetaId];\n\n // Capture attempts count before resetting for metrics\n const previousAttempts = historyItem.attempts?.counter ?? 0;\n\n // Reset the attempts counter\n this.update((state) => {\n if (targetTxMetaId) {\n state.txHistory[targetTxMetaId].attempts = undefined;\n }\n });\n\n // Restart polling if it was stopped and this tx still needs status updates\n if (shouldPollHistoryItem(historyItem)) {\n // Check if polling was stopped (no active polling token)\n const existingPollingToken =\n this.#pollingTokensByTxMetaId[targetTxMetaId];\n\n if (!existingPollingToken) {\n // Restart polling\n this.#startPollingForTxId(targetTxMetaId);\n\n // Track polling manually restarted event\n if (!historyItem.featureId) {\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n const requestParams = getRequestParamFromHistory(historyItem);\n const requestMetadata = getRequestMetadataFromHistory(\n historyItem,\n selectedAccount,\n );\n const { security_warnings: _, ...metadataWithoutWarnings } =\n requestMetadata;\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n targetTxMetaId,\n {\n ...getTradeDataFromHistory(historyItem),\n ...getPriceImpactFromQuote(historyItem.quote),\n ...metadataWithoutWarnings,\n chain_id_source: requestParams.chain_id_source,\n chain_id_destination: requestParams.chain_id_destination,\n token_symbol_source: requestParams.token_symbol_source,\n token_symbol_destination: requestParams.token_symbol_destination,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n polling_status: PollingStatus.ManuallyRestarted,\n retry_attempts: previousAttempts,\n },\n );\n }\n }\n }\n };\n\n /**\n * Gets a bridge history item from the history by its transaction meta ID\n *\n * @param txMetaId - The transaction meta ID to look up\n * @returns The bridge history item if found, undefined otherwise\n */\n getBridgeHistoryItemByTxMetaId = (\n txMetaId: string,\n ): BridgeHistoryItem | undefined => {\n return this.state.txHistory[txMetaId];\n };\n\n /**\n * Restart polling for txs that are not in a final state\n * This is called during initialization\n */\n readonly #restartPollingForIncompleteHistoryItems = (): void => {\n // Check for historyItems that do not have a status of complete and restart polling\n const { txHistory } = this.state;\n const historyItems = Object.values(txHistory);\n const incompleteHistoryItems = historyItems\n .filter(\n (historyItem) =>\n historyItem.status.status === StatusTypes.PENDING ||\n historyItem.status.status === StatusTypes.UNKNOWN,\n )\n // Only poll items with txMetaId (post-submission items)\n .filter(\n (\n historyItem,\n ): historyItem is BridgeHistoryItem & { txMetaId: string } =>\n Boolean(historyItem.txMetaId),\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 // Only restart polling for items that still require status updates\n .filter((historyItem) => {\n return shouldPollHistoryItem(historyItem);\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 ...args: Parameters<typeof getInitialHistoryItem>\n ): void => {\n const { historyKey, txHistoryItem } = getInitialHistoryItem(...args);\n this.update((state) => {\n // Use actionId as key for pre-submission, or txMeta.id for post-submission\n state.txHistory[historyKey] = txHistoryItem;\n });\n };\n\n /**\n * Rekeys a history item from actionId to txMeta.id after successful submission.\n * Also updates txMetaId and srcTxHash which weren't available pre-submission.\n *\n * @param actionId - The actionId used as the temporary key for the history item\n * @param txMeta - The transaction meta from the successful submission\n * @param txMeta.id - The transaction meta id to use as the new key\n * @param txMeta.hash - The transaction hash to set on the history item\n */\n readonly #rekeyHistoryItem = (\n actionId: string,\n txMeta: { id: string; hash?: string },\n ): void => {\n this.update((state) => {\n rekeyHistoryItemInState(state, actionId, txMeta);\n });\n };\n\n readonly #startPollingForTxId = (txId: string): void => {\n // If we are already polling for this tx, stop polling for it before restarting\n const existingPollingToken = this.#pollingTokensByTxMetaId[txId];\n if (existingPollingToken) {\n this.stopPollingByPollingToken(existingPollingToken);\n }\n\n const txHistoryItem = this.state.txHistory[txId];\n if (!txHistoryItem) {\n return;\n }\n if (shouldPollHistoryItem(txHistoryItem)) {\n this.#pollingTokensByTxMetaId[txId] = this.startPolling({\n bridgeTxMetaId: txId,\n });\n }\n };\n\n /**\n * @deprecated For EVM/Solana swap/bridge txs we add tx to history in submitTx()\n * For Solana swap/bridge we start polling in submitTx()\n * For EVM bridge we listen for 'TransactionController:transactionConfirmed' and start polling there\n * No clients currently call this, safe to remove in future versions\n *\n * Adds tx to history and starts polling for the bridge tx status\n *\n * @param txHistoryMeta - The parameters for creating the history item\n */\n startPollingForBridgeTxStatus = (\n txHistoryMeta: StartPollingForBridgeTxStatusArgsSerialized,\n ): void => {\n const { bridgeTxMeta } = txHistoryMeta;\n\n if (!bridgeTxMeta?.id) {\n throw new Error(\n 'Cannot start polling: bridgeTxMeta.id is required for polling',\n );\n }\n\n 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 (\n pollingInput: BridgeStatusPollingInput,\n ): Promise<void> => {\n await this.#fetchBridgeTxStatus(pollingInput);\n };\n\n /**\n * Handles the failure to fetch the bridge tx status\n * We eventually stop polling for the tx if we fail too many times\n * Failures (500 errors) can be due to:\n * - The srcTxHash not being available immediately for STX\n * - The srcTxHash being invalid for the chain. This case will never resolve so we stop polling for it to avoid hammering the Bridge API forever.\n *\n * @param bridgeTxMetaId - The txMetaId of the bridge tx\n */\n readonly #handleFetchFailure = (bridgeTxMetaId: string): void => {\n const { attempts } = this.state.txHistory[bridgeTxMetaId];\n\n const newAttempts = attempts\n ? {\n counter: attempts.counter + 1,\n lastAttemptTime: Date.now(),\n }\n : {\n counter: 1,\n lastAttemptTime: Date.now(),\n };\n\n // If we've failed too many times, stop polling for the tx\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n if (newAttempts.counter >= MAX_ATTEMPTS && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Track max polling reached event\n const historyItem = this.state.txHistory[bridgeTxMetaId];\n if (historyItem && !historyItem.featureId) {\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n const requestParams = getRequestParamFromHistory(historyItem);\n const requestMetadata = getRequestMetadataFromHistory(\n historyItem,\n selectedAccount,\n );\n const { security_warnings: _, ...metadataWithoutWarnings } =\n requestMetadata;\n\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.PollingStatusUpdated,\n bridgeTxMetaId,\n {\n ...getTradeDataFromHistory(historyItem),\n ...getPriceImpactFromQuote(historyItem.quote),\n ...metadataWithoutWarnings,\n chain_id_source: requestParams.chain_id_source,\n chain_id_destination: requestParams.chain_id_destination,\n token_symbol_source: requestParams.token_symbol_source,\n token_symbol_destination: requestParams.token_symbol_destination,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n polling_status: PollingStatus.MaxPollingReached,\n retry_attempts: newAttempts.counter,\n },\n );\n }\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): Promise<void> => {\n // 1. Check for history item\n\n const { txHistory } = this.state;\n const historyItem = txHistory[bridgeTxMetaId];\n if (!historyItem) {\n return;\n }\n\n // 2. Check for previous failures\n\n if (shouldSkipFetchDueToFetchFailures(historyItem.attempts)) {\n return;\n }\n\n // 3. Fetch transcation status\n\n try {\n let status: BridgeHistoryItem['status'];\n let validationFailures: string[] = [];\n\n if (historyItem.quote.intent) {\n const intentTxStatus =\n await this.#intentManager.getIntentTransactionStatus(\n bridgeTxMetaId,\n historyItem.quote.srcChainId,\n historyItem.quote.intent.protocol,\n this.#clientId,\n historyItem.status.srcChain.txHash,\n );\n\n if (\n intentTxStatus?.bridgeStatus === null ||\n intentTxStatus?.bridgeStatus === undefined\n ) {\n return;\n }\n status = intentTxStatus.bridgeStatus.status;\n } else {\n // We try here because we receive 500 errors from Bridge API if we try to fetch immediately after submitting the source tx\n // Oddly mostly happens on Optimism, never on Arbitrum. By the 2nd fetch, the Bridge API responds properly.\n // Also srcTxHash may not be available immediately for STX, so we don't want to fetch in those cases\n const srcTxHash = this.#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 response = await fetchBridgeTxStatus(\n statusRequest,\n this.#clientId,\n await getJwt(this.messenger),\n this.#fetchFn,\n this.#config.customBridgeApiBaseUrl,\n );\n status = response.status;\n validationFailures = response.validationFailures;\n }\n\n if (validationFailures.length > 0) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.StatusValidationFailed,\n bridgeTxMetaId,\n {\n failures: validationFailures,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n );\n throw new Error(\n `Bridge status validation failed: ${validationFailures.join(', ')}`,\n );\n }\n\n // 4. Create bridge history item\n\n const newBridgeHistoryItem = {\n ...historyItem,\n status,\n completionTime:\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED\n ? Date.now()\n : undefined, // TODO make this more accurate by looking up dest txHash block time\n attempts: undefined,\n };\n\n // No need to purge these on network change or account change, TransactionController does not purge either.\n // TODO In theory we can skip checking status if it's not the current account/network\n // we need to keep track of the account that this is associated with as well so that we don't show it in Activity list for other accounts\n // First stab at this will not stop polling when you are on a different account\n this.update((state) => {\n state.txHistory[bridgeTxMetaId] = newBridgeHistoryItem;\n });\n\n if (historyItem.quote.intent) {\n this.#intentManager.syncTransactionFromIntentStatus(\n bridgeTxMetaId,\n historyItem,\n );\n }\n\n // 5. After effects\n\n const pollingToken = this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n const isFinalStatus =\n status.status === StatusTypes.COMPLETE ||\n status.status === StatusTypes.FAILED;\n\n if (isFinalStatus && pollingToken) {\n this.stopPollingByPollingToken(pollingToken);\n delete this.#pollingTokensByTxMetaId[bridgeTxMetaId];\n\n // Skip tracking events when featureId is set (i.e. PERPS)\n if (historyItem.featureId) {\n return;\n }\n\n if (status.status === StatusTypes.COMPLETE) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Completed,\n bridgeTxMetaId,\n );\n this.messenger.publish(\n 'BridgeStatusController:destinationTransactionCompleted',\n historyItem.quote.destAsset.assetId,\n );\n }\n if (status.status === StatusTypes.FAILED) {\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Failed,\n bridgeTxMetaId,\n );\n }\n }\n } catch (error) {\n console.warn('Failed to fetch bridge tx status', error);\n this.#handleFetchFailure(bridgeTxMetaId);\n }\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 txMeta = getTransactionMetaById(this.messenger, bridgeTxMetaId);\n return txMeta?.hash;\n };\n\n readonly #updateSrcTxHash = (\n bridgeTxMetaId: string,\n srcTxHash: string,\n ): void => {\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 ): void => {\n const sourceTxMetaIdsToDelete = Object.keys(this.state.txHistory).filter(\n (txMetaId) => {\n const bridgeHistoryItem = this.state.txHistory[txMetaId];\n\n const hexSourceChainId = numberToHex(\n bridgeHistoryItem.quote.srcChainId,\n );\n\n return (\n bridgeHistoryItem.account === address &&\n hexSourceChainId === selectedChainId\n );\n },\n );\n\n sourceTxMetaIdsToDelete.forEach((sourceTxMetaId) => {\n const pollingToken = this.#pollingTokensByTxMetaId[sourceTxMetaId];\n\n if (pollingToken) {\n this.stopPollingByPollingToken(\n this.#pollingTokensByTxMetaId[sourceTxMetaId],\n );\n }\n });\n\n this.update((state) => {\n state.txHistory = sourceTxMetaIdsToDelete.reduce(\n (acc, sourceTxMetaId) => {\n delete acc[sourceTxMetaId];\n return acc;\n },\n state.txHistory,\n );\n });\n };\n\n /**\n * ******************************************************\n * TX SUBMISSION HANDLING\n *******************************************************\n */\n\n readonly #handleApprovalTx = async (\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata,\n isBridgeTx: boolean,\n srcChainId: QuoteResponse['quote']['srcChainId'],\n approval?: TxData | TronTradeData,\n resetApproval?: TxData,\n requireApproval?: boolean,\n ): Promise<TransactionMeta | undefined> => {\n if (approval && isEvmTxData(approval)) {\n const approveTx = async (): Promise<TransactionMeta> => {\n if (resetApproval) {\n await submitEvmTransaction({\n messenger: this.messenger,\n transactionType: TransactionType.bridgeApproval,\n trade: resetApproval,\n });\n }\n\n const approvalTxMeta = await submitEvmTransaction({\n messenger: this.messenger,\n transactionType: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n trade: approval,\n requireApproval,\n });\n\n await handleApprovalDelay(srcChainId);\n return approvalTxMeta;\n };\n\n return await this.#trace(\n getApprovalTraceParams(quoteResponse, false),\n approveTx,\n );\n }\n\n return undefined;\n };\n\n // TODO simplify and make more readable\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 'messenger' | 'estimateGasFeeFn'\n >,\n ): Promise<{\n approvalMeta?: TransactionMeta;\n tradeMeta: TransactionMeta;\n }> => {\n const transactionParams = await getAddTransactionBatchParams({\n messenger: this.messenger,\n ...args,\n });\n\n return await addTransactionBatch(\n this.messenger,\n this.#addTransactionBatchFn,\n transactionParams,\n );\n };\n\n /**\n * Submits a cross-chain swap transaction\n *\n * @param accountAddress - The address of the account to submit the transaction for\n * @param 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 * @param quotesReceivedContext - The context for the QuotesReceived event\n * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @returns The transaction meta\n */\n submitTx = async (\n accountAddress: string,\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata,\n isStxEnabledOnClient: boolean,\n quotesReceivedContext?: RequiredEventContextFromClient[UnifiedSwapBridgeEventName.QuotesReceived],\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\n ): Promise<TransactionMeta & Partial<SolanaTransactionMeta>> => {\n stopPollingForQuotes(\n this.messenger,\n quoteResponse.featureId,\n quotesReceivedContext,\n );\n\n const selectedAccount = getAccountByAddress(this.messenger, accountAddress);\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: undefined multichain account',\n );\n }\n const isHardwareAccount = isHardwareWallet(selectedAccount);\n\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n isStxEnabledOnClient,\n isHardwareAccount,\n location,\n abTests,\n activeAbTests,\n );\n // Emit Submitted event after submit button is clicked\n !quoteResponse.featureId &&\n this.#trackUnifiedSwapBridgeEvent(\n UnifiedSwapBridgeEventName.Submitted,\n undefined,\n preConfirmationProperties,\n );\n\n let txMeta: TransactionMeta & Partial<SolanaTransactionMeta>;\n let approvalTxId: string | undefined;\n let isDelegatedAccount = false;\n const startTime = Date.now();\n\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n const isTronTx = isTronChainId(quoteResponse.quote.srcChainId);\n\n // Submit non-EVM tx (Solana, BTC, Tron)\n if (isNonEvmChainId(quoteResponse.quote.srcChainId)) {\n // Handle non-EVM approval if present (e.g., Tron token approvals)\n if (quoteResponse.approval && isTronTrade(quoteResponse.approval)) {\n const approvalTxMeta = await this.#trace(\n getApprovalTraceParams(quoteResponse, false),\n async () => {\n try {\n return quoteResponse.approval &&\n isTronTrade(quoteResponse.approval)\n ? await handleNonEvmTx(\n this.messenger,\n quoteResponse.approval,\n quoteResponse,\n selectedAccount,\n )\n : /* c8 ignore start */\n undefined;\n /* c8 ignore end */\n } catch (error) {\n !quoteResponse.featureId &&\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 approvalTxId = approvalTxMeta?.id;\n\n // Add delay after approval similar to EVM flow\n await handleApprovalDelay(quoteResponse.quote.srcChainId);\n }\n\n txMeta = await this.#trace(\n getTraceParams(quoteResponse, false),\n async () => {\n try {\n if (\n !(\n isTronTrade(quoteResponse.trade) ||\n isBitcoinTrade(quoteResponse.trade) ||\n typeof quoteResponse.trade === 'string'\n )\n ) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: trade is not a non-EVM transaction',\n );\n }\n return await handleNonEvmTx(\n this.messenger,\n quoteResponse.trade,\n quoteResponse,\n selectedAccount,\n );\n } catch (error) {\n !quoteResponse.featureId &&\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 } 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 getTraceParams(quoteResponse, isStxEnabledOnClient),\n async () => {\n if (!isEvmTxData(quoteResponse.trade)) {\n throw new Error(\n 'Failed to submit cross-chain swap transaction: trade is not an EVM transaction',\n );\n }\n // Check if the account is an EIP-7702 delegated account\n // Delegated accounts only allow 1 in-flight tx, so approve + swap\n // must be batched into a single transaction\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n isDelegatedAccount = await checkIsDelegatedAccount(\n this.messenger,\n quoteResponse.trade.from as `0x`,\n [hexChainId],\n );\n\n if (\n isStxEnabledOnClient ||\n quoteResponse.quote.gasIncluded7702 ||\n isDelegatedAccount\n ) {\n const { tradeMeta, approvalMeta } =\n await this.#handleEvmTransactionBatch({\n isBridgeTx,\n resetApproval: quoteResponse.resetApproval,\n approval:\n quoteResponse.approval && isEvmTxData(quoteResponse.approval)\n ? quoteResponse.approval\n : undefined,\n trade: quoteResponse.trade,\n quoteResponse,\n requireApproval,\n isDelegatedAccount,\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 quoteResponse,\n isBridgeTx,\n quoteResponse.quote.srcChainId,\n quoteResponse.approval && isEvmTxData(quoteResponse.approval)\n ? quoteResponse.approval\n : undefined,\n quoteResponse.resetApproval,\n requireApproval,\n );\n\n approvalTxId = approvalTxMeta?.id;\n\n // Hardware-wallet delay first (Ledger second-prompt spacing), then wait for\n // on-chain approval confirmation so swap gas estimation runs after allowance is set.\n if (requireApproval && approvalTxMeta) {\n await handleMobileHardwareWalletDelay(requireApproval);\n await waitForTxConfirmation(this.messenger, approvalTxMeta.id);\n } else {\n await handleMobileHardwareWalletDelay(requireApproval);\n }\n\n // Generate actionId for pre-submission history (non-batch EVM only)\n const actionId = generateActionId().toString();\n\n // Add pre-submission history keyed by actionId\n // This ensures we have quote data available if transaction fails during submission\n this.#addTxToHistory({\n accountAddress: selectedAccount.address,\n quoteResponse,\n slippagePercentage: 0,\n isStxEnabled: isStxEnabledOnClient,\n startTime,\n approvalTxId,\n location,\n abTests,\n activeAbTests,\n actionId,\n });\n\n // Pass txFee when gasIncluded is true to use the quote's gas fees\n // instead of re-estimating (which would fail for max native token swaps)\n const tradeTxMeta = await submitEvmTransaction({\n messenger: this.messenger,\n transactionType: isBridgeTx\n ? TransactionType.bridge\n : TransactionType.swap,\n trade: quoteResponse.trade,\n requireApproval,\n txFee: quoteResponse.quote.gasIncluded\n ? quoteResponse.quote.feeData.txFee\n : undefined,\n actionId,\n });\n\n // On success, rekey from actionId to txMeta.id and update srcTxHash\n this.#rekeyHistoryItem(actionId, tradeTxMeta);\n\n return tradeTxMeta;\n },\n );\n }\n\n try {\n // For non-batch EVM transactions, history was already added/rekeyed above\n // Only add history here for non-EVM and batch EVM transactions\n const isNonBatchEvm =\n !isNonEvmChainId(quoteResponse.quote.srcChainId) &&\n !isStxEnabledOnClient &&\n !quoteResponse.quote.gasIncluded7702 &&\n !isDelegatedAccount;\n\n if (!isNonBatchEvm) {\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 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 location,\n abTests,\n activeAbTests,\n });\n }\n\n if (isNonEvmChainId(quoteResponse.quote.srcChainId)) {\n // Start polling for bridge tx status\n this.#startPollingForTxId(txMeta.id);\n // Track non-EVM Swap completed event\n if (!(isBridgeTx || isTronTx)) {\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 * Submits an intent order and creates a synthetic history entry for UX.\n * The EIP-712 payload is always signed inside this controller via KeyringController.\n *\n * @param params - Object containing intent submission parameters\n * @param params.quoteResponse - Quote carrying intent data\n * @param params.accountAddress - The EOA submitting the order\n * @param params.location - The entry point from which the user initiated the swap or bridge\n * @param params.abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param params.activeAbTests - New A/B test context for `active_ab_tests` (migration target). Attributes events to specific experiments.\n * @returns A lightweight TransactionMeta-like object for history linking\n */\n submitIntent = async (params: {\n quoteResponse: QuoteResponse<Trade, Trade> & QuoteMetadata;\n accountAddress: string;\n location?: MetaMetricsSwapsEventSource;\n abTests?: Record<string, string>;\n activeAbTests?: { key: string; value: string }[];\n }): Promise<Pick<TransactionMeta, 'id' | 'chainId' | 'type' | 'status'>> => {\n const { quoteResponse, accountAddress, location, abTests, activeAbTests } =\n params;\n\n // TODO add metrics context\n stopPollingForQuotes(this.messenger);\n\n const startTime = Date.now();\n\n // Build pre-confirmation properties for error tracking parity with submitTx\n const account = getAccountByAddress(this.messenger, accountAddress);\n const isHardwareAccount = Boolean(account) && isHardwareWallet(account);\n const preConfirmationProperties = getPreConfirmationPropertiesFromQuote(\n quoteResponse,\n false,\n isHardwareAccount,\n location,\n abTests,\n activeAbTests,\n );\n\n try {\n const intent = getIntentFromQuote(quoteResponse);\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 const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n const requireApproval =\n isHardwareAccount && this.#clientId === BridgeClientId.MOBILE;\n // Handle approval silently for better UX in intent flows\n const approvalTxMeta = await this.#handleApprovalTx(\n quoteResponse,\n isBridgeTx,\n quoteResponse.quote.srcChainId,\n quoteResponse.approval,\n quoteResponse.resetApproval,\n requireApproval,\n );\n\n const approvalTxId = approvalTxMeta?.id;\n\n if (approvalTxId) {\n await waitForTxConfirmation(this.messenger, approvalTxId);\n }\n\n const { srcChainId, requestId } = quoteResponse.quote;\n\n const signature = await signTypedMessage({\n messenger: this.messenger,\n accountAddress,\n typedData: intent.typedData,\n });\n\n const submissionParams: IntentSubmissionParams = {\n srcChainId,\n quoteId: requestId,\n signature,\n order: intent.order,\n userAddress: accountAddress,\n aggregatorId: intent.protocol,\n };\n\n const { id: orderUid, status } = await postSubmitOrder({\n params: submissionParams,\n clientId: this.#clientId,\n jwt: await getJwt(this.messenger),\n fetchFn: this.#fetchFn,\n bridgeApiBaseUrl: this.#config.customBridgeApiBaseUrl,\n });\n\n // Determine transaction type: swap for same-chain, bridge for cross-chain\n const transactionType = isBridgeTx\n ? /* c8 ignore start */\n TransactionType.bridge\n : /* c8 ignore end */\n TransactionType.swap;\n\n // Create actual transaction in Transaction Controller first\n const networkClientId = getNetworkClientIdByChainId(\n this.messenger,\n srcChainId,\n );\n\n // This is a synthetic transaction whose purpose is to be able\n // to track the order status via the history\n const intentTransactionParams = {\n chainId: formatChainIdToHex(srcChainId),\n from: accountAddress,\n to:\n intent.settlementContract ??\n '0x9008D19f58AAbd9eD0D60971565AA8510560ab41', // Default 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 initialTxMeta = await addSyntheticTransaction(\n this.messenger,\n intentTransactionParams,\n {\n requireApproval: false,\n networkClientId,\n type: transactionType,\n },\n );\n\n // Update txHistory with actual transaction metadata\n const syntheticMeta = {\n ...initialTxMeta,\n // Map intent order status to TransactionController status\n status: mapIntentOrderStatusToTransactionStatus(status),\n isIntentTx: true,\n orderUid,\n };\n\n // Record in bridge history with actual transaction metadata\n try {\n // Use orderId as the history key for intent transactions\n const bridgeHistoryKey = orderUid;\n\n // Create a bridge transaction metadata that includes the original txId\n const bridgeTxMetaForHistory = {\n ...syntheticMeta,\n id: bridgeHistoryKey,\n originalTransactionId: syntheticMeta.id, // Keep original txId for TransactionController updates\n };\n\n this.#addTxToHistory({\n accountAddress,\n bridgeTxMeta: bridgeTxMetaForHistory,\n quoteResponse,\n slippagePercentage: 0,\n isStxEnabled: false,\n approvalTxId,\n startTime,\n location,\n abTests,\n activeAbTests,\n });\n\n // Start polling using the orderId key to route to intent manager\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 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\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 EventName extends\n | typeof UnifiedSwapBridgeEventName.Submitted\n | typeof UnifiedSwapBridgeEventName.Failed\n | typeof UnifiedSwapBridgeEventName.Completed\n | typeof UnifiedSwapBridgeEventName.StatusValidationFailed\n | typeof UnifiedSwapBridgeEventName.PollingStatusUpdated,\n >(\n eventName: EventName,\n txMetaId?: string,\n eventProperties?: Pick<\n RequiredEventContextFromClient,\n EventName\n >[EventName],\n ): void => {\n // Legacy/new metrics fields are intentionally kept independent during migration.\n const historyAbTests = txMetaId\n ? this.state.txHistory?.[txMetaId]?.abTests\n : undefined;\n const historyActiveAbTests = txMetaId\n ? this.state.txHistory?.[txMetaId]?.activeAbTests\n : undefined;\n const resolvedAbTests = eventProperties?.ab_tests ?? historyAbTests;\n const resolvedActiveAbTests =\n eventProperties?.active_ab_tests ?? historyActiveAbTests;\n\n const baseProperties = {\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n location:\n eventProperties?.location ??\n (txMetaId ? this.state.txHistory?.[txMetaId]?.location : undefined) ??\n MetaMetricsSwapsEventSource.MainView,\n ...(eventProperties ?? {}),\n ...(resolvedAbTests &&\n Object.keys(resolvedAbTests).length > 0 && {\n ab_tests: resolvedAbTests,\n }),\n ...(resolvedActiveAbTests &&\n resolvedActiveAbTests.length > 0 && {\n active_ab_tests: resolvedActiveAbTests,\n }),\n };\n\n // This will publish events for PERPS dropped tx failures as well\n if (!txMetaId) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const historyItem: BridgeHistoryItem | undefined =\n this.state.txHistory[txMetaId];\n\n if (!historyItem) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: baseProperties,\n });\n return;\n }\n\n const { featureId, approvalTxId, quote } = historyItem;\n const requestParamProperties = getRequestParamFromHistory(historyItem);\n // Always publish StatusValidationFailed event, regardless of featureId\n if (eventName === UnifiedSwapBridgeEventName.StatusValidationFailed) {\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: {\n ...baseProperties,\n chain_id_source: requestParamProperties.chain_id_source,\n chain_id_destination: requestParamProperties.chain_id_destination,\n token_address_source: requestParamProperties.token_address_source,\n token_address_destination:\n requestParamProperties.token_address_destination,\n refresh_count: historyItem.attempts?.counter ?? 0,\n },\n });\n return;\n }\n\n // Skip tracking all other events when featureId is set (i.e. PERPS)\n if (featureId) {\n return;\n }\n\n const selectedAccount = getAccountByAddress(\n this.messenger,\n historyItem.account,\n );\n\n const transactions = getTransactions(this.messenger);\n const txMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === txMetaId,\n );\n const approvalTxMeta = transactions.find(\n (tx: TransactionMeta) => tx.id === approvalTxId,\n );\n\n const requiredEventProperties = {\n ...baseProperties,\n ...requestParamProperties,\n ...getRequestMetadataFromHistory(historyItem, selectedAccount),\n ...getTradeDataFromHistory(historyItem),\n ...getTxStatusesFromHistory(historyItem),\n ...getFinalizedTxProperties(historyItem, txMeta, approvalTxMeta),\n ...getPriceImpactFromQuote(quote),\n };\n\n trackMetricsEvent({\n messenger: this.messenger,\n eventName,\n properties: requiredEventProperties,\n });\n };\n}\n"]}
|
package/dist/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAwCA,+CAA4D;AAG5D,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAyCD,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AA8DD,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,qFAA+D,CAAA;IAC/D,2DAAqC,CAAA;IACrC,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,2CAAqB,CAAA;IACrB,mDAA6B,CAAA;IAC7B,yFAAmE,CAAA;IACnE,uFAAiE,CAAA;AACnE,CAAC,EATW,kBAAkB,kCAAlB,kBAAkB,QAS7B","sourcesContent":["import type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n FeatureId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n MetaMetricsSwapsEventSource,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type { KeyringControllerSignTypedMessageAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { AuthenticationControllerGetBearerTokenAction } from '@metamask/profile-sync-controller/auth';\nimport type { RemoteFeatureFlagControllerGetStateAction } from '@metamask/remote-feature-flag-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n TransactionControllerAddTransactionAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetStateAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\nimport type { StatusResponseSchema } from './utils/validators';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<unknown>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport type StatusResponse = Infer<typeof StatusResponseSchema>;\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type BridgeHistoryItem = {\n txMetaId?: string; // Optional: not available pre-submission or on sync failure\n actionId?: string; // Only for non-batch EVM transactions\n originalTransactionId?: string; // Keep original transaction ID for intent transactions\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 featureId?: FeatureId;\n isStxEnabled?: boolean;\n /**\n * The location/entry point from which the user initiated the swap or bridge.\n * Used to attribute swaps to specific flows (e.g. Trending Explore).\n */\n location?: MetaMetricsSwapsEventSource;\n /**\n * Legacy A/B test metrics context (`ab_tests`) kept for backward compatibility.\n * Keys are test names, values are variant names (e.g. { token_details_layout: 'treatment' }).\n */\n abTests?: Record<string, string>;\n /**\n * New A/B test metrics context (`active_ab_tests`) that replaces `ab_tests`.\n * Kept separate so migration can run both payloads in parallel.\n * This field is an array of test objects.\n */\n activeAbTests?: { key: string; value: string }[];\n /**\n * Attempts tracking for exponential backoff on failed fetches.\n * We track the number of attempts and the last attempt time for each txMetaId that has failed at least once\n */\n attempts?: {\n counter: number;\n lastAttemptTime: number; // timestamp in ms\n };\n};\n\nexport enum BridgeStatusAction {\n StartPollingForBridgeTxStatus = 'StartPollingForBridgeTxStatus',\n WipeBridgeStatus = 'WipeBridgeStatus',\n GetState = 'GetState',\n ResetState = 'ResetState',\n SubmitTx = 'SubmitTx',\n SubmitIntent = 'SubmitIntent',\n RestartPollingForFailedAttempts = 'RestartPollingForFailedAttempts',\n GetBridgeHistoryItemByTxMetaId = 'GetBridgeHistoryItemByTxMetaId',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta?: 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 location?: BridgeHistoryItem['location'];\n // Legacy field for `ab_tests` metrics payload.\n abTests?: BridgeHistoryItem['abTests'];\n // New field for `active_ab_tests` metrics payload.\n activeAbTests?: BridgeHistoryItem['activeAbTests'];\n accountAddress: string;\n};\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 & Partial<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<'startPollingForBridgeTxStatus'>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<'wipeBridgeStatus'>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<'resetState'>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<'submitTx'>;\n\nexport type BridgeStatusControllerSubmitIntentAction =\n BridgeStatusControllerAction<'submitIntent'>;\n\nexport type BridgeStatusControllerRestartPollingForFailedAttemptsAction =\n BridgeStatusControllerAction<'restartPollingForFailedAttempts'>;\n\nexport type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction =\n BridgeStatusControllerAction<'getBridgeHistoryItemByTxMetaId'>;\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/**\n * This event is published when the destination bridge transaction is completed\n * The payload is the asset received on the destination chain\n */\nexport type BridgeStatusControllerDestinationTransactionCompletedEvent = {\n type: 'BridgeStatusController:destinationTransactionCompleted';\n payload: [CaipAssetType];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerDestinationTransactionCompletedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction\n | TransactionControllerAddTransactionAction\n | TransactionControllerEstimateGasFeeAction\n | TransactionControllerIsAtomicBatchSupportedAction\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | RemoteFeatureFlagControllerGetStateAction\n | AuthenticationControllerGetBearerTokenAction\n | KeyringControllerSignTypedMessageAction;\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 = Messenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents\n>;\n"]}
|
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAuCA,+CAA4D;AAG5D,8EAA8E;AAC9E,2BAA2B;AAE3B,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,mCAAiB,CAAA;AACnB,CAAC,EAHW,cAAc,8BAAd,cAAc,QAGzB;AAyCD,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,uBAAW,CAAA;IACX,2BAAe,CAAA;IACf,uCAA2B,CAAA;IAC3B,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,mCAAuB,CAAA;IACvB,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;IACf,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,wBAAR,QAAQ,QAanB;AAiED,IAAY,kBASX;AATD,WAAY,kBAAkB;IAC5B,qFAA+D,CAAA;IAC/D,2DAAqC,CAAA;IACrC,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,2CAAqB,CAAA;IACrB,mDAA6B,CAAA;IAC7B,yFAAmE,CAAA;IACnE,uFAAiE,CAAA;AACnE,CAAC,EATW,kBAAkB,kCAAlB,kBAAkB,QAS7B","sourcesContent":["import type { AccountsControllerGetAccountByAddressAction } from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type {\n BridgeBackgroundAction,\n BridgeControllerAction,\n ChainId,\n FeatureId,\n Quote,\n QuoteMetadata,\n QuoteResponse,\n MetaMetricsSwapsEventSource,\n} from '@metamask/bridge-controller';\nimport type { GetGasFeeState } from '@metamask/gas-fee-controller';\nimport type { KeyringControllerSignTypedMessageAction } from '@metamask/keyring-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport type { AuthenticationControllerGetBearerTokenAction } from '@metamask/profile-sync-controller/auth';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { Infer } from '@metamask/superstruct';\nimport type {\n TransactionControllerAddTransactionAction,\n TransactionControllerEstimateGasFeeAction,\n TransactionControllerGetStateAction,\n TransactionControllerIsAtomicBatchSupportedAction,\n TransactionControllerTransactionConfirmedEvent,\n TransactionControllerTransactionFailedEvent,\n TransactionControllerUpdateTransactionAction,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\n\nimport type { BridgeStatusController } from './bridge-status-controller';\nimport { BRIDGE_STATUS_CONTROLLER_NAME } from './constants';\nimport type { StatusResponseSchema } from './utils/validators';\n\n// All fields need to be types not interfaces, same with their children fields\n// o/w you get a type error\n\nexport enum BridgeClientId {\n EXTENSION = 'extension',\n MOBILE = 'mobile',\n}\n\nexport type FetchFunction = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<unknown>;\n\n/**\n * These fields are specific to Solana transactions and can likely be infered from TransactionMeta\n *\n * @deprecated these should be removed eventually\n */\nexport type SolanaTransactionMeta = {\n isSolana: boolean;\n isBridgeTx: boolean;\n};\n\nexport type StatusRequest = {\n bridgeId: string; // lifi, socket, squid\n srcTxHash?: string; // lifi, socket, squid, might be undefined for STX\n bridge: string; // lifi, socket, squid\n srcChainId: ChainId; // lifi, socket, squid\n destChainId: ChainId; // lifi, socket, squid\n quote?: Quote; // squid\n refuel?: boolean; // lifi\n};\n\nexport type StatusRequestDto = Omit<\n StatusRequest,\n 'quote' | 'srcChainId' | 'destChainId' | 'refuel'\n> & {\n srcChainId: string; // lifi, socket, squid\n destChainId: string; // lifi, socket, squid\n requestId?: string;\n refuel?: string; // lifi\n};\n\nexport type StatusRequestWithSrcTxHash = StatusRequest & {\n srcTxHash: string;\n};\n\nexport enum BridgeId {\n HOP = 'hop',\n CELER = 'celer',\n CELERCIRCLE = 'celercircle',\n CONNEXT = 'connext',\n POLYGON = 'polygon',\n AVALANCHE = 'avalanche',\n MULTICHAIN = 'multichain',\n AXELAR = 'axelar',\n ACROSS = 'across',\n STARGATE = 'stargate',\n RELAY = 'relay',\n MAYAN = 'mayan',\n}\n\nexport type StatusResponse = Infer<typeof StatusResponseSchema>;\n\nexport type RefuelStatusResponse = object & StatusResponse;\n\nexport type BridgeHistoryItem = {\n txMetaId?: string; // Optional: not available pre-submission or on sync failure\n actionId?: string; // Only for non-batch EVM transactions\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string; // Keep original transaction ID for intent transactions\n batchId?: string;\n quote: Quote;\n status: StatusResponse;\n startTime?: number; // timestamp in ms\n estimatedProcessingTimeInSeconds: number;\n slippagePercentage: number;\n completionTime?: number; // timestamp in ms\n pricingData?: {\n /**\n * The actual amount sent by user in non-atomic decimal form\n */\n amountSent: QuoteMetadata['sentAmount']['amount'];\n amountSentInUsd?: QuoteMetadata['sentAmount']['usd'];\n quotedGasInUsd?: QuoteMetadata['gasFee']['effective']['usd'];\n quotedGasAmount?: QuoteMetadata['gasFee']['effective']['amount'];\n quotedReturnInUsd?: QuoteMetadata['toTokenAmount']['usd'];\n quotedRefuelSrcAmountInUsd?: string;\n quotedRefuelDestAmountInUsd?: string;\n };\n initialDestAssetBalance?: string;\n targetContractAddress?: string;\n account: string;\n hasApprovalTx: boolean;\n approvalTxId?: string;\n featureId?: FeatureId;\n isStxEnabled?: boolean;\n /**\n * The location/entry point from which the user initiated the swap or bridge.\n * Used to attribute swaps to specific flows (e.g. Trending Explore).\n */\n location?: MetaMetricsSwapsEventSource;\n /**\n * Legacy A/B test metrics context (`ab_tests`) kept for backward compatibility.\n * Keys are test names, values are variant names (e.g. { token_details_layout: 'treatment' }).\n */\n abTests?: Record<string, string>;\n /**\n * New A/B test metrics context (`active_ab_tests`) that replaces `ab_tests`.\n * Kept separate so migration can run both payloads in parallel.\n * This field is an array of test objects.\n */\n activeAbTests?: { key: string; value: string }[];\n /**\n * Attempts tracking for exponential backoff on failed fetches.\n * We track the number of attempts and the last attempt time for each txMetaId that has failed at least once\n */\n attempts?: {\n counter: number;\n lastAttemptTime: number; // timestamp in ms\n };\n};\n\nexport enum BridgeStatusAction {\n StartPollingForBridgeTxStatus = 'StartPollingForBridgeTxStatus',\n WipeBridgeStatus = 'WipeBridgeStatus',\n GetState = 'GetState',\n ResetState = 'ResetState',\n SubmitTx = 'SubmitTx',\n SubmitIntent = 'SubmitIntent',\n RestartPollingForFailedAttempts = 'RestartPollingForFailedAttempts',\n GetBridgeHistoryItemByTxMetaId = 'GetBridgeHistoryItemByTxMetaId',\n}\n\nexport type TokenAmountValuesSerialized = {\n amount: string;\n valueInCurrency: string | null;\n usd: string | null;\n};\n\nexport type QuoteMetadataSerialized = {\n gasFee: TokenAmountValuesSerialized;\n /**\n * The total network fee for the bridge transaction\n * estimatedGasFees + relayerFees\n */\n totalNetworkFee: TokenAmountValuesSerialized;\n /**\n * The total max network fee for the bridge transaction\n * maxGasFees + relayerFees\n */\n totalMaxNetworkFee: TokenAmountValuesSerialized;\n toTokenAmount: TokenAmountValuesSerialized;\n /**\n * The adjusted return for the bridge transaction\n * destTokenAmount - totalNetworkFee\n */\n adjustedReturn: Omit<TokenAmountValuesSerialized, 'amount'>;\n /**\n * The actual amount sent by user in non-atomic decimal form\n * srcTokenAmount + metabridgeFee\n */\n sentAmount: TokenAmountValuesSerialized;\n swapRate: string; // destTokenAmount / sentAmount\n /**\n * The cost of the bridge transaction\n * sentAmount - adjustedReturn\n */\n cost: Omit<TokenAmountValuesSerialized, 'amount'>;\n};\n\nexport type StartPollingForBridgeTxStatusArgs = {\n bridgeTxMeta?: Pick<TransactionMeta, 'id' | 'hash' | 'batchId'>;\n actionId?: string;\n /**\n * @deprecated the txMeta or orderUid should be used instead\n */\n originalTransactionId?: string;\n quoteResponse: QuoteResponse & QuoteMetadata;\n startTime?: BridgeHistoryItem['startTime'];\n slippagePercentage: BridgeHistoryItem['slippagePercentage'];\n initialDestAssetBalance?: BridgeHistoryItem['initialDestAssetBalance'];\n targetContractAddress?: BridgeHistoryItem['targetContractAddress'];\n approvalTxId?: BridgeHistoryItem['approvalTxId'];\n isStxEnabled?: BridgeHistoryItem['isStxEnabled'];\n location?: BridgeHistoryItem['location'];\n // Legacy field for `ab_tests` metrics payload.\n abTests?: BridgeHistoryItem['abTests'];\n // New field for `active_ab_tests` metrics payload.\n activeAbTests?: BridgeHistoryItem['activeAbTests'];\n accountAddress: string;\n};\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 & Partial<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<'startPollingForBridgeTxStatus'>;\n\nexport type BridgeStatusControllerWipeBridgeStatusAction =\n BridgeStatusControllerAction<'wipeBridgeStatus'>;\n\nexport type BridgeStatusControllerResetStateAction =\n BridgeStatusControllerAction<'resetState'>;\n\nexport type BridgeStatusControllerSubmitTxAction =\n BridgeStatusControllerAction<'submitTx'>;\n\nexport type BridgeStatusControllerSubmitIntentAction =\n BridgeStatusControllerAction<'submitIntent'>;\n\nexport type BridgeStatusControllerRestartPollingForFailedAttemptsAction =\n BridgeStatusControllerAction<'restartPollingForFailedAttempts'>;\n\nexport type BridgeStatusControllerGetBridgeHistoryItemByTxMetaIdAction =\n BridgeStatusControllerAction<'getBridgeHistoryItemByTxMetaId'>;\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/**\n * This event is published when the destination bridge transaction is completed\n * The payload is the asset received on the destination chain\n */\nexport type BridgeStatusControllerDestinationTransactionCompletedEvent = {\n type: 'BridgeStatusController:destinationTransactionCompleted';\n payload: [CaipAssetType];\n};\n\nexport type BridgeStatusControllerEvents =\n | BridgeStatusControllerStateChangeEvent\n | BridgeStatusControllerDestinationTransactionCompletedEvent;\n\n/**\n * The external actions available to the BridgeStatusController.\n */\ntype AllowedActions =\n | NetworkControllerFindNetworkClientIdByChainIdAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction\n | HandleSnapRequest\n | TransactionControllerGetStateAction\n | TransactionControllerUpdateTransactionAction\n | TransactionControllerAddTransactionAction\n | TransactionControllerEstimateGasFeeAction\n | TransactionControllerIsAtomicBatchSupportedAction\n | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT>\n | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES>\n | GetGasFeeState\n | AccountsControllerGetAccountByAddressAction\n | AuthenticationControllerGetBearerTokenAction\n | KeyringControllerSignTypedMessageAction;\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 = Messenger<\n typeof BRIDGE_STATUS_CONTROLLER_NAME,\n BridgeStatusControllerActions | AllowedActions,\n BridgeStatusControllerEvents | AllowedEvents\n>;\n"]}
|
package/dist/types.d.cts
CHANGED
|
@@ -6,7 +6,6 @@ import type { KeyringControllerSignTypedMessageAction } from "@metamask/keyring-
|
|
|
6
6
|
import type { Messenger } from "@metamask/messenger";
|
|
7
7
|
import type { NetworkControllerFindNetworkClientIdByChainIdAction, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction } from "@metamask/network-controller";
|
|
8
8
|
import type { AuthenticationControllerGetBearerTokenAction } from "@metamask/profile-sync-controller/auth";
|
|
9
|
-
import type { RemoteFeatureFlagControllerGetStateAction } from "@metamask/remote-feature-flag-controller";
|
|
10
9
|
import type { HandleSnapRequest } from "@metamask/snaps-controllers";
|
|
11
10
|
import type { Infer } from "@metamask/superstruct";
|
|
12
11
|
import type { TransactionControllerAddTransactionAction, TransactionControllerEstimateGasFeeAction, TransactionControllerGetStateAction, TransactionControllerIsAtomicBatchSupportedAction, TransactionControllerTransactionConfirmedEvent, TransactionControllerTransactionFailedEvent, TransactionControllerUpdateTransactionAction, TransactionMeta } from "@metamask/transaction-controller";
|
|
@@ -65,6 +64,9 @@ export type RefuelStatusResponse = object & StatusResponse;
|
|
|
65
64
|
export type BridgeHistoryItem = {
|
|
66
65
|
txMetaId?: string;
|
|
67
66
|
actionId?: string;
|
|
67
|
+
/**
|
|
68
|
+
* @deprecated the txMeta or orderUid should be used instead
|
|
69
|
+
*/
|
|
68
70
|
originalTransactionId?: string;
|
|
69
71
|
batchId?: string;
|
|
70
72
|
quote: Quote;
|
|
@@ -166,8 +168,12 @@ export type QuoteMetadataSerialized = {
|
|
|
166
168
|
cost: Omit<TokenAmountValuesSerialized, 'amount'>;
|
|
167
169
|
};
|
|
168
170
|
export type StartPollingForBridgeTxStatusArgs = {
|
|
169
|
-
bridgeTxMeta?: TransactionMeta
|
|
170
|
-
|
|
171
|
+
bridgeTxMeta?: Pick<TransactionMeta, 'id' | 'hash' | 'batchId'>;
|
|
172
|
+
actionId?: string;
|
|
173
|
+
/**
|
|
174
|
+
* @deprecated the txMeta or orderUid should be used instead
|
|
175
|
+
*/
|
|
176
|
+
originalTransactionId?: string;
|
|
171
177
|
quoteResponse: QuoteResponse & QuoteMetadata;
|
|
172
178
|
startTime?: BridgeHistoryItem['startTime'];
|
|
173
179
|
slippagePercentage: BridgeHistoryItem['slippagePercentage'];
|
|
@@ -218,7 +224,7 @@ export type BridgeStatusControllerEvents = BridgeStatusControllerStateChangeEven
|
|
|
218
224
|
/**
|
|
219
225
|
* The external actions available to the BridgeStatusController.
|
|
220
226
|
*/
|
|
221
|
-
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | HandleSnapRequest | TransactionControllerGetStateAction | TransactionControllerUpdateTransactionAction | TransactionControllerAddTransactionAction | TransactionControllerEstimateGasFeeAction | TransactionControllerIsAtomicBatchSupportedAction | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES> | GetGasFeeState | AccountsControllerGetAccountByAddressAction |
|
|
227
|
+
type AllowedActions = NetworkControllerFindNetworkClientIdByChainIdAction | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | HandleSnapRequest | TransactionControllerGetStateAction | TransactionControllerUpdateTransactionAction | TransactionControllerAddTransactionAction | TransactionControllerEstimateGasFeeAction | TransactionControllerIsAtomicBatchSupportedAction | BridgeControllerAction<BridgeBackgroundAction.TRACK_METAMETRICS_EVENT> | BridgeControllerAction<BridgeBackgroundAction.STOP_POLLING_FOR_QUOTES> | GetGasFeeState | AccountsControllerGetAccountByAddressAction | AuthenticationControllerGetBearerTokenAction | KeyringControllerSignTypedMessageAction;
|
|
222
228
|
/**
|
|
223
229
|
* The external events available to the BridgeStatusController.
|
|
224
230
|
*/
|
package/dist/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2CAA2C,EAAE,sCAAsC;AACjG,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,aAAa,EACb,2BAA2B,EAC5B,oCAAoC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,qCAAqC;AACnE,OAAO,KAAK,EAAE,uCAAuC,EAAE,qCAAqC;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,mDAAmD,EACnD,2CAA2C,EAC3C,+BAA+B,EAChC,qCAAqC;AACtC,OAAO,KAAK,EAAE,4CAA4C,EAAE,+CAA+C;AAC3G,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|