@metamask/bridge-status-controller 70.0.5 → 71.1.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 +58 -8
- package/dist/bridge-status-controller-method-action-types.cjs +7 -0
- package/dist/bridge-status-controller-method-action-types.cjs.map +1 -0
- package/dist/bridge-status-controller-method-action-types.d.cts +38 -0
- package/dist/bridge-status-controller-method-action-types.d.cts.map +1 -0
- package/dist/bridge-status-controller-method-action-types.d.mts +38 -0
- package/dist/bridge-status-controller-method-action-types.d.mts.map +1 -0
- package/dist/bridge-status-controller-method-action-types.mjs +6 -0
- package/dist/bridge-status-controller-method-action-types.mjs.map +1 -0
- package/dist/bridge-status-controller.cjs +217 -123
- package/dist/bridge-status-controller.cjs.map +1 -1
- package/dist/bridge-status-controller.d.cts +4 -1
- package/dist/bridge-status-controller.d.cts.map +1 -1
- package/dist/bridge-status-controller.d.mts +4 -1
- package/dist/bridge-status-controller.d.mts.map +1 -1
- package/dist/bridge-status-controller.mjs +222 -128
- package/dist/bridge-status-controller.mjs.map +1 -1
- package/dist/constants.cjs +2 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +1 -0
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +1 -0
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +1 -0
- package/dist/constants.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +21 -18
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +21 -18
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +4 -0
- package/dist/types.mjs.map +1 -1
- package/dist/utils/accounts.d.cts +1 -1
- package/dist/utils/accounts.d.mts +1 -1
- package/dist/utils/bridge-status.cjs +49 -2
- package/dist/utils/bridge-status.cjs.map +1 -1
- package/dist/utils/bridge-status.d.cts +2 -1
- package/dist/utils/bridge-status.d.cts.map +1 -1
- package/dist/utils/bridge-status.d.mts +2 -1
- package/dist/utils/bridge-status.d.mts.map +1 -1
- package/dist/utils/bridge-status.mjs +48 -2
- package/dist/utils/bridge-status.mjs.map +1 -1
- package/dist/utils/feature-flags.cjs +12 -0
- package/dist/utils/feature-flags.cjs.map +1 -0
- package/dist/utils/feature-flags.d.cts +3 -0
- package/dist/utils/feature-flags.d.cts.map +1 -0
- package/dist/utils/feature-flags.d.mts +3 -0
- package/dist/utils/feature-flags.d.mts.map +1 -0
- package/dist/utils/feature-flags.mjs +8 -0
- package/dist/utils/feature-flags.mjs.map +1 -0
- package/dist/utils/history.cjs +48 -3
- package/dist/utils/history.cjs.map +1 -1
- package/dist/utils/history.d.cts +19 -1
- package/dist/utils/history.d.cts.map +1 -1
- package/dist/utils/history.d.mts +19 -1
- package/dist/utils/history.d.mts.map +1 -1
- package/dist/utils/history.mjs +45 -3
- package/dist/utils/history.mjs.map +1 -1
- package/dist/utils/intent-api.cjs.map +1 -1
- package/dist/utils/intent-api.d.cts +1 -1
- package/dist/utils/intent-api.d.cts.map +1 -1
- package/dist/utils/intent-api.d.mts +1 -1
- package/dist/utils/intent-api.d.mts.map +1 -1
- package/dist/utils/intent-api.mjs.map +1 -1
- package/dist/utils/metrics.cjs +45 -8
- package/dist/utils/metrics.cjs.map +1 -1
- package/dist/utils/metrics.d.cts +37 -6
- package/dist/utils/metrics.d.cts.map +1 -1
- package/dist/utils/metrics.d.mts +37 -6
- package/dist/utils/metrics.d.mts.map +1 -1
- package/dist/utils/metrics.mjs +44 -8
- package/dist/utils/metrics.mjs.map +1 -1
- package/dist/utils/network.cjs +7 -1
- package/dist/utils/network.cjs.map +1 -1
- package/dist/utils/network.d.cts +4 -2
- package/dist/utils/network.d.cts.map +1 -1
- package/dist/utils/network.d.mts +4 -2
- package/dist/utils/network.d.mts.map +1 -1
- package/dist/utils/network.mjs +5 -0
- package/dist/utils/network.mjs.map +1 -1
- package/dist/utils/transaction.cjs +10 -9
- package/dist/utils/transaction.cjs.map +1 -1
- package/dist/utils/transaction.d.cts +3 -0
- package/dist/utils/transaction.d.cts.map +1 -1
- package/dist/utils/transaction.d.mts +3 -0
- package/dist/utils/transaction.d.mts.map +1 -1
- package/dist/utils/transaction.mjs +8 -8
- package/dist/utils/transaction.mjs.map +1 -1
- package/dist/utils/validators.d.cts +2 -2
- package/dist/utils/validators.d.mts +2 -2
- package/package.json +22 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-api.mjs","sourceRoot":"","sources":["../../src/utils/intent-api.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,cAAc,EACd,OAAO,EACP,gBAAgB,EAGhB,WAAW,EACZ,oCAAoC;AACrC,OAAO,EAAE,iBAAiB,EAAE,yCAAyC;
|
|
1
|
+
{"version":3,"file":"intent-api.mjs","sourceRoot":"","sources":["../../src/utils/intent-api.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BridgeClientId,\n ChainId,\n getClientHeaders,\n Intent,\n QuoteResponse,\n StatusTypes,\n} from '@metamask/bridge-controller';\nimport { TransactionStatus } from '@metamask/transaction-controller';\n\nimport type { FetchFunction, StatusResponse } from '../types';\nimport {\n IntentStatusResponse,\n IntentOrderStatus,\n validateIntentStatusResponse,\n} from './validators';\n\nexport type IntentSubmissionParams = {\n srcChainId: ChainId;\n quoteId: string;\n signature: string;\n order: unknown;\n userAddress: string;\n aggregatorId: string;\n};\n\nexport type IntentApi = {\n getOrderStatus(\n orderId: string,\n aggregatorId: string,\n srcChainId: ChainId,\n clientId: BridgeClientId,\n ): Promise<IntentStatusResponse>;\n};\n\nexport type GetJwtFn = () => Promise<string | undefined>;\n\nexport class IntentApiImpl implements IntentApi {\n readonly #baseUrl: string;\n\n readonly #fetchFn: FetchFunction;\n\n readonly #getJwt: GetJwtFn;\n\n constructor(baseUrl: string, fetchFn: FetchFunction, getJwt: GetJwtFn) {\n this.#baseUrl = baseUrl;\n this.#fetchFn = fetchFn;\n this.#getJwt = getJwt;\n }\n\n async getOrderStatus(\n orderId: string,\n aggregatorId: string,\n srcChainId: ChainId,\n clientId: BridgeClientId,\n ): Promise<IntentStatusResponse> {\n const endpoint = `${this.#baseUrl}/getOrderStatus?orderId=${orderId}&aggregatorId=${encodeURIComponent(aggregatorId)}&srcChainId=${srcChainId}`;\n try {\n const jwt = await this.#getJwt();\n const response = await this.#fetchFn(endpoint, {\n method: 'GET',\n headers: getClientHeaders({ clientId, jwt }),\n });\n if (!validateIntentStatusResponse(response)) {\n throw new Error('Invalid getOrderStatus response');\n }\n return response;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw new Error(`Failed to get order status: ${error.message}`);\n }\n throw new Error('Failed to get order status');\n }\n }\n}\n\nexport type IntentBridgeStatus = {\n status: StatusResponse;\n txHash?: string;\n transactionStatus: TransactionStatus;\n};\n\nexport const translateIntentOrderToBridgeStatus = (\n intentOrder: IntentStatusResponse,\n srcChainId: number,\n fallbackTxHash?: string,\n): IntentBridgeStatus => {\n let statusType: StatusTypes;\n switch (intentOrder.status) {\n case IntentOrderStatus.CONFIRMED:\n case IntentOrderStatus.COMPLETED:\n statusType = StatusTypes.COMPLETE;\n break;\n case IntentOrderStatus.FAILED:\n case IntentOrderStatus.EXPIRED:\n case IntentOrderStatus.CANCELLED:\n statusType = StatusTypes.FAILED;\n break;\n case IntentOrderStatus.PENDING:\n statusType = StatusTypes.PENDING;\n break;\n case IntentOrderStatus.SUBMITTED:\n statusType = StatusTypes.SUBMITTED;\n break;\n default:\n statusType = StatusTypes.UNKNOWN;\n }\n\n const txHash = intentOrder.txHash ?? fallbackTxHash;\n const status: StatusResponse = {\n status: statusType,\n srcChain: {\n chainId: srcChainId,\n txHash,\n },\n };\n\n return {\n status,\n txHash,\n transactionStatus: mapIntentOrderStatusToTransactionStatus(\n intentOrder.status,\n ),\n };\n};\n\nexport function mapIntentOrderStatusToTransactionStatus(\n intentStatus: IntentOrderStatus,\n): TransactionStatus {\n switch (intentStatus) {\n case IntentOrderStatus.PENDING:\n case IntentOrderStatus.SUBMITTED:\n return TransactionStatus.submitted;\n case IntentOrderStatus.CONFIRMED:\n case IntentOrderStatus.COMPLETED:\n return TransactionStatus.confirmed;\n case IntentOrderStatus.FAILED:\n case IntentOrderStatus.EXPIRED:\n case IntentOrderStatus.CANCELLED:\n return TransactionStatus.failed;\n default:\n return TransactionStatus.submitted;\n }\n}\n\n/**\n * Extracts and validates the intent data from a quote response.\n *\n * @param quoteResponse - The quote response that may contain intent data\n * @returns The intent data from the quote\n * @throws Error if the quote does not contain intent data\n */\nexport function getIntentFromQuote(quoteResponse: QuoteResponse): Intent {\n const { intent } = quoteResponse.quote;\n if (!intent) {\n throw new Error('submitIntent: missing intent data');\n }\n return intent;\n}\n\nexport const postSubmitOrder = async ({\n params,\n clientId,\n jwt,\n fetchFn,\n bridgeApiBaseUrl,\n}: {\n params: IntentSubmissionParams;\n clientId: BridgeClientId;\n jwt: string | undefined;\n fetchFn: FetchFunction;\n bridgeApiBaseUrl: string;\n}): Promise<IntentStatusResponse> => {\n const endpoint = `${bridgeApiBaseUrl}/submitOrder`;\n try {\n const response = await fetchFn(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...getClientHeaders({ clientId, jwt }),\n },\n body: JSON.stringify(params),\n });\n if (!validateIntentStatusResponse(response)) {\n throw new Error('Invalid submitOrder response');\n }\n return response;\n } catch (error: unknown) {\n if (error instanceof Error) {\n throw new Error(`Failed to submit intent: ${error.message}`);\n }\n throw new Error('Failed to submit intent');\n }\n};\n"]}
|
package/dist/utils/metrics.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEVMTxPropertiesFromTransactionMeta = exports.getRequestMetadataFromHistory = exports.getTradeDataFromHistory = exports.getPreConfirmationPropertiesFromQuote = exports.getPriceImpactFromQuote = exports.getTradeDataFromQuote = exports.getRequestParamFromHistory = exports.getFinalizedTxProperties = exports.getTxStatusesFromHistory = void 0;
|
|
3
|
+
exports.getPollingStatusUpdatedProperties = exports.getEVMTxPropertiesFromTransactionMeta = exports.getRequestMetadataFromHistory = exports.getTradeDataFromHistory = exports.getPreConfirmationPropertiesFromQuote = 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
6
|
const bignumber_js_1 = require("bignumber.js");
|
|
7
|
+
const accounts_1 = require("./accounts.cjs");
|
|
7
8
|
const gas_1 = require("./gas.cjs");
|
|
8
9
|
const swap_received_amount_1 = require("./swap-received-amount.cjs");
|
|
9
10
|
const getTxStatusesFromHistory = ({ status, hasApprovalTx, approvalTxId, quote, }) => {
|
|
@@ -81,6 +82,7 @@ const getRequestParamFromHistory = (historyItem) => {
|
|
|
81
82
|
chain_id_destination: (0, bridge_controller_1.formatChainIdToCaip)(historyItem.quote.destChainId),
|
|
82
83
|
token_symbol_destination: historyItem.quote.destAsset.symbol,
|
|
83
84
|
token_address_destination: historyItem.quote.destAsset.assetId,
|
|
85
|
+
token_security_type_destination: historyItem.tokenSecurityTypeDestination ?? null,
|
|
84
86
|
};
|
|
85
87
|
};
|
|
86
88
|
exports.getRequestParamFromHistory = getRequestParamFromHistory;
|
|
@@ -105,22 +107,27 @@ exports.getPriceImpactFromQuote = getPriceImpactFromQuote;
|
|
|
105
107
|
*
|
|
106
108
|
* @param quoteResponse - The quote response
|
|
107
109
|
* @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
|
|
108
|
-
* @param
|
|
110
|
+
* @param accountHardwareType - The hardware wallet type used to submit the tx, or null if not a hardware wallet
|
|
109
111
|
* @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)
|
|
110
112
|
* @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)
|
|
111
113
|
* @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)
|
|
114
|
+
* @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
|
|
112
115
|
* @returns The properties for the pre-confirmation event
|
|
113
116
|
*/
|
|
114
|
-
const getPreConfirmationPropertiesFromQuote = (quoteResponse, isStxEnabledOnClient,
|
|
117
|
+
const getPreConfirmationPropertiesFromQuote = (quoteResponse, isStxEnabledOnClient, accountHardwareType, location = bridge_controller_1.MetaMetricsSwapsEventSource.MainView, abTests, activeAbTests, tokenSecurityTypeDestination) => {
|
|
115
118
|
const { quote } = quoteResponse;
|
|
116
119
|
return {
|
|
117
120
|
...(0, exports.getPriceImpactFromQuote)(quote),
|
|
118
121
|
...(0, exports.getTradeDataFromQuote)(quoteResponse),
|
|
119
122
|
chain_id_source: (0, bridge_controller_1.formatChainIdToCaip)(quote.srcChainId),
|
|
120
123
|
token_symbol_source: quote.srcAsset.symbol,
|
|
124
|
+
token_address_source: quote.srcAsset.assetId,
|
|
121
125
|
chain_id_destination: (0, bridge_controller_1.formatChainIdToCaip)(quote.destChainId),
|
|
122
126
|
token_symbol_destination: quote.destAsset.symbol,
|
|
123
|
-
|
|
127
|
+
token_address_destination: quote.destAsset.assetId,
|
|
128
|
+
token_security_type_destination: tokenSecurityTypeDestination ?? null,
|
|
129
|
+
account_hardware_type: accountHardwareType,
|
|
130
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
124
131
|
swap_type: (0, bridge_controller_1.getSwapType)(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId),
|
|
125
132
|
usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),
|
|
126
133
|
stx_enabled: isStxEnabledOnClient,
|
|
@@ -151,12 +158,14 @@ const getTradeDataFromHistory = (historyItem) => {
|
|
|
151
158
|
exports.getTradeDataFromHistory = getTradeDataFromHistory;
|
|
152
159
|
const getRequestMetadataFromHistory = (historyItem, account) => {
|
|
153
160
|
const { quote, slippagePercentage, isStxEnabled } = historyItem;
|
|
161
|
+
const accountHardwareType = (0, bridge_controller_1.getAccountHardwareType)(account);
|
|
154
162
|
return {
|
|
155
163
|
slippage_limit: slippagePercentage,
|
|
156
164
|
custom_slippage: (0, bridge_controller_1.isCustomSlippage)(slippagePercentage),
|
|
157
165
|
usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),
|
|
158
166
|
swap_type: (0, bridge_controller_1.getSwapType)(quote.srcChainId, quote.destChainId),
|
|
159
|
-
|
|
167
|
+
account_hardware_type: accountHardwareType,
|
|
168
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
160
169
|
stx_enabled: isStxEnabled ?? false,
|
|
161
170
|
security_warnings: [],
|
|
162
171
|
};
|
|
@@ -166,9 +175,11 @@ exports.getRequestMetadataFromHistory = getRequestMetadataFromHistory;
|
|
|
166
175
|
* Get the properties for a swap transaction that is not in the txHistory
|
|
167
176
|
*
|
|
168
177
|
* @param transactionMeta - The transaction meta
|
|
178
|
+
* @param account - The account that submitted the transaction
|
|
169
179
|
* @returns The properties for the swap transaction
|
|
170
180
|
*/
|
|
171
|
-
const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
181
|
+
const getEVMTxPropertiesFromTransactionMeta = (transactionMeta, account) => {
|
|
182
|
+
const accountHardwareType = (0, bridge_controller_1.getAccountHardwareType)(account);
|
|
172
183
|
return {
|
|
173
184
|
source_transaction: [
|
|
174
185
|
transaction_controller_1.TransactionStatus.failed,
|
|
@@ -177,7 +188,12 @@ const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
177
188
|
].includes(transactionMeta.status)
|
|
178
189
|
? bridge_controller_1.StatusTypes.FAILED
|
|
179
190
|
: bridge_controller_1.StatusTypes.COMPLETE,
|
|
180
|
-
error_message:
|
|
191
|
+
error_message: [
|
|
192
|
+
`Transaction ${transactionMeta.status}`,
|
|
193
|
+
transactionMeta.error?.message,
|
|
194
|
+
]
|
|
195
|
+
.filter(Boolean)
|
|
196
|
+
.join('. '),
|
|
181
197
|
chain_id_source: (0, bridge_controller_1.formatChainIdToCaip)(transactionMeta.chainId),
|
|
182
198
|
chain_id_destination: (0, bridge_controller_1.formatChainIdToCaip)(transactionMeta.chainId),
|
|
183
199
|
token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',
|
|
@@ -186,8 +202,10 @@ const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
186
202
|
stx_enabled: false,
|
|
187
203
|
token_address_source: (0, bridge_controller_1.formatAddressToAssetId)(transactionMeta.sourceTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
188
204
|
token_address_destination: (0, bridge_controller_1.formatAddressToAssetId)(transactionMeta.destinationTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
205
|
+
token_security_type_destination: null,
|
|
189
206
|
custom_slippage: false,
|
|
190
|
-
|
|
207
|
+
account_hardware_type: accountHardwareType,
|
|
208
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
191
209
|
swap_type: transactionMeta.type &&
|
|
192
210
|
[transaction_controller_1.TransactionType.swap, transaction_controller_1.TransactionType.swapApproval].includes(transactionMeta.type)
|
|
193
211
|
? bridge_controller_1.MetricsSwapType.SINGLE
|
|
@@ -209,4 +227,23 @@ const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
209
227
|
};
|
|
210
228
|
};
|
|
211
229
|
exports.getEVMTxPropertiesFromTransactionMeta = getEVMTxPropertiesFromTransactionMeta;
|
|
230
|
+
const getPollingStatusUpdatedProperties = (messenger, pollingStatus, historyItem) => {
|
|
231
|
+
const selectedAccount = (0, accounts_1.getAccountByAddress)(messenger, historyItem.account);
|
|
232
|
+
const requestParams = (0, exports.getRequestParamFromHistory)(historyItem);
|
|
233
|
+
const requestMetadata = (0, exports.getRequestMetadataFromHistory)(historyItem, selectedAccount);
|
|
234
|
+
const { security_warnings: _, ...metadataWithoutWarnings } = requestMetadata;
|
|
235
|
+
return {
|
|
236
|
+
...(0, exports.getTradeDataFromHistory)(historyItem),
|
|
237
|
+
...(0, exports.getPriceImpactFromQuote)(historyItem.quote),
|
|
238
|
+
...metadataWithoutWarnings,
|
|
239
|
+
chain_id_source: requestParams.chain_id_source,
|
|
240
|
+
chain_id_destination: requestParams.chain_id_destination,
|
|
241
|
+
token_symbol_source: requestParams.token_symbol_source,
|
|
242
|
+
token_symbol_destination: requestParams.token_symbol_destination,
|
|
243
|
+
action_type: bridge_controller_1.MetricsActionType.SWAPBRIDGE_V1,
|
|
244
|
+
polling_status: pollingStatus,
|
|
245
|
+
retry_attempts: historyItem.attempts?.counter ?? 0,
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
exports.getPollingStatusUpdatedProperties = getPollingStatusUpdatedProperties;
|
|
212
249
|
//# sourceMappingURL=metrics.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.cjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport {\n StatusTypes,\n formatChainIdToHex,\n isEthUsdt,\n formatChainIdToCaip,\n formatProviderLabel,\n isCustomSlippage,\n getSwapType,\n isHardwareWallet,\n formatAddressToAssetId,\n MetricsActionType,\n MetricsSwapType,\n MetaMetricsSwapsEventSource,\n} from '@metamask/bridge-controller';\nimport type {\n QuoteFetchData,\n QuoteMetadata,\n QuoteResponse,\n TxStatusData,\n RequestParams,\n TradeData,\n RequestMetadata,\n} from '@metamask/bridge-controller';\nimport {\n TransactionStatus,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } 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 & Partial<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 * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n quoteResponse: QuoteResponse & Partial<QuoteMetadata>,\n isStxEnabledOnClient: boolean,\n isHardwareAccount: boolean,\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\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 location,\n ...(abTests &&\n Object.keys(abTests).length > 0 && {\n ab_tests: abTests,\n }),\n ...(activeAbTests &&\n activeAbTests.length > 0 && {\n active_ab_tests: activeAbTests,\n }),\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: 0,\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"]}
|
|
1
|
+
{"version":3,"file":"metrics.cjs","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable camelcase */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport type { AccountsControllerState } from '@metamask/accounts-controller';\nimport {\n StatusTypes,\n getAccountHardwareType,\n formatChainIdToHex,\n isEthUsdt,\n formatChainIdToCaip,\n formatProviderLabel,\n isCustomSlippage,\n getSwapType,\n formatAddressToAssetId,\n MetricsActionType,\n MetricsSwapType,\n MetaMetricsSwapsEventSource,\n} from '@metamask/bridge-controller';\nimport type {\n AccountHardwareType,\n QuoteFetchData,\n QuoteMetadata,\n QuoteResponse,\n TxStatusData,\n RequestParams,\n TradeData,\n RequestMetadata,\n PollingStatus,\n} from '@metamask/bridge-controller';\nimport {\n TransactionStatus,\n TransactionType,\n} from '@metamask/transaction-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { CaipAssetType } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport type {\n BridgeHistoryItem,\n BridgeStatusControllerMessenger,\n} from '../types';\nimport { getAccountByAddress } from './accounts';\nimport { calcActualGasUsed } from './gas';\nimport {\n getActualBridgeReceivedAmount,\n getActualSwapReceivedAmount,\n} from './swap-received-amount';\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 token_security_type_destination:\n historyItem.tokenSecurityTypeDestination ?? null,\n };\n};\n\nexport const getTradeDataFromQuote = (\n quoteResponse: QuoteResponse & Partial<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 accountHardwareType - The hardware wallet type used to submit the tx, or null if not a hardware wallet\n * @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)\n * @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)\n * @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)\n * @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.\n * @returns The properties for the pre-confirmation event\n */\nexport const getPreConfirmationPropertiesFromQuote = (\n quoteResponse: QuoteResponse & Partial<QuoteMetadata>,\n isStxEnabledOnClient: boolean,\n accountHardwareType: AccountHardwareType,\n location: MetaMetricsSwapsEventSource = MetaMetricsSwapsEventSource.MainView,\n abTests?: Record<string, string>,\n activeAbTests?: { key: string; value: string }[],\n tokenSecurityTypeDestination?: string | null,\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 token_address_source: quote.srcAsset.assetId,\n chain_id_destination: formatChainIdToCaip(quote.destChainId),\n token_symbol_destination: quote.destAsset.symbol,\n token_address_destination: quote.destAsset.assetId,\n token_security_type_destination: tokenSecurityTypeDestination ?? null,\n account_hardware_type: accountHardwareType,\n is_hardware_wallet: accountHardwareType !== null,\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 location,\n ...(abTests &&\n Object.keys(abTests).length > 0 && {\n ab_tests: abTests,\n }),\n ...(activeAbTests &&\n activeAbTests.length > 0 && {\n active_ab_tests: activeAbTests,\n }),\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 const accountHardwareType = getAccountHardwareType(account);\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 account_hardware_type: accountHardwareType,\n is_hardware_wallet: accountHardwareType !== null,\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 * @param account - The account that submitted the transaction\n * @returns The properties for the swap transaction\n */\nexport const getEVMTxPropertiesFromTransactionMeta = (\n transactionMeta: TransactionMeta,\n account?: AccountsControllerState['internalAccounts']['accounts'][string],\n) => {\n const accountHardwareType = getAccountHardwareType(account);\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: [\n `Transaction ${transactionMeta.status}`,\n transactionMeta.error?.message,\n ]\n .filter(Boolean)\n .join('. '),\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: 0,\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 token_security_type_destination: null,\n custom_slippage: false,\n account_hardware_type: accountHardwareType,\n is_hardware_wallet: accountHardwareType !== null,\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\nexport const getPollingStatusUpdatedProperties = (\n messenger: BridgeStatusControllerMessenger,\n pollingStatus: PollingStatus,\n historyItem: BridgeHistoryItem,\n) => {\n const selectedAccount = getAccountByAddress(messenger, historyItem.account);\n const requestParams = getRequestParamFromHistory(historyItem);\n const requestMetadata = getRequestMetadataFromHistory(\n historyItem,\n selectedAccount,\n );\n const { security_warnings: _, ...metadataWithoutWarnings } = requestMetadata;\n\n return {\n ...getTradeDataFromHistory(historyItem),\n ...getPriceImpactFromQuote(historyItem.quote),\n ...metadataWithoutWarnings,\n chain_id_source: requestParams.chain_id_source,\n chain_id_destination: requestParams.chain_id_destination,\n token_symbol_source: requestParams.token_symbol_source,\n token_symbol_destination: requestParams.token_symbol_destination,\n action_type: MetricsActionType.SWAPBRIDGE_V1,\n polling_status: pollingStatus,\n retry_attempts: historyItem.attempts?.counter ?? 0,\n };\n};\n"]}
|
package/dist/utils/metrics.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { AccountsControllerState } from "@metamask/accounts-controller";
|
|
2
2
|
import { StatusTypes, MetricsActionType, MetricsSwapType, MetaMetricsSwapsEventSource } from "@metamask/bridge-controller";
|
|
3
|
-
import type { QuoteFetchData, QuoteMetadata, QuoteResponse, TxStatusData, RequestParams, TradeData, RequestMetadata } from "@metamask/bridge-controller";
|
|
3
|
+
import type { AccountHardwareType, QuoteFetchData, QuoteMetadata, QuoteResponse, TxStatusData, RequestParams, TradeData, RequestMetadata, PollingStatus } from "@metamask/bridge-controller";
|
|
4
4
|
import type { TransactionMeta } from "@metamask/transaction-controller";
|
|
5
|
-
import type { BridgeHistoryItem } from "../types.cjs";
|
|
5
|
+
import type { BridgeHistoryItem, BridgeStatusControllerMessenger } from "../types.cjs";
|
|
6
6
|
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, approvalTxId, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
7
7
|
/**
|
|
8
8
|
* Calculate the properties for a finalized transaction event based on the txHistory
|
|
@@ -29,16 +29,17 @@ export declare const getPriceImpactFromQuote: (quote: QuoteResponse['quote']) =>
|
|
|
29
29
|
*
|
|
30
30
|
* @param quoteResponse - The quote response
|
|
31
31
|
* @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
|
|
32
|
-
* @param
|
|
32
|
+
* @param accountHardwareType - The hardware wallet type used to submit the tx, or null if not a hardware wallet
|
|
33
33
|
* @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)
|
|
34
34
|
* @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)
|
|
35
35
|
* @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)
|
|
36
|
+
* @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
|
|
36
37
|
* @returns The properties for the pre-confirmation event
|
|
37
38
|
*/
|
|
38
|
-
export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: QuoteResponse & Partial<QuoteMetadata>, isStxEnabledOnClient: boolean,
|
|
39
|
+
export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: QuoteResponse & Partial<QuoteMetadata>, isStxEnabledOnClient: boolean, accountHardwareType: AccountHardwareType, location?: MetaMetricsSwapsEventSource, abTests?: Record<string, string>, activeAbTests?: {
|
|
39
40
|
key: string;
|
|
40
41
|
value: string;
|
|
41
|
-
}[]) => {
|
|
42
|
+
}[], tokenSecurityTypeDestination?: string | null) => {
|
|
42
43
|
active_ab_tests?: {
|
|
43
44
|
key: string;
|
|
44
45
|
value: string;
|
|
@@ -46,8 +47,12 @@ export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: Quot
|
|
|
46
47
|
ab_tests?: Record<string, string> | undefined;
|
|
47
48
|
chain_id_source: `${string}:${string}`;
|
|
48
49
|
token_symbol_source: string;
|
|
50
|
+
token_address_source: `${string}:${string}/${string}:${string}`;
|
|
49
51
|
chain_id_destination: `${string}:${string}`;
|
|
50
52
|
token_symbol_destination: string;
|
|
53
|
+
token_address_destination: `${string}:${string}/${string}:${string}`;
|
|
54
|
+
token_security_type_destination: string | null;
|
|
55
|
+
account_hardware_type: AccountHardwareType;
|
|
51
56
|
is_hardware_wallet: boolean;
|
|
52
57
|
swap_type: MetricsSwapType;
|
|
53
58
|
usd_amount_source: number;
|
|
@@ -69,9 +74,10 @@ export declare const getRequestMetadataFromHistory: (historyItem: BridgeHistoryI
|
|
|
69
74
|
* Get the properties for a swap transaction that is not in the txHistory
|
|
70
75
|
*
|
|
71
76
|
* @param transactionMeta - The transaction meta
|
|
77
|
+
* @param account - The account that submitted the transaction
|
|
72
78
|
* @returns The properties for the swap transaction
|
|
73
79
|
*/
|
|
74
|
-
export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: TransactionMeta) => {
|
|
80
|
+
export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: TransactionMeta, account?: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
75
81
|
source_transaction: StatusTypes;
|
|
76
82
|
error_message: string;
|
|
77
83
|
chain_id_source: `${string}:${string}`;
|
|
@@ -82,7 +88,9 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr
|
|
|
82
88
|
stx_enabled: boolean;
|
|
83
89
|
token_address_source: `${string}:${string}/${string}:${string}`;
|
|
84
90
|
token_address_destination: `${string}:${string}/${string}:${string}`;
|
|
91
|
+
token_security_type_destination: null;
|
|
85
92
|
custom_slippage: boolean;
|
|
93
|
+
account_hardware_type: AccountHardwareType;
|
|
86
94
|
is_hardware_wallet: boolean;
|
|
87
95
|
swap_type: MetricsSwapType;
|
|
88
96
|
security_warnings: never[];
|
|
@@ -100,4 +108,27 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr
|
|
|
100
108
|
usd_actual_gas: number;
|
|
101
109
|
action_type: MetricsActionType;
|
|
102
110
|
};
|
|
111
|
+
export declare const getPollingStatusUpdatedProperties: (messenger: BridgeStatusControllerMessenger, pollingStatus: PollingStatus, historyItem: BridgeHistoryItem) => {
|
|
112
|
+
chain_id_source: `${string}:${string}`;
|
|
113
|
+
chain_id_destination: `${string}:${string}` | null;
|
|
114
|
+
token_symbol_source: string;
|
|
115
|
+
token_symbol_destination: string | null;
|
|
116
|
+
action_type: MetricsActionType;
|
|
117
|
+
polling_status: PollingStatus;
|
|
118
|
+
retry_attempts: number;
|
|
119
|
+
slippage_limit?: number | undefined;
|
|
120
|
+
custom_slippage: boolean;
|
|
121
|
+
usd_amount_source: number;
|
|
122
|
+
stx_enabled: boolean;
|
|
123
|
+
is_hardware_wallet: boolean;
|
|
124
|
+
account_hardware_type: AccountHardwareType;
|
|
125
|
+
swap_type: MetricsSwapType;
|
|
126
|
+
price_impact: number;
|
|
127
|
+
usd_quoted_gas: number;
|
|
128
|
+
gas_included: boolean;
|
|
129
|
+
gas_included_7702: boolean;
|
|
130
|
+
quoted_time_minutes: number;
|
|
131
|
+
usd_quoted_return: number;
|
|
132
|
+
provider: `${string}_${string}`;
|
|
133
|
+
};
|
|
103
134
|
//# sourceMappingURL=metrics.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.cts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,EACL,WAAW,EASX,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,oCAAoC;AACrC,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"metrics.d.cts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,EACL,WAAW,EASX,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,oCAAoC;AACrC,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACd,oCAAoC;AAKrC,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAChC,qBAAiB;AAQlB,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,aAWF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,aAAa,GAAG,QAAQ,aAAa,CAAC,KACpD,SAWF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qCAAqC,kBACjC,aAAa,GAAG,QAAQ,aAAa,CAAC,wBAC/B,OAAO,uBACR,mBAAmB,aAC9B,2BAA2B,YAC3B,OAAO,MAAM,EAAE,MAAM,CAAC,kBAChB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,iCACjB,MAAM,GAAG,IAAI;;aADrB,MAAM;eAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7C,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,eAcF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,oBAC/B,eAAe,YACtB,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D1E,CAAC;AAEF,eAAO,MAAM,iCAAiC,8DAE7B,aAAa,eACf,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAsB/B,CAAC"}
|
package/dist/utils/metrics.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { AccountsControllerState } from "@metamask/accounts-controller";
|
|
2
2
|
import { StatusTypes, MetricsActionType, MetricsSwapType, MetaMetricsSwapsEventSource } from "@metamask/bridge-controller";
|
|
3
|
-
import type { QuoteFetchData, QuoteMetadata, QuoteResponse, TxStatusData, RequestParams, TradeData, RequestMetadata } from "@metamask/bridge-controller";
|
|
3
|
+
import type { AccountHardwareType, QuoteFetchData, QuoteMetadata, QuoteResponse, TxStatusData, RequestParams, TradeData, RequestMetadata, PollingStatus } from "@metamask/bridge-controller";
|
|
4
4
|
import type { TransactionMeta } from "@metamask/transaction-controller";
|
|
5
|
-
import type { BridgeHistoryItem } from "../types.mjs";
|
|
5
|
+
import type { BridgeHistoryItem, BridgeStatusControllerMessenger } from "../types.mjs";
|
|
6
6
|
export declare const getTxStatusesFromHistory: ({ status, hasApprovalTx, approvalTxId, quote, }: BridgeHistoryItem) => TxStatusData;
|
|
7
7
|
/**
|
|
8
8
|
* Calculate the properties for a finalized transaction event based on the txHistory
|
|
@@ -29,16 +29,17 @@ export declare const getPriceImpactFromQuote: (quote: QuoteResponse['quote']) =>
|
|
|
29
29
|
*
|
|
30
30
|
* @param quoteResponse - The quote response
|
|
31
31
|
* @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
|
|
32
|
-
* @param
|
|
32
|
+
* @param accountHardwareType - The hardware wallet type used to submit the tx, or null if not a hardware wallet
|
|
33
33
|
* @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)
|
|
34
34
|
* @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)
|
|
35
35
|
* @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)
|
|
36
|
+
* @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
|
|
36
37
|
* @returns The properties for the pre-confirmation event
|
|
37
38
|
*/
|
|
38
|
-
export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: QuoteResponse & Partial<QuoteMetadata>, isStxEnabledOnClient: boolean,
|
|
39
|
+
export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: QuoteResponse & Partial<QuoteMetadata>, isStxEnabledOnClient: boolean, accountHardwareType: AccountHardwareType, location?: MetaMetricsSwapsEventSource, abTests?: Record<string, string>, activeAbTests?: {
|
|
39
40
|
key: string;
|
|
40
41
|
value: string;
|
|
41
|
-
}[]) => {
|
|
42
|
+
}[], tokenSecurityTypeDestination?: string | null) => {
|
|
42
43
|
active_ab_tests?: {
|
|
43
44
|
key: string;
|
|
44
45
|
value: string;
|
|
@@ -46,8 +47,12 @@ export declare const getPreConfirmationPropertiesFromQuote: (quoteResponse: Quot
|
|
|
46
47
|
ab_tests?: Record<string, string> | undefined;
|
|
47
48
|
chain_id_source: `${string}:${string}`;
|
|
48
49
|
token_symbol_source: string;
|
|
50
|
+
token_address_source: `${string}:${string}/${string}:${string}`;
|
|
49
51
|
chain_id_destination: `${string}:${string}`;
|
|
50
52
|
token_symbol_destination: string;
|
|
53
|
+
token_address_destination: `${string}:${string}/${string}:${string}`;
|
|
54
|
+
token_security_type_destination: string | null;
|
|
55
|
+
account_hardware_type: AccountHardwareType;
|
|
51
56
|
is_hardware_wallet: boolean;
|
|
52
57
|
swap_type: MetricsSwapType;
|
|
53
58
|
usd_amount_source: number;
|
|
@@ -69,9 +74,10 @@ export declare const getRequestMetadataFromHistory: (historyItem: BridgeHistoryI
|
|
|
69
74
|
* Get the properties for a swap transaction that is not in the txHistory
|
|
70
75
|
*
|
|
71
76
|
* @param transactionMeta - The transaction meta
|
|
77
|
+
* @param account - The account that submitted the transaction
|
|
72
78
|
* @returns The properties for the swap transaction
|
|
73
79
|
*/
|
|
74
|
-
export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: TransactionMeta) => {
|
|
80
|
+
export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: TransactionMeta, account?: AccountsControllerState['internalAccounts']['accounts'][string]) => {
|
|
75
81
|
source_transaction: StatusTypes;
|
|
76
82
|
error_message: string;
|
|
77
83
|
chain_id_source: `${string}:${string}`;
|
|
@@ -82,7 +88,9 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr
|
|
|
82
88
|
stx_enabled: boolean;
|
|
83
89
|
token_address_source: `${string}:${string}/${string}:${string}`;
|
|
84
90
|
token_address_destination: `${string}:${string}/${string}:${string}`;
|
|
91
|
+
token_security_type_destination: null;
|
|
85
92
|
custom_slippage: boolean;
|
|
93
|
+
account_hardware_type: AccountHardwareType;
|
|
86
94
|
is_hardware_wallet: boolean;
|
|
87
95
|
swap_type: MetricsSwapType;
|
|
88
96
|
security_warnings: never[];
|
|
@@ -100,4 +108,27 @@ export declare const getEVMTxPropertiesFromTransactionMeta: (transactionMeta: Tr
|
|
|
100
108
|
usd_actual_gas: number;
|
|
101
109
|
action_type: MetricsActionType;
|
|
102
110
|
};
|
|
111
|
+
export declare const getPollingStatusUpdatedProperties: (messenger: BridgeStatusControllerMessenger, pollingStatus: PollingStatus, historyItem: BridgeHistoryItem) => {
|
|
112
|
+
chain_id_source: `${string}:${string}`;
|
|
113
|
+
chain_id_destination: `${string}:${string}` | null;
|
|
114
|
+
token_symbol_source: string;
|
|
115
|
+
token_symbol_destination: string | null;
|
|
116
|
+
action_type: MetricsActionType;
|
|
117
|
+
polling_status: PollingStatus;
|
|
118
|
+
retry_attempts: number;
|
|
119
|
+
slippage_limit?: number | undefined;
|
|
120
|
+
custom_slippage: boolean;
|
|
121
|
+
usd_amount_source: number;
|
|
122
|
+
stx_enabled: boolean;
|
|
123
|
+
is_hardware_wallet: boolean;
|
|
124
|
+
account_hardware_type: AccountHardwareType;
|
|
125
|
+
swap_type: MetricsSwapType;
|
|
126
|
+
price_impact: number;
|
|
127
|
+
usd_quoted_gas: number;
|
|
128
|
+
gas_included: boolean;
|
|
129
|
+
gas_included_7702: boolean;
|
|
130
|
+
quoted_time_minutes: number;
|
|
131
|
+
usd_quoted_return: number;
|
|
132
|
+
provider: `${string}_${string}`;
|
|
133
|
+
};
|
|
103
134
|
//# sourceMappingURL=metrics.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.mts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,EACL,WAAW,EASX,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,oCAAoC;AACrC,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"metrics.d.mts","sourceRoot":"","sources":["../../src/utils/metrics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAsC;AAC7E,OAAO,EACL,WAAW,EASX,iBAAiB,EACjB,eAAe,EACf,2BAA2B,EAC5B,oCAAoC;AACrC,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACd,oCAAoC;AAKrC,OAAO,KAAK,EAAE,eAAe,EAAE,yCAAyC;AAIxE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAChC,qBAAiB;AAQlB,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,aAWF,CAAC;AAEF,eAAO,MAAM,qBAAqB,kBACjB,aAAa,GAAG,QAAQ,aAAa,CAAC,KACpD,SAWF,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAC3B,aAAa,CAAC,OAAO,CAAC,KAC5B,KAAK,cAAc,EAAE,cAAc,CAErC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,qCAAqC,kBACjC,aAAa,GAAG,QAAQ,aAAa,CAAC,wBAC/B,OAAO,uBACR,mBAAmB,aAC9B,2BAA2B,YAC3B,OAAO,MAAM,EAAE,MAAM,CAAC,kBAChB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,iCACjB,MAAM,GAAG,IAAI;;aADrB,MAAM;eAAS,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CAkC7C,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,eAcF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,oBAC/B,eAAe,YACtB,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D1E,CAAC;AAEF,eAAO,MAAM,iCAAiC,8DAE7B,aAAa,eACf,iBAAiB;;;;;;;;;;;;;;;;;;;;;;CAsB/B,CAAC"}
|
package/dist/utils/metrics.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { StatusTypes, formatChainIdToHex, isEthUsdt, formatChainIdToCaip, formatProviderLabel, isCustomSlippage, getSwapType,
|
|
1
|
+
import { StatusTypes, getAccountHardwareType, formatChainIdToHex, isEthUsdt, formatChainIdToCaip, formatProviderLabel, isCustomSlippage, getSwapType, formatAddressToAssetId, MetricsActionType, MetricsSwapType, MetaMetricsSwapsEventSource } from "@metamask/bridge-controller";
|
|
2
2
|
import { TransactionStatus, TransactionType } from "@metamask/transaction-controller";
|
|
3
3
|
import { BigNumber } from "bignumber.js";
|
|
4
|
+
import { getAccountByAddress } from "./accounts.mjs";
|
|
4
5
|
import { calcActualGasUsed } from "./gas.mjs";
|
|
5
6
|
import { getActualBridgeReceivedAmount, getActualSwapReceivedAmount } from "./swap-received-amount.mjs";
|
|
6
7
|
export const getTxStatusesFromHistory = ({ status, hasApprovalTx, approvalTxId, quote, }) => {
|
|
@@ -76,6 +77,7 @@ export const getRequestParamFromHistory = (historyItem) => {
|
|
|
76
77
|
chain_id_destination: formatChainIdToCaip(historyItem.quote.destChainId),
|
|
77
78
|
token_symbol_destination: historyItem.quote.destAsset.symbol,
|
|
78
79
|
token_address_destination: historyItem.quote.destAsset.assetId,
|
|
80
|
+
token_security_type_destination: historyItem.tokenSecurityTypeDestination ?? null,
|
|
79
81
|
};
|
|
80
82
|
};
|
|
81
83
|
export const getTradeDataFromQuote = (quoteResponse) => {
|
|
@@ -97,22 +99,27 @@ export const getPriceImpactFromQuote = (quote) => {
|
|
|
97
99
|
*
|
|
98
100
|
* @param quoteResponse - The quote response
|
|
99
101
|
* @param isStxEnabledOnClient - Whether smart transactions are enabled on the client, for example the getSmartTransactionsEnabled selector value from the extension
|
|
100
|
-
* @param
|
|
102
|
+
* @param accountHardwareType - The hardware wallet type used to submit the tx, or null if not a hardware wallet
|
|
101
103
|
* @param location - The entry point from which the user initiated the swap or bridge (e.g. Main View, Token View, Trending Explore)
|
|
102
104
|
* @param abTests - Legacy A/B test context for `ab_tests` (backward compatibility)
|
|
103
105
|
* @param activeAbTests - New A/B test context for `active_ab_tests` (migration target)
|
|
106
|
+
* @param tokenSecurityTypeDestination - The security classification of the destination token, supplied by the client (e.g. from token security/scanning data). Pass `null` when no security data is available.
|
|
104
107
|
* @returns The properties for the pre-confirmation event
|
|
105
108
|
*/
|
|
106
|
-
export const getPreConfirmationPropertiesFromQuote = (quoteResponse, isStxEnabledOnClient,
|
|
109
|
+
export const getPreConfirmationPropertiesFromQuote = (quoteResponse, isStxEnabledOnClient, accountHardwareType, location = MetaMetricsSwapsEventSource.MainView, abTests, activeAbTests, tokenSecurityTypeDestination) => {
|
|
107
110
|
const { quote } = quoteResponse;
|
|
108
111
|
return {
|
|
109
112
|
...getPriceImpactFromQuote(quote),
|
|
110
113
|
...getTradeDataFromQuote(quoteResponse),
|
|
111
114
|
chain_id_source: formatChainIdToCaip(quote.srcChainId),
|
|
112
115
|
token_symbol_source: quote.srcAsset.symbol,
|
|
116
|
+
token_address_source: quote.srcAsset.assetId,
|
|
113
117
|
chain_id_destination: formatChainIdToCaip(quote.destChainId),
|
|
114
118
|
token_symbol_destination: quote.destAsset.symbol,
|
|
115
|
-
|
|
119
|
+
token_address_destination: quote.destAsset.assetId,
|
|
120
|
+
token_security_type_destination: tokenSecurityTypeDestination ?? null,
|
|
121
|
+
account_hardware_type: accountHardwareType,
|
|
122
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
116
123
|
swap_type: getSwapType(quoteResponse.quote.srcChainId, quoteResponse.quote.destChainId),
|
|
117
124
|
usd_amount_source: Number(quoteResponse.sentAmount?.usd ?? 0),
|
|
118
125
|
stx_enabled: isStxEnabledOnClient,
|
|
@@ -141,12 +148,14 @@ export const getTradeDataFromHistory = (historyItem) => {
|
|
|
141
148
|
};
|
|
142
149
|
export const getRequestMetadataFromHistory = (historyItem, account) => {
|
|
143
150
|
const { quote, slippagePercentage, isStxEnabled } = historyItem;
|
|
151
|
+
const accountHardwareType = getAccountHardwareType(account);
|
|
144
152
|
return {
|
|
145
153
|
slippage_limit: slippagePercentage,
|
|
146
154
|
custom_slippage: isCustomSlippage(slippagePercentage),
|
|
147
155
|
usd_amount_source: Number(historyItem.pricingData?.amountSentInUsd ?? 0),
|
|
148
156
|
swap_type: getSwapType(quote.srcChainId, quote.destChainId),
|
|
149
|
-
|
|
157
|
+
account_hardware_type: accountHardwareType,
|
|
158
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
150
159
|
stx_enabled: isStxEnabled ?? false,
|
|
151
160
|
security_warnings: [],
|
|
152
161
|
};
|
|
@@ -155,9 +164,11 @@ export const getRequestMetadataFromHistory = (historyItem, account) => {
|
|
|
155
164
|
* Get the properties for a swap transaction that is not in the txHistory
|
|
156
165
|
*
|
|
157
166
|
* @param transactionMeta - The transaction meta
|
|
167
|
+
* @param account - The account that submitted the transaction
|
|
158
168
|
* @returns The properties for the swap transaction
|
|
159
169
|
*/
|
|
160
|
-
export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
170
|
+
export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta, account) => {
|
|
171
|
+
const accountHardwareType = getAccountHardwareType(account);
|
|
161
172
|
return {
|
|
162
173
|
source_transaction: [
|
|
163
174
|
TransactionStatus.failed,
|
|
@@ -166,7 +177,12 @@ export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
166
177
|
].includes(transactionMeta.status)
|
|
167
178
|
? StatusTypes.FAILED
|
|
168
179
|
: StatusTypes.COMPLETE,
|
|
169
|
-
error_message:
|
|
180
|
+
error_message: [
|
|
181
|
+
`Transaction ${transactionMeta.status}`,
|
|
182
|
+
transactionMeta.error?.message,
|
|
183
|
+
]
|
|
184
|
+
.filter(Boolean)
|
|
185
|
+
.join('. '),
|
|
170
186
|
chain_id_source: formatChainIdToCaip(transactionMeta.chainId),
|
|
171
187
|
chain_id_destination: formatChainIdToCaip(transactionMeta.chainId),
|
|
172
188
|
token_symbol_source: transactionMeta.sourceTokenSymbol ?? '',
|
|
@@ -175,8 +191,10 @@ export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
175
191
|
stx_enabled: false,
|
|
176
192
|
token_address_source: formatAddressToAssetId(transactionMeta.sourceTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
177
193
|
token_address_destination: formatAddressToAssetId(transactionMeta.destinationTokenAddress ?? '', transactionMeta.chainId) ?? '',
|
|
194
|
+
token_security_type_destination: null,
|
|
178
195
|
custom_slippage: false,
|
|
179
|
-
|
|
196
|
+
account_hardware_type: accountHardwareType,
|
|
197
|
+
is_hardware_wallet: accountHardwareType !== null,
|
|
180
198
|
swap_type: transactionMeta.type &&
|
|
181
199
|
[TransactionType.swap, TransactionType.swapApproval].includes(transactionMeta.type)
|
|
182
200
|
? MetricsSwapType.SINGLE
|
|
@@ -197,4 +215,22 @@ export const getEVMTxPropertiesFromTransactionMeta = (transactionMeta) => {
|
|
|
197
215
|
action_type: MetricsActionType.SWAPBRIDGE_V1,
|
|
198
216
|
};
|
|
199
217
|
};
|
|
218
|
+
export const getPollingStatusUpdatedProperties = (messenger, pollingStatus, historyItem) => {
|
|
219
|
+
const selectedAccount = getAccountByAddress(messenger, historyItem.account);
|
|
220
|
+
const requestParams = getRequestParamFromHistory(historyItem);
|
|
221
|
+
const requestMetadata = getRequestMetadataFromHistory(historyItem, selectedAccount);
|
|
222
|
+
const { security_warnings: _, ...metadataWithoutWarnings } = requestMetadata;
|
|
223
|
+
return {
|
|
224
|
+
...getTradeDataFromHistory(historyItem),
|
|
225
|
+
...getPriceImpactFromQuote(historyItem.quote),
|
|
226
|
+
...metadataWithoutWarnings,
|
|
227
|
+
chain_id_source: requestParams.chain_id_source,
|
|
228
|
+
chain_id_destination: requestParams.chain_id_destination,
|
|
229
|
+
token_symbol_source: requestParams.token_symbol_source,
|
|
230
|
+
token_symbol_destination: requestParams.token_symbol_destination,
|
|
231
|
+
action_type: MetricsActionType.SWAPBRIDGE_V1,
|
|
232
|
+
polling_status: pollingStatus,
|
|
233
|
+
retry_attempts: historyItem.attempts?.counter ?? 0,
|
|
234
|
+
};
|
|
235
|
+
};
|
|
200
236
|
//# sourceMappingURL=metrics.mjs.map
|