ray-logger-core 0.0.1 → 0.0.3

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.
@@ -1,8 +1,8 @@
1
- import type { NewWebLoggerEvent } from '../types';
1
+ import type { NewWebLoggerEvent, RrwebRecordOptions } from '../types';
2
2
  import type { CollectorDispose } from './types';
3
3
  export interface RrwebCollectorOptions {
4
4
  record(event: NewWebLoggerEvent): void;
5
- checkoutEveryNms?: number;
5
+ rrwebOptions?: RrwebRecordOptions;
6
6
  }
7
7
  export declare function installRrwebCollector(options: RrwebCollectorOptions): CollectorDispose;
8
8
  //# sourceMappingURL=rrweb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rrweb.d.ts","sourceRoot":"","sources":["../../src/collectors/rrweb.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAUD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CA6BtF"}
1
+ {"version":3,"file":"rrweb.d.ts","sourceRoot":"","sources":["../../src/collectors/rrweb.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAc,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAQD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,gBAAgB,CAwBtF"}
@@ -5,7 +5,9 @@ export function installRrwebCollector(options) {
5
5
  return noop;
6
6
  }
7
7
  try {
8
+ const rrwebOptions = mergeRrwebOptions(defaultRrwebOptions(), options.rrwebOptions);
8
9
  const stop = rrwebRecord({
10
+ ...rrwebOptions,
9
11
  emit(event) {
10
12
  options.record({
11
13
  type: 'rrweb',
@@ -15,13 +17,6 @@ export function installRrwebCollector(options) {
15
17
  },
16
18
  });
17
19
  },
18
- recordCanvas: true,
19
- sampling: {
20
- canvas: 4,
21
- media: 4,
22
- },
23
- collectFonts: true,
24
- checkoutEveryNms: normalizeCheckoutEveryNms(options.checkoutEveryNms),
25
20
  });
26
21
  return stop ?? noop;
27
22
  }
@@ -32,10 +27,25 @@ export function installRrwebCollector(options) {
32
27
  function noop() {
33
28
  // noop
34
29
  }
35
- function normalizeCheckoutEveryNms(checkoutEveryNms) {
36
- if (checkoutEveryNms === undefined) {
37
- return DEFAULT_RRWEB_CHECKOUT_EVERY_NMS;
38
- }
39
- return checkoutEveryNms > 0 ? checkoutEveryNms : undefined;
30
+ function defaultRrwebOptions() {
31
+ return {
32
+ recordCanvas: true,
33
+ sampling: {
34
+ canvas: 2,
35
+ media: 2,
36
+ },
37
+ collectFonts: true,
38
+ checkoutEveryNms: DEFAULT_RRWEB_CHECKOUT_EVERY_NMS,
39
+ };
40
+ }
41
+ function mergeRrwebOptions(defaults, overrides) {
42
+ return {
43
+ ...defaults,
44
+ ...overrides,
45
+ sampling: {
46
+ ...defaults.sampling,
47
+ ...overrides?.sampling,
48
+ },
49
+ };
40
50
  }
41
51
  //# sourceMappingURL=rrweb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rrweb.js","sourceRoot":"","sources":["../../src/collectors/rrweb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAiB5D,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAI,WAAsC,CAAC;YACnD,IAAI,CAAC,KAAK;gBACR,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE;wBACP,UAAU,EAAE,KAAK;qBAClB;iBACF,CAAC,CAAC;YACL,CAAC;YACD,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE;gBACR,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;aACT;YACD,YAAY,EAAE,IAAI;YAClB,gBAAgB,EAAE,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,CAAC;SACtE,CAAC,CAAC;QAEH,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,OAAO;AACT,CAAC;AAED,SAAS,yBAAyB,CAAC,gBAAoC;IACrE,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IAED,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"rrweb.js","sourceRoot":"","sources":["../../src/collectors/rrweb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAe5D,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACpF,MAAM,IAAI,GAAI,WAAsC,CAAC;YACnD,GAAG,YAAY;YACf,IAAI,CAAC,KAAK;gBACR,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE;wBACP,UAAU,EAAE,KAAK;qBAClB;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,OAAO;AACT,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;SACT;QACD,YAAY,EAAE,IAAI;QAClB,gBAAgB,EAAE,gCAAgC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,QAA4B,EAC5B,SAAyC;IAEzC,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,SAAS;QACZ,QAAQ,EAAE;YACR,GAAG,QAAQ,CAAC,QAAQ;YACpB,GAAG,SAAS,EAAE,QAAQ;SACvB;KACF,CAAC;AACJ,CAAC"}
package/controller.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { type NewWebLoggerEvent, type SessionExport, type WebLoggerConfig, type WebLoggerController, type WebLoggerEvent } from './types';
1
+ import { cleanupIndexedDb } from './storage/idb';
2
+ import { type IndexedDbCleanupOptions, type IndexedDbCleanupResult, type NewWebLoggerEvent, type SessionExport, type WebLoggerConfig, type WebLoggerController, type WebLoggerEvent } from './types';
2
3
  export interface InitWebLoggerOptions extends WebLoggerConfig {
3
4
  sessionId?: string;
4
5
  persistentSessionId?: string;
@@ -15,8 +16,9 @@ export declare class WebLoggerCoreController implements WebLoggerController {
15
16
  flushToIdb(): Promise<void>;
16
17
  exportFull(): Promise<SessionExport>;
17
18
  exportSince(sinceMs: number): Promise<SessionExport>;
19
+ cleanupIndexedDb(options?: IndexedDbCleanupOptions): Promise<IndexedDbCleanupResult>;
18
20
  destroy(): void;
19
21
  }
20
22
  export declare function initWebLogger(options?: InitWebLoggerOptions): WebLoggerController;
21
- export { WebLoggerCoreController as InMemoryWebLoggerController };
23
+ export { cleanupIndexedDb, WebLoggerCoreController as InMemoryWebLoggerController };
22
24
  //# sourceMappingURL=controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAwB,YAAW,mBAAmB;;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC,GAAG,eAAe,CAAC;gBAYpF,OAAO,GAAE,oBAAyB;IA8C9C,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc;IAe1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAQpC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAqB1D,OAAO,IAAI,IAAI;CA4EhB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CAErF;AAED,OAAO,EAAE,uBAAuB,IAAI,2BAA2B,EAAE,CAAC"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAQA,OAAO,EAAuB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAwB,YAAW,mBAAmB;;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC,GAAG,eAAe,CAAC;gBAYpF,OAAO,GAAE,oBAAyB;IAiD9C,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc;IAe1C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B3B,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAQpC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAqBpD,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAe9F,OAAO,IAAI,IAAI;CA6FhB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CAErF;AAED,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,IAAI,2BAA2B,EAAE,CAAC"}
package/controller.js CHANGED
@@ -5,10 +5,10 @@ import { installFetchCollector } from './collectors/network/fetch';
5
5
  import { installXhrCollector } from './collectors/network/xhr';
6
6
  import { installRrwebCollector } from './collectors/rrweb';
7
7
  import { installStorageCollector } from './collectors/storage';
8
- import { IndexedDbEventStore } from './storage/idb';
8
+ import { IndexedDbEventStore, cleanupIndexedDb } from './storage/idb';
9
9
  import { resolveSession } from './session';
10
10
  import { Timeline, compareTimelineEvents, hasRrwebFullSnapshot } from './timeline';
11
- import { DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, SESSION_EXPORT_SCHEMA_VERSION, } from './types';
11
+ import { DEFAULT_INDEXED_DB_RETENTION_TTL_MS, DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, SESSION_EXPORT_SCHEMA_VERSION, } from './types';
12
12
  export class WebLoggerCoreController {
13
13
  sessionId;
14
14
  persistentSessionId;
@@ -47,6 +47,9 @@ export class WebLoggerCoreController {
47
47
  namespaceKey: this.namespaceKey,
48
48
  now: this.#now,
49
49
  });
50
+ void this.#store.cleanup(this.#cleanupOptions()).catch(() => {
51
+ // Retention cleanup is best-effort and must not block SDK startup.
52
+ });
50
53
  }
51
54
  this.#readyPromise = this.#hydrateSeqFromIdb();
52
55
  this.#collectorDisposers = [
@@ -61,7 +64,7 @@ export class WebLoggerCoreController {
61
64
  installCookieCollector({ config: this.config, record: (event) => this.record(event) }),
62
65
  installRrwebCollector({
63
66
  record: (event) => this.record(event),
64
- checkoutEveryNms: this.config.rrwebCheckoutEveryNms,
67
+ rrwebOptions: this.config.rrwebOptions,
65
68
  }),
66
69
  ];
67
70
  }
@@ -128,6 +131,19 @@ export class WebLoggerCoreController {
128
131
  replayableStandalone: includesRrwebBaseline,
129
132
  });
130
133
  }
134
+ async cleanupIndexedDb(options = {}) {
135
+ const mergedOptions = {
136
+ ...this.#cleanupOptions(),
137
+ ...options,
138
+ excludeNamespaceKeys: [
139
+ this.namespaceKey,
140
+ ...(this.#cleanupOptions().excludeNamespaceKeys ?? []),
141
+ ...(options.excludeNamespaceKeys ?? []),
142
+ ],
143
+ now: options.now ?? this.#now,
144
+ };
145
+ return this.#store ? this.#store.cleanup(mergedOptions) : cleanupIndexedDb(mergedOptions);
146
+ }
131
147
  destroy() {
132
148
  for (const dispose of this.#collectorDisposers.splice(0)) {
133
149
  dispose();
@@ -188,11 +204,26 @@ export class WebLoggerCoreController {
188
204
  ].filter((event) => event !== undefined);
189
205
  return anchors.sort(compareTimelineEvents).at(-1);
190
206
  }
207
+ #cleanupOptions() {
208
+ return {
209
+ ttlMs: this.#validRetentionTtlMs(),
210
+ maxChunks: this.config.indexedDbMaxChunks,
211
+ maxEstimatedBytes: this.config.indexedDbMaxEstimatedBytes,
212
+ excludeNamespaceKeys: [this.namespaceKey],
213
+ now: this.#now,
214
+ };
215
+ }
216
+ #validRetentionTtlMs() {
217
+ const ttlMs = this.config.indexedDbRetentionTtlMs;
218
+ return typeof ttlMs === 'number' && Number.isFinite(ttlMs) && ttlMs >= 0
219
+ ? ttlMs
220
+ : DEFAULT_INDEXED_DB_RETENTION_TTL_MS;
221
+ }
191
222
  }
192
223
  export function initWebLogger(options = {}) {
193
224
  return new WebLoggerCoreController(options);
194
225
  }
195
- export { WebLoggerCoreController as InMemoryWebLoggerController };
226
+ export { cleanupIndexedDb, WebLoggerCoreController as InMemoryWebLoggerController };
196
227
  function createSessionId() {
197
228
  if (globalThis.crypto?.randomUUID) {
198
229
  return globalThis.crypto.randomUUID();
package/controller.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,cAAc,EAAqB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EACL,mCAAmC,EACnC,oCAAoC,EACpC,6BAA6B,GAQ9B,MAAM,SAAS,CAAC;AAQjB,MAAM,OAAO,uBAAuB;IACzB,SAAS,CAAS;IAClB,mBAAmB,CAAU;IAC7B,YAAY,CAAS;IACrB,MAAM,CAAiF;IAEhG,SAAS,CAAW;IACpB,MAAM,CAAuB;IAC7B,aAAa,CAAiB;IAC9B,qBAAqB,GAAG,CAAC,CAAC;IAC1B,UAAU,GAAG,KAAK,CAAC;IACnB,IAAI,CAAe;IACnB,aAAa,CAAe;IAC5B,aAAa,CAAgB;IAC7B,mBAAmB,GAAuB,EAAE,CAAC;IAE7C,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,OAAO;YACV,yBAAyB,EACvB,OAAO,CAAC,yBAAyB,IAAI,oCAAoC;SAC5E,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU;SAC1C,CAAC,CAAC;QAEH,IAAI,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAmB,CAAC;gBACpC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,GAAG,EAAE,IAAI,CAAC,IAAI;aACf,CAAC,CAAC;YACH,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC1D,mEAAmE;YACrE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG;YACzB,uBAAuB,CAAC;gBACtB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,KAAK,KAAK;aAC/D,CAAC;YACF,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,qBAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACrF,mBAAmB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnF,uBAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACvF,sBAAsB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtF,qBAAqB,CAAC;gBACpB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACvC,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAwB;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,qBAAqB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC;YACxE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBAChC,uEAAuE;YACzE,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;aAC7B,WAAW,CAAC,aAAa,CAAC;aAC1B,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,IAAI,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QACjC,CAAC,CAAC,CAAC;QAEL,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,YAAY,CAAC;YACpD,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,IAAI,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QACrF,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE;YACzC,OAAO;YACP,cAAc,EAAE,WAAW,EAAE,GAAG;YAChC,qBAAqB;YACrB,oBAAoB,EAAE,qBAAqB;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAmC,EAAE;QAC1D,MAAM,aAAa,GAAG;YACpB,GAAG,IAAI,CAAC,eAAe,EAAE;YACzB,GAAG,OAAO;YACV,oBAAoB,EAAE;gBACpB,IAAI,CAAC,YAAY;gBACjB,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,oBAAoB,IAAI,EAAE,CAAC;gBACtD,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;aACxC;YACD,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI;SACI,CAAC;QAEpC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,aAAa,CACX,IAAsB,EACtB,MAAwB,EACxB,aAAiE,EAAE;QAEnE,OAAO;YACL,aAAa,EAAE,6BAA6B;YAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YAC/C,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE;YAC/B,MAAM;SACP,CAAC;IACJ,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,aAAa,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,UAAkD,EAAE;QAEpD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,kCAAkC,CAAC,QAAgB;QACvD,MAAM,OAAO,GAAG;YACd,MAAM,IAAI,CAAC,MAAM,EAAE,iCAAiC,CAAC,QAAQ,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,QAAQ,CAAC;SACvD,CAAC,MAAM,CAAC,CAAC,KAAK,EAA2B,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QAElE,OAAO,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,eAAe;QACb,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE;YAClC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB;YACzC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,0BAA0B;YACzD,oBAAoB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,GAAG,EAAE,IAAI,CAAC,IAAI;SACf,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC;QAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YACtE,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,mCAAmC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,IAAI,2BAA2B,EAAE,CAAC;AAEpF,SAAS,eAAe;IACtB,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAClC,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAqB;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,WAAW,CAClB,eAA0C,EAC1C,YAAuC;IAEvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEhD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACzD,CAAC"}
package/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  export { InMemoryWebLoggerController, WebLoggerCoreController, initWebLogger } from './controller';
2
2
  export type { InitWebLoggerOptions } from './controller';
3
- export { EVENT_CHUNKS_STORE, IDB_VERSION, IndexedDbEventStore, SESSION_META_STORE, } from './storage/idb';
3
+ export { EVENT_CHUNKS_STORE, IDB_VERSION, IndexedDbEventStore, SESSION_META_STORE, cleanupIndexedDb, } from './storage/idb';
4
4
  export type { EventChunkRecord, SessionMetaRecord } from './storage/idb';
5
5
  export { resolveSession } from './session';
6
6
  export type { ResolveSessionOptions, SessionState } from './session';
7
7
  export { Timeline, compareTimelineEvents } from './timeline';
8
- export { CONSOLE_CAPTURE_METHODS, DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, DEFAULT_INDEXED_DB_NAME, DEFAULT_RRWEB_CHECKOUT_EVERY_NMS, DEFAULT_SESSION_STORAGE_KEY, PACKAGE_NAME, SESSION_EXPORT_SCHEMA_VERSION, } from './types';
9
- export type { BaseWebLoggerEvent, ConsoleCaptureMethod, ConsolePayload, ConsoleStackFrame, CookieSnapshotItem, CookieSnapshotSkippedItem, CookiePayload, ErrorPayload, JsonPrimitive, JsonValue, NetworkPayload, NetworkPayloadFailed, NetworkPayloadSuccess, NewWebLoggerEvent, RrwebEvent, RrwebPayload, SerializedValue, SessionExport, StorageSnapshotSkippedItem, StoragePayload, WebLoggerConfig, WebLoggerController, WebLoggerEvent, } from './types';
8
+ export { CONSOLE_CAPTURE_METHODS, DEFAULT_INDEXED_DB_NAME, DEFAULT_INDEXED_DB_RETENTION_TTL_MS, DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, DEFAULT_RRWEB_CHECKOUT_EVERY_NMS, DEFAULT_SESSION_STORAGE_KEY, PACKAGE_NAME, SESSION_EXPORT_SCHEMA_VERSION, } from './types';
9
+ export type { BaseWebLoggerEvent, ConsoleCaptureMethod, ConsolePayload, ConsoleStackFrame, CookieSnapshotItem, CookieSnapshotSkippedItem, CookiePayload, ErrorPayload, IndexedDbCleanupOptions, IndexedDbCleanupResult, JsonPrimitive, JsonValue, NetworkPayload, NetworkPayloadFailed, NetworkPayloadSuccess, NewWebLoggerEvent, RrwebEvent, RrwebPayload, RrwebRecordOptions, SerializedValue, SessionExport, StorageSnapshotSkippedItem, StoragePayload, WebLoggerConfig, WebLoggerController, WebLoggerEvent, } from './types';
10
10
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnG,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,uBAAuB,EACvB,oCAAoC,EACpC,uBAAuB,EACvB,gCAAgC,EAChC,2BAA2B,EAC3B,YAAY,EACZ,6BAA6B,GAC9B,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnG,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mCAAmC,EACnC,oCAAoC,EACpC,gCAAgC,EAChC,2BAA2B,EAC3B,YAAY,EACZ,6BAA6B,GAC9B,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,SAAS,CAAC"}
package/index.js CHANGED
@@ -4,6 +4,7 @@ const PACKAGE_NAME = '@ray-web-logger/core';
4
4
  const SESSION_EXPORT_SCHEMA_VERSION = 1;
5
5
  const DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES = 1_048_576;
6
6
  const DEFAULT_RRWEB_CHECKOUT_EVERY_NMS = 30_000;
7
+ const DEFAULT_INDEXED_DB_RETENTION_TTL_MS = 24 * 60 * 60 * 1000;
7
8
  const DEFAULT_INDEXED_DB_NAME = 'ray-web-logger-webLogger';
8
9
  const DEFAULT_SESSION_STORAGE_KEY = '__web_logger_session__';
9
10
  /** 与规格 DevTools 对齐的 `console.*` 方法名;采集时写入 `ConsolePayload.level`,宿主无实现则跳过 patch。 */
@@ -857,7 +858,9 @@ function installRrwebCollector(options) {
857
858
  return noop$1;
858
859
  }
859
860
  try {
861
+ const rrwebOptions = mergeRrwebOptions(defaultRrwebOptions(), options.rrwebOptions);
860
862
  const stop = record({
863
+ ...rrwebOptions,
861
864
  emit(event) {
862
865
  options.record({
863
866
  type: 'rrweb',
@@ -867,13 +870,6 @@ function installRrwebCollector(options) {
867
870
  },
868
871
  });
869
872
  },
870
- recordCanvas: true,
871
- sampling: {
872
- canvas: 2,
873
- media: 2,
874
- },
875
- collectFonts: true,
876
- checkoutEveryNms: normalizeCheckoutEveryNms(options.checkoutEveryNms),
877
873
  });
878
874
  return stop ?? noop$1;
879
875
  }
@@ -884,11 +880,26 @@ function installRrwebCollector(options) {
884
880
  function noop$1() {
885
881
  // noop
886
882
  }
887
- function normalizeCheckoutEveryNms(checkoutEveryNms) {
888
- if (checkoutEveryNms === undefined) {
889
- return DEFAULT_RRWEB_CHECKOUT_EVERY_NMS;
890
- }
891
- return checkoutEveryNms > 0 ? checkoutEveryNms : undefined;
883
+ function defaultRrwebOptions() {
884
+ return {
885
+ recordCanvas: true,
886
+ sampling: {
887
+ canvas: 2,
888
+ media: 2,
889
+ },
890
+ collectFonts: true,
891
+ checkoutEveryNms: DEFAULT_RRWEB_CHECKOUT_EVERY_NMS,
892
+ };
893
+ }
894
+ function mergeRrwebOptions(defaults, overrides) {
895
+ return {
896
+ ...defaults,
897
+ ...overrides,
898
+ sampling: {
899
+ ...defaults.sampling,
900
+ ...overrides?.sampling,
901
+ },
902
+ };
892
903
  }
893
904
 
894
905
  function installStorageCollector(options) {
@@ -1111,6 +1122,9 @@ class IndexedDbEventStore {
1111
1122
  static isSupported() {
1112
1123
  return typeof globalThis.indexedDB !== 'undefined';
1113
1124
  }
1125
+ static async cleanup(options = {}) {
1126
+ return cleanupIndexedDb(options);
1127
+ }
1114
1128
  async appendChunk(events) {
1115
1129
  if (events.length === 0) {
1116
1130
  return undefined;
@@ -1162,6 +1176,16 @@ class IndexedDbEventStore {
1162
1176
  .openCursor(range, 'prev');
1163
1177
  return findLatestRrwebFullSnapshotCursor(cursor, beforeMs);
1164
1178
  }
1179
+ async cleanup(options = {}) {
1180
+ return cleanupIndexedDb({
1181
+ ...options,
1182
+ excludeNamespaceKeys: [
1183
+ this.namespaceKey,
1184
+ ...(options.excludeNamespaceKeys ?? []).filter((key) => key !== this.namespaceKey),
1185
+ ],
1186
+ now: options.now ?? this.#now,
1187
+ });
1188
+ }
1165
1189
  async #nextChunkSeq(db) {
1166
1190
  const tx = db.transaction(EVENT_CHUNKS_STORE, 'readonly');
1167
1191
  const store = tx.objectStore(EVENT_CHUNKS_STORE);
@@ -1184,6 +1208,148 @@ class IndexedDbEventStore {
1184
1208
  return this.#dbPromise;
1185
1209
  }
1186
1210
  }
1211
+ async function cleanupIndexedDb(options = {}) {
1212
+ if (!IndexedDbEventStore.isSupported()) {
1213
+ return emptyCleanupResult();
1214
+ }
1215
+ const db = await openDatabase(DEFAULT_INDEXED_DB_NAME);
1216
+ const usage = await collectNamespaceUsage(db);
1217
+ const chunksBefore = usage.reduce((total, item) => total + item.chunkCount, 0);
1218
+ const estimatedBytesBefore = usage.reduce((total, item) => total + item.estimatedBytes, 0);
1219
+ const excludeNamespaceKeys = new Set(options.excludeNamespaceKeys ?? []);
1220
+ const ttlMs = normalizeNonNegativeNumber(options.ttlMs, DEFAULT_INDEXED_DB_RETENTION_TTL_MS);
1221
+ const now = options.now?.() ?? Date.now();
1222
+ const expiresBefore = now - ttlMs;
1223
+ const deletedNamespaceKeys = [];
1224
+ const deleted = new Set();
1225
+ for (const item of usage) {
1226
+ if (!excludeNamespaceKeys.has(item.namespaceKey) && item.updatedAt < expiresBefore) {
1227
+ deleted.add(item.namespaceKey);
1228
+ }
1229
+ }
1230
+ let remaining = usage.filter((item) => !deleted.has(item.namespaceKey));
1231
+ const maxChunks = normalizeOptionalNonNegativeNumber(options.maxChunks);
1232
+ const maxEstimatedBytes = normalizeOptionalNonNegativeNumber(options.maxEstimatedBytes);
1233
+ if (maxChunks !== undefined || maxEstimatedBytes !== undefined) {
1234
+ let chunks = remaining.reduce((total, item) => total + item.chunkCount, 0);
1235
+ let estimatedBytes = remaining.reduce((total, item) => total + item.estimatedBytes, 0);
1236
+ const candidates = remaining
1237
+ .filter((item) => !excludeNamespaceKeys.has(item.namespaceKey))
1238
+ .sort((left, right) => left.updatedAt - right.updatedAt || left.namespaceKey.localeCompare(right.namespaceKey));
1239
+ for (const item of candidates) {
1240
+ const overChunks = maxChunks !== undefined && chunks > maxChunks;
1241
+ const overBytes = maxEstimatedBytes !== undefined && estimatedBytes > maxEstimatedBytes;
1242
+ if (!overChunks && !overBytes) {
1243
+ break;
1244
+ }
1245
+ deleted.add(item.namespaceKey);
1246
+ chunks -= item.chunkCount;
1247
+ estimatedBytes -= item.estimatedBytes;
1248
+ }
1249
+ remaining = usage.filter((item) => !deleted.has(item.namespaceKey));
1250
+ }
1251
+ let deletedChunks = 0;
1252
+ for (const namespaceKey of deleted) {
1253
+ const item = usage.find((entry) => entry.namespaceKey === namespaceKey);
1254
+ deletedChunks += item?.chunkCount ?? 0;
1255
+ await deleteNamespace(db, namespaceKey);
1256
+ deletedNamespaceKeys.push(namespaceKey);
1257
+ }
1258
+ const chunksAfter = remaining.reduce((total, item) => total + item.chunkCount, 0);
1259
+ const estimatedBytesAfter = remaining.reduce((total, item) => total + item.estimatedBytes, 0);
1260
+ return {
1261
+ deletedNamespaceKeys,
1262
+ deletedChunks,
1263
+ estimatedBytesBefore,
1264
+ estimatedBytesAfter,
1265
+ chunksBefore,
1266
+ chunksAfter,
1267
+ };
1268
+ }
1269
+ function emptyCleanupResult() {
1270
+ return {
1271
+ deletedNamespaceKeys: [],
1272
+ deletedChunks: 0,
1273
+ estimatedBytesBefore: 0,
1274
+ estimatedBytesAfter: 0,
1275
+ chunksBefore: 0,
1276
+ chunksAfter: 0,
1277
+ };
1278
+ }
1279
+ function normalizeNonNegativeNumber(value, fallback) {
1280
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : fallback;
1281
+ }
1282
+ function normalizeOptionalNonNegativeNumber(value) {
1283
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : undefined;
1284
+ }
1285
+ async function collectNamespaceUsage(db) {
1286
+ const meta = await collectSessionMeta(db);
1287
+ const chunks = await collectEventChunks(db);
1288
+ const byNamespace = new Map();
1289
+ for (const record of meta) {
1290
+ byNamespace.set(record.namespaceKey, {
1291
+ namespaceKey: record.namespaceKey,
1292
+ updatedAt: normalizeRecordUpdatedAt(record.updatedAt),
1293
+ chunkCount: 0,
1294
+ estimatedBytes: 0,
1295
+ });
1296
+ }
1297
+ for (const chunk of chunks) {
1298
+ const current = byNamespace.get(chunk.namespaceKey) ?? {
1299
+ namespaceKey: chunk.namespaceKey,
1300
+ updatedAt: 0,
1301
+ chunkCount: 0,
1302
+ estimatedBytes: 0,
1303
+ };
1304
+ current.chunkCount += 1;
1305
+ current.estimatedBytes += estimateChunkBytes(chunk);
1306
+ byNamespace.set(chunk.namespaceKey, current);
1307
+ }
1308
+ return [...byNamespace.values()];
1309
+ }
1310
+ function collectSessionMeta(db) {
1311
+ return collectCursorValues(db.transaction(SESSION_META_STORE, 'readonly').objectStore(SESSION_META_STORE).openCursor());
1312
+ }
1313
+ function collectEventChunks(db) {
1314
+ return collectCursorValues(db.transaction(EVENT_CHUNKS_STORE, 'readonly').objectStore(EVENT_CHUNKS_STORE).openCursor());
1315
+ }
1316
+ function collectCursorValues(request) {
1317
+ return new Promise((resolve, reject) => {
1318
+ const values = [];
1319
+ request.onerror = () => reject(request.error ?? new Error('IndexedDB cursor failed.'));
1320
+ request.onsuccess = () => {
1321
+ const cursor = request.result;
1322
+ if (!cursor) {
1323
+ resolve(values);
1324
+ return;
1325
+ }
1326
+ values.push(cursor.value);
1327
+ cursor.continue();
1328
+ };
1329
+ });
1330
+ }
1331
+ async function deleteNamespace(db, namespaceKey) {
1332
+ const tx = db.transaction([SESSION_META_STORE, EVENT_CHUNKS_STORE], 'readwrite');
1333
+ tx.objectStore(SESSION_META_STORE).delete(namespaceKey);
1334
+ const range = IDBKeyRange.bound([namespaceKey, 0], [namespaceKey, Number.MAX_SAFE_INTEGER]);
1335
+ const store = tx.objectStore(EVENT_CHUNKS_STORE);
1336
+ const request = store.openCursor(range);
1337
+ request.onsuccess = () => {
1338
+ const cursor = request.result;
1339
+ if (!cursor) {
1340
+ return;
1341
+ }
1342
+ cursor.delete();
1343
+ cursor.continue();
1344
+ };
1345
+ await transactionDone(tx);
1346
+ }
1347
+ function normalizeRecordUpdatedAt(updatedAt) {
1348
+ return Number.isFinite(updatedAt) ? updatedAt : 0;
1349
+ }
1350
+ function estimateChunkBytes(chunk) {
1351
+ return JSON.stringify(chunk.events).length * 2;
1352
+ }
1187
1353
  function openDatabase(dbName) {
1188
1354
  return new Promise((resolve, reject) => {
1189
1355
  const request = globalThis.indexedDB.open(dbName, IDB_VERSION);
@@ -1387,6 +1553,9 @@ class WebLoggerCoreController {
1387
1553
  namespaceKey: this.namespaceKey,
1388
1554
  now: this.#now,
1389
1555
  });
1556
+ void this.#store.cleanup(this.#cleanupOptions()).catch(() => {
1557
+ // Retention cleanup is best-effort and must not block SDK startup.
1558
+ });
1390
1559
  }
1391
1560
  this.#readyPromise = this.#hydrateSeqFromIdb();
1392
1561
  this.#collectorDisposers = [
@@ -1401,7 +1570,7 @@ class WebLoggerCoreController {
1401
1570
  installCookieCollector({ config: this.config, record: (event) => this.record(event) }),
1402
1571
  installRrwebCollector({
1403
1572
  record: (event) => this.record(event),
1404
- checkoutEveryNms: this.config.rrwebCheckoutEveryNms,
1573
+ rrwebOptions: this.config.rrwebOptions,
1405
1574
  }),
1406
1575
  ];
1407
1576
  }
@@ -1468,6 +1637,19 @@ class WebLoggerCoreController {
1468
1637
  replayableStandalone: includesRrwebBaseline,
1469
1638
  });
1470
1639
  }
1640
+ async cleanupIndexedDb(options = {}) {
1641
+ const mergedOptions = {
1642
+ ...this.#cleanupOptions(),
1643
+ ...options,
1644
+ excludeNamespaceKeys: [
1645
+ this.namespaceKey,
1646
+ ...(this.#cleanupOptions().excludeNamespaceKeys ?? []),
1647
+ ...(options.excludeNamespaceKeys ?? []),
1648
+ ],
1649
+ now: options.now ?? this.#now,
1650
+ };
1651
+ return this.#store ? this.#store.cleanup(mergedOptions) : cleanupIndexedDb(mergedOptions);
1652
+ }
1471
1653
  destroy() {
1472
1654
  for (const dispose of this.#collectorDisposers.splice(0)) {
1473
1655
  dispose();
@@ -1528,6 +1710,21 @@ class WebLoggerCoreController {
1528
1710
  ].filter((event) => event !== undefined);
1529
1711
  return anchors.sort(compareTimelineEvents).at(-1);
1530
1712
  }
1713
+ #cleanupOptions() {
1714
+ return {
1715
+ ttlMs: this.#validRetentionTtlMs(),
1716
+ maxChunks: this.config.indexedDbMaxChunks,
1717
+ maxEstimatedBytes: this.config.indexedDbMaxEstimatedBytes,
1718
+ excludeNamespaceKeys: [this.namespaceKey],
1719
+ now: this.#now,
1720
+ };
1721
+ }
1722
+ #validRetentionTtlMs() {
1723
+ const ttlMs = this.config.indexedDbRetentionTtlMs;
1724
+ return typeof ttlMs === 'number' && Number.isFinite(ttlMs) && ttlMs >= 0
1725
+ ? ttlMs
1726
+ : DEFAULT_INDEXED_DB_RETENTION_TTL_MS;
1727
+ }
1531
1728
  }
1532
1729
  function initWebLogger(options = {}) {
1533
1730
  return new WebLoggerCoreController(options);
@@ -1555,5 +1752,5 @@ function mergeEvents(persistedEvents, memoryEvents) {
1555
1752
  return [...bySeq.values()].sort(compareTimelineEvents);
1556
1753
  }
1557
1754
 
1558
- export { CONSOLE_CAPTURE_METHODS, DEFAULT_INDEXED_DB_NAME, DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, DEFAULT_RRWEB_CHECKOUT_EVERY_NMS, DEFAULT_SESSION_STORAGE_KEY, EVENT_CHUNKS_STORE, IDB_VERSION, WebLoggerCoreController as InMemoryWebLoggerController, IndexedDbEventStore, PACKAGE_NAME, SESSION_EXPORT_SCHEMA_VERSION, SESSION_META_STORE, Timeline, WebLoggerCoreController, compareTimelineEvents, initWebLogger, resolveSession };
1755
+ export { CONSOLE_CAPTURE_METHODS, DEFAULT_INDEXED_DB_NAME, DEFAULT_INDEXED_DB_RETENTION_TTL_MS, DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES, DEFAULT_RRWEB_CHECKOUT_EVERY_NMS, DEFAULT_SESSION_STORAGE_KEY, EVENT_CHUNKS_STORE, IDB_VERSION, WebLoggerCoreController as InMemoryWebLoggerController, IndexedDbEventStore, PACKAGE_NAME, SESSION_EXPORT_SCHEMA_VERSION, SESSION_META_STORE, Timeline, WebLoggerCoreController, cleanupIndexedDb, compareTimelineEvents, initWebLogger, resolveSession };
1559
1756
  //# sourceMappingURL=index.js.map