@metamask-previews/analytics-privacy-controller 0.0.0-preview-fa81dffb

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 (76) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +20 -0
  3. package/README.md +15 -0
  4. package/dist/AnalyticsPrivacyController-method-action-types.cjs +7 -0
  5. package/dist/AnalyticsPrivacyController-method-action-types.cjs.map +1 -0
  6. package/dist/AnalyticsPrivacyController-method-action-types.d.cts +67 -0
  7. package/dist/AnalyticsPrivacyController-method-action-types.d.cts.map +1 -0
  8. package/dist/AnalyticsPrivacyController-method-action-types.d.mts +67 -0
  9. package/dist/AnalyticsPrivacyController-method-action-types.d.mts.map +1 -0
  10. package/dist/AnalyticsPrivacyController-method-action-types.mjs +6 -0
  11. package/dist/AnalyticsPrivacyController-method-action-types.mjs.map +1 -0
  12. package/dist/AnalyticsPrivacyController.cjs +207 -0
  13. package/dist/AnalyticsPrivacyController.cjs.map +1 -0
  14. package/dist/AnalyticsPrivacyController.d.cts +152 -0
  15. package/dist/AnalyticsPrivacyController.d.cts.map +1 -0
  16. package/dist/AnalyticsPrivacyController.d.mts +152 -0
  17. package/dist/AnalyticsPrivacyController.d.mts.map +1 -0
  18. package/dist/AnalyticsPrivacyController.mjs +202 -0
  19. package/dist/AnalyticsPrivacyController.mjs.map +1 -0
  20. package/dist/AnalyticsPrivacyLogger.cjs +8 -0
  21. package/dist/AnalyticsPrivacyLogger.cjs.map +1 -0
  22. package/dist/AnalyticsPrivacyLogger.d.cts +5 -0
  23. package/dist/AnalyticsPrivacyLogger.d.cts.map +1 -0
  24. package/dist/AnalyticsPrivacyLogger.d.mts +5 -0
  25. package/dist/AnalyticsPrivacyLogger.d.mts.map +1 -0
  26. package/dist/AnalyticsPrivacyLogger.mjs +5 -0
  27. package/dist/AnalyticsPrivacyLogger.mjs.map +1 -0
  28. package/dist/AnalyticsPrivacyService-method-action-types.cjs +7 -0
  29. package/dist/AnalyticsPrivacyService-method-action-types.cjs.map +1 -0
  30. package/dist/AnalyticsPrivacyService-method-action-types.d.cts +30 -0
  31. package/dist/AnalyticsPrivacyService-method-action-types.d.cts.map +1 -0
  32. package/dist/AnalyticsPrivacyService-method-action-types.d.mts +30 -0
  33. package/dist/AnalyticsPrivacyService-method-action-types.d.mts.map +1 -0
  34. package/dist/AnalyticsPrivacyService-method-action-types.mjs +6 -0
  35. package/dist/AnalyticsPrivacyService-method-action-types.mjs.map +1 -0
  36. package/dist/AnalyticsPrivacyService.cjs +252 -0
  37. package/dist/AnalyticsPrivacyService.cjs.map +1 -0
  38. package/dist/AnalyticsPrivacyService.d.cts +160 -0
  39. package/dist/AnalyticsPrivacyService.d.cts.map +1 -0
  40. package/dist/AnalyticsPrivacyService.d.mts +160 -0
  41. package/dist/AnalyticsPrivacyService.d.mts.map +1 -0
  42. package/dist/AnalyticsPrivacyService.mjs +248 -0
  43. package/dist/AnalyticsPrivacyService.mjs.map +1 -0
  44. package/dist/constants.cjs +19 -0
  45. package/dist/constants.cjs.map +1 -0
  46. package/dist/constants.d.cts +16 -0
  47. package/dist/constants.d.cts.map +1 -0
  48. package/dist/constants.d.mts +16 -0
  49. package/dist/constants.d.mts.map +1 -0
  50. package/dist/constants.mjs +16 -0
  51. package/dist/constants.mjs.map +1 -0
  52. package/dist/index.cjs +14 -0
  53. package/dist/index.cjs.map +1 -0
  54. package/dist/index.d.cts +11 -0
  55. package/dist/index.d.cts.map +1 -0
  56. package/dist/index.d.mts +11 -0
  57. package/dist/index.d.mts.map +1 -0
  58. package/dist/index.mjs +5 -0
  59. package/dist/index.mjs.map +1 -0
  60. package/dist/selectors.cjs +34 -0
  61. package/dist/selectors.cjs.map +1 -0
  62. package/dist/selectors.d.cts +11 -0
  63. package/dist/selectors.d.cts.map +1 -0
  64. package/dist/selectors.d.mts +11 -0
  65. package/dist/selectors.d.mts.map +1 -0
  66. package/dist/selectors.mjs +31 -0
  67. package/dist/selectors.mjs.map +1 -0
  68. package/dist/types.cjs +27 -0
  69. package/dist/types.cjs.map +1 -0
  70. package/dist/types.d.cts +53 -0
  71. package/dist/types.d.cts.map +1 -0
  72. package/dist/types.d.mts +53 -0
  73. package/dist/types.d.mts.map +1 -0
  74. package/dist/types.mjs +24 -0
  75. package/dist/types.mjs.map +1 -0
  76. package/package.json +77 -0
@@ -0,0 +1,152 @@
1
+ import type { AnalyticsControllerGetStateAction } from "@metamask/analytics-controller";
2
+ import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
3
+ import { BaseController } from "@metamask/base-controller";
4
+ import type { Messenger } from "@metamask/messenger";
5
+ import type { AnalyticsPrivacyControllerMethodActions } from "./AnalyticsPrivacyController-method-action-types.mjs";
6
+ import type { AnalyticsPrivacyServiceActions } from "./AnalyticsPrivacyService.mjs";
7
+ import type { IDeleteRegulationResponse, IDeleteRegulationStatus } from "./types.mjs";
8
+ /**
9
+ * The name of the {@link AnalyticsPrivacyController}, used to namespace the
10
+ * controller's actions and events and to namespace the controller's state data
11
+ * when composed with other controllers.
12
+ */
13
+ export declare const controllerName = "AnalyticsPrivacyController";
14
+ /**
15
+ * Describes the shape of the state object for {@link AnalyticsPrivacyController}.
16
+ */
17
+ export type AnalyticsPrivacyControllerState = {
18
+ /**
19
+ * Indicates if data has been recorded since the last deletion request.
20
+ */
21
+ dataRecorded: boolean;
22
+ /**
23
+ * Segment's data deletion regulation ID.
24
+ * The ID returned by the Segment delete API which allows checking the status of the deletion request.
25
+ */
26
+ deleteRegulationId: string | null;
27
+ /**
28
+ * Segment's data deletion regulation creation timestamp.
29
+ * The timestamp (in milliseconds since epoch) when the deletion request was created.
30
+ */
31
+ deleteRegulationTimestamp: number | null;
32
+ };
33
+ /**
34
+ * Returns default values for AnalyticsPrivacyController state.
35
+ *
36
+ * @returns Default state
37
+ */
38
+ export declare function getDefaultAnalyticsPrivacyControllerState(): AnalyticsPrivacyControllerState;
39
+ /**
40
+ * Returns the state of the {@link AnalyticsPrivacyController}.
41
+ */
42
+ export type AnalyticsPrivacyControllerGetStateAction = ControllerGetStateAction<typeof controllerName, AnalyticsPrivacyControllerState>;
43
+ /**
44
+ * Actions that {@link AnalyticsPrivacyControllerMessenger} exposes to other consumers.
45
+ */
46
+ export type AnalyticsPrivacyControllerActions = AnalyticsPrivacyControllerGetStateAction | AnalyticsPrivacyControllerMethodActions;
47
+ /**
48
+ * Actions from other messengers that {@link AnalyticsPrivacyControllerMessenger} calls.
49
+ */
50
+ type AllowedActions = AnalyticsControllerGetStateAction | AnalyticsPrivacyServiceActions;
51
+ /**
52
+ * Event emitted when a data deletion task is created.
53
+ */
54
+ export type DataDeletionTaskCreatedEvent = {
55
+ type: `${typeof controllerName}:dataDeletionTaskCreated`;
56
+ payload: [IDeleteRegulationResponse];
57
+ };
58
+ /**
59
+ * Event emitted when the data recording flag is updated.
60
+ */
61
+ export type DataRecordingFlagUpdatedEvent = {
62
+ type: `${typeof controllerName}:dataRecordingFlagUpdated`;
63
+ payload: [boolean];
64
+ };
65
+ /**
66
+ * Event emitted when the state of the {@link AnalyticsPrivacyController} changes.
67
+ */
68
+ export type AnalyticsPrivacyControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, AnalyticsPrivacyControllerState>;
69
+ /**
70
+ * Events that {@link AnalyticsPrivacyControllerMessenger} exposes to other consumers.
71
+ */
72
+ export type AnalyticsPrivacyControllerEvents = AnalyticsPrivacyControllerStateChangeEvent | DataDeletionTaskCreatedEvent | DataRecordingFlagUpdatedEvent;
73
+ /**
74
+ * Events from other messengers that {@link AnalyticsPrivacyControllerMessenger} subscribes to.
75
+ */
76
+ type AllowedEvents = never;
77
+ /**
78
+ * The messenger restricted to actions and events accessed by
79
+ * {@link AnalyticsPrivacyController}.
80
+ */
81
+ export type AnalyticsPrivacyControllerMessenger = Messenger<typeof controllerName, AnalyticsPrivacyControllerActions | AllowedActions, AnalyticsPrivacyControllerEvents | AllowedEvents>;
82
+ /**
83
+ * The options that AnalyticsPrivacyController takes.
84
+ */
85
+ export type AnalyticsPrivacyControllerOptions = {
86
+ /**
87
+ * Initial controller state.
88
+ */
89
+ state?: Partial<AnalyticsPrivacyControllerState>;
90
+ /**
91
+ * Messenger used to communicate with BaseController and other controllers.
92
+ */
93
+ messenger: AnalyticsPrivacyControllerMessenger;
94
+ };
95
+ /**
96
+ * The AnalyticsPrivacyController manages analytics privacy and GDPR/CCPA data deletion functionality.
97
+ * It communicates with Segment's Regulations API via a proxy to create and monitor data deletion requests.
98
+ *
99
+ * This controller follows the MetaMask controller pattern and integrates with the
100
+ * messenger system to allow other controllers and components to manage data deletion tasks.
101
+ */
102
+ export declare class AnalyticsPrivacyController extends BaseController<typeof controllerName, AnalyticsPrivacyControllerState, AnalyticsPrivacyControllerMessenger> {
103
+ /**
104
+ * Constructs an AnalyticsPrivacyController instance.
105
+ *
106
+ * @param options - Controller options
107
+ * @param options.state - Initial controller state. Use `getDefaultAnalyticsPrivacyControllerState()` for defaults.
108
+ * @param options.messenger - Messenger used to communicate with BaseController
109
+ */
110
+ constructor({ state, messenger }: AnalyticsPrivacyControllerOptions);
111
+ /**
112
+ * Creates a new delete regulation for the user.
113
+ * This is necessary to respect the GDPR and CCPA regulations.
114
+ *
115
+ * @returns Promise containing the status of the request
116
+ */
117
+ createDataDeletionTask(): Promise<IDeleteRegulationResponse>;
118
+ /**
119
+ * Check the latest delete regulation status.
120
+ *
121
+ * @returns Promise containing the timestamp, delete status and collected data flag
122
+ */
123
+ checkDataDeleteStatus(): Promise<IDeleteRegulationStatus>;
124
+ /**
125
+ * Get the latest delete regulation request timestamp.
126
+ *
127
+ * @returns The timestamp (in milliseconds since epoch), or undefined
128
+ */
129
+ getDeleteRegulationCreationTimestamp(): number | undefined;
130
+ /**
131
+ * Get the latest delete regulation request id.
132
+ *
133
+ * @returns The id string, or undefined
134
+ */
135
+ getDeleteRegulationId(): string | undefined;
136
+ /**
137
+ * Indicate if events have been recorded since the last deletion request.
138
+ *
139
+ * @returns true if events have been recorded since the last deletion request
140
+ */
141
+ isDataRecorded(): boolean;
142
+ /**
143
+ * Update the data recording flag if needed.
144
+ * This method should be called after tracking events to ensure
145
+ * the data recording flag is properly updated for data deletion workflows.
146
+ *
147
+ * @param saveDataRecording - Whether to save the data recording flag (default: true)
148
+ */
149
+ updateDataRecordingFlag(saveDataRecording?: boolean): void;
150
+ }
151
+ export {};
152
+ //# sourceMappingURL=AnalyticsPrivacyController.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyController.d.mts","sourceRoot":"","sources":["../src/AnalyticsPrivacyController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,uCAAuC;AACxF,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAE3B,kCAAkC;AACnC,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AAErD,OAAO,KAAK,EAAE,uCAAuC,EAAE,6DAAyD;AAEhH,OAAO,KAAK,EAAE,8BAA8B,EAAE,sCAAkC;AAEhF,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,oBAAgB;AAIjB;;;;GAIG;AACH,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAI3D;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC;;;OAGG;IACH,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,yCAAyC,IAAI,+BAA+B,CAM3F;AAqCD;;GAEG;AACH,MAAM,MAAM,wCAAwC,GAAG,wBAAwB,CAC7E,OAAO,cAAc,EACrB,+BAA+B,CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iCAAiC,GACzC,wCAAwC,GACxC,uCAAuC,CAAC;AAE5C;;GAEG;AACH,KAAK,cAAc,GACf,iCAAiC,GACjC,8BAA8B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,GAAG,OAAO,cAAc,0BAA0B,CAAC;IACzD,OAAO,EAAE,CAAC,yBAAyB,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,GAAG,OAAO,cAAc,2BAA2B,CAAC;IAC1D,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0CAA0C,GACpD,0BAA0B,CACxB,OAAO,cAAc,EACrB,+BAA+B,CAChC,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,gCAAgC,GACxC,0CAA0C,GAC1C,4BAA4B,GAC5B,6BAA6B,CAAC;AAElC;;GAEG;AACH,KAAK,aAAa,GAAG,KAAK,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,mCAAmC,GAAG,SAAS,CACzD,OAAO,cAAc,EACrB,iCAAiC,GAAG,cAAc,EAClD,gCAAgC,GAAG,aAAa,CACjD,CAAC;AAIF;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG;IAC9C;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACjD;;OAEG;IACH,SAAS,EAAE,mCAAmC,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,0BAA2B,SAAQ,cAAc,CAC5D,OAAO,cAAc,EACrB,+BAA+B,EAC/B,mCAAmC,CACpC;IACC;;;;;;OAMG;gBACS,EAAE,KAAU,EAAE,SAAS,EAAE,EAAE,iCAAiC;IAyBxE;;;;;OAKG;IACG,sBAAsB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAyDlE;;;;OAIG;IACG,qBAAqB,IAAI,OAAO,CAAC,uBAAuB,CAAC;IA+B/D;;;;OAIG;IACH,oCAAoC,IAAI,MAAM,GAAG,SAAS;IAI1D;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,GAAG,SAAS;IAI3C;;;;OAIG;IACH,cAAc,IAAI,OAAO;IAIzB;;;;;;OAMG;IACH,uBAAuB,CAAC,iBAAiB,GAAE,OAAc,GAAG,IAAI;CAYjE"}
@@ -0,0 +1,202 @@
1
+ import { BaseController } from "@metamask/base-controller";
2
+ import { projectLogger as log } from "./AnalyticsPrivacyLogger.mjs";
3
+ import { DataDeleteResponseStatus, DataDeleteStatus } from "./types.mjs";
4
+ // === GENERAL ===
5
+ /**
6
+ * The name of the {@link AnalyticsPrivacyController}, used to namespace the
7
+ * controller's actions and events and to namespace the controller's state data
8
+ * when composed with other controllers.
9
+ */
10
+ export const controllerName = 'AnalyticsPrivacyController';
11
+ /**
12
+ * Returns default values for AnalyticsPrivacyController state.
13
+ *
14
+ * @returns Default state
15
+ */
16
+ export function getDefaultAnalyticsPrivacyControllerState() {
17
+ return {
18
+ dataRecorded: false,
19
+ deleteRegulationId: null,
20
+ deleteRegulationTimestamp: null,
21
+ };
22
+ }
23
+ /**
24
+ * The metadata for each property in {@link AnalyticsPrivacyControllerState}.
25
+ */
26
+ const analyticsPrivacyControllerMetadata = {
27
+ dataRecorded: {
28
+ includeInStateLogs: true,
29
+ persist: true,
30
+ includeInDebugSnapshot: true,
31
+ usedInUi: true,
32
+ },
33
+ deleteRegulationId: {
34
+ includeInStateLogs: true,
35
+ persist: true,
36
+ includeInDebugSnapshot: true,
37
+ usedInUi: true,
38
+ },
39
+ deleteRegulationTimestamp: {
40
+ includeInStateLogs: true,
41
+ persist: true,
42
+ includeInDebugSnapshot: true,
43
+ usedInUi: true,
44
+ },
45
+ };
46
+ // === MESSENGER ===
47
+ const MESSENGER_EXPOSED_METHODS = [
48
+ 'createDataDeletionTask',
49
+ 'checkDataDeleteStatus',
50
+ 'getDeleteRegulationCreationTimestamp',
51
+ 'getDeleteRegulationId',
52
+ 'isDataRecorded',
53
+ 'updateDataRecordingFlag',
54
+ ];
55
+ /**
56
+ * The AnalyticsPrivacyController manages analytics privacy and GDPR/CCPA data deletion functionality.
57
+ * It communicates with Segment's Regulations API via a proxy to create and monitor data deletion requests.
58
+ *
59
+ * This controller follows the MetaMask controller pattern and integrates with the
60
+ * messenger system to allow other controllers and components to manage data deletion tasks.
61
+ */
62
+ export class AnalyticsPrivacyController extends BaseController {
63
+ /**
64
+ * Constructs an AnalyticsPrivacyController instance.
65
+ *
66
+ * @param options - Controller options
67
+ * @param options.state - Initial controller state. Use `getDefaultAnalyticsPrivacyControllerState()` for defaults.
68
+ * @param options.messenger - Messenger used to communicate with BaseController
69
+ */
70
+ constructor({ state = {}, messenger }) {
71
+ const initialState = {
72
+ ...getDefaultAnalyticsPrivacyControllerState(),
73
+ ...state,
74
+ };
75
+ super({
76
+ name: controllerName,
77
+ metadata: analyticsPrivacyControllerMetadata,
78
+ state: initialState,
79
+ messenger,
80
+ });
81
+ this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
82
+ log('AnalyticsPrivacyController initialized', {
83
+ dataRecorded: this.state.dataRecorded,
84
+ hasDeleteRegulationId: Boolean(this.state.deleteRegulationId),
85
+ deleteRegulationTimestamp: this.state.deleteRegulationTimestamp,
86
+ });
87
+ }
88
+ /**
89
+ * Creates a new delete regulation for the user.
90
+ * This is necessary to respect the GDPR and CCPA regulations.
91
+ *
92
+ * @returns Promise containing the status of the request
93
+ */
94
+ async createDataDeletionTask() {
95
+ try {
96
+ const analyticsControllerState = this.messenger.call('AnalyticsController:getState');
97
+ const { analyticsId } = analyticsControllerState;
98
+ if (!analyticsId || analyticsId.trim() === '') {
99
+ const error = new Error('Analytics ID not found');
100
+ log('Analytics Deletion Task Error', error);
101
+ return {
102
+ status: DataDeleteResponseStatus.Failure,
103
+ error: 'Analytics ID not found',
104
+ };
105
+ }
106
+ const response = await this.messenger.call('AnalyticsPrivacyService:createDataDeletionTask', analyticsId);
107
+ if (response.status === DataDeleteResponseStatus.Success &&
108
+ response.regulateId &&
109
+ typeof response.regulateId === 'string' &&
110
+ response.regulateId.trim() !== '') {
111
+ const deletionTimestamp = Date.now();
112
+ // Already validated as non-empty string above
113
+ const { regulateId } = response;
114
+ this.update((state) => {
115
+ state.deleteRegulationId = regulateId;
116
+ state.deleteRegulationTimestamp = deletionTimestamp;
117
+ state.dataRecorded = false;
118
+ });
119
+ this.messenger.publish(`${controllerName}:dataDeletionTaskCreated`, response);
120
+ }
121
+ return response;
122
+ }
123
+ catch (error) {
124
+ log('Analytics Deletion Task Error', error);
125
+ const errorMessage = error instanceof Error
126
+ ? error.message
127
+ : 'Analytics Deletion Task Error';
128
+ return {
129
+ status: DataDeleteResponseStatus.Failure,
130
+ error: errorMessage,
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Check the latest delete regulation status.
136
+ *
137
+ * @returns Promise containing the timestamp, delete status and collected data flag
138
+ */
139
+ async checkDataDeleteStatus() {
140
+ const status = {
141
+ deletionRequestTimestamp: undefined,
142
+ dataDeletionRequestStatus: DataDeleteStatus.Unknown,
143
+ hasCollectedDataSinceDeletionRequest: false,
144
+ };
145
+ if (!this.state.deleteRegulationId) {
146
+ return status;
147
+ }
148
+ try {
149
+ const dataDeletionTaskStatus = await this.messenger.call('AnalyticsPrivacyService:checkDataDeleteStatus', this.state.deleteRegulationId);
150
+ status.dataDeletionRequestStatus =
151
+ dataDeletionTaskStatus.dataDeleteStatus;
152
+ }
153
+ catch (error) {
154
+ log('Error checkDataDeleteStatus', error);
155
+ status.dataDeletionRequestStatus = DataDeleteStatus.Unknown;
156
+ }
157
+ status.deletionRequestTimestamp =
158
+ this.state.deleteRegulationTimestamp ?? undefined;
159
+ status.hasCollectedDataSinceDeletionRequest = this.state.dataRecorded;
160
+ return status;
161
+ }
162
+ /**
163
+ * Get the latest delete regulation request timestamp.
164
+ *
165
+ * @returns The timestamp (in milliseconds since epoch), or undefined
166
+ */
167
+ getDeleteRegulationCreationTimestamp() {
168
+ return this.state.deleteRegulationTimestamp ?? undefined;
169
+ }
170
+ /**
171
+ * Get the latest delete regulation request id.
172
+ *
173
+ * @returns The id string, or undefined
174
+ */
175
+ getDeleteRegulationId() {
176
+ return this.state.deleteRegulationId ?? undefined;
177
+ }
178
+ /**
179
+ * Indicate if events have been recorded since the last deletion request.
180
+ *
181
+ * @returns true if events have been recorded since the last deletion request
182
+ */
183
+ isDataRecorded() {
184
+ return this.state.dataRecorded;
185
+ }
186
+ /**
187
+ * Update the data recording flag if needed.
188
+ * This method should be called after tracking events to ensure
189
+ * the data recording flag is properly updated for data deletion workflows.
190
+ *
191
+ * @param saveDataRecording - Whether to save the data recording flag (default: true)
192
+ */
193
+ updateDataRecordingFlag(saveDataRecording = true) {
194
+ if (saveDataRecording && !this.state.dataRecorded) {
195
+ this.update((state) => {
196
+ state.dataRecorded = true;
197
+ });
198
+ this.messenger.publish(`${controllerName}:dataRecordingFlagUpdated`, true);
199
+ }
200
+ }
201
+ }
202
+ //# sourceMappingURL=AnalyticsPrivacyController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyController.mjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AnalyticsControllerGetStateAction } from '@metamask/analytics-controller';\nimport 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 { AnalyticsPrivacyControllerMethodActions } from './AnalyticsPrivacyController-method-action-types';\nimport { projectLogger as log } from './AnalyticsPrivacyLogger';\nimport type { AnalyticsPrivacyServiceActions } from './AnalyticsPrivacyService';\nimport { DataDeleteResponseStatus, DataDeleteStatus } from './types';\nimport type {\n IDeleteRegulationResponse,\n IDeleteRegulationStatus,\n} from './types';\n\n// === GENERAL ===\n\n/**\n * The name of the {@link AnalyticsPrivacyController}, 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 = 'AnalyticsPrivacyController';\n\n// === STATE ===\n\n/**\n * Describes the shape of the state object for {@link AnalyticsPrivacyController}.\n */\nexport type AnalyticsPrivacyControllerState = {\n /**\n * Indicates if data has been recorded since the last deletion request.\n */\n dataRecorded: boolean;\n\n /**\n * Segment's data deletion regulation ID.\n * The ID returned by the Segment delete API which allows checking the status of the deletion request.\n */\n deleteRegulationId: string | null;\n\n /**\n * Segment's data deletion regulation creation timestamp.\n * The timestamp (in milliseconds since epoch) when the deletion request was created.\n */\n deleteRegulationTimestamp: number | null;\n};\n\n/**\n * Returns default values for AnalyticsPrivacyController state.\n *\n * @returns Default state\n */\nexport function getDefaultAnalyticsPrivacyControllerState(): AnalyticsPrivacyControllerState {\n return {\n dataRecorded: false,\n deleteRegulationId: null,\n deleteRegulationTimestamp: null,\n };\n}\n\n/**\n * The metadata for each property in {@link AnalyticsPrivacyControllerState}.\n */\nconst analyticsPrivacyControllerMetadata = {\n dataRecorded: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n deleteRegulationId: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n deleteRegulationTimestamp: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: true,\n usedInUi: true,\n },\n} satisfies StateMetadata<AnalyticsPrivacyControllerState>;\n\n// === MESSENGER ===\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'createDataDeletionTask',\n 'checkDataDeleteStatus',\n 'getDeleteRegulationCreationTimestamp',\n 'getDeleteRegulationId',\n 'isDataRecorded',\n 'updateDataRecordingFlag',\n] as const;\n\n/**\n * Returns the state of the {@link AnalyticsPrivacyController}.\n */\nexport type AnalyticsPrivacyControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AnalyticsPrivacyControllerState\n>;\n\n/**\n * Actions that {@link AnalyticsPrivacyControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsPrivacyControllerActions =\n | AnalyticsPrivacyControllerGetStateAction\n | AnalyticsPrivacyControllerMethodActions;\n\n/**\n * Actions from other messengers that {@link AnalyticsPrivacyControllerMessenger} calls.\n */\ntype AllowedActions =\n | AnalyticsControllerGetStateAction\n | AnalyticsPrivacyServiceActions;\n\n/**\n * Event emitted when a data deletion task is created.\n */\nexport type DataDeletionTaskCreatedEvent = {\n type: `${typeof controllerName}:dataDeletionTaskCreated`;\n payload: [IDeleteRegulationResponse];\n};\n\n/**\n * Event emitted when the data recording flag is updated.\n */\nexport type DataRecordingFlagUpdatedEvent = {\n type: `${typeof controllerName}:dataRecordingFlagUpdated`;\n payload: [boolean];\n};\n\n/**\n * Event emitted when the state of the {@link AnalyticsPrivacyController} changes.\n */\nexport type AnalyticsPrivacyControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n AnalyticsPrivacyControllerState\n >;\n\n/**\n * Events that {@link AnalyticsPrivacyControllerMessenger} exposes to other consumers.\n */\nexport type AnalyticsPrivacyControllerEvents =\n | AnalyticsPrivacyControllerStateChangeEvent\n | DataDeletionTaskCreatedEvent\n | DataRecordingFlagUpdatedEvent;\n\n/**\n * Events from other messengers that {@link AnalyticsPrivacyControllerMessenger} subscribes to.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger restricted to actions and events accessed by\n * {@link AnalyticsPrivacyController}.\n */\nexport type AnalyticsPrivacyControllerMessenger = Messenger<\n typeof controllerName,\n AnalyticsPrivacyControllerActions | AllowedActions,\n AnalyticsPrivacyControllerEvents | AllowedEvents\n>;\n\n// === CONTROLLER DEFINITION ===\n\n/**\n * The options that AnalyticsPrivacyController takes.\n */\nexport type AnalyticsPrivacyControllerOptions = {\n /**\n * Initial controller state.\n */\n state?: Partial<AnalyticsPrivacyControllerState>;\n /**\n * Messenger used to communicate with BaseController and other controllers.\n */\n messenger: AnalyticsPrivacyControllerMessenger;\n};\n\n/**\n * The AnalyticsPrivacyController manages analytics privacy and GDPR/CCPA data deletion functionality.\n * It communicates with Segment's Regulations API via a proxy to create and monitor data deletion requests.\n *\n * This controller follows the MetaMask controller pattern and integrates with the\n * messenger system to allow other controllers and components to manage data deletion tasks.\n */\nexport class AnalyticsPrivacyController extends BaseController<\n typeof controllerName,\n AnalyticsPrivacyControllerState,\n AnalyticsPrivacyControllerMessenger\n> {\n /**\n * Constructs an AnalyticsPrivacyController instance.\n *\n * @param options - Controller options\n * @param options.state - Initial controller state. Use `getDefaultAnalyticsPrivacyControllerState()` for defaults.\n * @param options.messenger - Messenger used to communicate with BaseController\n */\n constructor({ state = {}, messenger }: AnalyticsPrivacyControllerOptions) {\n const initialState: AnalyticsPrivacyControllerState = {\n ...getDefaultAnalyticsPrivacyControllerState(),\n ...state,\n };\n\n super({\n name: controllerName,\n metadata: analyticsPrivacyControllerMetadata,\n state: initialState,\n messenger,\n });\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\n log('AnalyticsPrivacyController initialized', {\n dataRecorded: this.state.dataRecorded,\n hasDeleteRegulationId: Boolean(this.state.deleteRegulationId),\n deleteRegulationTimestamp: this.state.deleteRegulationTimestamp,\n });\n }\n\n /**\n * Creates a new delete regulation for the user.\n * This is necessary to respect the GDPR and CCPA regulations.\n *\n * @returns Promise containing the status of the request\n */\n async createDataDeletionTask(): Promise<IDeleteRegulationResponse> {\n try {\n const analyticsControllerState = this.messenger.call(\n 'AnalyticsController:getState',\n );\n const { analyticsId } = analyticsControllerState;\n\n if (!analyticsId || analyticsId.trim() === '') {\n const error = new Error('Analytics ID not found');\n log('Analytics Deletion Task Error', error);\n return {\n status: DataDeleteResponseStatus.Failure,\n error: 'Analytics ID not found',\n };\n }\n\n const response = await this.messenger.call(\n 'AnalyticsPrivacyService:createDataDeletionTask',\n analyticsId,\n );\n\n if (\n response.status === DataDeleteResponseStatus.Success &&\n response.regulateId &&\n typeof response.regulateId === 'string' &&\n response.regulateId.trim() !== ''\n ) {\n const deletionTimestamp = Date.now();\n // Already validated as non-empty string above\n const { regulateId } = response;\n\n this.update((state) => {\n state.deleteRegulationId = regulateId;\n state.deleteRegulationTimestamp = deletionTimestamp;\n state.dataRecorded = false;\n });\n\n this.messenger.publish(\n `${controllerName}:dataDeletionTaskCreated`,\n response,\n );\n }\n\n return response;\n } catch (error) {\n log('Analytics Deletion Task Error', error);\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Analytics Deletion Task Error';\n return {\n status: DataDeleteResponseStatus.Failure,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Check the latest delete regulation status.\n *\n * @returns Promise containing the timestamp, delete status and collected data flag\n */\n async checkDataDeleteStatus(): Promise<IDeleteRegulationStatus> {\n const status: IDeleteRegulationStatus = {\n deletionRequestTimestamp: undefined,\n dataDeletionRequestStatus: DataDeleteStatus.Unknown,\n hasCollectedDataSinceDeletionRequest: false,\n };\n\n if (!this.state.deleteRegulationId) {\n return status;\n }\n\n try {\n const dataDeletionTaskStatus = await this.messenger.call(\n 'AnalyticsPrivacyService:checkDataDeleteStatus',\n this.state.deleteRegulationId,\n );\n\n status.dataDeletionRequestStatus =\n dataDeletionTaskStatus.dataDeleteStatus;\n } catch (error) {\n log('Error checkDataDeleteStatus', error);\n status.dataDeletionRequestStatus = DataDeleteStatus.Unknown;\n }\n\n status.deletionRequestTimestamp =\n this.state.deleteRegulationTimestamp ?? undefined;\n status.hasCollectedDataSinceDeletionRequest = this.state.dataRecorded;\n\n return status;\n }\n\n /**\n * Get the latest delete regulation request timestamp.\n *\n * @returns The timestamp (in milliseconds since epoch), or undefined\n */\n getDeleteRegulationCreationTimestamp(): number | undefined {\n return this.state.deleteRegulationTimestamp ?? undefined;\n }\n\n /**\n * Get the latest delete regulation request id.\n *\n * @returns The id string, or undefined\n */\n getDeleteRegulationId(): string | undefined {\n return this.state.deleteRegulationId ?? undefined;\n }\n\n /**\n * Indicate if events have been recorded since the last deletion request.\n *\n * @returns true if events have been recorded since the last deletion request\n */\n isDataRecorded(): boolean {\n return this.state.dataRecorded;\n }\n\n /**\n * Update the data recording flag if needed.\n * This method should be called after tracking events to ensure\n * the data recording flag is properly updated for data deletion workflows.\n *\n * @param saveDataRecording - Whether to save the data recording flag (default: true)\n */\n updateDataRecordingFlag(saveDataRecording: boolean = true): void {\n if (saveDataRecording && !this.state.dataRecorded) {\n this.update((state) => {\n state.dataRecorded = true;\n });\n\n this.messenger.publish(\n `${controllerName}:dataRecordingFlagUpdated`,\n true,\n );\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /* istanbul ignore file */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.createModuleLogger = exports.projectLogger = void 0;
5
+ const utils_1 = require("@metamask/utils");
6
+ Object.defineProperty(exports, "createModuleLogger", { enumerable: true, get: function () { return utils_1.createModuleLogger; } });
7
+ exports.projectLogger = (0, utils_1.createProjectLogger)('analytics-privacy-controller');
8
+ //# sourceMappingURL=AnalyticsPrivacyLogger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyLogger.cjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyLogger.ts"],"names":[],"mappings":";AAAA,0BAA0B;;;AAE1B,2CAA0E;AAMjE,mGANqB,0BAAkB,OAMrB;AAJd,QAAA,aAAa,GAAG,IAAA,2BAAmB,EAC9C,8BAA8B,CAC/B,CAAC","sourcesContent":["/* istanbul ignore file */\n\nimport { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger(\n 'analytics-privacy-controller',\n);\n\nexport { createModuleLogger };\n"]}
@@ -0,0 +1,5 @@
1
+ /// <reference types="debug" />
2
+ import { createModuleLogger } from "@metamask/utils";
3
+ export declare const projectLogger: import("debug").Debugger;
4
+ export { createModuleLogger };
5
+ //# sourceMappingURL=AnalyticsPrivacyLogger.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyLogger.d.cts","sourceRoot":"","sources":["../src/AnalyticsPrivacyLogger.ts"],"names":[],"mappings":";AAEA,OAAO,EAAuB,kBAAkB,EAAE,wBAAwB;AAE1E,eAAO,MAAM,aAAa,0BAEzB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /// <reference types="debug" />
2
+ import { createModuleLogger } from "@metamask/utils";
3
+ export declare const projectLogger: import("debug").Debugger;
4
+ export { createModuleLogger };
5
+ //# sourceMappingURL=AnalyticsPrivacyLogger.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyLogger.d.mts","sourceRoot":"","sources":["../src/AnalyticsPrivacyLogger.ts"],"names":[],"mappings":";AAEA,OAAO,EAAuB,kBAAkB,EAAE,wBAAwB;AAE1E,eAAO,MAAM,aAAa,0BAEzB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ /* istanbul ignore file */
2
+ import { createProjectLogger, createModuleLogger } from "@metamask/utils";
3
+ export const projectLogger = createProjectLogger('analytics-privacy-controller');
4
+ export { createModuleLogger };
5
+ //# sourceMappingURL=AnalyticsPrivacyLogger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyLogger.mjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyLogger.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,wBAAwB;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAC9C,8BAA8B,CAC/B,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["/* istanbul ignore file */\n\nimport { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger(\n 'analytics-privacy-controller',\n);\n\nexport { createModuleLogger };\n"]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * This file is auto generated by `scripts/generate-method-action-types.ts`.
4
+ * Do not edit manually.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=AnalyticsPrivacyService-method-action-types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyService-method-action-types.cjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyService-method-action-types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { AnalyticsPrivacyService } from './AnalyticsPrivacyService';\n\n/**\n * Creates a DELETE_ONLY regulation for the given analyticsId.\n *\n * @param analyticsId - The analytics ID of the user for whom to create the deletion task.\n * @returns Promise resolving to the deletion regulation response.\n */\nexport type AnalyticsPrivacyServiceCreateDataDeletionTaskAction = {\n type: `AnalyticsPrivacyService:createDataDeletionTask`;\n handler: AnalyticsPrivacyService['createDataDeletionTask'];\n};\n\n/**\n * Checks the status of a regulation by ID.\n *\n * @param regulationId - The regulation ID to check.\n * @returns Promise resolving to the regulation status response.\n */\nexport type AnalyticsPrivacyServiceCheckDataDeleteStatusAction = {\n type: `AnalyticsPrivacyService:checkDataDeleteStatus`;\n handler: AnalyticsPrivacyService['checkDataDeleteStatus'];\n};\n\n/**\n * Union of all AnalyticsPrivacyService action types.\n */\nexport type AnalyticsPrivacyServiceMethodActions =\n | AnalyticsPrivacyServiceCreateDataDeletionTaskAction\n | AnalyticsPrivacyServiceCheckDataDeleteStatusAction;\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
+ * Do not edit manually.
4
+ */
5
+ import type { AnalyticsPrivacyService } from "./AnalyticsPrivacyService.cjs";
6
+ /**
7
+ * Creates a DELETE_ONLY regulation for the given analyticsId.
8
+ *
9
+ * @param analyticsId - The analytics ID of the user for whom to create the deletion task.
10
+ * @returns Promise resolving to the deletion regulation response.
11
+ */
12
+ export type AnalyticsPrivacyServiceCreateDataDeletionTaskAction = {
13
+ type: `AnalyticsPrivacyService:createDataDeletionTask`;
14
+ handler: AnalyticsPrivacyService['createDataDeletionTask'];
15
+ };
16
+ /**
17
+ * Checks the status of a regulation by ID.
18
+ *
19
+ * @param regulationId - The regulation ID to check.
20
+ * @returns Promise resolving to the regulation status response.
21
+ */
22
+ export type AnalyticsPrivacyServiceCheckDataDeleteStatusAction = {
23
+ type: `AnalyticsPrivacyService:checkDataDeleteStatus`;
24
+ handler: AnalyticsPrivacyService['checkDataDeleteStatus'];
25
+ };
26
+ /**
27
+ * Union of all AnalyticsPrivacyService action types.
28
+ */
29
+ export type AnalyticsPrivacyServiceMethodActions = AnalyticsPrivacyServiceCreateDataDeletionTaskAction | AnalyticsPrivacyServiceCheckDataDeleteStatusAction;
30
+ //# sourceMappingURL=AnalyticsPrivacyService-method-action-types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyService-method-action-types.d.cts","sourceRoot":"","sources":["../src/AnalyticsPrivacyService-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAkC;AAEzE;;;;;GAKG;AACH,MAAM,MAAM,mDAAmD,GAAG;IAChE,IAAI,EAAE,gDAAgD,CAAC;IACvD,OAAO,EAAE,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;CAC5D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D,IAAI,EAAE,+CAA+C,CAAC;IACtD,OAAO,EAAE,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oCAAoC,GAC5C,mDAAmD,GACnD,kDAAkD,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
+ * Do not edit manually.
4
+ */
5
+ import type { AnalyticsPrivacyService } from "./AnalyticsPrivacyService.mjs";
6
+ /**
7
+ * Creates a DELETE_ONLY regulation for the given analyticsId.
8
+ *
9
+ * @param analyticsId - The analytics ID of the user for whom to create the deletion task.
10
+ * @returns Promise resolving to the deletion regulation response.
11
+ */
12
+ export type AnalyticsPrivacyServiceCreateDataDeletionTaskAction = {
13
+ type: `AnalyticsPrivacyService:createDataDeletionTask`;
14
+ handler: AnalyticsPrivacyService['createDataDeletionTask'];
15
+ };
16
+ /**
17
+ * Checks the status of a regulation by ID.
18
+ *
19
+ * @param regulationId - The regulation ID to check.
20
+ * @returns Promise resolving to the regulation status response.
21
+ */
22
+ export type AnalyticsPrivacyServiceCheckDataDeleteStatusAction = {
23
+ type: `AnalyticsPrivacyService:checkDataDeleteStatus`;
24
+ handler: AnalyticsPrivacyService['checkDataDeleteStatus'];
25
+ };
26
+ /**
27
+ * Union of all AnalyticsPrivacyService action types.
28
+ */
29
+ export type AnalyticsPrivacyServiceMethodActions = AnalyticsPrivacyServiceCreateDataDeletionTaskAction | AnalyticsPrivacyServiceCheckDataDeleteStatusAction;
30
+ //# sourceMappingURL=AnalyticsPrivacyService-method-action-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyService-method-action-types.d.mts","sourceRoot":"","sources":["../src/AnalyticsPrivacyService-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,sCAAkC;AAEzE;;;;;GAKG;AACH,MAAM,MAAM,mDAAmD,GAAG;IAChE,IAAI,EAAE,gDAAgD,CAAC;IACvD,OAAO,EAAE,uBAAuB,CAAC,wBAAwB,CAAC,CAAC;CAC5D,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,kDAAkD,GAAG;IAC/D,IAAI,EAAE,+CAA+C,CAAC;IACtD,OAAO,EAAE,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oCAAoC,GAC5C,mDAAmD,GACnD,kDAAkD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * This file is auto generated by `scripts/generate-method-action-types.ts`.
3
+ * Do not edit manually.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=AnalyticsPrivacyService-method-action-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsPrivacyService-method-action-types.mjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyService-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated by `scripts/generate-method-action-types.ts`.\n * Do not edit manually.\n */\n\nimport type { AnalyticsPrivacyService } from './AnalyticsPrivacyService';\n\n/**\n * Creates a DELETE_ONLY regulation for the given analyticsId.\n *\n * @param analyticsId - The analytics ID of the user for whom to create the deletion task.\n * @returns Promise resolving to the deletion regulation response.\n */\nexport type AnalyticsPrivacyServiceCreateDataDeletionTaskAction = {\n type: `AnalyticsPrivacyService:createDataDeletionTask`;\n handler: AnalyticsPrivacyService['createDataDeletionTask'];\n};\n\n/**\n * Checks the status of a regulation by ID.\n *\n * @param regulationId - The regulation ID to check.\n * @returns Promise resolving to the regulation status response.\n */\nexport type AnalyticsPrivacyServiceCheckDataDeleteStatusAction = {\n type: `AnalyticsPrivacyService:checkDataDeleteStatus`;\n handler: AnalyticsPrivacyService['checkDataDeleteStatus'];\n};\n\n/**\n * Union of all AnalyticsPrivacyService action types.\n */\nexport type AnalyticsPrivacyServiceMethodActions =\n | AnalyticsPrivacyServiceCreateDataDeletionTaskAction\n | AnalyticsPrivacyServiceCheckDataDeleteStatusAction;\n"]}