@metamask-previews/bridge-status-controller 41.0.0-preview-236bab4a → 41.0.0-preview-3734aa94
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 +10 -0
- package/dist/bridge-status-controller.cjs +2 -1
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +2 -1
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +4 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +4 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +1 -1
- package/dist/utils/metrics.cjs +3 -0
- package/dist/utils/metrics.cjs.map +1 -1
- package/dist/utils/metrics.d.cts +2 -0
- package/dist/utils/metrics.d.cts.map +1 -1
- package/dist/utils/metrics.d.mts +2 -0
- package/dist/utils/metrics.d.mts.map +1 -1
- package/dist/utils/metrics.mjs +3 -0
- package/dist/utils/metrics.mjs.map +1 -1
- package/dist/utils/transaction.cjs +5 -4
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +2 -2
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +2 -2
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +5 -4
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +2 -2
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"metrics.cjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":";;;AAOA,mEAgBqC;AACrC,6EAI0C;AAE1C,+CAAyC;AAEzC,mCAA0C;AAC1C,qEAGgC;AAGzB,MAAM,wBAAwB,GAAG,CAAC,EACvC,MAAM,EACN,aAAa,EACb,YAAY,EACZ,KAAK,GACa,EAAgB,EAAE;IACpC,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;QAC/C,CAAC,CAAC,+BAAW,CAAC,QAAQ;QACtB,CAAC,CAAC,+BAAW,CAAC,OAAO,CAAC;IACxB,MAAM,uBAAuB,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM;QACtD,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,+BAAW,CAAC,OAAO,CAAC;IAExB,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAA,6BAAS,EAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,2BAA2B,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;QACxD,CAAC,CAAC,+BAAW,CAAC,QAAQ;QACtB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,oBAAoB,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;QACjD,CAAC,CAAC,+BAAW,CAAC,QAAQ;QACtB,CAAC,CAAC,+BAAW,CAAC,OAAO,CAAC;IAExB,OAAO;QACL,2BAA2B,EAAE,WAAW;YACtC,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS;QACb,oBAAoB,EAClB,aAAa,IAAI,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;QAClE,kBAAkB;QAClB,uBAAuB,EACrB,MAAM,CAAC,MAAM,KAAK,+BAAW,CAAC,MAAM;YAClC,CAAC,CAAC,+BAAW,CAAC,MAAM;YACpB,CAAC,CAAC,uBAAuB;KAC9B,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,wBAAwB,4BAkCnC;AAEF;;;;;;;;GAQG;AACI,MAAM,wBAAwB,GAAG,CACtC,WAA8B,EAC9B,MAAwB,EACxB,cAAgC,EAChC,EAAE;IACF,MAAM,SAAS,GACb,cAAc,EAAE,aAAa;QAC7B,MAAM,EAAE,aAAa;QACrB,WAAW,CAAC,SAAS,CAAC;IACxB,MAAM,cAAc,GAClB,MAAM,EAAE,IAAI,KAAK,wCAAe,CAAC,IAAI;QACnC,CAAC,CAAC,MAAM,EAAE,IAAI;QACd,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAA,uBAAiB,EACjC,WAAW,EACX,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,SAAS,CAC1B,CAAC;IAEF,MAAM,YAAY,GAChB,MAAM,EAAE,IAAI,KAAK,wCAAe,CAAC,IAAI;QACnC,CAAC,CAAC,IAAA,kDAA2B,EAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC;QAC7D,CAAC,CAAC,IAAA,oDAA6B,EAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,oBAAoB,GACxB,WAAW,CAAC,WAAW,EAAE,eAAe,IAAI,SAAS,EAAE,MAAM;QAC3D,CAAC,CAAC,IAAI,wBAAS,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC;aACnD,YAAY,CAAC,IAAI,wBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACvC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;aACrB,QAAQ,EAAE;QACf,CAAC,CAAC,CAAC,CAAC;IAER,MAAM,qBAAqB,GACzB,WAAW,CAAC,WAAW,EAAE,iBAAiB,IAAI,YAAY,EAAE,GAAG;QAC7D,CAAC,CAAC,IAAI,wBAAS,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC;aACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;aACrB,QAAQ,EAAE;QACf,CAAC,CAAC,CAAC,CAAC;IAER,OAAO;QACL,mBAAmB,EACjB,cAAc,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxE,iBAAiB,EAAE,MAAM,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;QACjD,cAAc,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,wBAAwB,EAAE,qBAAqB;QAC/C,wBAAwB,EAAE,oBAAoB;KAC/C,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,wBAAwB,4BAgDnC;AAEK,MAAM,0BAA0B,GAAG,CACxC,WAA8B,EACf,EAAE;IACjB,OAAO;QACL,eAAe,EAAE,IAAA,uCAAmB,EAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC;QAClE,mBAAmB,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QACtD,oBAAoB,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;QACxD,oBAAoB,EAAE,IAAA,uCAAmB,EAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;QACxE,wBAAwB,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;QAC5D,yBAAyB,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO;KAC/D,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,0BAA0B,8BAWrC;AAEK,MAAM,qBAAqB,GAAG,CACnC,aAA6D,EAClD,EAAE;IACb,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACjE,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK;QACtD,QAAQ,EAAE,IAAA,uCAAmB,EAAC,aAAa,CAAC,KAAK,CAAC;QAClD,mBAAmB,EAAE,MAAM,CACzB,aAAa,CAAC,gCAAgC,GAAG,EAAE,CACpD;QACD,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,qBAAqB,yBAYhC;AAEK,MAAM,uBAAuB,GAAG,CACrC,KAA6B,EACS,EAAE;IACxC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,IAAI,GAAG,CAAC,EAAE,CAAC;AACvE,CAAC,CAAC;AAJW,QAAA,uBAAuB,2BAIlC;AAEF;;;;;;;;GAQG;AACI,MAAM,qCAAqC,GAAG,CACnD,aAA6D,EAC7D,oBAA6B,EAC7B,iBAA0B,EAC1B,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;IAChC,OAAO;QACL,GAAG,IAAA,+BAAuB,EAAC,KAAK,CAAC;QACjC,GAAG,IAAA,6BAAqB,EAAC,aAAa,CAAC;QACvC,eAAe,EAAE,IAAA,uCAAmB,EAAC,KAAK,CAAC,UAAU,CAAC;QACtD,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QAC1C,oBAAoB,EAAE,IAAA,uCAAmB,EAAC,KAAK,CAAC,WAAW,CAAC;QAC5D,wBAAwB,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM;QAChD,kBAAkB,EAAE,iBAAiB;QACrC,SAAS,EAAE,IAAA,+BAAW,EACpB,aAAa,CAAC,KAAK,CAAC,UAAU,EAC9B,aAAa,CAAC,KAAK,CAAC,WAAW,CAChC;QACD,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,qCAAiB,CAAC,aAAa;QAC5C,eAAe,EAAE,KAAK,EAAE,4DAA4D;KACrF,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,qCAAqC,yCAuBhD;AAEK,MAAM,uBAAuB,GAAG,CACrC,WAA8B,EACnB,EAAE;IACb,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,cAAc,IAAI,CAAC,CAAC;QACpE,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK;QACpD,QAAQ,EAAE,IAAA,uCAAmB,EAAC,WAAW,CAAC,KAAK,CAAC;QAChD,mBAAmB,EAAE,MAAM,CACzB,WAAW,CAAC,gCAAgC,GAAG,EAAE,CAClD;QACD,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,iBAAiB,IAAI,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,uBAAuB,2BAYlC;AAEK,MAAM,6BAA6B,GAAG,CAC3C,WAA8B,EAC9B,OAAyE,EACxD,EAAE;IACnB,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;IAEhE,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,IAAA,oCAAgB,EAAC,kBAAkB,CAAC;QACrD,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,eAAe,IAAI,CAAC,CAAC;QACxE,SAAS,EAAE,IAAA,+BAAW,EAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC;QAC3D,kBAAkB,EAAE,IAAA,oCAAgB,EAAC,OAAO,CAAC;QAC7C,WAAW,EAAE,YAAY,IAAI,KAAK;QAClC,iBAAiB,EAAE,EAAE;KACtB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,6BAA6B,iCAexC;AAEF;;;;;GAKG;AACI,MAAM,qCAAqC,GAAG,CACnD,eAAgC,EAChC,EAAE;IACF,OAAO;QACL,kBAAkB,EAAE;YAClB,0CAAiB,CAAC,MAAM;YACxB,0CAAiB,CAAC,OAAO;YACzB,0CAAiB,CAAC,QAAQ;SAC3B,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC;YAChC,CAAC,CAAC,+BAAW,CAAC,MAAM;YACpB,CAAC,CAAC,+BAAW,CAAC,QAAQ;QACxB,aAAa,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE;QACnD,eAAe,EAAE,IAAA,uCAAmB,EAAC,eAAe,CAAC,OAAO,CAAC;QAC7D,oBAAoB,EAAE,IAAA,uCAAmB,EAAC,eAAe,CAAC,OAAO,CAAC;QAClE,mBAAmB,EAAE,eAAe,CAAC,iBAAiB,IAAI,EAAE;QAC5D,wBAAwB,EAAE,eAAe,CAAC,sBAAsB,IAAI,EAAE;QACtE,iBAAiB,EAAE,GAAG;QACtB,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAClB,IAAA,0CAAsB,EACpB,eAAe,CAAC,kBAAkB,IAAI,EAAE,EACxC,eAAe,CAAC,OAAO,CACxB,IAAK,EAAoB;QAC5B,yBAAyB,EACvB,IAAA,0CAAsB,EACpB,eAAe,CAAC,uBAAuB,IAAI,EAAE,EAC7C,eAAe,CAAC,OAAO,CACxB,IAAK,EAAoB;QAC5B,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,KAAK;QACzB,SAAS,EACP,eAAe,CAAC,IAAI;YACpB,CAAC,wCAAe,CAAC,IAAI,EAAE,wCAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,CAC3D,eAAe,CAAC,IAAI,CACrB;YACC,CAAC,CAAC,mCAAe,CAAC,MAAM;YACxB,CAAC,CAAC,mCAAe,CAAC,UAAU;QAChC,iBAAiB,EAAE,EAAE;QACrB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,KAAK;QACnB,mBAAmB,EAAE,CAAC;QACtB,iBAAiB,EAAE,CAAC;QACpB,QAAQ,EAAE,EAA2B;QACrC,mBAAmB,EAAE,CAAC;QACtB,wBAAwB,EAAE,CAAC;QAC3B,wBAAwB,EAAE,CAAC;QAC3B,iBAAiB,EAAE,CAAC;QACpB,cAAc,EAAE,CAAC;QACjB,WAAW,EAAE,qCAAiB,CAAC,aAAa;KAC7C,CAAC;AACJ,CAAC,CAAC;AAnDW,QAAA,qCAAqC,yCAmDhD","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type {\n  QuoteResponse,\n  TxData,\n  QuoteMetadata,\n  QuoteFetchData,\n} from '@metamask/bridge-controller';\nimport {\n  type TxStatusData,\n  StatusTypes,\n  formatChainIdToHex,\n  isEthUsdt,\n  type RequestParams,\n  formatChainIdToCaip,\n  type TradeData,\n  formatProviderLabel,\n  type RequestMetadata,\n  isCustomSlippage,\n  getSwapType,\n  isHardwareWallet,\n  formatAddressToAssetId,\n  MetricsActionType,\n  MetricsSwapType,\n} from '@metamask/bridge-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calcActualGasUsed } from './gas';\nimport {\n  getActualBridgeReceivedAmount,\n  getActualSwapReceivedAmount,\n} from './swap-received-amount';\nimport type { BridgeHistoryItem } from '../types';\n\nexport const getTxStatusesFromHistory = ({\n  status,\n  hasApprovalTx,\n  approvalTxId,\n  quote,\n}: BridgeHistoryItem): TxStatusData => {\n  const source_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n  const destination_transaction = status.destChain?.txHash\n    ? status.status\n    : StatusTypes.PENDING;\n\n  const hexChainId = formatChainIdToHex(quote.srcChainId);\n  const isEthUsdtTx = isEthUsdt(hexChainId, quote.srcAsset.address);\n  const allowance_reset_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : undefined;\n  const approval_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n\n  return {\n    allowance_reset_transaction: isEthUsdtTx\n      ? allowance_reset_transaction\n      : undefined,\n    approval_transaction:\n      hasApprovalTx || approvalTxId ? approval_transaction : undefined,\n    source_transaction,\n    destination_transaction:\n      status.status === StatusTypes.FAILED\n        ? StatusTypes.FAILED\n        : destination_transaction,\n  };\n};\n\n/**\n * Calculate the properties for a finalized transaction event based on the txHistory\n * and txMeta\n *\n * @param historyItem - The bridge history item\n * @param txMeta - The transaction meta from the TransactionController\n * @param approvalTxMeta - The approval transaction meta from the TransactionController\n * @returns The properties for the finalized transaction\n */\nexport const getFinalizedTxProperties = (\n  historyItem: BridgeHistoryItem,\n  txMeta?: TransactionMeta,\n  approvalTxMeta?: TransactionMeta,\n) => {\n  const startTime =\n    approvalTxMeta?.submittedTime ??\n    txMeta?.submittedTime ??\n    historyItem.startTime;\n  const completionTime =\n    txMeta?.type === TransactionType.swap\n      ? txMeta?.time\n      : historyItem.completionTime;\n\n  const actualGas = calcActualGasUsed(\n    historyItem,\n    txMeta?.txReceipt,\n    approvalTxMeta?.txReceipt,\n  );\n\n  const actualReturn =\n    txMeta?.type === TransactionType.swap\n      ? getActualSwapReceivedAmount(historyItem, actualGas, txMeta)\n      : getActualBridgeReceivedAmount(historyItem);\n\n  const quotedVsUsedGasRatio =\n    historyItem.pricingData?.quotedGasAmount && actualGas?.amount\n      ? new BigNumber(historyItem.pricingData.quotedGasAmount)\n          .multipliedBy(new BigNumber(10).pow(18))\n          .div(actualGas.amount)\n          .toNumber()\n      : 0;\n\n  const quoteVsExecutionRatio =\n    historyItem.pricingData?.quotedReturnInUsd && actualReturn?.usd\n      ? new BigNumber(historyItem.pricingData.quotedReturnInUsd)\n          .div(actualReturn.usd)\n          .toNumber()\n      : 0;\n\n  return {\n    actual_time_minutes:\n      completionTime && startTime ? (completionTime - startTime) / 60000 : 0,\n    usd_actual_return: Number(actualReturn?.usd ?? 0),\n    usd_actual_gas: actualGas?.usd ?? 0,\n    quote_vs_execution_ratio: quoteVsExecutionRatio,\n    quoted_vs_used_gas_ratio: quotedVsUsedGasRatio,\n  };\n};\n\nexport const getRequestParamFromHistory = (\n  historyItem: BridgeHistoryItem,\n): RequestParams => {\n  return {\n    chain_id_source: formatChainIdToCaip(historyItem.quote.srcChainId),\n    token_symbol_source: historyItem.quote.srcAsset.symbol,\n    token_address_source: historyItem.quote.srcAsset.assetId,\n    chain_id_destination: formatChainIdToCaip(historyItem.quote.destChainId),\n    token_symbol_destination: historyItem.quote.destAsset.symbol,\n    token_address_destination: historyItem.quote.destAsset.assetId,\n  };\n};\n\nexport const getTradeDataFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(quoteResponse.gasFee?.effective?.usd ?? 0),\n    gas_included: quoteResponse.quote.gasIncluded ?? false,\n    provider: formatProviderLabel(quoteResponse.quote),\n    quoted_time_minutes: Number(\n      quoteResponse.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(quoteResponse.adjustedReturn?.usd ?? 0),\n  };\n};\n\nexport const getPriceImpactFromQuote = (\n  quote: QuoteResponse['quote'],\n): Pick<QuoteFetchData, 'price_impact'> => {\n  return { price_impact: Number(quote.priceData?.priceImpact ?? '0') };\n};\n\n/**\n * Before the tx is confirmed, its data is not available in txHistory\n * The quote is used to populate event properties before confirmation\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param isHardwareAccount - whether the tx is submitted using a hardware wallet\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n  isStxEnabledOnClient: boolean,\n  isHardwareAccount: boolean,\n) => {\n  const { quote } = quoteResponse;\n  return {\n    ...getPriceImpactFromQuote(quote),\n    ...getTradeDataFromQuote(quoteResponse),\n    chain_id_source: formatChainIdToCaip(quote.srcChainId),\n    token_symbol_source: quote.srcAsset.symbol,\n    chain_id_destination: formatChainIdToCaip(quote.destChainId),\n    token_symbol_destination: quote.destAsset.symbol,\n    is_hardware_wallet: isHardwareAccount,\n    swap_type: getSwapType(\n      quoteResponse.quote.srcChainId,\n      quoteResponse.quote.destChainId,\n    ),\n    usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),\n    stx_enabled: isStxEnabledOnClient,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n    custom_slippage: false, // TODO detect whether the user changed the default slippage\n  };\n};\n\nexport const getTradeDataFromHistory = (\n  historyItem: BridgeHistoryItem,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0),\n    gas_included: historyItem.quote.gasIncluded ?? false,\n    provider: formatProviderLabel(historyItem.quote),\n    quoted_time_minutes: Number(\n      historyItem.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0),\n  };\n};\n\nexport const getRequestMetadataFromHistory = (\n  historyItem: BridgeHistoryItem,\n  account?: AccountsControllerState['internalAccounts']['accounts'][string],\n): RequestMetadata => {\n  const { quote, slippagePercentage, isStxEnabled } = historyItem;\n\n  return {\n    slippage_limit: slippagePercentage,\n    custom_slippage: isCustomSlippage(slippagePercentage),\n    usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),\n    swap_type: getSwapType(quote.srcChainId, quote.destChainId),\n    is_hardware_wallet: isHardwareWallet(account),\n    stx_enabled: isStxEnabled ?? false,\n    security_warnings: [],\n  };\n};\n\n/**\n * Get the properties for a swap transaction that is not in the txHistory\n *\n * @param transactionMeta - The transaction meta\n * @returns The properties for the swap transaction\n */\nexport const getEVMTxPropertiesFromTransactionMeta = (\n  transactionMeta: TransactionMeta,\n) => {\n  return {\n    source_transaction: [\n      TransactionStatus.failed,\n      TransactionStatus.dropped,\n      TransactionStatus.rejected,\n    ].includes(transactionMeta.status)\n      ? StatusTypes.FAILED\n      : StatusTypes.COMPLETE,\n    error_message: transactionMeta.error?.message ?? '',\n    chain_id_source: formatChainIdToCaip(transactionMeta.chainId),\n    chain_id_destination: formatChainIdToCaip(transactionMeta.chainId),\n    token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',\n    token_symbol_destination: transactionMeta.destinationTokenSymbol ?? '',\n    usd_amount_source: 100,\n    stx_enabled: false,\n    token_address_source:\n      formatAddressToAssetId(\n        transactionMeta.sourceTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    token_address_destination:\n      formatAddressToAssetId(\n        transactionMeta.destinationTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    custom_slippage: false,\n    is_hardware_wallet: false,\n    swap_type:\n      transactionMeta.type &&\n      [TransactionType.swap, TransactionType.swapApproval].includes(\n        transactionMeta.type,\n      )\n        ? MetricsSwapType.SINGLE\n        : MetricsSwapType.CROSSCHAIN,\n    security_warnings: [],\n    price_impact: 0,\n    usd_quoted_gas: 0,\n    gas_included: false,\n    quoted_time_minutes: 0,\n    usd_quoted_return: 0,\n    provider: '' as `${string}_${string}`,\n    actual_time_minutes: 0,\n    quote_vs_execution_ratio: 0,\n    quoted_vs_used_gas_ratio: 0,\n    usd_actual_return: 0,\n    usd_actual_gas: 0,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n  };\n};\n"]}
         | 
| 1 | 
            +
            {"version":3,"file":"metrics.cjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type {\n  QuoteResponse,\n  TxData,\n  QuoteMetadata,\n  QuoteFetchData,\n} from '@metamask/bridge-controller';\nimport {\n  type TxStatusData,\n  StatusTypes,\n  formatChainIdToHex,\n  isEthUsdt,\n  type RequestParams,\n  formatChainIdToCaip,\n  type TradeData,\n  formatProviderLabel,\n  type RequestMetadata,\n  isCustomSlippage,\n  getSwapType,\n  isHardwareWallet,\n  formatAddressToAssetId,\n  MetricsActionType,\n  MetricsSwapType,\n} from '@metamask/bridge-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calcActualGasUsed } from './gas';\nimport {\n  getActualBridgeReceivedAmount,\n  getActualSwapReceivedAmount,\n} from './swap-received-amount';\nimport type { BridgeHistoryItem } from '../types';\n\nexport const getTxStatusesFromHistory = ({\n  status,\n  hasApprovalTx,\n  approvalTxId,\n  quote,\n}: BridgeHistoryItem): TxStatusData => {\n  const source_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n  const destination_transaction = status.destChain?.txHash\n    ? status.status\n    : StatusTypes.PENDING;\n\n  const hexChainId = formatChainIdToHex(quote.srcChainId);\n  const isEthUsdtTx = isEthUsdt(hexChainId, quote.srcAsset.address);\n  const allowance_reset_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : undefined;\n  const approval_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n\n  return {\n    allowance_reset_transaction: isEthUsdtTx\n      ? allowance_reset_transaction\n      : undefined,\n    approval_transaction:\n      hasApprovalTx || approvalTxId ? approval_transaction : undefined,\n    source_transaction,\n    destination_transaction:\n      status.status === StatusTypes.FAILED\n        ? StatusTypes.FAILED\n        : destination_transaction,\n  };\n};\n\n/**\n * Calculate the properties for a finalized transaction event based on the txHistory\n * and txMeta\n *\n * @param historyItem - The bridge history item\n * @param txMeta - The transaction meta from the TransactionController\n * @param approvalTxMeta - The approval transaction meta from the TransactionController\n * @returns The properties for the finalized transaction\n */\nexport const getFinalizedTxProperties = (\n  historyItem: BridgeHistoryItem,\n  txMeta?: TransactionMeta,\n  approvalTxMeta?: TransactionMeta,\n) => {\n  const startTime =\n    approvalTxMeta?.submittedTime ??\n    txMeta?.submittedTime ??\n    historyItem.startTime;\n  const completionTime =\n    txMeta?.type === TransactionType.swap\n      ? txMeta?.time\n      : historyItem.completionTime;\n\n  const actualGas = calcActualGasUsed(\n    historyItem,\n    txMeta?.txReceipt,\n    approvalTxMeta?.txReceipt,\n  );\n\n  const actualReturn =\n    txMeta?.type === TransactionType.swap\n      ? getActualSwapReceivedAmount(historyItem, actualGas, txMeta)\n      : getActualBridgeReceivedAmount(historyItem);\n\n  const quotedVsUsedGasRatio =\n    historyItem.pricingData?.quotedGasAmount && actualGas?.amount\n      ? new BigNumber(historyItem.pricingData.quotedGasAmount)\n          .multipliedBy(new BigNumber(10).pow(18))\n          .div(actualGas.amount)\n          .toNumber()\n      : 0;\n\n  const quoteVsExecutionRatio =\n    historyItem.pricingData?.quotedReturnInUsd && actualReturn?.usd\n      ? new BigNumber(historyItem.pricingData.quotedReturnInUsd)\n          .div(actualReturn.usd)\n          .toNumber()\n      : 0;\n\n  return {\n    actual_time_minutes:\n      completionTime && startTime ? (completionTime - startTime) / 60000 : 0,\n    usd_actual_return: Number(actualReturn?.usd ?? 0),\n    usd_actual_gas: actualGas?.usd ?? 0,\n    quote_vs_execution_ratio: quoteVsExecutionRatio,\n    quoted_vs_used_gas_ratio: quotedVsUsedGasRatio,\n  };\n};\n\nexport const getRequestParamFromHistory = (\n  historyItem: BridgeHistoryItem,\n): RequestParams => {\n  return {\n    chain_id_source: formatChainIdToCaip(historyItem.quote.srcChainId),\n    token_symbol_source: historyItem.quote.srcAsset.symbol,\n    token_address_source: historyItem.quote.srcAsset.assetId,\n    chain_id_destination: formatChainIdToCaip(historyItem.quote.destChainId),\n    token_symbol_destination: historyItem.quote.destAsset.symbol,\n    token_address_destination: historyItem.quote.destAsset.assetId,\n  };\n};\n\nexport const getTradeDataFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(quoteResponse.gasFee?.effective?.usd ?? 0),\n    gas_included: quoteResponse.quote.gasIncluded ?? false,\n    gas_included_7702: quoteResponse.quote.gasIncluded7702 ?? false,\n    provider: formatProviderLabel(quoteResponse.quote),\n    quoted_time_minutes: Number(\n      quoteResponse.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(quoteResponse.adjustedReturn?.usd ?? 0),\n  };\n};\n\nexport const getPriceImpactFromQuote = (\n  quote: QuoteResponse['quote'],\n): Pick<QuoteFetchData, 'price_impact'> => {\n  return { price_impact: Number(quote.priceData?.priceImpact ?? '0') };\n};\n\n/**\n * Before the tx is confirmed, its data is not available in txHistory\n * The quote is used to populate event properties before confirmation\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param isHardwareAccount - whether the tx is submitted using a hardware wallet\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n  isStxEnabledOnClient: boolean,\n  isHardwareAccount: boolean,\n) => {\n  const { quote } = quoteResponse;\n  return {\n    ...getPriceImpactFromQuote(quote),\n    ...getTradeDataFromQuote(quoteResponse),\n    chain_id_source: formatChainIdToCaip(quote.srcChainId),\n    token_symbol_source: quote.srcAsset.symbol,\n    chain_id_destination: formatChainIdToCaip(quote.destChainId),\n    token_symbol_destination: quote.destAsset.symbol,\n    is_hardware_wallet: isHardwareAccount,\n    swap_type: getSwapType(\n      quoteResponse.quote.srcChainId,\n      quoteResponse.quote.destChainId,\n    ),\n    usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),\n    stx_enabled: isStxEnabledOnClient,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n    custom_slippage: false, // TODO detect whether the user changed the default slippage\n  };\n};\n\nexport const getTradeDataFromHistory = (\n  historyItem: BridgeHistoryItem,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0),\n    gas_included: historyItem.quote.gasIncluded ?? false,\n    gas_included_7702: historyItem.quote.gasIncluded7702 ?? false,\n    provider: formatProviderLabel(historyItem.quote),\n    quoted_time_minutes: Number(\n      historyItem.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0),\n  };\n};\n\nexport const getRequestMetadataFromHistory = (\n  historyItem: BridgeHistoryItem,\n  account?: AccountsControllerState['internalAccounts']['accounts'][string],\n): RequestMetadata => {\n  const { quote, slippagePercentage, isStxEnabled } = historyItem;\n\n  return {\n    slippage_limit: slippagePercentage,\n    custom_slippage: isCustomSlippage(slippagePercentage),\n    usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),\n    swap_type: getSwapType(quote.srcChainId, quote.destChainId),\n    is_hardware_wallet: isHardwareWallet(account),\n    stx_enabled: isStxEnabled ?? false,\n    security_warnings: [],\n  };\n};\n\n/**\n * Get the properties for a swap transaction that is not in the txHistory\n *\n * @param transactionMeta - The transaction meta\n * @returns The properties for the swap transaction\n */\nexport const getEVMTxPropertiesFromTransactionMeta = (\n  transactionMeta: TransactionMeta,\n) => {\n  return {\n    source_transaction: [\n      TransactionStatus.failed,\n      TransactionStatus.dropped,\n      TransactionStatus.rejected,\n    ].includes(transactionMeta.status)\n      ? StatusTypes.FAILED\n      : StatusTypes.COMPLETE,\n    error_message: transactionMeta.error?.message ?? '',\n    chain_id_source: formatChainIdToCaip(transactionMeta.chainId),\n    chain_id_destination: formatChainIdToCaip(transactionMeta.chainId),\n    token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',\n    token_symbol_destination: transactionMeta.destinationTokenSymbol ?? '',\n    usd_amount_source: 100,\n    stx_enabled: false,\n    token_address_source:\n      formatAddressToAssetId(\n        transactionMeta.sourceTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    token_address_destination:\n      formatAddressToAssetId(\n        transactionMeta.destinationTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    custom_slippage: false,\n    is_hardware_wallet: false,\n    swap_type:\n      transactionMeta.type &&\n      [TransactionType.swap, TransactionType.swapApproval].includes(\n        transactionMeta.type,\n      )\n        ? MetricsSwapType.SINGLE\n        : MetricsSwapType.CROSSCHAIN,\n    security_warnings: [],\n    price_impact: 0,\n    usd_quoted_gas: 0,\n    gas_included: false,\n    gas_included_7702: false,\n    quoted_time_minutes: 0,\n    usd_quoted_return: 0,\n    provider: '' as `${string}_${string}`,\n    actual_time_minutes: 0,\n    quote_vs_execution_ratio: 0,\n    quoted_vs_used_gas_ratio: 0,\n    usd_actual_return: 0,\n    usd_actual_gas: 0,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n  };\n};\n"]}
         | 
    
        package/dist/utils/metrics.d.cts
    CHANGED
    
    | @@ -45,6 +45,7 @@ export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: Quot | |
| 45 45 | 
             
                custom_slippage: boolean;
         | 
| 46 46 | 
             
                usd_quoted_gas: number;
         | 
| 47 47 | 
             
                gas_included: boolean;
         | 
| 48 | 
            +
                gas_included_7702: boolean;
         | 
| 48 49 | 
             
                quoted_time_minutes: number;
         | 
| 49 50 | 
             
                usd_quoted_return: number;
         | 
| 50 51 | 
             
                provider: `${string}_${string}`;
         | 
| @@ -76,6 +77,7 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr | |
| 76 77 | 
             
                price_impact: number;
         | 
| 77 78 | 
             
                usd_quoted_gas: number;
         | 
| 78 79 | 
             
                gas_included: boolean;
         | 
| 80 | 
            +
                gas_included_7702: boolean;
         | 
| 79 81 | 
             
                quoted_time_minutes: number;
         | 
| 80 82 | 
             
                usd_quoted_return: number;
         | 
| 81 83 | 
             
                provider: `${string}_${string}`;
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"metrics.d.cts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,aAAa,EACb,cAAc,EACf,oCAAoC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,WAAW,EAGX,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,eAAe,EAKpB,iBAAiB,EACjB,eAAe,EAChB,oCAAoC;AACrC,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAS1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAElD,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gBACtB,iBAAiB,WACrB,eAAe,mBACP,eAAe;;;;;;CA6CjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D, | 
| 1 | 
            +
            {"version":3,"file":"metrics.d.cts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,aAAa,EACb,cAAc,EACf,oCAAoC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,WAAW,EAGX,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,eAAe,EAKpB,iBAAiB,EACjB,eAAe,EAChB,oCAAoC;AACrC,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAS1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAElD,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gBACtB,iBAAiB,WACrB,eAAe,mBACP,eAAe;;;;;;CA6CjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D,SAWF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qCAAqC,kBACjC,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,wBACvC,OAAO,qBACV,OAAO;;;;;;;;;;;;;;;;;;CAoB3B,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBACrB,iBAAiB,KAC7B,SAWF,CAAC;AAEF,eAAO,MAAM,6BAA6B,gBAC3B,iBAAiB,YACpB,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KACxE,eAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC,oBAC/B,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDjC,CAAC"}
         | 
    
        package/dist/utils/metrics.d.mts
    CHANGED
    
    | @@ -45,6 +45,7 @@ export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: Quot | |
| 45 45 | 
             
                custom_slippage: boolean;
         | 
| 46 46 | 
             
                usd_quoted_gas: number;
         | 
| 47 47 | 
             
                gas_included: boolean;
         | 
| 48 | 
            +
                gas_included_7702: boolean;
         | 
| 48 49 | 
             
                quoted_time_minutes: number;
         | 
| 49 50 | 
             
                usd_quoted_return: number;
         | 
| 50 51 | 
             
                provider: `${string}_${string}`;
         | 
| @@ -76,6 +77,7 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr | |
| 76 77 | 
             
                price_impact: number;
         | 
| 77 78 | 
             
                usd_quoted_gas: number;
         | 
| 78 79 | 
             
                gas_included: boolean;
         | 
| 80 | 
            +
                gas_included_7702: boolean;
         | 
| 79 81 | 
             
                quoted_time_minutes: number;
         | 
| 80 82 | 
             
                usd_quoted_return: number;
         | 
| 81 83 | 
             
                provider: `${string}_${string}`;
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"metrics.d.mts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,aAAa,EACb,cAAc,EACf,oCAAoC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,WAAW,EAGX,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,eAAe,EAKpB,iBAAiB,EACjB,eAAe,EAChB,oCAAoC;AACrC,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAS1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAElD,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gBACtB,iBAAiB,WACrB,eAAe,mBACP,eAAe;;;;;;CA6CjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D, | 
| 1 | 
            +
            {"version":3,"file":"metrics.d.mts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,KAAK,EACV,aAAa,EACb,MAAM,EACN,aAAa,EACb,cAAc,EACf,oCAAoC;AACrC,OAAO,EACL,KAAK,YAAY,EACjB,WAAW,EAGX,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,eAAe,EAKpB,iBAAiB,EACjB,eAAe,EAChB,oCAAoC;AACrC,OAAO,EAGL,KAAK,eAAe,EACrB,yCAAyC;AAS1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAiB;AAElD,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,gBACtB,iBAAiB,WACrB,eAAe,mBACP,eAAe;;;;;;CA6CjC,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D,SAWF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qCAAqC,kBACjC,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,wBACvC,OAAO,qBACV,OAAO;;;;;;;;;;;;;;;;;;CAoB3B,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBACrB,iBAAiB,KAC7B,SAWF,CAAC;AAEF,eAAO,MAAM,6BAA6B,gBAC3B,iBAAiB,YACpB,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KACxE,eAYF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qCAAqC,oBAC/B,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDjC,CAAC"}
         | 
    
        package/dist/utils/metrics.mjs
    CHANGED
    
    | @@ -82,6 +82,7 @@ export const getTradeDataFromQuote = (quoteResponse) => { | |
| 82 82 | 
             
                return {
         | 
| 83 83 | 
             
                    usd_quoted_gas: Number(quoteResponse.gasFee?.effective?.usd ?? 0),
         | 
| 84 84 | 
             
                    gas_included: quoteResponse.quote.gasIncluded ?? false,
         | 
| 85 | 
            +
                    gas_included_7702: quoteResponse.quote.gasIncluded7702 ?? false,
         | 
| 85 86 | 
             
                    provider: formatProviderLabel(quoteResponse.quote),
         | 
| 86 87 | 
             
                    quoted_time_minutes: Number(quoteResponse.estimatedProcessingTimeInSeconds / 60),
         | 
| 87 88 | 
             
                    usd_quoted_return: Number(quoteResponse.adjustedReturn?.usd ?? 0),
         | 
| @@ -120,6 +121,7 @@ export const getTradeDataFromHistory = (historyItem) => { | |
| 120 121 | 
             
                return {
         | 
| 121 122 | 
             
                    usd_quoted_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0),
         | 
| 122 123 | 
             
                    gas_included: historyItem.quote.gasIncluded ?? false,
         | 
| 124 | 
            +
                    gas_included_7702: historyItem.quote.gasIncluded7702 ?? false,
         | 
| 123 125 | 
             
                    provider: formatProviderLabel(historyItem.quote),
         | 
| 124 126 | 
             
                    quoted_time_minutes: Number(historyItem.estimatedProcessingTimeInSeconds / 60),
         | 
| 125 127 | 
             
                    usd_quoted_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0),
         | 
| @@ -171,6 +173,7 @@ export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => { | |
| 171 173 | 
             
                    price_impact: 0,
         | 
| 172 174 | 
             
                    usd_quoted_gas: 0,
         | 
| 173 175 | 
             
                    gas_included: false,
         | 
| 176 | 
            +
                    gas_included_7702: false,
         | 
| 174 177 | 
             
                    quoted_time_minutes: 0,
         | 
| 175 178 | 
             
                    usd_quoted_return: 0,
         | 
| 176 179 | 
             
                    provider: '',
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"file":"metrics.mjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type {\n  QuoteResponse,\n  TxData,\n  QuoteMetadata,\n  QuoteFetchData,\n} from '@metamask/bridge-controller';\nimport {\n  type TxStatusData,\n  StatusTypes,\n  formatChainIdToHex,\n  isEthUsdt,\n  type RequestParams,\n  formatChainIdToCaip,\n  type TradeData,\n  formatProviderLabel,\n  type RequestMetadata,\n  isCustomSlippage,\n  getSwapType,\n  isHardwareWallet,\n  formatAddressToAssetId,\n  MetricsActionType,\n  MetricsSwapType,\n} from '@metamask/bridge-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calcActualGasUsed } from './gas';\nimport {\n  getActualBridgeReceivedAmount,\n  getActualSwapReceivedAmount,\n} from './swap-received-amount';\nimport type { BridgeHistoryItem } from '../types';\n\nexport const getTxStatusesFromHistory = ({\n  status,\n  hasApprovalTx,\n  approvalTxId,\n  quote,\n}: BridgeHistoryItem): TxStatusData => {\n  const source_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n  const destination_transaction = status.destChain?.txHash\n    ? status.status\n    : StatusTypes.PENDING;\n\n  const hexChainId = formatChainIdToHex(quote.srcChainId);\n  const isEthUsdtTx = isEthUsdt(hexChainId, quote.srcAsset.address);\n  const allowance_reset_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : undefined;\n  const approval_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n\n  return {\n    allowance_reset_transaction: isEthUsdtTx\n      ? allowance_reset_transaction\n      : undefined,\n    approval_transaction:\n      hasApprovalTx || approvalTxId ? approval_transaction : undefined,\n    source_transaction,\n    destination_transaction:\n      status.status === StatusTypes.FAILED\n        ? StatusTypes.FAILED\n        : destination_transaction,\n  };\n};\n\n/**\n * Calculate the properties for a finalized transaction event based on the txHistory\n * and txMeta\n *\n * @param historyItem - The bridge history item\n * @param txMeta - The transaction meta from the TransactionController\n * @param approvalTxMeta - The approval transaction meta from the TransactionController\n * @returns The properties for the finalized transaction\n */\nexport const getFinalizedTxProperties = (\n  historyItem: BridgeHistoryItem,\n  txMeta?: TransactionMeta,\n  approvalTxMeta?: TransactionMeta,\n) => {\n  const startTime =\n    approvalTxMeta?.submittedTime ??\n    txMeta?.submittedTime ??\n    historyItem.startTime;\n  const completionTime =\n    txMeta?.type === TransactionType.swap\n      ? txMeta?.time\n      : historyItem.completionTime;\n\n  const actualGas = calcActualGasUsed(\n    historyItem,\n    txMeta?.txReceipt,\n    approvalTxMeta?.txReceipt,\n  );\n\n  const actualReturn =\n    txMeta?.type === TransactionType.swap\n      ? getActualSwapReceivedAmount(historyItem, actualGas, txMeta)\n      : getActualBridgeReceivedAmount(historyItem);\n\n  const quotedVsUsedGasRatio =\n    historyItem.pricingData?.quotedGasAmount && actualGas?.amount\n      ? new BigNumber(historyItem.pricingData.quotedGasAmount)\n          .multipliedBy(new BigNumber(10).pow(18))\n          .div(actualGas.amount)\n          .toNumber()\n      : 0;\n\n  const quoteVsExecutionRatio =\n    historyItem.pricingData?.quotedReturnInUsd && actualReturn?.usd\n      ? new BigNumber(historyItem.pricingData.quotedReturnInUsd)\n          .div(actualReturn.usd)\n          .toNumber()\n      : 0;\n\n  return {\n    actual_time_minutes:\n      completionTime && startTime ? (completionTime - startTime) / 60000 : 0,\n    usd_actual_return: Number(actualReturn?.usd ?? 0),\n    usd_actual_gas: actualGas?.usd ?? 0,\n    quote_vs_execution_ratio: quoteVsExecutionRatio,\n    quoted_vs_used_gas_ratio: quotedVsUsedGasRatio,\n  };\n};\n\nexport const getRequestParamFromHistory = (\n  historyItem: BridgeHistoryItem,\n): RequestParams => {\n  return {\n    chain_id_source: formatChainIdToCaip(historyItem.quote.srcChainId),\n    token_symbol_source: historyItem.quote.srcAsset.symbol,\n    token_address_source: historyItem.quote.srcAsset.assetId,\n    chain_id_destination: formatChainIdToCaip(historyItem.quote.destChainId),\n    token_symbol_destination: historyItem.quote.destAsset.symbol,\n    token_address_destination: historyItem.quote.destAsset.assetId,\n  };\n};\n\nexport const getTradeDataFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(quoteResponse.gasFee?.effective?.usd ?? 0),\n    gas_included: quoteResponse.quote.gasIncluded ?? false,\n    provider: formatProviderLabel(quoteResponse.quote),\n    quoted_time_minutes: Number(\n      quoteResponse.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(quoteResponse.adjustedReturn?.usd ?? 0),\n  };\n};\n\nexport const getPriceImpactFromQuote = (\n  quote: QuoteResponse['quote'],\n): Pick<QuoteFetchData, 'price_impact'> => {\n  return { price_impact: Number(quote.priceData?.priceImpact ?? '0') };\n};\n\n/**\n * Before the tx is confirmed, its data is not available in txHistory\n * The quote is used to populate event properties before confirmation\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param isHardwareAccount - whether the tx is submitted using a hardware wallet\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n  isStxEnabledOnClient: boolean,\n  isHardwareAccount: boolean,\n) => {\n  const { quote } = quoteResponse;\n  return {\n    ...getPriceImpactFromQuote(quote),\n    ...getTradeDataFromQuote(quoteResponse),\n    chain_id_source: formatChainIdToCaip(quote.srcChainId),\n    token_symbol_source: quote.srcAsset.symbol,\n    chain_id_destination: formatChainIdToCaip(quote.destChainId),\n    token_symbol_destination: quote.destAsset.symbol,\n    is_hardware_wallet: isHardwareAccount,\n    swap_type: getSwapType(\n      quoteResponse.quote.srcChainId,\n      quoteResponse.quote.destChainId,\n    ),\n    usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),\n    stx_enabled: isStxEnabledOnClient,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n    custom_slippage: false, // TODO detect whether the user changed the default slippage\n  };\n};\n\nexport const getTradeDataFromHistory = (\n  historyItem: BridgeHistoryItem,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0),\n    gas_included: historyItem.quote.gasIncluded ?? false,\n    provider: formatProviderLabel(historyItem.quote),\n    quoted_time_minutes: Number(\n      historyItem.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0),\n  };\n};\n\nexport const getRequestMetadataFromHistory = (\n  historyItem: BridgeHistoryItem,\n  account?: AccountsControllerState['internalAccounts']['accounts'][string],\n): RequestMetadata => {\n  const { quote, slippagePercentage, isStxEnabled } = historyItem;\n\n  return {\n    slippage_limit: slippagePercentage,\n    custom_slippage: isCustomSlippage(slippagePercentage),\n    usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),\n    swap_type: getSwapType(quote.srcChainId, quote.destChainId),\n    is_hardware_wallet: isHardwareWallet(account),\n    stx_enabled: isStxEnabled ?? false,\n    security_warnings: [],\n  };\n};\n\n/**\n * Get the properties for a swap transaction that is not in the txHistory\n *\n * @param transactionMeta - The transaction meta\n * @returns The properties for the swap transaction\n */\nexport const getEVMTxPropertiesFromTransactionMeta = (\n  transactionMeta: TransactionMeta,\n) => {\n  return {\n    source_transaction: [\n      TransactionStatus.failed,\n      TransactionStatus.dropped,\n      TransactionStatus.rejected,\n    ].includes(transactionMeta.status)\n      ? StatusTypes.FAILED\n      : StatusTypes.COMPLETE,\n    error_message: transactionMeta.error?.message ?? '',\n    chain_id_source: formatChainIdToCaip(transactionMeta.chainId),\n    chain_id_destination: formatChainIdToCaip(transactionMeta.chainId),\n    token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',\n    token_symbol_destination: transactionMeta.destinationTokenSymbol ?? '',\n    usd_amount_source: 100,\n    stx_enabled: false,\n    token_address_source:\n      formatAddressToAssetId(\n        transactionMeta.sourceTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    token_address_destination:\n      formatAddressToAssetId(\n        transactionMeta.destinationTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    custom_slippage: false,\n    is_hardware_wallet: false,\n    swap_type:\n      transactionMeta.type &&\n      [TransactionType.swap, TransactionType.swapApproval].includes(\n        transactionMeta.type,\n      )\n        ? MetricsSwapType.SINGLE\n        : MetricsSwapType.CROSSCHAIN,\n    security_warnings: [],\n    price_impact: 0,\n    usd_quoted_gas: 0,\n    gas_included: false,\n    quoted_time_minutes: 0,\n    usd_quoted_return: 0,\n    provider: '' as `${string}_${string}`,\n    actual_time_minutes: 0,\n    quote_vs_execution_ratio: 0,\n    quoted_vs_used_gas_ratio: 0,\n    usd_actual_return: 0,\n    usd_actual_gas: 0,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n  };\n};\n"]}
         | 
| 1 | 
            +
            {"version":3,"file":"metrics.mjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type {\n  QuoteResponse,\n  TxData,\n  QuoteMetadata,\n  QuoteFetchData,\n} from '@metamask/bridge-controller';\nimport {\n  type TxStatusData,\n  StatusTypes,\n  formatChainIdToHex,\n  isEthUsdt,\n  type RequestParams,\n  formatChainIdToCaip,\n  type TradeData,\n  formatProviderLabel,\n  type RequestMetadata,\n  isCustomSlippage,\n  getSwapType,\n  isHardwareWallet,\n  formatAddressToAssetId,\n  MetricsActionType,\n  MetricsSwapType,\n} from '@metamask/bridge-controller';\nimport {\n  TransactionStatus,\n  TransactionType,\n  type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { calcActualGasUsed } from './gas';\nimport {\n  getActualBridgeReceivedAmount,\n  getActualSwapReceivedAmount,\n} from './swap-received-amount';\nimport type { BridgeHistoryItem } from '../types';\n\nexport const getTxStatusesFromHistory = ({\n  status,\n  hasApprovalTx,\n  approvalTxId,\n  quote,\n}: BridgeHistoryItem): TxStatusData => {\n  const source_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n  const destination_transaction = status.destChain?.txHash\n    ? status.status\n    : StatusTypes.PENDING;\n\n  const hexChainId = formatChainIdToHex(quote.srcChainId);\n  const isEthUsdtTx = isEthUsdt(hexChainId, quote.srcAsset.address);\n  const allowance_reset_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : undefined;\n  const approval_transaction = status.srcChain.txHash\n    ? StatusTypes.COMPLETE\n    : StatusTypes.PENDING;\n\n  return {\n    allowance_reset_transaction: isEthUsdtTx\n      ? allowance_reset_transaction\n      : undefined,\n    approval_transaction:\n      hasApprovalTx || approvalTxId ? approval_transaction : undefined,\n    source_transaction,\n    destination_transaction:\n      status.status === StatusTypes.FAILED\n        ? StatusTypes.FAILED\n        : destination_transaction,\n  };\n};\n\n/**\n * Calculate the properties for a finalized transaction event based on the txHistory\n * and txMeta\n *\n * @param historyItem - The bridge history item\n * @param txMeta - The transaction meta from the TransactionController\n * @param approvalTxMeta - The approval transaction meta from the TransactionController\n * @returns The properties for the finalized transaction\n */\nexport const getFinalizedTxProperties = (\n  historyItem: BridgeHistoryItem,\n  txMeta?: TransactionMeta,\n  approvalTxMeta?: TransactionMeta,\n) => {\n  const startTime =\n    approvalTxMeta?.submittedTime ??\n    txMeta?.submittedTime ??\n    historyItem.startTime;\n  const completionTime =\n    txMeta?.type === TransactionType.swap\n      ? txMeta?.time\n      : historyItem.completionTime;\n\n  const actualGas = calcActualGasUsed(\n    historyItem,\n    txMeta?.txReceipt,\n    approvalTxMeta?.txReceipt,\n  );\n\n  const actualReturn =\n    txMeta?.type === TransactionType.swap\n      ? getActualSwapReceivedAmount(historyItem, actualGas, txMeta)\n      : getActualBridgeReceivedAmount(historyItem);\n\n  const quotedVsUsedGasRatio =\n    historyItem.pricingData?.quotedGasAmount && actualGas?.amount\n      ? new BigNumber(historyItem.pricingData.quotedGasAmount)\n          .multipliedBy(new BigNumber(10).pow(18))\n          .div(actualGas.amount)\n          .toNumber()\n      : 0;\n\n  const quoteVsExecutionRatio =\n    historyItem.pricingData?.quotedReturnInUsd && actualReturn?.usd\n      ? new BigNumber(historyItem.pricingData.quotedReturnInUsd)\n          .div(actualReturn.usd)\n          .toNumber()\n      : 0;\n\n  return {\n    actual_time_minutes:\n      completionTime && startTime ? (completionTime - startTime) / 60000 : 0,\n    usd_actual_return: Number(actualReturn?.usd ?? 0),\n    usd_actual_gas: actualGas?.usd ?? 0,\n    quote_vs_execution_ratio: quoteVsExecutionRatio,\n    quoted_vs_used_gas_ratio: quotedVsUsedGasRatio,\n  };\n};\n\nexport const getRequestParamFromHistory = (\n  historyItem: BridgeHistoryItem,\n): RequestParams => {\n  return {\n    chain_id_source: formatChainIdToCaip(historyItem.quote.srcChainId),\n    token_symbol_source: historyItem.quote.srcAsset.symbol,\n    token_address_source: historyItem.quote.srcAsset.assetId,\n    chain_id_destination: formatChainIdToCaip(historyItem.quote.destChainId),\n    token_symbol_destination: historyItem.quote.destAsset.symbol,\n    token_address_destination: historyItem.quote.destAsset.assetId,\n  };\n};\n\nexport const getTradeDataFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(quoteResponse.gasFee?.effective?.usd ?? 0),\n    gas_included: quoteResponse.quote.gasIncluded ?? false,\n    gas_included_7702: quoteResponse.quote.gasIncluded7702 ?? false,\n    provider: formatProviderLabel(quoteResponse.quote),\n    quoted_time_minutes: Number(\n      quoteResponse.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(quoteResponse.adjustedReturn?.usd ?? 0),\n  };\n};\n\nexport const getPriceImpactFromQuote = (\n  quote: QuoteResponse['quote'],\n): Pick<QuoteFetchData, 'price_impact'> => {\n  return { price_impact: Number(quote.priceData?.priceImpact ?? '0') };\n};\n\n/**\n * Before the tx is confirmed, its data is not available in txHistory\n * The quote is used to populate event properties before confirmation\n *\n * @param quoteResponse - The quote response\n * @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension\n * @param isHardwareAccount - whether the tx is submitted using a hardware wallet\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n  quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n  isStxEnabledOnClient: boolean,\n  isHardwareAccount: boolean,\n) => {\n  const { quote } = quoteResponse;\n  return {\n    ...getPriceImpactFromQuote(quote),\n    ...getTradeDataFromQuote(quoteResponse),\n    chain_id_source: formatChainIdToCaip(quote.srcChainId),\n    token_symbol_source: quote.srcAsset.symbol,\n    chain_id_destination: formatChainIdToCaip(quote.destChainId),\n    token_symbol_destination: quote.destAsset.symbol,\n    is_hardware_wallet: isHardwareAccount,\n    swap_type: getSwapType(\n      quoteResponse.quote.srcChainId,\n      quoteResponse.quote.destChainId,\n    ),\n    usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),\n    stx_enabled: isStxEnabledOnClient,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n    custom_slippage: false, // TODO detect whether the user changed the default slippage\n  };\n};\n\nexport const getTradeDataFromHistory = (\n  historyItem: BridgeHistoryItem,\n): TradeData => {\n  return {\n    usd_quoted_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0),\n    gas_included: historyItem.quote.gasIncluded ?? false,\n    gas_included_7702: historyItem.quote.gasIncluded7702 ?? false,\n    provider: formatProviderLabel(historyItem.quote),\n    quoted_time_minutes: Number(\n      historyItem.estimatedProcessingTimeInSeconds / 60,\n    ),\n    usd_quoted_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0),\n  };\n};\n\nexport const getRequestMetadataFromHistory = (\n  historyItem: BridgeHistoryItem,\n  account?: AccountsControllerState['internalAccounts']['accounts'][string],\n): RequestMetadata => {\n  const { quote, slippagePercentage, isStxEnabled } = historyItem;\n\n  return {\n    slippage_limit: slippagePercentage,\n    custom_slippage: isCustomSlippage(slippagePercentage),\n    usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),\n    swap_type: getSwapType(quote.srcChainId, quote.destChainId),\n    is_hardware_wallet: isHardwareWallet(account),\n    stx_enabled: isStxEnabled ?? false,\n    security_warnings: [],\n  };\n};\n\n/**\n * Get the properties for a swap transaction that is not in the txHistory\n *\n * @param transactionMeta - The transaction meta\n * @returns The properties for the swap transaction\n */\nexport const getEVMTxPropertiesFromTransactionMeta = (\n  transactionMeta: TransactionMeta,\n) => {\n  return {\n    source_transaction: [\n      TransactionStatus.failed,\n      TransactionStatus.dropped,\n      TransactionStatus.rejected,\n    ].includes(transactionMeta.status)\n      ? StatusTypes.FAILED\n      : StatusTypes.COMPLETE,\n    error_message: transactionMeta.error?.message ?? '',\n    chain_id_source: formatChainIdToCaip(transactionMeta.chainId),\n    chain_id_destination: formatChainIdToCaip(transactionMeta.chainId),\n    token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',\n    token_symbol_destination: transactionMeta.destinationTokenSymbol ?? '',\n    usd_amount_source: 100,\n    stx_enabled: false,\n    token_address_source:\n      formatAddressToAssetId(\n        transactionMeta.sourceTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    token_address_destination:\n      formatAddressToAssetId(\n        transactionMeta.destinationTokenAddress ?? '',\n        transactionMeta.chainId,\n      ) ?? ('' as CaipAssetType),\n    custom_slippage: false,\n    is_hardware_wallet: false,\n    swap_type:\n      transactionMeta.type &&\n      [TransactionType.swap, TransactionType.swapApproval].includes(\n        transactionMeta.type,\n      )\n        ? MetricsSwapType.SINGLE\n        : MetricsSwapType.CROSSCHAIN,\n    security_warnings: [],\n    price_impact: 0,\n    usd_quoted_gas: 0,\n    gas_included: false,\n    gas_included_7702: false,\n    quoted_time_minutes: 0,\n    usd_quoted_return: 0,\n    provider: '' as `${string}_${string}`,\n    actual_time_minutes: 0,\n    quote_vs_execution_ratio: 0,\n    quoted_vs_used_gas_ratio: 0,\n    usd_actual_return: 0,\n    usd_actual_gas: 0,\n    action_type: MetricsActionType.SWAPBRIDGE_V1,\n  };\n};\n"]}
         | 
| @@ -162,17 +162,17 @@ const toBatchTxParams = (disable7702, { chainId, gasLimit, ...trade }, { maxFeeP | |
| 162 162 | 
             
                };
         | 
| 163 163 | 
             
            };
         | 
| 164 164 | 
             
            exports.toBatchTxParams = toBatchTxParams;
         | 
| 165 | 
            -
            const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded,  | 
| 166 | 
            -
                const isGasless = gasIncluded ||  | 
| 165 | 
            +
            const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasIncluded7702, }, sentAmount, toTokenAmount, }, requireApproval = false, estimateGasFeeFn, }) => {
         | 
| 166 | 
            +
                const isGasless = gasIncluded || gasIncluded7702;
         | 
| 167 167 | 
             
                const selectedAccount = messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
         | 
| 168 168 | 
             
                if (!selectedAccount) {
         | 
| 169 169 | 
             
                    throw new Error('Failed to submit cross-chain swap batch transaction: unknown account in trade data');
         | 
| 170 170 | 
             
                }
         | 
| 171 171 | 
             
                const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(trade.chainId);
         | 
| 172 172 | 
             
                const networkClientId = messagingSystem.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
         | 
| 173 | 
            -
                // When an active quote has  | 
| 173 | 
            +
                // When an active quote has gasIncluded7702 set to true,
         | 
| 174 174 | 
             
                // enable 7702 gasless txs for smart accounts
         | 
| 175 | 
            -
                const disable7702 =  | 
| 175 | 
            +
                const disable7702 = gasIncluded7702 !== true;
         | 
| 176 176 | 
             
                const transactions = [];
         | 
| 177 177 | 
             
                if (resetApproval) {
         | 
| 178 178 | 
             
                    const gasFees = await (0, gas_1.calculateGasFees)(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId, isGasless ? txFee : undefined);
         | 
| @@ -203,6 +203,7 @@ const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, appro | |
| 203 203 | 
             
                });
         | 
| 204 204 | 
             
                const transactionParams = {
         | 
| 205 205 | 
             
                    disable7702,
         | 
| 206 | 
            +
                    isGasFeeIncluded: Boolean(gasIncluded7702),
         | 
| 206 207 | 
             
                    networkClientId,
         | 
| 207 208 | 
             
                    requireApproval,
         | 
| 208 209 | 
             
                    origin: 'metamask',
         | 
| @@ -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: hash ?? 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"]}
         | 
| 1 | 
            +
            {"version":3,"file":"transaction.cjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":";;;AAEA,mEAQqC;AACrC,iEAAmD;AACnD,uDAAiD;AAKjD,6EAI0C;AAC1C,2CAAsD;AACtD,+CAAyC;AACzC,+BAAkC;AAElC,mCAAyC;AAEzC,gDAA8C;AAMvC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAAjE,QAAA,gBAAgB,oBAAiD;AAEvE,MAAM,uBAAuB,GAAG,KAAK,EAC1C,eAAgD,EAChD,aAA6D,EAC7D,EAAE;IACF,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,IACE,aAAa,CAAC,QAAQ;QACtB,IAAA,6BAAS,EAAC,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC3D;QACA,MAAM,SAAS,GAAG,IAAI,wBAAS,CAC7B,MAAM,eAAe,CAAC,IAAI,CACxB,0CAA0C,EAC1C,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EACpC,UAAU,CACX,CACF,CAAC;QACF,MAAM,mBAAmB,GACvB,SAAS,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,mBAAmB,EAAE;YACvB,OAAO,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAA,uCAAmB,GAAE,EAAE,CAAC;SACnE;KACF;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAvBW,QAAA,uBAAuB,2BAuBlC;AAEK,MAAM,sBAAsB,GAAG,CACpC,aAA6C,EAC7C,EAAE;IACF,OAAO;QACL,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ;QACtC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC,UAAU;QAC1C,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW;QAC5C,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEK,MAAM,eAAe,GAAG,CAC7B,aACe,EACf,YAAqB,EAIrB,EAAE;IACF,OAAO;QACL,kBAAkB,EAAE,IAAA,sCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC;QACvE,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc;QACrD,iBAAiB,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QACtD,mBAAmB,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ;QAC1D,kBAAkB,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;QAExD,sBAAsB,EAAE,aAAa,CAAC,KAAK,CAAC,eAAe;QAC3D,sBAAsB,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;QAC5D,wBAAwB,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ;QAChE,uBAAuB,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO;QAE9D,OAAO,EAAE,IAAA,sCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3D,YAAY;QACZ,kFAAkF;QAClF,cAAc,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM;KAChD,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,eAAe,mBAyB1B;AAEK,MAAM,sBAAsB,GAAG,CACpC,YAGyB,EACzB,aAAsE,EACtE,eAAgF,EACvC,EAAE;IAC3C,MAAM,sBAAsB,GAAG,eAAe,CAAC,OAAO,CAAC;IACvD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC;IACT,oCAAoC;IACpC,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QACpC,IAAI,GAAG,YAAY,CAAC;KACrB;SAAM,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QAC3D,mEAAmE;QACnE,IACE,OAAO,YAAY,KAAK,QAAQ;YAChC,QAAQ,IAAI,YAAY;YACxB,YAAY,CAAC,MAAM;YACnB,OAAO,YAAY,CAAC,MAAM,KAAK,QAAQ,EACvC;YACA,oEAAoE;YACpE,IAAI;gBACF,YAAY,CAAC,MAAM,CAAC,SAAS;oBAC7B,YAAY,CAAC,MAAM,CAAC,IAAI;oBACxB,YAAY,CAAC,MAAM,CAAC,IAAI;oBACxB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;SAC9B;QACD,IACE,OAAO,YAAY,KAAK,QAAQ;YAChC,WAAW,IAAI,YAAY;YAC3B,YAAY,CAAC,SAAS;YACtB,OAAO,YAAY,CAAC,SAAS,KAAK,QAAQ,EAC1C;YACA,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC;SAC/B;KACF;IAED,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAA,gCAAY,EAC7B,aAAa,CAAC,KAAK,CAAC,UAAU,EAC9B,aAAa,CAAC,KAAK,CAAC,WAAW,CAChC,CAAC;IAEF,+DAA+D;IAC/D,OAAO;QACL,GAAG,IAAA,uBAAe,EAAC,aAAa,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,EAAE,EAAE,IAAI,IAAI,IAAA,SAAI,GAAE;QAClB,OAAO,EAAE,UAAU;QACnB,eAAe,EAAE,MAAM,IAAI,UAAU;QACrC,QAAQ,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE;QACrE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,wCAAe,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAe,CAAC,IAAI;QAChE,MAAM,EAAE,0CAAiB,CAAC,SAAS;QACnC,IAAI;QACJ,MAAM,EAAE,MAAM;QACd,mEAAmE;QACnE,QAAQ,EAAE,IAAI;QACd,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AA7DW,QAAA,sBAAsB,0BA6DjC;AAEK,MAAM,gBAAgB,GAAG,KAAK,EACnC,aAA6C,EAC7C,EAAE;IACF,IAAI,2BAAO,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE;QACpD,MAAM,QAAQ,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;QAC/C,QAAQ,CACN,sEAAsE,CACvE,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1C,UAAU,CAAC,OAAO,EAAE,0BAAc,CAAC,CACpC,CAAC;QACF,MAAM,WAAW,CAAC;KACnB;AACH,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B;AAEF;;;;;;GAMG;AACI,MAAM,+BAA+B,GAAG,KAAK,EAClD,eAAwB,EACxB,EAAE;IACF,IAAI,eAAe,EAAE;QACnB,MAAM,yBAAyB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACxD,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAC1B,CAAC;QACF,MAAM,yBAAyB,CAAC;KACjC;AACH,CAAC,CAAC;AATW,QAAA,+BAA+B,mCAS1C;AAEK,MAAM,gBAAgB,GAAG,CAC9B,aAAsE,EACtE,eAAgF,EAChF,EAAE;IACF,MAAM,WAAW,GAAG,IAAA,SAAI,GAAE,CAAC;IAE3B,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAW;QAClD,OAAO,EAAE,iBAA0B;QACnC,OAAO,EAAE;YACP,EAAE,EAAE,WAAW;YACf,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,2CAA2C;YACnD,MAAM,EAAE;gBACN,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE;gBAC7C,WAAW,EAAE,aAAa,CAAC,KAAK;gBAChC,KAAK,EAAE,sBAAQ,CAAC,OAAO;aACxB;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,gBAAgB,oBAqB3B;AAEK,MAAM,eAAe,GAAG,CAC7B,WAAoB,EACpB,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAU,EACvC,EACE,YAAY,EACZ,oBAAoB,EACpB,GAAG,GACoE,EACjD,EAAE;IAC1B,MAAM,MAAM,GAAG;QACb,GAAG,KAAK;QACR,IAAI,EAAE,KAAK,CAAC,IAAqB;QACjC,EAAE,EAAE,KAAK,CAAC,EAAmB;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAsB;KACpC,CAAC;IACF,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,MAAM,CAAC;KACf;IAED,OAAO;QACL,GAAG,MAAM;QACT,GAAG,EAAE,IAAA,wBAAK,EAAC,GAAG,IAAI,CAAC,CAAC;QACpB,YAAY,EAAE,IAAA,wBAAK,EAAC,YAAY,IAAI,CAAC,CAAC;QACtC,oBAAoB,EAAE,IAAA,wBAAK,EAAC,oBAAoB,IAAI,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,eAAe,mBAyB1B;AAEK,MAAM,4BAA4B,GAAG,KAAK,EAAE,EACjD,eAAe,EACf,UAAU,EACV,QAAQ,EACR,aAAa,EACb,KAAK,EACL,aAAa,EAAE,EACb,KAAK,EAAE,EACL,OAAO,EAAE,EAAE,KAAK,EAAE,EAClB,WAAW,EACX,eAAe,GAChB,EACD,UAAU,EACV,aAAa,GACd,EACD,eAAe,GAAG,KAAK,EACvB,gBAAgB,GAUjB,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,WAAW,IAAI,eAAe,CAAC;IACjD,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAC1C,wCAAwC,EACxC,KAAK,CAAC,IAAI,CACX,CAAC;IACF,IAAI,CAAC,eAAe,EAAE;QACpB,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;KACH;IACD,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAC1C,gDAAgD,EAChD,UAAU,CACX,CAAC;IAEF,wDAAwD;IACxD,6CAA6C;IAC7C,MAAM,WAAW,GAAG,eAAe,KAAK,IAAI,CAAC;IAC7C,MAAM,YAAY,GAAoC,EAAE,CAAC;IACzD,IAAI,aAAa,EAAE;QACjB,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAgB,EACpC,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,UAAU,EACV,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC9B,CAAC;QACF,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,UAAU;gBACd,CAAC,CAAC,wCAAe,CAAC,cAAc;gBAChC,CAAC,CAAC,wCAAe,CAAC,YAAY;YAChC,MAAM,EAAE,IAAA,uBAAe,EAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC;SAC7D,CAAC,CAAC;KACJ;IACD,IAAI,QAAQ,EAAE;QACZ,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAgB,EACpC,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,UAAU,EACV,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC9B,CAAC;QACF,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,UAAU;gBACd,CAAC,CAAC,wCAAe,CAAC,cAAc;gBAChC,CAAC,CAAC,wCAAe,CAAC,YAAY;YAChC,MAAM,EAAE,IAAA,uBAAe,EAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC;SACxD,CAAC,CAAC;KACJ;IACD,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAgB,EACpC,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,KAAK,EACL,eAAe,EACf,UAAU,EACV,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC9B,CAAC;IACF,YAAY,CAAC,IAAI,CAAC;QAChB,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,wCAAe,CAAC,MAAM,CAAC,CAAC,CAAC,wCAAe,CAAC,IAAI;QAChE,MAAM,EAAE,IAAA,uBAAe,EAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC;QACpD,gBAAgB,EAAE;YAChB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE;YAChD,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE;SACtD;KACF,CAAC,CAAC;IACH,MAAM,iBAAiB,GAEhB;QACL,WAAW;QACX,gBAAgB,EAAE,OAAO,CAAC,eAAe,CAAC;QAC1C,eAAe;QACf,eAAe;QACf,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,KAAK,CAAC,IAAqB;QACjC,YAAY;KACb,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AA/GW,QAAA,4BAA4B,gCA+GvC;AAEK,MAAM,gCAAgC,GAAG,CAAC,EAC/C,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,YAAY,GAMb,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAC9B,gCAAgC,CACjC,CAAC,YAAY,CAAC;IACf,MAAM,OAAO,GAGT;QACF,YAAY,EAAE,SAAS;QACvB,SAAS,EAAE,SAAS;KACrB,CAAC;IAEF,oEAAoE;IACpE,qFAAqF;IACrF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;QACxD,qFAAqF;QACrF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;YAC7B,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO,EAAE;gBAC1B,OAAO,KAAK,CAAC;aACd;YAED,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,iBAAiB,GACrB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBAC3C,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC3C,OAAO,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAEhC,IAAI,iBAAiB,EAAE;gBACrB,oEAAoE;gBACpE,+DAA+D;gBAC/D,IACE,MAAM,KAAK,wCAAe,CAAC,IAAI;oBAC/B,EAAE,CAAC,IAAI,KAAK,wCAAe,CAAC,KAAK,EACjC;oBACA,OAAO,IAAI,CAAC;iBACb;gBACD,sDAAsD;gBACtD,IACE,MAAM,KAAK,wCAAe,CAAC,YAAY;oBACvC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,EAC3B;oBACA,OAAO,IAAI,CAAC;iBACb;aACF;YAED,mDAAmD;YACnD,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE;YACV,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAyB,EAAE,CAAC;YACjE,mBAAmB,CAAC,SAAS,EAAE,qBAAqB,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,CACL,CAAC,wCAAe,CAAC,cAAc,EAAE,wCAAe,CAAC,YAAY,CAAC,CAAC,QAAQ,CACrE,MAAyB,CAC1B;gBACC,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,WAAW,CAChB,GAAG,SAAS,CAAC;SACf;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AA1EW,QAAA,gCAAgC,oCA0E3C","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: hash ?? 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      gasIncluded7702,\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 || gasIncluded7702;\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 gasIncluded7702 set to true,\n  // enable 7702 gasless txs for smart accounts\n  const disable7702 = gasIncluded7702 !== 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    isGasFeeIncluded: Boolean(gasIncluded7702),\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"]}
         | 
| @@ -145,7 +145,7 @@ export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<strin | |
| 145 145 | 
             
                        destChainId?: number | undefined;
         | 
| 146 146 | 
             
                    } | undefined;
         | 
| 147 147 | 
             
                    gasIncluded?: boolean | undefined;
         | 
| 148 | 
            -
                     | 
| 148 | 
            +
                    gasIncluded7702?: boolean | undefined;
         | 
| 149 149 | 
             
                    priceData?: {
         | 
| 150 150 | 
             
                        totalFromAmountUsd?: string | undefined;
         | 
| 151 151 | 
             
                        totalToAmountUsd?: string | undefined;
         | 
| @@ -199,7 +199,7 @@ export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit | |
| 199 199 | 
             
                maxPriorityFeePerGas?: string | undefined;
         | 
| 200 200 | 
             
                gas?: string | undefined;
         | 
| 201 201 | 
             
            }) => BatchTransactionParams;
         | 
| 202 | 
            -
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded,  | 
| 202 | 
            +
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasIncluded7702, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         | 
| 203 203 | 
             
                messagingSystem: BridgeStatusControllerMessenger;
         | 
| 204 204 | 
             
                isBridgeTx: boolean;
         | 
| 205 205 | 
             
                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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;; | 
| 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;;;;;;;;;;;;;;;;;;;;iFAyFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEhB,CAAC"}
         | 
| @@ -145,7 +145,7 @@ export declare const getStatusRequestParams: (quoteResponse: QuoteResponse<strin | |
| 145 145 | 
             
                        destChainId?: number | undefined;
         | 
| 146 146 | 
             
                    } | undefined;
         | 
| 147 147 | 
             
                    gasIncluded?: boolean | undefined;
         | 
| 148 | 
            -
                     | 
| 148 | 
            +
                    gasIncluded7702?: boolean | undefined;
         | 
| 149 149 | 
             
                    priceData?: {
         | 
| 150 150 | 
             
                        totalFromAmountUsd?: string | undefined;
         | 
| 151 151 | 
             
                        totalToAmountUsd?: string | undefined;
         | 
| @@ -199,7 +199,7 @@ export declare const toBatchTxParams: (disable7702: boolean, { chainId, gasLimit | |
| 199 199 | 
             
                maxPriorityFeePerGas?: string | undefined;
         | 
| 200 200 | 
             
                gas?: string | undefined;
         | 
| 201 201 | 
             
            }) => BatchTransactionParams;
         | 
| 202 | 
            -
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded,  | 
| 202 | 
            +
            export declare const getAddTransactionBatchParams: ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasIncluded7702, }, sentAmount, toTokenAmount, }, requireApproval, estimateGasFeeFn, }: {
         | 
| 203 203 | 
             
                messagingSystem: BridgeStatusControllerMessenger;
         | 
| 204 204 | 
             
                isBridgeTx: boolean;
         | 
| 205 205 | 
             
                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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;; | 
| 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;;;;;;;;;;;;;;;;;;;;iFAyFxE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;yBAOtB,OAAO,sBAAsB,SAAS,CAAC,iBAAiB;aACpE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEhB,CAAC"}
         | 
| @@ -150,17 +150,17 @@ 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,  | 
| 154 | 
            -
                const isGasless = gasIncluded ||  | 
| 153 | 
            +
            export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, gasIncluded7702, }, sentAmount, toTokenAmount, }, requireApproval = false, estimateGasFeeFn, }) => {
         | 
| 154 | 
            +
                const isGasless = gasIncluded || gasIncluded7702;
         | 
| 155 155 | 
             
                const selectedAccount = messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
         | 
| 156 156 | 
             
                if (!selectedAccount) {
         | 
| 157 157 | 
             
                    throw new Error('Failed to submit cross-chain swap batch transaction: unknown account in trade data');
         | 
| 158 158 | 
             
                }
         | 
| 159 159 | 
             
                const hexChainId = formatChainIdToHex(trade.chainId);
         | 
| 160 160 | 
             
                const networkClientId = messagingSystem.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
         | 
| 161 | 
            -
                // When an active quote has  | 
| 161 | 
            +
                // When an active quote has gasIncluded7702 set to true,
         | 
| 162 162 | 
             
                // enable 7702 gasless txs for smart accounts
         | 
| 163 | 
            -
                const disable7702 =  | 
| 163 | 
            +
                const disable7702 = gasIncluded7702 !== true;
         | 
| 164 164 | 
             
                const transactions = [];
         | 
| 165 165 | 
             
                if (resetApproval) {
         | 
| 166 166 | 
             
                    const gasFees = await calculateGasFees(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId, isGasless ? txFee : undefined);
         | 
| @@ -191,6 +191,7 @@ export const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx | |
| 191 191 | 
             
                });
         | 
| 192 192 | 
             
                const transactionParams = {
         | 
| 193 193 | 
             
                    disable7702,
         | 
| 194 | 
            +
                    isGasFeeIncluded: Boolean(gasIncluded7702),
         | 
| 194 195 | 
             
                    networkClientId,
         | 
| 195 196 | 
             
                    requireApproval,
         | 
| 196 197 | 
             
                    origin: 'metamask',
         | 
| @@ -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: hash ?? 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"]}
         | 
| 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: hash ?? 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      gasIncluded7702,\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 || gasIncluded7702;\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 gasIncluded7702 set to true,\n  // enable 7702 gasless txs for smart accounts\n  const disable7702 = gasIncluded7702 !== 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    isGasFeeIncluded: Boolean(gasIncluded7702),\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"]}
         |