From e21c32f66e7986c58b25195292a12917155bd9ea Mon Sep 17 00:00:00 2001 From: david0xd Date: Fri, 4 Apr 2025 12:17:22 +0200 Subject: [PATCH 1/7] Add Snap export tracking hook to Snap controller init --- app/core/Engine/controllers/snaps/snap-controller-init.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.ts b/app/core/Engine/controllers/snaps/snap-controller-init.ts index 03b35d905e79..117aabda4c41 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.ts @@ -20,6 +20,8 @@ import { KeyringTypes } from '@metamask/keyring-controller'; import { selectBasicFunctionalityEnabled } from '../../../../selectors/settings'; import { store } from '../../../../store'; import PREINSTALLED_SNAPS from '../../../../lib/snaps/preinstalled-snaps'; +import { MetaMetrics } from '../../../Analytics'; +import { MetricsEventBuilder } from '../../../Analytics/MetricsEventBuilder'; /** * Initialize the Snap controller. @@ -117,6 +119,11 @@ export const snapControllerInit: ControllerInitFunction< clientCryptography: { pbkdf2Sha512: pbkdf2, }, + trackEvent: (params) => + MetaMetrics.getInstance().trackEvent( + MetricsEventBuilder.createEventBuilder(params) + .build(), + ), }); return { From ed3d3633547ea4c91a9186acfd82bd3bd3fc7d8c Mon Sep 17 00:00:00 2001 From: david0xd Date: Fri, 4 Apr 2025 14:17:41 +0200 Subject: [PATCH 2/7] Fix type error --- app/core/Engine/controllers/snaps/snap-controller-init.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.ts b/app/core/Engine/controllers/snaps/snap-controller-init.ts index 117aabda4c41..155eb8ba490c 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.ts @@ -20,7 +20,7 @@ import { KeyringTypes } from '@metamask/keyring-controller'; import { selectBasicFunctionalityEnabled } from '../../../../selectors/settings'; import { store } from '../../../../store'; import PREINSTALLED_SNAPS from '../../../../lib/snaps/preinstalled-snaps'; -import { MetaMetrics } from '../../../Analytics'; +import { IMetaMetricsEvent, MetaMetrics } from '../../../Analytics'; import { MetricsEventBuilder } from '../../../Analytics/MetricsEventBuilder'; /** @@ -121,8 +121,9 @@ export const snapControllerInit: ControllerInitFunction< }, trackEvent: (params) => MetaMetrics.getInstance().trackEvent( - MetricsEventBuilder.createEventBuilder(params) - .build(), + MetricsEventBuilder.createEventBuilder( + params as IMetaMetricsEvent, + ).build(), ), }); From a96a51763cd44cdc818dbac6c6aea3f58fe3a2bf Mon Sep 17 00:00:00 2001 From: david0xd Date: Mon, 7 Apr 2025 12:14:45 +0200 Subject: [PATCH 3/7] Update tracking props mapping --- .../Engine/controllers/snaps/snap-controller-init.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.ts b/app/core/Engine/controllers/snaps/snap-controller-init.ts index 155eb8ba490c..f8c7c757ef9b 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.ts @@ -20,8 +20,9 @@ import { KeyringTypes } from '@metamask/keyring-controller'; import { selectBasicFunctionalityEnabled } from '../../../../selectors/settings'; import { store } from '../../../../store'; import PREINSTALLED_SNAPS from '../../../../lib/snaps/preinstalled-snaps'; -import { IMetaMetricsEvent, MetaMetrics } from '../../../Analytics'; +import { MetaMetrics } from '../../../Analytics'; import { MetricsEventBuilder } from '../../../Analytics/MetricsEventBuilder'; +import { ITrackingEvent } from '../../../Analytics/MetaMetrics.types'; /** * Initialize the Snap controller. @@ -121,9 +122,10 @@ export const snapControllerInit: ControllerInitFunction< }, trackEvent: (params) => MetaMetrics.getInstance().trackEvent( - MetricsEventBuilder.createEventBuilder( - params as IMetaMetricsEvent, - ).build(), + MetricsEventBuilder.createEventBuilder({ + name: params.event, + properties: params.properties, + } as ITrackingEvent).build(), ), }); From b779944bc48667a86893fce5a18f4b85a15e1f8e Mon Sep 17 00:00:00 2001 From: david0xd Date: Mon, 7 Apr 2025 12:42:14 +0200 Subject: [PATCH 4/7] Update temporary types for metrics params --- app/core/Engine/controllers/snaps/snap-controller-init.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.ts b/app/core/Engine/controllers/snaps/snap-controller-init.ts index f8c7c757ef9b..fa11b77d6172 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.ts @@ -120,7 +120,10 @@ export const snapControllerInit: ControllerInitFunction< clientCryptography: { pbkdf2Sha512: pbkdf2, }, - trackEvent: (params) => + trackEvent: (params: { + event: string; + properties?: Record; + }) => MetaMetrics.getInstance().trackEvent( MetricsEventBuilder.createEventBuilder({ name: params.event, From 937d2c02147f19a8e9ebed7c6b227701a84f9a9f Mon Sep 17 00:00:00 2001 From: david0xd Date: Mon, 7 Apr 2025 12:56:04 +0200 Subject: [PATCH 5/7] Fix unit tests --- app/core/Engine/controllers/snaps/snap-controller-init.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.test.ts b/app/core/Engine/controllers/snaps/snap-controller-init.test.ts index 7e8c42270d9d..a8cb72b5f3b3 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.test.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.test.ts @@ -67,6 +67,7 @@ describe('SnapControllerInit', () => { getMnemonicSeed: expect.any(Function), maxIdleTime: expect.any(Number), preinstalledSnaps: expect.any(Array), + trackEvent: expect.any(Function), }); }); From 98d7eb85943b3198f6a459a37c9c612f94f549e8 Mon Sep 17 00:00:00 2001 From: david0xd Date: Wed, 9 Apr 2025 12:02:53 +0200 Subject: [PATCH 6/7] Add small fix for tracking Snap event name --- app/core/Analytics/MetaMetrics.types.ts | 1 + app/core/Analytics/MetricsEventBuilder.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/core/Analytics/MetaMetrics.types.ts b/app/core/Analytics/MetaMetrics.types.ts index 8cdbc17979d2..00032c7e1e81 100644 --- a/app/core/Analytics/MetaMetrics.types.ts +++ b/app/core/Analytics/MetaMetrics.types.ts @@ -110,6 +110,7 @@ export interface ITrackingEvent { * legacy MetaMetrics event interface */ export interface IMetaMetricsEvent { + name?: string; category: string; properties?: { name?: string; diff --git a/app/core/Analytics/MetricsEventBuilder.ts b/app/core/Analytics/MetricsEventBuilder.ts index e5e5e6861057..1ea605c6fe31 100644 --- a/app/core/Analytics/MetricsEventBuilder.ts +++ b/app/core/Analytics/MetricsEventBuilder.ts @@ -15,7 +15,7 @@ class TrackingEvent implements ITrackingEvent { saveDataRecording: boolean; constructor(event: IMetaMetricsEvent) { - this.name = event.category; + this.name = event.category ?? event.name; this.properties = event.properties || {}; this.sensitiveProperties = {}; this.saveDataRecording = true; From bb70f929557817dc18073f34d461b2c6c778c8a4 Mon Sep 17 00:00:00 2001 From: david0xd Date: Wed, 9 Apr 2025 12:18:57 +0200 Subject: [PATCH 7/7] Apply another fix --- app/core/Analytics/MetaMetrics.types.ts | 1 - app/core/Analytics/MetricsEventBuilder.ts | 2 +- app/core/Engine/controllers/snaps/snap-controller-init.ts | 5 ++--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/core/Analytics/MetaMetrics.types.ts b/app/core/Analytics/MetaMetrics.types.ts index 00032c7e1e81..8cdbc17979d2 100644 --- a/app/core/Analytics/MetaMetrics.types.ts +++ b/app/core/Analytics/MetaMetrics.types.ts @@ -110,7 +110,6 @@ export interface ITrackingEvent { * legacy MetaMetrics event interface */ export interface IMetaMetricsEvent { - name?: string; category: string; properties?: { name?: string; diff --git a/app/core/Analytics/MetricsEventBuilder.ts b/app/core/Analytics/MetricsEventBuilder.ts index 1ea605c6fe31..e5e5e6861057 100644 --- a/app/core/Analytics/MetricsEventBuilder.ts +++ b/app/core/Analytics/MetricsEventBuilder.ts @@ -15,7 +15,7 @@ class TrackingEvent implements ITrackingEvent { saveDataRecording: boolean; constructor(event: IMetaMetricsEvent) { - this.name = event.category ?? event.name; + this.name = event.category; this.properties = event.properties || {}; this.sensitiveProperties = {}; this.saveDataRecording = true; diff --git a/app/core/Engine/controllers/snaps/snap-controller-init.ts b/app/core/Engine/controllers/snaps/snap-controller-init.ts index fa11b77d6172..72b79d09d3ed 100644 --- a/app/core/Engine/controllers/snaps/snap-controller-init.ts +++ b/app/core/Engine/controllers/snaps/snap-controller-init.ts @@ -22,7 +22,6 @@ import { store } from '../../../../store'; import PREINSTALLED_SNAPS from '../../../../lib/snaps/preinstalled-snaps'; import { MetaMetrics } from '../../../Analytics'; import { MetricsEventBuilder } from '../../../Analytics/MetricsEventBuilder'; -import { ITrackingEvent } from '../../../Analytics/MetaMetrics.types'; /** * Initialize the Snap controller. @@ -126,9 +125,9 @@ export const snapControllerInit: ControllerInitFunction< }) => MetaMetrics.getInstance().trackEvent( MetricsEventBuilder.createEventBuilder({ - name: params.event, + category: params.event, properties: params.properties, - } as ITrackingEvent).build(), + }).build(), ), });