@sailfish-ai/recorder 1.11.4 → 1.11.5

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.
Files changed (33) hide show
  1. package/dist/chunks/{chunkSerializer-DOaGGlCg.js → chunkSerializer-C8qtomKe.js} +1 -1
  2. package/dist/chunks/chunkSerializer-C8qtomKe.js.br +0 -0
  3. package/dist/chunks/chunkSerializer-C8qtomKe.js.gz +0 -0
  4. package/dist/chunks/{chunkSerializer-CFHDS9Vi.js → chunkSerializer-RWnu-UfC.js} +1 -1
  5. package/dist/chunks/chunkSerializer-RWnu-UfC.js.br +0 -0
  6. package/dist/chunks/chunkSerializer-RWnu-UfC.js.gz +0 -0
  7. package/dist/chunks/{index-B8IAZfT7.js → index-CIK1iDN9.js} +9 -6
  8. package/dist/chunks/index-CIK1iDN9.js.br +0 -0
  9. package/dist/chunks/index-CIK1iDN9.js.gz +0 -0
  10. package/dist/chunks/{index-DbcegHRc.js → index-DiGs9it7.js} +9 -6
  11. package/dist/chunks/index-DiGs9it7.js.br +0 -0
  12. package/dist/chunks/index-DiGs9it7.js.gz +0 -0
  13. package/dist/eventStore.js +25 -1
  14. package/dist/eventStore.js.br +0 -0
  15. package/dist/eventStore.js.gz +0 -0
  16. package/dist/recorder.cjs +1 -1
  17. package/dist/recorder.cjs.br +0 -0
  18. package/dist/recorder.cjs.gz +0 -0
  19. package/dist/recorder.js +1 -1
  20. package/dist/recorder.js.br +0 -0
  21. package/dist/recorder.js.gz +0 -0
  22. package/dist/recorder.umd.cjs +8 -5
  23. package/dist/recorder.umd.cjs.br +0 -0
  24. package/dist/recorder.umd.cjs.gz +0 -0
  25. package/package.json +1 -1
  26. package/dist/chunks/chunkSerializer-CFHDS9Vi.js.br +0 -0
  27. package/dist/chunks/chunkSerializer-CFHDS9Vi.js.gz +0 -0
  28. package/dist/chunks/chunkSerializer-DOaGGlCg.js.br +0 -0
  29. package/dist/chunks/chunkSerializer-DOaGGlCg.js.gz +0 -0
  30. package/dist/chunks/index-B8IAZfT7.js.br +0 -0
  31. package/dist/chunks/index-B8IAZfT7.js.gz +0 -0
  32. package/dist/chunks/index-DbcegHRc.js.br +0 -0
  33. package/dist/chunks/index-DbcegHRc.js.gz +0 -0
@@ -1,4 +1,4 @@
1
- import { y as e } from "./index-B8IAZfT7.js";
1
+ import { y as e } from "./index-CIK1iDN9.js";
2
2
  async function chunkedSnapshot(t, n, o = {}) {
3
3
  const s = o.chunkSize ?? 500, r = o.maxChunkMs ?? 16, { blockClass: c, blockSelector: a, maskTextClass: i, maskTextSelector: d } = o;
4
4
  let u = 100001, l = 0, N = performance.now();
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const e = require("./index-DbcegHRc.js");
3
+ const e = require("./index-DiGs9it7.js");
4
4
  exports.chunkedSnapshot = async function chunkedSnapshot(t, n, o = {}) {
5
5
  const s = o.chunkSize ?? 500, r = o.maxChunkMs ?? 16, { blockClass: c, blockSelector: a, maskTextClass: i, maskTextSelector: d } = o;
6
6
  let u = 100001, l = 0, N = performance.now();
@@ -292,10 +292,13 @@ async function flushBufferedEvents() {
292
292
  T = (async () => {
293
293
  var _a, _b;
294
294
  const e2 = await (async function getAllIndexedEvents() {
295
- return await withStore$1("readonly", (e3) => new Promise((t3) => {
296
- const n2 = e3.getAll();
297
- n2.onsuccess = () => t3(n2.result), n2.onerror = () => t3([]);
298
- })) ?? [];
295
+ const e3 = await withStore$1("readonly", (e4) => new Promise((t4) => {
296
+ const n3 = e4.getAll();
297
+ n3.onsuccess = () => t4(n3.result), n3.onerror = () => t4([]);
298
+ })) ?? [], t3 = Date.now(), n2 = [], i2 = [];
299
+ for (const o2 of e3) "number" == typeof (o2 == null ? void 0 : o2.timestamp) && t3 - o2.timestamp >= 864e5 ? "number" == typeof o2.id && i2.push(o2.id) : n2.push(o2);
300
+ return i2.length > 0 && deleteEventsByIds(i2).catch(() => {
301
+ }), n2;
299
302
  })(), t2 = {};
300
303
  for (const n2 of e2) {
301
304
  const e3 = ((_b = (_a = n2 == null ? void 0 : n2.data) == null ? void 0 : _a.data) == null ? void 0 : _b.sessionId) ?? "unknown-session";
@@ -370,7 +373,7 @@ function initializeWebSocket(t2, n2, i2, o2, a2 = false) {
370
373
  const t3 = new URL(e2);
371
374
  return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
372
375
  })(t2);
373
- let r2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.4`;
376
+ let r2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.5`;
374
377
  if (o2 && (r2 += `&envValue=${encodeURIComponent(o2)}`), k = a2 ? (function tryCreateWsWorker() {
375
378
  if ("undefined" == typeof Worker) return null;
376
379
  try {
@@ -718,7 +721,7 @@ async function initializeRecording(e2, n2, i2, o2, a2, s2 = true, r2 = false, l2
718
721
  }
719
722
  const { record: n4 } = await import("@sailfish-rrweb/rrweb-record-only");
720
723
  if (J = n4, await yieldToMain(), l2) {
721
- const { chunkedSnapshot: i3 } = await import("./chunkSerializer-DOaGGlCg.js"), o3 = n4.mirror;
724
+ const { chunkedSnapshot: i3 } = await import("./chunkSerializer-C8qtomKe.js"), o3 = n4.mirror;
722
725
  let a3 = true;
723
726
  const s3 = [];
724
727
  n4({ emit(e3) {
Binary file
Binary file
@@ -313,10 +313,13 @@ async function flushBufferedEvents() {
313
313
  I = (async () => {
314
314
  var _a, _b;
315
315
  const e2 = await (async function getAllIndexedEvents() {
316
- return await withStore$1("readonly", (e3) => new Promise((t3) => {
317
- const n2 = e3.getAll();
318
- n2.onsuccess = () => t3(n2.result), n2.onerror = () => t3([]);
319
- })) ?? [];
316
+ const e3 = await withStore$1("readonly", (e4) => new Promise((t4) => {
317
+ const n3 = e4.getAll();
318
+ n3.onsuccess = () => t4(n3.result), n3.onerror = () => t4([]);
319
+ })) ?? [], t3 = Date.now(), n2 = [], i2 = [];
320
+ for (const o2 of e3) "number" == typeof (o2 == null ? void 0 : o2.timestamp) && t3 - o2.timestamp >= 864e5 ? "number" == typeof o2.id && i2.push(o2.id) : n2.push(o2);
321
+ return i2.length > 0 && deleteEventsByIds(i2).catch(() => {
322
+ }), n2;
320
323
  })(), t2 = {};
321
324
  for (const n2 of e2) {
322
325
  const e3 = ((_b = (_a = n2 == null ? void 0 : n2.data) == null ? void 0 : _a.data) == null ? void 0 : _b.sessionId) ?? "unknown-session";
@@ -391,7 +394,7 @@ function initializeWebSocket(t2, n2, i2, o2, r2 = false) {
391
394
  const t3 = new URL(e2);
392
395
  return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
393
396
  })(t2);
394
- let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.4`;
397
+ let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.5`;
395
398
  if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), w = r2 ? (function tryCreateWsWorker() {
396
399
  if ("undefined" == typeof Worker) return null;
397
400
  try {
@@ -728,7 +731,7 @@ async function initializeRecording(e2, n2, i2, o2, r2, s2 = true, a2 = false, l2
728
731
  }
729
732
  const { record: n4 } = await import("@sailfish-rrweb/rrweb-record-only");
730
733
  if (Q = n4, await yieldToMain(), l2) {
731
- const { chunkedSnapshot: i3 } = await Promise.resolve().then(() => require("./chunkSerializer-CFHDS9Vi.js")), o3 = n4.mirror;
734
+ const { chunkedSnapshot: i3 } = await Promise.resolve().then(() => require("./chunkSerializer-RWnu-UfC.js")), o3 = n4.mirror;
732
735
  let r3 = true;
733
736
  const s3 = [];
734
737
  n4({ emit(e3) {
Binary file
Binary file
@@ -4,6 +4,10 @@
4
4
  const DB_NAME = "leapsEventDB";
5
5
  const STORE_NAME = "recordingEvents";
6
6
  const DB_VERSION = 1;
7
+ // HIPAA MVP: bound at-rest exposure of buffered session events. 24h chosen
8
+ // to allow long offline windows but not indefinite retention; expired
9
+ // records are filtered out at read time and deleted asynchronously.
10
+ const EVENT_TTL_MS = 24 * 60 * 60 * 1000;
7
11
  // Cached open promise; never created on SSR
8
12
  let _dbPromise = null;
9
13
  // Narrow, safe feature check (no throws in weird runtimes)
@@ -85,7 +89,27 @@ export async function getAllIndexedEvents() {
85
89
  req.onerror = () => resolve([]);
86
90
  });
87
91
  });
88
- return result ?? []; // SSR/Edge → []
92
+ const all = result ?? []; // SSR/Edge → []
93
+ // HIPAA MVP TTL filter: drop records older than EVENT_TTL_MS at read time
94
+ // and schedule background deletion of the stale IDs. Done after we
95
+ // have the full list so we don't block the read on the cleanup write.
96
+ const now = Date.now();
97
+ const fresh = [];
98
+ const staleIds = [];
99
+ for (const ev of all) {
100
+ if (typeof ev?.timestamp === "number" && now - ev.timestamp >= EVENT_TTL_MS) {
101
+ if (typeof ev.id === "number")
102
+ staleIds.push(ev.id);
103
+ }
104
+ else {
105
+ fresh.push(ev);
106
+ }
107
+ }
108
+ if (staleIds.length > 0) {
109
+ // Fire-and-forget: don't await; don't surface errors.
110
+ void deleteEventsByIds(staleIds).catch(() => { });
111
+ }
112
+ return fresh;
89
113
  }
90
114
  export async function deleteEventById(id) {
91
115
  await withStore("readwrite", (store) => {
Binary file
Binary file
package/dist/recorder.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const e = require("./chunks/index-DbcegHRc.js");
3
+ const e = require("./chunks/index-DiGs9it7.js");
4
4
  exports.DEFAULT_CAPTURE_SETTINGS = e.DEFAULT_CAPTURE_SETTINGS, exports.DEFAULT_CONSOLE_RECORDING_SETTINGS = e.DEFAULT_CONSOLE_RECORDING_SETTINGS, exports.STORAGE_VERSION = e.STORAGE_VERSION, exports.addOrUpdateMetadata = e.addOrUpdateMetadata, exports.buildBatches = e.buildBatches, exports.clearStaleFuncSpanState = e.clearStaleFuncSpanState, exports.createSkipHeadersPropagationChecker = e.createSkipHeadersPropagationChecker, exports.createTriageAndIssueFromRecorder = e.createTriageAndIssueFromRecorder, exports.createTriageFromRecorder = e.createTriageFromRecorder, exports.disableFunctionSpanTracking = e.disableFunctionSpanTracking, exports.enableFunctionSpanTracking = e.enableFunctionSpanTracking, exports.ensureHrefCache = e.ensureHrefCache, exports.eventSize = e.eventSize, exports.fetchAndSendIp = e.fetchAndSendIp, exports.fetchCaptureSettings = e.fetchCaptureSettings, exports.fetchEngineeringTicketPlatformIntegrations = e.fetchEngineeringTicketPlatformIntegrations, exports.fetchFunctionSpanTrackingEnabled = e.fetchFunctionSpanTrackingEnabled, exports.flushBufferedEvents = e.flushBufferedEvents, exports.getCachedHref = e.getCachedHref, exports.getCachedHrefNoQuery = e.getCachedHrefNoQuery, exports.getFuncSpanHeader = e.getFuncSpanHeader, exports.getIdentifiedUser = e.getIdentifiedUser, exports.getOrSetSessionId = e.getOrSetSessionId, exports.getUrlAndStoredUuids = e.getUrlAndStoredUuids, exports.identify = e.identify, exports.initRecorder = e.initRecorder, exports.initializeConsolePlugin = e.initializeConsolePlugin, exports.initializeDomContentEvents = e.initializeDomContentEvents, exports.initializeFunctionSpanTrackingFromApi = e.initializeFunctionSpanTrackingFromApi, exports.initializePerformancePlugin = e.initializePerformancePlugin, exports.initializeRecording = e.initializeRecording, exports.initializeWebSocket = e.initializeWebSocket, exports.invalidateUrlCache = e.invalidateUrlCache, exports.isFunctionSpanTrackingEnabled = e.isFunctionSpanTrackingEnabled, exports.matchUrlWithWildcard = e.matchUrlWithWildcard, Object.defineProperty(exports, "nowTimestamp", { enumerable: true, get: () => e.nowTimestamp }), exports.onNavigationChange = e.onNavigationChange, exports.openReportIssueModal = e.openReportIssueModal, exports.restoreFuncSpanState = e.restoreFuncSpanState, exports.sendDomainsToNotPropagateHeaderTo = e.sendDomainsToNotPropagateHeaderTo, exports.sendEvent = e.sendEvent, exports.sendGraphQLRequest = e.sendGraphQLRequest, exports.sendMessage = e.sendMessage, exports.startRecording = e.startRecording, exports.startRecordingSession = e.startRecordingSession, exports.trackingEvent = e.trackingEvent, exports.withAppUrlMetadata = e.withAppUrlMetadata;
Binary file
Binary file
package/dist/recorder.js CHANGED
@@ -1,4 +1,4 @@
1
- import { D, a, S, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, z, A, B, C, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, T, U, V } from "./chunks/index-B8IAZfT7.js";
1
+ import { D, a, S, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, z, A, B, C, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, T, U, V } from "./chunks/index-CIK1iDN9.js";
2
2
  export {
3
3
  D as DEFAULT_CAPTURE_SETTINGS,
4
4
  a as DEFAULT_CONSOLE_RECORDING_SETTINGS,
Binary file
Binary file
@@ -515,10 +515,13 @@
515
515
  pe = (async () => {
516
516
  var _a2, _b;
517
517
  const e2 = await (async function getAllIndexedEvents() {
518
- return await withStore$1("readonly", (e3) => new Promise((w3) => {
519
- const C2 = e3.getAll();
520
- C2.onsuccess = () => w3(C2.result), C2.onerror = () => w3([]);
521
- })) ?? [];
518
+ const e3 = await withStore$1("readonly", (e4) => new Promise((w4) => {
519
+ const C3 = e4.getAll();
520
+ C3.onsuccess = () => w4(C3.result), C3.onerror = () => w4([]);
521
+ })) ?? [], w3 = Date.now(), C2 = [], x2 = [];
522
+ for (const I2 of e3) "number" == typeof (I2 == null ? void 0 : I2.timestamp) && w3 - I2.timestamp >= 864e5 ? "number" == typeof I2.id && x2.push(I2.id) : C2.push(I2);
523
+ return x2.length > 0 && deleteEventsByIds(x2).catch(() => {
524
+ }), C2;
522
525
  })(), w2 = {};
523
526
  for (const C2 of e2) {
524
527
  const e3 = ((_b = (_a2 = C2 == null ? void 0 : C2.data) == null ? void 0 : _a2.data) == null ? void 0 : _b.sessionId) ?? "unknown-session";
@@ -593,7 +596,7 @@
593
596
  const w3 = new URL(e3);
594
597
  return `${w3.hostname}${w3.port ? `:${w3.port}` : ""}`;
595
598
  })(e2);
596
- let _2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${M2}/ws/notify/?apiKey=${w2}&sessionId=${C2}&sender=JS%2FTS&version=1.11.4`;
599
+ let _2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${M2}/ws/notify/?apiKey=${w2}&sessionId=${C2}&sender=JS%2FTS&version=1.11.5`;
597
600
  if (x2 && (_2 += `&envValue=${encodeURIComponent(x2)}`), le = I2 ? (function tryCreateWsWorker() {
598
601
  if ("undefined" == typeof Worker) return null;
599
602
  try {
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sailfish-ai/recorder",
3
- "version": "1.11.4",
3
+ "version": "1.11.5",
4
4
  "publishPublicly": true,
5
5
  "publishToCdn": {
6
6
  "jsdelivr": true,
Binary file
Binary file
Binary file
Binary file