@multiplayer-app/session-recorder-browser 1.3.16 → 1.3.17-session-buffering.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/dist/browser/index.js +1224 -174
- package/dist/config/constants.d.ts +1 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/session-recorder.d.ts.map +1 -1
- package/dist/config/session-recorder.js +6 -1
- package/dist/config/session-recorder.js.map +1 -1
- package/dist/exporters/index.js +1 -1
- package/dist/exporters/index.js.LICENSE.txt +2 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/index.js +1216 -175
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1214 -174
- package/dist/index.umd.js.map +1 -1
- package/dist/otel/index.d.ts +7 -1
- package/dist/otel/index.d.ts.map +1 -1
- package/dist/otel/index.js +63 -3
- package/dist/otel/index.js.map +1 -1
- package/dist/patch/fetch.js +2 -2
- package/dist/patch/fetch.js.map +1 -1
- package/dist/rrweb/index.d.ts +50 -17
- package/dist/rrweb/index.d.ts.map +1 -1
- package/dist/rrweb/index.js +158 -84
- package/dist/rrweb/index.js.map +1 -1
- package/dist/services/crashBuffer.service.d.ts +60 -0
- package/dist/services/crashBuffer.service.d.ts.map +1 -0
- package/dist/services/crashBuffer.service.js +161 -0
- package/dist/services/crashBuffer.service.js.map +1 -0
- package/dist/services/indexedDb.service.d.ts +72 -0
- package/dist/services/indexedDb.service.d.ts.map +1 -0
- package/dist/services/indexedDb.service.js +335 -0
- package/dist/services/indexedDb.service.js.map +1 -0
- package/dist/services/socket.service.d.ts +3 -2
- package/dist/services/socket.service.d.ts.map +1 -1
- package/dist/services/socket.service.js +8 -1
- package/dist/services/socket.service.js.map +1 -1
- package/dist/session-recorder.d.ts +12 -1
- package/dist/session-recorder.d.ts.map +1 -1
- package/dist/session-recorder.js +155 -7
- package/dist/session-recorder.js.map +1 -1
- package/dist/types/session-recorder.d.ts +20 -0
- package/dist/types/session-recorder.d.ts.map +1 -1
- package/dist/types/session-recorder.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/storage.d.ts +4 -1
- package/dist/utils/storage.d.ts.map +1 -1
- package/dist/utils/storage.js +35 -13
- package/dist/utils/storage.js.map +1 -1
- package/dist/utils/tabId.d.ts +2 -0
- package/dist/utils/tabId.d.ts.map +1 -0
- package/dist/utils/tabId.js +22 -0
- package/dist/utils/tabId.js.map +1 -0
- package/package.json +2 -2
- package/dist/rrweb/indexedDbService.d.ts +0 -9
- package/dist/rrweb/indexedDbService.d.ts.map +0 -1
- package/dist/rrweb/indexedDbService.js +0 -54
- package/dist/rrweb/indexedDbService.js.map +0 -1
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
const dbName = 'mpEventsDB';
|
|
2
|
+
const dbVersion = 2;
|
|
3
|
+
const legacyStoreName = 'mpEventsStore';
|
|
4
|
+
const rrwebEventsStore = 'rrwebEvents';
|
|
5
|
+
const otelSpansStore = 'otelSpans';
|
|
6
|
+
const attrsStore = 'crashBufferAttrs';
|
|
7
|
+
export class IndexedDBService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.dbPromise = this.openDB();
|
|
10
|
+
}
|
|
11
|
+
openDB() {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const request = indexedDB.open(dbName, dbVersion);
|
|
14
|
+
request.onupgradeneeded = () => {
|
|
15
|
+
const db = request.result;
|
|
16
|
+
// Keep the legacy store if it exists to avoid breaking older versions.
|
|
17
|
+
if (!db.objectStoreNames.contains(legacyStoreName)) {
|
|
18
|
+
db.createObjectStore(legacyStoreName, { keyPath: 'id', autoIncrement: true });
|
|
19
|
+
}
|
|
20
|
+
if (!db.objectStoreNames.contains(rrwebEventsStore)) {
|
|
21
|
+
const store = db.createObjectStore(rrwebEventsStore, { keyPath: 'id', autoIncrement: true });
|
|
22
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
23
|
+
}
|
|
24
|
+
if (!db.objectStoreNames.contains(otelSpansStore)) {
|
|
25
|
+
const store = db.createObjectStore(otelSpansStore, { keyPath: 'id', autoIncrement: true });
|
|
26
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
27
|
+
}
|
|
28
|
+
if (!db.objectStoreNames.contains(attrsStore)) {
|
|
29
|
+
db.createObjectStore(attrsStore, { keyPath: 'tabId' });
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
request.onsuccess = () => resolve(request.result);
|
|
33
|
+
request.onerror = () => reject(request.error);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Prefer `appendRrwebEvent(tabId, ...)` and `getRrwebEventsWindow(...)`.
|
|
38
|
+
* This writes into the legacy store with no pruning semantics.
|
|
39
|
+
*/
|
|
40
|
+
async saveEvent(event) {
|
|
41
|
+
const db = await this.dbPromise;
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
44
|
+
const store = tx.objectStore(legacyStoreName);
|
|
45
|
+
store.add({ event });
|
|
46
|
+
tx.oncomplete = () => resolve();
|
|
47
|
+
tx.onerror = () => reject(tx.error);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Prefer `getRrwebEventsWindow(...)`.
|
|
52
|
+
*/
|
|
53
|
+
async getAllEvents() {
|
|
54
|
+
const db = await this.dbPromise;
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
const tx = db.transaction(legacyStoreName, 'readonly');
|
|
57
|
+
const store = tx.objectStore(legacyStoreName);
|
|
58
|
+
const request = store.getAll();
|
|
59
|
+
request.onsuccess = () => {
|
|
60
|
+
const events = request.result.map((record) => record.event);
|
|
61
|
+
resolve(events);
|
|
62
|
+
};
|
|
63
|
+
request.onerror = () => reject(request.error);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @deprecated Prefer `clearTab(tabId)`.
|
|
68
|
+
*/
|
|
69
|
+
async clearEvents() {
|
|
70
|
+
const db = await this.dbPromise;
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
73
|
+
const store = tx.objectStore(legacyStoreName);
|
|
74
|
+
store.clear();
|
|
75
|
+
tx.oncomplete = () => resolve();
|
|
76
|
+
tx.onerror = () => reject(tx.error);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
async setAttrs(attrs) {
|
|
80
|
+
var _a;
|
|
81
|
+
const db = await this.dbPromise;
|
|
82
|
+
const payload = {
|
|
83
|
+
...attrs,
|
|
84
|
+
updatedAt: (_a = attrs.updatedAt) !== null && _a !== void 0 ? _a : Date.now(),
|
|
85
|
+
};
|
|
86
|
+
return new Promise((resolve, reject) => {
|
|
87
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
88
|
+
tx.objectStore(attrsStore).put(payload);
|
|
89
|
+
tx.oncomplete = () => resolve();
|
|
90
|
+
tx.onerror = () => reject(tx.error);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async getAttrs(tabId) {
|
|
94
|
+
const db = await this.dbPromise;
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
97
|
+
const request = tx.objectStore(attrsStore).get(tabId);
|
|
98
|
+
request.onsuccess = () => resolve(request.result || null);
|
|
99
|
+
request.onerror = () => reject(request.error);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async getAllAttrs() {
|
|
103
|
+
const db = await this.dbPromise;
|
|
104
|
+
return new Promise((resolve, reject) => {
|
|
105
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
106
|
+
const request = tx.objectStore(attrsStore).getAll();
|
|
107
|
+
request.onsuccess = () => resolve(request.result || []);
|
|
108
|
+
request.onerror = () => reject(request.error);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Updates `updatedAt` for the tab without clobbering existing attributes.
|
|
113
|
+
*/
|
|
114
|
+
async touchTab(tabId, updatedAt = Date.now()) {
|
|
115
|
+
const db = await this.dbPromise;
|
|
116
|
+
return new Promise((resolve, reject) => {
|
|
117
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
118
|
+
const store = tx.objectStore(attrsStore);
|
|
119
|
+
const getReq = store.get(tabId);
|
|
120
|
+
getReq.onsuccess = () => {
|
|
121
|
+
const existing = (getReq.result || null);
|
|
122
|
+
const next = existing
|
|
123
|
+
? { ...existing, updatedAt }
|
|
124
|
+
: { tabId, updatedAt };
|
|
125
|
+
store.put(next);
|
|
126
|
+
};
|
|
127
|
+
getReq.onerror = () => reject(getReq.error);
|
|
128
|
+
tx.oncomplete = () => resolve();
|
|
129
|
+
tx.onerror = () => reject(tx.error);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Best-effort garbage collection for orphaned tabs.
|
|
134
|
+
* Deletes all data for tabs whose `attrs.updatedAt` is older than `maxAgeMs`.
|
|
135
|
+
*/
|
|
136
|
+
async sweepStaleTabs(maxAgeMs, now = Date.now()) {
|
|
137
|
+
const attrs = await this.getAllAttrs().catch(() => []);
|
|
138
|
+
if (!attrs.length)
|
|
139
|
+
return 0;
|
|
140
|
+
const stale = attrs
|
|
141
|
+
.filter((a) => typeof (a === null || a === void 0 ? void 0 : a.updatedAt) === 'number' && now - a.updatedAt > maxAgeMs)
|
|
142
|
+
.map((a) => a.tabId);
|
|
143
|
+
let cleared = 0;
|
|
144
|
+
for (const tabId of stale) {
|
|
145
|
+
try {
|
|
146
|
+
await this.clearTab(tabId);
|
|
147
|
+
cleared += 1;
|
|
148
|
+
}
|
|
149
|
+
catch (_e) {
|
|
150
|
+
// best effort
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return cleared;
|
|
154
|
+
}
|
|
155
|
+
async appendRrwebEvent(record) {
|
|
156
|
+
const db = await this.dbPromise;
|
|
157
|
+
return new Promise((resolve, reject) => {
|
|
158
|
+
const tx = db.transaction(rrwebEventsStore, 'readwrite');
|
|
159
|
+
tx.objectStore(rrwebEventsStore).add(record);
|
|
160
|
+
tx.oncomplete = () => resolve();
|
|
161
|
+
tx.onerror = () => reject(tx.error);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
async appendOtelSpan(record) {
|
|
165
|
+
const db = await this.dbPromise;
|
|
166
|
+
return new Promise((resolve, reject) => {
|
|
167
|
+
const tx = db.transaction(otelSpansStore, 'readwrite');
|
|
168
|
+
tx.objectStore(otelSpansStore).add(record);
|
|
169
|
+
tx.oncomplete = () => resolve();
|
|
170
|
+
tx.onerror = () => reject(tx.error);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
async getRrwebEventsWindow(tabId, fromTs, toTs) {
|
|
174
|
+
const db = await this.dbPromise;
|
|
175
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
176
|
+
return new Promise((resolve, reject) => {
|
|
177
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
178
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
179
|
+
const req = idx.getAll(range);
|
|
180
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
181
|
+
req.onerror = () => reject(req.error);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Returns the last (highest-ts) FullSnapshot record at/before `cutoffTs`.
|
|
186
|
+
* Used to keep a replayable anchor when pruning.
|
|
187
|
+
*/
|
|
188
|
+
async getLastRrwebFullSnapshotBefore(tabId, cutoffTs) {
|
|
189
|
+
const db = await this.dbPromise;
|
|
190
|
+
const range = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
191
|
+
return new Promise((resolve, reject) => {
|
|
192
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
193
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
194
|
+
const req = idx.openCursor(range, 'prev');
|
|
195
|
+
req.onsuccess = () => {
|
|
196
|
+
const cursor = req.result;
|
|
197
|
+
if (!cursor) {
|
|
198
|
+
resolve(null);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const value = cursor.value;
|
|
202
|
+
if (value === null || value === void 0 ? void 0 : value.isFullSnapshot) {
|
|
203
|
+
resolve(value);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
cursor.continue();
|
|
207
|
+
};
|
|
208
|
+
req.onerror = () => reject(req.error);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
async getOtelSpansWindow(tabId, fromTs, toTs) {
|
|
212
|
+
const db = await this.dbPromise;
|
|
213
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
214
|
+
return new Promise((resolve, reject) => {
|
|
215
|
+
const tx = db.transaction(otelSpansStore, 'readonly');
|
|
216
|
+
const idx = tx.objectStore(otelSpansStore).index('tabId_ts');
|
|
217
|
+
const req = idx.getAll(range);
|
|
218
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
219
|
+
req.onerror = () => reject(req.error);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
async pruneOlderThan(tabId, cutoffTs) {
|
|
223
|
+
const db = await this.dbPromise;
|
|
224
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
225
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
226
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
227
|
+
const idx = store.index('tabId_ts');
|
|
228
|
+
const req = idx.openCursor(range);
|
|
229
|
+
req.onsuccess = () => {
|
|
230
|
+
const cursor = req.result;
|
|
231
|
+
if (!cursor) {
|
|
232
|
+
resolve();
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
cursor.delete();
|
|
236
|
+
cursor.continue();
|
|
237
|
+
};
|
|
238
|
+
req.onerror = () => reject(req.error);
|
|
239
|
+
});
|
|
240
|
+
return new Promise((resolve, reject) => {
|
|
241
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
242
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
243
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
244
|
+
Promise.all([
|
|
245
|
+
pruneStore(rrwebStore, rrwebRange),
|
|
246
|
+
pruneStore(spanStore, spansRange),
|
|
247
|
+
]).then(() => {
|
|
248
|
+
// noop; completion is signaled by tx.oncomplete
|
|
249
|
+
}).catch((e) => {
|
|
250
|
+
reject(e);
|
|
251
|
+
});
|
|
252
|
+
tx.oncomplete = () => resolve();
|
|
253
|
+
tx.onerror = () => reject(tx.error);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Prune older data while keeping rrweb replayability:
|
|
258
|
+
* - rrweb: keep the last FullSnapshot at/before cutoff as an "anchor"
|
|
259
|
+
* - spans: prune strictly by cutoff
|
|
260
|
+
*/
|
|
261
|
+
async pruneOlderThanWithRrwebSnapshotAnchor(tabId, cutoffTs) {
|
|
262
|
+
const db = await this.dbPromise;
|
|
263
|
+
const anchor = await this.getLastRrwebFullSnapshotBefore(tabId, cutoffTs);
|
|
264
|
+
// rrweb: delete everything strictly older than the anchor snapshot (keep the anchor itself)
|
|
265
|
+
// spans: delete everything older than cutoffTs
|
|
266
|
+
const rrwebCutoffTs = typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? Math.max(0, anchor.ts - 1) : cutoffTs;
|
|
267
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, rrwebCutoffTs]);
|
|
268
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
269
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
270
|
+
const idx = store.index('tabId_ts');
|
|
271
|
+
const req = idx.openCursor(range);
|
|
272
|
+
req.onsuccess = () => {
|
|
273
|
+
const cursor = req.result;
|
|
274
|
+
if (!cursor) {
|
|
275
|
+
resolve();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
cursor.delete();
|
|
279
|
+
cursor.continue();
|
|
280
|
+
};
|
|
281
|
+
req.onerror = () => reject(req.error);
|
|
282
|
+
});
|
|
283
|
+
return new Promise((resolve, reject) => {
|
|
284
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
285
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
286
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
287
|
+
Promise.all([
|
|
288
|
+
pruneStore(rrwebStore, rrwebRange),
|
|
289
|
+
pruneStore(spanStore, spansRange),
|
|
290
|
+
]).then(() => {
|
|
291
|
+
// noop
|
|
292
|
+
}).catch((e) => reject(e));
|
|
293
|
+
tx.oncomplete = () => resolve();
|
|
294
|
+
tx.onerror = () => reject(tx.error);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
async clearTab(tabId) {
|
|
298
|
+
const db = await this.dbPromise;
|
|
299
|
+
const allRange = IDBKeyRange.bound([tabId, 0], [tabId, Number.MAX_SAFE_INTEGER]);
|
|
300
|
+
const clearByTab = (store) => new Promise((resolve, reject) => {
|
|
301
|
+
const idx = store.index('tabId_ts');
|
|
302
|
+
const req = idx.openCursor(allRange);
|
|
303
|
+
req.onsuccess = () => {
|
|
304
|
+
const cursor = req.result;
|
|
305
|
+
if (!cursor) {
|
|
306
|
+
resolve();
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
cursor.delete();
|
|
310
|
+
cursor.continue();
|
|
311
|
+
};
|
|
312
|
+
req.onerror = () => reject(req.error);
|
|
313
|
+
});
|
|
314
|
+
return new Promise((resolve, reject) => {
|
|
315
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore, attrsStore], 'readwrite');
|
|
316
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
317
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
318
|
+
const attr = tx.objectStore(attrsStore);
|
|
319
|
+
Promise.all([
|
|
320
|
+
clearByTab(rrwebStore),
|
|
321
|
+
clearByTab(spanStore),
|
|
322
|
+
new Promise((res, rej) => {
|
|
323
|
+
const r = attr.delete(tabId);
|
|
324
|
+
r.onsuccess = () => res();
|
|
325
|
+
r.onerror = () => rej(r.error);
|
|
326
|
+
}),
|
|
327
|
+
]).then(() => {
|
|
328
|
+
// noop
|
|
329
|
+
}).catch((e) => reject(e));
|
|
330
|
+
tx.oncomplete = () => resolve();
|
|
331
|
+
tx.onerror = () => reject(tx.error);
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=indexedDb.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexedDb.service.js","sourceRoot":"","sources":["../../src/services/indexedDb.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Observable } from 'lib0/observable';
|
|
2
|
-
import { SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP } from '../config';
|
|
2
|
+
import { SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP, SESSION_SAVE_BUFFER_EVENT } from '../config';
|
|
3
3
|
import { type ISession, type IUserAttributes } from '@multiplayer-app/session-recorder-common';
|
|
4
|
-
export type SocketServiceEvents = typeof SESSION_STOPPED_EVENT | typeof SESSION_AUTO_CREATED | typeof REMOTE_SESSION_RECORDING_START | typeof REMOTE_SESSION_RECORDING_STOP;
|
|
4
|
+
export type SocketServiceEvents = typeof SESSION_STOPPED_EVENT | typeof SESSION_AUTO_CREATED | typeof REMOTE_SESSION_RECORDING_START | typeof REMOTE_SESSION_RECORDING_STOP | typeof SESSION_SAVE_BUFFER_EVENT;
|
|
5
5
|
export interface SocketServiceOptions {
|
|
6
6
|
apiKey: string;
|
|
7
7
|
socketUrl: string;
|
|
8
8
|
keepAlive?: boolean;
|
|
9
9
|
usePostMessageFallback?: boolean;
|
|
10
|
+
clientId?: string;
|
|
10
11
|
}
|
|
11
12
|
export declare class SocketService extends Observable<SocketServiceEvents> {
|
|
12
13
|
private socket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../src/services/socket.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EAIrB,8BAA8B,EAC9B,6BAA6B,
|
|
1
|
+
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../src/services/socket.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EAIrB,8BAA8B,EAC9B,6BAA6B,EAE7B,yBAAyB,EAC1B,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EAErB,MAAM,0CAA0C,CAAA;AAKjD,MAAM,MAAM,mBAAmB,GAC3B,OAAO,qBAAqB,GAC5B,OAAO,oBAAoB,GAC3B,OAAO,8BAA8B,GACrC,OAAO,6BAA6B,GACpC,OAAO,yBAAyB,CAAA;AAEpC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,mBAAmB,CAAC;IAChE,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAiB;;IAYvC;;;OAGG;IACI,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAc/C;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IA4BjE,OAAO,CAAC,eAAe;IAwDvB,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,UAAU;IAaX,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAItB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAa3C,sBAAsB,CAAC,WAAW,CAAC,EAAE,OAAO;IAS5C,OAAO,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAIrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB9B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import io from 'socket.io-client';
|
|
2
2
|
import { Observable } from 'lib0/observable';
|
|
3
3
|
import messagingService from '../services/messaging.service';
|
|
4
|
-
import { SESSION_ADD_EVENT, SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, SESSION_SUBSCRIBE_EVENT, SESSION_UNSUBSCRIBE_EVENT, SOCKET_SET_USER_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP, SESSION_STARTED_EVENT, } from '../config';
|
|
4
|
+
import { SESSION_ADD_EVENT, SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, SESSION_SUBSCRIBE_EVENT, SESSION_UNSUBSCRIBE_EVENT, SOCKET_SET_USER_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP, SESSION_STARTED_EVENT, SESSION_SAVE_BUFFER_EVENT, } from '../config';
|
|
5
|
+
import { ATTR_MULTIPLAYER_SESSION_CLIENT_ID, } from '@multiplayer-app/session-recorder-common';
|
|
5
6
|
const MAX_RECONNECTION_ATTEMPTS = 2;
|
|
6
7
|
export class SocketService extends Observable {
|
|
7
8
|
constructor() {
|
|
@@ -70,6 +71,9 @@ export class SocketService extends Observable {
|
|
|
70
71
|
path: '/v0/radar/ws',
|
|
71
72
|
auth: {
|
|
72
73
|
'x-api-key': this.options.apiKey,
|
|
74
|
+
...this.options.clientId
|
|
75
|
+
? { [ATTR_MULTIPLAYER_SESSION_CLIENT_ID]: this.options.clientId }
|
|
76
|
+
: {},
|
|
73
77
|
},
|
|
74
78
|
reconnectionAttempts: 2,
|
|
75
79
|
transports: ['websocket'],
|
|
@@ -101,6 +105,9 @@ export class SocketService extends Observable {
|
|
|
101
105
|
this.socket.on(REMOTE_SESSION_RECORDING_STOP, (data) => {
|
|
102
106
|
this.emit(REMOTE_SESSION_RECORDING_STOP, [data]);
|
|
103
107
|
});
|
|
108
|
+
this.socket.on(SESSION_SAVE_BUFFER_EVENT, (data) => {
|
|
109
|
+
this.emit(SESSION_SAVE_BUFFER_EVENT, [data]);
|
|
110
|
+
});
|
|
104
111
|
}
|
|
105
112
|
checkReconnectionAttempts() {
|
|
106
113
|
if (this.attempts >= MAX_RECONNECTION_ATTEMPTS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.service.js","sourceRoot":"","sources":["../../src/services/socket.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,gBAAgB,MAAM,+BAA+B,CAAA;AAE5D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"socket.service.js","sourceRoot":"","sources":["../../src/services/socket.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,11 @@ export declare class SessionRecorder extends Observable<SessionRecorderEvents> i
|
|
|
12
12
|
private _sessionWidget;
|
|
13
13
|
private _navigationRecorder;
|
|
14
14
|
private _startRequestController;
|
|
15
|
+
private _tabId;
|
|
16
|
+
private _bufferDb;
|
|
17
|
+
private _crashBuffer;
|
|
18
|
+
private _isFlushingBuffer;
|
|
19
|
+
private _bufferLifecycleHandlersRegistered;
|
|
15
20
|
get navigation(): NavigationRecorderPublicApi;
|
|
16
21
|
private _isInitialized;
|
|
17
22
|
get isInitialized(): boolean;
|
|
@@ -57,6 +62,9 @@ export declare class SessionRecorder extends Observable<SessionRecorderEvents> i
|
|
|
57
62
|
* @param configs - custom configurations for session debugger
|
|
58
63
|
*/
|
|
59
64
|
init(configs: SessionRecorderOptions): void;
|
|
65
|
+
private _registerCrashBufferLifecycleHandlers;
|
|
66
|
+
private _updateCrashBufferActiveState;
|
|
67
|
+
private _startBufferOnlyRecording;
|
|
60
68
|
/**
|
|
61
69
|
* Save the continuous recording session
|
|
62
70
|
*/
|
|
@@ -106,6 +114,9 @@ export declare class SessionRecorder extends Observable<SessionRecorderEvents> i
|
|
|
106
114
|
* Capture an exception manually and send it as an error trace.
|
|
107
115
|
*/
|
|
108
116
|
captureException(error: unknown, errorInfo?: Record<string, any>): void;
|
|
117
|
+
flushBuffer(payload?: {
|
|
118
|
+
reason?: string;
|
|
119
|
+
}): Promise<any>;
|
|
109
120
|
/**
|
|
110
121
|
* @description Check if session should be started/stopped automatically
|
|
111
122
|
* @param {ISession} [sessionPayload]
|
|
@@ -170,7 +181,7 @@ export declare class SessionRecorder extends Observable<SessionRecorderEvents> i
|
|
|
170
181
|
private _resume;
|
|
171
182
|
private _setupSessionAndStart;
|
|
172
183
|
/**
|
|
173
|
-
* Set the session ID in
|
|
184
|
+
* Set the session ID in sessionStorage (with fallback)
|
|
174
185
|
* @param sessionId - the session ID to set or clear
|
|
175
186
|
*/
|
|
176
187
|
private _setSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../src/session-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EACL,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,0CAA0C,CAAA;
|
|
1
|
+
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../src/session-recorder.ts"],"names":[],"mappings":"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"}
|