@amplitude/session-replay-browser 1.14.3 → 1.15.1-beta.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.
- package/lib/cjs/config/local-config.d.ts +2 -1
- package/lib/cjs/config/local-config.d.ts.map +1 -1
- package/lib/cjs/config/local-config.js +2 -0
- package/lib/cjs/config/local-config.js.map +1 -1
- package/lib/cjs/config/types.d.ts +2 -0
- package/lib/cjs/config/types.d.ts.map +1 -1
- package/lib/cjs/config/types.js.map +1 -1
- package/lib/cjs/events/base-events-store.d.ts +31 -0
- package/lib/cjs/events/base-events-store.d.ts.map +1 -0
- package/lib/cjs/events/base-events-store.js +47 -0
- package/lib/cjs/events/base-events-store.js.map +1 -0
- package/lib/cjs/events/event-compressor.js +2 -2
- package/lib/cjs/events/event-compressor.js.map +1 -1
- package/lib/cjs/events/events-idb-store.d.ts +16 -40
- package/lib/cjs/events/events-idb-store.d.ts.map +1 -1
- package/lib/cjs/events/events-idb-store.js +146 -139
- package/lib/cjs/events/events-idb-store.js.map +1 -1
- package/lib/cjs/events/events-manager.d.ts +3 -2
- package/lib/cjs/events/events-manager.d.ts.map +1 -1
- package/lib/cjs/events/events-manager.js +51 -18
- package/lib/cjs/events/events-manager.js.map +1 -1
- package/lib/cjs/events/events-memory-store.d.ts +15 -0
- package/lib/cjs/events/events-memory-store.d.ts.map +1 -0
- package/lib/cjs/events/events-memory-store.js +84 -0
- package/lib/cjs/events/events-memory-store.js.map +1 -0
- package/lib/cjs/helpers.d.ts +1 -0
- package/lib/cjs/helpers.d.ts.map +1 -1
- package/lib/cjs/hooks/click.d.ts.map +1 -1
- package/lib/cjs/hooks/click.js +3 -0
- package/lib/cjs/hooks/click.js.map +1 -1
- package/lib/cjs/index.d.ts +1 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/session-replay.d.ts.map +1 -1
- package/lib/cjs/session-replay.js +26 -18
- package/lib/cjs/session-replay.js.map +1 -1
- package/lib/cjs/track-destination.d.ts.map +1 -1
- package/lib/cjs/track-destination.js +3 -4
- package/lib/cjs/track-destination.js.map +1 -1
- package/lib/cjs/typings/session-replay.d.ts +20 -12
- package/lib/cjs/typings/session-replay.d.ts.map +1 -1
- package/lib/cjs/typings/session-replay.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.d.ts.map +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/config/local-config.d.ts +2 -1
- package/lib/esm/config/local-config.d.ts.map +1 -1
- package/lib/esm/config/local-config.js +2 -0
- package/lib/esm/config/local-config.js.map +1 -1
- package/lib/esm/config/types.d.ts +2 -0
- package/lib/esm/config/types.d.ts.map +1 -1
- package/lib/esm/config/types.js.map +1 -1
- package/lib/esm/events/base-events-store.d.ts +31 -0
- package/lib/esm/events/base-events-store.d.ts.map +1 -0
- package/lib/esm/events/base-events-store.js +45 -0
- package/lib/esm/events/base-events-store.js.map +1 -0
- package/lib/esm/events/event-compressor.js +1 -1
- package/lib/esm/events/event-compressor.js.map +1 -1
- package/lib/esm/events/events-idb-store.d.ts +16 -40
- package/lib/esm/events/events-idb-store.d.ts.map +1 -1
- package/lib/esm/events/events-idb-store.js +146 -138
- package/lib/esm/events/events-idb-store.js.map +1 -1
- package/lib/esm/events/events-manager.d.ts +3 -2
- package/lib/esm/events/events-manager.d.ts.map +1 -1
- package/lib/esm/events/events-manager.js +51 -18
- package/lib/esm/events/events-manager.js.map +1 -1
- package/lib/esm/events/events-memory-store.d.ts +15 -0
- package/lib/esm/events/events-memory-store.d.ts.map +1 -0
- package/lib/esm/events/events-memory-store.js +82 -0
- package/lib/esm/events/events-memory-store.js.map +1 -0
- package/lib/esm/helpers.d.ts +1 -0
- package/lib/esm/helpers.d.ts.map +1 -1
- package/lib/esm/hooks/click.d.ts.map +1 -1
- package/lib/esm/hooks/click.js +3 -0
- package/lib/esm/hooks/click.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.d.ts.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/session-replay.d.ts.map +1 -1
- package/lib/esm/session-replay.js +26 -18
- package/lib/esm/session-replay.js.map +1 -1
- package/lib/esm/track-destination.d.ts.map +1 -1
- package/lib/esm/track-destination.js +3 -4
- package/lib/esm/track-destination.js.map +1 -1
- package/lib/esm/typings/session-replay.d.ts +20 -12
- package/lib/esm/typings/session-replay.d.ts.map +1 -1
- package/lib/esm/typings/session-replay.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.d.ts.map +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/config/local-config.d.ts +2 -1
- package/lib/scripts/config/local-config.d.ts.map +1 -1
- package/lib/scripts/config/types.d.ts +2 -0
- package/lib/scripts/config/types.d.ts.map +1 -1
- package/lib/scripts/events/base-events-store.d.ts +31 -0
- package/lib/scripts/events/base-events-store.d.ts.map +1 -0
- package/lib/scripts/events/events-idb-store.d.ts +16 -40
- package/lib/scripts/events/events-idb-store.d.ts.map +1 -1
- package/lib/scripts/events/events-manager.d.ts +3 -2
- package/lib/scripts/events/events-manager.d.ts.map +1 -1
- package/lib/scripts/events/events-memory-store.d.ts +15 -0
- package/lib/scripts/events/events-memory-store.d.ts.map +1 -0
- package/lib/scripts/helpers.d.ts +1 -0
- package/lib/scripts/helpers.d.ts.map +1 -1
- package/lib/scripts/hooks/click.d.ts.map +1 -1
- package/lib/scripts/index.d.ts +1 -1
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/session-replay.d.ts.map +1 -1
- package/lib/scripts/track-destination.d.ts.map +1 -1
- package/lib/scripts/typings/session-replay.d.ts +20 -12
- package/lib/scripts/typings/session-replay.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/lib/scripts/version.d.ts.map +1 -1
- package/package.json +5 -3
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
var _this = this;
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SessionReplayEventsIDBStore = exports.createStore = exports.defineObjectStores = exports.keyValDatabaseExists = exports.remoteConfigKey = exports.sequencesToSendKey = exports.currentSequenceKey = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var analytics_client_common_1 = require("@amplitude/analytics-client-common");
|
|
6
6
|
var analytics_core_1 = require("@amplitude/analytics-core");
|
|
7
7
|
var idb_1 = require("idb");
|
|
8
|
-
var constants_1 = require("../constants");
|
|
9
8
|
var messages_1 = require("../messages");
|
|
9
|
+
var base_events_store_1 = require("./base-events-store");
|
|
10
10
|
var legacy_idb_types_1 = require("./legacy-idb-types");
|
|
11
11
|
exports.currentSequenceKey = 'sessionCurrentSequence';
|
|
12
12
|
exports.sequencesToSendKey = 'sequencesToSend';
|
|
@@ -88,63 +88,48 @@ var createStore = function (dbName) { return tslib_1.__awaiter(_this, void 0, vo
|
|
|
88
88
|
});
|
|
89
89
|
}); };
|
|
90
90
|
exports.createStore = createStore;
|
|
91
|
-
var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
var _this = this;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
this.timeAtLastSplit = null;
|
|
98
|
-
/**
|
|
99
|
-
* Determines whether to send the events list to the backend and start a new
|
|
100
|
-
* empty events list, based on the size of the list as well as the last time sent
|
|
101
|
-
* @param nextEventString
|
|
102
|
-
* @returns boolean
|
|
103
|
-
*/
|
|
104
|
-
this.shouldSplitEventsList = function (events, nextEventString) {
|
|
105
|
-
var sizeOfNextEvent = new Blob([nextEventString]).size;
|
|
106
|
-
var sizeOfEventsList = new Blob(events).size;
|
|
107
|
-
if (sizeOfEventsList + sizeOfNextEvent >= _this.maxPersistedEventsSize) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
if (_this.timeAtLastSplit !== null &&
|
|
111
|
-
_this.interval &&
|
|
112
|
-
Date.now() - _this.timeAtLastSplit > _this.interval &&
|
|
113
|
-
events.length) {
|
|
114
|
-
_this.interval = Math.min(_this.maxInterval, _this.interval + _this.minInterval);
|
|
115
|
-
_this.timeAtLastSplit = Date.now();
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
return false;
|
|
119
|
-
};
|
|
120
|
-
this.getSequencesToSend = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
121
|
-
var sequencesToSend, e_1;
|
|
122
|
-
var _a;
|
|
91
|
+
var SessionReplayEventsIDBStore = /** @class */ (function (_super) {
|
|
92
|
+
tslib_1.__extends(SessionReplayEventsIDBStore, _super);
|
|
93
|
+
function SessionReplayEventsIDBStore(args) {
|
|
94
|
+
var _this = _super.call(this, args) || this;
|
|
95
|
+
_this.getSequencesToSend = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
96
|
+
var sequences, cursor, _a, sessionId, events, e_1;
|
|
123
97
|
return tslib_1.__generator(this, function (_b) {
|
|
124
98
|
switch (_b.label) {
|
|
125
99
|
case 0:
|
|
126
|
-
_b.trys.push([0,
|
|
127
|
-
|
|
100
|
+
_b.trys.push([0, 5, , 6]);
|
|
101
|
+
sequences = [];
|
|
102
|
+
return [4 /*yield*/, this.db.transaction('sequencesToSend').store.openCursor()];
|
|
128
103
|
case 1:
|
|
129
|
-
|
|
130
|
-
|
|
104
|
+
cursor = _b.sent();
|
|
105
|
+
_b.label = 2;
|
|
131
106
|
case 2:
|
|
107
|
+
if (!cursor) return [3 /*break*/, 4];
|
|
108
|
+
_a = cursor.value, sessionId = _a.sessionId, events = _a.events;
|
|
109
|
+
sequences.push({
|
|
110
|
+
events: events,
|
|
111
|
+
sequenceId: cursor.key,
|
|
112
|
+
sessionId: sessionId,
|
|
113
|
+
});
|
|
114
|
+
return [4 /*yield*/, cursor.continue()];
|
|
115
|
+
case 3:
|
|
116
|
+
cursor = _b.sent();
|
|
117
|
+
return [3 /*break*/, 2];
|
|
118
|
+
case 4: return [2 /*return*/, sequences];
|
|
119
|
+
case 5:
|
|
132
120
|
e_1 = _b.sent();
|
|
133
121
|
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_1));
|
|
134
|
-
return [3 /*break*/,
|
|
135
|
-
case
|
|
122
|
+
return [3 /*break*/, 6];
|
|
123
|
+
case 6: return [2 /*return*/, undefined];
|
|
136
124
|
}
|
|
137
125
|
});
|
|
138
126
|
}); };
|
|
139
|
-
|
|
127
|
+
_this.storeCurrentSequence = function (sessionId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
140
128
|
var currentSequenceData, sequenceId, e_2;
|
|
141
129
|
return tslib_1.__generator(this, function (_a) {
|
|
142
130
|
switch (_a.label) {
|
|
143
131
|
case 0:
|
|
144
132
|
_a.trys.push([0, 4, , 5]);
|
|
145
|
-
if (!this.db) {
|
|
146
|
-
return [2 /*return*/, undefined];
|
|
147
|
-
}
|
|
148
133
|
return [4 /*yield*/, this.db.get(exports.currentSequenceKey, sessionId)];
|
|
149
134
|
case 1:
|
|
150
135
|
currentSequenceData = _a.sent();
|
|
@@ -169,55 +154,46 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
169
154
|
}
|
|
170
155
|
});
|
|
171
156
|
}); };
|
|
172
|
-
|
|
157
|
+
_this.addEventToCurrentSequence = function (sessionId, event) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
173
158
|
var tx, sequenceEvents, eventsToSend, updatedEvents, sequenceId, e_3;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
switch (_b.label) {
|
|
159
|
+
return tslib_1.__generator(this, function (_a) {
|
|
160
|
+
switch (_a.label) {
|
|
177
161
|
case 0:
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
_b.label = 1;
|
|
182
|
-
case 1:
|
|
183
|
-
_b.trys.push([1, 11, , 12]);
|
|
184
|
-
tx = (_a = this.db) === null || _a === void 0 ? void 0 : _a.transaction(exports.currentSequenceKey, 'readwrite');
|
|
185
|
-
if (!tx) {
|
|
186
|
-
return [2 /*return*/];
|
|
187
|
-
}
|
|
162
|
+
_a.trys.push([0, 10, , 11]);
|
|
163
|
+
tx = this.db.transaction(exports.currentSequenceKey, 'readwrite');
|
|
188
164
|
return [4 /*yield*/, tx.store.get(sessionId)];
|
|
189
|
-
case
|
|
190
|
-
sequenceEvents =
|
|
191
|
-
if (!!sequenceEvents) return [3 /*break*/,
|
|
165
|
+
case 1:
|
|
166
|
+
sequenceEvents = _a.sent();
|
|
167
|
+
if (!!sequenceEvents) return [3 /*break*/, 3];
|
|
192
168
|
return [4 /*yield*/, tx.store.put({ sessionId: sessionId, events: [event] })];
|
|
193
|
-
case
|
|
194
|
-
|
|
169
|
+
case 2:
|
|
170
|
+
_a.sent();
|
|
195
171
|
return [2 /*return*/];
|
|
196
|
-
case
|
|
172
|
+
case 3:
|
|
197
173
|
eventsToSend = void 0;
|
|
198
|
-
if (!this.shouldSplitEventsList(sequenceEvents.events, event)) return [3 /*break*/,
|
|
174
|
+
if (!this.shouldSplitEventsList(sequenceEvents.events, event)) return [3 /*break*/, 5];
|
|
199
175
|
eventsToSend = sequenceEvents.events;
|
|
200
176
|
// set store to empty array
|
|
201
177
|
return [4 /*yield*/, tx.store.put({ sessionId: sessionId, events: [event] })];
|
|
202
|
-
case
|
|
178
|
+
case 4:
|
|
203
179
|
// set store to empty array
|
|
204
|
-
|
|
205
|
-
return [3 /*break*/,
|
|
206
|
-
case
|
|
180
|
+
_a.sent();
|
|
181
|
+
return [3 /*break*/, 7];
|
|
182
|
+
case 5:
|
|
207
183
|
updatedEvents = sequenceEvents.events.concat(event);
|
|
208
184
|
return [4 /*yield*/, tx.store.put({ sessionId: sessionId, events: updatedEvents })];
|
|
209
|
-
case
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
case
|
|
213
|
-
case
|
|
214
|
-
|
|
185
|
+
case 6:
|
|
186
|
+
_a.sent();
|
|
187
|
+
_a.label = 7;
|
|
188
|
+
case 7: return [4 /*yield*/, tx.done];
|
|
189
|
+
case 8:
|
|
190
|
+
_a.sent();
|
|
215
191
|
if (!eventsToSend) {
|
|
216
192
|
return [2 /*return*/, undefined];
|
|
217
193
|
}
|
|
218
194
|
return [4 /*yield*/, this.storeSendingEvents(sessionId, eventsToSend)];
|
|
219
|
-
case
|
|
220
|
-
sequenceId =
|
|
195
|
+
case 9:
|
|
196
|
+
sequenceId = _a.sent();
|
|
221
197
|
if (!sequenceId) {
|
|
222
198
|
return [2 /*return*/, undefined];
|
|
223
199
|
}
|
|
@@ -226,56 +202,59 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
226
202
|
sessionId: sessionId,
|
|
227
203
|
sequenceId: sequenceId,
|
|
228
204
|
}];
|
|
229
|
-
case
|
|
230
|
-
e_3 =
|
|
205
|
+
case 10:
|
|
206
|
+
e_3 = _a.sent();
|
|
231
207
|
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_3));
|
|
232
|
-
return [3 /*break*/,
|
|
233
|
-
case
|
|
208
|
+
return [3 /*break*/, 11];
|
|
209
|
+
case 11: return [2 /*return*/, undefined];
|
|
234
210
|
}
|
|
235
211
|
});
|
|
236
212
|
}); };
|
|
237
|
-
|
|
213
|
+
_this.storeSendingEvents = function (sessionId, events) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
238
214
|
var sequenceId, e_4;
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
switch (_b.label) {
|
|
215
|
+
return tslib_1.__generator(this, function (_a) {
|
|
216
|
+
switch (_a.label) {
|
|
242
217
|
case 0:
|
|
243
|
-
|
|
244
|
-
return [4 /*yield*/,
|
|
218
|
+
_a.trys.push([0, 2, , 3]);
|
|
219
|
+
return [4 /*yield*/, this.db.put(exports.sequencesToSendKey, {
|
|
245
220
|
sessionId: sessionId,
|
|
246
221
|
events: events,
|
|
247
|
-
})
|
|
222
|
+
})];
|
|
248
223
|
case 1:
|
|
249
|
-
sequenceId =
|
|
224
|
+
sequenceId = _a.sent();
|
|
250
225
|
return [2 /*return*/, sequenceId];
|
|
251
226
|
case 2:
|
|
252
|
-
e_4 =
|
|
227
|
+
e_4 = _a.sent();
|
|
253
228
|
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_4));
|
|
254
229
|
return [3 /*break*/, 3];
|
|
255
230
|
case 3: return [2 /*return*/, undefined];
|
|
256
231
|
}
|
|
257
232
|
});
|
|
258
233
|
}); };
|
|
259
|
-
|
|
234
|
+
_this.cleanUpSessionEventsStore = function (_sessionId, sequenceId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
260
235
|
var e_5;
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
switch (_b.label) {
|
|
236
|
+
return tslib_1.__generator(this, function (_a) {
|
|
237
|
+
switch (_a.label) {
|
|
264
238
|
case 0:
|
|
265
|
-
|
|
266
|
-
|
|
239
|
+
if (!sequenceId) {
|
|
240
|
+
return [2 /*return*/];
|
|
241
|
+
}
|
|
242
|
+
_a.label = 1;
|
|
267
243
|
case 1:
|
|
268
|
-
|
|
269
|
-
return [
|
|
244
|
+
_a.trys.push([1, 3, , 4]);
|
|
245
|
+
return [4 /*yield*/, this.db.delete(exports.sequencesToSendKey, sequenceId)];
|
|
270
246
|
case 2:
|
|
271
|
-
|
|
247
|
+
_a.sent();
|
|
248
|
+
return [3 /*break*/, 4];
|
|
249
|
+
case 3:
|
|
250
|
+
e_5 = _a.sent();
|
|
272
251
|
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_5));
|
|
273
|
-
return [3 /*break*/,
|
|
274
|
-
case
|
|
252
|
+
return [3 /*break*/, 4];
|
|
253
|
+
case 4: return [2 /*return*/];
|
|
275
254
|
}
|
|
276
255
|
});
|
|
277
256
|
}); };
|
|
278
|
-
|
|
257
|
+
_this.transitionFromKeyValStore = function (sessionId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
279
258
|
var keyValDb, transitionCurrentSessionSequences_1, storageKey, getAllRequest_1, transitionPromise, globalScope, e_6, e_7;
|
|
280
259
|
var _this = this;
|
|
281
260
|
return tslib_1.__generator(this, function (_a) {
|
|
@@ -380,57 +359,85 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
380
359
|
}
|
|
381
360
|
});
|
|
382
361
|
}); };
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
this.minInterval = minInterval !== null && minInterval !== void 0 ? minInterval : constants_1.MIN_INTERVAL;
|
|
387
|
-
this.interval = 0;
|
|
362
|
+
_this.apiKey = args.apiKey;
|
|
363
|
+
_this.db = args.db;
|
|
364
|
+
return _this;
|
|
388
365
|
}
|
|
389
|
-
SessionReplayEventsIDBStore.
|
|
366
|
+
SessionReplayEventsIDBStore.new = function (type, args, sessionId) {
|
|
390
367
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
391
|
-
var dbSuffix, dbName,
|
|
392
|
-
return tslib_1.__generator(this, function (
|
|
393
|
-
switch (
|
|
368
|
+
var dbSuffix, dbName, db, eventsIDBStore, e_8;
|
|
369
|
+
return tslib_1.__generator(this, function (_a) {
|
|
370
|
+
switch (_a.label) {
|
|
394
371
|
case 0:
|
|
395
|
-
|
|
372
|
+
_a.trys.push([0, 3, , 4]);
|
|
396
373
|
dbSuffix = type === 'replay' ? '' : "_".concat(type);
|
|
397
|
-
dbName = "".concat(
|
|
398
|
-
_a = this;
|
|
374
|
+
dbName = "".concat(args.apiKey.substring(0, 10), "_amp_session_replay_events").concat(dbSuffix);
|
|
399
375
|
return [4 /*yield*/, (0, exports.createStore)(dbName)];
|
|
400
376
|
case 1:
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
return [4 /*yield*/,
|
|
377
|
+
db = _a.sent();
|
|
378
|
+
eventsIDBStore = new SessionReplayEventsIDBStore(tslib_1.__assign(tslib_1.__assign({}, args), { db: db }));
|
|
379
|
+
return [4 /*yield*/, eventsIDBStore.transitionFromKeyValStore(sessionId)];
|
|
404
380
|
case 2:
|
|
405
|
-
|
|
406
|
-
return [
|
|
381
|
+
_a.sent();
|
|
382
|
+
return [2 /*return*/, eventsIDBStore];
|
|
407
383
|
case 3:
|
|
408
|
-
e_8 =
|
|
409
|
-
|
|
384
|
+
e_8 = _a.sent();
|
|
385
|
+
args.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_8));
|
|
410
386
|
return [3 /*break*/, 4];
|
|
411
387
|
case 4: return [2 /*return*/];
|
|
412
388
|
}
|
|
413
389
|
});
|
|
414
390
|
});
|
|
415
391
|
};
|
|
392
|
+
SessionReplayEventsIDBStore.prototype.getCurrentSequenceEvents = function (sessionId) {
|
|
393
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
394
|
+
var events, allEvents, _a, _b, events, e_9_1;
|
|
395
|
+
var e_9, _c;
|
|
396
|
+
return tslib_1.__generator(this, function (_d) {
|
|
397
|
+
switch (_d.label) {
|
|
398
|
+
case 0:
|
|
399
|
+
if (!sessionId) return [3 /*break*/, 2];
|
|
400
|
+
return [4 /*yield*/, this.db.get('sessionCurrentSequence', sessionId)];
|
|
401
|
+
case 1:
|
|
402
|
+
events = _d.sent();
|
|
403
|
+
if (!events) {
|
|
404
|
+
return [2 /*return*/, undefined];
|
|
405
|
+
}
|
|
406
|
+
return [2 /*return*/, [events]];
|
|
407
|
+
case 2:
|
|
408
|
+
allEvents = [];
|
|
409
|
+
_d.label = 3;
|
|
410
|
+
case 3:
|
|
411
|
+
_d.trys.push([3, 8, 9, 10]);
|
|
412
|
+
return [4 /*yield*/, this.db.getAll('sessionCurrentSequence')];
|
|
413
|
+
case 4:
|
|
414
|
+
_a = tslib_1.__values.apply(void 0, [_d.sent()]), _b = _a.next();
|
|
415
|
+
_d.label = 5;
|
|
416
|
+
case 5:
|
|
417
|
+
if (!!_b.done) return [3 /*break*/, 7];
|
|
418
|
+
events = _b.value;
|
|
419
|
+
allEvents.push(events);
|
|
420
|
+
_d.label = 6;
|
|
421
|
+
case 6:
|
|
422
|
+
_b = _a.next();
|
|
423
|
+
return [3 /*break*/, 5];
|
|
424
|
+
case 7: return [3 /*break*/, 10];
|
|
425
|
+
case 8:
|
|
426
|
+
e_9_1 = _d.sent();
|
|
427
|
+
e_9 = { error: e_9_1 };
|
|
428
|
+
return [3 /*break*/, 10];
|
|
429
|
+
case 9:
|
|
430
|
+
try {
|
|
431
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
432
|
+
}
|
|
433
|
+
finally { if (e_9) throw e_9.error; }
|
|
434
|
+
return [7 /*endfinally*/];
|
|
435
|
+
case 10: return [2 /*return*/, allEvents];
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
});
|
|
439
|
+
};
|
|
416
440
|
return SessionReplayEventsIDBStore;
|
|
417
|
-
}());
|
|
441
|
+
}(base_events_store_1.BaseEventsStore));
|
|
418
442
|
exports.SessionReplayEventsIDBStore = SessionReplayEventsIDBStore;
|
|
419
|
-
var createEventsIDBStore = function (_a) {
|
|
420
|
-
var loggerProvider = _a.loggerProvider, apiKey = _a.apiKey, sessionId = _a.sessionId, type = _a.type, minInterval = _a.minInterval, maxInterval = _a.maxInterval;
|
|
421
|
-
return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
422
|
-
var eventsIDBStore;
|
|
423
|
-
return tslib_1.__generator(this, function (_b) {
|
|
424
|
-
switch (_b.label) {
|
|
425
|
-
case 0:
|
|
426
|
-
eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider: loggerProvider, apiKey: apiKey, minInterval: minInterval, maxInterval: maxInterval });
|
|
427
|
-
return [4 /*yield*/, eventsIDBStore.initialize(type, sessionId)];
|
|
428
|
-
case 1:
|
|
429
|
-
_b.sent();
|
|
430
|
-
return [2 /*return*/, eventsIDBStore];
|
|
431
|
-
}
|
|
432
|
-
});
|
|
433
|
-
});
|
|
434
|
-
};
|
|
435
|
-
exports.createEventsIDBStore = createEventsIDBStore;
|
|
436
443
|
//# sourceMappingURL=events-idb-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { Logger as ILogger } from '@amplitude/analytics-types';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { STORAGE_FAILURE } from '../messages';\nimport {\n SessionReplayEventsIDBStore as AmplitudeSessionReplayEventsIDBStore,\n EventType,\n Events,\n SendingSequencesIDBInput,\n SendingSequencesIDBReturn,\n} from '../typings/session-replay';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: {\n sessionId: number;\n events: Events;\n };\n };\n sequencesToSend: {\n key: number;\n value: SendingSequencesIDBInput;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\nexport class SessionReplayEventsIDBStore implements AmplitudeSessionReplayEventsIDBStore {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB> | undefined;\n loggerProvider: ILogger;\n storageKey = '';\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval: number;\n timeAtLastSplit: number | null = null;\n\n private readonly minInterval: number;\n private readonly maxInterval: number;\n\n constructor({\n loggerProvider,\n apiKey,\n minInterval,\n maxInterval,\n }: {\n loggerProvider: ILogger;\n apiKey: string;\n minInterval?: number;\n maxInterval?: number;\n }) {\n this.loggerProvider = loggerProvider;\n this.apiKey = apiKey;\n this.maxInterval = maxInterval ?? MAX_INTERVAL;\n this.minInterval = minInterval ?? MIN_INTERVAL;\n this.interval = 0;\n }\n\n async initialize(type: EventType, sessionId?: number) {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${this.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n this.db = await createStore(dbName);\n this.timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n await this.transitionFromKeyValStore(sessionId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (\n this.timeAtLastSplit !== null &&\n this.interval &&\n Date.now() - this.timeAtLastSplit > this.interval &&\n events.length\n ) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this.timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n\n getSequencesToSend = async () => {\n try {\n const sequencesToSend = (await this.db?.getAll<'sequencesToSend'>(\n sequencesToSendKey,\n )) as SendingSequencesIDBReturn[];\n\n return sequencesToSend;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n if (!this.db) {\n return undefined;\n }\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n if (this.interval === 0) {\n this.interval = this.minInterval;\n }\n\n try {\n const tx = this.db?.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n if (!tx) {\n return;\n }\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db?.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (sequenceId: number) => {\n try {\n await this.db?.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesIDBReturn | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesIDBReturn | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n\nexport const createEventsIDBStore = async ({\n loggerProvider,\n apiKey,\n sessionId,\n type,\n minInterval,\n maxInterval,\n}: {\n loggerProvider: ILogger;\n apiKey: string;\n type: EventType;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: number;\n}) => {\n const eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider, apiKey, minInterval, maxInterval });\n await eventsIDBStore.initialize(type, sessionId);\n return eventsIDBStore;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { STORAGE_FAILURE } from '../messages';\nimport { EventType, Events, SendingSequencesReturn } from '../typings/session-replay';\nimport { BaseEventsStore, InstanceArgs as BaseInstanceArgs } from './base-events-store';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n };\n sequencesToSend: {\n key: number;\n value: Omit<SendingSequencesReturn<number>, 'sequenceId'>;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\n\ntype InstanceArgs = {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB>;\n} & BaseInstanceArgs;\n\nexport class SessionReplayEventsIDBStore extends BaseEventsStore<number> {\n private readonly apiKey: string;\n private readonly db: IDBPDatabase<SessionReplayDB>;\n\n constructor(args: InstanceArgs) {\n super(args);\n this.apiKey = args.apiKey;\n this.db = args.db;\n }\n\n static async new(\n type: EventType,\n args: Omit<InstanceArgs, 'db'>,\n sessionId?: number,\n ): Promise<SessionReplayEventsIDBStore | undefined> {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${args.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n const db = await createStore(dbName);\n const eventsIDBStore = new SessionReplayEventsIDBStore({\n ...args,\n db,\n });\n await eventsIDBStore.transitionFromKeyValStore(sessionId);\n return eventsIDBStore;\n } catch (e) {\n args.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return;\n }\n\n async getCurrentSequenceEvents(sessionId?: number) {\n if (sessionId) {\n const events = await this.db.get('sessionCurrentSequence', sessionId);\n if (!events) {\n return undefined;\n }\n return [events];\n }\n\n const allEvents = [];\n for (const events of await this.db.getAll('sessionCurrentSequence')) {\n allEvents.push(events);\n }\n\n return allEvents;\n }\n\n getSequencesToSend = async (): Promise<SendingSequencesReturn<number>[] | undefined> => {\n try {\n const sequences: SendingSequencesReturn<number>[] = [];\n let cursor = await this.db.transaction('sequencesToSend').store.openCursor();\n while (cursor) {\n const { sessionId, events } = cursor.value;\n sequences.push({\n events,\n sequenceId: cursor.key,\n sessionId,\n });\n cursor = await cursor.continue();\n }\n\n return sequences;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n try {\n const tx = this.db.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (_sessionId: number, sequenceId?: number) => {\n if (!sequenceId) {\n return;\n }\n try {\n await this.db.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesReturn<number> | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesReturn<number> | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n"]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager, EventType } from '../typings/session-replay';
|
|
1
|
+
import { SessionReplayEventsManager as AmplitudeSessionReplayEventsManager, EventType, StoreType } from '../typings/session-replay';
|
|
2
2
|
import { SessionReplayJoinedConfig } from '../config/types';
|
|
3
3
|
import { PayloadBatcher } from '../track-destination';
|
|
4
|
-
export declare const createEventsManager: <Type extends EventType>({ config, sessionId, minInterval, maxInterval, type, payloadBatcher, }: {
|
|
4
|
+
export declare const createEventsManager: <Type extends EventType>({ config, sessionId, minInterval, maxInterval, type, payloadBatcher, storeType, }: {
|
|
5
5
|
config: SessionReplayJoinedConfig;
|
|
6
6
|
type: Type;
|
|
7
7
|
minInterval?: number | undefined;
|
|
8
8
|
maxInterval?: number | undefined;
|
|
9
9
|
sessionId?: number | undefined;
|
|
10
10
|
payloadBatcher?: PayloadBatcher | undefined;
|
|
11
|
+
storeType: StoreType;
|
|
11
12
|
}) => Promise<AmplitudeSessionReplayEventsManager<Type, string>>;
|
|
12
13
|
//# sourceMappingURL=events-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-manager.d.ts","sourceRoot":"","sources":["../../../src/events/events-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,IAAI,mCAAmC,
|
|
1
|
+
{"version":3,"file":"events-manager.d.ts","sourceRoot":"","sources":["../../../src/events/events-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,IAAI,mCAAmC,EAEjE,SAAS,EACT,SAAS,EACV,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAiC,MAAM,sBAAsB,CAAC;AAIrF,eAAO,MAAM,mBAAmB;YAStB,yBAAyB;;;;;;eAMtB,SAAS;gEA4IrB,CAAC"}
|