@amplitude/analytics-core 2.24.1 → 2.25.0

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.
@@ -0,0 +1,489 @@
1
+ import { __awaiter, __generator, __read } from "tslib";
2
+ import { getGlobalScope } from '../global-scope';
3
+ var MAX_PERSISTENT_STORAGE_EVENTS_COUNT = 10;
4
+ // Database configuration
5
+ var DB_VERSION = 1;
6
+ // Table names for different diagnostics types
7
+ export var TABLE_NAMES = {
8
+ TAGS: 'tags',
9
+ COUNTERS: 'counters',
10
+ HISTOGRAMS: 'histograms',
11
+ EVENTS: 'events',
12
+ INTERNAL: 'internal', // New table for internal storage like flush timestamps
13
+ };
14
+ // Keys for internal storage table
15
+ export var INTERNAL_KEYS = {
16
+ LAST_FLUSH_TIMESTAMP: 'last_flush_timestamp',
17
+ };
18
+ /**
19
+ * Purpose-specific IndexedDB storage for diagnostics data
20
+ * Provides optimized methods for each type of diagnostics data
21
+ */
22
+ var DiagnosticsStorage = /** @class */ (function () {
23
+ function DiagnosticsStorage(apiKey, logger) {
24
+ this.dbPromise = null;
25
+ this.logger = logger;
26
+ this.dbName = "AMP_diagnostics_".concat(apiKey.substring(0, 10));
27
+ }
28
+ /**
29
+ * Check if IndexedDB is supported in the current environment
30
+ * @returns true if IndexedDB is available, false otherwise
31
+ */
32
+ DiagnosticsStorage.isSupported = function () {
33
+ var _a;
34
+ return ((_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.indexedDB) !== undefined;
35
+ };
36
+ DiagnosticsStorage.prototype.getDB = function () {
37
+ return __awaiter(this, void 0, void 0, function () {
38
+ return __generator(this, function (_a) {
39
+ if (!this.dbPromise) {
40
+ this.dbPromise = this.openDB();
41
+ }
42
+ return [2 /*return*/, this.dbPromise];
43
+ });
44
+ });
45
+ };
46
+ DiagnosticsStorage.prototype.openDB = function () {
47
+ var _this = this;
48
+ return new Promise(function (resolve, reject) {
49
+ var request = indexedDB.open(_this.dbName, DB_VERSION);
50
+ request.onerror = function () {
51
+ // Clear dbPromise when it rejects for the first time
52
+ _this.dbPromise = null;
53
+ reject(new Error('Failed to open IndexedDB'));
54
+ };
55
+ request.onsuccess = function () {
56
+ var db = request.result;
57
+ // Clear dbPromise when connection was on but went off later
58
+ db.onclose = function () {
59
+ _this.dbPromise = null;
60
+ _this.logger.debug('DiagnosticsStorage: DB connection closed.');
61
+ };
62
+ db.onerror = function (event) {
63
+ _this.logger.debug('DiagnosticsStorage: A global database error occurred.', event);
64
+ db.close();
65
+ };
66
+ resolve(db);
67
+ };
68
+ request.onupgradeneeded = function (event) {
69
+ var db = event.target.result;
70
+ _this.createTables(db);
71
+ };
72
+ });
73
+ };
74
+ DiagnosticsStorage.prototype.createTables = function (db) {
75
+ // Create tags table
76
+ if (!db.objectStoreNames.contains(TABLE_NAMES.TAGS)) {
77
+ db.createObjectStore(TABLE_NAMES.TAGS, { keyPath: 'key' });
78
+ }
79
+ // Create counters table
80
+ if (!db.objectStoreNames.contains(TABLE_NAMES.COUNTERS)) {
81
+ db.createObjectStore(TABLE_NAMES.COUNTERS, { keyPath: 'key' });
82
+ }
83
+ // Create histograms table for storing histogram stats (count, min, max, sum)
84
+ if (!db.objectStoreNames.contains(TABLE_NAMES.HISTOGRAMS)) {
85
+ db.createObjectStore(TABLE_NAMES.HISTOGRAMS, {
86
+ keyPath: 'key',
87
+ });
88
+ }
89
+ // Create events table
90
+ if (!db.objectStoreNames.contains(TABLE_NAMES.EVENTS)) {
91
+ var eventsStore = db.createObjectStore(TABLE_NAMES.EVENTS, {
92
+ keyPath: 'id',
93
+ autoIncrement: true,
94
+ });
95
+ // Create index on time for chronological queries
96
+ eventsStore.createIndex('time_idx', 'time', { unique: false });
97
+ }
98
+ // Create internal table for storing internal data like flush timestamps
99
+ if (!db.objectStoreNames.contains(TABLE_NAMES.INTERNAL)) {
100
+ db.createObjectStore(TABLE_NAMES.INTERNAL, { keyPath: 'key' });
101
+ }
102
+ };
103
+ DiagnosticsStorage.prototype.setTags = function (tags) {
104
+ return __awaiter(this, void 0, void 0, function () {
105
+ var db, transaction_1, store_1, error_1;
106
+ var _this = this;
107
+ return __generator(this, function (_a) {
108
+ switch (_a.label) {
109
+ case 0:
110
+ _a.trys.push([0, 2, , 3]);
111
+ if (Object.entries(tags).length === 0) {
112
+ return [2 /*return*/];
113
+ }
114
+ return [4 /*yield*/, this.getDB()];
115
+ case 1:
116
+ db = _a.sent();
117
+ transaction_1 = db.transaction([TABLE_NAMES.TAGS], 'readwrite');
118
+ store_1 = transaction_1.objectStore(TABLE_NAMES.TAGS);
119
+ return [2 /*return*/, new Promise(function (resolve) {
120
+ var entries = Object.entries(tags);
121
+ transaction_1.oncomplete = function () {
122
+ resolve();
123
+ };
124
+ transaction_1.onabort = function (event) {
125
+ _this.logger.debug('DiagnosticsStorage: Failed to set tags', event);
126
+ resolve();
127
+ };
128
+ entries.forEach(function (_a) {
129
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
130
+ var putRequest = store_1.put({ key: key, value: value });
131
+ putRequest.onerror = function (event) {
132
+ _this.logger.debug('DiagnosticsStorage: Failed to set tag', key, value, event);
133
+ };
134
+ });
135
+ })];
136
+ case 2:
137
+ error_1 = _a.sent();
138
+ this.logger.debug('DiagnosticsStorage: Failed to set tags', error_1);
139
+ return [3 /*break*/, 3];
140
+ case 3: return [2 /*return*/];
141
+ }
142
+ });
143
+ });
144
+ };
145
+ DiagnosticsStorage.prototype.incrementCounters = function (counters) {
146
+ return __awaiter(this, void 0, void 0, function () {
147
+ var db, transaction_2, store_2, error_2;
148
+ var _this = this;
149
+ return __generator(this, function (_a) {
150
+ switch (_a.label) {
151
+ case 0:
152
+ _a.trys.push([0, 2, , 3]);
153
+ if (Object.entries(counters).length === 0) {
154
+ return [2 /*return*/];
155
+ }
156
+ return [4 /*yield*/, this.getDB()];
157
+ case 1:
158
+ db = _a.sent();
159
+ transaction_2 = db.transaction([TABLE_NAMES.COUNTERS], 'readwrite');
160
+ store_2 = transaction_2.objectStore(TABLE_NAMES.COUNTERS);
161
+ return [2 /*return*/, new Promise(function (resolve) {
162
+ var entries = Object.entries(counters);
163
+ transaction_2.oncomplete = function () {
164
+ resolve();
165
+ };
166
+ transaction_2.onabort = function (event) {
167
+ _this.logger.debug('DiagnosticsStorage: Failed to increment counters', event);
168
+ resolve();
169
+ };
170
+ // Read existing values and update them
171
+ entries.forEach(function (_a) {
172
+ var _b = __read(_a, 2), key = _b[0], incrementValue = _b[1];
173
+ var getRequest = store_2.get(key);
174
+ getRequest.onsuccess = function () {
175
+ var existingRecord = getRequest.result;
176
+ /* istanbul ignore next */
177
+ var existingValue = existingRecord ? existingRecord.value : 0;
178
+ var putRequest = store_2.put({ key: key, value: existingValue + incrementValue });
179
+ putRequest.onerror = function (event) {
180
+ _this.logger.debug('DiagnosticsStorage: Failed to update counter', key, event);
181
+ };
182
+ };
183
+ getRequest.onerror = function (event) {
184
+ _this.logger.debug('DiagnosticsStorage: Failed to read existing counter', key, event);
185
+ };
186
+ });
187
+ })];
188
+ case 2:
189
+ error_2 = _a.sent();
190
+ this.logger.debug('DiagnosticsStorage: Failed to increment counters', error_2);
191
+ return [3 /*break*/, 3];
192
+ case 3: return [2 /*return*/];
193
+ }
194
+ });
195
+ });
196
+ };
197
+ DiagnosticsStorage.prototype.setHistogramStats = function (histogramStats) {
198
+ return __awaiter(this, void 0, void 0, function () {
199
+ var db, transaction_3, store_3, error_3;
200
+ var _this = this;
201
+ return __generator(this, function (_a) {
202
+ switch (_a.label) {
203
+ case 0:
204
+ _a.trys.push([0, 2, , 3]);
205
+ if (Object.entries(histogramStats).length === 0) {
206
+ return [2 /*return*/];
207
+ }
208
+ return [4 /*yield*/, this.getDB()];
209
+ case 1:
210
+ db = _a.sent();
211
+ transaction_3 = db.transaction([TABLE_NAMES.HISTOGRAMS], 'readwrite');
212
+ store_3 = transaction_3.objectStore(TABLE_NAMES.HISTOGRAMS);
213
+ return [2 /*return*/, new Promise(function (resolve) {
214
+ var entries = Object.entries(histogramStats);
215
+ transaction_3.oncomplete = function () {
216
+ resolve();
217
+ };
218
+ transaction_3.onabort = function (event) {
219
+ _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', event);
220
+ resolve();
221
+ };
222
+ // Read existing values and update them
223
+ entries.forEach(function (_a) {
224
+ var _b = __read(_a, 2), key = _b[0], newStats = _b[1];
225
+ var getRequest = store_3.get(key);
226
+ getRequest.onsuccess = function () {
227
+ var existingRecord = getRequest.result;
228
+ var updatedStats;
229
+ /* istanbul ignore next */
230
+ if (existingRecord) {
231
+ // Accumulate with existing stats
232
+ updatedStats = {
233
+ key: key,
234
+ count: existingRecord.count + newStats.count,
235
+ min: Math.min(existingRecord.min, newStats.min),
236
+ max: Math.max(existingRecord.max, newStats.max),
237
+ sum: existingRecord.sum + newStats.sum,
238
+ };
239
+ }
240
+ else {
241
+ // Create new stats
242
+ updatedStats = {
243
+ key: key,
244
+ count: newStats.count,
245
+ min: newStats.min,
246
+ max: newStats.max,
247
+ sum: newStats.sum,
248
+ };
249
+ }
250
+ var putRequest = store_3.put(updatedStats);
251
+ putRequest.onerror = function (event) {
252
+ _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', key, event);
253
+ };
254
+ };
255
+ getRequest.onerror = function (event) {
256
+ _this.logger.debug('DiagnosticsStorage: Failed to read existing histogram stats', key, event);
257
+ };
258
+ });
259
+ })];
260
+ case 2:
261
+ error_3 = _a.sent();
262
+ this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', error_3);
263
+ return [3 /*break*/, 3];
264
+ case 3: return [2 /*return*/];
265
+ }
266
+ });
267
+ });
268
+ };
269
+ DiagnosticsStorage.prototype.addEventRecords = function (events) {
270
+ return __awaiter(this, void 0, void 0, function () {
271
+ var db, transaction_4, store_4, error_4;
272
+ var _this = this;
273
+ return __generator(this, function (_a) {
274
+ switch (_a.label) {
275
+ case 0:
276
+ _a.trys.push([0, 2, , 3]);
277
+ if (events.length === 0) {
278
+ return [2 /*return*/];
279
+ }
280
+ return [4 /*yield*/, this.getDB()];
281
+ case 1:
282
+ db = _a.sent();
283
+ transaction_4 = db.transaction([TABLE_NAMES.EVENTS], 'readwrite');
284
+ store_4 = transaction_4.objectStore(TABLE_NAMES.EVENTS);
285
+ return [2 /*return*/, new Promise(function (resolve) {
286
+ transaction_4.oncomplete = function () {
287
+ resolve();
288
+ };
289
+ /* istanbul ignore next */
290
+ transaction_4.onabort = function (event) {
291
+ _this.logger.debug('DiagnosticsStorage: Failed to add event records', event);
292
+ resolve();
293
+ };
294
+ // First, check how many events are currently stored
295
+ var countRequest = store_4.count();
296
+ countRequest.onsuccess = function () {
297
+ var currentCount = countRequest.result;
298
+ // Calculate how many events we can add
299
+ var availableSlots = Math.max(0, MAX_PERSISTENT_STORAGE_EVENTS_COUNT - currentCount);
300
+ if (availableSlots < events.length) {
301
+ _this.logger.debug("DiagnosticsStorage: Only added ".concat(availableSlots, " of ").concat(events.length, " events due to storage limit"));
302
+ }
303
+ // Only add events up to the available slots (take the least recent ones)
304
+ events.slice(0, availableSlots).forEach(function (event) {
305
+ var request = store_4.add(event);
306
+ request.onerror = function (event) {
307
+ _this.logger.debug('DiagnosticsStorage: Failed to add event record', event);
308
+ };
309
+ });
310
+ };
311
+ countRequest.onerror = function (event) {
312
+ _this.logger.debug('DiagnosticsStorage: Failed to count existing events', event);
313
+ };
314
+ })];
315
+ case 2:
316
+ error_4 = _a.sent();
317
+ this.logger.debug('DiagnosticsStorage: Failed to add event records', error_4);
318
+ return [3 /*break*/, 3];
319
+ case 3: return [2 /*return*/];
320
+ }
321
+ });
322
+ });
323
+ };
324
+ DiagnosticsStorage.prototype.setInternal = function (key, value) {
325
+ return __awaiter(this, void 0, void 0, function () {
326
+ var db, transaction_5, store_5, error_5;
327
+ return __generator(this, function (_a) {
328
+ switch (_a.label) {
329
+ case 0:
330
+ _a.trys.push([0, 2, , 3]);
331
+ return [4 /*yield*/, this.getDB()];
332
+ case 1:
333
+ db = _a.sent();
334
+ transaction_5 = db.transaction([TABLE_NAMES.INTERNAL], 'readwrite');
335
+ store_5 = transaction_5.objectStore(TABLE_NAMES.INTERNAL);
336
+ return [2 /*return*/, new Promise(function (resolve, reject) {
337
+ /* istanbul ignore next */
338
+ transaction_5.onabort = function () { return reject(new Error('Failed to set internal value')); };
339
+ var request = store_5.put({ key: key, value: value });
340
+ request.onsuccess = function () { return resolve(); };
341
+ /* istanbul ignore next */
342
+ request.onerror = function () { return reject(new Error('Failed to set internal value')); };
343
+ })];
344
+ case 2:
345
+ error_5 = _a.sent();
346
+ /* istanbul ignore next */
347
+ this.logger.debug('DiagnosticsStorage: Failed to set internal value', error_5);
348
+ return [3 /*break*/, 3];
349
+ case 3: return [2 /*return*/];
350
+ }
351
+ });
352
+ });
353
+ };
354
+ DiagnosticsStorage.prototype.getInternal = function (key) {
355
+ return __awaiter(this, void 0, void 0, function () {
356
+ var db, transaction_6, store_6, error_6;
357
+ return __generator(this, function (_a) {
358
+ switch (_a.label) {
359
+ case 0:
360
+ _a.trys.push([0, 2, , 3]);
361
+ return [4 /*yield*/, this.getDB()];
362
+ case 1:
363
+ db = _a.sent();
364
+ transaction_6 = db.transaction([TABLE_NAMES.INTERNAL], 'readonly');
365
+ store_6 = transaction_6.objectStore(TABLE_NAMES.INTERNAL);
366
+ return [2 /*return*/, new Promise(function (resolve, reject) {
367
+ /* istanbul ignore next */
368
+ transaction_6.onabort = function () { return reject(new Error('Failed to get internal value')); };
369
+ var request = store_6.get(key);
370
+ request.onsuccess = function () { return resolve(request.result); };
371
+ /* istanbul ignore next */
372
+ request.onerror = function () { return reject(new Error('Failed to get internal value')); };
373
+ })];
374
+ case 2:
375
+ error_6 = _a.sent();
376
+ this.logger.debug('DiagnosticsStorage: Failed to get internal value', error_6);
377
+ return [2 /*return*/, undefined];
378
+ case 3: return [2 /*return*/];
379
+ }
380
+ });
381
+ });
382
+ };
383
+ DiagnosticsStorage.prototype.getLastFlushTimestamp = function () {
384
+ return __awaiter(this, void 0, void 0, function () {
385
+ var record, error_7;
386
+ return __generator(this, function (_a) {
387
+ switch (_a.label) {
388
+ case 0:
389
+ _a.trys.push([0, 2, , 3]);
390
+ return [4 /*yield*/, this.getInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP)];
391
+ case 1:
392
+ record = _a.sent();
393
+ return [2 /*return*/, record ? parseInt(record.value, 10) : undefined];
394
+ case 2:
395
+ error_7 = _a.sent();
396
+ /* istanbul ignore next */
397
+ this.logger.debug('DiagnosticsStorage: Failed to get last flush timestamp', error_7);
398
+ /* istanbul ignore next */
399
+ return [2 /*return*/, undefined];
400
+ case 3: return [2 /*return*/];
401
+ }
402
+ });
403
+ });
404
+ };
405
+ DiagnosticsStorage.prototype.setLastFlushTimestamp = function (timestamp) {
406
+ return __awaiter(this, void 0, void 0, function () {
407
+ var error_8;
408
+ return __generator(this, function (_a) {
409
+ switch (_a.label) {
410
+ case 0:
411
+ _a.trys.push([0, 2, , 3]);
412
+ return [4 /*yield*/, this.setInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP, timestamp.toString())];
413
+ case 1:
414
+ _a.sent();
415
+ return [3 /*break*/, 3];
416
+ case 2:
417
+ error_8 = _a.sent();
418
+ /* istanbul ignore next */
419
+ this.logger.debug('DiagnosticsStorage: Failed to set last flush timestamp', error_8);
420
+ return [3 /*break*/, 3];
421
+ case 3: return [2 /*return*/];
422
+ }
423
+ });
424
+ });
425
+ };
426
+ /* istanbul ignore next */
427
+ DiagnosticsStorage.prototype.clearTable = function (transaction, tableName) {
428
+ return new Promise(function (resolve, reject) {
429
+ var store = transaction.objectStore(tableName);
430
+ var request = store.clear();
431
+ request.onsuccess = function () { return resolve(); };
432
+ request.onerror = function () { return reject(new Error("Failed to clear table ".concat(tableName))); };
433
+ });
434
+ };
435
+ /* istanbul ignore next */
436
+ DiagnosticsStorage.prototype.getAllAndClear = function () {
437
+ return __awaiter(this, void 0, void 0, function () {
438
+ var db, transaction, _a, tags, counters, histogramStats, events, error_9;
439
+ return __generator(this, function (_b) {
440
+ switch (_b.label) {
441
+ case 0:
442
+ _b.trys.push([0, 4, , 5]);
443
+ return [4 /*yield*/, this.getDB()];
444
+ case 1:
445
+ db = _b.sent();
446
+ transaction = db.transaction([TABLE_NAMES.TAGS, TABLE_NAMES.COUNTERS, TABLE_NAMES.HISTOGRAMS, TABLE_NAMES.EVENTS], 'readwrite');
447
+ return [4 /*yield*/, Promise.all([
448
+ this.getAllFromStore(transaction, TABLE_NAMES.TAGS),
449
+ this.getAllFromStore(transaction, TABLE_NAMES.COUNTERS),
450
+ this.getAllFromStore(transaction, TABLE_NAMES.HISTOGRAMS),
451
+ this.getAllFromStore(transaction, TABLE_NAMES.EVENTS),
452
+ ])];
453
+ case 2:
454
+ _a = __read.apply(void 0, [_b.sent(), 4]), tags = _a[0], counters = _a[1], histogramStats = _a[2], events = _a[3];
455
+ // Clear all data in the same transaction
456
+ return [4 /*yield*/, Promise.all([
457
+ this.clearTable(transaction, TABLE_NAMES.COUNTERS),
458
+ this.clearTable(transaction, TABLE_NAMES.HISTOGRAMS),
459
+ this.clearTable(transaction, TABLE_NAMES.EVENTS),
460
+ ])];
461
+ case 3:
462
+ // Clear all data in the same transaction
463
+ _b.sent();
464
+ return [2 /*return*/, { tags: tags, counters: counters, histogramStats: histogramStats, events: events }];
465
+ case 4:
466
+ error_9 = _b.sent();
467
+ this.logger.debug('DiagnosticsStorage: Failed to get all and clear data', error_9);
468
+ return [2 /*return*/, { tags: [], counters: [], histogramStats: [], events: [] }];
469
+ case 5: return [2 /*return*/];
470
+ }
471
+ });
472
+ });
473
+ };
474
+ /**
475
+ * Helper method to get all records from a store within a transaction
476
+ */
477
+ /* istanbul ignore next */
478
+ DiagnosticsStorage.prototype.getAllFromStore = function (transaction, tableName) {
479
+ return new Promise(function (resolve, reject) {
480
+ var store = transaction.objectStore(tableName);
481
+ var request = store.getAll();
482
+ request.onsuccess = function () { return resolve(request.result); };
483
+ request.onerror = function () { return reject(new Error("Failed to get all from ".concat(tableName))); };
484
+ });
485
+ };
486
+ return DiagnosticsStorage;
487
+ }());
488
+ export { DiagnosticsStorage };
489
+ //# sourceMappingURL=diagnostics-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-storage.js","sourceRoot":"","sources":["../../../src/diagnostics/diagnostics-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '../global-scope';\nimport { ILogger } from '../logger';\nimport { HistogramStats } from './diagnostics-client';\n\nconst MAX_PERSISTENT_STORAGE_EVENTS_COUNT = 10;\n\n// Database configuration\nconst DB_VERSION = 1;\n\n// Table names for different diagnostics types\nexport const TABLE_NAMES = {\n TAGS: 'tags',\n COUNTERS: 'counters',\n HISTOGRAMS: 'histograms',\n EVENTS: 'events',\n INTERNAL: 'internal', // New table for internal storage like flush timestamps\n} as const;\n\n// Keys for internal storage table\nexport const INTERNAL_KEYS = {\n LAST_FLUSH_TIMESTAMP: 'last_flush_timestamp',\n} as const;\n\n// Record interfaces for each table\nexport interface TagRecord {\n key: string;\n value: string;\n}\n\nexport interface CounterRecord {\n key: string;\n value: number;\n}\n\nexport interface HistogramRecord {\n key: string;\n count: number;\n min: number;\n max: number;\n sum: number;\n}\n\nexport interface EventRecord {\n id?: number; // Auto-increment primary key\n event_name: string;\n time: number;\n event_properties: Record<string, any>;\n}\n\nexport interface InternalRecord {\n key: string;\n value: string;\n}\n\nexport interface IDiagnosticsStorage {\n /**\n * Set multiple tags in a single transaction (batch operation)\n * Promise never rejects - errors are logged and operation continues gracefully\n */\n setTags(tags: Record<string, string>): Promise<void>;\n /**\n * Increment multiple counters in a single transaction (batch operation)\n * Uses read-modify-write pattern to accumulate with existing values\n * Promise never rejects - errors are logged and operation continues gracefully\n */\n incrementCounters(counters: Record<string, number>): Promise<void>;\n /**\n * Set multiple histogram stats in a single transaction (batch operation)\n * Uses read-modify-write pattern to accumulate count/sum and update min/max with existing values\n * Promise never rejects - errors are logged and operation continues gracefully\n */\n setHistogramStats(\n histogramStats: Record<string, { count: number; min: number; max: number; sum: number }>,\n ): Promise<void>;\n /**\n * Add multiple event records in a single transaction (batch operation)\n * Promise never rejects - errors are logged and operation continues gracefully\n */\n addEventRecords(\n events: Array<{ event_name: string; time: number; event_properties: Record<string, any> }>,\n ): Promise<void>;\n\n setLastFlushTimestamp(timestamp: number): Promise<void>;\n\n getLastFlushTimestamp(): Promise<number | undefined>;\n\n /**\n * Get all data except internal data from storage and clear it\n */\n getAllAndClear(): Promise<{\n tags: TagRecord[];\n counters: CounterRecord[];\n histogramStats: HistogramRecord[];\n events: EventRecord[];\n }>;\n}\n\n/**\n * Purpose-specific IndexedDB storage for diagnostics data\n * Provides optimized methods for each type of diagnostics data\n */\nexport class DiagnosticsStorage implements IDiagnosticsStorage {\n dbPromise: Promise<IDBDatabase> | null = null;\n dbName: string;\n logger: ILogger;\n\n constructor(apiKey: string, logger: ILogger) {\n this.logger = logger;\n this.dbName = `AMP_diagnostics_${apiKey.substring(0, 10)}`;\n }\n\n /**\n * Check if IndexedDB is supported in the current environment\n * @returns true if IndexedDB is available, false otherwise\n */\n static isSupported(): boolean {\n return getGlobalScope()?.indexedDB !== undefined;\n }\n\n async getDB(): Promise<IDBDatabase> {\n if (!this.dbPromise) {\n this.dbPromise = this.openDB();\n }\n return this.dbPromise;\n }\n\n openDB(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, DB_VERSION);\n\n request.onerror = () => {\n // Clear dbPromise when it rejects for the first time\n this.dbPromise = null;\n reject(new Error('Failed to open IndexedDB'));\n };\n\n request.onsuccess = () => {\n const db = request.result;\n // Clear dbPromise when connection was on but went off later\n db.onclose = () => {\n this.dbPromise = null;\n this.logger.debug('DiagnosticsStorage: DB connection closed.');\n };\n\n db.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: A global database error occurred.', event);\n db.close();\n };\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n this.createTables(db);\n };\n });\n }\n\n createTables(db: IDBDatabase): void {\n // Create tags table\n if (!db.objectStoreNames.contains(TABLE_NAMES.TAGS)) {\n db.createObjectStore(TABLE_NAMES.TAGS, { keyPath: 'key' });\n }\n\n // Create counters table\n if (!db.objectStoreNames.contains(TABLE_NAMES.COUNTERS)) {\n db.createObjectStore(TABLE_NAMES.COUNTERS, { keyPath: 'key' });\n }\n\n // Create histograms table for storing histogram stats (count, min, max, sum)\n if (!db.objectStoreNames.contains(TABLE_NAMES.HISTOGRAMS)) {\n db.createObjectStore(TABLE_NAMES.HISTOGRAMS, {\n keyPath: 'key',\n });\n }\n\n // Create events table\n if (!db.objectStoreNames.contains(TABLE_NAMES.EVENTS)) {\n const eventsStore = db.createObjectStore(TABLE_NAMES.EVENTS, {\n keyPath: 'id',\n autoIncrement: true,\n });\n\n // Create index on time for chronological queries\n eventsStore.createIndex('time_idx', 'time', { unique: false });\n }\n\n // Create internal table for storing internal data like flush timestamps\n if (!db.objectStoreNames.contains(TABLE_NAMES.INTERNAL)) {\n db.createObjectStore(TABLE_NAMES.INTERNAL, { keyPath: 'key' });\n }\n }\n\n async setTags(tags: Record<string, string>): Promise<void> {\n try {\n if (Object.entries(tags).length === 0) {\n return;\n }\n\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.TAGS], 'readwrite');\n const store = transaction.objectStore(TABLE_NAMES.TAGS);\n\n return new Promise((resolve) => {\n const entries = Object.entries(tags);\n\n transaction.oncomplete = () => {\n resolve();\n };\n\n transaction.onabort = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to set tags', event);\n resolve();\n };\n\n entries.forEach(([key, value]) => {\n const putRequest = store.put({ key, value });\n\n putRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to set tag', key, value, event);\n };\n });\n });\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to set tags', error);\n }\n }\n\n async incrementCounters(counters: Record<string, number>): Promise<void> {\n try {\n if (Object.entries(counters).length === 0) {\n return;\n }\n\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.COUNTERS], 'readwrite');\n const store = transaction.objectStore(TABLE_NAMES.COUNTERS);\n\n return new Promise((resolve) => {\n const entries = Object.entries(counters);\n\n transaction.oncomplete = () => {\n resolve();\n };\n\n transaction.onabort = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to increment counters', event);\n resolve();\n };\n\n // Read existing values and update them\n entries.forEach(([key, incrementValue]) => {\n const getRequest = store.get(key);\n\n getRequest.onsuccess = () => {\n const existingRecord = getRequest.result as CounterRecord | undefined;\n /* istanbul ignore next */\n const existingValue = existingRecord ? existingRecord.value : 0;\n const putRequest = store.put({ key, value: existingValue + incrementValue });\n\n putRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to update counter', key, event);\n };\n };\n\n getRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to read existing counter', key, event);\n };\n });\n });\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to increment counters', error);\n }\n }\n\n async setHistogramStats(histogramStats: Record<string, HistogramStats>): Promise<void> {\n try {\n if (Object.entries(histogramStats).length === 0) {\n return;\n }\n\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.HISTOGRAMS], 'readwrite');\n const store = transaction.objectStore(TABLE_NAMES.HISTOGRAMS);\n\n return new Promise((resolve) => {\n const entries = Object.entries(histogramStats);\n\n transaction.oncomplete = () => {\n resolve();\n };\n\n transaction.onabort = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', event);\n resolve();\n };\n\n // Read existing values and update them\n entries.forEach(([key, newStats]) => {\n const getRequest = store.get(key);\n\n getRequest.onsuccess = () => {\n const existingRecord = getRequest.result as HistogramRecord | undefined;\n let updatedStats: HistogramRecord;\n\n /* istanbul ignore next */\n if (existingRecord) {\n // Accumulate with existing stats\n updatedStats = {\n key,\n count: existingRecord.count + newStats.count,\n min: Math.min(existingRecord.min, newStats.min),\n max: Math.max(existingRecord.max, newStats.max),\n sum: existingRecord.sum + newStats.sum,\n };\n } else {\n // Create new stats\n updatedStats = {\n key,\n count: newStats.count,\n min: newStats.min,\n max: newStats.max,\n sum: newStats.sum,\n };\n }\n\n const putRequest = store.put(updatedStats);\n\n putRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', key, event);\n };\n };\n\n getRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to read existing histogram stats', key, event);\n };\n });\n });\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', error);\n }\n }\n\n async addEventRecords(\n events: Array<{ event_name: string; time: number; event_properties: Record<string, any> }>,\n ): Promise<void> {\n try {\n if (events.length === 0) {\n return;\n }\n\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.EVENTS], 'readwrite');\n const store = transaction.objectStore(TABLE_NAMES.EVENTS);\n\n return new Promise((resolve) => {\n transaction.oncomplete = () => {\n resolve();\n };\n\n /* istanbul ignore next */\n transaction.onabort = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to add event records', event);\n resolve();\n };\n\n // First, check how many events are currently stored\n const countRequest = store.count();\n\n countRequest.onsuccess = () => {\n const currentCount = countRequest.result;\n\n // Calculate how many events we can add\n const availableSlots = Math.max(0, MAX_PERSISTENT_STORAGE_EVENTS_COUNT - currentCount);\n\n if (availableSlots < events.length) {\n this.logger.debug(\n `DiagnosticsStorage: Only added ${availableSlots} of ${events.length} events due to storage limit`,\n );\n }\n\n // Only add events up to the available slots (take the least recent ones)\n events.slice(0, availableSlots).forEach((event) => {\n const request = store.add(event);\n\n request.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to add event record', event);\n };\n });\n };\n\n countRequest.onerror = (event) => {\n this.logger.debug('DiagnosticsStorage: Failed to count existing events', event);\n };\n });\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to add event records', error);\n }\n }\n\n async setInternal(key: string, value: string): Promise<void> {\n try {\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.INTERNAL], 'readwrite');\n const store = transaction.objectStore(TABLE_NAMES.INTERNAL);\n\n return new Promise((resolve, reject) => {\n /* istanbul ignore next */\n transaction.onabort = () => reject(new Error('Failed to set internal value'));\n\n const request = store.put({ key, value });\n\n request.onsuccess = () => resolve();\n\n /* istanbul ignore next */\n request.onerror = () => reject(new Error('Failed to set internal value'));\n });\n } catch (error) {\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set internal value', error);\n }\n }\n\n async getInternal(key: string): Promise<InternalRecord | undefined> {\n try {\n const db = await this.getDB();\n const transaction = db.transaction([TABLE_NAMES.INTERNAL], 'readonly');\n const store = transaction.objectStore(TABLE_NAMES.INTERNAL);\n\n return new Promise((resolve, reject) => {\n /* istanbul ignore next */\n transaction.onabort = () => reject(new Error('Failed to get internal value'));\n\n const request = store.get(key);\n\n request.onsuccess = () => resolve(request.result as InternalRecord | undefined);\n\n /* istanbul ignore next */\n request.onerror = () => reject(new Error('Failed to get internal value'));\n });\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to get internal value', error);\n return undefined;\n }\n }\n\n async getLastFlushTimestamp(): Promise<number | undefined> {\n try {\n const record = await this.getInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP);\n return record ? parseInt(record.value, 10) : undefined;\n } catch (error) {\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to get last flush timestamp', error);\n /* istanbul ignore next */\n return undefined;\n }\n }\n\n async setLastFlushTimestamp(timestamp: number): Promise<void> {\n try {\n await this.setInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP, timestamp.toString());\n } catch (error) {\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set last flush timestamp', error);\n }\n }\n\n /* istanbul ignore next */\n clearTable(transaction: IDBTransaction, tableName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const store = transaction.objectStore(tableName);\n const request = store.clear();\n\n request.onsuccess = () => resolve();\n request.onerror = () => reject(new Error(`Failed to clear table ${tableName}`));\n });\n }\n\n /* istanbul ignore next */\n async getAllAndClear(): Promise<{\n tags: TagRecord[];\n counters: CounterRecord[];\n histogramStats: HistogramRecord[];\n events: EventRecord[];\n }> {\n try {\n const db = await this.getDB();\n const transaction = db.transaction(\n [TABLE_NAMES.TAGS, TABLE_NAMES.COUNTERS, TABLE_NAMES.HISTOGRAMS, TABLE_NAMES.EVENTS],\n 'readwrite',\n );\n\n // Get all data first\n const [tags, counters, histogramStats, events] = await Promise.all([\n this.getAllFromStore<TagRecord>(transaction, TABLE_NAMES.TAGS),\n this.getAllFromStore<CounterRecord>(transaction, TABLE_NAMES.COUNTERS),\n this.getAllFromStore<HistogramRecord>(transaction, TABLE_NAMES.HISTOGRAMS),\n this.getAllFromStore<EventRecord>(transaction, TABLE_NAMES.EVENTS),\n ]);\n\n // Clear all data in the same transaction\n await Promise.all([\n this.clearTable(transaction, TABLE_NAMES.COUNTERS),\n this.clearTable(transaction, TABLE_NAMES.HISTOGRAMS),\n this.clearTable(transaction, TABLE_NAMES.EVENTS),\n ]);\n\n return { tags, counters, histogramStats, events };\n } catch (error) {\n this.logger.debug('DiagnosticsStorage: Failed to get all and clear data', error);\n return { tags: [], counters: [], histogramStats: [], events: [] };\n }\n }\n\n /**\n * Helper method to get all records from a store within a transaction\n */\n /* istanbul ignore next */\n private getAllFromStore<T>(transaction: IDBTransaction, tableName: string): Promise<T[]> {\n return new Promise((resolve, reject) => {\n const store = transaction.objectStore(tableName);\n const request = store.getAll();\n\n request.onsuccess = () => resolve(request.result as T[]);\n request.onerror = () => reject(new Error(`Failed to get all from ${tableName}`));\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/lib/esm/index.js CHANGED
@@ -21,6 +21,7 @@ export { MemoryStorage } from './storage/memory';
21
21
  export { CookieStorage } from './storage/cookie';
22
22
  export { getStorageKey } from './storage/helpers';
23
23
  export { BrowserStorage } from './storage/browser-storage';
24
+ // export { DiagnosticsClient, IDiagnosticsClient } from './diagnostics/diagnostics-client';
24
25
  export { BaseTransport } from './transports/base';
25
26
  export { FetchTransport } from './transports/fetch';
26
27
  export { RemoteConfigClient } from './remote-config/remote-config';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,EAAY,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAA6C,MAAM,+BAA+B,CAAC;AAE9G,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAS,iBAAiB,EAAE,gBAAgB,EAAqC,MAAM,qBAAqB,CAAC;AAGpH,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAelD,OAAO,EAIL,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAEL,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,0CAA0C,EAC1C,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAqD,MAAM,yBAAyB,CAAC;AAEjH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["export { AmplitudeCore } from './core-client';\nexport { CoreClient, PluginHost } from './types/client/core-client';\nexport { AnalyticsClient } from './types/client/analytics-client';\nexport { AmplitudeContext } from './types/amplitude-context';\nexport { Identify, IIdentify } from './identify';\nexport { Revenue, IRevenue, RevenueProperty } from './revenue';\nexport { Destination } from './plugins/destination';\nexport { IdentityEventSender } from './plugins/identity';\nexport { Config, RequestMetadata } from './config';\nexport { IConfig } from './types/config/core-config';\nexport { Logger, ILogger, LogConfig } from './logger';\nexport { getGlobalScope } from './global-scope';\nexport { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';\nexport { isNewSession } from './session';\nexport { getCookieName, getOldCookieName } from './cookie-name';\nexport { getLanguage } from './language';\nexport { getQueryParams } from './query-params';\n\nexport { returnWrapper, AmplitudeReturn } from './utils/return-wrapper';\nexport { debugWrapper, getClientLogConfig, getClientStates } from './utils/debug';\nexport { UUID } from './utils/uuid';\nexport { createIdentifyEvent } from './utils/event-builder';\nexport { isUrlMatchAllowlist, getDecodeURI } from './utils/url-utils';\n\nexport { MemoryStorage } from './storage/memory';\nexport { CookieStorage } from './storage/cookie';\nexport { getStorageKey } from './storage/helpers';\n\nexport { BrowserStorage } from './storage/browser-storage';\n\nexport { BaseTransport } from './transports/base';\nexport { FetchTransport } from './transports/fetch';\n\nexport { RemoteConfigClient, IRemoteConfigClient, RemoteConfig, Source } from './remote-config/remote-config';\n\nexport { LogLevel } from './types/loglevel';\nexport { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './types/constants';\nexport { Storage, IdentityStorageType } from './types/storage';\nexport { Event, IdentifyOperation, SpecialEventType, IdentifyEvent, GroupIdentifyEvent } from './types/event/event';\nexport { EventOptions, BaseEvent } from './types/event/base-event';\nexport { IngestionMetadata } from './types/event/ingestion-metadata';\nexport { ServerZoneType, ServerZone } from './types/server-zone';\nexport { OfflineDisabled } from './types/offline';\nexport { Plan } from './types/event/plan';\nexport { TransportType, Transport } from './types/transport';\nexport { Payload } from './types/payload';\nexport { Response } from './types/response';\nexport { UserSession } from './types/user-session';\nexport {\n Plugin,\n BeforePlugin,\n DestinationPlugin,\n EnrichmentPlugin,\n PluginType,\n AnalyticsIdentity,\n} from './types/plugin';\nexport { Result } from './types/result';\nexport {\n ElementInteractionsOptions,\n Messenger,\n ActionType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n} from './types/element-interactions';\n\nexport {\n FrustrationInteractionsOptions,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_RAGE_CLICK_THRESHOLD,\n DEFAULT_RAGE_CLICK_WINDOW_MS,\n DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD,\n DEFAULT_DEAD_CLICK_WINDOW_MS,\n} from './types/frustration-interactions';\nexport { PageTrackingOptions, PageTrackingTrackOn, PageTrackingHistoryChanges } from './types/page-view-tracking';\nexport { Status } from './types/status';\n\nexport { NetworkEventCallback, networkObserver } from './network-observer';\nexport { NetworkRequestEvent, IRequestWrapper, JsonObject, JsonValue, JsonArray } from './network-request-event';\nexport { NetworkTrackingOptions, NetworkCaptureRule } from './types/network-tracking';\nexport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './types/constants';\n\nexport { PageUrlEnrichmentOptions } from './types/page-url-enrichment';\n\n// Campaign\nexport { Campaign, UTMParameters, ReferrerParameters, ClickIdParameters, ICampaignParser } from './types/campaign';\nexport { EMPTY_VALUE, BASE_CAMPAIGN, MKTG } from './types/constants';\nexport { CampaignParser } from './campaign/campaign-parser';\n\n// Browser\nexport {\n BrowserConfig,\n BrowserOptions,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n AttributionOptions,\n} from './types/config/browser-config';\nexport { BrowserClient } from './types/client/browser-client';\n\n// Node\nexport { NodeClient } from './types/client/node-client';\nexport { NodeConfig, NodeOptions } from './types/config/node-config';\n\n// React Native\nexport {\n ReactNativeConfig,\n ReactNativeTrackingOptions,\n ReactNativeOptions,\n ReactNativeAttributionOptions,\n} from './types/config/react-native-config';\nexport { ReactNativeClient } from './types/client/react-native-client';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,EAAY,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,4FAA4F;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAA6C,MAAM,+BAA+B,CAAC;AAE9G,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAS,iBAAiB,EAAE,gBAAgB,EAAqC,MAAM,qBAAqB,CAAC;AAGpH,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAelD,OAAO,EAIL,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAEL,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,0CAA0C,EAC1C,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAqD,MAAM,yBAAyB,CAAC;AAEjH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAMpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["export { AmplitudeCore } from './core-client';\nexport { CoreClient, PluginHost } from './types/client/core-client';\nexport { AnalyticsClient } from './types/client/analytics-client';\nexport { AmplitudeContext } from './types/amplitude-context';\nexport { Identify, IIdentify } from './identify';\nexport { Revenue, IRevenue, RevenueProperty } from './revenue';\nexport { Destination } from './plugins/destination';\nexport { IdentityEventSender } from './plugins/identity';\nexport { Config, RequestMetadata } from './config';\nexport { IConfig } from './types/config/core-config';\nexport { Logger, ILogger, LogConfig } from './logger';\nexport { getGlobalScope } from './global-scope';\nexport { getAnalyticsConnector, setConnectorDeviceId, setConnectorUserId } from './analytics-connector';\nexport { isNewSession } from './session';\nexport { getCookieName, getOldCookieName } from './cookie-name';\nexport { getLanguage } from './language';\nexport { getQueryParams } from './query-params';\n\nexport { returnWrapper, AmplitudeReturn } from './utils/return-wrapper';\nexport { debugWrapper, getClientLogConfig, getClientStates } from './utils/debug';\nexport { UUID } from './utils/uuid';\nexport { createIdentifyEvent } from './utils/event-builder';\nexport { isUrlMatchAllowlist, getDecodeURI } from './utils/url-utils';\n\nexport { MemoryStorage } from './storage/memory';\nexport { CookieStorage } from './storage/cookie';\nexport { getStorageKey } from './storage/helpers';\n\nexport { BrowserStorage } from './storage/browser-storage';\n\n// export { DiagnosticsClient, IDiagnosticsClient } from './diagnostics/diagnostics-client';\n\nexport { BaseTransport } from './transports/base';\nexport { FetchTransport } from './transports/fetch';\n\nexport { RemoteConfigClient, IRemoteConfigClient, RemoteConfig, Source } from './remote-config/remote-config';\n\nexport { LogLevel } from './types/loglevel';\nexport { AMPLITUDE_PREFIX, STORAGE_PREFIX } from './types/constants';\nexport { Storage, IdentityStorageType } from './types/storage';\nexport { Event, IdentifyOperation, SpecialEventType, IdentifyEvent, GroupIdentifyEvent } from './types/event/event';\nexport { EventOptions, BaseEvent } from './types/event/base-event';\nexport { IngestionMetadata } from './types/event/ingestion-metadata';\nexport { ServerZoneType, ServerZone } from './types/server-zone';\nexport { OfflineDisabled } from './types/offline';\nexport { Plan } from './types/event/plan';\nexport { TransportType, Transport } from './types/transport';\nexport { Payload } from './types/payload';\nexport { Response } from './types/response';\nexport { UserSession } from './types/user-session';\nexport {\n Plugin,\n BeforePlugin,\n DestinationPlugin,\n EnrichmentPlugin,\n PluginType,\n AnalyticsIdentity,\n} from './types/plugin';\nexport { Result } from './types/result';\nexport {\n ElementInteractionsOptions,\n Messenger,\n ActionType,\n DEFAULT_CSS_SELECTOR_ALLOWLIST,\n DEFAULT_DATA_ATTRIBUTE_PREFIX,\n DEFAULT_ACTION_CLICK_ALLOWLIST,\n} from './types/element-interactions';\n\nexport {\n FrustrationInteractionsOptions,\n DEFAULT_DEAD_CLICK_ALLOWLIST,\n DEFAULT_RAGE_CLICK_ALLOWLIST,\n DEFAULT_RAGE_CLICK_THRESHOLD,\n DEFAULT_RAGE_CLICK_WINDOW_MS,\n DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD,\n DEFAULT_DEAD_CLICK_WINDOW_MS,\n} from './types/frustration-interactions';\nexport { PageTrackingOptions, PageTrackingTrackOn, PageTrackingHistoryChanges } from './types/page-view-tracking';\nexport { Status } from './types/status';\n\nexport { NetworkEventCallback, networkObserver } from './network-observer';\nexport { NetworkRequestEvent, IRequestWrapper, JsonObject, JsonValue, JsonArray } from './network-request-event';\nexport { NetworkTrackingOptions, NetworkCaptureRule } from './types/network-tracking';\nexport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './types/constants';\n\nexport { PageUrlEnrichmentOptions } from './types/page-url-enrichment';\n\n// Campaign\nexport { Campaign, UTMParameters, ReferrerParameters, ClickIdParameters, ICampaignParser } from './types/campaign';\nexport { EMPTY_VALUE, BASE_CAMPAIGN, MKTG } from './types/constants';\nexport { CampaignParser } from './campaign/campaign-parser';\n\n// Browser\nexport {\n BrowserConfig,\n BrowserOptions,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n AttributionOptions,\n} from './types/config/browser-config';\nexport { BrowserClient } from './types/client/browser-client';\n\n// Node\nexport { NodeClient } from './types/client/node-client';\nexport { NodeConfig, NodeOptions } from './types/config/node-config';\n\n// React Native\nexport {\n ReactNativeConfig,\n ReactNativeTrackingOptions,\n ReactNativeOptions,\n ReactNativeAttributionOptions,\n} from './types/config/react-native-config';\nexport { ReactNativeClient } from './types/client/react-native-client';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/analytics-core",
3
- "version": "2.24.1",
3
+ "version": "2.25.0",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -42,5 +42,5 @@
42
42
  "files": [
43
43
  "lib"
44
44
  ],
45
- "gitHead": "de2752c03744f14a0afe364f927db9d48c3b07fc"
45
+ "gitHead": "1bd26997a96bb777be06d89abdb850824d9a1780"
46
46
  }