@metamask-previews/analytics-controller 0.0.0-preview-a5935709 → 0.0.0-preview-e493d3e8
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 +1 -1
- package/README.md +105 -208
- package/dist/AnalyticsController-method-action-types.cjs.map +1 -1
- package/dist/AnalyticsController-method-action-types.d.cts +26 -28
- package/dist/AnalyticsController-method-action-types.d.cts.map +1 -1
- package/dist/AnalyticsController-method-action-types.d.mts +26 -28
- package/dist/AnalyticsController-method-action-types.d.mts.map +1 -1
- package/dist/AnalyticsController-method-action-types.mjs.map +1 -1
- package/dist/AnalyticsController.cjs +73 -110
- package/dist/AnalyticsController.cjs.map +1 -1
- package/dist/AnalyticsController.d.cts +32 -50
- package/dist/AnalyticsController.d.cts.map +1 -1
- package/dist/AnalyticsController.d.mts +32 -50
- package/dist/AnalyticsController.d.mts.map +1 -1
- package/dist/AnalyticsController.mjs +72 -109
- package/dist/AnalyticsController.mjs.map +1 -1
- package/dist/AnalyticsPlatformAdapter.types.cjs.map +1 -1
- package/dist/AnalyticsPlatformAdapter.types.d.cts +15 -63
- package/dist/AnalyticsPlatformAdapter.types.d.cts.map +1 -1
- package/dist/AnalyticsPlatformAdapter.types.d.mts +15 -63
- package/dist/AnalyticsPlatformAdapter.types.d.mts.map +1 -1
- package/dist/AnalyticsPlatformAdapter.types.mjs.map +1 -1
- package/dist/index.cjs +4 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +4 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
- package/dist/AnalyticsPlatformAdapterSetupError.cjs +0 -17
- package/dist/AnalyticsPlatformAdapterSetupError.cjs.map +0 -1
- package/dist/AnalyticsPlatformAdapterSetupError.d.cts +0 -8
- package/dist/AnalyticsPlatformAdapterSetupError.d.cts.map +0 -1
- package/dist/AnalyticsPlatformAdapterSetupError.d.mts +0 -8
- package/dist/AnalyticsPlatformAdapterSetupError.d.mts.map +0 -1
- package/dist/AnalyticsPlatformAdapterSetupError.mjs +0 -13
- package/dist/AnalyticsPlatformAdapterSetupError.mjs.map +0 -1
- package/dist/analyticsControllerStateValidator.cjs +0 -34
- package/dist/analyticsControllerStateValidator.cjs.map +0 -1
- package/dist/analyticsControllerStateValidator.d.cts +0 -16
- package/dist/analyticsControllerStateValidator.d.cts.map +0 -1
- package/dist/analyticsControllerStateValidator.d.mts +0 -16
- package/dist/analyticsControllerStateValidator.d.mts.map +0 -1
- package/dist/analyticsControllerStateValidator.mjs +0 -29
- package/dist/analyticsControllerStateValidator.mjs.map +0 -1
- package/dist/selectors.cjs +0 -43
- package/dist/selectors.cjs.map +0 -1
- package/dist/selectors.d.cts +0 -12
- package/dist/selectors.d.cts.map +0 -1
- package/dist/selectors.d.mts +0 -12
- package/dist/selectors.d.mts.map +0 -1
- package/dist/selectors.mjs +0 -40
- package/dist/selectors.mjs.map +0 -1
|
@@ -2,7 +2,7 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@meta
|
|
|
2
2
|
import { BaseController } from "@metamask/base-controller";
|
|
3
3
|
import type { Messenger } from "@metamask/messenger";
|
|
4
4
|
import type { AnalyticsControllerMethodActions } from "./AnalyticsController-method-action-types.mjs";
|
|
5
|
-
import type { AnalyticsPlatformAdapter, AnalyticsEventProperties
|
|
5
|
+
import type { AnalyticsPlatformAdapter, AnalyticsEventProperties } from "./AnalyticsPlatformAdapter.types.mjs";
|
|
6
6
|
/**
|
|
7
7
|
* The name of the {@link AnalyticsController}, used to namespace the
|
|
8
8
|
* controller's actions and events and to namespace the controller's state data
|
|
@@ -14,29 +14,27 @@ export declare const controllerName = "AnalyticsController";
|
|
|
14
14
|
*/
|
|
15
15
|
export type AnalyticsControllerState = {
|
|
16
16
|
/**
|
|
17
|
-
* Whether
|
|
17
|
+
* Whether analytics tracking is enabled
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
enabled: boolean;
|
|
20
20
|
/**
|
|
21
|
-
* Whether the user has opted in to analytics
|
|
21
|
+
* Whether the user has opted in to analytics
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
optedIn: boolean;
|
|
24
24
|
/**
|
|
25
|
-
* User's UUIDv4 analytics identifier
|
|
26
|
-
* This is an identity (unique per user), not a preference.
|
|
27
|
-
* Must be provided by the platform - the controller does not generate it.
|
|
25
|
+
* User's UUIDv4 analytics identifier
|
|
28
26
|
*/
|
|
29
27
|
analyticsId: string;
|
|
30
28
|
};
|
|
31
29
|
/**
|
|
32
|
-
*
|
|
30
|
+
* Constructs the default {@link AnalyticsController} state. This allows
|
|
31
|
+
* consumers to provide a partial state object when initializing the controller
|
|
32
|
+
* and also helps in constructing complete state objects for this controller in
|
|
33
|
+
* tests.
|
|
33
34
|
*
|
|
34
|
-
*
|
|
35
|
-
* provided by the platform (generated once on first run, then persisted).
|
|
36
|
-
*
|
|
37
|
-
* @returns Default state without analyticsId
|
|
35
|
+
* @returns The default {@link AnalyticsController} state.
|
|
38
36
|
*/
|
|
39
|
-
export declare function getDefaultAnalyticsControllerState():
|
|
37
|
+
export declare function getDefaultAnalyticsControllerState(): AnalyticsControllerState;
|
|
40
38
|
/**
|
|
41
39
|
* Returns the state of the {@link AnalyticsController}.
|
|
42
40
|
*/
|
|
@@ -70,17 +68,10 @@ export type AnalyticsControllerMessenger = Messenger<typeof controllerName, Anal
|
|
|
70
68
|
* The options that AnalyticsController takes.
|
|
71
69
|
*/
|
|
72
70
|
export type AnalyticsControllerOptions = {
|
|
73
|
-
|
|
74
|
-
* Initial controller state. Must include a valid UUIDv4 `analyticsId`.
|
|
75
|
-
* The platform is responsible for generating and persisting the analyticsId.
|
|
76
|
-
*/
|
|
77
|
-
state: AnalyticsControllerState;
|
|
78
|
-
/**
|
|
79
|
-
* Messenger used to communicate with BaseController and other controllers.
|
|
80
|
-
*/
|
|
71
|
+
state?: Partial<AnalyticsControllerState>;
|
|
81
72
|
messenger: AnalyticsControllerMessenger;
|
|
82
73
|
/**
|
|
83
|
-
* Platform adapter implementation for tracking events
|
|
74
|
+
* Platform adapter implementation for tracking events
|
|
84
75
|
*/
|
|
85
76
|
platformAdapter: AnalyticsPlatformAdapter;
|
|
86
77
|
};
|
|
@@ -93,11 +84,6 @@ export type AnalyticsControllerOptions = {
|
|
|
93
84
|
* This controller follows the MetaMask controller pattern and integrates with the
|
|
94
85
|
* messenger system to allow other controllers and components to track analytics events.
|
|
95
86
|
* It delegates platform-specific implementation to an {@link AnalyticsPlatformAdapter}.
|
|
96
|
-
*
|
|
97
|
-
* Note: This controller does not persist state internally (`persist: false` in metadata).
|
|
98
|
-
* The platform is responsible for:
|
|
99
|
-
* - Providing the initial state (including a valid UUIDv4 analyticsId)
|
|
100
|
-
* - Subscribing to `AnalyticsController:stateChange` event to persist changes
|
|
101
87
|
*/
|
|
102
88
|
export declare class AnalyticsController extends BaseController<'AnalyticsController', AnalyticsControllerState, AnalyticsControllerMessenger> {
|
|
103
89
|
#private;
|
|
@@ -105,11 +91,9 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
105
91
|
* Constructs an AnalyticsController instance.
|
|
106
92
|
*
|
|
107
93
|
* @param options - Controller options
|
|
108
|
-
* @param options.state - Initial controller state
|
|
109
|
-
* Use `getDefaultAnalyticsControllerState()` for default opt-in preferences.
|
|
94
|
+
* @param options.state - Initial controller state (defaults from getDefaultAnalyticsControllerState)
|
|
110
95
|
* @param options.messenger - Messenger used to communicate with BaseController
|
|
111
96
|
* @param options.platformAdapter - Platform adapter implementation for tracking
|
|
112
|
-
* @throws Error if state.analyticsId is missing or not a valid UUIDv4
|
|
113
97
|
*/
|
|
114
98
|
constructor({ state, messenger, platformAdapter, }: AnalyticsControllerOptions);
|
|
115
99
|
/**
|
|
@@ -117,42 +101,40 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
117
101
|
*
|
|
118
102
|
* Events are only tracked if analytics is enabled.
|
|
119
103
|
*
|
|
120
|
-
* @param
|
|
104
|
+
* @param eventName - The name of the event
|
|
105
|
+
* @param properties - Event properties
|
|
121
106
|
*/
|
|
122
|
-
trackEvent(
|
|
107
|
+
trackEvent(eventName: string, properties?: AnalyticsEventProperties): void;
|
|
123
108
|
/**
|
|
124
109
|
* Identify a user for analytics.
|
|
125
110
|
*
|
|
111
|
+
* @param userId - The user identifier (e.g., metametrics ID)
|
|
126
112
|
* @param traits - User traits/properties
|
|
127
113
|
*/
|
|
128
|
-
identify(traits?:
|
|
114
|
+
identify(userId: string, traits?: AnalyticsEventProperties): void;
|
|
129
115
|
/**
|
|
130
|
-
* Track a page
|
|
116
|
+
* Track a page view.
|
|
131
117
|
*
|
|
132
|
-
* @param
|
|
133
|
-
* @param properties -
|
|
118
|
+
* @param pageName - The name of the page
|
|
119
|
+
* @param properties - Page properties
|
|
134
120
|
*/
|
|
135
|
-
|
|
121
|
+
trackPage(pageName: string, properties?: AnalyticsEventProperties): void;
|
|
136
122
|
/**
|
|
137
|
-
*
|
|
138
|
-
* This updates the user's opt-in status for regular account.
|
|
123
|
+
* Enable analytics tracking.
|
|
139
124
|
*/
|
|
140
|
-
|
|
125
|
+
enable(): void;
|
|
141
126
|
/**
|
|
142
|
-
*
|
|
143
|
-
* This updates the user's opt-in status for regular account.
|
|
127
|
+
* Disable analytics tracking.
|
|
144
128
|
*/
|
|
145
|
-
|
|
129
|
+
disable(): void;
|
|
146
130
|
/**
|
|
147
|
-
* Opt in to analytics
|
|
148
|
-
* This updates the user's opt-in status for social account.
|
|
131
|
+
* Opt in to analytics.
|
|
149
132
|
*/
|
|
150
|
-
|
|
133
|
+
optIn(): void;
|
|
151
134
|
/**
|
|
152
|
-
* Opt out of analytics
|
|
153
|
-
* This updates the user's opt-in status for social account.
|
|
135
|
+
* Opt out of analytics.
|
|
154
136
|
*/
|
|
155
|
-
|
|
137
|
+
optOut(): void;
|
|
156
138
|
}
|
|
157
139
|
export {};
|
|
158
140
|
//# sourceMappingURL=AnalyticsController.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsController.d.mts","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAE3B,kCAAkC;AACnC,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;
|
|
1
|
+
{"version":3,"file":"AnalyticsController.d.mts","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAE3B,kCAAkC;AACnC,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAGrD,OAAO,KAAK,EAAE,gCAAgC,EAAE,sDAAkD;AAElG,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACzB,6CAAyC;AAI1C;;;;GAIG;AACH,eAAO,MAAM,cAAc,wBAAwB,CAAC;AAIpD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AA0BF;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,IAAI,wBAAwB,CAM7E;AAcD;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG,wBAAwB,CACtE,OAAO,cAAc,EACrB,wBAAwB,CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,iCAAiC,GACjC,gCAAgC,CAAC;AAErC;;GAEG;AACH,KAAK,cAAc,GAAG,KAAK,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,0BAA0B,CAC1E,OAAO,cAAc,EACrB,wBAAwB,CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,mCAAmC,CAAC;AAE5E;;GAEG;AACH,KAAK,aAAa,GAAG,KAAK,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,SAAS,CAClD,OAAO,cAAc,EACrB,0BAA0B,GAAG,cAAc,EAC3C,yBAAyB,GAAG,aAAa,CAC1C,CAAC;AAIF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC1C,SAAS,EAAE,4BAA4B,CAAC;IACxC;;OAEG;IACH,eAAe,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,cAAc,CACrD,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,CAC7B;;IAGC;;;;;;;OAOG;gBACS,EACV,KAAU,EACV,SAAS,EACT,eAAe,GAChB,EAAE,0BAA0B;IAyB7B;;;;;;;OAOG;IACH,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,wBAA6B,GACxC,IAAI;IAUP;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAgBjE;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAWxE;;OAEG;IACH,MAAM,IAAI,IAAI;IAMd;;OAEG;IACH,OAAO,IAAI,IAAI;IAMf;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,MAAM,IAAI,IAAI;CAKf"}
|
|
@@ -11,9 +11,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
11
11
|
};
|
|
12
12
|
var _AnalyticsController_platformAdapter;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
|
-
import {
|
|
14
|
+
import { v4 as uuidv4 } from "uuid";
|
|
15
15
|
import { projectLogger } from "./AnalyticsLogger.mjs";
|
|
16
|
-
import { analyticsControllerSelectors } from "./selectors.mjs";
|
|
17
16
|
// === GENERAL ===
|
|
18
17
|
/**
|
|
19
18
|
* The name of the {@link AnalyticsController}, used to namespace the
|
|
@@ -21,55 +20,53 @@ import { analyticsControllerSelectors } from "./selectors.mjs";
|
|
|
21
20
|
* when composed with other controllers.
|
|
22
21
|
*/
|
|
23
22
|
export const controllerName = 'AnalyticsController';
|
|
24
|
-
/**
|
|
25
|
-
* Returns default values for AnalyticsController state.
|
|
26
|
-
*
|
|
27
|
-
* Note: analyticsId is NOT included - it's an identity that must be
|
|
28
|
-
* provided by the platform (generated once on first run, then persisted).
|
|
29
|
-
*
|
|
30
|
-
* @returns Default state without analyticsId
|
|
31
|
-
*/
|
|
32
|
-
export function getDefaultAnalyticsControllerState() {
|
|
33
|
-
return {
|
|
34
|
-
optedInForRegularAccount: false,
|
|
35
|
-
optedInForSocialAccount: false,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
23
|
/**
|
|
39
24
|
* The metadata for each property in {@link AnalyticsControllerState}.
|
|
40
|
-
*
|
|
41
|
-
* Note: `persist` is set to `false` for all fields because the platform
|
|
42
|
-
* is responsible for persistence via the `stateChange` event listener.
|
|
43
25
|
*/
|
|
44
26
|
const analyticsControllerMetadata = {
|
|
45
|
-
|
|
27
|
+
enabled: {
|
|
46
28
|
includeInStateLogs: true,
|
|
47
|
-
persist:
|
|
29
|
+
persist: true,
|
|
48
30
|
includeInDebugSnapshot: true,
|
|
49
31
|
usedInUi: true,
|
|
50
32
|
},
|
|
51
|
-
|
|
33
|
+
optedIn: {
|
|
52
34
|
includeInStateLogs: true,
|
|
53
|
-
persist:
|
|
35
|
+
persist: true,
|
|
54
36
|
includeInDebugSnapshot: true,
|
|
55
37
|
usedInUi: true,
|
|
56
38
|
},
|
|
57
39
|
analyticsId: {
|
|
58
40
|
includeInStateLogs: true,
|
|
59
|
-
persist:
|
|
41
|
+
persist: true,
|
|
60
42
|
includeInDebugSnapshot: true,
|
|
61
43
|
usedInUi: false,
|
|
62
44
|
},
|
|
63
45
|
};
|
|
46
|
+
/**
|
|
47
|
+
* Constructs the default {@link AnalyticsController} state. This allows
|
|
48
|
+
* consumers to provide a partial state object when initializing the controller
|
|
49
|
+
* and also helps in constructing complete state objects for this controller in
|
|
50
|
+
* tests.
|
|
51
|
+
*
|
|
52
|
+
* @returns The default {@link AnalyticsController} state.
|
|
53
|
+
*/
|
|
54
|
+
export function getDefaultAnalyticsControllerState() {
|
|
55
|
+
return {
|
|
56
|
+
enabled: true,
|
|
57
|
+
optedIn: false,
|
|
58
|
+
analyticsId: uuidv4(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
64
61
|
// === MESSENGER ===
|
|
65
62
|
const MESSENGER_EXPOSED_METHODS = [
|
|
66
63
|
'trackEvent',
|
|
67
64
|
'identify',
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
71
|
-
'
|
|
72
|
-
'
|
|
65
|
+
'trackPage',
|
|
66
|
+
'enable',
|
|
67
|
+
'disable',
|
|
68
|
+
'optIn',
|
|
69
|
+
'optOut',
|
|
73
70
|
];
|
|
74
71
|
/**
|
|
75
72
|
* The AnalyticsController manages analytics tracking across platforms (Mobile/Extension).
|
|
@@ -80,149 +77,115 @@ const MESSENGER_EXPOSED_METHODS = [
|
|
|
80
77
|
* This controller follows the MetaMask controller pattern and integrates with the
|
|
81
78
|
* messenger system to allow other controllers and components to track analytics events.
|
|
82
79
|
* It delegates platform-specific implementation to an {@link AnalyticsPlatformAdapter}.
|
|
83
|
-
*
|
|
84
|
-
* Note: This controller does not persist state internally (`persist: false` in metadata).
|
|
85
|
-
* The platform is responsible for:
|
|
86
|
-
* - Providing the initial state (including a valid UUIDv4 analyticsId)
|
|
87
|
-
* - Subscribing to `AnalyticsController:stateChange` event to persist changes
|
|
88
80
|
*/
|
|
89
81
|
export class AnalyticsController extends BaseController {
|
|
90
82
|
/**
|
|
91
83
|
* Constructs an AnalyticsController instance.
|
|
92
84
|
*
|
|
93
85
|
* @param options - Controller options
|
|
94
|
-
* @param options.state - Initial controller state
|
|
95
|
-
* Use `getDefaultAnalyticsControllerState()` for default opt-in preferences.
|
|
86
|
+
* @param options.state - Initial controller state (defaults from getDefaultAnalyticsControllerState)
|
|
96
87
|
* @param options.messenger - Messenger used to communicate with BaseController
|
|
97
88
|
* @param options.platformAdapter - Platform adapter implementation for tracking
|
|
98
|
-
* @throws Error if state.analyticsId is missing or not a valid UUIDv4
|
|
99
89
|
*/
|
|
100
|
-
constructor({ state, messenger, platformAdapter, }) {
|
|
101
|
-
const initialState = {
|
|
102
|
-
...getDefaultAnalyticsControllerState(),
|
|
103
|
-
...state,
|
|
104
|
-
};
|
|
105
|
-
validateAnalyticsControllerState(initialState);
|
|
90
|
+
constructor({ state = {}, messenger, platformAdapter, }) {
|
|
106
91
|
super({
|
|
107
92
|
name: controllerName,
|
|
108
93
|
metadata: analyticsControllerMetadata,
|
|
109
|
-
state:
|
|
94
|
+
state: {
|
|
95
|
+
...getDefaultAnalyticsControllerState(),
|
|
96
|
+
...state,
|
|
97
|
+
},
|
|
110
98
|
messenger,
|
|
111
99
|
});
|
|
112
100
|
_AnalyticsController_platformAdapter.set(this, void 0);
|
|
113
101
|
__classPrivateFieldSet(this, _AnalyticsController_platformAdapter, platformAdapter, "f");
|
|
114
102
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
115
103
|
projectLogger('AnalyticsController initialized and ready', {
|
|
116
|
-
enabled:
|
|
117
|
-
optedIn: this.state.
|
|
118
|
-
socialOptedIn: this.state.optedInForSocialAccount,
|
|
104
|
+
enabled: this.state.enabled,
|
|
105
|
+
optedIn: this.state.optedIn,
|
|
119
106
|
analyticsId: this.state.analyticsId,
|
|
120
107
|
});
|
|
121
|
-
// Call onSetupCompleted lifecycle hook after initialization
|
|
122
|
-
// State is already validated, so analyticsId is guaranteed to be a valid UUIDv4
|
|
123
|
-
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f")
|
|
124
|
-
.onSetupCompleted(this.state.analyticsId)
|
|
125
|
-
.catch((error) => {
|
|
126
|
-
// Log error but don't throw - adapter setup failure shouldn't break controller
|
|
127
|
-
projectLogger('Error calling platformAdapter.onSetupCompleted', error);
|
|
128
|
-
});
|
|
129
108
|
}
|
|
130
109
|
/**
|
|
131
110
|
* Track an analytics event.
|
|
132
111
|
*
|
|
133
112
|
* Events are only tracked if analytics is enabled.
|
|
134
113
|
*
|
|
135
|
-
* @param
|
|
114
|
+
* @param eventName - The name of the event
|
|
115
|
+
* @param properties - Event properties
|
|
136
116
|
*/
|
|
137
|
-
trackEvent(
|
|
117
|
+
trackEvent(eventName, properties = {}) {
|
|
138
118
|
// Don't track if analytics is disabled
|
|
139
|
-
if (!
|
|
119
|
+
if (!this.state.enabled) {
|
|
140
120
|
return;
|
|
141
121
|
}
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
// if event does not have properties, send event without properties
|
|
145
|
-
// and return to prevent any additional processing
|
|
146
|
-
if (!event.hasProperties) {
|
|
147
|
-
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").track(event.name);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
// Track regular properties (without isSensitive flag - it's the default)
|
|
151
|
-
// Note: Even if properties object is empty, we still send it to ensure
|
|
152
|
-
// an event with user ID is tracked. When only sensitiveProperties exist,
|
|
153
|
-
// this creates two events: one with empty props (user ID) and one with
|
|
154
|
-
// sensitive props (anonymous ID), which is the expected behavior.
|
|
155
|
-
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").track(event.name, {
|
|
156
|
-
...event.properties,
|
|
157
|
-
});
|
|
158
|
-
// Track sensitive properties in a separate event with isSensitive flag
|
|
159
|
-
if (hasSensitiveProperties) {
|
|
160
|
-
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").track(event.name, {
|
|
161
|
-
...event.properties,
|
|
162
|
-
...event.sensitiveProperties,
|
|
163
|
-
isSensitive: true,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
122
|
+
// Delegate to platform adapter
|
|
123
|
+
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").trackEvent(eventName, properties);
|
|
166
124
|
}
|
|
167
125
|
/**
|
|
168
126
|
* Identify a user for analytics.
|
|
169
127
|
*
|
|
128
|
+
* @param userId - The user identifier (e.g., metametrics ID)
|
|
170
129
|
* @param traits - User traits/properties
|
|
171
130
|
*/
|
|
172
|
-
identify(traits) {
|
|
173
|
-
if (!
|
|
131
|
+
identify(userId, traits) {
|
|
132
|
+
if (!this.state.enabled) {
|
|
174
133
|
return;
|
|
175
134
|
}
|
|
176
|
-
//
|
|
177
|
-
|
|
135
|
+
// Update state with analytics ID
|
|
136
|
+
this.update((state) => {
|
|
137
|
+
state.analyticsId = userId;
|
|
138
|
+
});
|
|
139
|
+
// Delegate to platform adapter if supported
|
|
140
|
+
if (__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").identify) {
|
|
141
|
+
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").identify(userId, traits);
|
|
142
|
+
}
|
|
178
143
|
}
|
|
179
144
|
/**
|
|
180
|
-
* Track a page
|
|
145
|
+
* Track a page view.
|
|
181
146
|
*
|
|
182
|
-
* @param
|
|
183
|
-
* @param properties -
|
|
147
|
+
* @param pageName - The name of the page
|
|
148
|
+
* @param properties - Page properties
|
|
184
149
|
*/
|
|
185
|
-
|
|
186
|
-
if (!
|
|
150
|
+
trackPage(pageName, properties) {
|
|
151
|
+
if (!this.state.enabled) {
|
|
187
152
|
return;
|
|
188
153
|
}
|
|
189
|
-
// Delegate to platform adapter
|
|
190
|
-
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").
|
|
154
|
+
// Delegate to platform adapter if supported
|
|
155
|
+
if (__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").trackPage) {
|
|
156
|
+
__classPrivateFieldGet(this, _AnalyticsController_platformAdapter, "f").trackPage(pageName, properties);
|
|
157
|
+
}
|
|
191
158
|
}
|
|
192
159
|
/**
|
|
193
|
-
*
|
|
194
|
-
* This updates the user's opt-in status for regular account.
|
|
160
|
+
* Enable analytics tracking.
|
|
195
161
|
*/
|
|
196
|
-
|
|
162
|
+
enable() {
|
|
197
163
|
this.update((state) => {
|
|
198
|
-
state.
|
|
164
|
+
state.enabled = true;
|
|
199
165
|
});
|
|
200
166
|
}
|
|
201
167
|
/**
|
|
202
|
-
*
|
|
203
|
-
* This updates the user's opt-in status for regular account.
|
|
168
|
+
* Disable analytics tracking.
|
|
204
169
|
*/
|
|
205
|
-
|
|
170
|
+
disable() {
|
|
206
171
|
this.update((state) => {
|
|
207
|
-
state.
|
|
172
|
+
state.enabled = false;
|
|
208
173
|
});
|
|
209
174
|
}
|
|
210
175
|
/**
|
|
211
|
-
* Opt in to analytics
|
|
212
|
-
* This updates the user's opt-in status for social account.
|
|
176
|
+
* Opt in to analytics.
|
|
213
177
|
*/
|
|
214
|
-
|
|
178
|
+
optIn() {
|
|
215
179
|
this.update((state) => {
|
|
216
|
-
state.
|
|
180
|
+
state.optedIn = true;
|
|
217
181
|
});
|
|
218
182
|
}
|
|
219
183
|
/**
|
|
220
|
-
* Opt out of analytics
|
|
221
|
-
* This updates the user's opt-in status for social account.
|
|
184
|
+
* Opt out of analytics.
|
|
222
185
|
*/
|
|
223
|
-
|
|
186
|
+
optOut() {
|
|
224
187
|
this.update((state) => {
|
|
225
|
-
state.
|
|
188
|
+
state.optedIn = false;
|
|
226
189
|
});
|
|
227
190
|
}
|
|
228
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsController.mjs","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\n\nimport type { AnalyticsControllerMethodActions } from './AnalyticsController-method-action-types';\nimport { validateAnalyticsControllerState } from './analyticsControllerStateValidator';\nimport { projectLogger } from './AnalyticsLogger';\nimport type {\n AnalyticsPlatformAdapter,\n AnalyticsEventProperties,\n AnalyticsUserTraits,\n AnalyticsTrackingEvent,\n} from './AnalyticsPlatformAdapter.types';\nimport { analyticsControllerSelectors } from './selectors';\n\n// === GENERAL ===\n\n/**\n * The name of the {@link AnalyticsController}, used to namespace the\n * controller's actions and events and to namespace the controller's state data\n * when composed with other controllers.\n */\nexport const controllerName = 'AnalyticsController';\n\n// === STATE ===\n\n/**\n * Describes the shape of the state object for {@link AnalyticsController}.\n */\nexport type AnalyticsControllerState = {\n /**\n * Whether the user has opted in to analytics for regular account.\n */\n optedInForRegularAccount: boolean;\n\n /**\n * Whether the user has opted in to analytics for social account.\n */\n optedInForSocialAccount: boolean;\n\n /**\n * User's UUIDv4 analytics identifier.\n * This is an identity (unique per user), not a preference.\n * Must be provided by the platform - the controller does not generate it.\n */\n analyticsId: string;\n};\n\n/**\n * Returns default values for AnalyticsController state.\n *\n * Note: analyticsId is NOT included - it's an identity that must be\n * provided by the platform (generated once on first run, then persisted).\n *\n * @returns Default state without analyticsId\n */\nexport function getDefaultAnalyticsControllerState(): Omit<\n AnalyticsControllerState,\n 'analyticsId'\n> {\n return {\n optedInForRegularAccount: false,\n optedInForSocialAccount: false,\n };\n}\n\n/**\n * The metadata for each property in {@link AnalyticsControllerState}.\n *\n * Note: `persist` is set to `false` for all fields because the platform\n * is responsible for persistence via the `stateChange` event listener.\n */\nconst analyticsControllerMetadata = {\n optedInForRegularAccount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n optedInForSocialAccount: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n analyticsId: {\n includeInStateLogs: true,\n persist: false,\n includeInDebugSnapshot: true,\n usedInUi: false,\n },\n} satisfies StateMetadata<AnalyticsControllerState>;\n\n// === MESSENGER ===\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'trackEvent',\n 'identify',\n 'trackView',\n 'optInForRegularAccount',\n 'optOutForRegularAccount',\n 'optInForSocialAccount',\n 'optOutForSocialAccount',\n] as const;\n\n/**\n * Returns the state of the {@link AnalyticsController}.\n */\nexport type AnalyticsControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AnalyticsControllerState\n>;\n\n/**\n * Actions that {@link AnalyticsControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsControllerActions =\n | AnalyticsControllerGetStateAction\n | AnalyticsControllerMethodActions;\n\n/**\n * Actions from other messengers that {@link AnalyticsControllerMessenger} calls.\n */\ntype AllowedActions = never;\n\n/**\n * Event emitted when the state of the {@link AnalyticsController} changes.\n */\nexport type AnalyticsControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n AnalyticsControllerState\n>;\n\n/**\n * Events that {@link AnalyticsControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsControllerEvents = AnalyticsControllerStateChangeEvent;\n\n/**\n * Events from other messengers that {@link AnalyticsControllerMessenger} subscribes to.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger restricted to actions and events accessed by\n * {@link AnalyticsController}.\n */\nexport type AnalyticsControllerMessenger = Messenger<\n typeof controllerName,\n AnalyticsControllerActions | AllowedActions,\n AnalyticsControllerEvents | AllowedEvents\n>;\n\n// === CONTROLLER DEFINITION ===\n\n/**\n * The options that AnalyticsController takes.\n */\nexport type AnalyticsControllerOptions = {\n /**\n * Initial controller state. Must include a valid UUIDv4 `analyticsId`.\n * The platform is responsible for generating and persisting the analyticsId.\n */\n state: AnalyticsControllerState;\n /**\n * Messenger used to communicate with BaseController and other controllers.\n */\n messenger: AnalyticsControllerMessenger;\n /**\n * Platform adapter implementation for tracking events.\n */\n platformAdapter: AnalyticsPlatformAdapter;\n};\n\n/**\n * The AnalyticsController manages analytics tracking across platforms (Mobile/Extension).\n * It provides a unified interface for tracking events, identifying users, and managing\n * analytics preferences while delegating platform-specific implementation to an\n * {@link AnalyticsPlatformAdapter}.\n *\n * This controller follows the MetaMask controller pattern and integrates with the\n * messenger system to allow other controllers and components to track analytics events.\n * It delegates platform-specific implementation to an {@link AnalyticsPlatformAdapter}.\n *\n * Note: This controller does not persist state internally (`persist: false` in metadata).\n * The platform is responsible for:\n * - Providing the initial state (including a valid UUIDv4 analyticsId)\n * - Subscribing to `AnalyticsController:stateChange` event to persist changes\n */\nexport class AnalyticsController extends BaseController<\n 'AnalyticsController',\n AnalyticsControllerState,\n AnalyticsControllerMessenger\n> {\n readonly #platformAdapter: AnalyticsPlatformAdapter;\n\n /**\n * Constructs an AnalyticsController instance.\n *\n * @param options - Controller options\n * @param options.state - Initial controller state. Must include a valid UUIDv4 `analyticsId`.\n * Use `getDefaultAnalyticsControllerState()` for default opt-in preferences.\n * @param options.messenger - Messenger used to communicate with BaseController\n * @param options.platformAdapter - Platform adapter implementation for tracking\n * @throws Error if state.analyticsId is missing or not a valid UUIDv4\n */\n constructor({\n state,\n messenger,\n platformAdapter,\n }: AnalyticsControllerOptions) {\n const initialState: AnalyticsControllerState = {\n ...getDefaultAnalyticsControllerState(),\n ...state,\n };\n\n validateAnalyticsControllerState(initialState);\n\n super({\n name: controllerName,\n metadata: analyticsControllerMetadata,\n state: initialState,\n messenger,\n });\n\n this.#platformAdapter = platformAdapter;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n projectLogger('AnalyticsController initialized and ready', {\n enabled: analyticsControllerSelectors.selectEnabled(this.state),\n optedIn: this.state.optedInForRegularAccount,\n socialOptedIn: this.state.optedInForSocialAccount,\n analyticsId: this.state.analyticsId,\n });\n\n // Call onSetupCompleted lifecycle hook after initialization\n // State is already validated, so analyticsId is guaranteed to be a valid UUIDv4\n this.#platformAdapter\n .onSetupCompleted(this.state.analyticsId)\n .catch((error) => {\n // Log error but don't throw - adapter setup failure shouldn't break controller\n projectLogger('Error calling platformAdapter.onSetupCompleted', error);\n });\n }\n\n /**\n * Track an analytics event.\n *\n * Events are only tracked if analytics is enabled.\n *\n * @param event - Analytics event with properties and sensitive properties\n */\n trackEvent(event: AnalyticsTrackingEvent): void {\n // Don't track if analytics is disabled\n if (!analyticsControllerSelectors.selectEnabled(this.state)) {\n return;\n }\n\n // Derive sensitivity from presence of sensitiveProperties\n const hasSensitiveProperties =\n Object.keys(event.sensitiveProperties).length > 0;\n\n // if event does not have properties, send event without properties\n // and return to prevent any additional processing\n if (!event.hasProperties) {\n this.#platformAdapter.track(event.name);\n return;\n }\n\n // Track regular properties (without isSensitive flag - it's the default)\n // Note: Even if properties object is empty, we still send it to ensure\n // an event with user ID is tracked. When only sensitiveProperties exist,\n // this creates two events: one with empty props (user ID) and one with\n // sensitive props (anonymous ID), which is the expected behavior.\n this.#platformAdapter.track(event.name, {\n ...event.properties,\n });\n\n // Track sensitive properties in a separate event with isSensitive flag\n if (hasSensitiveProperties) {\n this.#platformAdapter.track(event.name, {\n ...event.properties,\n ...event.sensitiveProperties,\n isSensitive: true,\n });\n }\n }\n\n /**\n * Identify a user for analytics.\n *\n * @param traits - User traits/properties\n */\n identify(traits?: AnalyticsUserTraits): void {\n if (!analyticsControllerSelectors.selectEnabled(this.state)) {\n return;\n }\n\n // Delegate to platform adapter using the current analytics ID\n this.#platformAdapter.identify(this.state.analyticsId, traits);\n }\n\n /**\n * Track a page or screen view.\n *\n * @param name - The identifier/name of the page or screen being viewed (e.g., \"home\", \"settings\", \"wallet\")\n * @param properties - Optional properties associated with the view\n */\n trackView(name: string, properties?: AnalyticsEventProperties): void {\n if (!analyticsControllerSelectors.selectEnabled(this.state)) {\n return;\n }\n\n // Delegate to platform adapter\n this.#platformAdapter.view(name, properties);\n }\n\n /**\n * Opt in to analytics for regular account.\n * This updates the user's opt-in status for regular account.\n */\n optInForRegularAccount(): void {\n this.update((state) => {\n state.optedInForRegularAccount = true;\n });\n }\n\n /**\n * Opt out of analytics for regular account.\n * This updates the user's opt-in status for regular account.\n */\n optOutForRegularAccount(): void {\n this.update((state) => {\n state.optedInForRegularAccount = false;\n });\n }\n\n /**\n * Opt in to analytics for social account.\n * This updates the user's opt-in status for social account.\n */\n optInForSocialAccount(): void {\n this.update((state) => {\n state.optedInForSocialAccount = true;\n });\n }\n\n /**\n * Opt out of analytics for social account.\n * This updates the user's opt-in status for social account.\n */\n optOutForSocialAccount(): void {\n this.update((state) => {\n state.optedInForSocialAccount = false;\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AnalyticsController.mjs","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAE3D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,aAAa;AAGpC,OAAO,EAAE,aAAa,EAAE,8BAA0B;AAMlD,kBAAkB;AAElB;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAwBpD;;GAEG;AACH,MAAM,2BAA2B,GAAG;IAClC,OAAO,EAAE;QACP,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,IAAI;QACb,sBAAsB,EAAE,IAAI;QAC5B,QAAQ,EAAE,IAAI;KACf;IACD,OAAO,EAAE;QACP,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,IAAI;QACb,sBAAsB,EAAE,IAAI;QAC5B,QAAQ,EAAE,IAAI;KACf;IACD,WAAW,EAAE;QACX,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,IAAI;QACb,sBAAsB,EAAE,IAAI;QAC5B,QAAQ,EAAE,KAAK;KAChB;CACgD,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,MAAM,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,oBAAoB;AAEpB,MAAM,yBAAyB,GAAG;IAChC,YAAY;IACZ,UAAU;IACV,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;CACA,CAAC;AAgEX;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAoB,SAAQ,cAIxC;IAGC;;;;;;;OAOG;IACH,YAAY,EACV,KAAK,GAAG,EAAE,EACV,SAAS,EACT,eAAe,GACY;QAC3B,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,2BAA2B;YACrC,KAAK,EAAE;gBACL,GAAG,kCAAkC,EAAE;gBACvC,GAAG,KAAK;aACT;YACD,SAAS;SACV,CAAC,CAAC;QAvBI,uDAA2C;QAyBlD,uBAAA,IAAI,wCAAoB,eAAe,MAAA,CAAC;QAExC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CACzC,IAAI,EACJ,yBAAyB,CAC1B,CAAC;QAEF,aAAa,CAAC,2CAA2C,EAAE;YACzD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CACR,SAAiB,EACjB,aAAuC,EAAE;QAEzC,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,uBAAA,IAAI,4CAAiB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,MAAc,EAAE,MAAiC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,uBAAA,IAAI,4CAAiB,CAAC,QAAQ,EAAE,CAAC;YACnC,uBAAA,IAAI,4CAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,QAAgB,EAAE,UAAqC;QAC/D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,4CAA4C;QAC5C,IAAI,uBAAA,IAAI,4CAAiB,CAAC,SAAS,EAAE,CAAC;YACpC,uBAAA,IAAI,4CAAiB,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport type { AnalyticsControllerMethodActions } from './AnalyticsController-method-action-types';\nimport { projectLogger } from './AnalyticsLogger';\nimport type {\n AnalyticsPlatformAdapter,\n AnalyticsEventProperties,\n} from './AnalyticsPlatformAdapter.types';\n\n// === GENERAL ===\n\n/**\n * The name of the {@link AnalyticsController}, used to namespace the\n * controller's actions and events and to namespace the controller's state data\n * when composed with other controllers.\n */\nexport const controllerName = 'AnalyticsController';\n\n// === STATE ===\n\n/**\n * Describes the shape of the state object for {@link AnalyticsController}.\n */\nexport type AnalyticsControllerState = {\n /**\n * Whether analytics tracking is enabled\n */\n enabled: boolean;\n\n /**\n * Whether the user has opted in to analytics\n */\n optedIn: boolean;\n\n /**\n * User's UUIDv4 analytics identifier\n */\n analyticsId: string;\n};\n\n/**\n * The metadata for each property in {@link AnalyticsControllerState}.\n */\nconst analyticsControllerMetadata = {\n enabled: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n optedIn: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n analyticsId: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: false,\n },\n} satisfies StateMetadata<AnalyticsControllerState>;\n\n/**\n * Constructs the default {@link AnalyticsController} state. This allows\n * consumers to provide a partial state object when initializing the controller\n * and also helps in constructing complete state objects for this controller in\n * tests.\n *\n * @returns The default {@link AnalyticsController} state.\n */\nexport function getDefaultAnalyticsControllerState(): AnalyticsControllerState {\n return {\n enabled: true,\n optedIn: false,\n analyticsId: uuidv4(),\n };\n}\n\n// === MESSENGER ===\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'trackEvent',\n 'identify',\n 'trackPage',\n 'enable',\n 'disable',\n 'optIn',\n 'optOut',\n] as const;\n\n/**\n * Returns the state of the {@link AnalyticsController}.\n */\nexport type AnalyticsControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AnalyticsControllerState\n>;\n\n/**\n * Actions that {@link AnalyticsControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsControllerActions =\n | AnalyticsControllerGetStateAction\n | AnalyticsControllerMethodActions;\n\n/**\n * Actions from other messengers that {@link AnalyticsControllerMessenger} calls.\n */\ntype AllowedActions = never;\n\n/**\n * Event emitted when the state of the {@link AnalyticsController} changes.\n */\nexport type AnalyticsControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n AnalyticsControllerState\n>;\n\n/**\n * Events that {@link AnalyticsControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsControllerEvents = AnalyticsControllerStateChangeEvent;\n\n/**\n * Events from other messengers that {@link AnalyticsControllerMessenger} subscribes to.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger restricted to actions and events accessed by\n * {@link AnalyticsController}.\n */\nexport type AnalyticsControllerMessenger = Messenger<\n typeof controllerName,\n AnalyticsControllerActions | AllowedActions,\n AnalyticsControllerEvents | AllowedEvents\n>;\n\n// === CONTROLLER DEFINITION ===\n\n/**\n * The options that AnalyticsController takes.\n */\nexport type AnalyticsControllerOptions = {\n state?: Partial<AnalyticsControllerState>;\n messenger: AnalyticsControllerMessenger;\n /**\n * Platform adapter implementation for tracking events\n */\n platformAdapter: AnalyticsPlatformAdapter;\n};\n\n/**\n * The AnalyticsController manages analytics tracking across platforms (Mobile/Extension).\n * It provides a unified interface for tracking events, identifying users, and managing\n * analytics preferences while delegating platform-specific implementation to an\n * {@link AnalyticsPlatformAdapter}.\n *\n * This controller follows the MetaMask controller pattern and integrates with the\n * messenger system to allow other controllers and components to track analytics events.\n * It delegates platform-specific implementation to an {@link AnalyticsPlatformAdapter}.\n */\nexport class AnalyticsController extends BaseController<\n 'AnalyticsController',\n AnalyticsControllerState,\n AnalyticsControllerMessenger\n> {\n readonly #platformAdapter: AnalyticsPlatformAdapter;\n\n /**\n * Constructs an AnalyticsController instance.\n *\n * @param options - Controller options\n * @param options.state - Initial controller state (defaults from getDefaultAnalyticsControllerState)\n * @param options.messenger - Messenger used to communicate with BaseController\n * @param options.platformAdapter - Platform adapter implementation for tracking\n */\n constructor({\n state = {},\n messenger,\n platformAdapter,\n }: AnalyticsControllerOptions) {\n super({\n name: controllerName,\n metadata: analyticsControllerMetadata,\n state: {\n ...getDefaultAnalyticsControllerState(),\n ...state,\n },\n messenger,\n });\n\n this.#platformAdapter = platformAdapter;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n projectLogger('AnalyticsController initialized and ready', {\n enabled: this.state.enabled,\n optedIn: this.state.optedIn,\n analyticsId: this.state.analyticsId,\n });\n }\n\n /**\n * Track an analytics event.\n *\n * Events are only tracked if analytics is enabled.\n *\n * @param eventName - The name of the event\n * @param properties - Event properties\n */\n trackEvent(\n eventName: string,\n properties: AnalyticsEventProperties = {},\n ): void {\n // Don't track if analytics is disabled\n if (!this.state.enabled) {\n return;\n }\n\n // Delegate to platform adapter\n this.#platformAdapter.trackEvent(eventName, properties);\n }\n\n /**\n * Identify a user for analytics.\n *\n * @param userId - The user identifier (e.g., metametrics ID)\n * @param traits - User traits/properties\n */\n identify(userId: string, traits?: AnalyticsEventProperties): void {\n if (!this.state.enabled) {\n return;\n }\n\n // Update state with analytics ID\n this.update((state) => {\n state.analyticsId = userId;\n });\n\n // Delegate to platform adapter if supported\n if (this.#platformAdapter.identify) {\n this.#platformAdapter.identify(userId, traits);\n }\n }\n\n /**\n * Track a page view.\n *\n * @param pageName - The name of the page\n * @param properties - Page properties\n */\n trackPage(pageName: string, properties?: AnalyticsEventProperties): void {\n if (!this.state.enabled) {\n return;\n }\n\n // Delegate to platform adapter if supported\n if (this.#platformAdapter.trackPage) {\n this.#platformAdapter.trackPage(pageName, properties);\n }\n }\n\n /**\n * Enable analytics tracking.\n */\n enable(): void {\n this.update((state) => {\n state.enabled = true;\n });\n }\n\n /**\n * Disable analytics tracking.\n */\n disable(): void {\n this.update((state) => {\n state.enabled = false;\n });\n }\n\n /**\n * Opt in to analytics.\n */\n optIn(): void {\n this.update((state) => {\n state.optedIn = true;\n });\n }\n\n /**\n * Opt out of analytics.\n */\n optOut(): void {\n this.update((state) => {\n state.optedIn = false;\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsPlatformAdapter.types.cjs","sourceRoot":"","sources":["../src/AnalyticsPlatformAdapter.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Json } from '@metamask/utils';\n\n/**\n * Analytics event properties\n */\nexport type AnalyticsEventProperties = Record<string, Json>;\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"AnalyticsPlatformAdapter.types.cjs","sourceRoot":"","sources":["../src/AnalyticsPlatformAdapter.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Json } from '@metamask/utils';\n\n/**\n * Analytics event properties\n */\nexport type AnalyticsEventProperties = Record<string, Json>;\n\n/**\n * Platform adapter interface for analytics tracking\n * Implementations should handle platform-specific details (Segment SDK, etc.)\n *\n * @todo This type is work in progress and will be updated as we\n * integrate with the new analytics system on mobile.\n * We have this draft type to help us iterate on the implementation.\n * It will be updated with proper types as we create the mobile adapter\n * And the controller package will be released only when this is completed.\n */\nexport type AnalyticsPlatformAdapter = {\n /**\n * Track an analytics event\n *\n * @param eventName - The name of the event\n * @param properties - Event properties\n */\n trackEvent(eventName: string, properties: AnalyticsEventProperties): void;\n\n /**\n * Identify a user\n *\n * @param userId - The user identifier (e.g., metametrics ID)\n * @param traits - User traits/properties\n */\n identify?(userId: string, traits?: AnalyticsEventProperties): void;\n\n /**\n * Track a page view\n *\n * @param pageName - The name of the page\n * @param properties - Page properties\n */\n trackPage?(pageName: string, properties?: AnalyticsEventProperties): void;\n};\n"]}
|
|
@@ -3,85 +3,37 @@ import type { Json } from "@metamask/utils";
|
|
|
3
3
|
* Analytics event properties
|
|
4
4
|
*/
|
|
5
5
|
export type AnalyticsEventProperties = Record<string, Json>;
|
|
6
|
-
/**
|
|
7
|
-
* User traits/properties for analytics identification
|
|
8
|
-
*/
|
|
9
|
-
export type AnalyticsUserTraits = Record<string, Json>;
|
|
10
|
-
/**
|
|
11
|
-
* Event properties structure with two distinct properties lists for regular and sensitive data.
|
|
12
|
-
* Similar to ITrackingEvent from legacy analytics but decoupled for platform agnosticism.
|
|
13
|
-
* Sensitivity is derived from the presence of sensitiveProperties (if sensitiveProperties has keys, the event is sensitive).
|
|
14
|
-
*/
|
|
15
|
-
export type AnalyticsTrackingEvent = {
|
|
16
|
-
readonly name: string;
|
|
17
|
-
properties: AnalyticsEventProperties;
|
|
18
|
-
sensitiveProperties: AnalyticsEventProperties;
|
|
19
|
-
/**
|
|
20
|
-
* Legacy property handled by the mobile app.
|
|
21
|
-
* This property is ignored by the analytics controller and will be removed from the type in the future.
|
|
22
|
-
* The mobile app will use the future analytics privacy controller to handle this functionality.
|
|
23
|
-
*/
|
|
24
|
-
saveDataRecording: boolean;
|
|
25
|
-
readonly hasProperties: boolean;
|
|
26
|
-
};
|
|
27
6
|
/**
|
|
28
7
|
* Platform adapter interface for analytics tracking
|
|
29
8
|
* Implementations should handle platform-specific details (Segment SDK, etc.)
|
|
9
|
+
*
|
|
10
|
+
* @todo This type is work in progress and will be updated as we
|
|
11
|
+
* integrate with the new analytics system on mobile.
|
|
12
|
+
* We have this draft type to help us iterate on the implementation.
|
|
13
|
+
* It will be updated with proper types as we create the mobile adapter
|
|
14
|
+
* And the controller package will be released only when this is completed.
|
|
30
15
|
*/
|
|
31
16
|
export type AnalyticsPlatformAdapter = {
|
|
32
17
|
/**
|
|
33
|
-
* Track an analytics event
|
|
34
|
-
*
|
|
35
|
-
* This is the same as trackEvent in the old analytics system
|
|
18
|
+
* Track an analytics event
|
|
36
19
|
*
|
|
37
20
|
* @param eventName - The name of the event
|
|
38
|
-
* @param properties - Event properties
|
|
39
|
-
* The privacy plugin should check for `isSensitive === true` to determine if an event contains sensitive data.
|
|
21
|
+
* @param properties - Event properties
|
|
40
22
|
*/
|
|
41
|
-
|
|
23
|
+
trackEvent(eventName: string, properties: AnalyticsEventProperties): void;
|
|
42
24
|
/**
|
|
43
|
-
* Identify a user
|
|
25
|
+
* Identify a user
|
|
44
26
|
*
|
|
45
27
|
* @param userId - The user identifier (e.g., metametrics ID)
|
|
46
28
|
* @param traits - User traits/properties
|
|
47
29
|
*/
|
|
48
|
-
identify(userId: string, traits?:
|
|
30
|
+
identify?(userId: string, traits?: AnalyticsEventProperties): void;
|
|
49
31
|
/**
|
|
50
|
-
* Track a
|
|
51
|
-
*
|
|
52
|
-
* This method delegates to platform-specific Segment SDK methods:
|
|
53
|
-
* - Web adapters should call `analytics.page(name, properties)`
|
|
54
|
-
* - Mobile adapters should call `analytics.screen(name, properties)`
|
|
55
|
-
*
|
|
56
|
-
* @param name - The identifier/name of the page or screen being viewed (e.g., "home", "settings", "wallet")
|
|
57
|
-
* @param properties - Optional properties associated with the view
|
|
58
|
-
*/
|
|
59
|
-
view(name: string, properties?: AnalyticsEventProperties): void;
|
|
60
|
-
/**
|
|
61
|
-
* Lifecycle hook called after the AnalyticsController is fully initialized.
|
|
62
|
-
*
|
|
63
|
-
* This hook allows platform-specific adapters to perform setup that requires
|
|
64
|
-
* access to the controller's state (e.g., analyticsId).
|
|
65
|
-
*
|
|
66
|
-
* The controller calls this method once after initialization, passing the
|
|
67
|
-
* analyticsId from controller state. The analyticsId is guaranteed to be set
|
|
68
|
-
* when this method is called - this is the definition of "completed" setup.
|
|
69
|
-
*
|
|
70
|
-
* @param analyticsId - The analytics ID from controller state. Always set (never empty).
|
|
71
|
-
* @throws {AnalyticsPlatformAdapterSetupError} May throw errors during setup (e.g., configuration errors, network failures).
|
|
72
|
-
* Errors thrown by this method are caught and logged by the controller, but do not prevent
|
|
73
|
-
* controller initialization from completing successfully.
|
|
32
|
+
* Track a page view
|
|
74
33
|
*
|
|
75
|
-
* @
|
|
76
|
-
*
|
|
77
|
-
* async onSetupCompleted(analyticsId: string): Promise<void> {
|
|
78
|
-
* // Add platform-specific plugins that require analyticsId
|
|
79
|
-
* client.add({
|
|
80
|
-
* plugin: new PrivacyPlugin(analyticsId),
|
|
81
|
-
* });
|
|
82
|
-
* }
|
|
83
|
-
* ```
|
|
34
|
+
* @param pageName - The name of the page
|
|
35
|
+
* @param properties - Page properties
|
|
84
36
|
*/
|
|
85
|
-
|
|
37
|
+
trackPage?(pageName: string, properties?: AnalyticsEventProperties): void;
|
|
86
38
|
};
|
|
87
39
|
//# sourceMappingURL=AnalyticsPlatformAdapter.types.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalyticsPlatformAdapter.types.d.cts","sourceRoot":"","sources":["../src/AnalyticsPlatformAdapter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE5D
|
|
1
|
+
{"version":3,"file":"AnalyticsPlatformAdapter.types.d.cts","sourceRoot":"","sources":["../src/AnalyticsPlatformAdapter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAE5C;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAE1E;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAEnE;;;;;OAKG;IACH,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC3E,CAAC"}
|