@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.
- package/CHANGELOG.md +10 -0
- package/LICENSE +20 -0
- package/README.md +15 -0
- package/dist/AnalyticsPrivacyController-method-action-types.cjs +7 -0
- package/dist/AnalyticsPrivacyController-method-action-types.cjs.map +1 -0
- package/dist/AnalyticsPrivacyController-method-action-types.d.cts +67 -0
- package/dist/AnalyticsPrivacyController-method-action-types.d.cts.map +1 -0
- package/dist/AnalyticsPrivacyController-method-action-types.d.mts +67 -0
- package/dist/AnalyticsPrivacyController-method-action-types.d.mts.map +1 -0
- package/dist/AnalyticsPrivacyController-method-action-types.mjs +6 -0
- package/dist/AnalyticsPrivacyController-method-action-types.mjs.map +1 -0
- package/dist/AnalyticsPrivacyController.cjs +207 -0
- package/dist/AnalyticsPrivacyController.cjs.map +1 -0
- package/dist/AnalyticsPrivacyController.d.cts +152 -0
- package/dist/AnalyticsPrivacyController.d.cts.map +1 -0
- package/dist/AnalyticsPrivacyController.d.mts +152 -0
- package/dist/AnalyticsPrivacyController.d.mts.map +1 -0
- package/dist/AnalyticsPrivacyController.mjs +202 -0
- package/dist/AnalyticsPrivacyController.mjs.map +1 -0
- package/dist/AnalyticsPrivacyLogger.cjs +8 -0
- package/dist/AnalyticsPrivacyLogger.cjs.map +1 -0
- package/dist/AnalyticsPrivacyLogger.d.cts +5 -0
- package/dist/AnalyticsPrivacyLogger.d.cts.map +1 -0
- package/dist/AnalyticsPrivacyLogger.d.mts +5 -0
- package/dist/AnalyticsPrivacyLogger.d.mts.map +1 -0
- package/dist/AnalyticsPrivacyLogger.mjs +5 -0
- package/dist/AnalyticsPrivacyLogger.mjs.map +1 -0
- package/dist/AnalyticsPrivacyService-method-action-types.cjs +7 -0
- package/dist/AnalyticsPrivacyService-method-action-types.cjs.map +1 -0
- package/dist/AnalyticsPrivacyService-method-action-types.d.cts +30 -0
- package/dist/AnalyticsPrivacyService-method-action-types.d.cts.map +1 -0
- package/dist/AnalyticsPrivacyService-method-action-types.d.mts +30 -0
- package/dist/AnalyticsPrivacyService-method-action-types.d.mts.map +1 -0
- package/dist/AnalyticsPrivacyService-method-action-types.mjs +6 -0
- package/dist/AnalyticsPrivacyService-method-action-types.mjs.map +1 -0
- package/dist/AnalyticsPrivacyService.cjs +252 -0
- package/dist/AnalyticsPrivacyService.cjs.map +1 -0
- package/dist/AnalyticsPrivacyService.d.cts +160 -0
- package/dist/AnalyticsPrivacyService.d.cts.map +1 -0
- package/dist/AnalyticsPrivacyService.d.mts +160 -0
- package/dist/AnalyticsPrivacyService.d.mts.map +1 -0
- package/dist/AnalyticsPrivacyService.mjs +248 -0
- package/dist/AnalyticsPrivacyService.mjs.map +1 -0
- package/dist/constants.cjs +19 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +16 -0
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.mts +16 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +16 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +11 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +11 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.mjs.map +1 -0
- package/dist/selectors.cjs +34 -0
- package/dist/selectors.cjs.map +1 -0
- package/dist/selectors.d.cts +11 -0
- package/dist/selectors.d.cts.map +1 -0
- package/dist/selectors.d.mts +11 -0
- package/dist/selectors.d.mts.map +1 -0
- package/dist/selectors.mjs +31 -0
- package/dist/selectors.mjs.map +1 -0
- package/dist/types.cjs +27 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +53 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +53 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +24 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _AnalyticsPrivacyService_messenger, _AnalyticsPrivacyService_fetch, _AnalyticsPrivacyService_segmentSourceId, _AnalyticsPrivacyService_segmentRegulationsEndpoint, _AnalyticsPrivacyService_policy;
|
|
13
|
+
import { createServicePolicy, HttpError } from "@metamask/controller-utils";
|
|
14
|
+
import { projectLogger as log } from "./AnalyticsPrivacyLogger.mjs";
|
|
15
|
+
import { SEGMENT_REGULATION_TYPE_DELETE_ONLY, SEGMENT_SUBJECT_TYPE_USER_ID, SEGMENT_CONTENT_TYPE } from "./constants.mjs";
|
|
16
|
+
import { DataDeleteResponseStatus, DataDeleteStatus } from "./types.mjs";
|
|
17
|
+
// === GENERAL ===
|
|
18
|
+
/**
|
|
19
|
+
* The name of the {@link AnalyticsPrivacyService}, used to namespace the
|
|
20
|
+
* service's actions and events.
|
|
21
|
+
*/
|
|
22
|
+
export const serviceName = 'AnalyticsPrivacyService';
|
|
23
|
+
// === MESSENGER ===
|
|
24
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
25
|
+
'createDataDeletionTask',
|
|
26
|
+
'checkDataDeleteStatus',
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* This service object is responsible for making requests to the Segment Regulations API
|
|
30
|
+
* via a proxy endpoint for GDPR/CCPA data deletion functionality.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
*
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { Messenger } from '@metamask/messenger';
|
|
36
|
+
* import type {
|
|
37
|
+
* AnalyticsPrivacyServiceActions,
|
|
38
|
+
* AnalyticsPrivacyServiceEvents,
|
|
39
|
+
* } from '@metamask/analytics-privacy-controller';
|
|
40
|
+
*
|
|
41
|
+
* const rootMessenger = new Messenger<
|
|
42
|
+
* 'Root',
|
|
43
|
+
* AnalyticsPrivacyServiceActions,
|
|
44
|
+
* AnalyticsPrivacyServiceEvents
|
|
45
|
+
* >({ namespace: 'Root' });
|
|
46
|
+
* const serviceMessenger = new Messenger<
|
|
47
|
+
* 'AnalyticsPrivacyService',
|
|
48
|
+
* AnalyticsPrivacyServiceActions,
|
|
49
|
+
* AnalyticsPrivacyServiceEvents,
|
|
50
|
+
* typeof rootMessenger,
|
|
51
|
+
* >({
|
|
52
|
+
* namespace: 'AnalyticsPrivacyService',
|
|
53
|
+
* parent: rootMessenger,
|
|
54
|
+
* });
|
|
55
|
+
* // Instantiate the service to register its actions on the messenger
|
|
56
|
+
* new AnalyticsPrivacyService({
|
|
57
|
+
* messenger: serviceMessenger,
|
|
58
|
+
* fetch,
|
|
59
|
+
* segmentSourceId: 'abc123',
|
|
60
|
+
* segmentRegulationsEndpoint: 'https://proxy.example.com/v1beta',
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // Later...
|
|
64
|
+
* // Create a data deletion task
|
|
65
|
+
* const response = await rootMessenger.call(
|
|
66
|
+
* 'AnalyticsPrivacyService:createDataDeletionTask',
|
|
67
|
+
* 'user-analytics-id',
|
|
68
|
+
* );
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export class AnalyticsPrivacyService {
|
|
72
|
+
/**
|
|
73
|
+
* Constructs a new AnalyticsPrivacyService object.
|
|
74
|
+
*
|
|
75
|
+
* @param options - The constructor options.
|
|
76
|
+
*/
|
|
77
|
+
constructor(options) {
|
|
78
|
+
/**
|
|
79
|
+
* The messenger suited for this service.
|
|
80
|
+
*/
|
|
81
|
+
_AnalyticsPrivacyService_messenger.set(this, void 0);
|
|
82
|
+
/**
|
|
83
|
+
* A function that can be used to make an HTTP request.
|
|
84
|
+
*/
|
|
85
|
+
_AnalyticsPrivacyService_fetch.set(this, void 0);
|
|
86
|
+
/**
|
|
87
|
+
* Segment API source ID.
|
|
88
|
+
*/
|
|
89
|
+
_AnalyticsPrivacyService_segmentSourceId.set(this, void 0);
|
|
90
|
+
/**
|
|
91
|
+
* Base URL for the proxy endpoint.
|
|
92
|
+
*/
|
|
93
|
+
_AnalyticsPrivacyService_segmentRegulationsEndpoint.set(this, void 0);
|
|
94
|
+
/**
|
|
95
|
+
* The policy that wraps the request.
|
|
96
|
+
*
|
|
97
|
+
* @see {@link createServicePolicy}
|
|
98
|
+
*/
|
|
99
|
+
_AnalyticsPrivacyService_policy.set(this, void 0);
|
|
100
|
+
this.name = serviceName;
|
|
101
|
+
__classPrivateFieldSet(this, _AnalyticsPrivacyService_messenger, options.messenger, "f");
|
|
102
|
+
__classPrivateFieldSet(this, _AnalyticsPrivacyService_fetch, options.fetch, "f");
|
|
103
|
+
__classPrivateFieldSet(this, _AnalyticsPrivacyService_segmentSourceId, options.segmentSourceId, "f");
|
|
104
|
+
__classPrivateFieldSet(this, _AnalyticsPrivacyService_segmentRegulationsEndpoint, options.segmentRegulationsEndpoint, "f");
|
|
105
|
+
__classPrivateFieldSet(this, _AnalyticsPrivacyService_policy, createServicePolicy(options.policyOptions ?? {}), "f");
|
|
106
|
+
__classPrivateFieldGet(this, _AnalyticsPrivacyService_messenger, "f").registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Registers a handler that will be called after a request returns a non-500
|
|
110
|
+
* response, causing a retry. Primarily useful in tests where timers are being
|
|
111
|
+
* mocked.
|
|
112
|
+
*
|
|
113
|
+
* @param listener - The handler to be called.
|
|
114
|
+
* @returns An object that can be used to unregister the handler.
|
|
115
|
+
* @see {@link createServicePolicy}
|
|
116
|
+
*/
|
|
117
|
+
onRetry(listener) {
|
|
118
|
+
return __classPrivateFieldGet(this, _AnalyticsPrivacyService_policy, "f").onRetry(listener);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Registers a handler that will be called after a set number of retry rounds
|
|
122
|
+
* prove that requests to the API endpoint consistently return a 5xx response.
|
|
123
|
+
*
|
|
124
|
+
* @param listener - The handler to be called.
|
|
125
|
+
* @returns An object that can be used to unregister the handler.
|
|
126
|
+
* @see {@link createServicePolicy}
|
|
127
|
+
*/
|
|
128
|
+
onBreak(listener) {
|
|
129
|
+
return __classPrivateFieldGet(this, _AnalyticsPrivacyService_policy, "f").onBreak(listener);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Registers a handler that will be called under one of two circumstances:
|
|
133
|
+
*
|
|
134
|
+
* 1. After a set number of retries prove that requests to the API
|
|
135
|
+
* consistently result in failures.
|
|
136
|
+
* 2. After a successful request is made to the API, but the response takes
|
|
137
|
+
* longer than a set duration to return.
|
|
138
|
+
*
|
|
139
|
+
* @param listener - The handler to be called.
|
|
140
|
+
* @returns An object that can be used to unregister the handler.
|
|
141
|
+
*/
|
|
142
|
+
onDegraded(listener) {
|
|
143
|
+
return __classPrivateFieldGet(this, _AnalyticsPrivacyService_policy, "f").onDegraded(listener);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Creates a DELETE_ONLY regulation for the given analyticsId.
|
|
147
|
+
*
|
|
148
|
+
* @param analyticsId - The analytics ID of the user for whom to create the deletion task.
|
|
149
|
+
* @returns Promise resolving to the deletion regulation response.
|
|
150
|
+
*/
|
|
151
|
+
async createDataDeletionTask(analyticsId) {
|
|
152
|
+
if (!__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentSourceId, "f") || !__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentRegulationsEndpoint, "f")) {
|
|
153
|
+
return {
|
|
154
|
+
status: DataDeleteResponseStatus.Failure,
|
|
155
|
+
error: 'Segment API source ID or endpoint not found',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
const url = `${__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentRegulationsEndpoint, "f")}/regulations/sources/${__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentSourceId, "f")}`;
|
|
160
|
+
const body = JSON.stringify({
|
|
161
|
+
regulationType: SEGMENT_REGULATION_TYPE_DELETE_ONLY,
|
|
162
|
+
subjectType: SEGMENT_SUBJECT_TYPE_USER_ID,
|
|
163
|
+
subjectIds: [analyticsId],
|
|
164
|
+
});
|
|
165
|
+
const response = await __classPrivateFieldGet(this, _AnalyticsPrivacyService_policy, "f").execute(async () => {
|
|
166
|
+
const localResponse = await __classPrivateFieldGet(this, _AnalyticsPrivacyService_fetch, "f").call(this, url, {
|
|
167
|
+
method: 'POST',
|
|
168
|
+
headers: {
|
|
169
|
+
'Content-Type': SEGMENT_CONTENT_TYPE,
|
|
170
|
+
},
|
|
171
|
+
body,
|
|
172
|
+
});
|
|
173
|
+
if (!localResponse.ok) {
|
|
174
|
+
throw new HttpError(localResponse.status, `Creating data deletion task failed with status '${localResponse.status}'`);
|
|
175
|
+
}
|
|
176
|
+
return localResponse;
|
|
177
|
+
});
|
|
178
|
+
const jsonResponse = (await response.json());
|
|
179
|
+
if (jsonResponse?.data?.data?.regulateId &&
|
|
180
|
+
typeof jsonResponse.data.data.regulateId === 'string') {
|
|
181
|
+
return {
|
|
182
|
+
status: DataDeleteResponseStatus.Success,
|
|
183
|
+
regulateId: jsonResponse.data.data.regulateId,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
log('Analytics Deletion Task Error', new Error('Malformed response from Segment API'));
|
|
187
|
+
return {
|
|
188
|
+
status: DataDeleteResponseStatus.Failure,
|
|
189
|
+
error: 'Analytics Deletion Task Error',
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
log('Analytics Deletion Task Error', error);
|
|
194
|
+
return {
|
|
195
|
+
status: DataDeleteResponseStatus.Failure,
|
|
196
|
+
error: 'Analytics Deletion Task Error',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Checks the status of a regulation by ID.
|
|
202
|
+
*
|
|
203
|
+
* @param regulationId - The regulation ID to check.
|
|
204
|
+
* @returns Promise resolving to the regulation status response.
|
|
205
|
+
*/
|
|
206
|
+
async checkDataDeleteStatus(regulationId) {
|
|
207
|
+
// Early return if regulationId is missing (cannot check status) or endpoint is not configured
|
|
208
|
+
if (!regulationId || !__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentRegulationsEndpoint, "f")) {
|
|
209
|
+
return {
|
|
210
|
+
status: DataDeleteResponseStatus.Failure,
|
|
211
|
+
dataDeleteStatus: DataDeleteStatus.Unknown,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const url = `${__classPrivateFieldGet(this, _AnalyticsPrivacyService_segmentRegulationsEndpoint, "f")}/regulations/${regulationId}`;
|
|
216
|
+
const response = await __classPrivateFieldGet(this, _AnalyticsPrivacyService_policy, "f").execute(async () => {
|
|
217
|
+
const localResponse = await __classPrivateFieldGet(this, _AnalyticsPrivacyService_fetch, "f").call(this, url, {
|
|
218
|
+
method: 'GET',
|
|
219
|
+
headers: {
|
|
220
|
+
'Content-Type': SEGMENT_CONTENT_TYPE,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
if (!localResponse.ok) {
|
|
224
|
+
throw new HttpError(localResponse.status, `Checking data deletion status failed with status '${localResponse.status}'`);
|
|
225
|
+
}
|
|
226
|
+
return localResponse;
|
|
227
|
+
});
|
|
228
|
+
const jsonResponse = (await response.json());
|
|
229
|
+
const rawStatus = jsonResponse?.data?.data?.regulation?.overallStatus;
|
|
230
|
+
const dataDeleteStatus = Object.values(DataDeleteStatus).includes(rawStatus)
|
|
231
|
+
? rawStatus
|
|
232
|
+
: DataDeleteStatus.Unknown;
|
|
233
|
+
return {
|
|
234
|
+
status: DataDeleteResponseStatus.Success,
|
|
235
|
+
dataDeleteStatus,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
log('Analytics Deletion Task Check Error', error);
|
|
240
|
+
return {
|
|
241
|
+
status: DataDeleteResponseStatus.Failure,
|
|
242
|
+
dataDeleteStatus: DataDeleteStatus.Unknown,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
_AnalyticsPrivacyService_messenger = new WeakMap(), _AnalyticsPrivacyService_fetch = new WeakMap(), _AnalyticsPrivacyService_segmentSourceId = new WeakMap(), _AnalyticsPrivacyService_segmentRegulationsEndpoint = new WeakMap(), _AnalyticsPrivacyService_policy = new WeakMap();
|
|
248
|
+
//# sourceMappingURL=AnalyticsPrivacyService.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnalyticsPrivacyService.mjs","sourceRoot":"","sources":["../src/AnalyticsPrivacyService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CreateServicePolicyOptions,\n ServicePolicy,\n} from '@metamask/controller-utils';\nimport { createServicePolicy, HttpError } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type { IDisposable } from 'cockatiel';\n\nimport { projectLogger as log } from './AnalyticsPrivacyLogger';\nimport type { AnalyticsPrivacyServiceMethodActions } from './AnalyticsPrivacyService-method-action-types';\nimport {\n SEGMENT_REGULATION_TYPE_DELETE_ONLY,\n SEGMENT_SUBJECT_TYPE_USER_ID,\n SEGMENT_CONTENT_TYPE,\n} from './constants';\nimport { DataDeleteResponseStatus, DataDeleteStatus } from './types';\nimport type {\n IDeleteRegulationResponse,\n IDeleteRegulationStatusResponse,\n} from './types';\n\n// === GENERAL ===\n\n/**\n * The name of the {@link AnalyticsPrivacyService}, used to namespace the\n * service's actions and events.\n */\nexport const serviceName = 'AnalyticsPrivacyService';\n\n// === MESSENGER ===\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'createDataDeletionTask',\n 'checkDataDeleteStatus',\n] as const;\n\n/**\n * Actions that {@link AnalyticsPrivacyService} exposes to other consumers.\n */\nexport type AnalyticsPrivacyServiceActions =\n AnalyticsPrivacyServiceMethodActions;\n\n/**\n * Actions from other messengers that {@link AnalyticsPrivacyServiceMessenger} calls.\n */\ntype AllowedActions = never;\n\n/**\n * Events that {@link AnalyticsPrivacyService} exposes to other consumers.\n */\nexport type AnalyticsPrivacyServiceEvents = never;\n\n/**\n * Events from other messengers that {@link AnalyticsPrivacyService} subscribes to.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger which is restricted to actions and events accessed by\n * {@link AnalyticsPrivacyService}.\n */\nexport type AnalyticsPrivacyServiceMessenger = Messenger<\n typeof serviceName,\n AnalyticsPrivacyServiceActions | AllowedActions,\n AnalyticsPrivacyServiceEvents | AllowedEvents\n>;\n\n// === SERVICE DEFINITION ===\n\n/**\n * Response structure from Segment API for creating a regulation.\n */\ntype CreateRegulationResponse = {\n data: {\n data: {\n regulateId: string;\n };\n };\n};\n\n/**\n * Response structure from Segment API for getting regulation status.\n */\ntype GetRegulationStatusResponse = {\n data: {\n data: {\n regulation: {\n overallStatus: string;\n };\n };\n };\n};\n\n/**\n * Options for constructing {@link AnalyticsPrivacyService}.\n */\nexport type AnalyticsPrivacyServiceOptions = {\n /**\n * The messenger suited for this service.\n */\n messenger: AnalyticsPrivacyServiceMessenger;\n\n /**\n * A function that can be used to make an HTTP request.\n */\n fetch: typeof fetch;\n\n /**\n * Segment API source ID (required for creating regulations).\n */\n segmentSourceId: string;\n\n /**\n * Base URL for the proxy endpoint (not Segment API directly).\n * The proxy forwards requests to Segment API and adds authentication tokens.\n */\n segmentRegulationsEndpoint: string;\n\n /**\n * Options to pass to `createServicePolicy`, which is used to wrap each request.\n */\n policyOptions?: CreateServicePolicyOptions;\n};\n\n/**\n * This service object is responsible for making requests to the Segment Regulations API\n * via a proxy endpoint for GDPR/CCPA data deletion functionality.\n *\n * @example\n *\n * ```ts\n * import { Messenger } from '@metamask/messenger';\n * import type {\n * AnalyticsPrivacyServiceActions,\n * AnalyticsPrivacyServiceEvents,\n * } from '@metamask/analytics-privacy-controller';\n *\n * const rootMessenger = new Messenger<\n * 'Root',\n * AnalyticsPrivacyServiceActions,\n * AnalyticsPrivacyServiceEvents\n * >({ namespace: 'Root' });\n * const serviceMessenger = new Messenger<\n * 'AnalyticsPrivacyService',\n * AnalyticsPrivacyServiceActions,\n * AnalyticsPrivacyServiceEvents,\n * typeof rootMessenger,\n * >({\n * namespace: 'AnalyticsPrivacyService',\n * parent: rootMessenger,\n * });\n * // Instantiate the service to register its actions on the messenger\n * new AnalyticsPrivacyService({\n * messenger: serviceMessenger,\n * fetch,\n * segmentSourceId: 'abc123',\n * segmentRegulationsEndpoint: 'https://proxy.example.com/v1beta',\n * });\n *\n * // Later...\n * // Create a data deletion task\n * const response = await rootMessenger.call(\n * 'AnalyticsPrivacyService:createDataDeletionTask',\n * 'user-analytics-id',\n * );\n * ```\n */\nexport class AnalyticsPrivacyService {\n /**\n * The name of the service.\n */\n readonly name: typeof serviceName;\n\n /**\n * The messenger suited for this service.\n */\n readonly #messenger: AnalyticsPrivacyServiceMessenger;\n\n /**\n * A function that can be used to make an HTTP request.\n */\n readonly #fetch: typeof fetch;\n\n /**\n * Segment API source ID.\n */\n readonly #segmentSourceId: string;\n\n /**\n * Base URL for the proxy endpoint.\n */\n readonly #segmentRegulationsEndpoint: string;\n\n /**\n * The policy that wraps the request.\n *\n * @see {@link createServicePolicy}\n */\n readonly #policy: ServicePolicy;\n\n /**\n * Constructs a new AnalyticsPrivacyService object.\n *\n * @param options - The constructor options.\n */\n constructor(options: AnalyticsPrivacyServiceOptions) {\n this.name = serviceName;\n this.#messenger = options.messenger;\n this.#fetch = options.fetch;\n this.#segmentSourceId = options.segmentSourceId;\n this.#segmentRegulationsEndpoint = options.segmentRegulationsEndpoint;\n this.#policy = createServicePolicy(options.policyOptions ?? {});\n\n this.#messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n /**\n * Registers a handler that will be called after a request returns a non-500\n * response, causing a retry. Primarily useful in tests where timers are being\n * mocked.\n *\n * @param listener - The handler to be called.\n * @returns An object that can be used to unregister the handler.\n * @see {@link createServicePolicy}\n */\n onRetry(listener: Parameters<ServicePolicy['onRetry']>[0]): IDisposable {\n return this.#policy.onRetry(listener);\n }\n\n /**\n * Registers a handler that will be called after a set number of retry rounds\n * prove that requests to the API endpoint consistently return a 5xx response.\n *\n * @param listener - The handler to be called.\n * @returns An object that can be used to unregister the handler.\n * @see {@link createServicePolicy}\n */\n onBreak(listener: Parameters<ServicePolicy['onBreak']>[0]): IDisposable {\n return this.#policy.onBreak(listener);\n }\n\n /**\n * Registers a handler that will be called under one of two circumstances:\n *\n * 1. After a set number of retries prove that requests to the API\n * consistently result in failures.\n * 2. After a successful request is made to the API, but the response takes\n * longer than a set duration to return.\n *\n * @param listener - The handler to be called.\n * @returns An object that can be used to unregister the handler.\n */\n onDegraded(\n listener: Parameters<ServicePolicy['onDegraded']>[0],\n ): IDisposable {\n return this.#policy.onDegraded(listener);\n }\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 */\n async createDataDeletionTask(\n analyticsId: string,\n ): Promise<IDeleteRegulationResponse> {\n if (!this.#segmentSourceId || !this.#segmentRegulationsEndpoint) {\n return {\n status: DataDeleteResponseStatus.Failure,\n error: 'Segment API source ID or endpoint not found',\n };\n }\n\n try {\n const url = `${this.#segmentRegulationsEndpoint}/regulations/sources/${this.#segmentSourceId}`;\n const body = JSON.stringify({\n regulationType: SEGMENT_REGULATION_TYPE_DELETE_ONLY,\n subjectType: SEGMENT_SUBJECT_TYPE_USER_ID,\n subjectIds: [analyticsId],\n });\n\n const response = await this.#policy.execute(async () => {\n const localResponse = await this.#fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': SEGMENT_CONTENT_TYPE,\n },\n body,\n });\n\n if (!localResponse.ok) {\n throw new HttpError(\n localResponse.status,\n `Creating data deletion task failed with status '${localResponse.status}'`,\n );\n }\n\n return localResponse;\n });\n\n const jsonResponse = (await response.json()) as CreateRegulationResponse;\n\n if (\n jsonResponse?.data?.data?.regulateId &&\n typeof jsonResponse.data.data.regulateId === 'string'\n ) {\n return {\n status: DataDeleteResponseStatus.Success,\n regulateId: jsonResponse.data.data.regulateId,\n };\n }\n\n log(\n 'Analytics Deletion Task Error',\n new Error('Malformed response from Segment API'),\n );\n return {\n status: DataDeleteResponseStatus.Failure,\n error: 'Analytics Deletion Task Error',\n };\n } catch (error) {\n log('Analytics Deletion Task Error', error);\n return {\n status: DataDeleteResponseStatus.Failure,\n error: 'Analytics Deletion Task Error',\n };\n }\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 */\n async checkDataDeleteStatus(\n regulationId: string,\n ): Promise<IDeleteRegulationStatusResponse> {\n // Early return if regulationId is missing (cannot check status) or endpoint is not configured\n if (!regulationId || !this.#segmentRegulationsEndpoint) {\n return {\n status: DataDeleteResponseStatus.Failure,\n dataDeleteStatus: DataDeleteStatus.Unknown,\n };\n }\n\n try {\n const url = `${this.#segmentRegulationsEndpoint}/regulations/${regulationId}`;\n\n const response = await this.#policy.execute(async () => {\n const localResponse = await this.#fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': SEGMENT_CONTENT_TYPE,\n },\n });\n\n if (!localResponse.ok) {\n throw new HttpError(\n localResponse.status,\n `Checking data deletion status failed with status '${localResponse.status}'`,\n );\n }\n\n return localResponse;\n });\n\n const jsonResponse =\n (await response.json()) as GetRegulationStatusResponse;\n\n const rawStatus = jsonResponse?.data?.data?.regulation?.overallStatus;\n const dataDeleteStatus = Object.values(DataDeleteStatus).includes(\n rawStatus as DataDeleteStatus,\n )\n ? (rawStatus as DataDeleteStatus)\n : DataDeleteStatus.Unknown;\n\n return {\n status: DataDeleteResponseStatus.Success,\n dataDeleteStatus,\n };\n } catch (error) {\n log('Analytics Deletion Task Check Error', error);\n return {\n status: DataDeleteResponseStatus.Failure,\n dataDeleteStatus: DataDeleteStatus.Unknown,\n };\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Constants used by the analytics privacy controller and service.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SEGMENT_CONTENT_TYPE = exports.SEGMENT_SUBJECT_TYPE_USER_ID = exports.SEGMENT_REGULATION_TYPE_DELETE_ONLY = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Segment API regulation type for DELETE_ONLY operations.
|
|
9
|
+
*/
|
|
10
|
+
exports.SEGMENT_REGULATION_TYPE_DELETE_ONLY = 'DELETE_ONLY';
|
|
11
|
+
/**
|
|
12
|
+
* Segment API subject type for user ID operations.
|
|
13
|
+
*/
|
|
14
|
+
exports.SEGMENT_SUBJECT_TYPE_USER_ID = 'USER_ID';
|
|
15
|
+
/**
|
|
16
|
+
* Segment API Content-Type header value.
|
|
17
|
+
*/
|
|
18
|
+
exports.SEGMENT_CONTENT_TYPE = 'application/vnd.segment.v1+json';
|
|
19
|
+
//# sourceMappingURL=constants.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACU,QAAA,mCAAmC,GAAG,aAAa,CAAC;AAEjE;;GAEG;AACU,QAAA,4BAA4B,GAAG,SAAS,CAAC;AAEtD;;GAEG;AACU,QAAA,oBAAoB,GAAG,iCAAiC,CAAC","sourcesContent":["/**\n * Constants used by the analytics privacy controller and service.\n */\n\n/**\n * Segment API regulation type for DELETE_ONLY operations.\n */\nexport const SEGMENT_REGULATION_TYPE_DELETE_ONLY = 'DELETE_ONLY';\n\n/**\n * Segment API subject type for user ID operations.\n */\nexport const SEGMENT_SUBJECT_TYPE_USER_ID = 'USER_ID';\n\n/**\n * Segment API Content-Type header value.\n */\nexport const SEGMENT_CONTENT_TYPE = 'application/vnd.segment.v1+json';\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used by the analytics privacy controller and service.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Segment API regulation type for DELETE_ONLY operations.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SEGMENT_REGULATION_TYPE_DELETE_ONLY = "DELETE_ONLY";
|
|
8
|
+
/**
|
|
9
|
+
* Segment API subject type for user ID operations.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SEGMENT_SUBJECT_TYPE_USER_ID = "USER_ID";
|
|
12
|
+
/**
|
|
13
|
+
* Segment API Content-Type header value.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SEGMENT_CONTENT_TYPE = "application/vnd.segment.v1+json";
|
|
16
|
+
//# sourceMappingURL=constants.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,mCAAmC,gBAAgB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,4BAA4B,YAAY,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,oBAAoB,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used by the analytics privacy controller and service.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Segment API regulation type for DELETE_ONLY operations.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SEGMENT_REGULATION_TYPE_DELETE_ONLY = "DELETE_ONLY";
|
|
8
|
+
/**
|
|
9
|
+
* Segment API subject type for user ID operations.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SEGMENT_SUBJECT_TYPE_USER_ID = "USER_ID";
|
|
12
|
+
/**
|
|
13
|
+
* Segment API Content-Type header value.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SEGMENT_CONTENT_TYPE = "application/vnd.segment.v1+json";
|
|
16
|
+
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,mCAAmC,gBAAgB,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,4BAA4B,YAAY,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,oBAAoB,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used by the analytics privacy controller and service.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Segment API regulation type for DELETE_ONLY operations.
|
|
6
|
+
*/
|
|
7
|
+
export const SEGMENT_REGULATION_TYPE_DELETE_ONLY = 'DELETE_ONLY';
|
|
8
|
+
/**
|
|
9
|
+
* Segment API subject type for user ID operations.
|
|
10
|
+
*/
|
|
11
|
+
export const SEGMENT_SUBJECT_TYPE_USER_ID = 'USER_ID';
|
|
12
|
+
/**
|
|
13
|
+
* Segment API Content-Type header value.
|
|
14
|
+
*/
|
|
15
|
+
export const SEGMENT_CONTENT_TYPE = 'application/vnd.segment.v1+json';
|
|
16
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,aAAa,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,iCAAiC,CAAC","sourcesContent":["/**\n * Constants used by the analytics privacy controller and service.\n */\n\n/**\n * Segment API regulation type for DELETE_ONLY operations.\n */\nexport const SEGMENT_REGULATION_TYPE_DELETE_ONLY = 'DELETE_ONLY';\n\n/**\n * Segment API subject type for user ID operations.\n */\nexport const SEGMENT_SUBJECT_TYPE_USER_ID = 'USER_ID';\n\n/**\n * Segment API Content-Type header value.\n */\nexport const SEGMENT_CONTENT_TYPE = 'application/vnd.segment.v1+json';\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyticsPrivacyControllerSelectors = exports.DataDeleteResponseStatus = exports.DataDeleteStatus = exports.AnalyticsPrivacyService = exports.getDefaultAnalyticsPrivacyControllerState = exports.AnalyticsPrivacyController = void 0;
|
|
4
|
+
var AnalyticsPrivacyController_1 = require("./AnalyticsPrivacyController.cjs");
|
|
5
|
+
Object.defineProperty(exports, "AnalyticsPrivacyController", { enumerable: true, get: function () { return AnalyticsPrivacyController_1.AnalyticsPrivacyController; } });
|
|
6
|
+
Object.defineProperty(exports, "getDefaultAnalyticsPrivacyControllerState", { enumerable: true, get: function () { return AnalyticsPrivacyController_1.getDefaultAnalyticsPrivacyControllerState; } });
|
|
7
|
+
var AnalyticsPrivacyService_1 = require("./AnalyticsPrivacyService.cjs");
|
|
8
|
+
Object.defineProperty(exports, "AnalyticsPrivacyService", { enumerable: true, get: function () { return AnalyticsPrivacyService_1.AnalyticsPrivacyService; } });
|
|
9
|
+
var types_1 = require("./types.cjs");
|
|
10
|
+
Object.defineProperty(exports, "DataDeleteStatus", { enumerable: true, get: function () { return types_1.DataDeleteStatus; } });
|
|
11
|
+
Object.defineProperty(exports, "DataDeleteResponseStatus", { enumerable: true, get: function () { return types_1.DataDeleteResponseStatus; } });
|
|
12
|
+
var selectors_1 = require("./selectors.cjs");
|
|
13
|
+
Object.defineProperty(exports, "analyticsPrivacyControllerSelectors", { enumerable: true, get: function () { return selectors_1.analyticsPrivacyControllerSelectors; } });
|
|
14
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+EAGsC;AAFpC,wIAAA,0BAA0B,OAAA;AAC1B,uJAAA,yCAAyC,OAAA;AAI3C,yEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAOhC,qCAAqE;AAA5D,yGAAA,gBAAgB,OAAA;AAAE,iHAAA,wBAAwB,OAAA;AASnD,6CAAkE;AAAzD,gIAAA,mCAAmC,OAAA","sourcesContent":["export {\n AnalyticsPrivacyController,\n getDefaultAnalyticsPrivacyControllerState,\n} from './AnalyticsPrivacyController';\nexport type { AnalyticsPrivacyControllerOptions } from './AnalyticsPrivacyController';\n\nexport { AnalyticsPrivacyService } from './AnalyticsPrivacyService';\nexport type {\n AnalyticsPrivacyServiceActions,\n AnalyticsPrivacyServiceEvents,\n AnalyticsPrivacyServiceOptions,\n} from './AnalyticsPrivacyService';\n\nexport { DataDeleteStatus, DataDeleteResponseStatus } from './types';\nexport type {\n IDeleteRegulationResponse,\n IDeleteRegulationStatus,\n IDeleteRegulationStatusResponse,\n} from './types';\n\nexport type { AnalyticsPrivacyControllerState } from './AnalyticsPrivacyController';\n\nexport { analyticsPrivacyControllerSelectors } from './selectors';\n\nexport type { AnalyticsPrivacyControllerMessenger } from './AnalyticsPrivacyController';\n\nexport type {\n AnalyticsPrivacyControllerActions,\n AnalyticsPrivacyControllerEvents,\n AnalyticsPrivacyControllerGetStateAction,\n AnalyticsPrivacyControllerStateChangeEvent,\n DataDeletionTaskCreatedEvent,\n DataRecordingFlagUpdatedEvent,\n} from './AnalyticsPrivacyController';\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { AnalyticsPrivacyController, getDefaultAnalyticsPrivacyControllerState, } from "./AnalyticsPrivacyController.cjs";
|
|
2
|
+
export type { AnalyticsPrivacyControllerOptions } from "./AnalyticsPrivacyController.cjs";
|
|
3
|
+
export { AnalyticsPrivacyService } from "./AnalyticsPrivacyService.cjs";
|
|
4
|
+
export type { AnalyticsPrivacyServiceActions, AnalyticsPrivacyServiceEvents, AnalyticsPrivacyServiceOptions, } from "./AnalyticsPrivacyService.cjs";
|
|
5
|
+
export { DataDeleteStatus, DataDeleteResponseStatus } from "./types.cjs";
|
|
6
|
+
export type { IDeleteRegulationResponse, IDeleteRegulationStatus, IDeleteRegulationStatusResponse, } from "./types.cjs";
|
|
7
|
+
export type { AnalyticsPrivacyControllerState } from "./AnalyticsPrivacyController.cjs";
|
|
8
|
+
export { analyticsPrivacyControllerSelectors } from "./selectors.cjs";
|
|
9
|
+
export type { AnalyticsPrivacyControllerMessenger } from "./AnalyticsPrivacyController.cjs";
|
|
10
|
+
export type { AnalyticsPrivacyControllerActions, AnalyticsPrivacyControllerEvents, AnalyticsPrivacyControllerGetStateAction, AnalyticsPrivacyControllerStateChangeEvent, DataDeletionTaskCreatedEvent, DataRecordingFlagUpdatedEvent, } from "./AnalyticsPrivacyController.cjs";
|
|
11
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yCAAyC,GAC1C,yCAAqC;AACtC,YAAY,EAAE,iCAAiC,EAAE,yCAAqC;AAEtF,OAAO,EAAE,uBAAuB,EAAE,sCAAkC;AACpE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,GAC/B,sCAAkC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,oBAAgB;AACrE,YAAY,EACV,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,GAChC,oBAAgB;AAEjB,YAAY,EAAE,+BAA+B,EAAE,yCAAqC;AAEpF,OAAO,EAAE,mCAAmC,EAAE,wBAAoB;AAElE,YAAY,EAAE,mCAAmC,EAAE,yCAAqC;AAExF,YAAY,EACV,iCAAiC,EACjC,gCAAgC,EAChC,wCAAwC,EACxC,0CAA0C,EAC1C,4BAA4B,EAC5B,6BAA6B,GAC9B,yCAAqC"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { AnalyticsPrivacyController, getDefaultAnalyticsPrivacyControllerState, } from "./AnalyticsPrivacyController.mjs";
|
|
2
|
+
export type { AnalyticsPrivacyControllerOptions } from "./AnalyticsPrivacyController.mjs";
|
|
3
|
+
export { AnalyticsPrivacyService } from "./AnalyticsPrivacyService.mjs";
|
|
4
|
+
export type { AnalyticsPrivacyServiceActions, AnalyticsPrivacyServiceEvents, AnalyticsPrivacyServiceOptions, } from "./AnalyticsPrivacyService.mjs";
|
|
5
|
+
export { DataDeleteStatus, DataDeleteResponseStatus } from "./types.mjs";
|
|
6
|
+
export type { IDeleteRegulationResponse, IDeleteRegulationStatus, IDeleteRegulationStatusResponse, } from "./types.mjs";
|
|
7
|
+
export type { AnalyticsPrivacyControllerState } from "./AnalyticsPrivacyController.mjs";
|
|
8
|
+
export { analyticsPrivacyControllerSelectors } from "./selectors.mjs";
|
|
9
|
+
export type { AnalyticsPrivacyControllerMessenger } from "./AnalyticsPrivacyController.mjs";
|
|
10
|
+
export type { AnalyticsPrivacyControllerActions, AnalyticsPrivacyControllerEvents, AnalyticsPrivacyControllerGetStateAction, AnalyticsPrivacyControllerStateChangeEvent, DataDeletionTaskCreatedEvent, DataRecordingFlagUpdatedEvent, } from "./AnalyticsPrivacyController.mjs";
|
|
11
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yCAAyC,GAC1C,yCAAqC;AACtC,YAAY,EAAE,iCAAiC,EAAE,yCAAqC;AAEtF,OAAO,EAAE,uBAAuB,EAAE,sCAAkC;AACpE,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,GAC/B,sCAAkC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,oBAAgB;AACrE,YAAY,EACV,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,GAChC,oBAAgB;AAEjB,YAAY,EAAE,+BAA+B,EAAE,yCAAqC;AAEpF,OAAO,EAAE,mCAAmC,EAAE,wBAAoB;AAElE,YAAY,EAAE,mCAAmC,EAAE,yCAAqC;AAExF,YAAY,EACV,iCAAiC,EACjC,gCAAgC,EAChC,wCAAwC,EACxC,0CAA0C,EAC1C,4BAA4B,EAC5B,6BAA6B,GAC9B,yCAAqC"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AnalyticsPrivacyController, getDefaultAnalyticsPrivacyControllerState } from "./AnalyticsPrivacyController.mjs";
|
|
2
|
+
export { AnalyticsPrivacyService } from "./AnalyticsPrivacyService.mjs";
|
|
3
|
+
export { DataDeleteStatus, DataDeleteResponseStatus } from "./types.mjs";
|
|
4
|
+
export { analyticsPrivacyControllerSelectors } from "./selectors.mjs";
|
|
5
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yCAAyC,EAC1C,yCAAqC;AAGtC,OAAO,EAAE,uBAAuB,EAAE,sCAAkC;AAOpE,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,oBAAgB;AASrE,OAAO,EAAE,mCAAmC,EAAE,wBAAoB","sourcesContent":["export {\n AnalyticsPrivacyController,\n getDefaultAnalyticsPrivacyControllerState,\n} from './AnalyticsPrivacyController';\nexport type { AnalyticsPrivacyControllerOptions } from './AnalyticsPrivacyController';\n\nexport { AnalyticsPrivacyService } from './AnalyticsPrivacyService';\nexport type {\n AnalyticsPrivacyServiceActions,\n AnalyticsPrivacyServiceEvents,\n AnalyticsPrivacyServiceOptions,\n} from './AnalyticsPrivacyService';\n\nexport { DataDeleteStatus, DataDeleteResponseStatus } from './types';\nexport type {\n IDeleteRegulationResponse,\n IDeleteRegulationStatus,\n IDeleteRegulationStatusResponse,\n} from './types';\n\nexport type { AnalyticsPrivacyControllerState } from './AnalyticsPrivacyController';\n\nexport { analyticsPrivacyControllerSelectors } from './selectors';\n\nexport type { AnalyticsPrivacyControllerMessenger } from './AnalyticsPrivacyController';\n\nexport type {\n AnalyticsPrivacyControllerActions,\n AnalyticsPrivacyControllerEvents,\n AnalyticsPrivacyControllerGetStateAction,\n AnalyticsPrivacyControllerStateChangeEvent,\n DataDeletionTaskCreatedEvent,\n DataRecordingFlagUpdatedEvent,\n} from './AnalyticsPrivacyController';\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analyticsPrivacyControllerSelectors = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Selects the data recorded flag from the controller state.
|
|
6
|
+
*
|
|
7
|
+
* @param state - The controller state
|
|
8
|
+
* @returns Whether data has been recorded since the last deletion request
|
|
9
|
+
*/
|
|
10
|
+
const selectDataRecorded = (state) => state.dataRecorded;
|
|
11
|
+
/**
|
|
12
|
+
* Selects the delete regulation ID from the controller state.
|
|
13
|
+
*
|
|
14
|
+
* @param state - The controller state
|
|
15
|
+
* @returns The regulation ID, or undefined if not set
|
|
16
|
+
*/
|
|
17
|
+
const selectDeleteRegulationId = (state) => state.deleteRegulationId ?? undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Selects the delete regulation creation timestamp from the controller state.
|
|
20
|
+
*
|
|
21
|
+
* @param state - The controller state
|
|
22
|
+
* @returns The deletion timestamp (in milliseconds since epoch), or undefined if not set
|
|
23
|
+
*/
|
|
24
|
+
const selectDeleteRegulationTimestamp = (state) => state.deleteRegulationTimestamp ?? undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Selectors for the AnalyticsPrivacyController state.
|
|
27
|
+
* These can be used with Redux or directly with controller state.
|
|
28
|
+
*/
|
|
29
|
+
exports.analyticsPrivacyControllerSelectors = {
|
|
30
|
+
selectDataRecorded,
|
|
31
|
+
selectDeleteRegulationId,
|
|
32
|
+
selectDeleteRegulationTimestamp,
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=selectors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.cjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,KAAsC,EAAW,EAAE,CAC7E,KAAK,CAAC,YAAY,CAAC;AAErB;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,KAAsC,EAClB,EAAE,CAAC,KAAK,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,+BAA+B,GAAG,CACtC,KAAsC,EAClB,EAAE,CAAC,KAAK,CAAC,yBAAyB,IAAI,SAAS,CAAC;AAEtE;;;GAGG;AACU,QAAA,mCAAmC,GAAG;IACjD,kBAAkB;IAClB,wBAAwB;IACxB,+BAA+B;CAChC,CAAC","sourcesContent":["import type { AnalyticsPrivacyControllerState } from './AnalyticsPrivacyController';\n\n/**\n * Selects the data recorded flag from the controller state.\n *\n * @param state - The controller state\n * @returns Whether data has been recorded since the last deletion request\n */\nconst selectDataRecorded = (state: AnalyticsPrivacyControllerState): boolean =>\n state.dataRecorded;\n\n/**\n * Selects the delete regulation ID from the controller state.\n *\n * @param state - The controller state\n * @returns The regulation ID, or undefined if not set\n */\nconst selectDeleteRegulationId = (\n state: AnalyticsPrivacyControllerState,\n): string | undefined => state.deleteRegulationId ?? undefined;\n\n/**\n * Selects the delete regulation creation timestamp from the controller state.\n *\n * @param state - The controller state\n * @returns The deletion timestamp (in milliseconds since epoch), or undefined if not set\n */\nconst selectDeleteRegulationTimestamp = (\n state: AnalyticsPrivacyControllerState,\n): number | undefined => state.deleteRegulationTimestamp ?? undefined;\n\n/**\n * Selectors for the AnalyticsPrivacyController state.\n * These can be used with Redux or directly with controller state.\n */\nexport const analyticsPrivacyControllerSelectors = {\n selectDataRecorded,\n selectDeleteRegulationId,\n selectDeleteRegulationTimestamp,\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AnalyticsPrivacyControllerState } from "./AnalyticsPrivacyController.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* Selectors for the AnalyticsPrivacyController state.
|
|
4
|
+
* These can be used with Redux or directly with controller state.
|
|
5
|
+
*/
|
|
6
|
+
export declare const analyticsPrivacyControllerSelectors: {
|
|
7
|
+
selectDataRecorded: (state: AnalyticsPrivacyControllerState) => boolean;
|
|
8
|
+
selectDeleteRegulationId: (state: AnalyticsPrivacyControllerState) => string | undefined;
|
|
9
|
+
selectDeleteRegulationTimestamp: (state: AnalyticsPrivacyControllerState) => number | undefined;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=selectors.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.cts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,yCAAqC;AA+BpF;;;GAGG;AACH,eAAO,MAAM,mCAAmC;gCA3Bb,+BAA+B,KAAG,OAAO;sCAUnE,+BAA+B,KACrC,MAAM,GAAG,SAAS;6CASZ,+BAA+B,KACrC,MAAM,GAAG,SAAS;CAUpB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AnalyticsPrivacyControllerState } from "./AnalyticsPrivacyController.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Selectors for the AnalyticsPrivacyController state.
|
|
4
|
+
* These can be used with Redux or directly with controller state.
|
|
5
|
+
*/
|
|
6
|
+
export declare const analyticsPrivacyControllerSelectors: {
|
|
7
|
+
selectDataRecorded: (state: AnalyticsPrivacyControllerState) => boolean;
|
|
8
|
+
selectDeleteRegulationId: (state: AnalyticsPrivacyControllerState) => string | undefined;
|
|
9
|
+
selectDeleteRegulationTimestamp: (state: AnalyticsPrivacyControllerState) => number | undefined;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=selectors.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.mts","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,yCAAqC;AA+BpF;;;GAGG;AACH,eAAO,MAAM,mCAAmC;gCA3Bb,+BAA+B,KAAG,OAAO;sCAUnE,+BAA+B,KACrC,MAAM,GAAG,SAAS;6CASZ,+BAA+B,KACrC,MAAM,GAAG,SAAS;CAUpB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selects the data recorded flag from the controller state.
|
|
3
|
+
*
|
|
4
|
+
* @param state - The controller state
|
|
5
|
+
* @returns Whether data has been recorded since the last deletion request
|
|
6
|
+
*/
|
|
7
|
+
const selectDataRecorded = (state) => state.dataRecorded;
|
|
8
|
+
/**
|
|
9
|
+
* Selects the delete regulation ID from the controller state.
|
|
10
|
+
*
|
|
11
|
+
* @param state - The controller state
|
|
12
|
+
* @returns The regulation ID, or undefined if not set
|
|
13
|
+
*/
|
|
14
|
+
const selectDeleteRegulationId = (state) => state.deleteRegulationId ?? undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Selects the delete regulation creation timestamp from the controller state.
|
|
17
|
+
*
|
|
18
|
+
* @param state - The controller state
|
|
19
|
+
* @returns The deletion timestamp (in milliseconds since epoch), or undefined if not set
|
|
20
|
+
*/
|
|
21
|
+
const selectDeleteRegulationTimestamp = (state) => state.deleteRegulationTimestamp ?? undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Selectors for the AnalyticsPrivacyController state.
|
|
24
|
+
* These can be used with Redux or directly with controller state.
|
|
25
|
+
*/
|
|
26
|
+
export const analyticsPrivacyControllerSelectors = {
|
|
27
|
+
selectDataRecorded,
|
|
28
|
+
selectDeleteRegulationId,
|
|
29
|
+
selectDeleteRegulationTimestamp,
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=selectors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.mjs","sourceRoot":"","sources":["../src/selectors.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,KAAsC,EAAW,EAAE,CAC7E,KAAK,CAAC,YAAY,CAAC;AAErB;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,KAAsC,EAClB,EAAE,CAAC,KAAK,CAAC,kBAAkB,IAAI,SAAS,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,+BAA+B,GAAG,CACtC,KAAsC,EAClB,EAAE,CAAC,KAAK,CAAC,yBAAyB,IAAI,SAAS,CAAC;AAEtE;;;GAGG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,kBAAkB;IAClB,wBAAwB;IACxB,+BAA+B;CAChC,CAAC","sourcesContent":["import type { AnalyticsPrivacyControllerState } from './AnalyticsPrivacyController';\n\n/**\n * Selects the data recorded flag from the controller state.\n *\n * @param state - The controller state\n * @returns Whether data has been recorded since the last deletion request\n */\nconst selectDataRecorded = (state: AnalyticsPrivacyControllerState): boolean =>\n state.dataRecorded;\n\n/**\n * Selects the delete regulation ID from the controller state.\n *\n * @param state - The controller state\n * @returns The regulation ID, or undefined if not set\n */\nconst selectDeleteRegulationId = (\n state: AnalyticsPrivacyControllerState,\n): string | undefined => state.deleteRegulationId ?? undefined;\n\n/**\n * Selects the delete regulation creation timestamp from the controller state.\n *\n * @param state - The controller state\n * @returns The deletion timestamp (in milliseconds since epoch), or undefined if not set\n */\nconst selectDeleteRegulationTimestamp = (\n state: AnalyticsPrivacyControllerState,\n): number | undefined => state.deleteRegulationTimestamp ?? undefined;\n\n/**\n * Selectors for the AnalyticsPrivacyController state.\n * These can be used with Redux or directly with controller state.\n */\nexport const analyticsPrivacyControllerSelectors = {\n selectDataRecorded,\n selectDeleteRegulationId,\n selectDeleteRegulationTimestamp,\n};\n"]}
|
package/dist/types.cjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataDeleteResponseStatus = exports.DataDeleteStatus = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Status values for data deletion requests from Segment API.
|
|
6
|
+
* Enum values match Segment API response values exactly.
|
|
7
|
+
*/
|
|
8
|
+
var DataDeleteStatus;
|
|
9
|
+
(function (DataDeleteStatus) {
|
|
10
|
+
DataDeleteStatus["Failed"] = "FAILED";
|
|
11
|
+
DataDeleteStatus["Finished"] = "FINISHED";
|
|
12
|
+
DataDeleteStatus["Initialized"] = "INITIALIZED";
|
|
13
|
+
DataDeleteStatus["Invalid"] = "INVALID";
|
|
14
|
+
DataDeleteStatus["NotSupported"] = "NOT_SUPPORTED";
|
|
15
|
+
DataDeleteStatus["PartialSuccess"] = "PARTIAL_SUCCESS";
|
|
16
|
+
DataDeleteStatus["Running"] = "RUNNING";
|
|
17
|
+
DataDeleteStatus["Unknown"] = "UNKNOWN";
|
|
18
|
+
})(DataDeleteStatus || (exports.DataDeleteStatus = DataDeleteStatus = {}));
|
|
19
|
+
/**
|
|
20
|
+
* Response status for deletion regulation operations.
|
|
21
|
+
*/
|
|
22
|
+
var DataDeleteResponseStatus;
|
|
23
|
+
(function (DataDeleteResponseStatus) {
|
|
24
|
+
DataDeleteResponseStatus["Success"] = "ok";
|
|
25
|
+
DataDeleteResponseStatus["Failure"] = "error";
|
|
26
|
+
})(DataDeleteResponseStatus || (exports.DataDeleteResponseStatus = DataDeleteResponseStatus = {}));
|
|
27
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,IAAY,gBASX;AATD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,yCAAqB,CAAA;IACrB,+CAA2B,CAAA;IAC3B,uCAAmB,CAAA;IACnB,kDAA8B,CAAA;IAC9B,sDAAkC,CAAA;IAClC,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;AACrB,CAAC,EATW,gBAAgB,gCAAhB,gBAAgB,QAS3B;AAED;;GAEG;AACH,IAAY,wBAGX;AAHD,WAAY,wBAAwB;IAClC,0CAAc,CAAA;IACd,6CAAiB,CAAA;AACnB,CAAC,EAHW,wBAAwB,wCAAxB,wBAAwB,QAGnC","sourcesContent":["/**\n * Status values for data deletion requests from Segment API.\n * Enum values match Segment API response values exactly.\n */\nexport enum DataDeleteStatus {\n Failed = 'FAILED',\n Finished = 'FINISHED',\n Initialized = 'INITIALIZED',\n Invalid = 'INVALID',\n NotSupported = 'NOT_SUPPORTED',\n PartialSuccess = 'PARTIAL_SUCCESS',\n Running = 'RUNNING',\n Unknown = 'UNKNOWN',\n}\n\n/**\n * Response status for deletion regulation operations.\n */\nexport enum DataDeleteResponseStatus {\n Success = 'ok',\n Failure = 'error',\n}\n\n/**\n * Response from creating a data deletion task.\n */\nexport type IDeleteRegulationResponse = {\n status: DataDeleteResponseStatus;\n regulateId?: string; // Using exact API field name from Segment API response\n error?: string;\n};\n\n/**\n * Status information for a data deletion request.\n */\nexport type IDeleteRegulationStatus = {\n deletionRequestTimestamp?: number;\n hasCollectedDataSinceDeletionRequest: boolean;\n dataDeletionRequestStatus: DataDeleteStatus;\n};\n\n/**\n * Response from checking data deletion status.\n */\nexport type IDeleteRegulationStatusResponse = {\n status: DataDeleteResponseStatus;\n dataDeleteStatus: DataDeleteStatus;\n};\n\n/**\n * Timestamp for deletion regulation creation (milliseconds since epoch).\n */\nexport type DataDeleteTimestamp = number | undefined;\n\n/**\n * Regulation ID from Segment API.\n */\nexport type DataDeleteRegulationId = string | undefined;\n"]}
|