@metamask-previews/analytics-controller 2.0.0-preview-fe4b3be11 → 2.1.0-preview-2f57247
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 +12 -1
- package/README.md +46 -5
- package/dist/AnalyticsController-method-action-types.cjs.map +1 -1
- package/dist/AnalyticsController-method-action-types.d.cts +106 -2
- package/dist/AnalyticsController-method-action-types.d.cts.map +1 -1
- package/dist/AnalyticsController-method-action-types.d.mts +106 -2
- 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 +364 -14
- package/dist/AnalyticsController.cjs.map +1 -1
- package/dist/AnalyticsController.d.cts +121 -2
- package/dist/AnalyticsController.d.cts.map +1 -1
- package/dist/AnalyticsController.d.mts +121 -2
- package/dist/AnalyticsController.d.mts.map +1 -1
- package/dist/AnalyticsController.mjs +363 -13
- package/dist/AnalyticsController.mjs.map +1 -1
- package/dist/EventFragment.types.cjs +3 -0
- package/dist/EventFragment.types.cjs.map +1 -0
- package/dist/EventFragment.types.d.cts +111 -0
- package/dist/EventFragment.types.d.cts.map +1 -0
- package/dist/EventFragment.types.d.mts +111 -0
- package/dist/EventFragment.types.d.mts.map +1 -0
- package/dist/EventFragment.types.mjs +2 -0
- package/dist/EventFragment.types.mjs.map +1 -0
- package/dist/index.cjs +2 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/selectors.cjs +19 -0
- package/dist/selectors.cjs.map +1 -1
- package/dist/selectors.d.cts +3 -0
- package/dist/selectors.d.cts.map +1 -1
- package/dist/selectors.d.mts +3 -0
- package/dist/selectors.d.mts.map +1 -1
- package/dist/selectors.mjs +19 -0
- package/dist/selectors.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -5,12 +5,23 @@ import type { Messenger } from "@metamask/messenger";
|
|
|
5
5
|
import type { Json } from "@metamask/utils";
|
|
6
6
|
import type { AnalyticsControllerMethodActions } from "./AnalyticsController-method-action-types.mjs";
|
|
7
7
|
import type { AnalyticsPlatformAdapter, AnalyticsContext, AnalyticsEventProperties, AnalyticsUserTraits, AnalyticsTrackingEvent } from "./AnalyticsPlatformAdapter.types.mjs";
|
|
8
|
+
import type { AnalyticsEventFragmentFinalizeOptions, AnalyticsEventFragmentOptions, AnalyticsEventFragmentPayload, AnalyticsEventFragments, ReadonlyAnalyticsEventFragment } from "./EventFragment.types.mjs";
|
|
8
9
|
/**
|
|
9
10
|
* The name of the {@link AnalyticsController}, used to namespace the
|
|
10
11
|
* controller's actions and events and to namespace the controller's state data
|
|
11
12
|
* when composed with other controllers.
|
|
12
13
|
*/
|
|
13
14
|
export declare const controllerName = "AnalyticsController";
|
|
15
|
+
/**
|
|
16
|
+
* Maximum age of a persisted event fragment, measured from
|
|
17
|
+
* {@link AnalyticsEventFragment.lastUpdated}.
|
|
18
|
+
*
|
|
19
|
+
* Fragments older than this are discarded during {@link AnalyticsController.init}
|
|
20
|
+
* without emitting a success or failure event. Confirmation journeys that span a
|
|
21
|
+
* restart are expected to resume within this window; abandoned ones must not keep
|
|
22
|
+
* `properties` or `sensitiveProperties` in storage indefinitely.
|
|
23
|
+
*/
|
|
24
|
+
export declare const EVENT_FRAGMENT_MAX_AGE: number;
|
|
14
25
|
/**
|
|
15
26
|
* Describes the shape of the state object for {@link AnalyticsController}.
|
|
16
27
|
*/
|
|
@@ -50,6 +61,15 @@ export type AnalyticsControllerState = {
|
|
|
50
61
|
* This is only used when the pre-consent queue is enabled.
|
|
51
62
|
*/
|
|
52
63
|
preConsentEventQueue?: Record<string, Json>;
|
|
64
|
+
/**
|
|
65
|
+
* Persisted event fragments ({@link AnalyticsEventFragment}) keyed by
|
|
66
|
+
* fragment ID. Fragments accumulate properties across a user journey and are
|
|
67
|
+
* removed when the journey is finalized or deleted. Fragments that set
|
|
68
|
+
* `persist: true` can survive {@link AnalyticsController.init}, but only
|
|
69
|
+
* while younger than {@link EVENT_FRAGMENT_MAX_AGE}.
|
|
70
|
+
* This is only used when the event fragments feature is enabled.
|
|
71
|
+
*/
|
|
72
|
+
eventFragments?: AnalyticsEventFragments;
|
|
53
73
|
};
|
|
54
74
|
/**
|
|
55
75
|
* Event types supported by the persisted analytics event queue.
|
|
@@ -202,6 +222,18 @@ export type AnalyticsControllerOptions = {
|
|
|
202
222
|
* @default false
|
|
203
223
|
*/
|
|
204
224
|
isGeolocationEnabled?: boolean;
|
|
225
|
+
/**
|
|
226
|
+
* Whether the event fragments feature is enabled.
|
|
227
|
+
*
|
|
228
|
+
* When enabled, clients can accumulate analytics properties across a user
|
|
229
|
+
* journey with {@link AnalyticsController.createEventFragment} and friends,
|
|
230
|
+
* as long as the consent state allows analytics to be captured. When
|
|
231
|
+
* disabled, every fragment method is a logged no-op and no fragment is ever
|
|
232
|
+
* written to state.
|
|
233
|
+
*
|
|
234
|
+
* @default false
|
|
235
|
+
*/
|
|
236
|
+
isEventFragmentsEnabled?: boolean;
|
|
205
237
|
};
|
|
206
238
|
/**
|
|
207
239
|
* The AnalyticsController manages analytics tracking across platforms (Mobile/Extension).
|
|
@@ -230,10 +262,11 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
230
262
|
* @param options.isEventQueuePersistenceEnabled - Whether analytics event queue persistence is enabled
|
|
231
263
|
* @param options.isPreConsentQueueEnabled - Whether the pre-consent event queue is enabled
|
|
232
264
|
* @param options.isGeolocationEnabled - Whether geolocation enrichment is enabled
|
|
265
|
+
* @param options.isEventFragmentsEnabled - Whether the event fragments feature is enabled
|
|
233
266
|
* @throws Error if state.analyticsId is missing or not a valid UUIDv4
|
|
234
267
|
* @remarks After construction, call {@link AnalyticsController.init} to complete initialization.
|
|
235
268
|
*/
|
|
236
|
-
constructor({ state, messenger, platformAdapter, isAnonymousEventsFeatureEnabled, isEventQueuePersistenceEnabled, isPreConsentQueueEnabled, isGeolocationEnabled, }: AnalyticsControllerOptions);
|
|
269
|
+
constructor({ state, messenger, platformAdapter, isAnonymousEventsFeatureEnabled, isEventQueuePersistenceEnabled, isPreConsentQueueEnabled, isGeolocationEnabled, isEventFragmentsEnabled, }: AnalyticsControllerOptions);
|
|
237
270
|
/**
|
|
238
271
|
* Initialize the controller by calling the platform adapter's
|
|
239
272
|
* onSetupCompleted lifecycle hook and replaying any queued events. This
|
|
@@ -278,6 +311,87 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
278
311
|
* @param context - Optional platform-specific context forwarded to the platform adapter.
|
|
279
312
|
*/
|
|
280
313
|
trackView(name: string, properties?: AnalyticsEventProperties, context?: AnalyticsContext): void;
|
|
314
|
+
/**
|
|
315
|
+
* Create an event fragment.
|
|
316
|
+
*
|
|
317
|
+
* A fragment accumulates properties across a user journey so that several
|
|
318
|
+
* parts of a client can contribute to the same set of events without
|
|
319
|
+
* re-deriving them. Declaring `successEvent` and `failureEvent` turns the
|
|
320
|
+
* fragment into a funnel that {@link finalizeEventFragment} closes. Declaring
|
|
321
|
+
* none of the event names makes it a pure property bag that the client reads
|
|
322
|
+
* back with {@link getEventFragmentById} when it emits its own events.
|
|
323
|
+
*
|
|
324
|
+
* Any existing fragment with the same ID is replaced, so a new journey never
|
|
325
|
+
* inherits properties from a stale one.
|
|
326
|
+
*
|
|
327
|
+
* Nothing is created unless the user is opted in, or undecided with the
|
|
328
|
+
* pre-consent queue enabled, so an opted-out user accumulates no fragment
|
|
329
|
+
* data.
|
|
330
|
+
*
|
|
331
|
+
* @param options - The fragment definition. An ID is generated when one is
|
|
332
|
+
* not supplied.
|
|
333
|
+
* @returns A read-only copy of the created fragment, or `undefined` when the
|
|
334
|
+
* event fragments feature is disabled or the consent state does not allow
|
|
335
|
+
* capture. Mutating the returned object does not change controller state.
|
|
336
|
+
* Use {@link updateEventFragment} or {@link upsertEventFragment} to write.
|
|
337
|
+
*/
|
|
338
|
+
createEventFragment(options?: AnalyticsEventFragmentOptions): ReadonlyAnalyticsEventFragment | undefined;
|
|
339
|
+
/**
|
|
340
|
+
* Write to an event fragment, creating a property bag if none exists.
|
|
341
|
+
*
|
|
342
|
+
* This is the ergonomic entry point for contributors that do not know
|
|
343
|
+
* whether the journey has been started yet, and it avoids the read then
|
|
344
|
+
* write race a caller would otherwise have to implement itself.
|
|
345
|
+
*
|
|
346
|
+
* @param id - The fragment ID.
|
|
347
|
+
* @param payload - The properties and context to merge in.
|
|
348
|
+
*/
|
|
349
|
+
upsertEventFragment(id: string, payload?: AnalyticsEventFragmentPayload): void;
|
|
350
|
+
/**
|
|
351
|
+
* Write to an existing event fragment.
|
|
352
|
+
*
|
|
353
|
+
* @param id - The fragment ID.
|
|
354
|
+
* @param payload - The properties and context to merge in.
|
|
355
|
+
* @throws Error if no fragment has that ID when the call is not ignored.
|
|
356
|
+
* Use {@link upsertEventFragment} when the fragment may not exist yet.
|
|
357
|
+
* When the event fragments feature is disabled or the consent state does not
|
|
358
|
+
* allow capture, the call is a logged no-op and does not throw.
|
|
359
|
+
*/
|
|
360
|
+
updateEventFragment(id: string, payload?: AnalyticsEventFragmentPayload): void;
|
|
361
|
+
/**
|
|
362
|
+
* Read an event fragment.
|
|
363
|
+
*
|
|
364
|
+
* @param id - The fragment ID.
|
|
365
|
+
* @returns A read-only copy of the fragment, or `undefined` when no fragment
|
|
366
|
+
* has that ID, the event fragments feature is disabled, or the consent state
|
|
367
|
+
* does not allow capture. Mutating the returned object does not change
|
|
368
|
+
* controller state. Use {@link updateEventFragment} or
|
|
369
|
+
* {@link upsertEventFragment} to write.
|
|
370
|
+
*/
|
|
371
|
+
getEventFragmentById(id: string): ReadonlyAnalyticsEventFragment | undefined;
|
|
372
|
+
/**
|
|
373
|
+
* Discard an event fragment without emitting anything.
|
|
374
|
+
*
|
|
375
|
+
* @param id - The fragment ID.
|
|
376
|
+
*/
|
|
377
|
+
deleteEventFragment(id: string): void;
|
|
378
|
+
/**
|
|
379
|
+
* Close an event fragment, emitting its closing event and discarding it.
|
|
380
|
+
*
|
|
381
|
+
* The event emitted is `failureEvent` when the journey was abandoned and
|
|
382
|
+
* `successEvent` otherwise. A fragment that does not declare the relevant
|
|
383
|
+
* event name is discarded silently, which is what makes a pure property bag
|
|
384
|
+
* possible.
|
|
385
|
+
*
|
|
386
|
+
* @param id - The fragment ID.
|
|
387
|
+
* @param options - Finalization options.
|
|
388
|
+
* @param options.abandoned - Whether the journey was abandoned.
|
|
389
|
+
* @param options.context - Context merged over the fragment's own context.
|
|
390
|
+
* @throws Error if no fragment has that ID when the call is not ignored.
|
|
391
|
+
* When the event fragments feature is disabled or the consent state does not
|
|
392
|
+
* allow capture, the call is a logged no-op and does not throw.
|
|
393
|
+
*/
|
|
394
|
+
finalizeEventFragment(id: string, { abandoned, context }?: AnalyticsEventFragmentFinalizeOptions): void;
|
|
281
395
|
/**
|
|
282
396
|
* Opt in to analytics.
|
|
283
397
|
*
|
|
@@ -295,7 +409,8 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
295
409
|
* Opt out of analytics.
|
|
296
410
|
*
|
|
297
411
|
* Records that a consent decision has been made and discards any persisted
|
|
298
|
-
* events so nothing captured before the
|
|
412
|
+
* events and in-progress event fragments so nothing captured before the
|
|
413
|
+
* decision is ever delivered.
|
|
299
414
|
*/
|
|
300
415
|
optOut(): void;
|
|
301
416
|
/**
|
|
@@ -305,6 +420,10 @@ export declare class AnalyticsController extends BaseController<'AnalyticsContro
|
|
|
305
420
|
* preference and discards the delivery queue, but preserves any pre-consent
|
|
306
421
|
* events so they can still be replayed if the user opts in again. The user is
|
|
307
422
|
* treated as undecided again.
|
|
423
|
+
*
|
|
424
|
+
* In-progress event fragments are kept only while the undecided user can
|
|
425
|
+
* still accumulate them, and discarded otherwise, so no fragment outlives the
|
|
426
|
+
* consent state that allowed it.
|
|
308
427
|
*/
|
|
309
428
|
resetConsentDecision(): void;
|
|
310
429
|
}
|
|
@@ -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,EACV,6CAA6C,EAE9C,yCAAyC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAI5C,OAAO,KAAK,EAAE,gCAAgC,EAAE,sDAAqD;AAGrG,OAAO,KAAK,EACV,wBAAwB,EAExB,gBAAgB,EAChB,wBAAwB,EAExB,mBAAmB,EACnB,sBAAsB,EACvB,6CAAyC;
|
|
1
|
+
{"version":3,"file":"AnalyticsController.d.mts","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":"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"}
|