mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
track address book usage (#14382)
* track address book usage * Update app/scripts/controllers/metametrics.js Co-authored-by: Ariella Vu <20778143+digiwand@users.noreply.github.com> * Update shared/constants/metametrics.js Co-authored-by: Ariella Vu <20778143+digiwand@users.noreply.github.com> Co-authored-by: Ariella Vu <20778143+digiwand@users.noreply.github.com>
This commit is contained in:
parent
455d4a9825
commit
922ebd57cb
@ -1,4 +1,4 @@
|
|||||||
import { isEqual, merge, omit, omitBy, pickBy } from 'lodash';
|
import { isEqual, merge, omit, omitBy, pickBy, size, sum } from 'lodash';
|
||||||
import { ObservableStore } from '@metamask/obs-store';
|
import { ObservableStore } from '@metamask/obs-store';
|
||||||
import { bufferToHex, keccak } from 'ethereumjs-util';
|
import { bufferToHex, keccak } from 'ethereumjs-util';
|
||||||
import { generateUUID } from 'pubnub';
|
import { generateUUID } from 'pubnub';
|
||||||
@ -31,6 +31,7 @@ const exceptionsToFilter = {
|
|||||||
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsPagePayload} MetaMetricsPagePayload
|
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsPagePayload} MetaMetricsPagePayload
|
||||||
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsPageOptions} MetaMetricsPageOptions
|
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsPageOptions} MetaMetricsPageOptions
|
||||||
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsEventFragment} MetaMetricsEventFragment
|
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsEventFragment} MetaMetricsEventFragment
|
||||||
|
* @typedef {import('../../../shared/constants/metametrics').MetaMetricsTraits} MetaMetricsTraits
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -531,8 +532,21 @@ export default class MetaMetricsController {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method generates the MetaMetrics user traits object, omitting any
|
||||||
|
* traits that have not changed since the last invocation of this method.
|
||||||
|
*
|
||||||
|
* @param {object} metamaskState - Full metamask state object.
|
||||||
|
* @returns {MetaMetricsTraits | null} traits that have changed since last update
|
||||||
|
*/
|
||||||
_buildUserTraitsObject(metamaskState) {
|
_buildUserTraitsObject(metamaskState) {
|
||||||
|
/**
|
||||||
|
* @type {MetaMetricsTraits}
|
||||||
|
*/
|
||||||
const currentTraits = {
|
const currentTraits = {
|
||||||
|
[TRAITS.ADDRESS_BOOK_ENTRIES]: sum(
|
||||||
|
Object.values(metamaskState.addressBook).map(size),
|
||||||
|
),
|
||||||
[TRAITS.LEDGER_CONNECTION_TYPE]: metamaskState.ledgerTransportType,
|
[TRAITS.LEDGER_CONNECTION_TYPE]: metamaskState.ledgerTransportType,
|
||||||
[TRAITS.NUMBER_OF_ACCOUNTS]: Object.values(metamaskState.identities)
|
[TRAITS.NUMBER_OF_ACCOUNTS]: Object.values(metamaskState.identities)
|
||||||
.length,
|
.length,
|
||||||
|
@ -646,9 +646,14 @@ describe('MetaMetricsController', function () {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
threeBoxSyncingAllowed: false,
|
threeBoxSyncingAllowed: false,
|
||||||
|
addressBook: {
|
||||||
|
[MAINNET_CHAIN_ID]: [{ address: '0x' }],
|
||||||
|
[ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
assert.deepEqual(traits, {
|
assert.deepEqual(traits, {
|
||||||
|
[TRAITS.ADDRESS_BOOK_ENTRIES]: 3,
|
||||||
[TRAITS.LEDGER_CONNECTION_TYPE]: 'web-hid',
|
[TRAITS.LEDGER_CONNECTION_TYPE]: 'web-hid',
|
||||||
[TRAITS.NETWORKS_ADDED]: [MAINNET_CHAIN_ID, ROPSTEN_CHAIN_ID],
|
[TRAITS.NETWORKS_ADDED]: [MAINNET_CHAIN_ID, ROPSTEN_CHAIN_ID],
|
||||||
[TRAITS.NUMBER_OF_ACCOUNTS]: 2,
|
[TRAITS.NUMBER_OF_ACCOUNTS]: 2,
|
||||||
@ -667,6 +672,10 @@ describe('MetaMetricsController', function () {
|
|||||||
ledgerTransportType: 'web-hid',
|
ledgerTransportType: 'web-hid',
|
||||||
identities: [{}, {}],
|
identities: [{}, {}],
|
||||||
threeBoxSyncingAllowed: false,
|
threeBoxSyncingAllowed: false,
|
||||||
|
addressBook: {
|
||||||
|
[MAINNET_CHAIN_ID]: [{ address: '0x' }],
|
||||||
|
[ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const updatedTraits = metaMetricsController._buildUserTraitsObject({
|
const updatedTraits = metaMetricsController._buildUserTraitsObject({
|
||||||
@ -677,9 +686,14 @@ describe('MetaMetricsController', function () {
|
|||||||
ledgerTransportType: 'web-hid',
|
ledgerTransportType: 'web-hid',
|
||||||
identities: [{}, {}, {}],
|
identities: [{}, {}, {}],
|
||||||
threeBoxSyncingAllowed: false,
|
threeBoxSyncingAllowed: false,
|
||||||
|
addressBook: {
|
||||||
|
[MAINNET_CHAIN_ID]: [{ address: '0x' }, { address: '0x1' }],
|
||||||
|
[ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
assert.deepEqual(updatedTraits, {
|
assert.deepEqual(updatedTraits, {
|
||||||
|
[TRAITS.ADDRESS_BOOK_ENTRIES]: 4,
|
||||||
[TRAITS.NUMBER_OF_ACCOUNTS]: 3,
|
[TRAITS.NUMBER_OF_ACCOUNTS]: 3,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -694,6 +708,10 @@ describe('MetaMetricsController', function () {
|
|||||||
ledgerTransportType: 'web-hid',
|
ledgerTransportType: 'web-hid',
|
||||||
identities: [{}, {}],
|
identities: [{}, {}],
|
||||||
threeBoxSyncingAllowed: false,
|
threeBoxSyncingAllowed: false,
|
||||||
|
addressBook: {
|
||||||
|
[MAINNET_CHAIN_ID]: [{ address: '0x' }],
|
||||||
|
[ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const updatedTraits = metaMetricsController._buildUserTraitsObject({
|
const updatedTraits = metaMetricsController._buildUserTraitsObject({
|
||||||
@ -704,6 +722,10 @@ describe('MetaMetricsController', function () {
|
|||||||
ledgerTransportType: 'web-hid',
|
ledgerTransportType: 'web-hid',
|
||||||
identities: [{}, {}],
|
identities: [{}, {}],
|
||||||
threeBoxSyncingAllowed: false,
|
threeBoxSyncingAllowed: false,
|
||||||
|
addressBook: {
|
||||||
|
[MAINNET_CHAIN_ID]: [{ address: '0x' }],
|
||||||
|
[ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
assert.equal(updatedTraits, null);
|
assert.equal(updatedTraits, null);
|
||||||
|
@ -156,16 +156,20 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} Traits
|
* @typedef {Object} Traits
|
||||||
* @property {string} [LEDGER_CONNECTION_TYPE] - when ledger live connnection
|
* @property {'address_book_entries'} ADDRESS_BOOK_ENTRIES - When the user
|
||||||
* type is changed we identify the ledger_connection_type trait
|
* adds or modifies addresses in address book the address_book_entries trait
|
||||||
* @property {string} [NETWORKS_ADDED] - when user modifies networks we
|
* is identified.
|
||||||
* identify the networks_added trait
|
* @property {'ledger_connection_type'} LEDGER_CONNECTION_TYPE - when ledger
|
||||||
* @property {string} [NUMBER_OF_ACCOUNTS] - when identities change, we
|
* live connnection type is changed we identify the ledger_connection_type
|
||||||
* identify the new number_of_accounts trait
|
* trait
|
||||||
* @property {number_of_nft_collections} [NUMBER_OF_NFT_COLLECTIONS] - user trait for number of
|
* @property {'networks_added'} NETWORKS_ADDED - when user modifies networks
|
||||||
* unique NFT addresses
|
* we identify the networks_added trait
|
||||||
* @property {string} [THREE_BOX_ENABLED] - when 3box feature is toggled we
|
* @property {'number_of_accounts'} NUMBER_OF_ACCOUNTS - when identities
|
||||||
* identify the 3box_enabled trait
|
* change, we identify the new number_of_accounts trait
|
||||||
|
* @property {'number_of_nft_collections'} NUMBER_OF_NFT_COLLECTIONS - user
|
||||||
|
* trait for number of unique NFT addresses
|
||||||
|
* @property {'three_box_enabled'} THREE_BOX_ENABLED - when 3box feature is
|
||||||
|
* toggled we identify the 3box_enabled trait
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,6 +178,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
export const TRAITS = {
|
export const TRAITS = {
|
||||||
|
ADDRESS_BOOK_ENTRIES: 'address_book_entries',
|
||||||
LEDGER_CONNECTION_TYPE: 'ledger_connection_type',
|
LEDGER_CONNECTION_TYPE: 'ledger_connection_type',
|
||||||
NETWORKS_ADDED: 'networks_added',
|
NETWORKS_ADDED: 'networks_added',
|
||||||
NUMBER_OF_ACCOUNTS: 'number_of_accounts',
|
NUMBER_OF_ACCOUNTS: 'number_of_accounts',
|
||||||
@ -181,6 +186,22 @@ export const TRAITS = {
|
|||||||
THREE_BOX_ENABLED: 'three_box_enabled',
|
THREE_BOX_ENABLED: 'three_box_enabled',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} MetaMetricsTraits
|
||||||
|
* @property {number} [address_book_entries] - The number of entries in the
|
||||||
|
* user's address book.
|
||||||
|
* @property {'ledgerLive' | 'webhid' | 'u2f'} [ledger_connection_type] - the
|
||||||
|
* type of ledger connection set by user preference.
|
||||||
|
* @property {Array<string>} [networks_added] - An array consisting of chainIds
|
||||||
|
* that indicate the networks a user has added to their MetaMask.
|
||||||
|
* @property {number} [number_of_accounts] - A number representing the number
|
||||||
|
* of identities(accounts) added to the user's MetaMask.
|
||||||
|
* @property {number} [number_of_nft_collections] - A number representing the
|
||||||
|
* amount of different NFT collections the user possesses an NFT from.
|
||||||
|
* @property {boolean} [three_box_enabled] - does the user have 3box sync
|
||||||
|
* enabled?
|
||||||
|
*/
|
||||||
|
|
||||||
// Mixpanel converts the zero address value to a truly anonymous event, which
|
// Mixpanel converts the zero address value to a truly anonymous event, which
|
||||||
// speeds up reporting
|
// speeds up reporting
|
||||||
export const METAMETRICS_ANONYMOUS_ID = '0x0000000000000000';
|
export const METAMETRICS_ANONYMOUS_ID = '0x0000000000000000';
|
||||||
|
Loading…
Reference in New Issue
Block a user