@metamask-previews/bridge-status-controller 38.1.0-preview-7dfc3145 → 40.1.0-preview-f108d6a
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 +29 -1
 - package/dist/bridge-status-controller.cjs +31 -29
 - package/dist/bridge-status-controller.cjs.map +1 -1
 - package/dist/bridge-status-controller.d.cts +8 -1
 - package/dist/bridge-status-controller.d.cts.map +1 -1
 - package/dist/bridge-status-controller.d.mts +8 -1
 - package/dist/bridge-status-controller.d.mts.map +1 -1
 - package/dist/bridge-status-controller.mjs +32 -30
 - package/dist/bridge-status-controller.mjs.map +1 -1
 - package/dist/types.cjs.map +1 -1
 - package/dist/types.d.cts +1 -0
 - package/dist/types.d.cts.map +1 -1
 - package/dist/types.d.mts +1 -0
 - package/dist/types.d.mts.map +1 -1
 - package/dist/types.mjs.map +1 -1
 - package/dist/utils/metrics.cjs +31 -2
 - package/dist/utils/metrics.cjs.map +1 -1
 - package/dist/utils/metrics.d.cts +27 -0
 - package/dist/utils/metrics.d.cts.map +1 -1
 - package/dist/utils/metrics.d.mts +27 -0
 - package/dist/utils/metrics.d.mts.map +1 -1
 - package/dist/utils/metrics.mjs +29 -1
 - package/dist/utils/metrics.mjs.map +1 -1
 - package/dist/utils/transaction.cjs +34 -7
 - package/dist/utils/transaction.cjs.map +1 -1
 - package/dist/utils/transaction.d.cts +2 -1
 - package/dist/utils/transaction.d.cts.map +1 -1
 - package/dist/utils/transaction.d.mts +2 -1
 - package/dist/utils/transaction.d.mts.map +1 -1
 - package/dist/utils/transaction.mjs +34 -7
 - package/dist/utils/transaction.mjs.map +1 -1
 - package/package.json +8 -8
 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"transaction.cjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n  ChainId,\n  formatChainIdToHex,\n  getEthUsdtResetData,\n  isCrossChain,\n  isEthUsdt,\n  type QuoteMetadata,\n  type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n  BatchTransactionParams,\n  TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n  BridgeStatusControllerMessenger,\n  SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n  messagingSystem: BridgeStatusControllerMessenger,\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  if (\n    quoteResponse.approval &&\n    isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n  ) {\n    const allowance = new BigNumber(\n      await messagingSystem.call(\n        'BridgeController:getBridgeERC20Allowance',\n        quoteResponse.quote.srcAsset.address,\n        hexChainId,\n      ),\n    );\n    const shouldResetApproval =\n      allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n    if (shouldResetApproval) {\n      return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n    }\n  }\n  return undefined;\n};\n\nexport const getStatusRequestParams = (\n  quoteResponse: QuoteResponse<string | TxData>,\n) => {\n  return {\n    bridgeId: quoteResponse.quote.bridgeId,\n    bridge: quoteResponse.quote.bridges[0],\n    srcChainId: quoteResponse.quote.srcChainId,\n    destChainId: quoteResponse.quote.destChainId,\n    quote: quoteResponse.quote,\n    refuel: Boolean(quoteResponse.quote.refuel),\n  };\n};\n\nexport const getTxMetaFields = (\n  quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n    QuoteMetadata,\n  approvalTxId?: string,\n): Omit<\n  TransactionMeta,\n  'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n  return {\n    destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n    sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n    sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n    sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n    sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n    destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n    destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n    destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n    destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n    chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n    approvalTxId,\n    // this is the decimal (non atomic) amount (not USD value) of source token to swap\n    swapTokenValue: quoteResponse.sentAmount.amount,\n  };\n};\n\nexport const handleSolanaTxResponse = (\n  snapResponse:\n    | string\n    | { result: Record<string, string> }\n    | { signature: string },\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n  const selectedAccountAddress = selectedAccount.address;\n  const snapId = selectedAccount.metadata.snap?.id;\n  let hash;\n  // Handle different response formats\n  if (typeof snapResponse === 'string') {\n    hash = snapResponse;\n  } else if (snapResponse && typeof snapResponse === 'object') {\n    // If it's an object with result property, try to get the signature\n    if (\n      typeof snapResponse === 'object' &&\n      'result' in snapResponse &&\n      snapResponse.result &&\n      typeof snapResponse.result === 'object'\n    ) {\n      // Try to extract signature from common locations in response object\n      hash =\n        snapResponse.result.signature ||\n        snapResponse.result.txid ||\n        snapResponse.result.hash ||\n        snapResponse.result.txHash;\n    }\n    if (\n      typeof snapResponse === 'object' &&\n      'signature' in snapResponse &&\n      snapResponse.signature &&\n      typeof snapResponse.signature === 'string'\n    ) {\n      hash = snapResponse.signature;\n    }\n  }\n\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  const isBridgeTx = isCrossChain(\n    quoteResponse.quote.srcChainId,\n    quoteResponse.quote.destChainId,\n  );\n\n  // Create a transaction meta object with bridge-specific fields\n  return {\n    ...getTxMetaFields(quoteResponse),\n    time: Date.now(),\n    id: uuid(),\n    chainId: hexChainId,\n    networkClientId: snapId ?? hexChainId,\n    txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    status: TransactionStatus.submitted,\n    hash, // Add the transaction signature as hash\n    origin: snapId,\n    // Add an explicit bridge flag to mark this as a Solana transaction\n    isSolana: true, // TODO deprecate this and use chainId\n    isBridgeTx,\n  };\n};\n\nexport const handleLineaDelay = async (\n  quoteResponse: QuoteResponse<TxData | string>,\n) => {\n  if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n    const debugLog = createProjectLogger('bridge');\n    debugLog(\n      'Delaying submitting bridge tx to make Linea confirmation more likely',\n    );\n    const waitPromise = new Promise((resolve) =>\n      setTimeout(resolve, LINEA_DELAY_MS),\n    );\n    await waitPromise;\n  }\n};\n\n/**\n * Adds a delay for hardware wallet transactions on mobile to fix an issue\n * where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue.\n *\n * @param requireApproval - Whether the delay should be applied\n */\nexport const handleMobileHardwareWalletDelay = async (\n  requireApproval: boolean,\n) => {\n  if (requireApproval) {\n    const mobileHardwareWalletDelay = new Promise((resolve) =>\n      setTimeout(resolve, 1000),\n    );\n    await mobileHardwareWalletDelay;\n  }\n};\n\nexport const getClientRequest = (\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n  const clientReqId = uuid();\n\n  return {\n    origin: 'metamask',\n    snapId: selectedAccount.metadata.snap?.id as never,\n    handler: 'onClientRequest' as never,\n    request: {\n      id: clientReqId,\n      jsonrpc: '2.0',\n      method: 'signAndSendTransactionWithoutConfirmation',\n      params: {\n        account: { address: selectedAccount.address },\n        transaction: quoteResponse.trade,\n        scope: SolScope.Mainnet,\n      },\n    },\n  };\n};\n\nexport const toBatchTxParams = (\n  disable7702: boolean,\n  { chainId, gasLimit, ...trade }: TxData,\n  {\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    gas,\n  }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n  const params = {\n    ...trade,\n    data: trade.data as `0x${string}`,\n    to: trade.to as `0x${string}`,\n    value: trade.value as `0x${string}`,\n  };\n  if (!disable7702) {\n    return params;\n  }\n\n  return {\n    ...params,\n    gas: toHex(gas ?? 0),\n    maxFeePerGas: toHex(maxFeePerGas ?? 0),\n    maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n  };\n};\n\nexport const getAddTransactionBatchParams = async ({\n  messagingSystem,\n  isBridgeTx,\n  approval,\n  resetApproval,\n  trade,\n  quoteResponse: {\n    quote: {\n      feeData: { txFee },\n      gasIncluded,\n    },\n    sentAmount,\n    toTokenAmount,\n  },\n  requireApproval = false,\n  estimateGasFeeFn,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  isBridgeTx: boolean;\n  trade: TxData;\n  quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n  estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n  approval?: TxData;\n  resetApproval?: TxData;\n  requireApproval?: boolean;\n}) => {\n  const selectedAccount = messagingSystem.call(\n    'AccountsController:getAccountByAddress',\n    trade.from,\n  );\n  if (!selectedAccount) {\n    throw new Error(\n      'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n    );\n  }\n  const hexChainId = formatChainIdToHex(trade.chainId);\n  const networkClientId = messagingSystem.call(\n    'NetworkController:findNetworkClientIdByChainId',\n    hexChainId,\n  );\n\n  // 7702 enables gasless txs for smart accounts, so we disable it for now\n  const disable7702 = true;\n  const transactions: TransactionBatchSingleRequest[] = [];\n  if (resetApproval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      resetApproval,\n      networkClientId,\n      hexChainId,\n      gasIncluded ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, resetApproval, gasFees),\n    });\n  }\n  if (approval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      approval,\n      networkClientId,\n      hexChainId,\n      gasIncluded ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, approval, gasFees),\n    });\n  }\n  const gasFees = await calculateGasFees(\n    disable7702,\n    messagingSystem,\n    estimateGasFeeFn,\n    trade,\n    networkClientId,\n    hexChainId,\n    gasIncluded ? txFee : undefined,\n  );\n  transactions.push({\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    params: toBatchTxParams(disable7702, trade, gasFees),\n    assetsFiatValues: {\n      sending: sentAmount?.valueInCurrency?.toString(),\n      receiving: toTokenAmount?.valueInCurrency?.toString(),\n    },\n  });\n  const transactionParams: Parameters<\n    TransactionController['addTransactionBatch']\n  >[0] = {\n    disable7702,\n    networkClientId,\n    requireApproval,\n    origin: 'metamask',\n    from: trade.from as `0x${string}`,\n    transactions,\n  };\n\n  return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n  messagingSystem,\n  updateTransactionFn,\n  batchId,\n  txDataByType,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n  batchId: string;\n  txDataByType: { [key in TransactionType]?: string };\n}) => {\n  const txs = messagingSystem.call(\n    'TransactionController:getState',\n  ).transactions;\n  const txBatch: {\n    approvalMeta?: TransactionMeta;\n    tradeMeta?: TransactionMeta;\n  } = {\n    approvalMeta: undefined,\n    tradeMeta: undefined,\n  };\n\n  // This is a workaround to update the tx type after the tx is signed\n  // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n  Object.entries(txDataByType).forEach(([txType, txData]) => {\n    const txMeta = txs.find(\n      (tx) => tx.batchId === batchId && tx.txParams.data === txData,\n    );\n    if (txMeta) {\n      const updatedTx = { ...txMeta, type: txType as TransactionType };\n      updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n      txBatch[\n        [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n          txType as TransactionType,\n        )\n          ? 'approvalMeta'\n          : 'tradeMeta'\n      ] = updatedTx;\n    }\n  });\n\n  return txBatch;\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"transaction.cjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n  ChainId,\n  formatChainIdToHex,\n  getEthUsdtResetData,\n  isCrossChain,\n  isEthUsdt,\n  type QuoteMetadata,\n  type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n  BatchTransactionParams,\n  TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n  BridgeStatusControllerMessenger,\n  SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n  messagingSystem: BridgeStatusControllerMessenger,\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  if (\n    quoteResponse.approval &&\n    isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n  ) {\n    const allowance = new BigNumber(\n      await messagingSystem.call(\n        'BridgeController:getBridgeERC20Allowance',\n        quoteResponse.quote.srcAsset.address,\n        hexChainId,\n      ),\n    );\n    const shouldResetApproval =\n      allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n    if (shouldResetApproval) {\n      return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n    }\n  }\n  return undefined;\n};\n\nexport const getStatusRequestParams = (\n  quoteResponse: QuoteResponse<string | TxData>,\n) => {\n  return {\n    bridgeId: quoteResponse.quote.bridgeId,\n    bridge: quoteResponse.quote.bridges[0],\n    srcChainId: quoteResponse.quote.srcChainId,\n    destChainId: quoteResponse.quote.destChainId,\n    quote: quoteResponse.quote,\n    refuel: Boolean(quoteResponse.quote.refuel),\n  };\n};\n\nexport const getTxMetaFields = (\n  quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n    QuoteMetadata,\n  approvalTxId?: string,\n): Omit<\n  TransactionMeta,\n  'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n  return {\n    destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n    sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n    sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n    sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n    sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n    destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n    destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n    destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n    destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n    chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n    approvalTxId,\n    // this is the decimal (non atomic) amount (not USD value) of source token to swap\n    swapTokenValue: quoteResponse.sentAmount.amount,\n  };\n};\n\nexport const handleSolanaTxResponse = (\n  snapResponse:\n    | string\n    | { result: Record<string, string> }\n    | { signature: string },\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n  const selectedAccountAddress = selectedAccount.address;\n  const snapId = selectedAccount.metadata.snap?.id;\n  let hash;\n  // Handle different response formats\n  if (typeof snapResponse === 'string') {\n    hash = snapResponse;\n  } else if (snapResponse && typeof snapResponse === 'object') {\n    // If it's an object with result property, try to get the signature\n    if (\n      typeof snapResponse === 'object' &&\n      'result' in snapResponse &&\n      snapResponse.result &&\n      typeof snapResponse.result === 'object'\n    ) {\n      // Try to extract signature from common locations in response object\n      hash =\n        snapResponse.result.signature ||\n        snapResponse.result.txid ||\n        snapResponse.result.hash ||\n        snapResponse.result.txHash;\n    }\n    if (\n      typeof snapResponse === 'object' &&\n      'signature' in snapResponse &&\n      snapResponse.signature &&\n      typeof snapResponse.signature === 'string'\n    ) {\n      hash = snapResponse.signature;\n    }\n  }\n\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  const isBridgeTx = isCrossChain(\n    quoteResponse.quote.srcChainId,\n    quoteResponse.quote.destChainId,\n  );\n\n  // Create a transaction meta object with bridge-specific fields\n  return {\n    ...getTxMetaFields(quoteResponse),\n    time: Date.now(),\n    id: uuid(),\n    chainId: hexChainId,\n    networkClientId: snapId ?? hexChainId,\n    txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    status: TransactionStatus.submitted,\n    hash, // Add the transaction signature as hash\n    origin: snapId,\n    // Add an explicit bridge flag to mark this as a Solana transaction\n    isSolana: true, // TODO deprecate this and use chainId\n    isBridgeTx,\n  };\n};\n\nexport const handleLineaDelay = async (\n  quoteResponse: QuoteResponse<TxData | string>,\n) => {\n  if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n    const debugLog = createProjectLogger('bridge');\n    debugLog(\n      'Delaying submitting bridge tx to make Linea confirmation more likely',\n    );\n    const waitPromise = new Promise((resolve) =>\n      setTimeout(resolve, LINEA_DELAY_MS),\n    );\n    await waitPromise;\n  }\n};\n\n/**\n * Adds a delay for hardware wallet transactions on mobile to fix an issue\n * where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue.\n *\n * @param requireApproval - Whether the delay should be applied\n */\nexport const handleMobileHardwareWalletDelay = async (\n  requireApproval: boolean,\n) => {\n  if (requireApproval) {\n    const mobileHardwareWalletDelay = new Promise((resolve) =>\n      setTimeout(resolve, 1000),\n    );\n    await mobileHardwareWalletDelay;\n  }\n};\n\nexport const getClientRequest = (\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n  const clientReqId = uuid();\n\n  return {\n    origin: 'metamask',\n    snapId: selectedAccount.metadata.snap?.id as never,\n    handler: 'onClientRequest' as never,\n    request: {\n      id: clientReqId,\n      jsonrpc: '2.0',\n      method: 'signAndSendTransactionWithoutConfirmation',\n      params: {\n        account: { address: selectedAccount.address },\n        transaction: quoteResponse.trade,\n        scope: SolScope.Mainnet,\n      },\n    },\n  };\n};\n\nexport const toBatchTxParams = (\n  disable7702: boolean,\n  { chainId, gasLimit, ...trade }: TxData,\n  {\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    gas,\n  }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n  const params = {\n    ...trade,\n    data: trade.data as `0x${string}`,\n    to: trade.to as `0x${string}`,\n    value: trade.value as `0x${string}`,\n  };\n  if (!disable7702) {\n    return params;\n  }\n\n  return {\n    ...params,\n    gas: toHex(gas ?? 0),\n    maxFeePerGas: toHex(maxFeePerGas ?? 0),\n    maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n  };\n};\n\nexport const getAddTransactionBatchParams = async ({\n  messagingSystem,\n  isBridgeTx,\n  approval,\n  resetApproval,\n  trade,\n  quoteResponse: {\n    quote: {\n      feeData: { txFee },\n      gasIncluded,\n      gasless7702,\n    },\n    sentAmount,\n    toTokenAmount,\n  },\n  requireApproval = false,\n  estimateGasFeeFn,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  isBridgeTx: boolean;\n  trade: TxData;\n  quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n  estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n  approval?: TxData;\n  resetApproval?: TxData;\n  requireApproval?: boolean;\n}) => {\n  const isGasless = gasIncluded || gasless7702;\n  const selectedAccount = messagingSystem.call(\n    'AccountsController:getAccountByAddress',\n    trade.from,\n  );\n  if (!selectedAccount) {\n    throw new Error(\n      'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n    );\n  }\n  const hexChainId = formatChainIdToHex(trade.chainId);\n  const networkClientId = messagingSystem.call(\n    'NetworkController:findNetworkClientIdByChainId',\n    hexChainId,\n  );\n\n  // When an active quote has gasless7702 set to true,\n  // enable 7702 gasless txs for smart accounts\n  const disable7702 = gasless7702 !== true;\n  const transactions: TransactionBatchSingleRequest[] = [];\n  if (resetApproval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      resetApproval,\n      networkClientId,\n      hexChainId,\n      isGasless ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, resetApproval, gasFees),\n    });\n  }\n  if (approval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      approval,\n      networkClientId,\n      hexChainId,\n      isGasless ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, approval, gasFees),\n    });\n  }\n  const gasFees = await calculateGasFees(\n    disable7702,\n    messagingSystem,\n    estimateGasFeeFn,\n    trade,\n    networkClientId,\n    hexChainId,\n    isGasless ? txFee : undefined,\n  );\n  transactions.push({\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    params: toBatchTxParams(disable7702, trade, gasFees),\n    assetsFiatValues: {\n      sending: sentAmount?.valueInCurrency?.toString(),\n      receiving: toTokenAmount?.valueInCurrency?.toString(),\n    },\n  });\n  const transactionParams: Parameters<\n    TransactionController['addTransactionBatch']\n  >[0] = {\n    disable7702,\n    networkClientId,\n    requireApproval,\n    origin: 'metamask',\n    from: trade.from as `0x${string}`,\n    transactions,\n  };\n\n  return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n  messagingSystem,\n  updateTransactionFn,\n  batchId,\n  txDataByType,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n  batchId: string;\n  txDataByType: { [key in TransactionType]?: string };\n}) => {\n  const txs = messagingSystem.call(\n    'TransactionController:getState',\n  ).transactions;\n  const txBatch: {\n    approvalMeta?: TransactionMeta;\n    tradeMeta?: TransactionMeta;\n  } = {\n    approvalMeta: undefined,\n    tradeMeta: undefined,\n  };\n\n  // This is a workaround to update the tx type after the tx is signed\n  // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n  Object.entries(txDataByType).forEach(([txType, txData]) => {\n    // Find transaction by batchId and either matching data or delegation characteristics\n    const txMeta = txs.find((tx) => {\n      if (tx.batchId !== batchId) {\n        return false;\n      }\n\n      // For 7702 delegated transactions, check for delegation-specific fields\n      // These transactions might have authorizationList or delegationAddress\n      const is7702Transaction =\n        (Array.isArray(tx.txParams.authorizationList) &&\n          tx.txParams.authorizationList.length > 0) ||\n        Boolean(tx.delegationAddress);\n\n      if (is7702Transaction) {\n        // For 7702 transactions, we need to match based on transaction type\n        // since the data field might be different (batch execute call)\n        if (\n          txType === TransactionType.swap &&\n          tx.type === TransactionType.batch\n        ) {\n          return true;\n        }\n        // Also check if it's an approval transaction for 7702\n        if (\n          txType === TransactionType.swapApproval &&\n          tx.txParams.data === txData\n        ) {\n          return true;\n        }\n      }\n\n      // Default matching logic for non-7702 transactions\n      return tx.txParams.data === txData;\n    });\n\n    if (txMeta) {\n      const updatedTx = { ...txMeta, type: txType as TransactionType };\n      updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n      txBatch[\n        [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n          txType as TransactionType,\n        )\n          ? 'approvalMeta'\n          : 'tradeMeta'\n      ] = updatedTx;\n    }\n  });\n\n  return txBatch;\n};\n"]}
         
     | 
| 
         @@ -144,6 +144,7 @@ export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<strin 
     | 
|
| 
       144 
144 
     | 
    
         
             
                        destChainId?: number | undefined;
         
     | 
| 
       145 
145 
     | 
    
         
             
                    } | undefined;
         
     | 
| 
       146 
146 
     | 
    
         
             
                    gasIncluded?: boolean | undefined;
         
     | 
| 
      
 147 
     | 
    
         
            +
                    gasless7702?: boolean | undefined;
         
     | 
| 
       147 
148 
     | 
    
         
             
                    priceData?: {
         
     | 
| 
       148 
149 
     | 
    
         
             
                        totalFromAmountUsd?: string | undefined;
         
     | 
| 
       149 
150 
     | 
    
         
             
                        totalToAmountUsd?: string | undefined;
         
     | 
| 
         @@ -197,7 +198,7 @@ export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit 
     | 
|
| 
       197 
198 
     | 
    
         
             
                maxPriorityFeePerGas?: string | undefined;
         
     | 
| 
       198 
199 
     | 
    
         
             
                gas?: string | undefined;
         
     | 
| 
       199 
200 
     | 
    
         
             
            }) => BatchTransactionParams;
         
     | 
| 
       200 
     | 
    
         
            -
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         
     | 
| 
      
 201 
     | 
    
         
            +
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasless7702, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         
     | 
| 
       201 
202 
     | 
    
         
             
                messagingSystem: BridgeStatusControllerMessenger;
         
     | 
| 
       202 
203 
     | 
    
         
             
                isBridgeTx: boolean;
         
     | 
| 
       203 
204 
     | 
    
         
             
                trade: TxData;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"transaction.d.cts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"transaction.d.cts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9C,CAAC;AAEF,eAAO,MAAM,eAAe,kBACX,KAAK,cAAc,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GACvE,aAAa,iBACA,MAAM,KACpB,KACD,eAAe,EACf,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAmB1D,CAAC;AAEF,eAAO,MAAM,sBAAsB,iBAE7B,MAAM,GACN;IAAE,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBACV,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAC/E,eAAe,GAAG,qBAsDpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,cAAc,MAAM,GAAG,MAAM,CAAC,kBAY9C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,oBACzB,OAAO,kBAQzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAmBjF,CAAC;AAEF,eAAO,MAAM,eAAe,gBACb,OAAO,mCACa,MAAM;;;;MAMtC,sBAiBF,CAAC;AAEF,eAAO,MAAM,4BAA4B;;gBAmB3B,OAAO;WACZ,MAAM;mBACE,KAAK,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,aAAa;sBACtD,OAAO,sBAAsB,SAAS,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;iFAwFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEhB,CAAC"}
         
     | 
| 
         @@ -144,6 +144,7 @@ export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<strin 
     | 
|
| 
       144 
144 
     | 
    
         
             
                        destChainId?: number | undefined;
         
     | 
| 
       145 
145 
     | 
    
         
             
                    } | undefined;
         
     | 
| 
       146 
146 
     | 
    
         
             
                    gasIncluded?: boolean | undefined;
         
     | 
| 
      
 147 
     | 
    
         
            +
                    gasless7702?: boolean | undefined;
         
     | 
| 
       147 
148 
     | 
    
         
             
                    priceData?: {
         
     | 
| 
       148 
149 
     | 
    
         
             
                        totalFromAmountUsd?: string | undefined;
         
     | 
| 
       149 
150 
     | 
    
         
             
                        totalToAmountUsd?: string | undefined;
         
     | 
| 
         @@ -197,7 +198,7 @@ export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit 
     | 
|
| 
       197 
198 
     | 
    
         
             
                maxPriorityFeePerGas?: string | undefined;
         
     | 
| 
       198 
199 
     | 
    
         
             
                gas?: string | undefined;
         
     | 
| 
       199 
200 
     | 
    
         
             
            }) => BatchTransactionParams;
         
     | 
| 
       200 
     | 
    
         
            -
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         
     | 
| 
      
 201 
     | 
    
         
            +
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasless7702, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         
     | 
| 
       201 
202 
     | 
    
         
             
                messagingSystem: BridgeStatusControllerMessenger;
         
     | 
| 
       202 
203 
     | 
    
         
             
                isBridgeTx: boolean;
         
     | 
| 
       203 
204 
     | 
    
         
             
                trade: TxData;
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"transaction.d.mts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"transaction.d.mts","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,oCAAoC;AAC1D,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,oCAAoC;AAErC,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACtB,yCAAyC;AAC1C,OAAO,EAEL,eAAe,EACf,KAAK,eAAe,EACrB,yCAAyC;AAQ1C,OAAO,KAAK,EACV,+BAA+B,EAC/B,qBAAqB,EACtB,qBAAiB;AAElB,eAAO,MAAM,gBAAgB,cAAgD,CAAC;AAE9E,eAAO,MAAM,uBAAuB,oEAEnB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa;;;;;;;;cAqB9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,kBAClB,cAAc,MAAM,GAAG,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9C,CAAC;AAEF,eAAO,MAAM,eAAe,kBACX,KAAK,cAAc,MAAM,GAAG,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GACvE,aAAa,iBACA,MAAM,KACpB,KACD,eAAe,EACf,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAmB1D,CAAC;AAEF,eAAO,MAAM,sBAAsB,iBAE7B,MAAM,GACN;IAAE,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBACV,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAC/E,eAAe,GAAG,qBAsDpB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,cAAc,MAAM,GAAG,MAAM,CAAC,kBAY9C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,oBACzB,OAAO,kBAQzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,kBACZ,KAAK,cAAc,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,aAAa,mBACrD,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAmBjF,CAAC;AAEF,eAAO,MAAM,eAAe,gBACb,OAAO,mCACa,MAAM;;;;MAMtC,sBAiBF,CAAC;AAEF,eAAO,MAAM,4BAA4B;;gBAmB3B,OAAO;WACZ,MAAM;mBACE,KAAK,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,aAAa;sBACtD,OAAO,sBAAsB,SAAS,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;iFAwFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEhB,CAAC"}
         
     | 
| 
         @@ -150,18 +150,20 @@ export const toBatchTxParams = (disable7702, { chainId, gasLimit, ...trade }, { 
     | 
|
| 
       150 
150 
     | 
    
         
             
                    maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),
         
     | 
| 
       151 
151 
     | 
    
         
             
                };
         
     | 
| 
       152 
152 
     | 
    
         
             
            };
         
     | 
| 
       153 
     | 
    
         
            -
            export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, sentAmount, toTokenAmount, }, requireApproval = false, estimateGasFeeFn, }) => {
         
     | 
| 
      
 153 
     | 
    
         
            +
            export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasless7702, }, sentAmount, toTokenAmount, }, requireApproval = false, estimateGasFeeFn, }) => {
         
     | 
| 
      
 154 
     | 
    
         
            +
                const isGasless = gasIncluded || gasless7702;
         
     | 
| 
       154 
155 
     | 
    
         
             
                const selectedAccount = messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
         
     | 
| 
       155 
156 
     | 
    
         
             
                if (!selectedAccount) {
         
     | 
| 
       156 
157 
     | 
    
         
             
                    throw new Error('Failed to submit cross-chain swap batch transaction: unknown account in trade data');
         
     | 
| 
       157 
158 
     | 
    
         
             
                }
         
     | 
| 
       158 
159 
     | 
    
         
             
                const hexChainId = formatChainIdToHex(trade.chainId);
         
     | 
| 
       159 
160 
     | 
    
         
             
                const networkClientId = messagingSystem.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
         
     | 
| 
       160 
     | 
    
         
            -
                //  
     | 
| 
       161 
     | 
    
         
            -
                 
     | 
| 
      
 161 
     | 
    
         
            +
                // When an active quote has gasless7702 set to true,
         
     | 
| 
      
 162 
     | 
    
         
            +
                // enable 7702 gasless txs for smart accounts
         
     | 
| 
      
 163 
     | 
    
         
            +
                const disable7702 = gasless7702 !== true;
         
     | 
| 
       162 
164 
     | 
    
         
             
                const transactions = [];
         
     | 
| 
       163 
165 
     | 
    
         
             
                if (resetApproval) {
         
     | 
| 
       164 
     | 
    
         
            -
                    const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId,  
     | 
| 
      
 166 
     | 
    
         
            +
                    const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId, isGasless ? txFee : undefined);
         
     | 
| 
       165 
167 
     | 
    
         
             
                    transactions.push({
         
     | 
| 
       166 
168 
     | 
    
         
             
                        type: isBridgeTx
         
     | 
| 
       167 
169 
     | 
    
         
             
                            ? TransactionType.bridgeApproval
         
     | 
| 
         @@ -170,7 +172,7 @@ export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx 
     | 
|
| 
       170 
172 
     | 
    
         
             
                    });
         
     | 
| 
       171 
173 
     | 
    
         
             
                }
         
     | 
| 
       172 
174 
     | 
    
         
             
                if (approval) {
         
     | 
| 
       173 
     | 
    
         
            -
                    const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, approval, networkClientId, hexChainId,  
     | 
| 
      
 175 
     | 
    
         
            +
                    const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, approval, networkClientId, hexChainId, isGasless ? txFee : undefined);
         
     | 
| 
       174 
176 
     | 
    
         
             
                    transactions.push({
         
     | 
| 
       175 
177 
     | 
    
         
             
                        type: isBridgeTx
         
     | 
| 
       176 
178 
     | 
    
         
             
                            ? TransactionType.bridgeApproval
         
     | 
| 
         @@ -178,7 +180,7 @@ export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx 
     | 
|
| 
       178 
180 
     | 
    
         
             
                        params: toBatchTxParams(disable7702, approval, gasFees),
         
     | 
| 
       179 
181 
     | 
    
         
             
                    });
         
     | 
| 
       180 
182 
     | 
    
         
             
                }
         
     | 
| 
       181 
     | 
    
         
            -
                const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, trade, networkClientId, hexChainId,  
     | 
| 
      
 183 
     | 
    
         
            +
                const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, trade, networkClientId, hexChainId, isGasless ? txFee : undefined);
         
     | 
| 
       182 
184 
     | 
    
         
             
                transactions.push({
         
     | 
| 
       183 
185 
     | 
    
         
             
                    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,
         
     | 
| 
       184 
186 
     | 
    
         
             
                    params: toBatchTxParams(disable7702, trade, gasFees),
         
     | 
| 
         @@ -206,7 +208,32 @@ export const findAndUpdateTransactionsInBatch = ({ messagingSystem, updateTransa 
     | 
|
| 
       206 
208 
     | 
    
         
             
                // This is a workaround to update the tx type after the tx is signed
         
     | 
| 
       207 
209 
     | 
    
         
             
                // TODO: remove this once the tx type for batch txs is preserved in the tx controller
         
     | 
| 
       208 
210 
     | 
    
         
             
                Object.entries(txDataByType).forEach(([txType, txData]) => {
         
     | 
| 
       209 
     | 
    
         
            -
                     
     | 
| 
      
 211 
     | 
    
         
            +
                    // Find transaction by batchId and either matching data or delegation characteristics
         
     | 
| 
      
 212 
     | 
    
         
            +
                    const txMeta = txs.find((tx) => {
         
     | 
| 
      
 213 
     | 
    
         
            +
                        if (tx.batchId !== batchId) {
         
     | 
| 
      
 214 
     | 
    
         
            +
                            return false;
         
     | 
| 
      
 215 
     | 
    
         
            +
                        }
         
     | 
| 
      
 216 
     | 
    
         
            +
                        // For 7702 delegated transactions, check for delegation-specific fields
         
     | 
| 
      
 217 
     | 
    
         
            +
                        // These transactions might have authorizationList or delegationAddress
         
     | 
| 
      
 218 
     | 
    
         
            +
                        const is7702Transaction = (Array.isArray(tx.txParams.authorizationList) &&
         
     | 
| 
      
 219 
     | 
    
         
            +
                            tx.txParams.authorizationList.length > 0) ||
         
     | 
| 
      
 220 
     | 
    
         
            +
                            Boolean(tx.delegationAddress);
         
     | 
| 
      
 221 
     | 
    
         
            +
                        if (is7702Transaction) {
         
     | 
| 
      
 222 
     | 
    
         
            +
                            // For 7702 transactions, we need to match based on transaction type
         
     | 
| 
      
 223 
     | 
    
         
            +
                            // since the data field might be different (batch execute call)
         
     | 
| 
      
 224 
     | 
    
         
            +
                            if (txType === TransactionType.swap &&
         
     | 
| 
      
 225 
     | 
    
         
            +
                                tx.type === TransactionType.batch) {
         
     | 
| 
      
 226 
     | 
    
         
            +
                                return true;
         
     | 
| 
      
 227 
     | 
    
         
            +
                            }
         
     | 
| 
      
 228 
     | 
    
         
            +
                            // Also check if it's an approval transaction for 7702
         
     | 
| 
      
 229 
     | 
    
         
            +
                            if (txType === TransactionType.swapApproval &&
         
     | 
| 
      
 230 
     | 
    
         
            +
                                tx.txParams.data === txData) {
         
     | 
| 
      
 231 
     | 
    
         
            +
                                return true;
         
     | 
| 
      
 232 
     | 
    
         
            +
                            }
         
     | 
| 
      
 233 
     | 
    
         
            +
                        }
         
     | 
| 
      
 234 
     | 
    
         
            +
                        // Default matching logic for non-7702 transactions
         
     | 
| 
      
 235 
     | 
    
         
            +
                        return tx.txParams.data === txData;
         
     | 
| 
      
 236 
     | 
    
         
            +
                    });
         
     | 
| 
       210 
237 
     | 
    
         
             
                    if (txMeta) {
         
     | 
| 
       211 
238 
     | 
    
         
             
                        const updatedTx = { ...txMeta, type: txType };
         
     | 
| 
       212 
239 
     | 
    
         
             
                        updateTransactionFn(updatedTx, `Update tx type to ${txType}`);
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"transaction.mjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n  ChainId,\n  formatChainIdToHex,\n  getEthUsdtResetData,\n  isCrossChain,\n  isEthUsdt,\n  type QuoteMetadata,\n  type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n  BatchTransactionParams,\n  TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n  BridgeStatusControllerMessenger,\n  SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n  messagingSystem: BridgeStatusControllerMessenger,\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  if (\n    quoteResponse.approval &&\n    isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n  ) {\n    const allowance = new BigNumber(\n      await messagingSystem.call(\n        'BridgeController:getBridgeERC20Allowance',\n        quoteResponse.quote.srcAsset.address,\n        hexChainId,\n      ),\n    );\n    const shouldResetApproval =\n      allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n    if (shouldResetApproval) {\n      return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n    }\n  }\n  return undefined;\n};\n\nexport const getStatusRequestParams = (\n  quoteResponse: QuoteResponse<string | TxData>,\n) => {\n  return {\n    bridgeId: quoteResponse.quote.bridgeId,\n    bridge: quoteResponse.quote.bridges[0],\n    srcChainId: quoteResponse.quote.srcChainId,\n    destChainId: quoteResponse.quote.destChainId,\n    quote: quoteResponse.quote,\n    refuel: Boolean(quoteResponse.quote.refuel),\n  };\n};\n\nexport const getTxMetaFields = (\n  quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n    QuoteMetadata,\n  approvalTxId?: string,\n): Omit<\n  TransactionMeta,\n  'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n  return {\n    destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n    sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n    sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n    sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n    sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n    destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n    destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n    destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n    destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n    chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n    approvalTxId,\n    // this is the decimal (non atomic) amount (not USD value) of source token to swap\n    swapTokenValue: quoteResponse.sentAmount.amount,\n  };\n};\n\nexport const handleSolanaTxResponse = (\n  snapResponse:\n    | string\n    | { result: Record<string, string> }\n    | { signature: string },\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n  const selectedAccountAddress = selectedAccount.address;\n  const snapId = selectedAccount.metadata.snap?.id;\n  let hash;\n  // Handle different response formats\n  if (typeof snapResponse === 'string') {\n    hash = snapResponse;\n  } else if (snapResponse && typeof snapResponse === 'object') {\n    // If it's an object with result property, try to get the signature\n    if (\n      typeof snapResponse === 'object' &&\n      'result' in snapResponse &&\n      snapResponse.result &&\n      typeof snapResponse.result === 'object'\n    ) {\n      // Try to extract signature from common locations in response object\n      hash =\n        snapResponse.result.signature ||\n        snapResponse.result.txid ||\n        snapResponse.result.hash ||\n        snapResponse.result.txHash;\n    }\n    if (\n      typeof snapResponse === 'object' &&\n      'signature' in snapResponse &&\n      snapResponse.signature &&\n      typeof snapResponse.signature === 'string'\n    ) {\n      hash = snapResponse.signature;\n    }\n  }\n\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  const isBridgeTx = isCrossChain(\n    quoteResponse.quote.srcChainId,\n    quoteResponse.quote.destChainId,\n  );\n\n  // Create a transaction meta object with bridge-specific fields\n  return {\n    ...getTxMetaFields(quoteResponse),\n    time: Date.now(),\n    id: uuid(),\n    chainId: hexChainId,\n    networkClientId: snapId ?? hexChainId,\n    txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    status: TransactionStatus.submitted,\n    hash, // Add the transaction signature as hash\n    origin: snapId,\n    // Add an explicit bridge flag to mark this as a Solana transaction\n    isSolana: true, // TODO deprecate this and use chainId\n    isBridgeTx,\n  };\n};\n\nexport const handleLineaDelay = async (\n  quoteResponse: QuoteResponse<TxData | string>,\n) => {\n  if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n    const debugLog = createProjectLogger('bridge');\n    debugLog(\n      'Delaying submitting bridge tx to make Linea confirmation more likely',\n    );\n    const waitPromise = new Promise((resolve) =>\n      setTimeout(resolve, LINEA_DELAY_MS),\n    );\n    await waitPromise;\n  }\n};\n\n/**\n * Adds a delay for hardware wallet transactions on mobile to fix an issue\n * where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue.\n *\n * @param requireApproval - Whether the delay should be applied\n */\nexport const handleMobileHardwareWalletDelay = async (\n  requireApproval: boolean,\n) => {\n  if (requireApproval) {\n    const mobileHardwareWalletDelay = new Promise((resolve) =>\n      setTimeout(resolve, 1000),\n    );\n    await mobileHardwareWalletDelay;\n  }\n};\n\nexport const getClientRequest = (\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n  const clientReqId = uuid();\n\n  return {\n    origin: 'metamask',\n    snapId: selectedAccount.metadata.snap?.id as never,\n    handler: 'onClientRequest' as never,\n    request: {\n      id: clientReqId,\n      jsonrpc: '2.0',\n      method: 'signAndSendTransactionWithoutConfirmation',\n      params: {\n        account: { address: selectedAccount.address },\n        transaction: quoteResponse.trade,\n        scope: SolScope.Mainnet,\n      },\n    },\n  };\n};\n\nexport const toBatchTxParams = (\n  disable7702: boolean,\n  { chainId, gasLimit, ...trade }: TxData,\n  {\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    gas,\n  }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n  const params = {\n    ...trade,\n    data: trade.data as `0x${string}`,\n    to: trade.to as `0x${string}`,\n    value: trade.value as `0x${string}`,\n  };\n  if (!disable7702) {\n    return params;\n  }\n\n  return {\n    ...params,\n    gas: toHex(gas ?? 0),\n    maxFeePerGas: toHex(maxFeePerGas ?? 0),\n    maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n  };\n};\n\nexport const getAddTransactionBatchParams = async ({\n  messagingSystem,\n  isBridgeTx,\n  approval,\n  resetApproval,\n  trade,\n  quoteResponse: {\n    quote: {\n      feeData: { txFee },\n      gasIncluded,\n    },\n    sentAmount,\n    toTokenAmount,\n  },\n  requireApproval = false,\n  estimateGasFeeFn,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  isBridgeTx: boolean;\n  trade: TxData;\n  quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n  estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n  approval?: TxData;\n  resetApproval?: TxData;\n  requireApproval?: boolean;\n}) => {\n  const selectedAccount = messagingSystem.call(\n    'AccountsController:getAccountByAddress',\n    trade.from,\n  );\n  if (!selectedAccount) {\n    throw new Error(\n      'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n    );\n  }\n  const hexChainId = formatChainIdToHex(trade.chainId);\n  const networkClientId = messagingSystem.call(\n    'NetworkController:findNetworkClientIdByChainId',\n    hexChainId,\n  );\n\n  // 7702 enables gasless txs for smart accounts, so we disable it for now\n  const disable7702 = true;\n  const transactions: TransactionBatchSingleRequest[] = [];\n  if (resetApproval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      resetApproval,\n      networkClientId,\n      hexChainId,\n      gasIncluded ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, resetApproval, gasFees),\n    });\n  }\n  if (approval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      approval,\n      networkClientId,\n      hexChainId,\n      gasIncluded ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, approval, gasFees),\n    });\n  }\n  const gasFees = await calculateGasFees(\n    disable7702,\n    messagingSystem,\n    estimateGasFeeFn,\n    trade,\n    networkClientId,\n    hexChainId,\n    gasIncluded ? txFee : undefined,\n  );\n  transactions.push({\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    params: toBatchTxParams(disable7702, trade, gasFees),\n    assetsFiatValues: {\n      sending: sentAmount?.valueInCurrency?.toString(),\n      receiving: toTokenAmount?.valueInCurrency?.toString(),\n    },\n  });\n  const transactionParams: Parameters<\n    TransactionController['addTransactionBatch']\n  >[0] = {\n    disable7702,\n    networkClientId,\n    requireApproval,\n    origin: 'metamask',\n    from: trade.from as `0x${string}`,\n    transactions,\n  };\n\n  return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n  messagingSystem,\n  updateTransactionFn,\n  batchId,\n  txDataByType,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n  batchId: string;\n  txDataByType: { [key in TransactionType]?: string };\n}) => {\n  const txs = messagingSystem.call(\n    'TransactionController:getState',\n  ).transactions;\n  const txBatch: {\n    approvalMeta?: TransactionMeta;\n    tradeMeta?: TransactionMeta;\n  } = {\n    approvalMeta: undefined,\n    tradeMeta: undefined,\n  };\n\n  // This is a workaround to update the tx type after the tx is signed\n  // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n  Object.entries(txDataByType).forEach(([txType, txData]) => {\n    const txMeta = txs.find(\n      (tx) => tx.batchId === batchId && tx.txParams.data === txData,\n    );\n    if (txMeta) {\n      const updatedTx = { ...txMeta, type: txType as TransactionType };\n      updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n      txBatch[\n        [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n          txType as TransactionType,\n        )\n          ? 'approvalMeta'\n          : 'tradeMeta'\n      ] = updatedTx;\n    }\n  });\n\n  return txBatch;\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"transaction.mjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n  ChainId,\n  formatChainIdToHex,\n  getEthUsdtResetData,\n  isCrossChain,\n  isEthUsdt,\n  type QuoteMetadata,\n  type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n  BatchTransactionParams,\n  TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n  BridgeStatusControllerMessenger,\n  SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n  messagingSystem: BridgeStatusControllerMessenger,\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  if (\n    quoteResponse.approval &&\n    isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n  ) {\n    const allowance = new BigNumber(\n      await messagingSystem.call(\n        'BridgeController:getBridgeERC20Allowance',\n        quoteResponse.quote.srcAsset.address,\n        hexChainId,\n      ),\n    );\n    const shouldResetApproval =\n      allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n    if (shouldResetApproval) {\n      return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n    }\n  }\n  return undefined;\n};\n\nexport const getStatusRequestParams = (\n  quoteResponse: QuoteResponse<string | TxData>,\n) => {\n  return {\n    bridgeId: quoteResponse.quote.bridgeId,\n    bridge: quoteResponse.quote.bridges[0],\n    srcChainId: quoteResponse.quote.srcChainId,\n    destChainId: quoteResponse.quote.destChainId,\n    quote: quoteResponse.quote,\n    refuel: Boolean(quoteResponse.quote.refuel),\n  };\n};\n\nexport const getTxMetaFields = (\n  quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n    QuoteMetadata,\n  approvalTxId?: string,\n): Omit<\n  TransactionMeta,\n  'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n  return {\n    destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n    sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n    sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n    sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n    sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n    destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n    destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n    destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n    destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n    chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n    approvalTxId,\n    // this is the decimal (non atomic) amount (not USD value) of source token to swap\n    swapTokenValue: quoteResponse.sentAmount.amount,\n  };\n};\n\nexport const handleSolanaTxResponse = (\n  snapResponse:\n    | string\n    | { result: Record<string, string> }\n    | { signature: string },\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n  const selectedAccountAddress = selectedAccount.address;\n  const snapId = selectedAccount.metadata.snap?.id;\n  let hash;\n  // Handle different response formats\n  if (typeof snapResponse === 'string') {\n    hash = snapResponse;\n  } else if (snapResponse && typeof snapResponse === 'object') {\n    // If it's an object with result property, try to get the signature\n    if (\n      typeof snapResponse === 'object' &&\n      'result' in snapResponse &&\n      snapResponse.result &&\n      typeof snapResponse.result === 'object'\n    ) {\n      // Try to extract signature from common locations in response object\n      hash =\n        snapResponse.result.signature ||\n        snapResponse.result.txid ||\n        snapResponse.result.hash ||\n        snapResponse.result.txHash;\n    }\n    if (\n      typeof snapResponse === 'object' &&\n      'signature' in snapResponse &&\n      snapResponse.signature &&\n      typeof snapResponse.signature === 'string'\n    ) {\n      hash = snapResponse.signature;\n    }\n  }\n\n  const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n  const isBridgeTx = isCrossChain(\n    quoteResponse.quote.srcChainId,\n    quoteResponse.quote.destChainId,\n  );\n\n  // Create a transaction meta object with bridge-specific fields\n  return {\n    ...getTxMetaFields(quoteResponse),\n    time: Date.now(),\n    id: uuid(),\n    chainId: hexChainId,\n    networkClientId: snapId ?? hexChainId,\n    txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    status: TransactionStatus.submitted,\n    hash, // Add the transaction signature as hash\n    origin: snapId,\n    // Add an explicit bridge flag to mark this as a Solana transaction\n    isSolana: true, // TODO deprecate this and use chainId\n    isBridgeTx,\n  };\n};\n\nexport const handleLineaDelay = async (\n  quoteResponse: QuoteResponse<TxData | string>,\n) => {\n  if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n    const debugLog = createProjectLogger('bridge');\n    debugLog(\n      'Delaying submitting bridge tx to make Linea confirmation more likely',\n    );\n    const waitPromise = new Promise((resolve) =>\n      setTimeout(resolve, LINEA_DELAY_MS),\n    );\n    await waitPromise;\n  }\n};\n\n/**\n * Adds a delay for hardware wallet transactions on mobile to fix an issue\n * where the Ledger does not get prompted for the 2nd approval.\n * Extension does not have this issue.\n *\n * @param requireApproval - Whether the delay should be applied\n */\nexport const handleMobileHardwareWalletDelay = async (\n  requireApproval: boolean,\n) => {\n  if (requireApproval) {\n    const mobileHardwareWalletDelay = new Promise((resolve) =>\n      setTimeout(resolve, 1000),\n    );\n    await mobileHardwareWalletDelay;\n  }\n};\n\nexport const getClientRequest = (\n  quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n  selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n  const clientReqId = uuid();\n\n  return {\n    origin: 'metamask',\n    snapId: selectedAccount.metadata.snap?.id as never,\n    handler: 'onClientRequest' as never,\n    request: {\n      id: clientReqId,\n      jsonrpc: '2.0',\n      method: 'signAndSendTransactionWithoutConfirmation',\n      params: {\n        account: { address: selectedAccount.address },\n        transaction: quoteResponse.trade,\n        scope: SolScope.Mainnet,\n      },\n    },\n  };\n};\n\nexport const toBatchTxParams = (\n  disable7702: boolean,\n  { chainId, gasLimit, ...trade }: TxData,\n  {\n    maxFeePerGas,\n    maxPriorityFeePerGas,\n    gas,\n  }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n  const params = {\n    ...trade,\n    data: trade.data as `0x${string}`,\n    to: trade.to as `0x${string}`,\n    value: trade.value as `0x${string}`,\n  };\n  if (!disable7702) {\n    return params;\n  }\n\n  return {\n    ...params,\n    gas: toHex(gas ?? 0),\n    maxFeePerGas: toHex(maxFeePerGas ?? 0),\n    maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n  };\n};\n\nexport const getAddTransactionBatchParams = async ({\n  messagingSystem,\n  isBridgeTx,\n  approval,\n  resetApproval,\n  trade,\n  quoteResponse: {\n    quote: {\n      feeData: { txFee },\n      gasIncluded,\n      gasless7702,\n    },\n    sentAmount,\n    toTokenAmount,\n  },\n  requireApproval = false,\n  estimateGasFeeFn,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  isBridgeTx: boolean;\n  trade: TxData;\n  quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n  estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n  approval?: TxData;\n  resetApproval?: TxData;\n  requireApproval?: boolean;\n}) => {\n  const isGasless = gasIncluded || gasless7702;\n  const selectedAccount = messagingSystem.call(\n    'AccountsController:getAccountByAddress',\n    trade.from,\n  );\n  if (!selectedAccount) {\n    throw new Error(\n      'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n    );\n  }\n  const hexChainId = formatChainIdToHex(trade.chainId);\n  const networkClientId = messagingSystem.call(\n    'NetworkController:findNetworkClientIdByChainId',\n    hexChainId,\n  );\n\n  // When an active quote has gasless7702 set to true,\n  // enable 7702 gasless txs for smart accounts\n  const disable7702 = gasless7702 !== true;\n  const transactions: TransactionBatchSingleRequest[] = [];\n  if (resetApproval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      resetApproval,\n      networkClientId,\n      hexChainId,\n      isGasless ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, resetApproval, gasFees),\n    });\n  }\n  if (approval) {\n    const gasFees = await calculateGasFees(\n      disable7702,\n      messagingSystem,\n      estimateGasFeeFn,\n      approval,\n      networkClientId,\n      hexChainId,\n      isGasless ? txFee : undefined,\n    );\n    transactions.push({\n      type: isBridgeTx\n        ? TransactionType.bridgeApproval\n        : TransactionType.swapApproval,\n      params: toBatchTxParams(disable7702, approval, gasFees),\n    });\n  }\n  const gasFees = await calculateGasFees(\n    disable7702,\n    messagingSystem,\n    estimateGasFeeFn,\n    trade,\n    networkClientId,\n    hexChainId,\n    isGasless ? txFee : undefined,\n  );\n  transactions.push({\n    type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n    params: toBatchTxParams(disable7702, trade, gasFees),\n    assetsFiatValues: {\n      sending: sentAmount?.valueInCurrency?.toString(),\n      receiving: toTokenAmount?.valueInCurrency?.toString(),\n    },\n  });\n  const transactionParams: Parameters<\n    TransactionController['addTransactionBatch']\n  >[0] = {\n    disable7702,\n    networkClientId,\n    requireApproval,\n    origin: 'metamask',\n    from: trade.from as `0x${string}`,\n    transactions,\n  };\n\n  return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n  messagingSystem,\n  updateTransactionFn,\n  batchId,\n  txDataByType,\n}: {\n  messagingSystem: BridgeStatusControllerMessenger;\n  updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n  batchId: string;\n  txDataByType: { [key in TransactionType]?: string };\n}) => {\n  const txs = messagingSystem.call(\n    'TransactionController:getState',\n  ).transactions;\n  const txBatch: {\n    approvalMeta?: TransactionMeta;\n    tradeMeta?: TransactionMeta;\n  } = {\n    approvalMeta: undefined,\n    tradeMeta: undefined,\n  };\n\n  // This is a workaround to update the tx type after the tx is signed\n  // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n  Object.entries(txDataByType).forEach(([txType, txData]) => {\n    // Find transaction by batchId and either matching data or delegation characteristics\n    const txMeta = txs.find((tx) => {\n      if (tx.batchId !== batchId) {\n        return false;\n      }\n\n      // For 7702 delegated transactions, check for delegation-specific fields\n      // These transactions might have authorizationList or delegationAddress\n      const is7702Transaction =\n        (Array.isArray(tx.txParams.authorizationList) &&\n          tx.txParams.authorizationList.length > 0) ||\n        Boolean(tx.delegationAddress);\n\n      if (is7702Transaction) {\n        // For 7702 transactions, we need to match based on transaction type\n        // since the data field might be different (batch execute call)\n        if (\n          txType === TransactionType.swap &&\n          tx.type === TransactionType.batch\n        ) {\n          return true;\n        }\n        // Also check if it's an approval transaction for 7702\n        if (\n          txType === TransactionType.swapApproval &&\n          tx.txParams.data === txData\n        ) {\n          return true;\n        }\n      }\n\n      // Default matching logic for non-7702 transactions\n      return tx.txParams.data === txData;\n    });\n\n    if (txMeta) {\n      const updatedTx = { ...txMeta, type: txType as TransactionType };\n      updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n      txBatch[\n        [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n          txType as TransactionType,\n        )\n          ? 'approvalMeta'\n          : 'tradeMeta'\n      ] = updatedTx;\n    }\n  });\n\n  return txBatch;\n};\n"]}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@metamask-previews/bridge-status-controller",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": " 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "40.1.0-preview-f108d6a",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "description": "Manages bridge-related status fetching functionality for MetaMask",
         
     | 
| 
       5 
5 
     | 
    
         
             
              "keywords": [
         
     | 
| 
       6 
6 
     | 
    
         
             
                "MetaMask",
         
     | 
| 
         @@ -47,7 +47,7 @@ 
     | 
|
| 
       47 
47 
     | 
    
         
             
                "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
         
     | 
| 
       48 
48 
     | 
    
         
             
              },
         
     | 
| 
       49 
49 
     | 
    
         
             
              "dependencies": {
         
     | 
| 
       50 
     | 
    
         
            -
                "@metamask/base-controller": "^8. 
     | 
| 
      
 50 
     | 
    
         
            +
                "@metamask/base-controller": "^8.2.0",
         
     | 
| 
       51 
51 
     | 
    
         
             
                "@metamask/controller-utils": "^11.12.0",
         
     | 
| 
       52 
52 
     | 
    
         
             
                "@metamask/keyring-api": "^20.1.0",
         
     | 
| 
       53 
53 
     | 
    
         
             
                "@metamask/polling-controller": "^14.0.0",
         
     | 
| 
         @@ -57,13 +57,13 @@ 
     | 
|
| 
       57 
57 
     | 
    
         
             
                "uuid": "^8.3.2"
         
     | 
| 
       58 
58 
     | 
    
         
             
              },
         
     | 
| 
       59 
59 
     | 
    
         
             
              "devDependencies": {
         
     | 
| 
       60 
     | 
    
         
            -
                "@metamask/accounts-controller": "^ 
     | 
| 
      
 60 
     | 
    
         
            +
                "@metamask/accounts-controller": "^33.0.0",
         
     | 
| 
       61 
61 
     | 
    
         
             
                "@metamask/auto-changelog": "^3.4.4",
         
     | 
| 
       62 
     | 
    
         
            -
                "@metamask/bridge-controller": "^ 
     | 
| 
      
 62 
     | 
    
         
            +
                "@metamask/bridge-controller": "^41.1.0",
         
     | 
| 
       63 
63 
     | 
    
         
             
                "@metamask/gas-fee-controller": "^24.0.0",
         
     | 
| 
       64 
64 
     | 
    
         
             
                "@metamask/network-controller": "^24.1.0",
         
     | 
| 
       65 
65 
     | 
    
         
             
                "@metamask/snaps-controllers": "^14.0.1",
         
     | 
| 
       66 
     | 
    
         
            -
                "@metamask/transaction-controller": "^ 
     | 
| 
      
 66 
     | 
    
         
            +
                "@metamask/transaction-controller": "^60.0.0",
         
     | 
| 
       67 
67 
     | 
    
         
             
                "@types/jest": "^27.4.1",
         
     | 
| 
       68 
68 
     | 
    
         
             
                "deepmerge": "^4.2.2",
         
     | 
| 
       69 
69 
     | 
    
         
             
                "jest": "^27.5.1",
         
     | 
| 
         @@ -76,12 +76,12 @@ 
     | 
|
| 
       76 
76 
     | 
    
         
             
                "typescript": "~5.2.2"
         
     | 
| 
       77 
77 
     | 
    
         
             
              },
         
     | 
| 
       78 
78 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       79 
     | 
    
         
            -
                "@metamask/accounts-controller": "^ 
     | 
| 
       80 
     | 
    
         
            -
                "@metamask/bridge-controller": "^ 
     | 
| 
      
 79 
     | 
    
         
            +
                "@metamask/accounts-controller": "^33.0.0",
         
     | 
| 
      
 80 
     | 
    
         
            +
                "@metamask/bridge-controller": "^41.0.0",
         
     | 
| 
       81 
81 
     | 
    
         
             
                "@metamask/gas-fee-controller": "^24.0.0",
         
     | 
| 
       82 
82 
     | 
    
         
             
                "@metamask/network-controller": "^24.0.0",
         
     | 
| 
       83 
83 
     | 
    
         
             
                "@metamask/snaps-controllers": "^14.0.0",
         
     | 
| 
       84 
     | 
    
         
            -
                "@metamask/transaction-controller": "^ 
     | 
| 
      
 84 
     | 
    
         
            +
                "@metamask/transaction-controller": "^60.0.0"
         
     | 
| 
       85 
85 
     | 
    
         
             
              },
         
     | 
| 
       86 
86 
     | 
    
         
             
              "engines": {
         
     | 
| 
       87 
87 
     | 
    
         
             
                "node": "^18.18 || >=20"
         
     |