diff --git a/src/SmartTransactionsController.test.ts b/src/SmartTransactionsController.test.ts index 158b6b4..381ceb9 100644 --- a/src/SmartTransactionsController.test.ts +++ b/src/SmartTransactionsController.test.ts @@ -399,7 +399,22 @@ describe('SmartTransactionsController', () => { expect(trackMetaMetricsEventSpy).not.toHaveBeenCalled(); }); - it('tracks status change if smartTransaction and prevSmartTransaction have different statuses', () => { + it('tracks status change if smartTransaction and prevSmartTransaction have different statuses and status is not pending', () => { + const smartTransaction = { + ...createStateAfterPending()[0], + status: 'success', + swapMetaData: {}, + }; + const prevSmartTransaction = { ...smartTransaction, status: 'pending' }; + + smartTransactionsController.trackStxStatusChange( + smartTransaction as SmartTransaction, + prevSmartTransaction as SmartTransaction, + ); + expect(trackMetaMetricsEventSpy).toHaveBeenCalledTimes(1); + }); + + it('tracks status change if smartTransaction and prevSmartTransaction and status is pending', () => { const smartTransaction = { ...createStateAfterPending()[0], swapMetaData: {}, @@ -409,7 +424,21 @@ describe('SmartTransactionsController', () => { smartTransaction as SmartTransaction, prevSmartTransaction as SmartTransaction, ); - expect(trackMetaMetricsEventSpy).toHaveBeenCalled(); + expect(trackMetaMetricsEventSpy).toHaveBeenCalledTimes(2); + }); + + it('tracks status change if smartTransaction and prevSmartTransaction and status is cancelled', () => { + const smartTransaction = { + ...createStateAfterPending()[0], + status: 'cancelled', + swapMetaData: {}, + }; + const prevSmartTransaction = { ...smartTransaction, status: 'pending' }; + smartTransactionsController.trackStxStatusChange( + smartTransaction as SmartTransaction, + prevSmartTransaction as SmartTransaction, + ); + expect(trackMetaMetricsEventSpy).toHaveBeenCalledTimes(2); }); }); diff --git a/src/SmartTransactionsController.ts b/src/SmartTransactionsController.ts index e91a149..e530f35 100644 --- a/src/SmartTransactionsController.ts +++ b/src/SmartTransactionsController.ts @@ -230,7 +230,7 @@ export default class SmartTransactionsController extends BaseController< } const sensitiveProperties = { - stx_status: updatedSmartTransaction.status, + stx_status: updatedSmartTransaction.status as SmartTransactionStatuses, token_from_symbol: updatedSmartTransaction.sourceTokenSymbol, token_to_symbol: updatedSmartTransaction.destinationTokenSymbol, processing_time: getStxProcessingTime(updatedSmartTransaction.time), @@ -239,6 +239,45 @@ export default class SmartTransactionsController extends BaseController< stx_user_opt_in: true, }; + // for reporting reasons we are logging also stx statuses mapped to regular tx statuses + // resulting in 2 events being logged for each stx status change + // the category: swaps and the category: Transactions + const txEventData = { + category: 'Transactions', + properties: { + chain_id: updatedSmartTransaction.chainId, + referrer: updatedSmartTransaction.origin, + network: updatedSmartTransaction.metamaskNetworkId, + // Hardcoded properties since we don't have access to the transaction object at this point + // These properties are the same for all STX + account_type: 'MetaMask', + transaction_type: 'contractInteraction', + source: 'user', + token_standard: 'NONE', + }, + sensitiveProperties: { + status: sensitiveProperties.stx_status, + first_seen: updatedSmartTransaction.time, + completion_time: sensitiveProperties.processing_time, + }, + }; + + if (sensitiveProperties.stx_status === SmartTransactionStatuses.PENDING) { + this.trackMetaMetricsEvent({ + event: 'Transaction Submitted', + ...txEventData, + }); + } else if ( + sensitiveProperties.stx_status.includes( + SmartTransactionStatuses.CANCELLED, + ) + ) { + this.trackMetaMetricsEvent({ + event: 'Transaction Finalized', + ...txEventData, + }); + } + this.trackMetaMetricsEvent({ event: 'STX Status Updated', category: 'swaps',