@sailfish-ai/recorder 1.11.1 → 1.11.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.
Files changed (49) hide show
  1. package/README.md +94 -0
  2. package/dist/chunks/{chunkSerializer-BiemuRlf.js → chunkSerializer-CV4nkb5-.js} +1 -1
  3. package/dist/chunks/chunkSerializer-CV4nkb5-.js.br +0 -0
  4. package/dist/chunks/chunkSerializer-CV4nkb5-.js.gz +0 -0
  5. package/dist/chunks/{chunkSerializer-CJQCxiLD.js → chunkSerializer-jzbHv2wf.js} +1 -1
  6. package/dist/chunks/chunkSerializer-jzbHv2wf.js.br +0 -0
  7. package/dist/chunks/chunkSerializer-jzbHv2wf.js.gz +0 -0
  8. package/dist/chunks/{index-Cfj4Epfd.js → index-BP-kNUGS.js} +80 -66
  9. package/dist/chunks/index-BP-kNUGS.js.br +0 -0
  10. package/dist/chunks/index-BP-kNUGS.js.gz +0 -0
  11. package/dist/chunks/{index-CuXHImrI.js → index-BynFTRFv.js} +51 -36
  12. package/dist/chunks/index-BynFTRFv.js.br +0 -0
  13. package/dist/chunks/index-BynFTRFv.js.gz +0 -0
  14. package/dist/chunks/rrweb-plugin-performance-record-BYWkWb25.js +188 -0
  15. package/dist/chunks/rrweb-plugin-performance-record-BYWkWb25.js.br +0 -0
  16. package/dist/chunks/rrweb-plugin-performance-record-BYWkWb25.js.gz +0 -0
  17. package/dist/chunks/rrweb-plugin-performance-record-Dekf6xUi.js +186 -0
  18. package/dist/chunks/rrweb-plugin-performance-record-Dekf6xUi.js.br +0 -0
  19. package/dist/chunks/rrweb-plugin-performance-record-Dekf6xUi.js.gz +0 -0
  20. package/dist/constants.js +1 -0
  21. package/dist/constants.js.br +0 -0
  22. package/dist/constants.js.gz +0 -0
  23. package/dist/index.js +14 -3
  24. package/dist/index.js.br +0 -0
  25. package/dist/index.js.gz +0 -0
  26. package/dist/recorder.cjs +2 -2
  27. package/dist/recorder.cjs.br +0 -0
  28. package/dist/recorder.cjs.gz +0 -0
  29. package/dist/recorder.js +19 -18
  30. package/dist/recorder.js.br +0 -0
  31. package/dist/recorder.js.gz +0 -0
  32. package/dist/recorder.umd.cjs +4980 -4788
  33. package/dist/recorder.umd.cjs.br +0 -0
  34. package/dist/recorder.umd.cjs.gz +0 -0
  35. package/dist/recording.js +31 -1
  36. package/dist/recording.js.br +0 -0
  37. package/dist/recording.js.gz +0 -0
  38. package/dist/types/constants.d.ts +1 -0
  39. package/dist/types/index.d.ts +21 -1
  40. package/dist/types/recording.d.ts +1 -0
  41. package/package.json +7 -4
  42. package/dist/chunks/chunkSerializer-BiemuRlf.js.br +0 -0
  43. package/dist/chunks/chunkSerializer-BiemuRlf.js.gz +0 -0
  44. package/dist/chunks/chunkSerializer-CJQCxiLD.js.br +0 -0
  45. package/dist/chunks/chunkSerializer-CJQCxiLD.js.gz +0 -0
  46. package/dist/chunks/index-Cfj4Epfd.js.br +0 -0
  47. package/dist/chunks/index-Cfj4Epfd.js.gz +0 -0
  48. package/dist/chunks/index-CuXHImrI.js.br +0 -0
  49. package/dist/chunks/index-CuXHImrI.js.gz +0 -0
@@ -370,7 +370,7 @@ function initializeWebSocket(t2, n2, i2, o2, s2 = false) {
370
370
  const t3 = new URL(e2);
371
371
  return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
372
372
  })(t2);
373
- let r2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${a2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.1`;
373
+ let r2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${a2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.11.3`;
374
374
  if (o2 && (r2 += `&envValue=${encodeURIComponent(o2)}`), k = s2 ? (function tryCreateWsWorker() {
375
375
  if ("undefined" == typeof Worker) return null;
376
376
  try {
@@ -661,6 +661,20 @@ function initializeDomContentEvents(e2) {
661
661
  sendEvent({ type: 24, data: { source: a }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() });
662
662
  });
663
663
  }
664
+ async function initializePerformancePlugin(e2) {
665
+ var _a;
666
+ try {
667
+ const { getRecordPerformancePlugin: t2 } = await import("./rrweb-plugin-performance-record-BYWkWb25.js");
668
+ await yieldToMain();
669
+ const n2 = t2({ getPageVisitUuid: () => sessionStorage.getItem("pageVisitUUID") });
670
+ (_a = n2.observer) == null ? void 0 : _a.call(n2, (t3) => {
671
+ const i2 = t3;
672
+ sendEvent({ type: 28, timestamp: i2.timestamp, sessionId: e2, data: { plugin: n2.name, payload: i2 }, ...getUrlAndStoredUuids() });
673
+ }, window, n2.options);
674
+ } catch (e3) {
675
+ console.warn("[Sailfish] Performance plugin failed to initialize:", e3);
676
+ }
677
+ }
664
678
  async function initializeConsolePlugin(e2, n2) {
665
679
  const { getRecordConsolePlugin: i2 } = await import("@sailfish-rrweb/rrweb-plugin-console-record");
666
680
  await yieldToMain();
@@ -704,7 +718,7 @@ async function initializeRecording(e2, n2, i2, o2, s2, a2 = true, r2 = false, l2
704
718
  }
705
719
  const { record: n4 } = await import("@sailfish-rrweb/rrweb-record-only");
706
720
  if (J = n4, await yieldToMain(), l2) {
707
- const { chunkedSnapshot: i3 } = await import("./chunkSerializer-BiemuRlf.js"), o3 = n4.mirror;
721
+ const { chunkedSnapshot: i3 } = await import("./chunkSerializer-CV4nkb5-.js"), o3 = n4.mirror;
708
722
  let s3 = true;
709
723
  const a3 = [];
710
724
  n4({ emit(e3) {
@@ -2228,9 +2242,9 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
2228
2242
  })(e3, i3, o3, d2, u2, s2, c2);
2229
2243
  } });
2230
2244
  }
2231
- async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: i2 = ["*"], domainsToNotPropagateHeaderTo: o2 = [], serviceVersion: s2, serviceIdentifier: a2, gitSha: r2, serviceAdditionalMetadata: l2, enableIpTracking: c2, captureStreamingResponseBody: d2 = true, captureResponseBodyMaxMb: u2 = 10, captureStreamPrefixKb: p2 = 64, captureStreamTimeoutMs: f2 = 1e4, enableFiberTracking: m2 = false, deferRecording: h2, deferRecordingStart: y2, chunkSnapshot: b2, useWsWorker: w2 = true, maskTextClass: v2, library: S2 }) {
2245
+ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: i2 = ["*"], domainsToNotPropagateHeaderTo: o2 = [], serviceVersion: s2, serviceIdentifier: a2, gitSha: r2, serviceAdditionalMetadata: l2, enableIpTracking: c2, captureStreamingResponseBody: d2 = true, captureResponseBodyMaxMb: u2 = 10, captureStreamPrefixKb: p2 = 64, captureStreamTimeoutMs: f2 = 1e4, enableFiberTracking: m2 = false, deferRecording: h2, deferRecordingStart: y2, chunkSnapshot: b2, useWsWorker: w2 = true, capturePerformanceMetrics: v2 = true, maskTextClass: S2, library: k2, headlessRecording: x2 = false }) {
2232
2246
  var _a, _b;
2233
- if ((function isHeadlessOrLighthouse() {
2247
+ if (!x2 && (function isHeadlessOrLighthouse() {
2234
2248
  try {
2235
2249
  if ("undefined" == typeof navigator) return false;
2236
2250
  const e3 = navigator;
@@ -2241,10 +2255,10 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2241
2255
  return false;
2242
2256
  }
2243
2257
  })()) return;
2244
- const k2 = h2 ?? y2 ?? true, x2 = getOrSetSessionId(), I2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
2245
- if (I2.sessionId = x2, I2.apiKey = e2, I2.backendApi = t2, I2.serviceAdditionalMetadata = l2, I2.initialized && I2.sessionId === x2 && I2.ws && 1 === I2.ws.readyState) return void trackDomainChangesOnce();
2246
- const T2 = { captureStreamingResponseBody: d2, captureResponseBodyMaxMb: u2, captureStreamPrefixKb: p2, captureStreamTimeoutMs: f2 };
2247
- sessionStorage.getItem("pageVisitUUID") || (sessionStorage.setItem("pageVisitUUID", uuidv4()), invalidateUrlCache()), I2.xhrPatched || (!(function setupXMLHttpRequestInterceptor(e3 = [], t3 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, i3 = []) {
2258
+ const I2 = h2 ?? y2 ?? true, T2 = getOrSetSessionId(), E2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
2259
+ if (E2.sessionId = T2, E2.apiKey = e2, E2.backendApi = t2, E2.serviceAdditionalMetadata = l2, E2.initialized && E2.sessionId === T2 && E2.ws && 1 === E2.ws.readyState) return void trackDomainChangesOnce();
2260
+ const C2 = { captureStreamingResponseBody: d2, captureResponseBodyMaxMb: u2, captureStreamPrefixKb: p2, captureStreamTimeoutMs: f2 };
2261
+ sessionStorage.getItem("pageVisitUUID") || (sessionStorage.setItem("pageVisitUUID", uuidv4()), invalidateUrlCache()), E2.xhrPatched || (!(function setupXMLHttpRequestInterceptor(e3 = [], t3 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, i3 = []) {
2248
2262
  const o3 = XMLHttpRequest.prototype.open, s3 = XMLHttpRequest.prototype.send, a3 = XMLHttpRequest.prototype.setRequestHeader, r3 = getOrSetSessionId(), l3 = createSkipHeadersPropagationChecker(e3, i3);
2249
2263
  XMLHttpRequest.prototype.setRequestHeader = function(e4, t4) {
2250
2264
  return this._capturedRequestHeaders || (this._capturedRequestHeaders = {}), this._capturedRequestHeaders[e4] = t4, a3.call(this, e4, t4);
@@ -2309,22 +2323,22 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2309
2323
  emitFinished(false, e5, t4);
2310
2324
  }, { once: true }), s3.apply(this, e4);
2311
2325
  };
2312
- })(o2, T2, i2), I2.xhrPatched = true), I2.fetchPatched || (setupFetchInterceptor(o2, T2, i2), I2.fetchPatched = true), await yieldToMain(), I2.domEventsInit || (initializeDomContentEvents(x2), I2.domEventsInit = true), await yieldToMain(), I2.consoleInit || (initializeConsolePlugin(Ae, x2), I2.consoleInit = true), await yieldToMain(), I2.errorInit || (!(function initializeErrorInterceptor() {
2326
+ })(o2, C2, i2), E2.xhrPatched = true), E2.fetchPatched || (setupFetchInterceptor(o2, C2, i2), E2.fetchPatched = true), await yieldToMain(), E2.domEventsInit || (initializeDomContentEvents(T2), E2.domEventsInit = true), await yieldToMain(), E2.consoleInit || (initializeConsolePlugin(Ae, T2), E2.consoleInit = true), await yieldToMain(), E2.errorInit || (!(function initializeErrorInterceptor() {
2313
2327
  window.addEventListener("error", (e3) => {
2314
2328
  captureError(e3.error || e3.message);
2315
2329
  }), window.addEventListener("unhandledrejection", (e3) => {
2316
2330
  captureError(e3.reason, true);
2317
2331
  });
2318
- })(), I2.errorInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
2332
+ })(), E2.errorInit = true), await yieldToMain(), !E2.perfInit && v2 && (initializePerformancePlugin(T2), E2.perfInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
2319
2333
  g && (sessionStorage.setItem("sailfishApiKey", e3), sessionStorage.setItem("sailfishBackendApi", t3));
2320
- })({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || I2.ws && 1 === I2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
2334
+ })({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || E2.ws && 1 === E2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
2321
2335
  var _a2;
2322
2336
  ((_a2 = e3.data) == null ? void 0 : _a2.isFunctionSpanTrackingEnabledFromApiKey) ?? false ? ke && console.log("[Sailfish] Function span tracking state validated with backend: ACTIVE") : (clearStaleFuncSpanState(), ke && console.log("[Sailfish] Cleared stale function span tracking state - backend validation shows tracking is not active"));
2323
2337
  }).catch((e3) => {
2324
2338
  ke && console.warn("[Sailfish] Failed to validate function span tracking status with backend:", e3);
2325
- }), I2.sentDoNotPropagateOnce || (sendDomainsToNotPropagateHeaderTo(e2, [...o2, ...Te], t2).catch((e3) => console.error("Failed to send domains to not propagate header to:", e3)), I2.sentDoNotPropagateOnce = true), (async function gatherAndCacheDeviceInfo() {
2339
+ }), E2.sentDoNotPropagateOnce || (sendDomainsToNotPropagateHeaderTo(e2, [...o2, ...Te], t2).catch((e3) => console.error("Failed to send domains to not propagate header to:", e3)), E2.sentDoNotPropagateOnce = true), (async function gatherAndCacheDeviceInfo() {
2326
2340
  sendMessage({ type: "deviceInfo", data: { deviceInfo: { language: navigator.language, userAgent: navigator.userAgent } } });
2327
- })(), c2 && fetchAndSendIp(x2);
2341
+ })(), c2 && fetchAndSendIp(T2);
2328
2342
  try {
2329
2343
  const n2 = r2 ?? (function readGitSha() {
2330
2344
  var _a2;
@@ -2343,7 +2357,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2343
2357
  if ("string" == typeof e3 && e3) return e3;
2344
2358
  } catch {
2345
2359
  }
2346
- })(), i3 = a2 ?? "", o3 = s2 ?? "", c3 = S2 ?? "JS/TS", d3 = (function getMapUuidFromWindow() {
2360
+ })(), i3 = a2 ?? "", o3 = s2 ?? "", c3 = k2 ?? "JS/TS", d3 = (function getMapUuidFromWindow() {
2347
2361
  try {
2348
2362
  const e3 = window;
2349
2363
  if (e3 && "string" == typeof e3.sfMapUuid && e3.sfMapUuid) return e3.sfMapUuid;
@@ -2363,15 +2377,15 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2363
2377
  return { framework: i4[0] ?? null, additionalFrameworks: i4.slice(1), serviceRole: "frontend" };
2364
2378
  })(), f3 = { ...u3, serviceRole: p3.serviceRole, ...null !== p3.framework && { framework: p3.framework }, ...p3.additionalFrameworks.length > 0 && { additionalFrameworks: p3.additionalFrameworks } };
2365
2379
  await yieldToMain();
2366
- const [g2, h3] = await Promise.all([fetchCaptureSettings(e2, t2), startRecordingSession(e2, x2, t2, i3, o3, d3, n2, c3, f3)]), y3 = { ...Me, ...(_a = g2.data) == null ? void 0 : _a.captureSettingsFromApiKey, enableFiberTracking: m2, ...void 0 !== v2 ? { maskTextClass: v2 } : {} };
2367
- if (I2.ws && 1 === I2.ws.readyState) return;
2380
+ const [g2, h3] = await Promise.all([fetchCaptureSettings(e2, t2), startRecordingSession(e2, T2, t2, i3, o3, d3, n2, c3, f3)]), y3 = { ...Me, ...(_a = g2.data) == null ? void 0 : _a.captureSettingsFromApiKey, enableFiberTracking: m2, ...void 0 !== S2 ? { maskTextClass: S2 } : {} };
2381
+ if (E2.ws && 1 === E2.ws.readyState) return;
2368
2382
  if ((_b = h3.data) == null ? void 0 : _b.startRecordingSession) {
2369
2383
  const n3 = (l2 == null ? void 0 : l2.env) || (l2 == null ? void 0 : l2.environment);
2370
2384
  await yieldToMain();
2371
- const i4 = await initializeRecording(y3, t2, e2, x2, n3, k2, w2, b2 ?? false);
2372
- I2.ws = i4, I2.initialized = true, trackDomainChangesOnce(), I2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
2385
+ const i4 = await initializeRecording(y3, t2, e2, T2, n3, I2, w2, b2 ?? false);
2386
+ E2.ws = i4, E2.initialized = true, trackDomainChangesOnce(), E2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
2373
2387
  window.sfMapUuid && sendMessage({ type: "mapUuid", data: { mapUuid: window.sfMapUuid, serviceIdentifier: e3, serviceVersion: t3 } });
2374
- })(a2, s2), I2.sentMapUuidOnce = true);
2388
+ })(a2, s2), E2.sentMapUuidOnce = true);
2375
2389
  } else console.error("Failed to start recording session:", h3.errors || h3);
2376
2390
  } catch (e3) {
2377
2391
  console.error("Error starting recording:", e3);
@@ -2402,25 +2416,26 @@ const initRecorder = async (e2) => {
2402
2416
  export {
2403
2417
  initializeDomContentEvents as A,
2404
2418
  initializeFunctionSpanTrackingFromApi as B,
2405
- initializeRecording as C,
2419
+ initializePerformancePlugin as C,
2406
2420
  Me as D,
2407
- initializeWebSocket as E,
2408
- invalidateUrlCache as F,
2409
- isFunctionSpanTrackingEnabled as G,
2410
- matchUrlWithWildcard as H,
2411
- w as I,
2412
- onNavigationChange as J,
2413
- openReportIssueModal as K,
2414
- restoreFuncSpanState as L,
2415
- sendDomainsToNotPropagateHeaderTo as M,
2416
- sendEvent as N,
2417
- sendGraphQLRequest as O,
2418
- sendMessage as P,
2419
- startRecording as Q,
2420
- startRecordingSession as R,
2421
+ initializeRecording as E,
2422
+ initializeWebSocket as F,
2423
+ invalidateUrlCache as G,
2424
+ isFunctionSpanTrackingEnabled as H,
2425
+ matchUrlWithWildcard as I,
2426
+ w as J,
2427
+ onNavigationChange as K,
2428
+ openReportIssueModal as L,
2429
+ restoreFuncSpanState as M,
2430
+ sendDomainsToNotPropagateHeaderTo as N,
2431
+ sendEvent as O,
2432
+ sendGraphQLRequest as P,
2433
+ sendMessage as Q,
2434
+ startRecording as R,
2421
2435
  $e as S,
2422
- trackingEvent as T,
2423
- withAppUrlMetadata as U,
2436
+ startRecordingSession as T,
2437
+ trackingEvent as U,
2438
+ withAppUrlMetadata as V,
2424
2439
  Ae as a,
2425
2440
  addOrUpdateMetadata as b,
2426
2441
  buildBatches as c,
Binary file
Binary file
@@ -0,0 +1,188 @@
1
+ var e = -1, g = function(t2) {
2
+ addEventListener("pageshow", function(n2) {
3
+ n2.persisted && (e = n2.timeStamp, t2(n2));
4
+ }, true);
5
+ }, A = function() {
6
+ var e2 = self.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0];
7
+ if (e2 && e2.responseStart > 0 && e2.responseStart < performance.now()) return e2;
8
+ }, h = function() {
9
+ var e2 = A();
10
+ return e2 && e2.activationStart || 0;
11
+ }, l = function(t2, n2) {
12
+ var r2 = A(), i2 = "navigate";
13
+ return e >= 0 ? i2 = "back-forward-cache" : r2 && (document.prerendering || h() > 0 ? i2 = "prerender" : document.wasDiscarded ? i2 = "restore" : r2.type && (i2 = r2.type.replace(/_/g, "-"))), { name: t2, value: -1, rating: "good", delta: 0, entries: [], id: "v4-".concat(Date.now(), "-").concat(Math.floor(8999999999999 * Math.random()) + 1e12), navigationType: i2 };
14
+ }, M = function(e2, t2, n2) {
15
+ try {
16
+ if (PerformanceObserver.supportedEntryTypes.includes(e2)) {
17
+ var r2 = new PerformanceObserver(function(e3) {
18
+ Promise.resolve().then(function() {
19
+ t2(e3.getEntries());
20
+ });
21
+ });
22
+ return r2.observe(Object.assign({ type: e2, buffered: true }, n2 || {})), r2;
23
+ }
24
+ } catch {
25
+ }
26
+ }, m = function(e2, t2, n2, r2) {
27
+ var i2, s2;
28
+ return function(d2) {
29
+ var f, p;
30
+ t2.value >= 0 && (d2 || r2) && ((s2 = t2.value - (i2 || 0)) || void 0 === i2) && (i2 = t2.value, t2.delta = s2, t2.rating = (f = t2.value) > (p = n2)[1] ? "poor" : f > p[0] ? "needs-improvement" : "good", e2(t2));
31
+ };
32
+ }, D = function(e2) {
33
+ requestAnimationFrame(function() {
34
+ return requestAnimationFrame(function() {
35
+ return e2();
36
+ });
37
+ });
38
+ }, U = function(e2) {
39
+ document.addEventListener("visibilitychange", function() {
40
+ "hidden" === document.visibilityState && e2();
41
+ });
42
+ }, V = function(e2) {
43
+ var t2 = false;
44
+ return function() {
45
+ t2 || (e2(), t2 = true);
46
+ };
47
+ }, t = -1, b = function() {
48
+ return "hidden" !== document.visibilityState || document.prerendering ? 1 / 0 : 0;
49
+ }, v = function(e2) {
50
+ "hidden" === document.visibilityState && t > -1 && (t = "visibilitychange" === e2.type ? e2.timeStamp : 0, _());
51
+ }, L = function() {
52
+ addEventListener("visibilitychange", v, true), addEventListener("prerenderingchange", v, true);
53
+ }, _ = function() {
54
+ removeEventListener("visibilitychange", v, true), removeEventListener("prerenderingchange", v, true);
55
+ }, k = function() {
56
+ return t < 0 && (t = b(), L(), g(function() {
57
+ setTimeout(function() {
58
+ t = b(), L();
59
+ }, 0);
60
+ })), { get firstHiddenTime() {
61
+ return t;
62
+ } };
63
+ }, B = function(e2) {
64
+ document.prerendering ? addEventListener("prerenderingchange", function() {
65
+ return e2();
66
+ }, true) : e2();
67
+ }, n = [1800, 3e3], r = [2500, 4e3], i = {}, x = function(e2, t2) {
68
+ t2 = t2 || {}, B(function() {
69
+ var n2, s2 = k(), d2 = l("LCP"), a = function(e3) {
70
+ t2.reportAllChanges || (e3 = e3.slice(-1)), e3.forEach(function(e4) {
71
+ e4.startTime < s2.firstHiddenTime && (d2.value = Math.max(e4.startTime - h(), 0), d2.entries = [e4], n2());
72
+ });
73
+ }, f = M("largest-contentful-paint", a);
74
+ if (f) {
75
+ n2 = m(e2, d2, r, t2.reportAllChanges);
76
+ var p = V(function() {
77
+ i[d2.id] || (a(f.takeRecords()), f.disconnect(), i[d2.id] = true, n2(true));
78
+ });
79
+ ["keydown", "click"].forEach(function(e3) {
80
+ addEventListener(e3, function() {
81
+ return (function(e4) {
82
+ var t3 = self.requestIdleCallback || self.setTimeout, n3 = -1;
83
+ return e4 = V(e4), "hidden" === document.visibilityState ? e4() : (n3 = t3(e4), U(e4)), n3;
84
+ })(p);
85
+ }, { once: true, capture: true });
86
+ }), U(p), g(function(s3) {
87
+ d2 = l("LCP"), n2 = m(e2, d2, r, t2.reportAllChanges), D(function() {
88
+ d2.value = performance.now() - s3.timeStamp, i[d2.id] = true, n2(true);
89
+ });
90
+ });
91
+ }
92
+ });
93
+ };
94
+ const s = "@sailfish-rrweb/rrweb/performance@1", d = { getPageVisitUuid: () => null, captureFCP: true, captureLCP: true, captureTBT: true, captureDOMLoaded: true };
95
+ function F(e2) {
96
+ return { ...d, ...e2 ?? {} };
97
+ }
98
+ function S(e2, t2, n2) {
99
+ return { metric: e2.name, value: e2.value, rating: e2.rating, navigationType: e2.navigationType, pageVisitUuid: n2.getPageVisitUuid(), href: t2.location.href, timestamp: Date.now() };
100
+ }
101
+ function I(e2, t2, r2) {
102
+ const i2 = F(r2);
103
+ let s2 = false;
104
+ const a = (t3) => {
105
+ if (!s2) try {
106
+ e2(t3);
107
+ } catch {
108
+ }
109
+ };
110
+ if (i2.captureFCP) try {
111
+ !(function(e3, t3) {
112
+ t3 = t3 || {}, B(function() {
113
+ var r3, i3 = k(), s3 = l("FCP"), d3 = M("paint", function(e4) {
114
+ e4.forEach(function(e5) {
115
+ "first-contentful-paint" === e5.name && (d3.disconnect(), e5.startTime < i3.firstHiddenTime && (s3.value = Math.max(e5.startTime - h(), 0), s3.entries.push(e5), r3(true)));
116
+ });
117
+ });
118
+ d3 && (r3 = m(e3, s3, n, t3.reportAllChanges), g(function(i4) {
119
+ s3 = l("FCP"), r3 = m(e3, s3, n, t3.reportAllChanges), D(function() {
120
+ s3.value = performance.now() - i4.timeStamp, r3(true);
121
+ });
122
+ }));
123
+ });
124
+ })((e3) => a(S(e3, t2, i2)), { reportAllChanges: false });
125
+ } catch {
126
+ }
127
+ if (i2.captureLCP) try {
128
+ x((e3) => a(S(e3, t2, i2)), { reportAllChanges: false });
129
+ } catch {
130
+ }
131
+ const d2 = i2.captureTBT ? (function H(e3, t3, n2) {
132
+ if (typeof t3.PerformanceObserver > "u") return () => {
133
+ };
134
+ let r3 = 0, i3 = false, s3 = null;
135
+ try {
136
+ s3 = new t3.PerformanceObserver((e4) => {
137
+ const t4 = e4.getEntries();
138
+ for (let e5 = 0; e5 < t4.length; e5 += 1) {
139
+ const n3 = t4[e5];
140
+ "longtask" === n3.entryType && (r3 += Math.max(0, n3.duration - 50));
141
+ }
142
+ }), s3.observe({ type: "longtask", buffered: true });
143
+ } catch {
144
+ return () => {
145
+ };
146
+ }
147
+ const u = () => {
148
+ i3 || (i3 = true, e3({ metric: "TBT", value: r3, pageVisitUuid: n2.getPageVisitUuid(), href: t3.location.href, timestamp: Date.now() }));
149
+ };
150
+ return "complete" === t3.document.readyState ? Promise.resolve().then(u) : t3.addEventListener("load", u, { once: true }), () => {
151
+ try {
152
+ null == s3 || s3.disconnect();
153
+ } catch {
154
+ }
155
+ t3.removeEventListener("load", u);
156
+ };
157
+ })(a, t2, i2) : () => {
158
+ }, f = i2.captureDOMLoaded ? (function G(e3, t3, n2) {
159
+ let r3 = false, i3 = 0;
160
+ const c = () => {
161
+ if (r3) return;
162
+ let s3;
163
+ try {
164
+ s3 = t3.performance.getEntriesByType("navigation");
165
+ } catch {
166
+ return;
167
+ }
168
+ const d3 = s3 && s3[0];
169
+ if (!d3) return void (i3 < 6 && (i3 += 1, setTimeout(c, 100)));
170
+ if (0 === d3.loadEventEnd && i3 < 6) return i3 += 1, void setTimeout(c, 100);
171
+ r3 = true;
172
+ const f2 = t3.location.href, p = Date.now(), y = n2.getPageVisitUuid();
173
+ e3({ metric: "DCL", value: d3.domContentLoadedEventEnd, pageVisitUuid: y, href: f2, timestamp: p }), e3({ metric: "LOAD", value: d3.loadEventEnd, pageVisitUuid: y, href: f2, timestamp: p });
174
+ }, o = () => setTimeout(c, 0);
175
+ return "complete" === t3.document.readyState ? o() : t3.addEventListener("load", o, { once: true }), () => {
176
+ t3.removeEventListener("load", o);
177
+ };
178
+ })(a, t2, i2) : () => {
179
+ };
180
+ return () => {
181
+ s2 = true, d2(), f();
182
+ };
183
+ }
184
+ const Y = (e2) => ({ name: s, observer: I, options: F(e2) });
185
+ export {
186
+ s as PERFORMANCE_PLUGIN_NAME,
187
+ Y as getRecordPerformancePlugin
188
+ };
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ var e = -1, g = function(t2) {
4
+ addEventListener("pageshow", function(n2) {
5
+ n2.persisted && (e = n2.timeStamp, t2(n2));
6
+ }, true);
7
+ }, A = function() {
8
+ var e2 = self.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0];
9
+ if (e2 && e2.responseStart > 0 && e2.responseStart < performance.now()) return e2;
10
+ }, h = function() {
11
+ var e2 = A();
12
+ return e2 && e2.activationStart || 0;
13
+ }, l = function(t2, n2) {
14
+ var r2 = A(), i2 = "navigate";
15
+ return e >= 0 ? i2 = "back-forward-cache" : r2 && (document.prerendering || h() > 0 ? i2 = "prerender" : document.wasDiscarded ? i2 = "restore" : r2.type && (i2 = r2.type.replace(/_/g, "-"))), { name: t2, value: -1, rating: "good", delta: 0, entries: [], id: "v4-".concat(Date.now(), "-").concat(Math.floor(8999999999999 * Math.random()) + 1e12), navigationType: i2 };
16
+ }, M = function(e2, t2, n2) {
17
+ try {
18
+ if (PerformanceObserver.supportedEntryTypes.includes(e2)) {
19
+ var r2 = new PerformanceObserver(function(e3) {
20
+ Promise.resolve().then(function() {
21
+ t2(e3.getEntries());
22
+ });
23
+ });
24
+ return r2.observe(Object.assign({ type: e2, buffered: true }, n2 || {})), r2;
25
+ }
26
+ } catch {
27
+ }
28
+ }, m = function(e2, t2, n2, r2) {
29
+ var i2, s2;
30
+ return function(d2) {
31
+ var f, p;
32
+ t2.value >= 0 && (d2 || r2) && ((s2 = t2.value - (i2 || 0)) || void 0 === i2) && (i2 = t2.value, t2.delta = s2, t2.rating = (f = t2.value) > (p = n2)[1] ? "poor" : f > p[0] ? "needs-improvement" : "good", e2(t2));
33
+ };
34
+ }, D = function(e2) {
35
+ requestAnimationFrame(function() {
36
+ return requestAnimationFrame(function() {
37
+ return e2();
38
+ });
39
+ });
40
+ }, U = function(e2) {
41
+ document.addEventListener("visibilitychange", function() {
42
+ "hidden" === document.visibilityState && e2();
43
+ });
44
+ }, V = function(e2) {
45
+ var t2 = false;
46
+ return function() {
47
+ t2 || (e2(), t2 = true);
48
+ };
49
+ }, t = -1, b = function() {
50
+ return "hidden" !== document.visibilityState || document.prerendering ? 1 / 0 : 0;
51
+ }, v = function(e2) {
52
+ "hidden" === document.visibilityState && t > -1 && (t = "visibilitychange" === e2.type ? e2.timeStamp : 0, _());
53
+ }, L = function() {
54
+ addEventListener("visibilitychange", v, true), addEventListener("prerenderingchange", v, true);
55
+ }, _ = function() {
56
+ removeEventListener("visibilitychange", v, true), removeEventListener("prerenderingchange", v, true);
57
+ }, k = function() {
58
+ return t < 0 && (t = b(), L(), g(function() {
59
+ setTimeout(function() {
60
+ t = b(), L();
61
+ }, 0);
62
+ })), { get firstHiddenTime() {
63
+ return t;
64
+ } };
65
+ }, B = function(e2) {
66
+ document.prerendering ? addEventListener("prerenderingchange", function() {
67
+ return e2();
68
+ }, true) : e2();
69
+ }, n = [1800, 3e3], r = [2500, 4e3], i = {}, x = function(e2, t2) {
70
+ t2 = t2 || {}, B(function() {
71
+ var n2, s2 = k(), d2 = l("LCP"), a = function(e3) {
72
+ t2.reportAllChanges || (e3 = e3.slice(-1)), e3.forEach(function(e4) {
73
+ e4.startTime < s2.firstHiddenTime && (d2.value = Math.max(e4.startTime - h(), 0), d2.entries = [e4], n2());
74
+ });
75
+ }, f = M("largest-contentful-paint", a);
76
+ if (f) {
77
+ n2 = m(e2, d2, r, t2.reportAllChanges);
78
+ var p = V(function() {
79
+ i[d2.id] || (a(f.takeRecords()), f.disconnect(), i[d2.id] = true, n2(true));
80
+ });
81
+ ["keydown", "click"].forEach(function(e3) {
82
+ addEventListener(e3, function() {
83
+ return (function(e4) {
84
+ var t3 = self.requestIdleCallback || self.setTimeout, n3 = -1;
85
+ return e4 = V(e4), "hidden" === document.visibilityState ? e4() : (n3 = t3(e4), U(e4)), n3;
86
+ })(p);
87
+ }, { once: true, capture: true });
88
+ }), U(p), g(function(s3) {
89
+ d2 = l("LCP"), n2 = m(e2, d2, r, t2.reportAllChanges), D(function() {
90
+ d2.value = performance.now() - s3.timeStamp, i[d2.id] = true, n2(true);
91
+ });
92
+ });
93
+ }
94
+ });
95
+ };
96
+ const s = "@sailfish-rrweb/rrweb/performance@1", d = { getPageVisitUuid: () => null, captureFCP: true, captureLCP: true, captureTBT: true, captureDOMLoaded: true };
97
+ function F(e2) {
98
+ return { ...d, ...e2 ?? {} };
99
+ }
100
+ function S(e2, t2, n2) {
101
+ return { metric: e2.name, value: e2.value, rating: e2.rating, navigationType: e2.navigationType, pageVisitUuid: n2.getPageVisitUuid(), href: t2.location.href, timestamp: Date.now() };
102
+ }
103
+ function I(e2, t2, r2) {
104
+ const i2 = F(r2);
105
+ let s2 = false;
106
+ const a = (t3) => {
107
+ if (!s2) try {
108
+ e2(t3);
109
+ } catch {
110
+ }
111
+ };
112
+ if (i2.captureFCP) try {
113
+ !(function(e3, t3) {
114
+ t3 = t3 || {}, B(function() {
115
+ var r3, i3 = k(), s3 = l("FCP"), d3 = M("paint", function(e4) {
116
+ e4.forEach(function(e5) {
117
+ "first-contentful-paint" === e5.name && (d3.disconnect(), e5.startTime < i3.firstHiddenTime && (s3.value = Math.max(e5.startTime - h(), 0), s3.entries.push(e5), r3(true)));
118
+ });
119
+ });
120
+ d3 && (r3 = m(e3, s3, n, t3.reportAllChanges), g(function(i4) {
121
+ s3 = l("FCP"), r3 = m(e3, s3, n, t3.reportAllChanges), D(function() {
122
+ s3.value = performance.now() - i4.timeStamp, r3(true);
123
+ });
124
+ }));
125
+ });
126
+ })((e3) => a(S(e3, t2, i2)), { reportAllChanges: false });
127
+ } catch {
128
+ }
129
+ if (i2.captureLCP) try {
130
+ x((e3) => a(S(e3, t2, i2)), { reportAllChanges: false });
131
+ } catch {
132
+ }
133
+ const d2 = i2.captureTBT ? (function H(e3, t3, n2) {
134
+ if (typeof t3.PerformanceObserver > "u") return () => {
135
+ };
136
+ let r3 = 0, i3 = false, s3 = null;
137
+ try {
138
+ s3 = new t3.PerformanceObserver((e4) => {
139
+ const t4 = e4.getEntries();
140
+ for (let e5 = 0; e5 < t4.length; e5 += 1) {
141
+ const n3 = t4[e5];
142
+ "longtask" === n3.entryType && (r3 += Math.max(0, n3.duration - 50));
143
+ }
144
+ }), s3.observe({ type: "longtask", buffered: true });
145
+ } catch {
146
+ return () => {
147
+ };
148
+ }
149
+ const u = () => {
150
+ i3 || (i3 = true, e3({ metric: "TBT", value: r3, pageVisitUuid: n2.getPageVisitUuid(), href: t3.location.href, timestamp: Date.now() }));
151
+ };
152
+ return "complete" === t3.document.readyState ? Promise.resolve().then(u) : t3.addEventListener("load", u, { once: true }), () => {
153
+ try {
154
+ null == s3 || s3.disconnect();
155
+ } catch {
156
+ }
157
+ t3.removeEventListener("load", u);
158
+ };
159
+ })(a, t2, i2) : () => {
160
+ }, f = i2.captureDOMLoaded ? (function G(e3, t3, n2) {
161
+ let r3 = false, i3 = 0;
162
+ const c = () => {
163
+ if (r3) return;
164
+ let s3;
165
+ try {
166
+ s3 = t3.performance.getEntriesByType("navigation");
167
+ } catch {
168
+ return;
169
+ }
170
+ const d3 = s3 && s3[0];
171
+ if (!d3) return void (i3 < 6 && (i3 += 1, setTimeout(c, 100)));
172
+ if (0 === d3.loadEventEnd && i3 < 6) return i3 += 1, void setTimeout(c, 100);
173
+ r3 = true;
174
+ const f2 = t3.location.href, p = Date.now(), y = n2.getPageVisitUuid();
175
+ e3({ metric: "DCL", value: d3.domContentLoadedEventEnd, pageVisitUuid: y, href: f2, timestamp: p }), e3({ metric: "LOAD", value: d3.loadEventEnd, pageVisitUuid: y, href: f2, timestamp: p });
176
+ }, o = () => setTimeout(c, 0);
177
+ return "complete" === t3.document.readyState ? o() : t3.addEventListener("load", o, { once: true }), () => {
178
+ t3.removeEventListener("load", o);
179
+ };
180
+ })(a, t2, i2) : () => {
181
+ };
182
+ return () => {
183
+ s2 = true, d2(), f();
184
+ };
185
+ }
186
+ exports.PERFORMANCE_PLUGIN_NAME = s, exports.getRecordPerformancePlugin = (e2) => ({ name: s, observer: I, options: F(e2) });
package/dist/constants.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export const DomContentEventId = 24;
2
2
  export const NetworkRequestEventId = 27;
3
+ export const PerformanceMetricEventId = 28;
3
4
  export const xSf3RidHeader = "X-Sf3-Rid";
4
5
  // Values for DomContentLoadedEvent
5
6
  export const DomContentSource = {
Binary file
Binary file
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { readGitSha } from "./env";
8
8
  import { initializeErrorInterceptor } from "./errorInterceptor";
9
9
  import { fetchCaptureSettings, fetchFunctionSpanTrackingEnabled, sendDomainsToNotPropagateHeaderTo, startRecordingSession, } from "./graphql";
10
10
  import { sendMapUuidIfAvailable } from "./mapUuid";
11
- import { getUrlAndStoredUuids, initializeConsolePlugin, initializeDomContentEvents, initializeRecording, invalidateUrlCache, } from "./recording";
11
+ import { getUrlAndStoredUuids, initializeConsolePlugin, initializeDomContentEvents, initializePerformancePlugin, initializeRecording, invalidateUrlCache, } from "./recording";
12
12
  import { HAS_DOCUMENT, HAS_LOCAL_STORAGE, HAS_SESSION_STORAGE, HAS_WINDOW, } from "./runtimeEnv";
13
13
  import { isHeadlessOrLighthouse } from "./headlessDetection";
14
14
  import { ensureSessionListeners, getOrSetSessionId } from "./session";
@@ -1040,12 +1040,13 @@ export async function startRecording({ apiKey, backendApi = "https://api-service
1040
1040
  // Pass [] to fully disable header propagation. Pass exact patterns
1041
1041
  // (e.g. ["api.myapp.com", "*.internal.com"]) to restrict propagation
1042
1042
  // to a known set of domains.
1043
- domainsToPropagateHeaderTo = ["*"], domainsToNotPropagateHeaderTo = [], serviceVersion, serviceIdentifier, gitSha, serviceAdditionalMetadata, enableIpTracking, captureStreamingResponseBody = true, captureResponseBodyMaxMb = 10, captureStreamPrefixKb = 64, captureStreamTimeoutMs = 10000, enableFiberTracking = false, deferRecording, deferRecordingStart, chunkSnapshot, useWsWorker = true, maskTextClass, library, }) {
1043
+ domainsToPropagateHeaderTo = ["*"], domainsToNotPropagateHeaderTo = [], serviceVersion, serviceIdentifier, gitSha, serviceAdditionalMetadata, enableIpTracking, captureStreamingResponseBody = true, captureResponseBodyMaxMb = 10, captureStreamPrefixKb = 64, captureStreamTimeoutMs = 10000, enableFiberTracking = false, deferRecording, deferRecordingStart, chunkSnapshot, useWsWorker = true, capturePerformanceMetrics = true, maskTextClass, library, headlessRecording = false, }) {
1044
1044
  // Synthetic-environment no-op: Lighthouse/PSI, HeadlessChrome, WebPageTest
1045
1045
  // (PTST), Puppeteer/Playwright/Selenium (navigator.webdriver). We skip init
1046
1046
  // entirely to avoid WSS retry noise, third-party perf penalties in audits,
1047
1047
  // and polluting real-user session data.
1048
- if (isHeadlessOrLighthouse()) {
1048
+ // headlessRecording: true bypasses this check to allow explicit recording in headless environments.
1049
+ if (!headlessRecording && isHeadlessOrLighthouse()) {
1049
1050
  return;
1050
1051
  }
1051
1052
  // deferRecording takes precedence; fall back to deprecated deferRecordingStart; default true
@@ -1111,6 +1112,16 @@ domainsToPropagateHeaderTo = ["*"], domainsToNotPropagateHeaderTo = [], serviceV
1111
1112
  g.errorInit = true;
1112
1113
  }
1113
1114
  await yieldToMain();
1115
+ // 1f. Performance metrics plugin (FCP, LCP, TBT, DCL, LOAD).
1116
+ // Fire-and-forget: the plugin dynamically imports web-vitals and its own
1117
+ // observer wiring, so nothing blocks startRecording() while it loads.
1118
+ // Skip entirely when the caller opts out via capturePerformanceMetrics:false
1119
+ // — pays zero bundle/runtime cost since the plugin is dynamically imported.
1120
+ if (!g.perfInit && capturePerformanceMetrics) {
1121
+ initializePerformancePlugin(sessionId);
1122
+ g.perfInit = true;
1123
+ }
1124
+ await yieldToMain();
1114
1125
  // ── Phase 2: Deferred async work ────────────────────────────────────────
1115
1126
  // Everything else — GraphQL calls, WebSocket init, device info, domain
1116
1127
  // reporting, visibility listeners, funcspan state restore, etc.
package/dist/index.js.br CHANGED
Binary file
package/dist/index.js.gz CHANGED
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-Cfj4Epfd.js");
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.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;
3
+ const e = require("./chunks/index-BP-kNUGS.js");
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