From fe06ffe24d2c740122182b8c77b2c77dc3c1847a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20=C5=81ucka?= <5708018+PatrykLucka@users.noreply.github.com> Date: Wed, 19 Feb 2025 15:18:01 +0100 Subject: [PATCH] feat(multi-srp): add number_of_hd_entropies user trait --- .../controllers/metametrics-controller.test.ts | 5 +++++ .../controllers/metametrics-controller.ts | 18 ++++++++++++++++++ shared/constants/metametrics.ts | 8 ++++++++ 3 files changed, 31 insertions(+) diff --git a/app/scripts/controllers/metametrics-controller.test.ts b/app/scripts/controllers/metametrics-controller.test.ts index aaefa756f21d..55e13bbb3225 100644 --- a/app/scripts/controllers/metametrics-controller.test.ts +++ b/app/scripts/controllers/metametrics-controller.test.ts @@ -1458,6 +1458,7 @@ describe('MetaMetricsController', function () { ///: BEGIN:ONLY_INCLUDE_IF(build-mmi) custodyAccountDetails: {}, ///: END:ONLY_INCLUDE_IF + keyrings: [], }); expect(traits).toStrictEqual({ @@ -1555,6 +1556,7 @@ describe('MetaMetricsController', function () { ///: BEGIN:ONLY_INCLUDE_IF(build-mmi) custodyAccountDetails: {}, ///: END:ONLY_INCLUDE_IF + keyrings: [], }); const updatedTraits = controller._buildUserTraitsObject({ @@ -1614,6 +1616,7 @@ describe('MetaMetricsController', function () { ///: BEGIN:ONLY_INCLUDE_IF(build-mmi) custodyAccountDetails: {}, ///: END:ONLY_INCLUDE_IF + keyrings: [], }); expect(updatedTraits).toStrictEqual({ @@ -1681,6 +1684,7 @@ describe('MetaMetricsController', function () { ///: BEGIN:ONLY_INCLUDE_IF(build-mmi) custodyAccountDetails: {}, ///: END:ONLY_INCLUDE_IF + keyrings: [], }); const updatedTraits = controller._buildUserTraitsObject({ @@ -1730,6 +1734,7 @@ describe('MetaMetricsController', function () { ///: BEGIN:ONLY_INCLUDE_IF(build-mmi) custodyAccountDetails: {}, ///: END:ONLY_INCLUDE_IF + keyrings: [], }); expect(updatedTraits).toStrictEqual(null); }); diff --git a/app/scripts/controllers/metametrics-controller.ts b/app/scripts/controllers/metametrics-controller.ts index 7d8eadba18f9..2b5da7922e9e 100644 --- a/app/scripts/controllers/metametrics-controller.ts +++ b/app/scripts/controllers/metametrics-controller.ts @@ -72,6 +72,7 @@ import Analytics from '../lib/segment/analytics'; import { ENVIRONMENT } from '../../../development/build/constants'; ///: END:ONLY_INCLUDE_IF +import { KeyringType } from '../../../shared/constants/keyring'; import type { PreferencesControllerState, PreferencesControllerGetStateAction, @@ -175,6 +176,7 @@ export type MetaMaskState = { }; }; ///: END:ONLY_INCLUDE_IF + keyrings: { type: string; accounts: string[] }[]; }; /** @@ -1209,6 +1211,9 @@ export default class MetaMetricsController extends BaseController< [MetaMetricsUserTrait.NumberOfTokens]: this.#getNumberOfTokens( metamaskState.allTokens, ), + [MetaMetricsUserTrait.NumberOfHDEntropies]: + this.#getNumberOfHDEntropies(metamaskState) ?? + previousUserTraits?.number_of_hd_entropies, [MetaMetricsUserTrait.OpenSeaApiEnabled]: metamaskState.openSeaEnabled, [MetaMetricsUserTrait.ThreeBoxEnabled]: false, // deprecated, hard-coded as false [MetaMetricsUserTrait.Theme]: metamaskState.theme || 'default', @@ -1335,6 +1340,19 @@ export default class MetaMetricsController extends BaseController< }, 0); } + /** + * Returns the number of HD Entropies the user has. + * + * @param metamaskState + */ + #getNumberOfHDEntropies(metamaskState: MetaMaskState): number { + return ( + metamaskState.keyrings?.filter( + (keyring) => keyring.type === KeyringType.hdKeyTree, + ).length ?? 0 + ); + } + /** * Calls segment.identify with given user traits * diff --git a/shared/constants/metametrics.ts b/shared/constants/metametrics.ts index f247f507285d..13477261fad2 100644 --- a/shared/constants/metametrics.ts +++ b/shared/constants/metametrics.ts @@ -422,6 +422,10 @@ export type MetaMetricsUserTraits = { * accounts. */ number_of_tokens?: number; + /** + * The number of HD Entropies the user has. + */ + number_of_hd_entropies?: number; /** * Does the user have the OpenSea API enabled? */ @@ -541,6 +545,10 @@ export enum MetaMetricsUserTrait { * Identified when the number of tokens change. */ NumberOfTokens = 'number_of_tokens', + /** + * Identified when the user has HD Entropies + */ + NumberOfHDEntropies = 'number_of_hd_entropies', /** * Identified when the OpenSea API is enabled. */