@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
package/dist/rrweb/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rrweb/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rrweb/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { IndexedDBService } from './indexedDb.service';
|
|
2
|
+
export type CrashBufferSnapshot = {
|
|
3
|
+
rrwebEvents: Array<{
|
|
4
|
+
ts: number;
|
|
5
|
+
isFullSnapshot?: boolean;
|
|
6
|
+
event: any;
|
|
7
|
+
}>;
|
|
8
|
+
otelSpans: Array<{
|
|
9
|
+
ts: number;
|
|
10
|
+
span: any;
|
|
11
|
+
}>;
|
|
12
|
+
attrs: {
|
|
13
|
+
sessionAttributes?: Record<string, any>;
|
|
14
|
+
resourceAttributes?: Record<string, any>;
|
|
15
|
+
userAttributes?: any;
|
|
16
|
+
} | null;
|
|
17
|
+
windowMs: number;
|
|
18
|
+
fromTs: number;
|
|
19
|
+
toTs: number;
|
|
20
|
+
};
|
|
21
|
+
export declare class CrashBufferService {
|
|
22
|
+
private readonly db;
|
|
23
|
+
private readonly tabId;
|
|
24
|
+
private readonly windowMs;
|
|
25
|
+
private lastPruneAt;
|
|
26
|
+
private pruneInFlight;
|
|
27
|
+
private isActive;
|
|
28
|
+
private frozenAtTs;
|
|
29
|
+
private lastSeenEventTs;
|
|
30
|
+
private requiresFullSnapshot;
|
|
31
|
+
private lastTouchAt;
|
|
32
|
+
constructor(db: IndexedDBService, tabId: string, windowMs: number);
|
|
33
|
+
private _safe;
|
|
34
|
+
setAttrs(attrs: {
|
|
35
|
+
sessionAttributes?: Record<string, any>;
|
|
36
|
+
resourceAttributes?: Record<string, any>;
|
|
37
|
+
userAttributes?: any;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
appendRrwebEvent(payload: {
|
|
40
|
+
ts: number;
|
|
41
|
+
isFullSnapshot?: boolean;
|
|
42
|
+
event: any;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
appendOtelSpan(payload: {
|
|
45
|
+
ts: number;
|
|
46
|
+
span: any;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
snapshot(now?: number): Promise<CrashBufferSnapshot>;
|
|
49
|
+
clear(): Promise<void>;
|
|
50
|
+
needsFullSnapshot(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Mark the tab as active/inactive.
|
|
53
|
+
*
|
|
54
|
+
* - When inactive, we freeze the buffer and keep the last active `windowMs` indefinitely.
|
|
55
|
+
* - When re-activated, we resume buffering but require a new FullSnapshot to start a replayable segment.
|
|
56
|
+
*/
|
|
57
|
+
setActive(active: boolean): void;
|
|
58
|
+
private pruneSoon;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=crashBuffer.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crashBuffer.service.d.ts","sourceRoot":"","sources":["../../src/services/crashBuffer.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IACxE,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;IAC3C,KAAK,EAAE;QACL,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,cAAc,CAAC,EAAE,GAAG,CAAA;KACrB,GAAG,IAAI,CAAA;IACR,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,qBAAa,kBAAkB;IAU3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX3B,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,eAAe,CAAY;IACnC,OAAO,CAAC,oBAAoB,CAAO;IACnC,OAAO,CAAC,WAAW,CAAI;gBAGJ,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM;YAGrB,KAAK;IAQb,QAAQ,CAAC,KAAK,EAAE;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACxC,cAAc,CAAC,EAAE,GAAG,CAAA;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IASX,gBAAgB,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B9F,cAAc,CAAC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,QAAQ,CAAC,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6ChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,iBAAiB,IAAI,OAAO;IAI5B;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAsBhC,OAAO,CAAC,SAAS;CAkBlB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
export class CrashBufferService {
|
|
2
|
+
constructor(db, tabId, windowMs) {
|
|
3
|
+
this.db = db;
|
|
4
|
+
this.tabId = tabId;
|
|
5
|
+
this.windowMs = windowMs;
|
|
6
|
+
this.lastPruneAt = 0;
|
|
7
|
+
this.pruneInFlight = null;
|
|
8
|
+
this.isActive = true;
|
|
9
|
+
this.frozenAtTs = null;
|
|
10
|
+
this.lastSeenEventTs = 0;
|
|
11
|
+
this.requiresFullSnapshot = true;
|
|
12
|
+
this.lastTouchAt = 0;
|
|
13
|
+
}
|
|
14
|
+
async _safe(fn, fallback) {
|
|
15
|
+
try {
|
|
16
|
+
return await fn();
|
|
17
|
+
}
|
|
18
|
+
catch (_e) {
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async setAttrs(attrs) {
|
|
23
|
+
await this._safe(async () => {
|
|
24
|
+
await this.db.setAttrs({
|
|
25
|
+
tabId: this.tabId,
|
|
26
|
+
...attrs,
|
|
27
|
+
});
|
|
28
|
+
}, undefined);
|
|
29
|
+
}
|
|
30
|
+
async appendRrwebEvent(payload) {
|
|
31
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, payload.ts || 0);
|
|
32
|
+
if (!this.isActive)
|
|
33
|
+
return;
|
|
34
|
+
const isFullSnapshot = Boolean(payload.isFullSnapshot);
|
|
35
|
+
if (this.requiresFullSnapshot && !isFullSnapshot) {
|
|
36
|
+
// Buffer must always start with a full snapshot; drop incrementals until we see one.
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await this._safe(async () => {
|
|
40
|
+
await this.db.appendRrwebEvent({
|
|
41
|
+
tabId: this.tabId,
|
|
42
|
+
ts: payload.ts,
|
|
43
|
+
isFullSnapshot: payload.isFullSnapshot,
|
|
44
|
+
event: payload.event,
|
|
45
|
+
});
|
|
46
|
+
}, undefined);
|
|
47
|
+
if (isFullSnapshot && this.requiresFullSnapshot) {
|
|
48
|
+
// Ensure this snapshot becomes the first replayable event.
|
|
49
|
+
// We keep the snapshot itself and prune everything older.
|
|
50
|
+
await this._safe(() => this.db.pruneOlderThan(this.tabId, Math.max(0, payload.ts - 1)), undefined);
|
|
51
|
+
this.requiresFullSnapshot = false;
|
|
52
|
+
}
|
|
53
|
+
else if (isFullSnapshot) {
|
|
54
|
+
this.requiresFullSnapshot = false;
|
|
55
|
+
}
|
|
56
|
+
this.pruneSoon();
|
|
57
|
+
}
|
|
58
|
+
async appendOtelSpan(payload) {
|
|
59
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, payload.ts || 0);
|
|
60
|
+
if (!this.isActive)
|
|
61
|
+
return;
|
|
62
|
+
await this._safe(async () => {
|
|
63
|
+
await this.db.appendOtelSpan({
|
|
64
|
+
tabId: this.tabId,
|
|
65
|
+
ts: payload.ts,
|
|
66
|
+
span: payload.span,
|
|
67
|
+
});
|
|
68
|
+
}, undefined);
|
|
69
|
+
this.pruneSoon();
|
|
70
|
+
}
|
|
71
|
+
async snapshot(now = Date.now()) {
|
|
72
|
+
const toTs = now;
|
|
73
|
+
const fromTs = Math.max(0, toTs - this.windowMs);
|
|
74
|
+
// Always include a full snapshot "anchor" if one exists at/before the window start.
|
|
75
|
+
const rrwebFromTs = await this._safe(async () => {
|
|
76
|
+
const anchor = await this.db.getLastRrwebFullSnapshotBefore(this.tabId, fromTs);
|
|
77
|
+
return typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? anchor.ts : fromTs;
|
|
78
|
+
}, fromTs);
|
|
79
|
+
const [rrweb, spans, attrs] = await Promise.all([
|
|
80
|
+
this._safe(() => this.db.getRrwebEventsWindow(this.tabId, rrwebFromTs, toTs), []),
|
|
81
|
+
this._safe(() => this.db.getOtelSpansWindow(this.tabId, fromTs, toTs), []),
|
|
82
|
+
this._safe(() => this.db.getAttrs(this.tabId), null),
|
|
83
|
+
]);
|
|
84
|
+
const rrwebSorted = rrweb
|
|
85
|
+
.sort((a, b) => a.ts - b.ts)
|
|
86
|
+
.map((r) => ({ ts: r.ts, isFullSnapshot: r.isFullSnapshot, event: r.event }));
|
|
87
|
+
// Hard guarantee: snapshot payload starts with a FullSnapshot (or is empty).
|
|
88
|
+
const firstFullSnapshotIdx = rrwebSorted.findIndex((e) => Boolean(e.isFullSnapshot));
|
|
89
|
+
const rrwebEvents = firstFullSnapshotIdx >= 0 ? rrwebSorted.slice(firstFullSnapshotIdx) : [];
|
|
90
|
+
// Align spans with the rrweb replay start: spans must start from the FullSnapshot timestamp.
|
|
91
|
+
const replayStartTs = rrwebEvents.length > 0 ? rrwebEvents[0].ts : fromTs;
|
|
92
|
+
const otelSpans = spans
|
|
93
|
+
.filter((s) => typeof (s === null || s === void 0 ? void 0 : s.ts) === 'number' && s.ts >= replayStartTs)
|
|
94
|
+
.sort((a, b) => a.ts - b.ts)
|
|
95
|
+
.map((r) => ({ ts: r.ts, span: r.span }));
|
|
96
|
+
return {
|
|
97
|
+
rrwebEvents,
|
|
98
|
+
otelSpans,
|
|
99
|
+
attrs: attrs ? {
|
|
100
|
+
sessionAttributes: attrs.sessionAttributes,
|
|
101
|
+
resourceAttributes: attrs.resourceAttributes,
|
|
102
|
+
userAttributes: attrs.userAttributes,
|
|
103
|
+
} : null,
|
|
104
|
+
windowMs: this.windowMs,
|
|
105
|
+
fromTs: replayStartTs,
|
|
106
|
+
toTs,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
async clear() {
|
|
110
|
+
await this._safe(() => this.db.clearTab(this.tabId), undefined);
|
|
111
|
+
this.requiresFullSnapshot = true;
|
|
112
|
+
}
|
|
113
|
+
needsFullSnapshot() {
|
|
114
|
+
return this.requiresFullSnapshot;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Mark the tab as active/inactive.
|
|
118
|
+
*
|
|
119
|
+
* - When inactive, we freeze the buffer and keep the last active `windowMs` indefinitely.
|
|
120
|
+
* - When re-activated, we resume buffering but require a new FullSnapshot to start a replayable segment.
|
|
121
|
+
*/
|
|
122
|
+
setActive(active) {
|
|
123
|
+
if (this.isActive === active)
|
|
124
|
+
return;
|
|
125
|
+
this.isActive = active;
|
|
126
|
+
if (!active) {
|
|
127
|
+
const freezeAt = this.lastSeenEventTs || Date.now();
|
|
128
|
+
this.frozenAtTs = freezeAt;
|
|
129
|
+
// Keep the last active window, but preserve rrweb replayability via snapshot anchor.
|
|
130
|
+
const cutoff = Math.max(0, freezeAt - this.windowMs);
|
|
131
|
+
void this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const wasFrozen = this.frozenAtTs !== null;
|
|
135
|
+
this.frozenAtTs = null;
|
|
136
|
+
// New active segment must start with a full snapshot (don’t stitch segments together).
|
|
137
|
+
if (wasFrozen)
|
|
138
|
+
this.requiresFullSnapshot = true;
|
|
139
|
+
this.pruneSoon();
|
|
140
|
+
}
|
|
141
|
+
pruneSoon() {
|
|
142
|
+
if (!this.isActive)
|
|
143
|
+
return;
|
|
144
|
+
const now = Date.now();
|
|
145
|
+
// Throttle pruning to avoid hammering IDB on high event rates
|
|
146
|
+
if (now - this.lastPruneAt < 2000)
|
|
147
|
+
return;
|
|
148
|
+
if (this.pruneInFlight)
|
|
149
|
+
return;
|
|
150
|
+
this.lastPruneAt = now;
|
|
151
|
+
const cutoff = Math.max(0, now - this.windowMs);
|
|
152
|
+
// Heartbeat so the stale-tab sweeper never deletes active tabs.
|
|
153
|
+
if (now - this.lastTouchAt > 30000) {
|
|
154
|
+
this.lastTouchAt = now;
|
|
155
|
+
void this._safe(() => this.db.touchTab(this.tabId, now), undefined);
|
|
156
|
+
}
|
|
157
|
+
this.pruneInFlight = this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined)
|
|
158
|
+
.finally(() => { this.pruneInFlight = null; });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=crashBuffer.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crashBuffer.service.js","sourceRoot":"","sources":["../../src/services/crashBuffer.service.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,kBAAkB;IAS7B,YACmB,EAAoB,EACpB,KAAa,EACb,QAAgB;QAFhB,OAAE,GAAF,EAAE,CAAkB;QACpB,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAQ;QAX3B,gBAAW,GAAG,CAAC,CAAA;QACf,kBAAa,GAAyB,IAAI,CAAA;QAC1C,aAAQ,GAAG,IAAI,CAAA;QACf,eAAU,GAAkB,IAAI,CAAA;QAChC,oBAAe,GAAW,CAAC,CAAA;QAC3B,yBAAoB,GAAG,IAAI,CAAA;QAC3B,gBAAW,GAAG,CAAC,CAAA;IAMnB,CAAC;IAEG,KAAK,CAAC,KAAK,CAAI,EAAoB,EAAE,QAAW;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAId;QACC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,KAAK;aACT,CAAC,CAAA;QACJ,CAAC,EAAE,SAAgB,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAA6D;QAClF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAE1B,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACtD,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,cAAc,EAAE,CAAC;YACjD,qFAAqF;YACrF,OAAM;QACR,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAA;QACJ,CAAC,EAAE,SAAgB,CAAC,CAAA;QAEpB,IAAI,cAAc,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAChD,2DAA2D;YAC3D,0DAA0D;YAC1D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,SAAgB,CAAC,CAAA;YACzG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAA;QACnC,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAA;QACnC,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAkC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;gBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAA;QACJ,CAAC,EAAE,SAAgB,CAAC,CAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,IAAI,CAAC,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,GAAG,CAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEhD,oFAAoF;QACpF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC/E,OAAO,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,EAAE,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QAC5D,CAAC,EAAE,MAAM,CAAC,CAAA;QAEV,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAC1E,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;SACrD,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,KAAK;aACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAE/E,6EAA6E;QAC7E,MAAM,oBAAoB,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;QACpF,MAAM,WAAW,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAE5F,6FAA6F;QAC7F,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QACzE,MAAM,SAAS,GAAG,KAAK;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,EAAE,CAAA,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,IAAI,aAAa,CAAC;aACjE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAE3C,OAAO;YACL,WAAW;YACX,SAAS;YACT,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACb,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,cAAc,EAAE,KAAK,CAAC,cAAc;aACrC,CAAC,CAAC,CAAC,IAAI;YACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,aAAa;YACrB,IAAI;SACL,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAgB,CAAC,CAAA;QACtE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAA;IAClC,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,oBAAoB,CAAA;IAClC,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,MAAe;QACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;YAAE,OAAM;QACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;QAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;YACnD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;YAE1B,qFAAqF;YACrF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpD,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,qCAAqC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,SAAgB,CAAC,CAAA;YAC1G,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAA;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QAEtB,uFAAuF;QACvF,IAAI,SAAS;YAAE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAA;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,8DAA8D;QAC9D,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI;YAAE,OAAM;QACzC,IAAI,IAAI,CAAC,aAAa;YAAE,OAAM;QAE9B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/C,gEAAgE;QAChE,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAM,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAA;YACtB,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAgB,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,qCAAqC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,SAAgB,CAAC;aACvH,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
type TabId = string;
|
|
2
|
+
export type CrashBufferAttrs = {
|
|
3
|
+
tabId: TabId;
|
|
4
|
+
updatedAt: number;
|
|
5
|
+
sessionAttributes?: Record<string, any>;
|
|
6
|
+
resourceAttributes?: Record<string, any>;
|
|
7
|
+
userAttributes?: any;
|
|
8
|
+
};
|
|
9
|
+
export type CrashBufferRrwebEventRecord = {
|
|
10
|
+
id?: number;
|
|
11
|
+
tabId: TabId;
|
|
12
|
+
ts: number;
|
|
13
|
+
isFullSnapshot?: boolean;
|
|
14
|
+
event: any;
|
|
15
|
+
};
|
|
16
|
+
export type CrashBufferOtelSpanRecord = {
|
|
17
|
+
id?: number;
|
|
18
|
+
tabId: TabId;
|
|
19
|
+
ts: number;
|
|
20
|
+
span: any;
|
|
21
|
+
};
|
|
22
|
+
export declare class IndexedDBService {
|
|
23
|
+
private dbPromise;
|
|
24
|
+
constructor();
|
|
25
|
+
private openDB;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Prefer `appendRrwebEvent(tabId, ...)` and `getRrwebEventsWindow(...)`.
|
|
28
|
+
* This writes into the legacy store with no pruning semantics.
|
|
29
|
+
*/
|
|
30
|
+
saveEvent(event: any): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Prefer `getRrwebEventsWindow(...)`.
|
|
33
|
+
*/
|
|
34
|
+
getAllEvents(): Promise<Array<any>>;
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Prefer `clearTab(tabId)`.
|
|
37
|
+
*/
|
|
38
|
+
clearEvents(): Promise<void>;
|
|
39
|
+
setAttrs(attrs: Omit<CrashBufferAttrs, 'updatedAt'> & {
|
|
40
|
+
updatedAt?: number;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
getAttrs(tabId: TabId): Promise<CrashBufferAttrs | null>;
|
|
43
|
+
getAllAttrs(): Promise<CrashBufferAttrs[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Updates `updatedAt` for the tab without clobbering existing attributes.
|
|
46
|
+
*/
|
|
47
|
+
touchTab(tabId: TabId, updatedAt?: number): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Best-effort garbage collection for orphaned tabs.
|
|
50
|
+
* Deletes all data for tabs whose `attrs.updatedAt` is older than `maxAgeMs`.
|
|
51
|
+
*/
|
|
52
|
+
sweepStaleTabs(maxAgeMs: number, now?: number): Promise<number>;
|
|
53
|
+
appendRrwebEvent(record: CrashBufferRrwebEventRecord): Promise<void>;
|
|
54
|
+
appendOtelSpan(record: CrashBufferOtelSpanRecord): Promise<void>;
|
|
55
|
+
getRrwebEventsWindow(tabId: TabId, fromTs: number, toTs: number): Promise<CrashBufferRrwebEventRecord[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the last (highest-ts) FullSnapshot record at/before `cutoffTs`.
|
|
58
|
+
* Used to keep a replayable anchor when pruning.
|
|
59
|
+
*/
|
|
60
|
+
getLastRrwebFullSnapshotBefore(tabId: TabId, cutoffTs: number): Promise<CrashBufferRrwebEventRecord | null>;
|
|
61
|
+
getOtelSpansWindow(tabId: TabId, fromTs: number, toTs: number): Promise<CrashBufferOtelSpanRecord[]>;
|
|
62
|
+
pruneOlderThan(tabId: TabId, cutoffTs: number): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Prune older data while keeping rrweb replayability:
|
|
65
|
+
* - rrweb: keep the last FullSnapshot at/before cutoff as an "anchor"
|
|
66
|
+
* - spans: prune strictly by cutoff
|
|
67
|
+
*/
|
|
68
|
+
pruneOlderThanWithRrwebSnapshotAnchor(tabId: TabId, cutoffTs: number): Promise<void>;
|
|
69
|
+
clearTab(tabId: TabId): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=indexedDb.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexedDb.service.d.ts","sourceRoot":"","sources":["../../src/services/indexedDb.service.ts"],"names":[],"mappings":"AASA,KAAK,KAAK,GAAG,MAAM,CAAA;AAEnB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,cAAc,CAAC,EAAE,GAAG,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,GAAG,CAAA;CACV,CAAA;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAsB;;IAMvC,OAAO,CAAC,MAAM;IA6Bd;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAezC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5F,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAUxD,WAAW,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAUhD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,GAAE,MAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3E;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB3E,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpE,cAAc,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAY9G;;;OAGG;IACG,8BAA8B,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC;IAwB3G,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAYpG,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCnE;;;;OAIG;IACG,qCAAqC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CpF,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAyC5C"}
|