@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.
Files changed (41) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/README.md +46 -5
  3. package/dist/AnalyticsController-method-action-types.cjs.map +1 -1
  4. package/dist/AnalyticsController-method-action-types.d.cts +106 -2
  5. package/dist/AnalyticsController-method-action-types.d.cts.map +1 -1
  6. package/dist/AnalyticsController-method-action-types.d.mts +106 -2
  7. package/dist/AnalyticsController-method-action-types.d.mts.map +1 -1
  8. package/dist/AnalyticsController-method-action-types.mjs.map +1 -1
  9. package/dist/AnalyticsController.cjs +364 -14
  10. package/dist/AnalyticsController.cjs.map +1 -1
  11. package/dist/AnalyticsController.d.cts +121 -2
  12. package/dist/AnalyticsController.d.cts.map +1 -1
  13. package/dist/AnalyticsController.d.mts +121 -2
  14. package/dist/AnalyticsController.d.mts.map +1 -1
  15. package/dist/AnalyticsController.mjs +363 -13
  16. package/dist/AnalyticsController.mjs.map +1 -1
  17. package/dist/EventFragment.types.cjs +3 -0
  18. package/dist/EventFragment.types.cjs.map +1 -0
  19. package/dist/EventFragment.types.d.cts +111 -0
  20. package/dist/EventFragment.types.d.cts.map +1 -0
  21. package/dist/EventFragment.types.d.mts +111 -0
  22. package/dist/EventFragment.types.d.mts.map +1 -0
  23. package/dist/EventFragment.types.mjs +2 -0
  24. package/dist/EventFragment.types.mjs.map +1 -0
  25. package/dist/index.cjs +2 -1
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +3 -2
  28. package/dist/index.d.cts.map +1 -1
  29. package/dist/index.d.mts +3 -2
  30. package/dist/index.d.mts.map +1 -1
  31. package/dist/index.mjs +1 -1
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/selectors.cjs +19 -0
  34. package/dist/selectors.cjs.map +1 -1
  35. package/dist/selectors.d.cts +3 -0
  36. package/dist/selectors.d.cts.map +1 -1
  37. package/dist/selectors.d.mts +3 -0
  38. package/dist/selectors.d.mts.map +1 -1
  39. package/dist/selectors.mjs +19 -0
  40. package/dist/selectors.mjs.map +1 -1
  41. 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 decision is ever delivered.
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":"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"}
1
+ {"version":3,"file":"AnalyticsController.d.mts","sourceRoot":"","sources":["../src/AnalyticsController.ts"],"names":[],"mappings":"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"}