@metamask/bridge-status-controller 33.0.0 → 35.0.0
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 +31 -1
- package/dist/bridge-status-controller.cjs +142 -110
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +4 -4
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +4 -4
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +144 -112
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/gas.cjs +34 -1
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +7 -0
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +7 -0
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +32 -0
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/metrics.cjs +9 -4
- package/dist/utils/metrics.cjs.map +1 -1
- package/dist/utils/metrics.d.cts +1 -1
- package/dist/utils/metrics.d.cts.map +1 -1
- package/dist/utils/metrics.d.mts +1 -1
- package/dist/utils/metrics.d.mts.map +1 -1
- package/dist/utils/metrics.mjs +9 -4
- package/dist/utils/metrics.mjs.map +1 -1
- package/dist/utils/transaction.cjs +100 -29
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +80 -34
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +80 -34
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +96 -28
- package/dist/utils/transaction.mjs.map +1 -1
- package/package.json +8 -9
package/dist/utils/gas.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { toHex } from "@metamask/controller-utils";
|
|
1
2
|
import { BigNumber } from "bignumber.js";
|
|
2
3
|
const getTransaction1559GasFeeEstimates = (txGasFeeEstimates, estimatedBaseFee) => {
|
|
3
4
|
const { maxFeePerGas, maxPriorityFeePerGas } = txGasFeeEstimates?.high ?? {};
|
|
@@ -24,4 +25,35 @@ export const getTxGasEstimates = ({ txGasFeeEstimates, networkGasFeeEstimates, }
|
|
|
24
25
|
const { estimatedBaseFee = '0' } = networkGasFeeEstimates;
|
|
25
26
|
return getTransaction1559GasFeeEstimates(txGasFeeEstimates, estimatedBaseFee);
|
|
26
27
|
};
|
|
28
|
+
export const calculateGasFees = async (disable7702, messagingSystem, estimateGasFeeFn, { chainId: _, gasLimit, ...trade }, networkClientId, chainId, txFee) => {
|
|
29
|
+
if (!disable7702) {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
if (txFee) {
|
|
33
|
+
return { ...txFee, gas: gasLimit?.toString() };
|
|
34
|
+
}
|
|
35
|
+
const transactionParams = {
|
|
36
|
+
...trade,
|
|
37
|
+
gas: gasLimit?.toString(),
|
|
38
|
+
data: trade.data,
|
|
39
|
+
to: trade.to,
|
|
40
|
+
value: trade.value,
|
|
41
|
+
};
|
|
42
|
+
const { gasFeeEstimates } = messagingSystem.call('GasFeeController:getState');
|
|
43
|
+
const { estimates: txGasFeeEstimates } = await estimateGasFeeFn({
|
|
44
|
+
transactionParams,
|
|
45
|
+
chainId,
|
|
46
|
+
networkClientId,
|
|
47
|
+
});
|
|
48
|
+
const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({
|
|
49
|
+
networkGasFeeEstimates: gasFeeEstimates,
|
|
50
|
+
txGasFeeEstimates,
|
|
51
|
+
});
|
|
52
|
+
const maxGasLimit = toHex(transactionParams.gas ?? 0);
|
|
53
|
+
return {
|
|
54
|
+
maxFeePerGas,
|
|
55
|
+
maxPriorityFeePerGas,
|
|
56
|
+
gas: maxGasLimit,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
27
59
|
//# sourceMappingURL=gas.mjs.map
|
package/dist/utils/gas.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas.mjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gas.mjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,mCAAmC;AAUnD,OAAO,EAAE,SAAS,EAAE,qBAAqB;AAIzC,MAAM,iCAAiC,GAAG,CACxC,iBAA2C,EAC3C,gBAAwB,EACxB,EAAE;IACF,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC;IAE7E,MAAM,wBAAwB,GAAG,oBAAoB;QACnD,CAAC,CAAC,IAAI,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;aAChC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;aACd,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;QACnC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,wBAAwB;QACxB,YAAY;QACZ,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,iBAAiB,EACjB,sBAAsB,GAMvB,EAAE,EAAE;IACH,MAAM,EAAE,gBAAgB,GAAG,GAAG,EAAE,GAAG,sBAAyC,CAAC;IAC7E,OAAO,iCAAiC,CACtC,iBAAwD,EACxD,gBAAgB,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,WAAoB,EACpB,eAAgD,EAChD,gBAAuE,EACvE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAU,EAC1C,eAAuB,EACvB,OAAY,EACZ,KAA8D,EAC9D,EAAE;IACF,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,EAAE,CAAC;KACX;IACD,IAAI,KAAK,EAAE;QACT,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;KAChD;IACD,MAAM,iBAAiB,GAAG;QACxB,GAAG,KAAK;QACR,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,KAAK,CAAC,IAAqB;QACjC,EAAE,EAAE,KAAK,CAAC,EAAmB;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAsB;KACpC,CAAC;IACF,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC9E,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,gBAAgB,CAAC;QAC9D,iBAAiB;QACjB,OAAO;QACP,eAAe;KAChB,CAAC,CAAC;IACH,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,GAAG,iBAAiB,CAAC;QAC/D,sBAAsB,EAAE,eAAe;QACvC,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO;QACL,YAAY;QACZ,oBAAoB;QACpB,GAAG,EAAE,WAAW;KACjB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { TxData } from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport type {\n GasFeeEstimates,\n GasFeeState,\n} from '@metamask/gas-fee-controller';\nimport type {\n FeeMarketGasFeeEstimates,\n TransactionController,\n} from '@metamask/transaction-controller';\nimport type { Hex } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type { BridgeStatusControllerMessenger } from '../types';\n\nconst getTransaction1559GasFeeEstimates = (\n txGasFeeEstimates: FeeMarketGasFeeEstimates,\n estimatedBaseFee: string,\n) => {\n const { maxFeePerGas, maxPriorityFeePerGas } = txGasFeeEstimates?.high ?? {};\n\n const baseAndPriorityFeePerGas = maxPriorityFeePerGas\n ? new BigNumber(estimatedBaseFee, 10)\n .times(10 ** 9)\n .plus(maxPriorityFeePerGas, 16)\n : undefined;\n\n return {\n baseAndPriorityFeePerGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n};\n\n/**\n * Get the gas fee estimates for a transaction\n *\n * @param params - The parameters for the gas fee estimates\n * @param params.txGasFeeEstimates - The gas fee estimates for the transaction (TransactionController)\n * @param params.networkGasFeeEstimates - The gas fee estimates for the network (GasFeeController)\n * @returns The gas fee estimates for the transaction\n */\nexport const getTxGasEstimates = ({\n txGasFeeEstimates,\n networkGasFeeEstimates,\n}: {\n txGasFeeEstimates: Awaited<\n ReturnType<TransactionController['estimateGasFee']>\n >['estimates'];\n networkGasFeeEstimates: GasFeeState['gasFeeEstimates'];\n}) => {\n const { estimatedBaseFee = '0' } = networkGasFeeEstimates as GasFeeEstimates;\n return getTransaction1559GasFeeEstimates(\n txGasFeeEstimates as unknown as FeeMarketGasFeeEstimates,\n estimatedBaseFee,\n );\n};\n\nexport const calculateGasFees = async (\n disable7702: boolean,\n messagingSystem: BridgeStatusControllerMessenger,\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee,\n { chainId: _, gasLimit, ...trade }: TxData,\n networkClientId: string,\n chainId: Hex,\n txFee?: { maxFeePerGas: string; maxPriorityFeePerGas: string },\n) => {\n if (!disable7702) {\n return {};\n }\n if (txFee) {\n return { ...txFee, gas: gasLimit?.toString() };\n }\n const transactionParams = {\n ...trade,\n gas: gasLimit?.toString(),\n data: trade.data as `0x${string}`,\n to: trade.to as `0x${string}`,\n value: trade.value as `0x${string}`,\n };\n const { gasFeeEstimates } = messagingSystem.call('GasFeeController:getState');\n const { estimates: txGasFeeEstimates } = await estimateGasFeeFn({\n transactionParams,\n chainId,\n networkClientId,\n });\n const { maxFeePerGas, maxPriorityFeePerGas } = getTxGasEstimates({\n networkGasFeeEstimates: gasFeeEstimates,\n txGasFeeEstimates,\n });\n const maxGasLimit = toHex(transactionParams.gas ?? 0);\n\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas: maxGasLimit,\n };\n};\n"]}
|
package/dist/utils/metrics.cjs
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getEVMTxPropertiesFromTransactionMeta = exports.getRequestMetadataFromHistory = exports.getTradeDataFromHistory = exports.getPriceImpactFromQuote = exports.getTradeDataFromQuote = exports.getRequestParamFromHistory = exports.getFinalizedTxProperties = exports.getTxStatusesFromHistory = void 0;
|
|
4
4
|
const bridge_controller_1 = require("@metamask/bridge-controller");
|
|
5
5
|
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
6
|
-
const getTxStatusesFromHistory = ({ status, hasApprovalTx, quote, }) => {
|
|
6
|
+
const getTxStatusesFromHistory = ({ status, hasApprovalTx, approvalTxId, quote, }) => {
|
|
7
7
|
const source_transaction = status.srcChain.txHash
|
|
8
8
|
? bridge_controller_1.StatusTypes.COMPLETE
|
|
9
9
|
: bridge_controller_1.StatusTypes.PENDING;
|
|
@@ -22,7 +22,7 @@ const getTxStatusesFromHistory = ({ status, hasApprovalTx, quote, }) => {
|
|
|
22
22
|
allowance_reset_transaction: isEthUsdtTx
|
|
23
23
|
? allowance_reset_transaction
|
|
24
24
|
: undefined,
|
|
25
|
-
approval_transaction: hasApprovalTx ? approval_transaction : undefined,
|
|
25
|
+
approval_transaction: hasApprovalTx || approvalTxId ? approval_transaction : undefined,
|
|
26
26
|
source_transaction,
|
|
27
27
|
destination_transaction: status.status === bridge_controller_1.StatusTypes.FAILED
|
|
28
28
|
? bridge_controller_1.StatusTypes.FAILED
|
|
@@ -98,7 +98,11 @@ exports.getRequestMetadataFromHistory = getRequestMetadataFromHistory;
|
|
|
98
98
|
*/
|
|
99
99
|
const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
100
100
|
return {
|
|
101
|
-
source_transaction:
|
|
101
|
+
source_transaction: [
|
|
102
|
+
transaction_controller_1.TransactionStatus.failed,
|
|
103
|
+
transaction_controller_1.TransactionStatus.dropped,
|
|
104
|
+
transaction_controller_1.TransactionStatus.rejected,
|
|
105
|
+
].includes(transactionMeta.status)
|
|
102
106
|
? bridge_controller_1.StatusTypes.FAILED
|
|
103
107
|
: bridge_controller_1.StatusTypes.COMPLETE,
|
|
104
108
|
error_message: transactionMeta.error?.message
|
|
@@ -114,7 +118,8 @@ const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
114
118
|
token_address_destination: (0, bridge_controller_1.formatAddressToAssetId)(transactionMeta.destinationTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
115
119
|
custom_slippage: false,
|
|
116
120
|
is_hardware_wallet: false,
|
|
117
|
-
swap_type: transactionMeta.type
|
|
121
|
+
swap_type: transactionMeta.type &&
|
|
122
|
+
[transaction_controller_1.TransactionType.swap, transaction_controller_1.TransactionType.swapApproval].includes(transactionMeta.type)
|
|
118
123
|
? bridge_controller_1.MetricsSwapType.SINGLE
|
|
119
124
|
: bridge_controller_1.MetricsSwapType.CROSSCHAIN,
|
|
120
125
|
security_warnings: [],
|
|
@@ -1 +1 @@
|
|
|
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} 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 type { BridgeHistoryItem } from 'src/types';\n\nimport type { QuoteFetchData } from '../../../bridge-controller/src/utils/metrics/types';\n\nexport const getTxStatusesFromHistory = ({\n status,\n hasApprovalTx,\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: hasApprovalTx ? approval_transaction : undefined,\n source_transaction,\n destination_transaction:\n status.status === StatusTypes.FAILED\n ? StatusTypes.FAILED\n : destination_transaction,\n };\n};\n\nexport const getFinalizedTxProperties = (historyItem: BridgeHistoryItem) => {\n return {\n actual_time_minutes:\n historyItem.completionTime && historyItem.startTime\n ? (historyItem.completionTime - historyItem.startTime) / 60000\n : 0,\n usd_actual_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0), // TODO calculate based on USD price at completion time\n usd_actual_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0), // TODO calculate based on USD price at completion time\n quote_vs_execution_ratio: 1, // TODO calculate based on USD price at completion time\n quoted_vs_used_gas_ratio: 1, // TODO calculate based on USD price at completion time\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?.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\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 transactionMeta.status === TransactionStatus.failed\n ? StatusTypes.FAILED\n : StatusTypes.COMPLETE,\n error_message: transactionMeta.error?.message\n ? 'Failed to finalize swap tx'\n : undefined,\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 === TransactionType.swap\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} 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 type { BridgeHistoryItem } from 'src/types';\n\nimport type { QuoteFetchData } from '../../../bridge-controller/src/utils/metrics/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\nexport const getFinalizedTxProperties = (historyItem: BridgeHistoryItem) => {\n return {\n actual_time_minutes:\n historyItem.completionTime && historyItem.startTime\n ? (historyItem.completionTime - historyItem.startTime) / 60000\n : 0,\n usd_actual_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0), // TODO calculate based on USD price at completion time\n usd_actual_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0), // TODO calculate based on USD price at completion time\n quote_vs_execution_ratio: 1, // TODO calculate based on USD price at completion time\n quoted_vs_used_gas_ratio: 1, // TODO calculate based on USD price at completion time\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?.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\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 ? 'Failed to finalize swap tx'\n : undefined,\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"]}
|
package/dist/utils/metrics.d.cts
CHANGED
|
@@ -4,7 +4,7 @@ import { type TxStatusData, StatusTypes, type RequestParams, type TradeData, typ
|
|
|
4
4
|
import { type TransactionMeta } from "@metamask/transaction-controller";
|
|
5
5
|
import type { BridgeHistoryItem } from "src/types";
|
|
6
6
|
import type { QuoteFetchData } from "../../../bridge-controller/src/utils/metrics/types.cjs";
|
|
7
|
-
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
7
|
+
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, approvalTxId, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
8
8
|
export declare const getFinalizedTxProperties: (historyItem: BridgeHistoryItem) => {
|
|
9
9
|
actual_time_minutes: number;
|
|
10
10
|
usd_actual_return: number;
|
|
@@ -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,EACd,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;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,+DAA2D;AAEzF,eAAO,MAAM,wBAAwB,
|
|
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,EACd,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;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,+DAA2D;AAEzF,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF,eAAO,MAAM,wBAAwB,gBAAiB,iBAAiB;;;;;;CAWtE,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D,SAUF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBACrB,iBAAiB,KAC7B,SAUF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDjC,CAAC"}
|
package/dist/utils/metrics.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { type TxStatusData, StatusTypes, type RequestParams, type TradeData, typ
|
|
|
4
4
|
import { type TransactionMeta } from "@metamask/transaction-controller";
|
|
5
5
|
import type { BridgeHistoryItem } from "src/types";
|
|
6
6
|
import type { QuoteFetchData } from "../../../bridge-controller/src/utils/metrics/types.mjs";
|
|
7
|
-
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
7
|
+
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, approvalTxId, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
8
8
|
export declare const getFinalizedTxProperties: (historyItem: BridgeHistoryItem) => {
|
|
9
9
|
actual_time_minutes: number;
|
|
10
10
|
usd_actual_return: number;
|
|
@@ -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,EACd,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;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,+DAA2D;AAEzF,eAAO,MAAM,wBAAwB,
|
|
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,EACd,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;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,+DAA2D;AAEzF,eAAO,MAAM,wBAAwB,oDAKlC,iBAAiB,KAAG,YA6BtB,CAAC;AAEF,eAAO,MAAM,wBAAwB,gBAAiB,iBAAiB;;;;;;CAWtE,CAAC;AAEF,eAAO,MAAM,0BAA0B,gBACxB,iBAAiB,KAC7B,aASF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,cAAc,MAAM,GAAG,MAAM,CAAC,GAAG,aAAa,KAC5D,SAUF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF,eAAO,MAAM,uBAAuB,gBACrB,iBAAiB,KAC7B,SAUF,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;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDjC,CAAC"}
|
package/dist/utils/metrics.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StatusTypes, formatChainIdToHex, isEthUsdt, formatChainIdToCaip, formatProviderLabel, isCustomSlippage, getSwapType, isHardwareWallet, formatAddressToAssetId, MetricsActionType, MetricsSwapType } from "@metamask/bridge-controller";
|
|
2
2
|
import { TransactionStatus, TransactionType } from "@metamask/transaction-controller";
|
|
3
|
-
export const getTxStatusesFromHistory = ({ status, hasApprovalTx, quote, }) => {
|
|
3
|
+
export const getTxStatusesFromHistory = ({ status, hasApprovalTx, approvalTxId, quote, }) => {
|
|
4
4
|
const source_transaction = status.srcChain.txHash
|
|
5
5
|
? StatusTypes.COMPLETE
|
|
6
6
|
: StatusTypes.PENDING;
|
|
@@ -19,7 +19,7 @@ export const getTxStatusesFromHistory = ({ status, hasApprovalTx, quote, }) => {
|
|
|
19
19
|
allowance_reset_transaction: isEthUsdtTx
|
|
20
20
|
? allowance_reset_transaction
|
|
21
21
|
: undefined,
|
|
22
|
-
approval_transaction: hasApprovalTx ? approval_transaction : undefined,
|
|
22
|
+
approval_transaction: hasApprovalTx || approvalTxId ? approval_transaction : undefined,
|
|
23
23
|
source_transaction,
|
|
24
24
|
destination_transaction: status.status === StatusTypes.FAILED
|
|
25
25
|
? StatusTypes.FAILED
|
|
@@ -88,7 +88,11 @@ export const getRequestMetadataFromHistory = (historyItem, account) => {
|
|
|
88
88
|
*/
|
|
89
89
|
export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
90
90
|
return {
|
|
91
|
-
source_transaction:
|
|
91
|
+
source_transaction: [
|
|
92
|
+
TransactionStatus.failed,
|
|
93
|
+
TransactionStatus.dropped,
|
|
94
|
+
TransactionStatus.rejected,
|
|
95
|
+
].includes(transactionMeta.status)
|
|
92
96
|
? StatusTypes.FAILED
|
|
93
97
|
: StatusTypes.COMPLETE,
|
|
94
98
|
error_message: transactionMeta.error?.message
|
|
@@ -104,7 +108,8 @@ export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
104
108
|
token_address_destination: formatAddressToAssetId(transactionMeta.destinationTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
105
109
|
custom_slippage: false,
|
|
106
110
|
is_hardware_wallet: false,
|
|
107
|
-
swap_type: transactionMeta.type
|
|
111
|
+
swap_type: transactionMeta.type &&
|
|
112
|
+
[TransactionType.swap, TransactionType.swapApproval].includes(transactionMeta.type)
|
|
108
113
|
? MetricsSwapType.SINGLE
|
|
109
114
|
: MetricsSwapType.CROSSCHAIN,
|
|
110
115
|
security_warnings: [],
|
|
@@ -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} 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 type { BridgeHistoryItem } from 'src/types';\n\nimport type { QuoteFetchData } from '../../../bridge-controller/src/utils/metrics/types';\n\nexport const getTxStatusesFromHistory = ({\n status,\n hasApprovalTx,\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: hasApprovalTx ? approval_transaction : undefined,\n source_transaction,\n destination_transaction:\n status.status === StatusTypes.FAILED\n ? StatusTypes.FAILED\n : destination_transaction,\n };\n};\n\nexport const getFinalizedTxProperties = (historyItem: BridgeHistoryItem) => {\n return {\n actual_time_minutes:\n historyItem.completionTime && historyItem.startTime\n ? (historyItem.completionTime - historyItem.startTime) / 60000\n : 0,\n usd_actual_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0), // TODO calculate based on USD price at completion time\n usd_actual_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0), // TODO calculate based on USD price at completion time\n quote_vs_execution_ratio: 1, // TODO calculate based on USD price at completion time\n quoted_vs_used_gas_ratio: 1, // TODO calculate based on USD price at completion time\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?.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\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 transactionMeta.status === TransactionStatus.failed\n ? StatusTypes.FAILED\n : StatusTypes.COMPLETE,\n error_message: transactionMeta.error?.message\n ? 'Failed to finalize swap tx'\n : undefined,\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 === TransactionType.swap\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} 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 type { BridgeHistoryItem } from 'src/types';\n\nimport type { QuoteFetchData } from '../../../bridge-controller/src/utils/metrics/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\nexport const getFinalizedTxProperties = (historyItem: BridgeHistoryItem) => {\n return {\n actual_time_minutes:\n historyItem.completionTime && historyItem.startTime\n ? (historyItem.completionTime - historyItem.startTime) / 60000\n : 0,\n usd_actual_return: Number(historyItem.pricingData?.quotedReturnInUsd ?? 0), // TODO calculate based on USD price at completion time\n usd_actual_gas: Number(historyItem.pricingData?.quotedGasInUsd ?? 0), // TODO calculate based on USD price at completion time\n quote_vs_execution_ratio: 1, // TODO calculate based on USD price at completion time\n quoted_vs_used_gas_ratio: 1, // TODO calculate based on USD price at completion time\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?.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\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 ? 'Failed to finalize swap tx'\n : undefined,\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,14 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.findAndUpdateTransactionsInBatch = exports.getAddTransactionBatchParams = exports.toBatchTxParams = exports.getClientRequest = exports.handleLineaDelay = exports.handleSolanaTxResponse = exports.getTxMetaFields = exports.getStatusRequestParams = exports.getUSDTAllowanceResetTx = exports.generateActionId = void 0;
|
|
4
4
|
const bridge_controller_1 = require("@metamask/bridge-controller");
|
|
5
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
5
6
|
const keyring_api_1 = require("@metamask/keyring-api");
|
|
6
7
|
const transaction_controller_1 = require("@metamask/transaction-controller");
|
|
7
8
|
const utils_1 = require("@metamask/utils");
|
|
9
|
+
const bignumber_js_1 = require("bignumber.js");
|
|
8
10
|
const uuid_1 = require("uuid");
|
|
11
|
+
const gas_1 = require("./gas.cjs");
|
|
9
12
|
const constants_1 = require("../constants.cjs");
|
|
10
13
|
const generateActionId = () => (Date.now() + Math.random()).toString();
|
|
11
14
|
exports.generateActionId = generateActionId;
|
|
15
|
+
const getUSDTAllowanceResetTx = async (messagingSystem, quoteResponse) => {
|
|
16
|
+
const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(quoteResponse.quote.srcChainId);
|
|
17
|
+
if (quoteResponse.approval &&
|
|
18
|
+
(0, bridge_controller_1.isEthUsdt)(hexChainId, quoteResponse.quote.srcAsset.address)) {
|
|
19
|
+
const allowance = new bignumber_js_1.BigNumber(await messagingSystem.call('BridgeController:getBridgeERC20Allowance', quoteResponse.quote.srcAsset.address, hexChainId));
|
|
20
|
+
const shouldResetApproval = allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);
|
|
21
|
+
if (shouldResetApproval) {
|
|
22
|
+
return { ...quoteResponse.approval, data: (0, bridge_controller_1.getEthUsdtResetData)() };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
};
|
|
27
|
+
exports.getUSDTAllowanceResetTx = getUSDTAllowanceResetTx;
|
|
12
28
|
const getStatusRequestParams = (quoteResponse) => {
|
|
13
29
|
return {
|
|
14
30
|
bridgeId: quoteResponse.quote.bridgeId,
|
|
@@ -95,34 +111,6 @@ const handleLineaDelay = async (quoteResponse) => {
|
|
|
95
111
|
}
|
|
96
112
|
};
|
|
97
113
|
exports.handleLineaDelay = handleLineaDelay;
|
|
98
|
-
const getKeyringRequest = (quoteResponse, selectedAccount) => {
|
|
99
|
-
const keyringReqId = (0, uuid_1.v4)();
|
|
100
|
-
const snapRequestId = (0, uuid_1.v4)();
|
|
101
|
-
return {
|
|
102
|
-
origin: 'metamask',
|
|
103
|
-
snapId: selectedAccount.metadata.snap?.id,
|
|
104
|
-
handler: 'onKeyringRequest',
|
|
105
|
-
request: {
|
|
106
|
-
id: keyringReqId,
|
|
107
|
-
jsonrpc: '2.0',
|
|
108
|
-
method: 'keyring_submitRequest',
|
|
109
|
-
params: {
|
|
110
|
-
request: {
|
|
111
|
-
params: {
|
|
112
|
-
account: { address: selectedAccount.address },
|
|
113
|
-
transaction: quoteResponse.trade,
|
|
114
|
-
scope: keyring_api_1.SolScope.Mainnet,
|
|
115
|
-
},
|
|
116
|
-
method: 'signAndSendTransaction',
|
|
117
|
-
},
|
|
118
|
-
id: snapRequestId,
|
|
119
|
-
account: selectedAccount.id,
|
|
120
|
-
scope: keyring_api_1.SolScope.Mainnet,
|
|
121
|
-
},
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
};
|
|
125
|
-
exports.getKeyringRequest = getKeyringRequest;
|
|
126
114
|
const getClientRequest = (quoteResponse, selectedAccount) => {
|
|
127
115
|
const clientReqId = (0, uuid_1.v4)();
|
|
128
116
|
return {
|
|
@@ -142,4 +130,87 @@ const getClientRequest = (quoteResponse, selectedAccount) => {
|
|
|
142
130
|
};
|
|
143
131
|
};
|
|
144
132
|
exports.getClientRequest = getClientRequest;
|
|
133
|
+
const toBatchTxParams = (disable7702, { chainId, gasLimit, ...trade }, { maxFeePerGas, maxPriorityFeePerGas, gas, }) => {
|
|
134
|
+
const params = {
|
|
135
|
+
...trade,
|
|
136
|
+
data: trade.data,
|
|
137
|
+
to: trade.to,
|
|
138
|
+
value: trade.value,
|
|
139
|
+
};
|
|
140
|
+
if (!disable7702) {
|
|
141
|
+
return params;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
...params,
|
|
145
|
+
gas: (0, controller_utils_1.toHex)(gas ?? 0),
|
|
146
|
+
maxFeePerGas: (0, controller_utils_1.toHex)(maxFeePerGas ?? 0),
|
|
147
|
+
maxPriorityFeePerGas: (0, controller_utils_1.toHex)(maxPriorityFeePerGas ?? 0),
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
exports.toBatchTxParams = toBatchTxParams;
|
|
151
|
+
const getAddTransactionBatchParams = async ({ messagingSystem, isBridgeTx, approval, resetApproval, trade, quoteResponse: { quote: { feeData: { txFee }, gasIncluded, }, }, requireApproval = false, estimateGasFeeFn, }) => {
|
|
152
|
+
const selectedAccount = messagingSystem.call('AccountsController:getAccountByAddress', trade.from);
|
|
153
|
+
if (!selectedAccount) {
|
|
154
|
+
throw new Error('Failed to submit cross-chain swap batch transaction: unknown account in trade data');
|
|
155
|
+
}
|
|
156
|
+
const hexChainId = (0, bridge_controller_1.formatChainIdToHex)(trade.chainId);
|
|
157
|
+
const networkClientId = messagingSystem.call('NetworkController:findNetworkClientIdByChainId', hexChainId);
|
|
158
|
+
// 7702 enables gasless txs for smart accounts, so we disable it for now
|
|
159
|
+
const disable7702 = true;
|
|
160
|
+
const transactions = [];
|
|
161
|
+
if (resetApproval) {
|
|
162
|
+
const gasFees = await (0, gas_1.calculateGasFees)(disable7702, messagingSystem, estimateGasFeeFn, resetApproval, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
163
|
+
transactions.push({
|
|
164
|
+
type: isBridgeTx
|
|
165
|
+
? transaction_controller_1.TransactionType.bridgeApproval
|
|
166
|
+
: transaction_controller_1.TransactionType.swapApproval,
|
|
167
|
+
params: (0, exports.toBatchTxParams)(disable7702, resetApproval, gasFees),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (approval) {
|
|
171
|
+
const gasFees = await (0, gas_1.calculateGasFees)(disable7702, messagingSystem, estimateGasFeeFn, approval, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
172
|
+
transactions.push({
|
|
173
|
+
type: isBridgeTx
|
|
174
|
+
? transaction_controller_1.TransactionType.bridgeApproval
|
|
175
|
+
: transaction_controller_1.TransactionType.swapApproval,
|
|
176
|
+
params: (0, exports.toBatchTxParams)(disable7702, approval, gasFees),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
const gasFees = await (0, gas_1.calculateGasFees)(disable7702, messagingSystem, estimateGasFeeFn, trade, networkClientId, hexChainId, gasIncluded ? txFee : undefined);
|
|
180
|
+
transactions.push({
|
|
181
|
+
type: isBridgeTx ? transaction_controller_1.TransactionType.bridge : transaction_controller_1.TransactionType.swap,
|
|
182
|
+
params: (0, exports.toBatchTxParams)(disable7702, trade, gasFees),
|
|
183
|
+
});
|
|
184
|
+
const transactionParams = {
|
|
185
|
+
disable7702,
|
|
186
|
+
networkClientId,
|
|
187
|
+
requireApproval,
|
|
188
|
+
origin: 'metamask',
|
|
189
|
+
from: trade.from,
|
|
190
|
+
transactions,
|
|
191
|
+
};
|
|
192
|
+
return transactionParams;
|
|
193
|
+
};
|
|
194
|
+
exports.getAddTransactionBatchParams = getAddTransactionBatchParams;
|
|
195
|
+
const findAndUpdateTransactionsInBatch = ({ messagingSystem, updateTransactionFn, batchId, txDataByType, }) => {
|
|
196
|
+
const txs = messagingSystem.call('TransactionController:getState').transactions;
|
|
197
|
+
const txBatch = {
|
|
198
|
+
approvalMeta: undefined,
|
|
199
|
+
tradeMeta: undefined,
|
|
200
|
+
};
|
|
201
|
+
// This is a workaround to update the tx type after the tx is signed
|
|
202
|
+
// TODO: remove this once the tx type for batch txs is preserved in the tx controller
|
|
203
|
+
Object.entries(txDataByType).forEach(([txType, txData]) => {
|
|
204
|
+
const txMeta = txs.find((tx) => tx.batchId === batchId && tx.txParams.data === txData);
|
|
205
|
+
if (txMeta) {
|
|
206
|
+
const updatedTx = { ...txMeta, type: txType };
|
|
207
|
+
updateTransactionFn(updatedTx, `Update tx type to ${txType}`);
|
|
208
|
+
txBatch[[transaction_controller_1.TransactionType.bridgeApproval, transaction_controller_1.TransactionType.swapApproval].includes(txType)
|
|
209
|
+
? 'approvalMeta'
|
|
210
|
+
: 'tradeMeta'] = updatedTx;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
return txBatch;
|
|
214
|
+
};
|
|
215
|
+
exports.findAndUpdateTransactionsInBatch = findAndUpdateTransactionsInBatch;
|
|
145
216
|
//# sourceMappingURL=transaction.cjs.map
|
|
@@ -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 isCrossChain,\n type QuoteMetadata,\n type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { SolScope } from '@metamask/keyring-api';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { v4 as uuid } from 'uuid';\n\nimport { LINEA_DELAY_MS } from '../constants';\nimport type { SolanaTransactionMeta } from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getStatusRequestParams = (\n quoteResponse: QuoteResponse<string | TxData>,\n) => {\n return {\n bridgeId: quoteResponse.quote.bridgeId,\n bridge: quoteResponse.quote.bridges[0],\n srcChainId: quoteResponse.quote.srcChainId,\n destChainId: quoteResponse.quote.destChainId,\n quote: quoteResponse.quote,\n refuel: Boolean(quoteResponse.quote.refuel),\n };\n};\n\nexport const getTxMetaFields = (\n quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n QuoteMetadata,\n approvalTxId?: string,\n): Omit<\n TransactionMeta,\n 'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n return {\n destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n approvalTxId,\n // this is the decimal (non atomic) amount (not USD value) of source token to swap\n swapTokenValue: quoteResponse.sentAmount.amount,\n };\n};\n\nexport const handleSolanaTxResponse = (\n snapResponse:\n | string\n | { result: Record<string, string> }\n | { signature: string },\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n const selectedAccountAddress = selectedAccount.address;\n const snapId = selectedAccount.metadata.snap?.id;\n let hash;\n // Handle different response formats\n if (typeof snapResponse === 'string') {\n hash = snapResponse;\n } else if (snapResponse && typeof snapResponse === 'object') {\n // If it's an object with result property, try to get the signature\n if (\n typeof snapResponse === 'object' &&\n 'result' in snapResponse &&\n snapResponse.result &&\n typeof snapResponse.result === 'object'\n ) {\n // Try to extract signature from common locations in response object\n hash =\n snapResponse.result.signature ||\n snapResponse.result.txid ||\n snapResponse.result.hash ||\n snapResponse.result.txHash;\n }\n if (\n typeof snapResponse === 'object' &&\n 'signature' in snapResponse &&\n snapResponse.signature &&\n typeof snapResponse.signature === 'string'\n ) {\n hash = snapResponse.signature;\n }\n }\n\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Create a transaction meta object with bridge-specific fields\n return {\n ...getTxMetaFields(quoteResponse),\n time: Date.now(),\n id: uuid(),\n chainId: hexChainId,\n networkClientId: snapId ?? hexChainId,\n txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n status: TransactionStatus.submitted,\n hash, // Add the transaction signature as hash\n origin: snapId,\n // Add an explicit bridge flag to mark this as a Solana transaction\n isSolana: true, // TODO deprecate this and use chainId\n isBridgeTx,\n };\n};\n\nexport const handleLineaDelay = async (\n quoteResponse: QuoteResponse<TxData | string>,\n) => {\n if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n const debugLog = createProjectLogger('bridge');\n debugLog(\n 'Delaying submitting bridge tx to make Linea confirmation more likely',\n );\n const waitPromise = new Promise((resolve) =>\n setTimeout(resolve, LINEA_DELAY_MS),\n );\n await waitPromise;\n }\n};\n\nexport const getKeyringRequest = (\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const keyringReqId = uuid();\n const snapRequestId = uuid();\n\n return {\n origin: 'metamask',\n snapId: selectedAccount.metadata.snap?.id as never,\n handler: 'onKeyringRequest' as never,\n request: {\n id: keyringReqId,\n jsonrpc: '2.0',\n method: 'keyring_submitRequest',\n params: {\n request: {\n params: {\n account: { address: selectedAccount.address },\n transaction: quoteResponse.trade,\n scope: SolScope.Mainnet,\n },\n method: 'signAndSendTransaction',\n },\n id: snapRequestId,\n account: selectedAccount.id,\n scope: SolScope.Mainnet,\n },\n },\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"]}
|
|
1
|
+
{"version":3,"file":"transaction.cjs","sourceRoot":"","sources":["../../src/utils/transaction.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AccountsControllerState } from '@metamask/accounts-controller';\nimport type { TxData } from '@metamask/bridge-controller';\nimport {\n ChainId,\n formatChainIdToHex,\n getEthUsdtResetData,\n isCrossChain,\n isEthUsdt,\n type QuoteMetadata,\n type QuoteResponse,\n} from '@metamask/bridge-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport { SolScope } from '@metamask/keyring-api';\nimport type {\n BatchTransactionParams,\n TransactionController,\n} from '@metamask/transaction-controller';\nimport {\n TransactionStatus,\n TransactionType,\n type TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { createProjectLogger } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\nimport { v4 as uuid } from 'uuid';\n\nimport { calculateGasFees } from './gas';\nimport type { TransactionBatchSingleRequest } from '../../../transaction-controller/src/types';\nimport { LINEA_DELAY_MS } from '../constants';\nimport type {\n BridgeStatusControllerMessenger,\n SolanaTransactionMeta,\n} from '../types';\n\nexport const generateActionId = () => (Date.now() + Math.random()).toString();\n\nexport const getUSDTAllowanceResetTx = async (\n messagingSystem: BridgeStatusControllerMessenger,\n quoteResponse: QuoteResponse<TxData | string> & QuoteMetadata,\n) => {\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n if (\n quoteResponse.approval &&\n isEthUsdt(hexChainId, quoteResponse.quote.srcAsset.address)\n ) {\n const allowance = new BigNumber(\n await messagingSystem.call(\n 'BridgeController:getBridgeERC20Allowance',\n quoteResponse.quote.srcAsset.address,\n hexChainId,\n ),\n );\n const shouldResetApproval =\n allowance.lt(quoteResponse.sentAmount.amount) && allowance.gt(0);\n if (shouldResetApproval) {\n return { ...quoteResponse.approval, data: getEthUsdtResetData() };\n }\n }\n return undefined;\n};\n\nexport const getStatusRequestParams = (\n quoteResponse: QuoteResponse<string | TxData>,\n) => {\n return {\n bridgeId: quoteResponse.quote.bridgeId,\n bridge: quoteResponse.quote.bridges[0],\n srcChainId: quoteResponse.quote.srcChainId,\n destChainId: quoteResponse.quote.destChainId,\n quote: quoteResponse.quote,\n refuel: Boolean(quoteResponse.quote.refuel),\n };\n};\n\nexport const getTxMetaFields = (\n quoteResponse: Omit<QuoteResponse<string | TxData>, 'approval' | 'trade'> &\n QuoteMetadata,\n approvalTxId?: string,\n): Omit<\n TransactionMeta,\n 'networkClientId' | 'status' | 'time' | 'txParams' | 'id'\n> => {\n return {\n destinationChainId: formatChainIdToHex(quoteResponse.quote.destChainId),\n sourceTokenAmount: quoteResponse.quote.srcTokenAmount,\n sourceTokenSymbol: quoteResponse.quote.srcAsset.symbol,\n sourceTokenDecimals: quoteResponse.quote.srcAsset.decimals,\n sourceTokenAddress: quoteResponse.quote.srcAsset.address,\n\n destinationTokenAmount: quoteResponse.quote.destTokenAmount,\n destinationTokenSymbol: quoteResponse.quote.destAsset.symbol,\n destinationTokenDecimals: quoteResponse.quote.destAsset.decimals,\n destinationTokenAddress: quoteResponse.quote.destAsset.address,\n\n chainId: formatChainIdToHex(quoteResponse.quote.srcChainId),\n approvalTxId,\n // this is the decimal (non atomic) amount (not USD value) of source token to swap\n swapTokenValue: quoteResponse.sentAmount.amount,\n };\n};\n\nexport const handleSolanaTxResponse = (\n snapResponse:\n | string\n | { result: Record<string, string> }\n | { signature: string },\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n): TransactionMeta & SolanaTransactionMeta => {\n const selectedAccountAddress = selectedAccount.address;\n const snapId = selectedAccount.metadata.snap?.id;\n let hash;\n // Handle different response formats\n if (typeof snapResponse === 'string') {\n hash = snapResponse;\n } else if (snapResponse && typeof snapResponse === 'object') {\n // If it's an object with result property, try to get the signature\n if (\n typeof snapResponse === 'object' &&\n 'result' in snapResponse &&\n snapResponse.result &&\n typeof snapResponse.result === 'object'\n ) {\n // Try to extract signature from common locations in response object\n hash =\n snapResponse.result.signature ||\n snapResponse.result.txid ||\n snapResponse.result.hash ||\n snapResponse.result.txHash;\n }\n if (\n typeof snapResponse === 'object' &&\n 'signature' in snapResponse &&\n snapResponse.signature &&\n typeof snapResponse.signature === 'string'\n ) {\n hash = snapResponse.signature;\n }\n }\n\n const hexChainId = formatChainIdToHex(quoteResponse.quote.srcChainId);\n const isBridgeTx = isCrossChain(\n quoteResponse.quote.srcChainId,\n quoteResponse.quote.destChainId,\n );\n\n // Create a transaction meta object with bridge-specific fields\n return {\n ...getTxMetaFields(quoteResponse),\n time: Date.now(),\n id: uuid(),\n chainId: hexChainId,\n networkClientId: snapId ?? hexChainId,\n txParams: { from: selectedAccountAddress, data: quoteResponse.trade },\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n status: TransactionStatus.submitted,\n hash, // Add the transaction signature as hash\n origin: snapId,\n // Add an explicit bridge flag to mark this as a Solana transaction\n isSolana: true, // TODO deprecate this and use chainId\n isBridgeTx,\n };\n};\n\nexport const handleLineaDelay = async (\n quoteResponse: QuoteResponse<TxData | string>,\n) => {\n if (ChainId.LINEA === quoteResponse.quote.srcChainId) {\n const debugLog = createProjectLogger('bridge');\n debugLog(\n 'Delaying submitting bridge tx to make Linea confirmation more likely',\n );\n const waitPromise = new Promise((resolve) =>\n setTimeout(resolve, LINEA_DELAY_MS),\n );\n await waitPromise;\n }\n};\n\nexport const getClientRequest = (\n quoteResponse: Omit<QuoteResponse<string>, 'approval'> & QuoteMetadata,\n selectedAccount: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const clientReqId = uuid();\n\n return {\n origin: 'metamask',\n snapId: selectedAccount.metadata.snap?.id as never,\n handler: 'onClientRequest' as never,\n request: {\n id: clientReqId,\n jsonrpc: '2.0',\n method: 'signAndSendTransactionWithoutConfirmation',\n params: {\n account: { address: selectedAccount.address },\n transaction: quoteResponse.trade,\n scope: SolScope.Mainnet,\n },\n },\n };\n};\n\nexport const toBatchTxParams = (\n disable7702: boolean,\n { chainId, gasLimit, ...trade }: TxData,\n {\n maxFeePerGas,\n maxPriorityFeePerGas,\n gas,\n }: { maxFeePerGas?: string; maxPriorityFeePerGas?: string; gas?: string },\n): BatchTransactionParams => {\n const params = {\n ...trade,\n data: trade.data as `0x${string}`,\n to: trade.to as `0x${string}`,\n value: trade.value as `0x${string}`,\n };\n if (!disable7702) {\n return params;\n }\n\n return {\n ...params,\n gas: toHex(gas ?? 0),\n maxFeePerGas: toHex(maxFeePerGas ?? 0),\n maxPriorityFeePerGas: toHex(maxPriorityFeePerGas ?? 0),\n };\n};\n\nexport const getAddTransactionBatchParams = async ({\n messagingSystem,\n isBridgeTx,\n approval,\n resetApproval,\n trade,\n quoteResponse: {\n quote: {\n feeData: { txFee },\n gasIncluded,\n },\n },\n requireApproval = false,\n estimateGasFeeFn,\n}: {\n messagingSystem: BridgeStatusControllerMessenger;\n isBridgeTx: boolean;\n trade: TxData;\n quoteResponse: Omit<QuoteResponse, 'approval' | 'trade'> & QuoteMetadata;\n estimateGasFeeFn: typeof TransactionController.prototype.estimateGasFee;\n approval?: TxData;\n resetApproval?: TxData;\n requireApproval?: boolean;\n}) => {\n const selectedAccount = messagingSystem.call(\n 'AccountsController:getAccountByAddress',\n trade.from,\n );\n if (!selectedAccount) {\n throw new Error(\n 'Failed to submit cross-chain swap batch transaction: unknown account in trade data',\n );\n }\n const hexChainId = formatChainIdToHex(trade.chainId);\n const networkClientId = messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n hexChainId,\n );\n\n // 7702 enables gasless txs for smart accounts, so we disable it for now\n const disable7702 = true;\n const transactions: TransactionBatchSingleRequest[] = [];\n if (resetApproval) {\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n resetApproval,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n params: toBatchTxParams(disable7702, resetApproval, gasFees),\n });\n }\n if (approval) {\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n approval,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx\n ? TransactionType.bridgeApproval\n : TransactionType.swapApproval,\n params: toBatchTxParams(disable7702, approval, gasFees),\n });\n }\n const gasFees = await calculateGasFees(\n disable7702,\n messagingSystem,\n estimateGasFeeFn,\n trade,\n networkClientId,\n hexChainId,\n gasIncluded ? txFee : undefined,\n );\n transactions.push({\n type: isBridgeTx ? TransactionType.bridge : TransactionType.swap,\n params: toBatchTxParams(disable7702, trade, gasFees),\n });\n const transactionParams: Parameters<\n TransactionController['addTransactionBatch']\n >[0] = {\n disable7702,\n networkClientId,\n requireApproval,\n origin: 'metamask',\n from: trade.from as `0x${string}`,\n transactions,\n };\n\n return transactionParams;\n};\n\nexport const findAndUpdateTransactionsInBatch = ({\n messagingSystem,\n updateTransactionFn,\n batchId,\n txDataByType,\n}: {\n messagingSystem: BridgeStatusControllerMessenger;\n updateTransactionFn: typeof TransactionController.prototype.updateTransaction;\n batchId: string;\n txDataByType: { [key in TransactionType]?: string };\n}) => {\n const txs = messagingSystem.call(\n 'TransactionController:getState',\n ).transactions;\n const txBatch: {\n approvalMeta?: TransactionMeta;\n tradeMeta?: TransactionMeta;\n } = {\n approvalMeta: undefined,\n tradeMeta: undefined,\n };\n\n // This is a workaround to update the tx type after the tx is signed\n // TODO: remove this once the tx type for batch txs is preserved in the tx controller\n Object.entries(txDataByType).forEach(([txType, txData]) => {\n const txMeta = txs.find(\n (tx) => tx.batchId === batchId && tx.txParams.data === txData,\n );\n if (txMeta) {\n const updatedTx = { ...txMeta, type: txType as TransactionType };\n updateTransactionFn(updatedTx, `Update tx type to ${txType}`);\n txBatch[\n [TransactionType.bridgeApproval, TransactionType.swapApproval].includes(\n txType as TransactionType,\n )\n ? 'approvalMeta'\n : 'tradeMeta'\n ] = updatedTx;\n }\n });\n\n return txBatch;\n};\n"]}
|