ray-logger-core 0.0.2 → 0.0.4

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.
@@ -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: 2,
21
- media: 2,
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":"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"}
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, RrwebRecordOptions, 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,kBAAkB,EAClB,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
@@ -1,9 +1,10 @@
1
1
  import { record } from 'rrweb';
2
2
 
3
- const PACKAGE_NAME = '@ray-web-logger/core';
3
+ const PACKAGE_NAME = 'ray-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。 */
@@ -93,7 +94,7 @@ const INTERNAL_STACK_MARKERS = [
93
94
  'collectors\\console.ts',
94
95
  'collectors/console.js',
95
96
  'collectors\\console.js',
96
- '@ray-web-logger/core',
97
+ 'ray-logger-core',
97
98
  'packages/core/src/collectors/console',
98
99
  'packages\\core\\src\\collectors\\console',
99
100
  ];
@@ -1121,6 +1122,9 @@ class IndexedDbEventStore {
1121
1122
  static isSupported() {
1122
1123
  return typeof globalThis.indexedDB !== 'undefined';
1123
1124
  }
1125
+ static async cleanup(options = {}) {
1126
+ return cleanupIndexedDb(options);
1127
+ }
1124
1128
  async appendChunk(events) {
1125
1129
  if (events.length === 0) {
1126
1130
  return undefined;
@@ -1172,6 +1176,16 @@ class IndexedDbEventStore {
1172
1176
  .openCursor(range, 'prev');
1173
1177
  return findLatestRrwebFullSnapshotCursor(cursor, beforeMs);
1174
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
+ }
1175
1189
  async #nextChunkSeq(db) {
1176
1190
  const tx = db.transaction(EVENT_CHUNKS_STORE, 'readonly');
1177
1191
  const store = tx.objectStore(EVENT_CHUNKS_STORE);
@@ -1194,6 +1208,148 @@ class IndexedDbEventStore {
1194
1208
  return this.#dbPromise;
1195
1209
  }
1196
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
+ }
1197
1353
  function openDatabase(dbName) {
1198
1354
  return new Promise((resolve, reject) => {
1199
1355
  const request = globalThis.indexedDB.open(dbName, IDB_VERSION);
@@ -1397,6 +1553,9 @@ class WebLoggerCoreController {
1397
1553
  namespaceKey: this.namespaceKey,
1398
1554
  now: this.#now,
1399
1555
  });
1556
+ void this.#store.cleanup(this.#cleanupOptions()).catch(() => {
1557
+ // Retention cleanup is best-effort and must not block SDK startup.
1558
+ });
1400
1559
  }
1401
1560
  this.#readyPromise = this.#hydrateSeqFromIdb();
1402
1561
  this.#collectorDisposers = [
@@ -1478,6 +1637,19 @@ class WebLoggerCoreController {
1478
1637
  replayableStandalone: includesRrwebBaseline,
1479
1638
  });
1480
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
+ }
1481
1653
  destroy() {
1482
1654
  for (const dispose of this.#collectorDisposers.splice(0)) {
1483
1655
  dispose();
@@ -1538,6 +1710,21 @@ class WebLoggerCoreController {
1538
1710
  ].filter((event) => event !== undefined);
1539
1711
  return anchors.sort(compareTimelineEvents).at(-1);
1540
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
+ }
1541
1728
  }
1542
1729
  function initWebLogger(options = {}) {
1543
1730
  return new WebLoggerCoreController(options);
@@ -1565,5 +1752,5 @@ function mergeEvents(persistedEvents, memoryEvents) {
1565
1752
  return [...bySeq.values()].sort(compareTimelineEvents);
1566
1753
  }
1567
1754
 
1568
- 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 };
1569
1756
  //# sourceMappingURL=index.js.map