@sailfish-ai/recorder 1.12.4 → 1.12.6

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 (144) hide show
  1. package/README.md +8 -0
  2. package/dist/canvas/adapters.js +382 -0
  3. package/dist/canvas/adapters.js.br +0 -0
  4. package/dist/canvas/adapters.js.gz +0 -0
  5. package/dist/canvas/canvasManager.js +1949 -0
  6. package/dist/canvas/canvasManager.js.br +0 -0
  7. package/dist/canvas/canvasManager.js.gz +0 -0
  8. package/dist/canvas/canvasPrivacy.js +233 -0
  9. package/dist/canvas/canvasPrivacy.js.br +0 -0
  10. package/dist/canvas/canvasPrivacy.js.gz +0 -0
  11. package/dist/canvas/codec.js +314 -0
  12. package/dist/canvas/codec.js.br +0 -0
  13. package/dist/canvas/codec.js.gz +0 -0
  14. package/dist/canvas/deviceClass.js +67 -0
  15. package/dist/canvas/deviceClass.js.br +0 -0
  16. package/dist/canvas/deviceClass.js.gz +0 -0
  17. package/dist/canvas/encodeWorker.js +284 -0
  18. package/dist/canvas/encodeWorker.js.br +0 -0
  19. package/dist/canvas/encodeWorker.js.gz +0 -0
  20. package/dist/canvas/governor.js +79 -0
  21. package/dist/canvas/governor.js.br +0 -0
  22. package/dist/canvas/governor.js.gz +0 -0
  23. package/dist/canvas/keyframes.js +183 -0
  24. package/dist/canvas/keyframes.js.br +0 -0
  25. package/dist/canvas/keyframes.js.gz +0 -0
  26. package/dist/canvas/mediaRecorderCapture.js +257 -0
  27. package/dist/canvas/mediaRecorderCapture.js.br +0 -0
  28. package/dist/canvas/mediaRecorderCapture.js.gz +0 -0
  29. package/dist/canvas/objectLog.js +150 -0
  30. package/dist/canvas/objectLog.js.br +0 -0
  31. package/dist/canvas/objectLog.js.gz +0 -0
  32. package/dist/canvas/patch2d.js +1302 -0
  33. package/dist/canvas/patch2d.js.br +0 -0
  34. package/dist/canvas/patch2d.js.gz +0 -0
  35. package/dist/canvas/patchGL.js +371 -0
  36. package/dist/canvas/patchGL.js.br +0 -0
  37. package/dist/canvas/patchGL.js.gz +0 -0
  38. package/dist/canvas/patchWebGPU.js +361 -0
  39. package/dist/canvas/patchWebGPU.js.br +0 -0
  40. package/dist/canvas/patchWebGPU.js.gz +0 -0
  41. package/dist/canvas/piiDetect.js +155 -0
  42. package/dist/canvas/piiDetect.js.br +0 -0
  43. package/dist/canvas/piiDetect.js.gz +0 -0
  44. package/dist/canvas/protocol.js +122 -0
  45. package/dist/canvas/protocol.js.br +0 -0
  46. package/dist/canvas/protocol.js.gz +0 -0
  47. package/dist/canvas/videoCapture.js +252 -0
  48. package/dist/canvas/videoCapture.js.br +0 -0
  49. package/dist/canvas/videoCapture.js.gz +0 -0
  50. package/dist/canvas/workerRelay.js +99 -0
  51. package/dist/canvas/workerRelay.js.br +0 -0
  52. package/dist/canvas/workerRelay.js.gz +0 -0
  53. package/dist/canvas/workerShim.js +227 -0
  54. package/dist/canvas/workerShim.js.br +0 -0
  55. package/dist/canvas/workerShim.js.gz +0 -0
  56. package/dist/canvas-worker.cjs +74 -0
  57. package/dist/canvas-worker.cjs.br +0 -0
  58. package/dist/canvas-worker.cjs.gz +0 -0
  59. package/dist/canvas-worker.js +78 -0
  60. package/dist/canvas-worker.js.br +0 -0
  61. package/dist/canvas-worker.js.gz +0 -0
  62. package/dist/canvasFrameStore.js +198 -0
  63. package/dist/canvasFrameStore.js.br +0 -0
  64. package/dist/canvasFrameStore.js.gz +0 -0
  65. package/dist/chunks/canvasManager-BYn3_oyo.js +1440 -0
  66. package/dist/chunks/canvasManager-BYn3_oyo.js.br +0 -0
  67. package/dist/chunks/canvasManager-BYn3_oyo.js.gz +0 -0
  68. package/dist/chunks/canvasManager-CoX5072G.js +1456 -0
  69. package/dist/chunks/canvasManager-CoX5072G.js.br +0 -0
  70. package/dist/chunks/canvasManager-CoX5072G.js.gz +0 -0
  71. package/dist/chunks/{chunkSerializer-FQtY90Av.js → chunkSerializer-C_K0Wyk0.js} +1 -1
  72. package/dist/chunks/chunkSerializer-C_K0Wyk0.js.br +0 -0
  73. package/dist/chunks/chunkSerializer-C_K0Wyk0.js.gz +0 -0
  74. package/dist/chunks/{chunkSerializer-DDukZpgl.js → chunkSerializer-CghPitF4.js} +1 -1
  75. package/dist/chunks/chunkSerializer-CghPitF4.js.br +0 -0
  76. package/dist/chunks/chunkSerializer-CghPitF4.js.gz +0 -0
  77. package/dist/chunks/{index-C-qbsfKe.js → index-BIj4l3CV.js} +1028 -650
  78. package/dist/chunks/index-BIj4l3CV.js.br +0 -0
  79. package/dist/chunks/index-BIj4l3CV.js.gz +0 -0
  80. package/dist/chunks/{index-D6axlCRu.js → index-DIYomvdD.js} +1119 -720
  81. package/dist/chunks/index-DIYomvdD.js.br +0 -0
  82. package/dist/chunks/index-DIYomvdD.js.gz +0 -0
  83. package/dist/chunks/patch2d-9voowhJ_.js +816 -0
  84. package/dist/chunks/patch2d-9voowhJ_.js.br +0 -0
  85. package/dist/chunks/patch2d-9voowhJ_.js.gz +0 -0
  86. package/dist/chunks/patch2d-PQxcaE6r.js +886 -0
  87. package/dist/chunks/patch2d-PQxcaE6r.js.br +0 -0
  88. package/dist/chunks/patch2d-PQxcaE6r.js.gz +0 -0
  89. package/dist/graphql.js +12 -1
  90. package/dist/graphql.js.br +0 -0
  91. package/dist/graphql.js.gz +0 -0
  92. package/dist/inAppReportIssueModal/index.js +48 -0
  93. package/dist/inAppReportIssueModal/index.js.br +0 -0
  94. package/dist/inAppReportIssueModal/index.js.gz +0 -0
  95. package/dist/index.js +144 -2
  96. package/dist/index.js.br +0 -0
  97. package/dist/index.js.gz +0 -0
  98. package/dist/recorder.cjs +2 -2
  99. package/dist/recorder.cjs.br +0 -0
  100. package/dist/recorder.cjs.gz +0 -0
  101. package/dist/recorder.js +52 -41
  102. package/dist/recorder.js.br +0 -0
  103. package/dist/recorder.js.gz +0 -0
  104. package/dist/recorder.umd.cjs +4847 -2212
  105. package/dist/recorder.umd.cjs.br +0 -0
  106. package/dist/recorder.umd.cjs.gz +0 -0
  107. package/dist/recording.js +119 -10
  108. package/dist/recording.js.br +0 -0
  109. package/dist/recording.js.gz +0 -0
  110. package/dist/types/canvas/adapters.d.ts +71 -0
  111. package/dist/types/canvas/canvasManager.d.ts +273 -0
  112. package/dist/types/canvas/canvasPrivacy.d.ts +184 -0
  113. package/dist/types/canvas/codec.d.ts +27 -0
  114. package/dist/types/canvas/deviceClass.d.ts +40 -0
  115. package/dist/types/canvas/encodeWorker.d.ts +54 -0
  116. package/dist/types/canvas/governor.d.ts +44 -0
  117. package/dist/types/canvas/keyframes.d.ts +81 -0
  118. package/dist/types/canvas/mediaRecorderCapture.d.ts +91 -0
  119. package/dist/types/canvas/objectLog.d.ts +75 -0
  120. package/dist/types/canvas/patch2d.d.ts +339 -0
  121. package/dist/types/canvas/patchGL.d.ts +74 -0
  122. package/dist/types/canvas/patchWebGPU.d.ts +37 -0
  123. package/dist/types/canvas/piiDetect.d.ts +60 -0
  124. package/dist/types/canvas/protocol.d.ts +176 -0
  125. package/dist/types/canvas/videoCapture.d.ts +67 -0
  126. package/dist/types/canvas/workerRelay.d.ts +29 -0
  127. package/dist/types/canvas/workerShim.d.ts +10 -0
  128. package/dist/types/canvasFrameStore.d.ts +23 -0
  129. package/dist/types/graphql.d.ts +1 -1
  130. package/dist/types/index.d.ts +99 -1
  131. package/dist/types/types.d.ts +40 -0
  132. package/dist/types/websocket.d.ts +19 -0
  133. package/dist/websocket.js +210 -0
  134. package/dist/websocket.js.br +0 -0
  135. package/dist/websocket.js.gz +0 -0
  136. package/package.json +7 -1
  137. package/dist/chunks/chunkSerializer-DDukZpgl.js.br +0 -0
  138. package/dist/chunks/chunkSerializer-DDukZpgl.js.gz +0 -0
  139. package/dist/chunks/chunkSerializer-FQtY90Av.js.br +0 -0
  140. package/dist/chunks/chunkSerializer-FQtY90Av.js.gz +0 -0
  141. package/dist/chunks/index-C-qbsfKe.js.br +0 -0
  142. package/dist/chunks/index-C-qbsfKe.js.gz +0 -0
  143. package/dist/chunks/index-D6axlCRu.js.br +0 -0
  144. package/dist/chunks/index-D6axlCRu.js.gz +0 -0
@@ -3,6 +3,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
  import e from "reconnecting-websocket";
5
5
  import { EventType as t } from "@sailfish-rrweb/types";
6
+ import { b as n, m as i, l as o, c as r, e as s, f as a, g as c, h as l, n as d, i as u, j as p } from "./patch2d-PQxcaE6r.js";
6
7
  function readDebugFlag() {
7
8
  var _a;
8
9
  try {
@@ -38,12 +39,12 @@ function uuidv4() {
38
39
  return ("x" === e2 ? t2 : 3 & t2 | 8).toString(16);
39
40
  });
40
41
  }
41
- const n = "X-Sf3-Rid", i = 0, o = 1, s = 2, r = 4, a = "undefined" != typeof performance && "function" == typeof performance.now;
42
+ const f = "X-Sf3-Rid", g = 0, m = 1, h = 2, y = 4, b = "undefined" != typeof performance && "function" == typeof performance.now;
42
43
  function monotonicNow() {
43
- return a ? performance.now() : Date.now();
44
+ return b ? performance.now() : Date.now();
44
45
  }
45
46
  function timeOriginMs() {
46
- return a ? performance.timeOrigin : 0;
47
+ return b ? performance.timeOrigin : 0;
47
48
  }
48
49
  class ClockSyncManager {
49
50
  constructor() {
@@ -66,8 +67,8 @@ class ClockSyncManager {
66
67
  this.pending.delete(e2.requestId);
67
68
  const n2 = monotonicNow(), i2 = n2 - t2.clientSendMonoMs;
68
69
  if (i2 < 0 || !isFinite(i2)) return null;
69
- const o2 = (t2.clientSendMonoMs + n2) / 2, s2 = (e2.serverReceivedAtMs + e2.serverSentAtMs) / 2 - o2, r2 = { clientSendMonoMs: t2.clientSendMonoMs, clientReceiveMonoMs: n2, serverReceiveWallMs: e2.serverReceivedAtMs, serverSendWallMs: e2.serverSentAtMs, rttMs: i2, estimatedOffsetMs: s2, browserWallAtSyncMs: Date.now() };
70
- return this.samples.push(r2), this.pruneSamples(n2), this.recompute(n2), r2;
70
+ const o2 = (t2.clientSendMonoMs + n2) / 2, r2 = (e2.serverReceivedAtMs + e2.serverSentAtMs) / 2 - o2, s2 = { clientSendMonoMs: t2.clientSendMonoMs, clientReceiveMonoMs: n2, serverReceiveWallMs: e2.serverReceivedAtMs, serverSendWallMs: e2.serverSentAtMs, rttMs: i2, estimatedOffsetMs: r2, browserWallAtSyncMs: Date.now() };
71
+ return this.samples.push(s2), this.pruneSamples(n2), this.recompute(n2), s2;
71
72
  }
72
73
  estimateServerTime(e2) {
73
74
  return null == this.estimatedOffsetMs ? null : this.estimatedOffsetMs + e2;
@@ -96,38 +97,72 @@ class ClockSyncManager {
96
97
  this.estimatedOffsetMs = n2[Math.floor(n2.length / 2)], this.bestRttMs = t2[0].rttMs, this.lastSyncMonoMs = e2;
97
98
  }
98
99
  }
99
- let l = null;
100
+ let v = null;
100
101
  function getClockSyncManager() {
101
- return l || (l = new ClockSyncManager()), l;
102
+ return v || (v = new ClockSyncManager()), v;
102
103
  }
103
104
  function buildEventTimeEnvelope(e2, t2) {
104
105
  const n2 = getClockSyncManager(), i2 = n2.getSyncMetadata(), o2 = n2.estimateServerTime(e2);
105
106
  return { client: { wallTimeMs: t2, monotonicMs: e2, timeOriginMs: timeOriginMs() }, serverEstimated: { eventTimeMs: o2, offsetMs: i2.offsetMs, rttMs: i2.rttMs, syncAgeMs: i2.syncAgeMs } };
106
107
  }
107
- const c = "recordingEvents";
108
- let d = null;
109
- function openDb$1() {
110
- return (function hasIndexedDB$1() {
108
+ const S = "recordingEvents";
109
+ let w = null;
110
+ function openDb$2() {
111
+ return (function hasIndexedDB$2() {
111
112
  return "undefined" != typeof globalThis && !!globalThis.indexedDB;
112
- })() ? d || (d = new Promise((e2) => {
113
+ })() ? w || (w = new Promise((e2) => {
113
114
  try {
114
115
  const t2 = globalThis.indexedDB.open("leapsEventDB", 1);
115
116
  t2.onupgradeneeded = () => {
116
117
  const e3 = t2.result;
117
- e3.objectStoreNames.contains(c) || e3.createObjectStore(c, { keyPath: "id", autoIncrement: true });
118
+ e3.objectStoreNames.contains(S) || e3.createObjectStore(S, { keyPath: "id", autoIncrement: true });
118
119
  }, t2.onsuccess = () => e2(t2.result), t2.onerror = () => e2(null), t2.onblocked = () => {
119
120
  e2(null);
120
121
  };
121
122
  } catch {
122
123
  e2(null);
123
124
  }
124
- }), d) : Promise.resolve(null);
125
+ }), w) : Promise.resolve(null);
126
+ }
127
+ function withStore$2(e2, t2) {
128
+ return openDb$2().then((n2) => n2 ? new Promise((i2) => {
129
+ try {
130
+ const o2 = n2.transaction(S, e2), r2 = o2.objectStore(S);
131
+ Promise.resolve(t2(r2)).then((e3) => {
132
+ o2.oncomplete = () => i2(e3), o2.onerror = () => i2(null);
133
+ }).catch(() => i2(null));
134
+ } catch {
135
+ i2(null);
136
+ }
137
+ }) : null);
138
+ }
139
+ async function deleteEventsByIds(e2) {
140
+ await withStore$2("readwrite", async (t2) => {
141
+ for (const n2 of e2) t2.delete(n2);
142
+ });
143
+ }
144
+ const k = "canvasFrames", x = 67108864;
145
+ let I = null;
146
+ function openDb$1() {
147
+ return (function hasIndexedDB$1() {
148
+ return "undefined" != typeof globalThis && !!globalThis.indexedDB;
149
+ })() ? I || (I = new Promise((e2) => {
150
+ try {
151
+ const t2 = globalThis.indexedDB.open("leapsCanvasFrameDB", 1);
152
+ t2.onupgradeneeded = () => {
153
+ const e3 = t2.result;
154
+ e3.objectStoreNames.contains(k) || e3.createObjectStore(k, { keyPath: "id", autoIncrement: true });
155
+ }, t2.onsuccess = () => e2(t2.result), t2.onerror = () => e2(null), t2.onblocked = () => e2(null);
156
+ } catch {
157
+ e2(null);
158
+ }
159
+ }), I) : Promise.resolve(null);
125
160
  }
126
161
  function withStore$1(e2, t2) {
127
162
  return openDb$1().then((n2) => n2 ? new Promise((i2) => {
128
163
  try {
129
- const o2 = n2.transaction(c, e2), s2 = o2.objectStore(c);
130
- Promise.resolve(t2(s2)).then((e3) => {
164
+ const o2 = n2.transaction(k, e2), r2 = o2.objectStore(k);
165
+ Promise.resolve(t2(r2)).then((e3) => {
131
166
  o2.oncomplete = () => i2(e3), o2.onerror = () => i2(null);
132
167
  }).catch(() => i2(null));
133
168
  } catch {
@@ -135,34 +170,58 @@ function withStore$1(e2, t2) {
135
170
  }
136
171
  }) : null);
137
172
  }
138
- async function deleteEventsByIds(e2) {
139
- await withStore$1("readwrite", async (t2) => {
173
+ async function persistCanvasFrame(e2) {
174
+ const t2 = await withStore$1("readwrite", (t3) => (t3.add({ timestamp: Date.now(), bytes: e2.byteLength, buf: e2 }), true));
175
+ return t2 && (async function pruneToBudget() {
176
+ await withStore$1("readwrite", (e3) => new Promise((t3) => {
177
+ let n2 = 0;
178
+ const i2 = [], o2 = e3.openCursor();
179
+ o2.onsuccess = () => {
180
+ const r2 = o2.result;
181
+ if (r2) {
182
+ const e4 = r2.value, t4 = "number" == typeof (e4 == null ? void 0 : e4.bytes) ? e4.bytes : 0;
183
+ return n2 += t4, "number" == typeof (e4 == null ? void 0 : e4.id) && i2.push({ id: e4.id, bytes: t4 }), void r2.continue();
184
+ }
185
+ let s2 = n2 - x;
186
+ if (s2 <= 0) return t3();
187
+ for (const t4 of i2) {
188
+ if (s2 <= 0) break;
189
+ e3.delete(t4.id), s2 -= t4.bytes;
190
+ }
191
+ t3();
192
+ }, o2.onerror = () => t3();
193
+ }));
194
+ })().catch(() => {
195
+ }), true === t2;
196
+ }
197
+ async function deleteCanvasFramesByIds(e2) {
198
+ 0 !== e2.length && await withStore$1("readwrite", (t2) => {
140
199
  for (const n2 of e2) t2.delete(n2);
141
200
  });
142
201
  }
143
- const u = "notifyMessages";
144
- let p = null;
202
+ const T = "notifyMessages";
203
+ let E = null;
145
204
  function openDb() {
146
205
  return (function hasIndexedDB() {
147
206
  return "undefined" != typeof globalThis && !!globalThis.indexedDB;
148
- })() ? p || (p = new Promise((e2) => {
207
+ })() ? E || (E = new Promise((e2) => {
149
208
  try {
150
209
  const t2 = globalThis.indexedDB.open("leapsNotifyDB", 1);
151
210
  t2.onupgradeneeded = () => {
152
211
  const e3 = t2.result;
153
- e3.objectStoreNames.contains(u) || e3.createObjectStore(u, { keyPath: "id", autoIncrement: true });
212
+ e3.objectStoreNames.contains(T) || e3.createObjectStore(T, { keyPath: "id", autoIncrement: true });
154
213
  }, t2.onsuccess = () => e2(t2.result), t2.onerror = () => e2(null), t2.onblocked = () => e2(null);
155
214
  } catch {
156
215
  e2(null);
157
216
  }
158
- }), p) : Promise.resolve(null);
217
+ }), E) : Promise.resolve(null);
159
218
  }
160
219
  async function withStore(e2, t2) {
161
220
  const n2 = await openDb();
162
221
  return n2 ? new Promise((i2) => {
163
222
  try {
164
- const o2 = n2.transaction(u, e2), s2 = o2.objectStore(u);
165
- Promise.resolve(t2(s2)).then((e3) => {
223
+ const o2 = n2.transaction(T, e2), r2 = o2.objectStore(T);
224
+ Promise.resolve(t2(r2)).then((e3) => {
166
225
  o2.oncomplete = () => i2(e3), o2.onerror = () => i2(null);
167
226
  }).catch(() => i2(null));
168
227
  } catch {
@@ -180,25 +239,25 @@ async function deleteNotifyMessageById(e2) {
180
239
  t2.delete(e2);
181
240
  });
182
241
  }
183
- const f = "undefined" != typeof globalThis && void 0 !== globalThis.window, g = "undefined" != typeof globalThis && void 0 !== globalThis.document, m = "undefined" != typeof globalThis && "localStorage" in globalThis, h = "undefined" != typeof globalThis && "sessionStorage" in globalThis, y = "sailfishSessionId", S = "__sailfish_refresh__";
184
- let b = null;
242
+ const C = "undefined" != typeof globalThis && void 0 !== globalThis.window, M = "undefined" != typeof globalThis && void 0 !== globalThis.document, $ = "undefined" != typeof globalThis && "localStorage" in globalThis, A = "undefined" != typeof globalThis && "sessionStorage" in globalThis, F = "sailfishSessionId", L = "__sailfish_refresh__";
243
+ let R = null;
185
244
  function getOrSetSessionId() {
186
- if (!f) return uuidv4();
187
- if (b) return b;
188
- const e2 = window.name.startsWith(S);
245
+ if (!C) return uuidv4();
246
+ if (R) return R;
247
+ const e2 = window.name.startsWith(L);
189
248
  if (e2 && (window.name = window.name.substring(20)), e2) {
190
- const e3 = window.sessionStorage.getItem(y);
191
- if (e3) return b = e3, e3;
249
+ const e3 = window.sessionStorage.getItem(F);
250
+ if (e3) return R = e3, e3;
192
251
  }
193
252
  const t2 = uuidv4();
194
- b = t2;
253
+ R = t2;
195
254
  try {
196
- window.sessionStorage.setItem(y, t2);
255
+ window.sessionStorage.setItem(F, t2);
197
256
  } catch (e3) {
198
257
  }
199
258
  return t2;
200
259
  }
201
- let v = false;
260
+ let D = false;
202
261
  function buildBatches(e2, t2, n2) {
203
262
  const i2 = {};
204
263
  for (const t3 of e2) {
@@ -207,32 +266,107 @@ function buildBatches(e2, t2, n2) {
207
266
  }
208
267
  const o2 = [];
209
268
  for (const e3 in i2) {
210
- const s2 = i2[e3];
211
- let r2 = [], a2 = 0;
212
- for (const e4 of s2) {
269
+ const r2 = i2[e3];
270
+ let s2 = [], a2 = 0;
271
+ for (const e4 of r2) {
213
272
  const i3 = t2(e4);
214
- a2 + i3 > n2 && (r2.length > 0 && (o2.push(r2), r2 = [], a2 = 0), i3 > n2) || (r2.push(e4), a2 += i3);
273
+ a2 + i3 > n2 && (s2.length > 0 && (o2.push(s2), s2 = [], a2 = 0), i3 > n2) || (s2.push(e4), a2 += i3);
215
274
  }
216
- r2.length > 0 && o2.push(r2);
275
+ s2.length > 0 && o2.push(s2);
217
276
  }
218
277
  return o2;
219
278
  }
220
279
  function eventSize(e2) {
221
280
  return JSON.stringify(e2).length;
222
281
  }
223
- let w = Date.now;
282
+ let B = Date.now;
224
283
  function withAppUrlMetadata(e2) {
225
284
  var _a;
226
285
  return { ...e2 ?? {}, appUrl: (e2 == null ? void 0 : e2.appUrl) ?? ((_a = window == null ? void 0 : window.location) == null ? void 0 : _a.href) };
227
286
  }
228
- /[1-9][0-9]{12}/.test(Date.now().toString()) || (w = () => (/* @__PURE__ */ new Date()).getTime());
229
- const k = readDebugFlag(), x = "per_session";
230
- let I = null, T = null, E = false, M = null, C = null;
231
- let $ = null, F = 0;
287
+ /[1-9][0-9]{12}/.test(Date.now().toString()) || (B = () => (/* @__PURE__ */ new Date()).getTime());
288
+ const P = readDebugFlag(), _ = "per_session";
289
+ let O = null, j = null, U = null, N = null, q = 0, z = false, H = null, W = null;
290
+ const K = [];
291
+ let V = 0, G = 0, Q = false;
292
+ function pushBinaryRing(e2) {
293
+ for (K.push(e2), V += e2.byteLength; V > 8388608 && K.length > 0; ) {
294
+ const e3 = K.shift();
295
+ V -= e3.byteLength, G++;
296
+ }
297
+ }
298
+ async function flushPersistedBinary() {
299
+ if (!isWebSocketOpen(j)) return;
300
+ const e2 = await (async function readAllCanvasFrames() {
301
+ const e3 = await withStore$1("readonly", (e4) => new Promise((t4) => {
302
+ const n3 = e4.getAll();
303
+ n3.onsuccess = () => t4(n3.result), n3.onerror = () => t4([]);
304
+ })) ?? [], t3 = Date.now(), n2 = [], i2 = [];
305
+ 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);
306
+ return i2.length > 0 && deleteCanvasFramesByIds(i2).catch(() => {
307
+ }), n2.sort((e4, t4) => (e4.id ?? 0) - (t4.id ?? 0)), n2;
308
+ })();
309
+ if (0 === e2.length) return;
310
+ const t2 = [];
311
+ for (const n2 of e2) {
312
+ if (!isWebSocketOpen(j)) break;
313
+ if (!_wsSendBinaryNow(n2.buf)) break;
314
+ "number" == typeof n2.id && t2.push(n2.id);
315
+ }
316
+ t2.length > 0 && deleteCanvasFramesByIds(t2).catch(() => {
317
+ });
318
+ }
319
+ async function flushBinaryBacklog() {
320
+ !(function flushBinaryRing() {
321
+ for (; K.length > 0 && isWebSocketOpen(j); ) {
322
+ const e2 = K.shift();
323
+ if (V -= e2.byteLength, !_wsSendBinaryNow(e2)) {
324
+ K.unshift(e2), V += e2.byteLength;
325
+ break;
326
+ }
327
+ }
328
+ })(), await flushPersistedBinary();
329
+ }
330
+ function getBinaryDropCount() {
331
+ return G;
332
+ }
333
+ function getBufferedAmount() {
334
+ if (O) return q;
335
+ if (N && isWebSocketOpen(j)) try {
336
+ return N();
337
+ } catch {
338
+ return 0;
339
+ }
340
+ return 0;
341
+ }
342
+ function isTransportSaturated() {
343
+ return getBufferedAmount() > 16777216;
344
+ }
345
+ function bufferBinaryOffline(e2) {
346
+ Q = true, persistCanvasFrame(e2).then((t2) => {
347
+ t2 || pushBinaryRing(e2);
348
+ }).catch(() => pushBinaryRing(e2));
349
+ }
350
+ function _wsSendBinaryNow(e2) {
351
+ if (O) try {
352
+ return O.postMessage({ type: "sendBinary", payload: e2 }, [e2]), true;
353
+ } catch {
354
+ return false;
355
+ }
356
+ try {
357
+ return U ? (U(e2), true) : (j.send(e2), true);
358
+ } catch {
359
+ return false;
360
+ }
361
+ }
362
+ function wsSendBinary(e2) {
363
+ return z || !isWebSocketOpen(j) ? (bufferBinaryOffline(e2), false) : !!_wsSendBinaryNow(e2) || (bufferBinaryOffline(e2), false);
364
+ }
365
+ let X = null, J = 0;
232
366
  function requestTimeSync() {
233
- if (!isWebSocketOpen(T)) return;
367
+ if (!isWebSocketOpen(j)) return;
234
368
  const e2 = getClockSyncManager(), t2 = (function makeTimeSyncRequestId() {
235
- return F += 1, `ts-${F}-${Math.random().toString(36).slice(2, 10)}`;
369
+ return J += 1, `ts-${J}-${Math.random().toString(36).slice(2, 10)}`;
236
370
  })();
237
371
  e2.beginSync(t2);
238
372
  wsSendPayload({ type: "time-sync-request", requestId: t2, clientSentAtMs: Date.now() }) || e2.abandonSync(t2);
@@ -247,21 +381,21 @@ function enrichEventWithTimeSync(e2) {
247
381
  const t2 = buildEventTimeEnvelope(monotonicNow(), Date.now());
248
382
  e2.client = t2.client, e2.serverEstimated = t2.serverEstimated;
249
383
  }
250
- let A = "", L = "", R = false;
251
- const D = [];
384
+ let Y = "", Z = "", ee = false;
385
+ const te = [];
252
386
  function onNavigationChange(e2) {
253
- D.push(e2);
387
+ te.push(e2);
254
388
  }
255
389
  function _updateHrefCache() {
256
- A = window.location.href, L = window.location.origin + window.location.pathname;
257
- for (const e2 of D) try {
390
+ Y = window.location.href, Z = window.location.origin + window.location.pathname;
391
+ for (const e2 of te) try {
258
392
  e2();
259
393
  } catch (e3) {
260
394
  }
261
395
  }
262
396
  function ensureHrefCache() {
263
- if (R || "undefined" == typeof window) return;
264
- R = true, _updateHrefCache(), window.addEventListener("popstate", _updateHrefCache), window.addEventListener("hashchange", _updateHrefCache);
397
+ if (ee || "undefined" == typeof window) return;
398
+ ee = true, _updateHrefCache(), window.addEventListener("popstate", _updateHrefCache), window.addEventListener("hashchange", _updateHrefCache);
265
399
  const e2 = history.pushState;
266
400
  history.pushState = function(...t3) {
267
401
  e2.apply(this, t3), _updateHrefCache();
@@ -272,48 +406,48 @@ function ensureHrefCache() {
272
406
  };
273
407
  }
274
408
  function getCachedHref() {
275
- return A || ("undefined" != typeof window ? window.location.href : "");
409
+ return Y || ("undefined" != typeof window ? window.location.href : "");
276
410
  }
277
411
  function getCachedHrefNoQuery() {
278
- return L || ("undefined" != typeof window ? window.location.origin + window.location.pathname : "");
412
+ return Z || ("undefined" != typeof window ? window.location.origin + window.location.pathname : "");
279
413
  }
280
- const _ = [];
281
- let P = null;
414
+ const ne = [];
415
+ let ie = null;
282
416
  function queueEventForIDB(e2) {
283
- _.push(e2), _.length >= 50 ? _flushIDBQueue() : P || (P = setTimeout(_flushIDBQueue, 100));
417
+ ne.push(e2), ne.length >= 50 ? _flushIDBQueue() : ie || (ie = setTimeout(_flushIDBQueue, 100));
284
418
  }
285
419
  function _flushIDBQueue() {
286
- if (P && (clearTimeout(P), P = null), 0 === _.length) return;
420
+ if (ie && (clearTimeout(ie), ie = null), 0 === ne.length) return;
287
421
  !(async function saveEventsToIDB(e2) {
288
- await withStore$1("readwrite", async (t2) => {
422
+ await withStore$2("readwrite", async (t2) => {
289
423
  for (const n2 of e2) t2.add({ timestamp: Date.now(), data: n2 });
290
424
  });
291
- })(_.splice(0));
425
+ })(ne.splice(0));
292
426
  }
293
- let B = false, O = null, j = null, U = false;
294
- const N = "sailfish_funcspan_global_state";
427
+ let oe = false, re = null, se = null, ae = false;
428
+ const ce = "sailfish_funcspan_global_state";
295
429
  function wsSendPayload(e2) {
296
- if (!isWebSocketOpen(T)) return false;
297
- if (I) try {
298
- return I.postMessage({ type: "send", payload: e2 }), true;
430
+ if (!isWebSocketOpen(j)) return false;
431
+ if (O) try {
432
+ return O.postMessage({ type: "send", payload: e2 }), true;
299
433
  } catch {
300
434
  return false;
301
435
  }
302
436
  try {
303
- return T.send(JSON.stringify(e2)), true;
437
+ return j.send(JSON.stringify(e2)), true;
304
438
  } catch {
305
439
  return false;
306
440
  }
307
441
  }
308
442
  function wsSendRaw(e2) {
309
- if (!isWebSocketOpen(T)) return false;
310
- if (I) try {
311
- return I.postMessage({ type: "sendRaw", payload: e2 }), true;
443
+ if (!isWebSocketOpen(j)) return false;
444
+ if (O) try {
445
+ return O.postMessage({ type: "sendRaw", payload: e2 }), true;
312
446
  } catch {
313
447
  return false;
314
448
  }
315
449
  try {
316
- return T.send(e2), true;
450
+ return j.send(e2), true;
317
451
  } catch {
318
452
  return false;
319
453
  }
@@ -322,40 +456,40 @@ function saveGlobalFuncSpanState(e2, t2) {
322
456
  try {
323
457
  if ("undefined" == typeof localStorage) return;
324
458
  const n2 = { enabled: e2, expirationTimestampMs: t2, savedAt: Date.now() };
325
- localStorage.setItem(N, JSON.stringify(n2)), k && console.log("[Sailfish] Saved funcSpan state to localStorage:", n2);
459
+ localStorage.setItem(ce, JSON.stringify(n2)), P && console.log("[Sailfish] Saved funcSpan state to localStorage:", n2);
326
460
  } catch (e3) {
327
- k && console.warn("[Sailfish] Failed to save funcSpan state to localStorage:", e3);
461
+ P && console.warn("[Sailfish] Failed to save funcSpan state to localStorage:", e3);
328
462
  }
329
463
  }
330
464
  function clearGlobalFuncSpanState() {
331
465
  try {
332
466
  if ("undefined" == typeof localStorage) return;
333
- localStorage.removeItem(N), k && console.log("[Sailfish] Cleared funcSpan state from localStorage");
467
+ localStorage.removeItem(ce), P && console.log("[Sailfish] Cleared funcSpan state from localStorage");
334
468
  } catch (e2) {
335
- k && console.warn("[Sailfish] Failed to clear funcSpan state from localStorage:", e2);
469
+ P && console.warn("[Sailfish] Failed to clear funcSpan state from localStorage:", e2);
336
470
  }
337
471
  }
338
472
  function clearStaleFuncSpanState() {
339
- B = false, j = null, U = false, clearGlobalFuncSpanState(), k && console.log("[Sailfish] Cleared stale function span tracking state (backend validation failed)");
473
+ oe = false, se = null, ae = false, clearGlobalFuncSpanState(), P && console.log("[Sailfish] Cleared stale function span tracking state (backend validation failed)");
340
474
  }
341
- let q = false;
475
+ let le = false;
342
476
  function restoreFuncSpanState() {
343
- if (q) return;
344
- q = true;
477
+ if (le) return;
478
+ le = true;
345
479
  const e2 = (function loadGlobalFuncSpanState() {
346
480
  try {
347
481
  if ("undefined" == typeof localStorage) return null;
348
- const e3 = localStorage.getItem(N);
482
+ const e3 = localStorage.getItem(ce);
349
483
  if (!e3) return null;
350
484
  const t2 = JSON.parse(e3);
351
- return k && console.log("[Sailfish] Loaded funcSpan state from localStorage:", t2), t2;
485
+ return P && console.log("[Sailfish] Loaded funcSpan state from localStorage:", t2), t2;
352
486
  } catch (e3) {
353
- return k && console.warn("[Sailfish] Failed to load funcSpan state from localStorage:", e3), null;
487
+ return P && console.warn("[Sailfish] Failed to load funcSpan state from localStorage:", e3), null;
354
488
  }
355
489
  })();
356
- if (e2 && e2.enabled) if (B = true, j = e2.expirationTimestampMs, U = false, k && console.log("[Sailfish] Restored global function span tracking from localStorage:", { enabled: true, expirationTime: j }), null !== j) {
357
- Date.now() >= j ? (B = false, j = null, clearGlobalFuncSpanState(), k && console.log("[Sailfish] Persisted tracking already expired, cleared state")) : k && console.log("[Sailfish] Function span tracking is active and valid (temporary until WebSocket confirms)");
358
- } else k && console.log("[Sailfish] Function span tracking is active (no expiration, temporary until WebSocket confirms)");
490
+ if (e2 && e2.enabled) if (oe = true, se = e2.expirationTimestampMs, ae = false, P && console.log("[Sailfish] Restored global function span tracking from localStorage:", { enabled: true, expirationTime: se }), null !== se) {
491
+ Date.now() >= se ? (oe = false, se = null, clearGlobalFuncSpanState(), P && console.log("[Sailfish] Persisted tracking already expired, cleared state")) : P && console.log("[Sailfish] Function span tracking is active and valid (temporary until WebSocket confirms)");
492
+ } else P && console.log("[Sailfish] Function span tracking is active (no expiration, temporary until WebSocket confirms)");
359
493
  }
360
494
  function isWebSocketOpen(e2) {
361
495
  return (e2 == null ? void 0 : e2.readyState) === WebSocket.OPEN;
@@ -367,7 +501,7 @@ async function flushNotifyQueue() {
367
501
  n2.onsuccess = () => t2(n2.result), n2.onerror = () => t2([]);
368
502
  })) ?? [];
369
503
  })();
370
- if (isWebSocketOpen(T)) try {
504
+ if (isWebSocketOpen(j)) try {
371
505
  for (const t2 of e2) {
372
506
  if (!wsSendRaw(t2.value)) break;
373
507
  await deleteNotifyMessageById(t2.id);
@@ -376,12 +510,12 @@ async function flushNotifyQueue() {
376
510
  }
377
511
  }
378
512
  async function flushBufferedEvents() {
379
- if (isWebSocketOpen(T)) if (M) await M;
513
+ if (isWebSocketOpen(j)) if (H) await H;
380
514
  else {
381
- M = (async () => {
515
+ H = (async () => {
382
516
  var _a, _b;
383
517
  const e2 = await (async function getAllIndexedEvents() {
384
- const e3 = await withStore$1("readonly", (e4) => new Promise((t4) => {
518
+ const e3 = await withStore$2("readonly", (e4) => new Promise((t4) => {
385
519
  const n3 = e4.getAll();
386
520
  n3.onsuccess = () => t4(n3.result), n3.onerror = () => t4([]);
387
521
  })) ?? [], t3 = Date.now(), n2 = [], i2 = [];
@@ -396,7 +530,7 @@ async function flushBufferedEvents() {
396
530
  for (const e3 of Object.values(t2)) {
397
531
  const t3 = buildBatches(e3, (e4) => eventSize(e4.data), 52428800);
398
532
  for (const e4 of t3) {
399
- if (!isWebSocketOpen(T)) break;
533
+ if (!isWebSocketOpen(j)) break;
400
534
  const t4 = e4.map((e5) => (e5.data.appUrl || (e5.data.appUrl = getCachedHref()), enrichEventWithTimeSync(e5.data), e5.data)), n2 = e4.map((e5) => e5.id).filter((e5) => null != e5);
401
535
  try {
402
536
  wsSendPayload({ type: "events", events: t4, mapUuid: window.sfMapUuid }) && await deleteEventsByIds(n2);
@@ -406,181 +540,183 @@ async function flushBufferedEvents() {
406
540
  }
407
541
  })();
408
542
  try {
409
- await M;
543
+ await H;
410
544
  } finally {
411
- M = null;
545
+ H = null;
412
546
  }
413
547
  }
414
548
  }
415
549
  function sendEvent(e2) {
416
- e2.app_url || (e2.app_url = getCachedHref()), enrichEventWithTimeSync(e2), !E && isWebSocketOpen(T) && wsSendPayload({ type: "event", event: e2, mapUuid: window.sfMapUuid }) || queueEventForIDB(e2);
550
+ e2.app_url || (e2.app_url = getCachedHref()), enrichEventWithTimeSync(e2), !z && isWebSocketOpen(j) && wsSendPayload({ type: "event", event: e2, mapUuid: window.sfMapUuid }) || queueEventForIDB(e2);
417
551
  }
418
552
  function handleWsOpen() {
419
- k && (console.log("[Sailfish] WebSocket connection opened"), console.log("[Sailfish] Function span tracking state: " + (B ? "ENABLED" : "DISABLED"))), (async () => {
553
+ P && (console.log("[Sailfish] WebSocket connection opened"), console.log("[Sailfish] Function span tracking state: " + (oe ? "ENABLED" : "DISABLED"))), (async () => {
420
554
  try {
421
- E = true, await flushNotifyQueue(), await flushBufferedEvents();
555
+ z = true, await flushNotifyQueue(), await flushBufferedEvents();
422
556
  } finally {
423
- E = false;
557
+ z = false;
424
558
  }
425
- null != C && clearInterval(C), C = window.setInterval(() => {
426
- flushBufferedEvents();
559
+ await flushBinaryBacklog(), null != W && clearInterval(W), W = window.setInterval(() => {
560
+ flushBufferedEvents(), Q && flushBinaryBacklog();
427
561
  }, 2e3);
428
562
  })(), (function kickoffTimeSyncBurst() {
429
563
  if ("undefined" != typeof window) for (let e2 = 0; e2 < 3; e2++) window.setTimeout(requestTimeSync, 250 * e2);
430
564
  })(), (function startTimeSyncInterval() {
431
- null == $ && "undefined" != typeof window && ($ = window.setInterval(() => {
565
+ null == X && "undefined" != typeof window && (X = window.setInterval(() => {
432
566
  requestTimeSync();
433
567
  }, 6e4));
434
568
  })();
435
569
  }
436
570
  function handleWsClose() {
437
- null != C && (clearInterval(C), C = null), (function stopTimeSyncInterval() {
438
- null != $ && "undefined" != typeof window && (window.clearInterval($), $ = null);
439
- })(), k && console.log("[Sailfish] WebSocket closed");
571
+ null != W && (clearInterval(W), W = null), (function stopTimeSyncInterval() {
572
+ null != X && "undefined" != typeof window && (window.clearInterval(X), X = null);
573
+ })(), P && console.log("[Sailfish] WebSocket closed");
440
574
  }
441
575
  function handleWsMessage(e2) {
442
576
  try {
443
577
  const t2 = JSON.parse(e2);
444
578
  if ("time-sync-response" === t2.type) return void getClockSyncManager().recordTimeSyncResponse({ requestId: t2.requestId, serverReceivedAtMs: t2.serverReceivedAtMs, serverSentAtMs: t2.serverSentAtMs });
445
- if ("funcSpanTrackingControl" === t2.type) if (k && console.log("[Sailfish] Received funcSpanTrackingControl message:", { enabled: t2.enabled, timeoutSeconds: t2.timeoutSeconds, expirationTimestampMs: t2.expirationTimestampMs }), null !== O && (window.clearTimeout(O), O = null), B = t2.enabled, U = false, k && console.log("[Sailfish] Function span tracking " + (t2.enabled ? "ENABLED (GLOBAL)" : "DISABLED (GLOBAL)")), t2.enabled) {
579
+ if ("funcSpanTrackingControl" === t2.type) if (P && console.log("[Sailfish] Received funcSpanTrackingControl message:", { enabled: t2.enabled, timeoutSeconds: t2.timeoutSeconds, expirationTimestampMs: t2.expirationTimestampMs }), null !== re && (window.clearTimeout(re), re = null), oe = t2.enabled, ae = false, P && console.log("[Sailfish] Function span tracking " + (t2.enabled ? "ENABLED (GLOBAL)" : "DISABLED (GLOBAL)")), t2.enabled) {
446
580
  if (t2.expirationTimestampMs) {
447
- j = t2.expirationTimestampMs;
448
- const e3 = Date.now(), n2 = j - e3;
449
- k && console.log(`[Sailfish] Server expiration timestamp: ${j}, ms until expiration: ${n2}`), n2 > 0 ? (saveGlobalFuncSpanState(true, j), O = window.setTimeout(() => {
450
- U || (B = false, j = null, clearGlobalFuncSpanState(), k && console.log("[Sailfish] GLOBAL function span tracking auto-disabled at server expiration time"), wsSendPayload({ type: "funcSpanTrackingExpired", sessionId: getOrSetSessionId(), expiredAt: Date.now() }), k && console.log("[Sailfish] Notified backend that function span tracking expired"));
451
- }, n2)) : (B = false, j = null, clearGlobalFuncSpanState(), k && console.log("[Sailfish] Tracking already expired, not enabling"));
581
+ se = t2.expirationTimestampMs;
582
+ const e3 = Date.now(), n2 = se - e3;
583
+ P && console.log(`[Sailfish] Server expiration timestamp: ${se}, ms until expiration: ${n2}`), n2 > 0 ? (saveGlobalFuncSpanState(true, se), re = window.setTimeout(() => {
584
+ ae || (oe = false, se = null, clearGlobalFuncSpanState(), P && console.log("[Sailfish] GLOBAL function span tracking auto-disabled at server expiration time"), wsSendPayload({ type: "funcSpanTrackingExpired", sessionId: getOrSetSessionId(), expiredAt: Date.now() }), P && console.log("[Sailfish] Notified backend that function span tracking expired"));
585
+ }, n2)) : (oe = false, se = null, clearGlobalFuncSpanState(), P && console.log("[Sailfish] Tracking already expired, not enabling"));
452
586
  } else {
453
587
  const e3 = t2.timeoutSeconds || 3600;
454
- e3 > 0 && (j = Date.now() + 1e3 * e3, saveGlobalFuncSpanState(true, j), O = window.setTimeout(() => {
455
- U || (B = false, j = null, clearGlobalFuncSpanState(), k && console.log(`[Sailfish] GLOBAL function span tracking auto-disabled after ${e3}s (legacy)`), wsSendPayload({ type: "funcSpanTrackingExpired", sessionId: getOrSetSessionId(), expiredAt: Date.now() }), k && console.log("[Sailfish] Notified backend that function span tracking expired (legacy timeout)"));
588
+ e3 > 0 && (se = Date.now() + 1e3 * e3, saveGlobalFuncSpanState(true, se), re = window.setTimeout(() => {
589
+ ae || (oe = false, se = null, clearGlobalFuncSpanState(), P && console.log(`[Sailfish] GLOBAL function span tracking auto-disabled after ${e3}s (legacy)`), wsSendPayload({ type: "funcSpanTrackingExpired", sessionId: getOrSetSessionId(), expiredAt: Date.now() }), P && console.log("[Sailfish] Notified backend that function span tracking expired (legacy timeout)"));
456
590
  }, 1e3 * e3));
457
591
  }
458
592
  try {
459
593
  const e3 = getOrSetSessionId();
460
- wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: e3, enabled: true, configurationType: "global" }), k && console.log(`[Sailfish] GLOBAL tracking session report sent for session: ${e3}`);
594
+ wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: e3, enabled: true, configurationType: "global" }), P && console.log(`[Sailfish] GLOBAL tracking session report sent for session: ${e3}`);
461
595
  } catch (e3) {
462
- k && console.warn("[Sailfish] Failed to send GLOBAL tracking session report:", e3);
596
+ P && console.warn("[Sailfish] Failed to send GLOBAL tracking session report:", e3);
463
597
  }
464
- } else j = null, clearGlobalFuncSpanState();
598
+ } else se = null, clearGlobalFuncSpanState();
465
599
  } catch (e3) {
466
600
  }
467
601
  }
468
- function initializeWebSocket(t2, n2, i2, o2, s2 = false) {
602
+ function initializeWebSocket(t2, n2, i2, o2, r2 = false) {
469
603
  ensureHrefCache();
470
- const r2 = (function getWebSocketHost(e2) {
604
+ const s2 = (function getWebSocketHost(e2) {
471
605
  const t3 = new URL(e2);
472
606
  return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
473
607
  })(t2);
474
- let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${r2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.4`;
475
- if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), I = s2 ? (function tryCreateWsWorker() {
608
+ let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.6`;
609
+ if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), U = null, N = null, q = 0, O = r2 ? (function tryCreateWsWorker() {
476
610
  if ("undefined" == typeof Worker) return null;
477
611
  try {
478
- const e2 = new Blob(['\nvar ws = null;\nvar wsUrl = "";\nvar reconnectTimer = null;\nvar reconnectDelay = 1000;\nvar MAX_RECONNECT_DELAY = 30000;\nvar CONNECTION_TIMEOUT = 30000;\nvar queue = [];\nvar MAX_QUEUE = 500;\n\nfunction enqueue(str) {\n if (queue.length >= MAX_QUEUE) queue.shift();\n queue.push(str);\n}\n\nfunction drain() {\n while (queue.length > 0) {\n if (!ws || ws.readyState !== 1) break;\n try { ws.send(queue.shift()); } catch (e) { break; }\n }\n}\n\nfunction connect() {\n if (ws && (ws.readyState === 0 || ws.readyState === 1)) return;\n try { ws = new WebSocket(wsUrl); } catch (e) { scheduleReconnect(); return; }\n var tid = setTimeout(function() { if (ws && ws.readyState === 0) ws.close(); }, CONNECTION_TIMEOUT);\n ws.onopen = function() {\n clearTimeout(tid);\n reconnectDelay = 1000;\n drain();\n postMessage({ type: "open" });\n };\n ws.onclose = function() {\n clearTimeout(tid);\n ws = null;\n postMessage({ type: "close" });\n scheduleReconnect();\n };\n ws.onerror = function() {};\n ws.onmessage = function(e) {\n postMessage({ type: "message", data: e.data });\n };\n}\n\nfunction scheduleReconnect() {\n if (reconnectTimer) return;\n reconnectTimer = setTimeout(function() {\n reconnectTimer = null;\n reconnectDelay = Math.min(reconnectDelay * 1.5, MAX_RECONNECT_DELAY);\n connect();\n }, reconnectDelay);\n}\n\nself.onmessage = function(e) {\n var msg = e.data;\n if (msg.type === "init") {\n wsUrl = msg.wsUrl;\n connect();\n } else if (msg.type === "send") {\n try {\n var s = JSON.stringify(msg.payload);\n if (ws && ws.readyState === 1) { ws.send(s); }\n else { enqueue(s); }\n } catch (e) {}\n } else if (msg.type === "sendRaw") {\n if (ws && ws.readyState === 1) {\n try { ws.send(msg.payload); } catch (e) { enqueue(msg.payload); }\n } else { enqueue(msg.payload); }\n } else if (msg.type === "close") {\n if (reconnectTimer) { clearTimeout(reconnectTimer); reconnectTimer = null; }\n if (ws) { ws.close(); ws = null; }\n }\n};\n'], { type: "application/javascript" }), t3 = URL.createObjectURL(e2), n3 = new Worker(t3);
612
+ const e2 = new Blob(['\nvar ws = null;\nvar wsUrl = "";\nvar reconnectTimer = null;\nvar reconnectDelay = 1000;\nvar MAX_RECONNECT_DELAY = 30000;\nvar CONNECTION_TIMEOUT = 30000;\nvar queue = [];\nvar MAX_QUEUE = 500;\n\nfunction enqueue(str) {\n if (queue.length >= MAX_QUEUE) queue.shift();\n queue.push(str);\n}\n\nfunction drain() {\n while (queue.length > 0) {\n if (!ws || ws.readyState !== 1) break;\n try { ws.send(queue.shift()); } catch (e) { break; }\n }\n}\n\n// Backpressure (A11): report the live socket buffer depth to the main thread on\n// a light interval so canvas video capture can throttle frame production when a\n// slow-but-open socket falls behind. Cheap (one number) and off the main thread.\nvar bufferedReportTimer = null;\nfunction startBufferedReporting() {\n if (bufferedReportTimer) return;\n bufferedReportTimer = setInterval(function() {\n var amt = (ws && ws.readyState === 1) ? (ws.bufferedAmount || 0) : 0;\n postMessage({ type: "buffered", bufferedAmount: amt });\n }, 250);\n}\n\nfunction connect() {\n if (ws && (ws.readyState === 0 || ws.readyState === 1)) return;\n try { ws = new WebSocket(wsUrl); } catch (e) { scheduleReconnect(); return; }\n var tid = setTimeout(function() { if (ws && ws.readyState === 0) ws.close(); }, CONNECTION_TIMEOUT);\n ws.onopen = function() {\n clearTimeout(tid);\n reconnectDelay = 1000;\n drain();\n startBufferedReporting();\n postMessage({ type: "open" });\n };\n ws.onclose = function() {\n clearTimeout(tid);\n ws = null;\n if (bufferedReportTimer) { clearInterval(bufferedReportTimer); bufferedReportTimer = null; }\n postMessage({ type: "buffered", bufferedAmount: 0 });\n postMessage({ type: "close" });\n scheduleReconnect();\n };\n ws.onerror = function() {};\n ws.onmessage = function(e) {\n postMessage({ type: "message", data: e.data });\n };\n}\n\nfunction scheduleReconnect() {\n if (reconnectTimer) return;\n reconnectTimer = setTimeout(function() {\n reconnectTimer = null;\n reconnectDelay = Math.min(reconnectDelay * 1.5, MAX_RECONNECT_DELAY);\n connect();\n }, reconnectDelay);\n}\n\nself.onmessage = function(e) {\n var msg = e.data;\n if (msg.type === "init") {\n wsUrl = msg.wsUrl;\n connect();\n } else if (msg.type === "send") {\n try {\n var s = JSON.stringify(msg.payload);\n if (ws && ws.readyState === 1) { ws.send(s); }\n else { enqueue(s); }\n } catch (e) {}\n } else if (msg.type === "sendRaw") {\n if (ws && ws.readyState === 1) {\n try { ws.send(msg.payload); } catch (e) { enqueue(msg.payload); }\n } else { enqueue(msg.payload); }\n } else if (msg.type === "sendBinary") {\n // Binary frames (canvas SFCV). The main thread only posts these while the\n // socket is open; if it closed in the meantime the frame is dropped (the\n // main-thread ring buffer covers the not-open case).\n if (ws && ws.readyState === 1) {\n try { ws.send(msg.payload); } catch (e) {}\n }\n } else if (msg.type === "close") {\n if (reconnectTimer) { clearTimeout(reconnectTimer); reconnectTimer = null; }\n if (ws) { ws.close(); ws = null; }\n }\n};\n'], { type: "application/javascript" }), t3 = URL.createObjectURL(e2), n3 = new Worker(t3);
479
613
  return URL.revokeObjectURL(t3), n3;
480
614
  } catch {
481
615
  return null;
482
616
  }
483
- })() : null, I) {
484
- const e2 = I, t3 = { readyState: WebSocket.CONNECTING, close: () => {
485
- t3.readyState = WebSocket.CLOSED, e2.postMessage({ type: "close" }), e2.terminate(), I = null, null != C && (clearInterval(C), C = null);
617
+ })() : null, O) {
618
+ const e2 = O, t3 = { readyState: WebSocket.CONNECTING, close: () => {
619
+ t3.readyState = WebSocket.CLOSED, e2.postMessage({ type: "close" }), e2.terminate(), O = null, null != W && (clearInterval(W), W = null);
486
620
  } };
487
- return T = t3, I.onmessage = (e3) => {
621
+ return j = t3, O.onmessage = (e3) => {
488
622
  const n3 = e3.data;
489
- "open" === n3.type ? (t3.readyState = WebSocket.OPEN, handleWsOpen()) : "close" === n3.type ? (t3.readyState = WebSocket.CLOSED, handleWsClose()) : "message" === n3.type && handleWsMessage(n3.data);
490
- }, I.onerror = () => {
491
- k && console.warn("[Sailfish] WebSocket worker error");
492
- }, I.postMessage({ type: "init", wsUrl: a2 }), k && console.log("[Sailfish] WebSocket running in Web Worker (off main thread)"), t3;
493
- }
494
- k && console.log("[Sailfish] WebSocket running on main thread (Worker unavailable)");
495
- const l2 = new e(a2, [], { connectionTimeout: 3e4 }), c2 = { get readyState() {
496
- return l2.readyState;
623
+ "open" === n3.type ? (t3.readyState = WebSocket.OPEN, handleWsOpen()) : "close" === n3.type ? (t3.readyState = WebSocket.CLOSED, q = 0, handleWsClose()) : "message" === n3.type ? handleWsMessage(n3.data) : "buffered" === n3.type && (q = "number" == typeof n3.bufferedAmount ? n3.bufferedAmount : 0);
624
+ }, O.onerror = () => {
625
+ P && console.warn("[Sailfish] WebSocket worker error");
626
+ }, O.postMessage({ type: "init", wsUrl: a2 }), P && console.log("[Sailfish] WebSocket running in Web Worker (off main thread)"), t3;
627
+ }
628
+ P && console.log("[Sailfish] WebSocket running on main thread (Worker unavailable)");
629
+ const c2 = new e(a2, [], { connectionTimeout: 3e4 });
630
+ c2.binaryType = "arraybuffer", U = (e2) => c2.send(e2), N = () => c2.bufferedAmount || 0;
631
+ const l2 = { get readyState() {
632
+ return c2.readyState;
497
633
  }, close: () => {
498
- l2.close(), null != C && (clearInterval(C), C = null);
634
+ c2.close(), null != W && (clearInterval(W), W = null);
499
635
  } };
500
- return T = c2, l2.addEventListener("open", () => handleWsOpen()), l2.addEventListener("close", () => handleWsClose()), l2.addEventListener("message", (e2) => handleWsMessage(e2.data)), c2;
636
+ return j = l2, c2.addEventListener("open", () => handleWsOpen()), c2.addEventListener("close", () => handleWsClose()), c2.addEventListener("message", (e2) => handleWsMessage(e2.data)), l2;
501
637
  }
502
638
  function sendMessage(e2) {
503
- "sessionId" in e2 || (e2.sessionId = getOrSetSessionId()), e2.app_url || (e2.app_url = getCachedHref()), enrichEventWithTimeSync(e2), E || !isWebSocketOpen(T) ? saveNotifyMessageToIDB(JSON.stringify(e2)) : wsSendPayload(e2) || saveNotifyMessageToIDB(JSON.stringify(e2));
639
+ "sessionId" in e2 || (e2.sessionId = getOrSetSessionId()), e2.app_url || (e2.app_url = getCachedHref()), enrichEventWithTimeSync(e2), z || !isWebSocketOpen(j) ? saveNotifyMessageToIDB(JSON.stringify(e2)) : wsSendPayload(e2) || saveNotifyMessageToIDB(JSON.stringify(e2));
504
640
  }
505
641
  function enableFunctionSpanTracking() {
506
- if (k && console.log("[Sailfish] enableFunctionSpanTracking() called - Report Issue recording started (LOCAL MODE)"), B = true, U = true, j = null, null !== O && (window.clearTimeout(O), O = null), isWebSocketOpen(T)) {
507
- wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: getOrSetSessionId(), enabled: true, configurationType: x });
508
- } else k && console.warn("[Sailfish] WebSocket not open, cannot report LOCAL tracking session");
642
+ if (P && console.log("[Sailfish] enableFunctionSpanTracking() called - Report Issue recording started (LOCAL MODE)"), oe = true, ae = true, se = null, null !== re && (window.clearTimeout(re), re = null), isWebSocketOpen(j)) {
643
+ wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: getOrSetSessionId(), enabled: true, configurationType: _ });
644
+ } else P && console.warn("[Sailfish] WebSocket not open, cannot report LOCAL tracking session");
509
645
  }
510
646
  function disableFunctionSpanTracking() {
511
- if (k && console.log("[Sailfish] disableFunctionSpanTracking() called - Report Issue recording stopped"), isWebSocketOpen(T)) {
512
- wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: getOrSetSessionId(), enabled: false, configurationType: x });
647
+ if (P && console.log("[Sailfish] disableFunctionSpanTracking() called - Report Issue recording stopped"), isWebSocketOpen(j)) {
648
+ wsSendPayload({ type: "funcSpanTrackingSessionReport", sessionId: getOrSetSessionId(), enabled: false, configurationType: _ });
513
649
  } else console.warn("[FUNCSPAN STOP] ✗ WebSocket not open, cannot notify tracking end");
514
- U && (B = false, U = false, j = null, k && console.log("[Sailfish] LOCAL tracking mode disabled")), null !== O && (window.clearTimeout(O), O = null);
650
+ ae && (oe = false, ae = false, se = null, P && console.log("[Sailfish] LOCAL tracking mode disabled")), null !== re && (window.clearTimeout(re), re = null);
515
651
  }
516
652
  function isFunctionSpanTrackingEnabled() {
517
- return B;
653
+ return oe;
518
654
  }
519
655
  function initializeFunctionSpanTrackingFromApi(e2) {
520
- e2 && !B ? (B = true, U = false, j = null, k && console.log("[Sailfish] Function span tracking initialized as ENABLED from API check")) : !e2 && B && (B = false, U = false, j = null, k && console.log("[Sailfish] Function span tracking initialized as DISABLED from API check"));
656
+ e2 && !oe ? (oe = true, ae = false, se = null, P && console.log("[Sailfish] Function span tracking initialized as ENABLED from API check")) : !e2 && oe && (oe = false, ae = false, se = null, P && console.log("[Sailfish] Function span tracking initialized as DISABLED from API check"));
521
657
  }
522
658
  function getFuncSpanHeader() {
523
- if (!B) return null;
524
- if (null !== j) {
525
- if (Date.now() >= j) return B = false, j = null, clearGlobalFuncSpanState(), k && console.log("[Sailfish] Function span tracking expired on header check - disabling now"), null;
659
+ if (!oe) return null;
660
+ if (null !== se) {
661
+ if (Date.now() >= se) return oe = false, se = null, clearGlobalFuncSpanState(), P && console.log("[Sailfish] Function span tracking expired on header check - disabling now"), null;
526
662
  }
527
663
  return { name: "X-Sf3-FunctionSpanCaptureOverride", value: "1-1-10-10-1-1.0-1-0-0" };
528
664
  }
529
- const z = Object.freeze(Object.defineProperty({ __proto__: null, clearStaleFuncSpanState, disableFunctionSpanTracking, enableFunctionSpanTracking, ensureHrefCache, flushBufferedEvents, getCachedHref, getCachedHrefNoQuery, getFuncSpanHeader, initializeFunctionSpanTrackingFromApi, initializeWebSocket, isFunctionSpanTrackingEnabled, onNavigationChange, requestTimeSync, restoreFuncSpanState, sendEvent, sendMessage }, Symbol.toStringTag, { value: "Module" }));
530
- let H = null, W = null;
665
+ const de = Object.freeze(Object.defineProperty({ __proto__: null, clearStaleFuncSpanState, disableFunctionSpanTracking, enableFunctionSpanTracking, ensureHrefCache, flushBufferedEvents, getBinaryDropCount, getBufferedAmount, getCachedHref, getCachedHrefNoQuery, getFuncSpanHeader, initializeFunctionSpanTrackingFromApi, initializeWebSocket, isFunctionSpanTrackingEnabled, isTransportSaturated, onNavigationChange, requestTimeSync, restoreFuncSpanState, sendEvent, sendMessage, wsSendBinary }, Symbol.toStringTag, { value: "Module" }));
666
+ let ue = null, pe = null;
531
667
  function getIdentifiedUser() {
532
- return H;
668
+ return ue;
533
669
  }
534
670
  function identify(e2, t2 = {}, n2 = false) {
535
671
  const i2 = { type: "identify", userId: e2, traits: t2 };
536
- H && H.userId === e2 && JSON.stringify(H.traits) === JSON.stringify(t2) || (H = { userId: e2, traits: t2, overwrite: n2 }, sendMessage(i2));
672
+ ue && ue.userId === e2 && JSON.stringify(ue.traits) === JSON.stringify(t2) || (ue = { userId: e2, traits: t2, overwrite: n2 }, sendMessage(i2));
537
673
  }
538
674
  function addOrUpdateMetadata(e2) {
539
675
  const t2 = { type: "addOrUpdateMetadata", metadata: e2 };
540
- W && JSON.stringify(W) === JSON.stringify(e2) || (W = e2, sendMessage(t2));
676
+ pe && JSON.stringify(pe) === JSON.stringify(e2) || (pe = e2, sendMessage(t2));
541
677
  }
542
678
  function trackingEvent(e2) {
543
- sendMessage({ type: "trackingEvent", trackingData: e2, timestamp: w() });
679
+ sendMessage({ type: "trackingEvent", trackingData: e2, timestamp: B() });
544
680
  }
545
- let K = null;
546
- const V = ["https://api.ipify.org?format=json", "https://api.ip.sb/jsonip", "https://api4.my-ip.io/ip.json"];
681
+ let fe = null;
682
+ const ge = ["https://api.ipify.org?format=json", "https://api.ip.sb/jsonip", "https://api4.my-ip.io/ip.json"];
547
683
  function fetchAndSendIp(e2) {
548
- K !== e2 && (K = e2, (async () => {
549
- for (const e3 of V) try {
684
+ fe !== e2 && (fe = e2, (async () => {
685
+ for (const e3 of ge) try {
550
686
  const t2 = new AbortController(), n2 = setTimeout(() => t2.abort(), 5e3), i2 = await fetch(e3, { signal: t2.signal });
551
687
  if (clearTimeout(n2), !i2.ok) continue;
552
- const o2 = await i2.json(), s2 = o2.ip || o2.origin || null;
553
- if (s2 && "string" == typeof s2 && s2.length <= 45) return void sendMessage({ type: "visitorIp", ip: s2, timestamp: w() });
688
+ const o2 = await i2.json(), r2 = o2.ip || o2.origin || null;
689
+ if (r2 && "string" == typeof r2 && r2.length <= 45) return void sendMessage({ type: "visitorIp", ip: r2, timestamp: B() });
554
690
  } catch {
555
691
  }
556
- K = null;
692
+ fe = null;
557
693
  })().catch(() => {
558
- K = null;
694
+ fe = null;
559
695
  }));
560
696
  }
561
- let G = null;
697
+ let me = null;
562
698
  async function getSourceMapModule() {
563
- return G || (G = await import("source-map-js")), G;
699
+ return me || (me = await import("source-map-js")), me;
564
700
  }
565
- const Q = /* @__PURE__ */ new Map(), J = /(?:\(|\s|^)(https?:\/\/[^)\s]+|\/[^)\s]+|[^)\s]+)?\/?([^/]+\.js)(?:\?[^:)]*)?:(\d+):(\d+)/;
701
+ const he = /* @__PURE__ */ new Map(), ye = /(?:\(|\s|^)(https?:\/\/[^)\s]+|\/[^)\s]+|[^)\s]+)?\/?([^/]+\.js)(?:\?[^:)]*)?:(\d+):(\d+)/;
566
702
  async function getConsumerFor(e2, t2) {
567
703
  const n2 = (e2 || `/assets/${t2}`).split("?")[0], i2 = [`${n2}.map`, n2.replace(/\.js$/, ".js.map"), `/assets/${t2}.map`], { SourceMapConsumer: o2 } = await getSourceMapModule();
568
704
  for (const e3 of i2) try {
569
- if (Q.has(e3)) return Q.get(e3);
705
+ if (he.has(e3)) return he.get(e3);
570
706
  const t3 = await fetch(e3);
571
707
  if (!t3.ok) continue;
572
708
  const n3 = await t3.json();
573
709
  if (!n3 || !n3.mappings || !n3.sources) continue;
574
710
  const i3 = await new o2(n3);
575
- return Q.set(e3, i3), i3;
711
+ return he.set(e3, i3), i3;
576
712
  } catch {
577
713
  }
578
714
  return null;
579
715
  }
580
716
  async function captureError(e2, t2 = false, n2) {
581
717
  let i2, o2;
582
- const s2 = [];
583
- e2 instanceof Error ? (i2 = e2.message || e2.name, o2 = e2.stack || "No stack trace", s2.push(`${e2.name}: ${i2}`)) : "string" == typeof e2 ? (i2 = e2, o2 = "No stack trace available", s2.push(t2 ? `Uncaught (in promise) ${e2}` : e2)) : (i2 = (function describeNonError(e3) {
718
+ const r2 = [];
719
+ e2 instanceof Error ? (i2 = e2.message || e2.name, o2 = e2.stack || "No stack trace", r2.push(`${e2.name}: ${i2}`)) : "string" == typeof e2 ? (i2 = e2, o2 = "No stack trace available", r2.push(t2 ? `Uncaught (in promise) ${e2}` : e2)) : (i2 = (function describeNonError(e3) {
584
720
  if (null === e3) return "null";
585
721
  if (void 0 === e3) return "undefined";
586
722
  if ("string" == typeof e3) return e3;
@@ -594,83 +730,83 @@ async function captureError(e2, t2 = false, n2) {
594
730
  } catch {
595
731
  return Object.prototype.toString.call(e3);
596
732
  }
597
- })(e2), o2 = "No stack trace available", s2.push(t2 ? `Uncaught (in promise) ${i2}` : i2)), (n2 == null ? void 0 : n2.filename) && s2.push(`at ${n2.filename}:${n2.lineno ?? 0}:${n2.colno ?? 0}`);
598
- const r2 = await (async function resolveStackTrace(e3) {
733
+ })(e2), o2 = "No stack trace available", r2.push(t2 ? `Uncaught (in promise) ${i2}` : i2)), (n2 == null ? void 0 : n2.filename) && r2.push(`at ${n2.filename}:${n2.lineno ?? 0}:${n2.colno ?? 0}`);
734
+ const s2 = await (async function resolveStackTrace(e3) {
599
735
  if (!e3) return ["No stack trace available"];
600
736
  const t3 = Array.isArray(e3) ? e3 : e3.split("\n"), n3 = [];
601
737
  for (const e4 of t3) {
602
- const t4 = e4.match(J);
738
+ const t4 = e4.match(ye);
603
739
  if (!t4) {
604
740
  n3.push(e4);
605
741
  continue;
606
742
  }
607
- const [, i3, o3, s3, r3] = t4, a3 = parseInt(s3, 10), l3 = Math.max(0, parseInt(r3, 10) - 1);
608
- if (!Number.isFinite(a3) || !Number.isFinite(l3)) {
743
+ const [, i3, o3, r3, s3] = t4, a3 = parseInt(r3, 10), c3 = Math.max(0, parseInt(s3, 10) - 1);
744
+ if (!Number.isFinite(a3) || !Number.isFinite(c3)) {
609
745
  n3.push(e4 + " [Invalid line/column]");
610
746
  continue;
611
747
  }
612
- const c3 = await getConsumerFor(i3, o3);
613
- if (!c3) {
748
+ const l3 = await getConsumerFor(i3, o3);
749
+ if (!l3) {
614
750
  n3.push(`${e4} [No source map found for ${o3}]`);
615
751
  continue;
616
752
  }
617
753
  const { SourceMapConsumer: d2 } = await getSourceMapModule();
618
- let u2 = c3.originalPositionFor({ line: a3, column: l3, bias: d2.GREATEST_LOWER_BOUND });
619
- if (!u2.source || null == u2.line) for (let e5 = 1; e5 <= 20 && (u2 = c3.originalPositionFor({ line: a3, column: Math.max(0, l3 - e5), bias: d2.GREATEST_LOWER_BOUND }), !u2.source || null == u2.line); e5++) ;
754
+ let u2 = l3.originalPositionFor({ line: a3, column: c3, bias: d2.GREATEST_LOWER_BOUND });
755
+ if (!u2.source || null == u2.line) for (let e5 = 1; e5 <= 20 && (u2 = l3.originalPositionFor({ line: a3, column: Math.max(0, c3 - e5), bias: d2.GREATEST_LOWER_BOUND }), !u2.source || null == u2.line); e5++) ;
620
756
  if (u2.source && null != u2.line) {
621
757
  const e5 = u2.name || "anonymous";
622
758
  n3.push(`${u2.source}:${u2.line}:${u2.column ?? 0} (${e5})`);
623
759
  } else n3.push(`${e4} [No mapping found in ${o3}]`);
624
760
  }
625
761
  return n3;
626
- })(o2), a2 = r2.filter((e3) => !e3.includes("chunk-") && !e3.includes("react-dom")), l2 = a2.length > 0 ? a2 : r2, c2 = Date.now();
627
- sendMessage({ type: "event", event: { type: 6, timestamp: c2, data: { payload: { message: i2, stack: o2, trace: l2, filteredStack: a2, payload: s2, userAgent: navigator.userAgent, url: window.location.href, timestamp: c2, level: "error" } } } });
628
- }
629
- const X = readDebugFlag();
630
- const Z = readDebugFlag();
631
- function sendGraphQLRequest(e2, t2, n2, i2 = 5, o2 = 2e3, s2 = 2) {
632
- const r2 = `${n2.backendApi}/graphql/?apiKey=${n2.apiKey}`;
633
- return Z && console.log(`Initial GraphQL request for ${e2} at ${r2}`), (function exponentialBackoff(e3, t3, n3 = 5, i3 = 2e3, o3 = 2) {
634
- let s3 = 0;
762
+ })(o2), a2 = s2.filter((e3) => !e3.includes("chunk-") && !e3.includes("react-dom")), c2 = a2.length > 0 ? a2 : s2, l2 = Date.now();
763
+ sendMessage({ type: "event", event: { type: 6, timestamp: l2, data: { payload: { message: i2, stack: o2, trace: c2, filteredStack: a2, payload: r2, userAgent: navigator.userAgent, url: window.location.href, timestamp: l2, level: "error" } } } });
764
+ }
765
+ const be = readDebugFlag();
766
+ const ve = readDebugFlag();
767
+ function sendGraphQLRequest(e2, t2, n2, i2 = 5, o2 = 2e3, r2 = 2) {
768
+ const s2 = `${n2.backendApi}/graphql/?apiKey=${n2.apiKey}`;
769
+ return ve && console.log(`Initial GraphQL request for ${e2} at ${s2}`), (function exponentialBackoff(e3, t3, n3 = 5, i3 = 2e3, o3 = 2) {
770
+ let r3 = 0;
635
771
  const attemptRequest = async () => {
636
772
  try {
637
773
  return await e3();
638
774
  } catch (e4) {
639
- if (s3++, s3 > n3) throw e4;
640
- const r3 = i3 * Math.pow(o3, s3 - 1);
641
- return X && console.log(`Attempt ${s3} failed: ${t3}; Retrying in ${r3}ms...`), await new Promise((e5) => setTimeout(e5, r3)), attemptRequest();
775
+ if (r3++, r3 > n3) throw e4;
776
+ const s3 = i3 * Math.pow(o3, r3 - 1);
777
+ return be && console.log(`Attempt ${r3} failed: ${t3}; Retrying in ${s3}ms...`), await new Promise((e5) => setTimeout(e5, s3)), attemptRequest();
642
778
  }
643
779
  };
644
780
  return attemptRequest();
645
- })(() => fetch(r2, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ operationName: e2, query: t2, variables: n2 }) }).then((e3) => {
646
- if (Z && console.log(`Received response with status: ${e3.status}`), !e3.ok) throw new Error(`GraphQL request failed with status ${e3.status}`);
781
+ })(() => fetch(s2, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ operationName: e2, query: t2, variables: n2 }) }).then((e3) => {
782
+ if (ve && console.log(`Received response with status: ${e3.status}`), !e3.ok) throw new Error(`GraphQL request failed with status ${e3.status}`);
647
783
  return e3.json();
648
- }), "Sending GraphQL request to Sailfish AI", i2, o2, s2);
784
+ }), "Sending GraphQL request to Sailfish AI", i2, o2, r2);
649
785
  }
650
786
  function fetchCaptureSettings(e2, t2) {
651
- return sendGraphQLRequest("GetCaptureSettingsFromApiKey", "\n query GetCaptureSettingsFromApiKey($apiKey: String!) {\n captureSettingsFromApiKey(apiKey: $apiKey) {\n recordCanvas\n recordCrossOriginIframes\n collectFonts\n inlineImages\n recordPassword\n recordRealName\n recordCreditCardInfo\n recordSsn\n recordDob\n sampling\n textEditThrottleEnabled\n maskInputSelector\n maskTextSelector\n blockSelector\n unmaskSelector\n maskInputOptions\n }\n }\n ", { apiKey: e2, backendApi: t2 });
787
+ return sendGraphQLRequest("GetCaptureSettingsFromApiKey", "\n query GetCaptureSettingsFromApiKey($apiKey: String!) {\n captureSettingsFromApiKey(apiKey: $apiKey) {\n recordCanvas\n recordCanvasSf\n recordCrossOriginIframes\n collectFonts\n inlineImages\n recordPassword\n recordRealName\n recordCreditCardInfo\n recordSsn\n recordDob\n sampling\n textEditThrottleEnabled\n maskInputSelector\n maskTextSelector\n blockSelector\n unmaskSelector\n maskInputOptions\n maskCanvasText\n }\n }\n ", { apiKey: e2, backendApi: t2 });
652
788
  }
653
789
  function fetchFunctionSpanTrackingEnabled(e2, t2) {
654
790
  return sendGraphQLRequest("GetFunctionSpanTrackingEnabledFromApiKey", "\n query GetFunctionSpanTrackingEnabledFromApiKey($apiKey: String!) {\n isFunctionSpanTrackingEnabledFromApiKey(apiKey: $apiKey)\n }\n ", { apiKey: e2, backendApi: t2 });
655
791
  }
656
- function startRecordingSession(e2, t2, n2, i2, o2, s2, r2, a2, l2) {
657
- return sendGraphQLRequest("StartSession", "mutation StartSession(\n $apiKey: UUID!,\n $recordingSessionId: UUID!,\n $serviceIdentifier: String!,\n $serviceVersion: String,\n $mapUuid: String,\n $gitSha: String,\n $library: String,\n $serviceAdditionalMetadata: JSON,\n $startRecordingFilePath: String,\n $startRecordingLineNumber: Int\n ) {\n startRecordingSession(\n companyApiKey: $apiKey,\n sessionId: $recordingSessionId,\n serviceIdentifier: $serviceIdentifier,\n serviceVersion: $serviceVersion,\n mapUuid: $mapUuid,\n gitSha: $gitSha,\n library: $library,\n serviceAdditionalMetadata: $serviceAdditionalMetadata,\n startRecordingFilePath: $startRecordingFilePath,\n startRecordingLineNumber: $startRecordingLineNumber\n ) {\n id\n }\n }", { apiKey: e2, recordingSessionId: t2, backendApi: n2, serviceIdentifier: i2, serviceVersion: o2, mapUuid: s2, gitSha: r2, library: a2, serviceAdditionalMetadata: l2, startRecordingFilePath: null, startRecordingLineNumber: null });
792
+ function startRecordingSession(e2, t2, n2, i2, o2, r2, s2, a2, c2, l2, d2, u2) {
793
+ return sendGraphQLRequest("StartSession", "mutation StartSession(\n $apiKey: UUID!,\n $recordingSessionId: UUID!,\n $serviceIdentifier: String!,\n $serviceVersion: String,\n $mapUuid: String,\n $gitSha: String,\n $gitOrg: String,\n $gitRepo: String,\n $gitProvider: String,\n $library: String,\n $serviceAdditionalMetadata: JSON,\n $startRecordingFilePath: String,\n $startRecordingLineNumber: Int\n ) {\n startRecordingSession(\n companyApiKey: $apiKey,\n sessionId: $recordingSessionId,\n serviceIdentifier: $serviceIdentifier,\n serviceVersion: $serviceVersion,\n mapUuid: $mapUuid,\n gitSha: $gitSha,\n gitOrg: $gitOrg,\n gitRepo: $gitRepo,\n gitProvider: $gitProvider,\n library: $library,\n serviceAdditionalMetadata: $serviceAdditionalMetadata,\n startRecordingFilePath: $startRecordingFilePath,\n startRecordingLineNumber: $startRecordingLineNumber\n ) {\n id\n }\n }", { apiKey: e2, recordingSessionId: t2, backendApi: n2, serviceIdentifier: i2, serviceVersion: o2, mapUuid: r2, gitSha: s2, gitOrg: l2, gitRepo: d2, gitProvider: u2, library: a2, serviceAdditionalMetadata: c2, startRecordingFilePath: null, startRecordingLineNumber: null });
658
794
  }
659
795
  function sendDomainsToNotPropagateHeaderTo(e2, t2, n2) {
660
796
  return sendGraphQLRequest("DomainsToNotPassHeaderTo", "mutation DomainsToNotPassHeaderTo($apiKey: String!, $domains: [String!]!) {\n domainsToNotPassHeaderTo(apiKey: $apiKey, domains: $domains)\n }", { apiKey: e2, domains: t2, backendApi: n2 });
661
797
  }
662
- function createTriageFromRecorder(e2, t2, n2, i2, o2, s2, r2) {
663
- return sendGraphQLRequest("CreateTriageFromRecorder", "mutation CreateTriageFromRecorder(\n $apiKey: String!,\n $recordingSessionId: String!,\n $timestampStart: String!,\n $timestampEnd: String!,\n $description: String,\n $triageSource: TriageSourceEnum\n ) {\n createTriageFromRecorder(\n apiKey: $apiKey,\n recordingSessionId: $recordingSessionId,\n timestampStart: $timestampStart,\n timestampEnd: $timestampEnd,\n description: $description,\n triageSource: $triageSource\n ) {\n id\n }\n }\n ", { apiKey: e2, recordingSessionId: n2, timestampStart: i2, timestampEnd: o2, description: s2, triageSource: r2, backendApi: t2 });
798
+ function createTriageFromRecorder(e2, t2, n2, i2, o2, r2, s2) {
799
+ return sendGraphQLRequest("CreateTriageFromRecorder", "mutation CreateTriageFromRecorder(\n $apiKey: String!,\n $recordingSessionId: String!,\n $timestampStart: String!,\n $timestampEnd: String!,\n $description: String,\n $triageSource: TriageSourceEnum\n ) {\n createTriageFromRecorder(\n apiKey: $apiKey,\n recordingSessionId: $recordingSessionId,\n timestampStart: $timestampStart,\n timestampEnd: $timestampEnd,\n description: $description,\n triageSource: $triageSource\n ) {\n id\n }\n }\n ", { apiKey: e2, recordingSessionId: n2, timestampStart: i2, timestampEnd: o2, description: r2, triageSource: s2, backendApi: t2 });
664
800
  }
665
801
  function fetchEngineeringTicketPlatformIntegrations(e2, t2) {
666
802
  return sendGraphQLRequest("GetEngineeringTicketPlatformIntegrationsFromApiKey", "query GetEngineeringTicketPlatformIntegrationsFromApiKey($apiKey: String!) {\n getEngineeringTicketPlatformIntegrationsFromApiKey(apiKey: $apiKey) {\n pushAutoIdentifiedIssues\n provider\n clientId\n defaultPriority\n defaultProject\n defaultTeam\n primaryCloudId\n installed\n projects\n teams\n workflowStates\n webhookState\n clouds\n labels\n sprints\n users\n fieldConfigurations\n invalidFields\n jiraReporterAccountId\n }\n }", { apiKey: e2, backendApi: t2 });
667
803
  }
668
- function createTriageAndIssueFromRecorder(e2, t2, n2, i2, o2, s2, r2, a2, l2, c2, d2, u2, p2, f2, g2, m2) {
669
- return sendGraphQLRequest("CreateTriageAndIssueFromRecorder", "mutation CreateTriageAndIssueFromRecorder(\n $apiKey: String!,\n $recordingSessionId: String!,\n $timestampStart: String!,\n $timestampEnd: String!,\n $description: String,\n $issueName: String,\n $issueDescription: String,\n $createEngineeringTicket: Boolean,\n $teamId: String,\n $projectId: String,\n $priority: Int,\n $labels: [String!],\n $issueType: String,\n $customFields: JSON,\n $triageSource: TriageSourceEnum\n ) {\n createTriageAndIssueFromRecorder(\n apiKey: $apiKey,\n recordingSessionId: $recordingSessionId,\n timestampStart: $timestampStart,\n timestampEnd: $timestampEnd,\n description: $description,\n issueName: $issueName,\n issueDescription: $issueDescription,\n createEngineeringTicket: $createEngineeringTicket,\n teamId: $teamId,\n projectId: $projectId,\n priority: $priority,\n labels: $labels,\n issueType: $issueType,\n customFields: $customFields,\n triageSource: $triageSource\n ) {\n id\n title\n }\n }\n ", { apiKey: e2, recordingSessionId: n2, timestampStart: i2, timestampEnd: o2, description: s2, issueName: r2, issueDescription: a2, createEngineeringTicket: l2, teamId: c2, projectId: d2, priority: u2, labels: p2, issueType: f2, customFields: g2, triageSource: m2, backendApi: t2 });
804
+ function createTriageAndIssueFromRecorder(e2, t2, n2, i2, o2, r2, s2, a2, c2, l2, d2, u2, p2, f2, g2, m2) {
805
+ return sendGraphQLRequest("CreateTriageAndIssueFromRecorder", "mutation CreateTriageAndIssueFromRecorder(\n $apiKey: String!,\n $recordingSessionId: String!,\n $timestampStart: String!,\n $timestampEnd: String!,\n $description: String,\n $issueName: String,\n $issueDescription: String,\n $createEngineeringTicket: Boolean,\n $teamId: String,\n $projectId: String,\n $priority: Int,\n $labels: [String!],\n $issueType: String,\n $customFields: JSON,\n $triageSource: TriageSourceEnum\n ) {\n createTriageAndIssueFromRecorder(\n apiKey: $apiKey,\n recordingSessionId: $recordingSessionId,\n timestampStart: $timestampStart,\n timestampEnd: $timestampEnd,\n description: $description,\n issueName: $issueName,\n issueDescription: $issueDescription,\n createEngineeringTicket: $createEngineeringTicket,\n teamId: $teamId,\n projectId: $projectId,\n priority: $priority,\n labels: $labels,\n issueType: $issueType,\n customFields: $customFields,\n triageSource: $triageSource\n ) {\n id\n title\n }\n }\n ", { apiKey: e2, recordingSessionId: n2, timestampStart: i2, timestampEnd: o2, description: r2, issueName: s2, issueDescription: a2, createEngineeringTicket: c2, teamId: l2, projectId: d2, priority: u2, labels: p2, issueType: f2, customFields: g2, triageSource: m2, backendApi: t2 });
670
806
  }
671
- const Y = ["/node_modules/", "/@sailfish-ai/", "/@sailfish-rrweb/", "/dist/", "/webpack/", "/vite/", "/__vite", "/react-dom/", "/react/", "/scheduler/", "/<", "/chrome-extension://", "/extensions/"];
807
+ const Se = ["/node_modules/", "/@sailfish-ai/", "/@sailfish-rrweb/", "/dist/", "/webpack/", "/vite/", "/__vite", "/react-dom/", "/react/", "/scheduler/", "/<", "/chrome-extension://", "/extensions/"];
672
808
  function shouldSkipFrame(e2) {
673
- return Y.some((t2) => e2.includes(t2));
809
+ return Se.some((t2) => e2.includes(t2));
674
810
  }
675
811
  function normalizeFilePath(e2) {
676
812
  let t2 = e2;
@@ -736,17 +872,9 @@ function yieldToMain() {
736
872
  var _a;
737
873
  return "undefined" != typeof globalThis && ((_a = globalThis.scheduler) == null ? void 0 : _a.yield) ? globalThis.scheduler.yield() : new Promise((e2) => setTimeout(e2, 0));
738
874
  }
739
- function closestSafe(e2, t2) {
740
- if (!e2 || !t2) return false;
741
- try {
742
- return !!e2.closest(t2);
743
- } catch {
744
- return false;
745
- }
746
- }
747
- const ee = { color: true, date: true, "datetime-local": true, email: true, month: true, number: true, range: true, search: true, tel: true, text: true, time: true, url: true, week: true, textarea: true, select: true, password: true };
748
- let te = null;
749
- const ne = "sailfishSanitize", ie = "zendesk_chat", oe = "Zendesk";
875
+ const we = { color: true, date: true, "datetime-local": true, email: true, month: true, number: true, range: true, search: true, tel: true, text: true, time: true, url: true, week: true, textarea: true, select: true, password: true };
876
+ let ke = null;
877
+ const xe = "sailfishSanitize", Ie = "zendesk_chat", Te = "Zendesk";
750
878
  function zE_safe(...e2) {
751
879
  try {
752
880
  if ((function hasZendesk() {
@@ -758,32 +886,30 @@ function zE_safe(...e2) {
758
886
  }
759
887
  function maskInputFn(e2, t2) {
760
888
  var _a;
761
- if ("hidden" === t2.type) return "";
762
- const n2 = { creditCard: /\b(?:\d[ -]*?){13,16}\b/, ssn: /\b\d{3}-\d{2}-\d{4}\b/ };
763
- return t2.hasAttribute("data-cc") || ((_a = t2.getAttribute("autocomplete")) == null ? void 0 : _a.startsWith("cc-")) || n2.creditCard.test(e2) ? "**** **** **** " + e2.slice(-4) : t2.hasAttribute("data-ssn") || n2.ssn.test(e2) ? "***-**-" + e2.slice(-4) : t2.hasAttribute("data-dob") ? "**/**/" + e2.slice(-4) : "*".repeat(e2.length);
889
+ return "hidden" === t2.type ? "" : t2.hasAttribute("data-cc") || ((_a = t2.getAttribute("autocomplete")) == null ? void 0 : _a.startsWith("cc-")) || o(e2) ? r(e2) : t2.hasAttribute("data-ssn") || s(e2) ? a(e2) : t2.hasAttribute("data-dob") ? c(e2) : "*".repeat(e2.length);
764
890
  }
765
- let se = true, re = null, ae = null, le = null, ce = null;
891
+ let Ee = true, Ce = null, Me = null, $e = null, Ae = null;
766
892
  function invalidateUrlCache() {
767
- se = true;
893
+ Ee = true;
768
894
  }
769
- const getUrlAndStoredUuids = () => (se && (function _refreshSessionStorageCache() {
770
- re = sessionStorage.getItem("pageVisitUUID"), ae = sessionStorage.getItem("prevPageVisitUUID"), le = sessionStorage.getItem("tabVisibilityChanged"), ce = sessionStorage.getItem("tabVisibilityState"), se = false;
771
- })(), { page_visit_uuid: re, prev_page_visit_uuid: ae, href: getCachedHrefNoQuery(), tabVisibilityChanged: le, tabVisibilityState: ce });
895
+ const getUrlAndStoredUuids = () => (Ee && (function _refreshSessionStorageCache() {
896
+ Ce = sessionStorage.getItem("pageVisitUUID"), Me = sessionStorage.getItem("prevPageVisitUUID"), $e = sessionStorage.getItem("tabVisibilityChanged"), Ae = sessionStorage.getItem("tabVisibilityState"), Ee = false;
897
+ })(), { page_visit_uuid: Ce, prev_page_visit_uuid: Me, href: getCachedHrefNoQuery(), tabVisibilityChanged: $e, tabVisibilityState: Ae });
772
898
  function initializeDomContentEvents(e2) {
773
899
  document.addEventListener("readystatechange", () => {
774
900
  const t2 = { type: 24, data: { source: 0, info: "" }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() };
775
901
  switch (document.readyState) {
776
902
  case "loading":
777
- t2.data.source = i;
903
+ t2.data.source = g;
778
904
  break;
779
905
  case "complete":
780
- t2.data.source = s;
906
+ t2.data.source = h;
781
907
  }
782
908
  t2.data.info && sendEvent(t2);
783
909
  }), document.addEventListener("DOMContentLoaded", () => {
784
- sendEvent({ type: 24, data: { source: o }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() });
910
+ sendEvent({ type: 24, data: { source: m }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() });
785
911
  }), window.addEventListener("pagehide", () => {
786
- sendEvent({ type: 24, data: { source: r }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() });
912
+ sendEvent({ type: 24, data: { source: y }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() });
787
913
  });
788
914
  }
789
915
  async function initializePerformancePlugin(e2) {
@@ -803,37 +929,37 @@ async function initializePerformancePlugin(e2) {
803
929
  async function initializeConsolePlugin(e2, n2) {
804
930
  const { getRecordConsolePlugin: i2 } = await import("@sailfish-rrweb/rrweb-plugin-console-record");
805
931
  await yieldToMain();
806
- const { name: o2, observer: s2 } = i2(e2);
807
- s2((e3) => {
808
- const i3 = e3, [s3, r2] = getCallerLocationFromTrace(i3 == null ? void 0 : i3.trace, 0), [a2, l2] = getCallerLocation(2), c2 = s3 ?? a2, d2 = r2 ?? l2, u2 = { ...i3, sourceFile: c2, sourceLine: d2 };
932
+ const { name: o2, observer: r2 } = i2(e2);
933
+ r2((e3) => {
934
+ const i3 = e3, [r3, s2] = getCallerLocationFromTrace(i3 == null ? void 0 : i3.trace, 0), [a2, c2] = getCallerLocation(2), l2 = r3 ?? a2, d2 = s2 ?? c2, u2 = { ...i3, sourceFile: l2, sourceLine: d2 };
809
935
  sendEvent({ type: t.Plugin, timestamp: Date.now(), data: { plugin: o2, payload: u2 }, sessionId: n2, ...getUrlAndStoredUuids() });
810
936
  }, window, e2);
811
937
  }
812
- async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2 = false) {
813
- const c2 = initializeWebSocket(n2, i2, o2, s2, a2);
938
+ async function initializeRecording(e2, o2, r2, s2, a2, c2 = true, l2 = false, d2 = false) {
939
+ const u2 = initializeWebSocket(o2, r2, s2, a2, l2);
814
940
  try {
815
- const n3 = (function createThrottledEmit(e3, t2 = 1e3) {
941
+ const o3 = (function createThrottledEmit(e3, t2 = 1e3) {
816
942
  if (!e3) return { emit: (e4) => sendEvent(e4), flush: () => {
817
943
  } };
818
- const n4 = /* @__PURE__ */ new Map();
819
- let i3 = null;
944
+ const n2 = /* @__PURE__ */ new Map();
945
+ let i2 = null;
820
946
  return { emit: (e4) => {
821
947
  var _a, _b;
822
- const o3 = (_a = e4.data) == null ? void 0 : _a.source;
823
- if (3 !== e4.type || 0 !== o3 && 5 !== o3) return void sendEvent(e4);
824
- if (0 === o3) {
825
- const t3 = e4.data, n5 = (t3 == null ? void 0 : t3.adds) && t3.adds.length > 0, i4 = (t3 == null ? void 0 : t3.removes) && t3.removes.length > 0;
826
- if (n5 || i4) return void sendEvent(e4);
948
+ const o4 = (_a = e4.data) == null ? void 0 : _a.source;
949
+ if (3 !== e4.type || 0 !== o4 && 5 !== o4) return void sendEvent(e4);
950
+ if (0 === o4) {
951
+ const t3 = e4.data, n3 = (t3 == null ? void 0 : t3.adds) && t3.adds.length > 0, i3 = (t3 == null ? void 0 : t3.removes) && t3.removes.length > 0;
952
+ if (n3 || i3) return void sendEvent(e4);
827
953
  }
828
- const s3 = `3:${o3}:${((_b = e4.data) == null ? void 0 : _b.id) || "unknown"}`;
829
- n4.set(s3, e4), i3 || (i3 = setInterval(() => {
830
- 0 !== n4.size && (n4.forEach((e5) => sendEvent(e5)), n4.clear());
954
+ const r3 = `3:${o4}:${((_b = e4.data) == null ? void 0 : _b.id) || "unknown"}`;
955
+ n2.set(r3, e4), i2 || (i2 = setInterval(() => {
956
+ 0 !== n2.size && (n2.forEach((e5) => sendEvent(e5)), n2.clear());
831
957
  }, t2));
832
958
  }, flush: () => {
833
- n4.size > 0 && (n4.forEach((e4) => sendEvent(e4)), n4.clear()), i3 && (clearInterval(i3), i3 = null);
959
+ n2.size > 0 && (n2.forEach((e4) => sendEvent(e4)), n2.clear()), i2 && (clearInterval(i2), i2 = null);
834
960
  } };
835
961
  })(e2.textEditThrottleEnabled), emitWithContext = (e3) => {
836
- Object.assign(e3, getUrlAndStoredUuids()), e3.sessionId = o2, n3.emit(e3);
962
+ Object.assign(e3, getUrlAndStoredUuids()), e3.sessionId = s2, o3.emit(e3);
837
963
  }, startHeavyWork = async () => {
838
964
  if (true === e2.enableFiberTracking) try {
839
965
  const { installFiberHook: e3, processExistingTree: t2 } = await import("./fiberHook-DGANQ2ma.js");
@@ -841,44 +967,50 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
841
967
  } catch (e3) {
842
968
  console.warn("[Sailfish] Failed to enable Fiber tracking:", e3);
843
969
  }
844
- const { record: n4 } = await import("@sailfish-rrweb/rrweb-record-only");
845
- te = n4, await yieldToMain();
846
- const i3 = e2.unmaskSelector || void 0, o3 = e2.blockSelector || void 0, s3 = e2.maskTextSelector || void 0, r3 = e2.maskInputSelector || void 0, a3 = { ...e2.maskInputOptions ?? {} }, c3 = r3 ? { ...ee } : a3, d2 = (function buildMaskInputFn(e3) {
847
- const { baseFn: t2, unmaskSelector: n5, maskInputSelector: i4, adminMaskInputOptions: o4 } = e3;
848
- return n5 || i4 ? (e4, s4) => {
849
- if ("hidden" === s4.type) return "";
850
- if (closestSafe(s4, n5)) return e4;
851
- const r4 = (s4.type || "").toLowerCase(), a4 = (s4.tagName || "").toLowerCase(), l3 = true === o4[r4] || true === o4[a4], c4 = (function matchesSelectorSafe(e5, t3) {
852
- if (!t3) return false;
853
- try {
854
- return e5.matches(t3);
855
- } catch {
856
- return false;
857
- }
858
- })(s4, i4);
859
- return l3 || c4 ? t2(e4, s4) : e4;
860
- } : t2;
861
- })({ baseFn: maskInputFn, unmaskSelector: i3, maskInputSelector: r3, adminMaskInputOptions: a3 }), u2 = /* @__PURE__ */ (function makeMaskTextFn(e3) {
862
- return (t2, n5) => closestSafe(n5, e3) ? t2 : t2.replace(/\S/g, "*");
863
- })(i3);
864
- if (l2) {
865
- const { chunkedSnapshot: a4 } = await import("./chunkSerializer-DDukZpgl.js"), l3 = n4.mirror;
866
- let p2 = true;
867
- const f2 = [];
868
- n4({ emit(e3) {
869
- p2 ? f2.push(e3) : emitWithContext(e3);
870
- }, ...e2, maskInputOptions: c3, maskInputFn: d2, maskTextFn: u2, maskInputSelector: r3, maskTextSelector: s3, blockSelector: o3, maskTextClass: e2.maskTextClass ?? ne, recordDOM: false });
871
- const g2 = Date.now(), m2 = await a4(document, l3, { chunkSize: 500, maxChunkMs: 16, blockClass: e2.blockClass, blockSelector: o3, maskTextClass: e2.maskTextClass ?? ne, maskTextSelector: s3, maskInputSelector: r3, maskInputOptions: c3, maskInputFn: d2, maskTextFn: u2, unmaskSelector: i3 });
970
+ const { record: o4 } = await import("@sailfish-rrweb/rrweb-record-only");
971
+ ke = o4, await yieldToMain();
972
+ const r3 = e2.unmaskSelector || void 0, a3 = e2.blockSelector || void 0, c3 = e2.maskTextSelector || void 0, l3 = e2.maskInputSelector || void 0, u3 = { ...e2.maskInputOptions ?? {} }, p2 = l3 ? { ...we } : u3, f2 = n({ baseFn: maskInputFn, unmaskSelector: r3, maskInputSelector: l3, adminMaskInputOptions: u3 }), g2 = i(r3);
973
+ if (d2) {
974
+ const { chunkedSnapshot: n2 } = await import("./chunkSerializer-CghPitF4.js"), i2 = o4.mirror;
975
+ let s3 = true;
976
+ const d3 = [];
977
+ o4({ emit(e3) {
978
+ s3 ? d3.push(e3) : emitWithContext(e3);
979
+ }, ...e2, maskInputOptions: p2, maskInputFn: f2, maskTextFn: g2, maskInputSelector: l3, maskTextSelector: c3, blockSelector: a3, maskTextClass: e2.maskTextClass ?? xe, recordDOM: false, recordCanvas: false });
980
+ const u4 = Date.now(), m2 = await n2(document, i2, { chunkSize: 500, maxChunkMs: 16, blockClass: e2.blockClass, blockSelector: a3, maskTextClass: e2.maskTextClass ?? xe, maskTextSelector: c3, maskInputSelector: l3, maskInputOptions: p2, maskInputFn: f2, maskTextFn: g2, unmaskSelector: r3 });
872
981
  if (m2) {
873
- emitWithContext({ type: t.Meta, data: { href: window.location.href, width: document.documentElement.clientWidth || document.body.clientWidth, height: document.documentElement.clientHeight || document.body.clientHeight }, timestamp: g2 }), emitWithContext({ type: t.FullSnapshot, data: { node: m2, initialOffset: { left: void 0 !== window.pageXOffset ? window.pageXOffset : document.documentElement.scrollLeft, top: void 0 !== window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop } }, timestamp: g2 });
874
- for (const e3 of f2) emitWithContext(e3);
875
- p2 = false;
876
- } else console.warn("[Sailfish] chunkSnapshot serialization failed; session continues without initial DOM snapshot"), p2 = false;
877
- } else n4({ emit(e3) {
982
+ emitWithContext({ type: t.Meta, data: { href: window.location.href, width: document.documentElement.clientWidth || document.body.clientWidth, height: document.documentElement.clientHeight || document.body.clientHeight }, timestamp: u4 }), emitWithContext({ type: t.FullSnapshot, data: { node: m2, initialOffset: { left: void 0 !== window.pageXOffset ? window.pageXOffset : document.documentElement.scrollLeft, top: void 0 !== window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop } }, timestamp: u4 });
983
+ for (const e3 of d3) emitWithContext(e3);
984
+ s3 = false;
985
+ } else console.warn("[Sailfish] chunkSnapshot serialization failed; session continues without initial DOM snapshot"), s3 = false;
986
+ } else o4({ emit(e3) {
878
987
  emitWithContext(e3);
879
- }, ...e2, maskInputOptions: c3, maskInputFn: d2, maskTextFn: u2, maskInputSelector: r3, maskTextSelector: s3, blockSelector: o3, maskTextClass: e2.maskTextClass ?? ne });
988
+ }, ...e2, maskInputOptions: p2, maskInputFn: f2, maskTextFn: g2, maskInputSelector: l3, maskTextSelector: c3, blockSelector: a3, maskTextClass: e2.maskTextClass ?? xe, recordCanvas: false });
989
+ if (e2.recordCanvas) try {
990
+ const { startCanvasRecording: n2, stopCanvasRecording: i2, flushAllCanvas: r4, isCanvasRecordingActive: a4 } = await import("./canvasManager-CoX5072G.js"), c4 = { settings: { maskCanvasClass: e2.maskCanvasClass, maskTextClass: e2.maskTextClass, maskTextSelector: e2.maskTextSelector, blockSelector: e2.blockSelector, unmaskSelector: e2.unmaskSelector, maskCanvasText: e2.maskCanvasText ?? void 0, canvasRedactStyle: e2.canvasRedactStyle, recordSsn: e2.recordSsn, recordCreditCardInfo: e2.recordCreditCardInfo, recordDob: e2.recordDob, recordRealName: e2.recordRealName, recordPassword: e2.recordPassword }, mirror: o4.mirror, addSailfishEvent: (e3) => {
991
+ ke == null ? void 0 : ke.addSailfishEvent(t.SailfishCustom, { ...e3, tag: "sf-canvas" });
992
+ }, sendBinary: wsSendBinary, getContextIds: () => ({ session_id: s2, page_visit_uuid: getUrlAndStoredUuids().page_visit_uuid }), isTransportSaturated };
993
+ n2(c4);
994
+ const onVisibilityHidden = () => {
995
+ try {
996
+ "hidden" === document.visibilityState && r4();
997
+ } catch {
998
+ }
999
+ };
1000
+ document.addEventListener("visibilitychange", onVisibilityHidden), window.addEventListener("pagehide", () => {
1001
+ i2();
1002
+ }), window.addEventListener("pageshow", (e3) => {
1003
+ try {
1004
+ e3.persisted && !a4() && n2(c4);
1005
+ } catch (e4) {
1006
+ console.warn("[Sailfish] canvas recording failed to re-arm after bfcache restore:", e4);
1007
+ }
1008
+ });
1009
+ } catch (e3) {
1010
+ console.warn("[Sailfish] canvas recording failed to start:", e3);
1011
+ }
880
1012
  };
881
- if (r2) {
1013
+ if (c2) {
882
1014
  let e3 = false;
883
1015
  const startOnce = () => {
884
1016
  e3 || (e3 = true, startHeavyWork());
@@ -895,7 +1027,7 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
895
1027
  "complete" === document.readyState ? scheduleAfterLoad() : window.addEventListener("load", () => scheduleAfterLoad(), { once: true });
896
1028
  } else "function" == typeof requestIdleCallback ? requestIdleCallback(startHeavyWork, { timeout: 2e3 }) : setTimeout(startHeavyWork, 0);
897
1029
  window.addEventListener("beforeunload", () => {
898
- n3.flush();
1030
+ o3.flush();
899
1031
  }), (function whenZendeskReady(e3) {
900
1032
  if ("undefined" == typeof window) return;
901
1033
  const t2 = window.zE;
@@ -905,14 +1037,14 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
905
1037
  }
906
1038
  })(() => {
907
1039
  suppressConsoleLogsDuringCall(() => {
908
- zE_safe("messenger:set", "conversationTags", [`sailfish-session-${o2}`]);
1040
+ zE_safe("messenger:set", "conversationTags", [`sailfish-session-${s2}`]);
909
1041
  });
910
1042
  const handleWidgetOpen = () => {
911
- te == null ? void 0 : te.addSailfishEvent(t.SailfishCustom, { action: "customer support chat opened", element_id: ie, provider: oe });
1043
+ ke == null ? void 0 : ke.addSailfishEvent(t.SailfishCustom, { action: "customer support chat opened", element_id: Ie, provider: Te });
912
1044
  }, handleWidgetClose = () => {
913
- te == null ? void 0 : te.addSailfishEvent(t.SailfishCustom, { action: "customer support chat closed", element_id: ie, provider: oe });
1045
+ ke == null ? void 0 : ke.addSailfishEvent(t.SailfishCustom, { action: "customer support chat closed", element_id: Ie, provider: Te });
914
1046
  }, handleUnreadMessages = (e3) => {
915
- te == null ? void 0 : te.addSailfishEvent(t.SailfishCustom, { action: "zendesk unreadmessages", element_id: ie, provider: oe });
1047
+ ke == null ? void 0 : ke.addSailfishEvent(t.SailfishCustom, { action: "zendesk unreadmessages", element_id: Ie, provider: Te });
916
1048
  };
917
1049
  suppressConsoleLogsDuringCall(() => {
918
1050
  zE_safe("messenger:on", "open", handleWidgetOpen), zE_safe("messenger:on", "close", handleWidgetClose), zE_safe("messenger:on", "unreadMessages", handleUnreadMessages);
@@ -921,9 +1053,9 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
921
1053
  } catch (e3) {
922
1054
  console.error("Error importing plugins!", e3);
923
1055
  }
924
- return c2;
1056
+ return u2;
925
1057
  }
926
- const de = [(e2) => (function checkNextJs() {
1058
+ const Fe = [(e2) => (function checkNextJs() {
927
1059
  try {
928
1060
  if (void 0 !== globalThis.__NEXT_DATA__) return "nextjs";
929
1061
  } catch {
@@ -985,52 +1117,52 @@ const de = [(e2) => (function checkNextJs() {
985
1117
  }
986
1118
  return null;
987
1119
  }];
988
- const ue = "sf-create-issue-preference", pe = "sf-create-eng-ticket-preference";
1120
+ const Le = "sf-create-issue-preference", Re = "sf-create-eng-ticket-preference";
989
1121
  function getInitialState() {
990
1122
  const e2 = (function loadUserPreferences() {
991
- return { createIssue: m && "true" === localStorage.getItem(ue), createEngTicket: m && "true" === localStorage.getItem(pe) };
1123
+ return { createIssue: $ && "true" === localStorage.getItem(Le), createEngTicket: $ && "true" === localStorage.getItem(Re) };
992
1124
  })();
993
1125
  return { mode: "lookback", description: "", occurredInThisTab: true, createIssue: e2.createIssue, issueName: "", issueDescription: "", createEngTicket: e2.createEngTicket, engTicketTeam: "", engTicketProject: "", engTicketPriority: 0, engTicketLabels: [], engTicketSprint: "", engTicketIssueType: "", engTicketCustomFields: {} };
994
1126
  }
995
- let fe = getInitialState(), ge = null, me = null, he = null, ye = false, Se = false;
1127
+ let De = getInitialState(), Be = null, Pe = null, _e = null, Oe = false, je = false;
996
1128
  function setSprintDefaulted(e2) {
997
- Se = e2;
1129
+ je = e2;
998
1130
  }
999
1131
  function setTimerInterval(e2) {
1000
- he = e2;
1132
+ _e = e2;
1001
1133
  }
1002
1134
  function setIsRecording(e2) {
1003
- ye = e2;
1135
+ Oe = e2;
1004
1136
  }
1005
- const be = ["jira", "linear", "zendesk"];
1006
- let ve = null;
1007
- const we = /* @__PURE__ */ new Map();
1137
+ const Ue = ["jira", "linear", "zendesk"];
1138
+ let Ne = null;
1139
+ const qe = /* @__PURE__ */ new Map();
1008
1140
  function getIntegrationData() {
1009
- return ve;
1141
+ return Ne;
1010
1142
  }
1011
1143
  function hasValidIntegration() {
1012
- return null !== ve && true === ve.installed;
1144
+ return null !== Ne && true === Ne.installed;
1013
1145
  }
1014
1146
  function resolveIntegration(e2) {
1015
1147
  var _a;
1016
1148
  if ((e2 == null ? void 0 : e2.errors) && e2.errors.length > 0) return console.error("GraphQL errors fetching integrations:", e2.errors), null;
1017
1149
  const t2 = (_a = e2 == null ? void 0 : e2.data) == null ? void 0 : _a.getEngineeringTicketPlatformIntegrationsFromApiKey, n2 = (t2 || []).filter((e3) => {
1018
1150
  var _a2;
1019
- return be.includes(((_a2 = e3.provider) == null ? void 0 : _a2.toLowerCase()) || "") && true === e3.installed;
1151
+ return Ue.includes(((_a2 = e3.provider) == null ? void 0 : _a2.toLowerCase()) || "") && true === e3.installed;
1020
1152
  });
1021
1153
  if (0 === n2.length) return console.warn("No valid installed integrations found"), null;
1022
1154
  const i2 = n2.find((e3) => {
1023
1155
  var _a2;
1024
1156
  return "jira" === ((_a2 = e3.provider) == null ? void 0 : _a2.toLowerCase());
1025
1157
  }) || n2[0];
1026
- return (i2 == null ? void 0 : i2.primaryCloudId) && we.set(i2.primaryCloudId, i2), i2;
1158
+ return (i2 == null ? void 0 : i2.primaryCloudId) && qe.set(i2.primaryCloudId, i2), i2;
1027
1159
  }
1028
1160
  async function refreshIntegrationData(e2, t2) {
1029
1161
  try {
1030
1162
  const n2 = resolveIntegration(await fetchEngineeringTicketPlatformIntegrations(e2, t2));
1031
- return ve = n2, n2;
1163
+ return Ne = n2, n2;
1032
1164
  } catch (e3) {
1033
- return console.error("Error refreshing integration data:", e3), ve;
1165
+ return console.error("Error refreshing integration data:", e3), Ne;
1034
1166
  }
1035
1167
  }
1036
1168
  function populateSelectOptions(e2, t2, n2) {
@@ -1075,8 +1207,8 @@ function populateSprintOptions(e2, t2, n2) {
1075
1207
  }), n2 && (e2.value = n2);
1076
1208
  }
1077
1209
  function getSprintFieldId() {
1078
- if (!(ve == null ? void 0 : ve.fieldConfigurations)) return "customfield_10020";
1079
- const e2 = Array.isArray(ve.fieldConfigurations) ? ve.fieldConfigurations : [];
1210
+ if (!(Ne == null ? void 0 : Ne.fieldConfigurations)) return "customfield_10020";
1211
+ const e2 = Array.isArray(Ne.fieldConfigurations) ? Ne.fieldConfigurations : [];
1080
1212
  for (const t2 of e2) {
1081
1213
  const e3 = (t2.fields || []).find((e4) => {
1082
1214
  var _a;
@@ -1088,12 +1220,12 @@ function getSprintFieldId() {
1088
1220
  }
1089
1221
  function updateIssueTypeOptions(e2, t2) {
1090
1222
  var _a;
1091
- if (!(ve == null ? void 0 : ve.projects) || !t2) {
1223
+ if (!(Ne == null ? void 0 : Ne.projects) || !t2) {
1092
1224
  e2.innerHTML = "";
1093
1225
  const t3 = document.createElement("option");
1094
1226
  return t3.value = "", t3.disabled = true, t3.selected = true, t3.textContent = "Select project first...", t3.style.color = "#9ca3af", e2.appendChild(t3), void (e2.style.color = "#9ca3af");
1095
1227
  }
1096
- const n2 = ve.projects.find((e3) => e3.id === t2);
1228
+ const n2 = Ne.projects.find((e3) => e3.id === t2);
1097
1229
  if (!n2 || !n2.issue_types) {
1098
1230
  e2.innerHTML = "";
1099
1231
  const t3 = document.createElement("option");
@@ -1112,17 +1244,17 @@ function updateIssueTypeOptions(e2, t2) {
1112
1244
  }), n3 = i2.find((e3) => {
1113
1245
  var _a2;
1114
1246
  return "task" === ((_a2 = e3.name) == null ? void 0 : _a2.toLowerCase());
1115
- }), s2 = (t3 == null ? void 0 : t3.id) || (n3 == null ? void 0 : n3.id) || ((_a = i2[0]) == null ? void 0 : _a.id);
1116
- s2 ? (e2.value = s2, e2.style.color = "#000") : (o2.selected = true, e2.style.color = "#9ca3af");
1247
+ }), r2 = (t3 == null ? void 0 : t3.id) || (n3 == null ? void 0 : n3.id) || ((_a = i2[0]) == null ? void 0 : _a.id);
1248
+ r2 ? (e2.value = r2, e2.style.color = "#000") : (o2.selected = true, e2.style.color = "#9ca3af");
1117
1249
  }
1118
1250
  }
1119
1251
  function getFieldsForProject(e2, t2) {
1120
- if (!(ve == null ? void 0 : ve.fieldConfigurations) || !e2) return [];
1121
- const n2 = Array.isArray(ve.fieldConfigurations) ? ve.fieldConfigurations.find((n3) => !(n3.project_key !== e2 && String(n3.project_id) !== String(e2) || t2 && String(n3.issue_type_id) !== String(t2))) : ve.fieldConfigurations[e2];
1252
+ if (!(Ne == null ? void 0 : Ne.fieldConfigurations) || !e2) return [];
1253
+ const n2 = Array.isArray(Ne.fieldConfigurations) ? Ne.fieldConfigurations.find((n3) => !(n3.project_key !== e2 && String(n3.project_id) !== String(e2) || t2 && String(n3.issue_type_id) !== String(t2))) : Ne.fieldConfigurations[e2];
1122
1254
  return n2 && n2.fields ? n2.fields : [];
1123
1255
  }
1124
1256
  function getUsers() {
1125
- return (ve == null ? void 0 : ve.users) ? ve.users : [];
1257
+ return (Ne == null ? void 0 : Ne.users) ? Ne.users : [];
1126
1258
  }
1127
1259
  function getDefaultReporterAccountId() {
1128
1260
  const e2 = getUsers(), t2 = getIdentifiedUser();
@@ -1131,16 +1263,16 @@ function getDefaultReporterAccountId() {
1131
1263
  const n3 = e2.filter(t3);
1132
1264
  return 1 === n3.length ? n3[0] : null;
1133
1265
  };
1134
- let s2 = i2 ? findUnique((e3) => (e3.email || e3.emailAddress || "").toLowerCase().trim() === i2) : null;
1135
- if (!s2 && o2 && (s2 = findUnique((e3) => (e3.name || e3.displayName || "").toLowerCase().trim() === o2)), !s2 && i2) {
1266
+ let r2 = i2 ? findUnique((e3) => (e3.email || e3.emailAddress || "").toLowerCase().trim() === i2) : null;
1267
+ if (!r2 && o2 && (r2 = findUnique((e3) => (e3.name || e3.displayName || "").toLowerCase().trim() === o2)), !r2 && i2) {
1136
1268
  const e3 = i2.split("@")[0];
1137
- e3.length >= 3 && (s2 = findUnique((t3) => (t3.name || t3.displayName || "").toLowerCase().trim().includes(e3)));
1269
+ e3.length >= 3 && (r2 = findUnique((t3) => (t3.name || t3.displayName || "").toLowerCase().trim().includes(e3)));
1138
1270
  }
1139
- return s2 && (s2.id || s2.accountId) || null;
1271
+ return r2 && (r2.id || r2.accountId) || null;
1140
1272
  }
1141
1273
  function lastReporterStorageKey() {
1142
- if (!ve) return null;
1143
- const e2 = ve.primaryCloudId || ve.provider || "";
1274
+ if (!Ne) return null;
1275
+ const e2 = Ne.primaryCloudId || Ne.provider || "";
1144
1276
  return e2 ? `sf-veritas:lastReporter:${e2}` : null;
1145
1277
  }
1146
1278
  function getSavedLastReporterAccountId() {
@@ -1167,42 +1299,42 @@ function getValidSavedReporterAccountId() {
1167
1299
  return getUsers().some((t2) => (t2.accountId || t2.id) === e2 && false !== t2.active) ? e2 : null;
1168
1300
  }
1169
1301
  function getProjectsForTeam(e2) {
1170
- if (!ve) return [];
1171
- const t2 = ve.teams && Array.isArray(ve.teams) && ve.teams.length > 0;
1302
+ if (!Ne) return [];
1303
+ const t2 = Ne.teams && Array.isArray(Ne.teams) && Ne.teams.length > 0;
1172
1304
  if (t2 && e2) {
1173
- const t3 = ve.teams.find((t4) => t4.id === e2);
1305
+ const t3 = Ne.teams.find((t4) => t4.id === e2);
1174
1306
  return (t3 == null ? void 0 : t3.projects) || [];
1175
1307
  }
1176
- return !t2 && ve.projects ? ve.projects : [];
1308
+ return !t2 && Ne.projects ? Ne.projects : [];
1177
1309
  }
1178
1310
  function updateFormWithIntegrationData(e2) {
1179
1311
  var _a;
1180
- if (!ve) return e2;
1181
- const t2 = ve.teams && Array.isArray(ve.teams) && ve.teams.length > 0, n2 = document.getElementById("sf-eng-ticket-team");
1182
- n2 && t2 && (populateSelectOptions(n2, ve.teams, ve.defaultTeam), e2.engTicketTeam ? n2.value = e2.engTicketTeam : e2.engTicketTeam = n2.value);
1312
+ if (!Ne) return e2;
1313
+ const t2 = Ne.teams && Array.isArray(Ne.teams) && Ne.teams.length > 0, n2 = document.getElementById("sf-eng-ticket-team");
1314
+ n2 && t2 && (populateSelectOptions(n2, Ne.teams, Ne.defaultTeam), e2.engTicketTeam ? n2.value = e2.engTicketTeam : e2.engTicketTeam = n2.value);
1183
1315
  const i2 = document.getElementById("sf-eng-ticket-project");
1184
1316
  if (i2) {
1185
- populateSelectOptions(i2, t2 ? getProjectsForTeam(e2.engTicketTeam) : ve.projects || [], ve.defaultProject), e2.engTicketProject ? i2.value = e2.engTicketProject : e2.engTicketProject = i2.value;
1317
+ populateSelectOptions(i2, t2 ? getProjectsForTeam(e2.engTicketTeam) : Ne.projects || [], Ne.defaultProject), e2.engTicketProject ? i2.value = e2.engTicketProject : e2.engTicketProject = i2.value;
1186
1318
  }
1187
1319
  const o2 = document.getElementById("sf-eng-ticket-priority");
1188
- o2 && (populatePriorityOptions(o2, ve.provider || "", ve.defaultPriority), e2.engTicketPriority ? o2.value = String(e2.engTicketPriority) : e2.engTicketPriority = Number(o2.value));
1189
- const s2 = document.getElementById("sf-eng-ticket-sprint"), r2 = "jira" === ((_a = ve.provider) == null ? void 0 : _a.toLowerCase());
1190
- if (s2 && r2 && ve.sprints) {
1191
- if (!e2.engTicketSprint && !Se) {
1192
- const t3 = pickDefaultActiveSprint(ve.sprints, e2.engTicketProject, ve.projects || []);
1320
+ o2 && (populatePriorityOptions(o2, Ne.provider || "", Ne.defaultPriority), e2.engTicketPriority ? o2.value = String(e2.engTicketPriority) : e2.engTicketPriority = Number(o2.value));
1321
+ const r2 = document.getElementById("sf-eng-ticket-sprint"), s2 = "jira" === ((_a = Ne.provider) == null ? void 0 : _a.toLowerCase());
1322
+ if (r2 && s2 && Ne.sprints) {
1323
+ if (!e2.engTicketSprint && !je) {
1324
+ const t3 = pickDefaultActiveSprint(Ne.sprints, e2.engTicketProject, Ne.projects || []);
1193
1325
  (t3 == null ? void 0 : t3.id) && (e2.engTicketSprint = String(t3.id), setSprintDefaulted(true));
1194
1326
  }
1195
- populateSprintOptions(s2, ve.sprints, e2.engTicketSprint || void 0), e2.engTicketSprint && (s2.style.color = "");
1327
+ populateSprintOptions(r2, Ne.sprints, e2.engTicketSprint || void 0), e2.engTicketSprint && (r2.style.color = "");
1196
1328
  }
1197
1329
  const a2 = document.getElementById("sf-eng-ticket-type");
1198
- return a2 && r2 && e2.engTicketProject && (updateIssueTypeOptions(a2, e2.engTicketProject), e2.engTicketIssueType ? (a2.value = e2.engTicketIssueType, a2.style.color = "#000") : a2.value && (e2.engTicketIssueType = a2.value)), e2;
1330
+ return a2 && s2 && e2.engTicketProject && (updateIssueTypeOptions(a2, e2.engTicketProject), e2.engTicketIssueType ? (a2.value = e2.engTicketIssueType, a2.style.color = "#000") : a2.value && (e2.engTicketIssueType = a2.value)), e2;
1199
1331
  }
1200
- const ke = Object.freeze(Object.defineProperty({ __proto__: null, fetchIntegrationData: async function fetchIntegrationData(e2, t2) {
1201
- if (!ve) try {
1332
+ const ze = Object.freeze(Object.defineProperty({ __proto__: null, fetchIntegrationData: async function fetchIntegrationData(e2, t2) {
1333
+ if (!Ne) try {
1202
1334
  const n2 = await fetchEngineeringTicketPlatformIntegrations(e2, t2);
1203
- ve = resolveIntegration(n2);
1335
+ Ne = resolveIntegration(n2);
1204
1336
  } catch (e3) {
1205
- console.error("Error fetching integration data:", e3), ve = null;
1337
+ console.error("Error fetching integration data:", e3), Ne = null;
1206
1338
  }
1207
1339
  }, getDefaultReporterAccountId, getFieldsForProject, getIntegrationData, getProjectsForTeam, getSavedLastReporterAccountId, getSprintFieldId, getUsers, getValidSavedReporterAccountId, hasValidIntegration, pickDefaultActiveSprint, populatePriorityOptions, populateSelectOptions, populateSprintOptions, refreshIntegrationData, saveLastReporterAccountId, updateFormWithIntegrationData, updateIssueTypeOptions }, Symbol.toStringTag, { value: "Module" }));
1208
1340
  function renderCustomMultiSelect(e2, t2, n2, i2, o2 = false) {
@@ -1238,9 +1370,9 @@ function renderCustomMultiSelect(e2, t2, n2, i2, o2 = false) {
1238
1370
  </div>
1239
1371
  `;
1240
1372
  }
1241
- const xe = { enabled: false, openModalExistingMode: { key: "e", requireCmdCtrl: false }, openModalCaptureNewMode: { key: "n", requireCmdCtrl: false }, closeModal: { key: "escape", requireCmdCtrl: false }, submitReport: { key: "enter", requireCmdCtrl: true }, startRecording: { key: "r", requireCmdCtrl: false }, stopRecording: { key: "escape", requireCmdCtrl: true } }, Ie = { shortcuts: { ...xe }, resolveSessionId: null, apiKey: null, backendApi: null, triageBaseUrl: "https://app.sailfishqa.com", deactivateIsolation: () => {
1373
+ const He = { enabled: false, openModalExistingMode: { key: "e", requireCmdCtrl: false }, openModalCaptureNewMode: { key: "n", requireCmdCtrl: false }, closeModal: { key: "escape", requireCmdCtrl: false }, submitReport: { key: "enter", requireCmdCtrl: true }, startRecording: { key: "r", requireCmdCtrl: false }, stopRecording: { key: "escape", requireCmdCtrl: true } }, We = { shortcuts: { ...He }, resolveSessionId: null, apiKey: null, backendApi: null, triageBaseUrl: "https://app.sailfishqa.com", deactivateIsolation: () => {
1242
1374
  }, integrationData: null, showEngTicketFieldsDefault: false };
1243
- let Te = null, Ee = false;
1375
+ let Ke = null, Ve = false;
1244
1376
  function setupCustomMultiSelectListeners(e2, t2) {
1245
1377
  const n2 = document.getElementById(`${e2}-container`), i2 = document.getElementById(`${e2}-dropdown`);
1246
1378
  if (!n2 || !i2) return;
@@ -1257,16 +1389,16 @@ function setupCustomMultiSelectListeners(e2, t2) {
1257
1389
  </span>`);
1258
1390
  }
1259
1391
  });
1260
- const s2 = n2.querySelector(".sf-multiselect-chips");
1261
- return s2 && (s2.innerHTML = o2.join("") || '<span style="color:#9ca3af;">Select...</span>', s2.querySelectorAll(".sf-multiselect-chip-remove").forEach((e4) => {
1392
+ const r2 = n2.querySelector(".sf-multiselect-chips");
1393
+ return r2 && (r2.innerHTML = o2.join("") || '<span style="color:#9ca3af;">Select...</span>', r2.querySelectorAll(".sf-multiselect-chip-remove").forEach((e4) => {
1262
1394
  e4.addEventListener("click", (n3) => {
1263
1395
  n3.stopPropagation();
1264
- const o3 = e4.dataset.value || "", s3 = i2.querySelector(`.sf-multiselect-option[data-value="${o3}"]`);
1265
- s3 && (s3.dataset.selected = "false", s3.style.backgroundColor = ""), updateChipsDisplay();
1266
- const r2 = [];
1396
+ const o3 = e4.dataset.value || "", r3 = i2.querySelector(`.sf-multiselect-option[data-value="${o3}"]`);
1397
+ r3 && (r3.dataset.selected = "false", r3.style.backgroundColor = ""), updateChipsDisplay();
1398
+ const s2 = [];
1267
1399
  i2.querySelectorAll(".sf-multiselect-option").forEach((e5) => {
1268
- "true" === e5.dataset.selected && r2.push(e5.dataset.value || "");
1269
- }), t2(r2);
1400
+ "true" === e5.dataset.selected && s2.push(e5.dataset.value || "");
1401
+ }), t2(s2);
1270
1402
  });
1271
1403
  })), e3;
1272
1404
  }
@@ -1275,8 +1407,8 @@ function setupCustomMultiSelectListeners(e2, t2) {
1275
1407
  n3.stopPropagation();
1276
1408
  const i3 = e3, o2 = "true" === i3.dataset.selected;
1277
1409
  i3.dataset.selected = String(!o2), i3.style.backgroundColor = o2 ? "" : "#e0f2fe";
1278
- const s2 = updateChipsDisplay();
1279
- t2(s2);
1410
+ const r2 = updateChipsDisplay();
1411
+ t2(r2);
1280
1412
  });
1281
1413
  }), updateChipsDisplay(), document.addEventListener("click", (e3) => {
1282
1414
  const t3 = e3.target;
@@ -1289,12 +1421,12 @@ function renderDynamicFields(e2, t2) {
1289
1421
  if (!e2) return void (n2.innerHTML = '<div style="font-size:14px; color:#64748B;">Select a project to see additional fields</div>');
1290
1422
  const i2 = getFieldsForProject(e2, t2), o2 = getUsers();
1291
1423
  if (!i2 || 0 === i2.length) return void (n2.innerHTML = "");
1292
- const s2 = i2.map((e3) => (function renderDynamicField(e4, t3, n3 = []) {
1424
+ const r2 = i2.map((e3) => (function renderDynamicField(e4, t3, n3 = []) {
1293
1425
  var _a, _b, _c, _d;
1294
- const i3 = e4.fieldId || e4.key, o3 = e4.name, s3 = (_a = e4.schema) == null ? void 0 : _a.type, r2 = (_b = e4.schema) == null ? void 0 : _b.system, a2 = (_c = e4.schema) == null ? void 0 : _c.custom, l2 = e4.required || false, c2 = e4.allowedValues, d2 = ["summary", "description", "project", "issuetype", "priority"];
1295
- if (d2.includes(i3) || d2.includes(r2)) return null;
1296
- const u2 = l2 ? '<span style="color:#ef4444;">*</span>' : "", p2 = "width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none;";
1297
- switch (s3) {
1426
+ const i3 = e4.fieldId || e4.key, o3 = e4.name, r3 = (_a = e4.schema) == null ? void 0 : _a.type, s2 = (_b = e4.schema) == null ? void 0 : _b.system, a2 = (_c = e4.schema) == null ? void 0 : _c.custom, c2 = e4.required || false, l2 = e4.allowedValues, d2 = ["summary", "description", "project", "issuetype", "priority"];
1427
+ if (d2.includes(i3) || d2.includes(s2)) return null;
1428
+ const u2 = c2 ? '<span style="color:#ef4444;">*</span>' : "", p2 = "width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none;";
1429
+ switch (r3) {
1298
1430
  case "string":
1299
1431
  return a2 && a2.includes("textarea") ? `
1300
1432
  <div>
@@ -1307,7 +1439,7 @@ function renderDynamicFields(e2, t2) {
1307
1439
  data-field-id="${i3}"
1308
1440
  placeholder="Enter ${o3.toLowerCase()}"
1309
1441
  style="${p2} height:80px; resize:none;"
1310
- ${l2 ? "required" : ""}
1442
+ ${c2 ? "required" : ""}
1311
1443
  >${t3 || ""}</textarea>
1312
1444
  </div>
1313
1445
  ` : `
@@ -1323,7 +1455,7 @@ function renderDynamicFields(e2, t2) {
1323
1455
  value="${t3 || ""}"
1324
1456
  placeholder="Enter ${o3.toLowerCase()}"
1325
1457
  style="${p2}"
1326
- ${l2 ? "required" : ""}
1458
+ ${c2 ? "required" : ""}
1327
1459
  />
1328
1460
  </div>
1329
1461
  `;
@@ -1342,7 +1474,7 @@ function renderDynamicFields(e2, t2) {
1342
1474
  placeholder="Enter ${o3.toLowerCase()}"
1343
1475
  style="${p2}"
1344
1476
  step="0.5"
1345
- ${l2 ? "required" : ""}
1477
+ ${c2 ? "required" : ""}
1346
1478
  />
1347
1479
  </div>
1348
1480
  `;
@@ -1359,7 +1491,7 @@ function renderDynamicFields(e2, t2) {
1359
1491
  data-field-id="${i3}"
1360
1492
  value="${t3 || ""}"
1361
1493
  style="${p2}"
1362
- ${l2 ? "required" : ""}
1494
+ ${c2 ? "required" : ""}
1363
1495
  />
1364
1496
  </div>
1365
1497
  `;
@@ -1368,7 +1500,7 @@ function renderDynamicFields(e2, t2) {
1368
1500
  const e5 = n3.map((e6) => {
1369
1501
  const n4 = e6.email ? `${e6.name} (${e6.email})` : e6.name, i4 = t3 === e6.id ? "selected" : "";
1370
1502
  return `<option value="${e6.id}" ${i4}>${n4}</option>`;
1371
- }).join(""), s4 = t3 && n3.some((e6) => e6.id === t3);
1503
+ }).join(""), r4 = t3 && n3.some((e6) => e6.id === t3);
1372
1504
  return `
1373
1505
  <div>
1374
1506
  <label for="${i3}" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">
@@ -1378,10 +1510,10 @@ function renderDynamicFields(e2, t2) {
1378
1510
  id="${i3}"
1379
1511
  class="sf-dynamic-field"
1380
1512
  data-field-id="${i3}"
1381
- style="${p2} appearance:none; cursor:pointer; background-color: white; ${s4 ? "" : "color: #9ca3af;"}"
1382
- ${l2 ? "required" : ""}
1513
+ style="${p2} appearance:none; cursor:pointer; background-color: white; ${r4 ? "" : "color: #9ca3af;"}"
1514
+ ${c2 ? "required" : ""}
1383
1515
  >
1384
- <option value="" ${s4 ? "" : "selected"} style="color: #9ca3af;">Select ${o3.toLowerCase()}...</option>
1516
+ <option value="" ${r4 ? "" : "selected"} style="color: #9ca3af;">Select ${o3.toLowerCase()}...</option>
1385
1517
  ${e5}
1386
1518
  </select>
1387
1519
  </div>
@@ -1389,11 +1521,11 @@ function renderDynamicFields(e2, t2) {
1389
1521
  }
1390
1522
  return null;
1391
1523
  case "option":
1392
- if (c2 && c2.length > 0) {
1393
- const e5 = c2.map((e6) => {
1524
+ if (l2 && l2.length > 0) {
1525
+ const e5 = l2.map((e6) => {
1394
1526
  const n5 = e6.id || e6.value || e6, i4 = e6.value || e6.name || e6;
1395
1527
  return `<option value="${n5}" ${t3 === n5 ? "selected" : ""}>${i4}</option>`;
1396
- }).join(""), n4 = t3 && c2.some((e6) => (e6.id || e6.value || e6) === t3);
1528
+ }).join(""), n4 = t3 && l2.some((e6) => (e6.id || e6.value || e6) === t3);
1397
1529
  return `
1398
1530
  <div>
1399
1531
  <label for="${i3}" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">
@@ -1404,7 +1536,7 @@ function renderDynamicFields(e2, t2) {
1404
1536
  class="sf-dynamic-field"
1405
1537
  data-field-id="${i3}"
1406
1538
  style="${p2} appearance:none; cursor:pointer; background-color: white; ${n4 ? "" : "color: #9ca3af;"}"
1407
- ${l2 ? "required" : ""}
1539
+ ${c2 ? "required" : ""}
1408
1540
  >
1409
1541
  <option value="" ${n4 ? "" : "selected"} style="color: #9ca3af;">Select ${o3.toLowerCase()}...</option>
1410
1542
  ${e5}
@@ -1414,7 +1546,7 @@ function renderDynamicFields(e2, t2) {
1414
1546
  }
1415
1547
  return null;
1416
1548
  case "array":
1417
- return "labels" === r2 ? null : c2 && c2.length > 0 ? renderCustomMultiSelect(i3, o3, c2, Array.isArray(t3) ? t3 : [], l2) : null;
1549
+ return "labels" === s2 ? null : l2 && l2.length > 0 ? renderCustomMultiSelect(i3, o3, l2, Array.isArray(t3) ? t3 : [], c2) : null;
1418
1550
  case "parent":
1419
1551
  case "issuelink":
1420
1552
  return `
@@ -1430,7 +1562,7 @@ function renderDynamicFields(e2, t2) {
1430
1562
  value="${t3 || ""}"
1431
1563
  placeholder="e.g., PROJ-123"
1432
1564
  style="${p2}"
1433
- ${l2 ? "required" : ""}
1565
+ ${c2 ? "required" : ""}
1434
1566
  />
1435
1567
  </div>
1436
1568
  `;
@@ -1448,27 +1580,27 @@ function renderDynamicFields(e2, t2) {
1448
1580
  value="${t3 || ""}"
1449
1581
  placeholder="Enter ${o3.toLowerCase()}"
1450
1582
  style="${p2}"
1451
- ${l2 ? "required" : ""}
1583
+ ${c2 ? "required" : ""}
1452
1584
  />
1453
1585
  </div>
1454
1586
  ` : null;
1455
1587
  }
1456
- })(e3, fe.engTicketCustomFields[e3.fieldId || e3.key], o2)).filter(Boolean).join("");
1457
- n2.innerHTML = s2 || "", i2.forEach((e3) => {
1588
+ })(e3, De.engTicketCustomFields[e3.fieldId || e3.key], o2)).filter(Boolean).join("");
1589
+ n2.innerHTML = r2 || "", i2.forEach((e3) => {
1458
1590
  var _a;
1459
1591
  const t3 = e3.fieldId || e3.key, n3 = (_a = e3.schema) == null ? void 0 : _a.type, i3 = e3.allowedValues;
1460
1592
  "array" === n3 && i3 && i3.length > 0 && setupCustomMultiSelectListeners(t3, (e4) => {
1461
- fe.engTicketCustomFields[t3] = e4;
1593
+ De.engTicketCustomFields[t3] = e4;
1462
1594
  });
1463
1595
  });
1464
1596
  }
1465
1597
  function generateEngTicketFieldsHTML() {
1466
1598
  var _a;
1467
- const e2 = Ie.integrationData;
1599
+ const e2 = We.integrationData;
1468
1600
  if (!e2) return "";
1469
1601
  const t2 = "jira" === ((_a = e2.provider) == null ? void 0 : _a.toLowerCase());
1470
1602
  let n2 = "<div style='display:flex; flex-direction:column; gap:12px;'>";
1471
- return e2.teams && Array.isArray(e2.teams) && e2.teams.length > 0 && (n2 += '\n <div>\n <label for="sf-eng-ticket-team" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Team\n </label>\n <select id="sf-eng-ticket-team"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select team...</option>\n </select>\n </div>\n '), n2 += '\n <div>\n <label for="sf-eng-ticket-project" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Project\n </label>\n <select id="sf-eng-ticket-project"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select project...</option>\n </select>\n </div>\n ', t2 && (n2 += '\n <div>\n <label for="sf-eng-ticket-type" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Issue Type\n </label>\n <select id="sf-eng-ticket-type"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select project first...</option>\n </select>\n </div>\n '), n2 += '\n <div>\n <label for="sf-eng-ticket-priority" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Priority\n </label>\n <select id="sf-eng-ticket-priority"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white;">\n </select>\n </div>\n ', e2.labels && Array.isArray(e2.labels) && e2.labels.length > 0 && (n2 += renderCustomMultiSelect("sf-eng-ticket-labels", "Labels", e2.labels, fe.engTicketLabels, false)), t2 && e2.sprints && Array.isArray(e2.sprints) && e2.sprints.length > 0 && (n2 += '\n <div>\n <label for="sf-eng-ticket-sprint" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Sprint\n </label>\n <select id="sf-eng-ticket-sprint"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select sprint...</option>\n </select>\n </div>\n '), n2 += '\n <div id="sf-dynamic-fields-container" style="display: flex; flex-direction: column; gap: 12px;"></div>\n ', n2 += "</div>", n2;
1603
+ return e2.teams && Array.isArray(e2.teams) && e2.teams.length > 0 && (n2 += '\n <div>\n <label for="sf-eng-ticket-team" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Team\n </label>\n <select id="sf-eng-ticket-team"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select team...</option>\n </select>\n </div>\n '), n2 += '\n <div>\n <label for="sf-eng-ticket-project" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Project\n </label>\n <select id="sf-eng-ticket-project"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select project...</option>\n </select>\n </div>\n ', t2 && (n2 += '\n <div>\n <label for="sf-eng-ticket-type" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Issue Type\n </label>\n <select id="sf-eng-ticket-type"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select project first...</option>\n </select>\n </div>\n '), n2 += '\n <div>\n <label for="sf-eng-ticket-priority" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Priority\n </label>\n <select id="sf-eng-ticket-priority"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white;">\n </select>\n </div>\n ', e2.labels && Array.isArray(e2.labels) && e2.labels.length > 0 && (n2 += renderCustomMultiSelect("sf-eng-ticket-labels", "Labels", e2.labels, De.engTicketLabels, false)), t2 && e2.sprints && Array.isArray(e2.sprints) && e2.sprints.length > 0 && (n2 += '\n <div>\n <label for="sf-eng-ticket-sprint" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">\n Sprint\n </label>\n <select id="sf-eng-ticket-sprint"\n style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none; appearance:none; cursor:pointer; background-color: white; color: #9ca3af;">\n <option value="" selected style="color: #9ca3af;">Select sprint...</option>\n </select>\n </div>\n '), n2 += '\n <div id="sf-dynamic-fields-container" style="display: flex; flex-direction: column; gap: 12px;"></div>\n ', n2 += "</div>", n2;
1472
1604
  }
1473
1605
  function getShortcutKeyCmdCtrlLabel() {
1474
1606
  return (function isMacPlatform() {
@@ -1482,19 +1614,19 @@ function getShortcutLabelFromContext(e2) {
1482
1614
  return e3.requireCmdCtrl && t2.push(getShortcutKeyCmdCtrlLabel()), t2.push((function formatShortcutKeyLabel(e4) {
1483
1615
  return ({ escape: "esc" }[e4.toLowerCase()] || e4).toUpperCase();
1484
1616
  })(e3.key)), t2.map((e4) => `<span style="background: #F1F5F9; border:1px solid #cbd5e1; border-radius: 4px; padding: 0 4px; font-weight: 500; font-size: 12px; color: #94A3B8; line-height: 16px;">${e4}</span>`).join(e3.requireCmdCtrl ? " + " : "");
1485
- })(Ie.shortcuts[e2]);
1617
+ })(We.shortcuts[e2]);
1486
1618
  }
1487
1619
  function getSessionIdSafely() {
1488
- if (!Ie.resolveSessionId) throw new Error("getSessionId not defined");
1489
- return Ie.resolveSessionId();
1620
+ if (!We.resolveSessionId) throw new Error("getSessionId not defined");
1621
+ return We.resolveSessionId();
1490
1622
  }
1491
1623
  function openReportIssueModal(e2) {
1492
- ye ? stopRecording() : (Ee = (e2 == null ? void 0 : e2.showEngTicketFields) ?? Ie.showEngTicketFieldsDefault, injectModalHTML(), Te && document.body.appendChild(Te));
1624
+ Oe ? stopRecording() : (Ve = (e2 == null ? void 0 : e2.showEngTicketFields) ?? We.showEngTicketFieldsDefault, injectModalHTML(), Ke && document.body.appendChild(Ke));
1493
1625
  }
1494
1626
  function closeModal() {
1495
- Ie.deactivateIsolation(), document.activeElement instanceof HTMLElement && document.activeElement.blur(), (Te == null ? void 0 : Te.parentNode) && Te.parentNode.removeChild(Te), Te = null, ye || (function resetState() {
1496
- fe = getInitialState(), ge = null, me = null, Se = false;
1497
- })(), he && (clearInterval(he), setTimerInterval(null));
1627
+ We.deactivateIsolation(), document.activeElement instanceof HTMLElement && document.activeElement.blur(), (Ke == null ? void 0 : Ke.parentNode) && Ke.parentNode.removeChild(Ke), Ke = null, Oe || (function resetState() {
1628
+ De = getInitialState(), Be = null, Pe = null, je = false;
1629
+ })(), _e && (clearInterval(_e), setTimerInterval(null));
1498
1630
  }
1499
1631
  function activateModalIsolation(e2) {
1500
1632
  e2.setAttribute("role", "dialog"), e2.setAttribute("aria-modal", "true"), e2.hasAttribute("tabindex") || e2.setAttribute("tabindex", "-1");
@@ -1511,10 +1643,10 @@ function activateModalIsolation(e2) {
1511
1643
  n3 && (e2.contains(n3) || (t3.stopImmediatePropagation(), t3.preventDefault(), refocus()));
1512
1644
  }, o2 = ["mousedown", "mouseup", "click", "pointerdown", "pointerup", "touchstart", "touchend", "wheel", "keydown", "keyup", "focus", "focusin", "focusout", "blur"];
1513
1645
  o2.forEach((e3) => document.addEventListener(e3, quarantine, true));
1514
- let s2 = 0, r2 = null;
1646
+ let r2 = 0, s2 = null;
1515
1647
  const a2 = t2 instanceof HTMLTextAreaElement ? t2 : null, refocus = () => {
1516
- if ((e2.querySelector(":focus") || a2 || t2 || e2).focus({ preventScroll: true }), a2 && document.activeElement === a2 && r2) try {
1517
- a2.setSelectionRange(r2.start, r2.end, "none");
1648
+ if ((e2.querySelector(":focus") || a2 || t2 || e2).focus({ preventScroll: true }), a2 && document.activeElement === a2 && s2) try {
1649
+ a2.setSelectionRange(s2.start, s2.end, "none");
1518
1650
  } catch {
1519
1651
  }
1520
1652
  }, selectionInsideModal = () => {
@@ -1527,17 +1659,17 @@ function activateModalIsolation(e2) {
1527
1659
  }
1528
1660
  return false;
1529
1661
  };
1530
- let l2 = 0;
1662
+ let c2 = 0;
1531
1663
  const watchdog = () => {
1532
1664
  const t3 = document.activeElement, n3 = t3 === document.body || null == t3 || !e2.contains(t3), i3 = selectionInsideModal();
1533
- n3 && !i3 ? (l2 += 1, l2 >= 2 && (refocus(), l2 = 0)) : (l2 = 0, (() => {
1665
+ n3 && !i3 ? (c2 += 1, c2 >= 2 && (refocus(), c2 = 0)) : (c2 = 0, (() => {
1534
1666
  if (a2 && document.activeElement === a2) try {
1535
- r2 = { start: a2.selectionStart ?? a2.value.length, end: a2.selectionEnd ?? a2.value.length };
1667
+ s2 = { start: a2.selectionStart ?? a2.value.length, end: a2.selectionEnd ?? a2.value.length };
1536
1668
  } catch {
1537
1669
  }
1538
- })()), s2 = window.requestAnimationFrame(watchdog);
1670
+ })()), r2 = window.requestAnimationFrame(watchdog);
1539
1671
  };
1540
- s2 = window.requestAnimationFrame(watchdog);
1672
+ r2 = window.requestAnimationFrame(watchdog);
1541
1673
  const onBlurLike = () => {
1542
1674
  setTimeout(() => {
1543
1675
  const t3 = document.activeElement;
@@ -1549,13 +1681,13 @@ function activateModalIsolation(e2) {
1549
1681
  n2.remove(), i2.remove();
1550
1682
  } catch {
1551
1683
  }
1552
- o2.forEach((e3) => document.removeEventListener(e3, quarantine, true)), window.removeEventListener("blur", onBlurLike, true), document.removeEventListener("focusout", onBlurLike, true), s2 && cancelAnimationFrame(s2);
1684
+ o2.forEach((e3) => document.removeEventListener(e3, quarantine, true)), window.removeEventListener("blur", onBlurLike, true), document.removeEventListener("focusout", onBlurLike, true), r2 && cancelAnimationFrame(r2);
1553
1685
  };
1554
1686
  }
1555
1687
  function injectModalHTML(e2 = "lookback") {
1556
- Te && (Te.remove(), Te = null), Te = document.createElement("div"), Te.id = "sf-report-issue-modal";
1688
+ Ke && (Ke.remove(), Ke = null), Ke = document.createElement("div"), Ke.id = "sf-report-issue-modal";
1557
1689
  const t2 = "startnow" === e2;
1558
- Te.innerHTML = `
1690
+ Ke.innerHTML = `
1559
1691
  <div style="position:fixed; inset:0; background:rgba(0,0,0,0.4); z-index:9998;"></div>
1560
1692
  <div style="position:fixed; top:50%; left:50%; transform:translate(-50%, -50%);
1561
1693
  background:#fff; border-radius:12px;
@@ -1610,7 +1742,7 @@ function injectModalHTML(e2 = "lookback") {
1610
1742
  <textarea id="sf-issue-description" placeholder="Add description here"
1611
1743
  style="width:100%; height:80px; padding:8px 12px; font-size:14px;
1612
1744
  border:1px solid #cbd5e1; border-radius:6px; margin-bottom:20px;
1613
- resize:none; outline:none;">${fe.description}</textarea>
1745
+ resize:none; outline:none;">${De.description}</textarea>
1614
1746
 
1615
1747
  <!-- When did this happen Section -->
1616
1748
  <div id="sf-lookback-container" style="display:${t2 ? "none" : "block"}; margin-bottom:20px;">
@@ -1676,34 +1808,34 @@ function injectModalHTML(e2 = "lookback") {
1676
1808
  <!-- Checkboxes on same line -->
1677
1809
  <div style="display:flex; align-items:center; gap:24px; margin-bottom:16px;">
1678
1810
  <label style="display:flex; align-items:center; gap:8px; font-size:14px; font-weight:500; cursor:pointer;">
1679
- <input type="checkbox" id="sf-create-issue-checkbox" ${fe.createIssue ? "checked" : ""}
1811
+ <input type="checkbox" id="sf-create-issue-checkbox" ${De.createIssue ? "checked" : ""}
1680
1812
  style="width:16px; height:16px; accent-color:#295DBF; cursor:pointer;">
1681
1813
  Create an Issue
1682
1814
  </label>
1683
1815
 
1684
- <label id="sf-create-eng-ticket-label" style="display:${Ie.integrationData && Ee ? "flex" : "none"}; align-items:center; gap:8px; font-size:14px; font-weight:500; cursor:pointer;">
1685
- <input type="checkbox" id="sf-create-eng-ticket-checkbox" ${fe.createEngTicket ? "checked" : ""}
1816
+ <label id="sf-create-eng-ticket-label" style="display:${We.integrationData && Ve ? "flex" : "none"}; align-items:center; gap:8px; font-size:14px; font-weight:500; cursor:pointer;">
1817
+ <input type="checkbox" id="sf-create-eng-ticket-checkbox" ${De.createEngTicket ? "checked" : ""}
1686
1818
  style="width:16px; height:16px; accent-color:#295DBF; cursor:pointer;">
1687
1819
  Create an Eng Ticket
1688
1820
  </label>
1689
1821
  </div>
1690
1822
 
1691
1823
  <!-- Issue Title Field (always shown when create issue is checked) -->
1692
- <div id="sf-issue-fields-container" style="display:${fe.createIssue ? "block" : "none"};">
1824
+ <div id="sf-issue-fields-container" style="display:${De.createIssue ? "block" : "none"};">
1693
1825
  <div style="display:flex; flex-direction:column; gap:12px;">
1694
1826
  <div>
1695
1827
  <label for="sf-issue-name" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">
1696
1828
  Title <span style="color:#ef4444;">*</span>
1697
1829
  </label>
1698
1830
  <input type="text" id="sf-issue-name" placeholder="Enter title"
1699
- value="${fe.issueName}"
1831
+ value="${De.issueName}"
1700
1832
  style="width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none;">
1701
1833
  </div>
1702
1834
  </div>
1703
1835
  </div>
1704
1836
 
1705
1837
  <!-- Engineering Ticket Fields (shown when create eng ticket is checked) -->
1706
- <div id="sf-eng-ticket-fields-container" style="display:${fe.createEngTicket && Ie.integrationData ? "block" : "none"}; margin-top: ${fe.createIssue ? "12px" : "0"};">
1838
+ <div id="sf-eng-ticket-fields-container" style="display:${De.createEngTicket && We.integrationData ? "block" : "none"}; margin-top: ${De.createIssue ? "12px" : "0"};">
1707
1839
  ${generateEngTicketFieldsHTML()}
1708
1840
  </div>
1709
1841
  </div>
@@ -1746,8 +1878,8 @@ function injectModalHTML(e2 = "lookback") {
1746
1878
  </div>
1747
1879
  </div>
1748
1880
  </div>
1749
- `, fe.mode = e2, document.body.appendChild(Te), (function bindListeners() {
1750
- const e3 = Te == null ? void 0 : Te.querySelectorAll(".sf-issue-tab"), t3 = document.getElementById("sf-start-recording-btn"), n2 = document.getElementById("sf-modal-close-btn"), i2 = document.getElementById("sf-issue-submit-btn"), o2 = document.getElementById("sf-lookback-minutes");
1881
+ `, De.mode = e2, document.body.appendChild(Ke), (function bindListeners() {
1882
+ const e3 = Ke == null ? void 0 : Ke.querySelectorAll(".sf-issue-tab"), t3 = document.getElementById("sf-start-recording-btn"), n2 = document.getElementById("sf-modal-close-btn"), i2 = document.getElementById("sf-issue-submit-btn"), o2 = document.getElementById("sf-lookback-minutes");
1751
1883
  e3 == null ? void 0 : e3.forEach((e4) => {
1752
1884
  e4.addEventListener("click", (e5) => {
1753
1885
  const t4 = e5.currentTarget.dataset.mode;
@@ -1755,10 +1887,10 @@ function injectModalHTML(e2 = "lookback") {
1755
1887
  });
1756
1888
  }), n2 && (n2.onclick = closeModal);
1757
1889
  o2 && o2.addEventListener("change", () => {
1758
- "lookback" === fe.mode && (i2.disabled = false, i2.style.opacity = "1", i2.style.cursor = "pointer");
1890
+ "lookback" === De.mode && (i2.disabled = false, i2.style.opacity = "1", i2.style.cursor = "pointer");
1759
1891
  });
1760
- const s2 = Te == null ? void 0 : Te.querySelectorAll(".sf-collapsible-header");
1761
- s2 == null ? void 0 : s2.forEach((e4) => {
1892
+ const r2 = Ke == null ? void 0 : Ke.querySelectorAll(".sf-collapsible-header");
1893
+ r2 == null ? void 0 : r2.forEach((e4) => {
1762
1894
  e4.addEventListener("click", (e5) => {
1763
1895
  const t4 = e5.currentTarget, n3 = t4.dataset.target, i3 = document.getElementById(n3), o3 = t4.querySelector(".sf-chevron");
1764
1896
  if (i3 && o3) {
@@ -1769,22 +1901,22 @@ function injectModalHTML(e2 = "lookback") {
1769
1901
  }
1770
1902
  });
1771
1903
  });
1772
- const r2 = document.getElementById("sf-create-issue-checkbox"), a2 = document.getElementById("sf-issue-fields-container"), l2 = document.getElementById("sf-create-eng-ticket-checkbox"), c2 = document.getElementById("sf-eng-ticket-fields-container");
1773
- r2 && r2.addEventListener("change", () => {
1774
- const e4 = r2.checked;
1775
- fe.createIssue = e4, localStorage.setItem(ue, String(e4)), a2 && (a2.style.display = e4 ? "block" : "none"), !e4 && l2 && (l2.checked = false, fe.createEngTicket = false, localStorage.setItem(pe, "false"), c2 && (c2.style.display = "none"));
1904
+ const s2 = document.getElementById("sf-create-issue-checkbox"), a2 = document.getElementById("sf-issue-fields-container"), c2 = document.getElementById("sf-create-eng-ticket-checkbox"), l2 = document.getElementById("sf-eng-ticket-fields-container");
1905
+ s2 && s2.addEventListener("change", () => {
1906
+ const e4 = s2.checked;
1907
+ De.createIssue = e4, localStorage.setItem(Le, String(e4)), a2 && (a2.style.display = e4 ? "block" : "none"), !e4 && c2 && (c2.checked = false, De.createEngTicket = false, localStorage.setItem(Re, "false"), l2 && (l2.style.display = "none"));
1776
1908
  });
1777
- l2 && l2.addEventListener("change", async () => {
1909
+ c2 && c2.addEventListener("change", async () => {
1778
1910
  var _a;
1779
- const e4 = l2.checked;
1780
- if (fe.createEngTicket = e4, localStorage.setItem(pe, String(e4)), e4 && !fe.createIssue && (fe.createIssue = true, localStorage.setItem(ue, "true"), r2 && (r2.checked = true), a2 && (a2.style.display = "block")), c2 && (c2.style.display = e4 ? "block" : "none"), e4) {
1781
- if (!hasValidIntegration()) return l2.checked = false, fe.createEngTicket = false, localStorage.setItem(pe, "false"), c2 && (c2.style.display = "none"), void alert("No engineering ticket integration found. Please install and configure an integration (Jira, Linear, or Zendesk) first.");
1911
+ const e4 = c2.checked;
1912
+ if (De.createEngTicket = e4, localStorage.setItem(Re, String(e4)), e4 && !De.createIssue && (De.createIssue = true, localStorage.setItem(Le, "true"), s2 && (s2.checked = true), a2 && (a2.style.display = "block")), l2 && (l2.style.display = e4 ? "block" : "none"), e4) {
1913
+ if (!hasValidIntegration()) return c2.checked = false, De.createEngTicket = false, localStorage.setItem(Re, "false"), l2 && (l2.style.display = "none"), void alert("No engineering ticket integration found. Please install and configure an integration (Jira, Linear, or Zendesk) first.");
1782
1914
  const e5 = getIntegrationData();
1783
1915
  if (e5) {
1784
- if (!fe.engTicketTeam && e5.defaultTeam && (fe.engTicketTeam = e5.defaultTeam), !fe.engTicketProject && e5.defaultProject && (fe.engTicketProject = e5.defaultProject), !fe.engTicketPriority && e5.defaultPriority && (fe.engTicketPriority = e5.defaultPriority), updateFormWithIntegrationData(fe), "jira" === ((_a = e5.provider) == null ? void 0 : _a.toLowerCase()) && fe.engTicketProject && !fe.engTicketCustomFields.reporter) {
1785
- if (getFieldsForProject(fe.engTicketProject, fe.engTicketIssueType).find((e6) => "reporter" === e6.fieldId)) {
1916
+ if (!De.engTicketTeam && e5.defaultTeam && (De.engTicketTeam = e5.defaultTeam), !De.engTicketProject && e5.defaultProject && (De.engTicketProject = e5.defaultProject), !De.engTicketPriority && e5.defaultPriority && (De.engTicketPriority = e5.defaultPriority), updateFormWithIntegrationData(De), "jira" === ((_a = e5.provider) == null ? void 0 : _a.toLowerCase()) && De.engTicketProject && !De.engTicketCustomFields.reporter) {
1917
+ if (getFieldsForProject(De.engTicketProject, De.engTicketIssueType).find((e6) => "reporter" === e6.fieldId)) {
1786
1918
  const t5 = getValidSavedReporterAccountId() || getDefaultReporterAccountId();
1787
- fe.engTicketCustomFields.reporter = t5 || e5.jiraReporterAccountId || "";
1919
+ De.engTicketCustomFields.reporter = t5 || e5.jiraReporterAccountId || "";
1788
1920
  }
1789
1921
  }
1790
1922
  const t4 = document.getElementById("sf-eng-ticket-project"), n3 = document.getElementById("sf-eng-ticket-type");
@@ -1794,11 +1926,11 @@ function injectModalHTML(e2 = "lookback") {
1794
1926
  });
1795
1927
  const d2 = document.getElementById("sf-issue-name");
1796
1928
  d2 && d2.addEventListener("input", () => {
1797
- fe.issueName = d2.value;
1929
+ De.issueName = d2.value;
1798
1930
  });
1799
1931
  bindEngTicketListeners(), t3 && (t3.onclick = () => {
1800
1932
  const e4 = document.getElementById("sf-issue-description");
1801
- e4 && (fe.description = e4.value), (function startCountdownThenRecord() {
1933
+ e4 && (De.description = e4.value), (function startCountdownThenRecord() {
1802
1934
  if (document.getElementById("sf-countdown-overlay")) return;
1803
1935
  const e5 = document.createElement("div");
1804
1936
  e5.id = "sf-countdown-overlay", e5.style.cssText = "\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n z-index: 10001;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 80px;\n font-weight: bold;\n color: white;\n font-family: sans-serif;\n ";
@@ -1808,10 +1940,10 @@ function injectModalHTML(e2 = "lookback") {
1808
1940
  if (t4--, t4 > 0) e5.textContent = t4.toString();
1809
1941
  else {
1810
1942
  clearInterval(n3), document.body.removeChild(e5), (function setRecordingStartTime(e6) {
1811
- ge = e6;
1943
+ Be = e6;
1812
1944
  })(Date.now()), setIsRecording(true);
1813
1945
  try {
1814
- const { enableFunctionSpanTracking: e6 } = await Promise.resolve().then(() => z);
1946
+ const { enableFunctionSpanTracking: e6 } = await Promise.resolve().then(() => de);
1815
1947
  e6();
1816
1948
  } catch (e6) {
1817
1949
  console.error("[Report Issue] Failed to enable function span tracking:", e6);
@@ -1838,7 +1970,7 @@ function injectModalHTML(e2 = "lookback") {
1838
1970
  const t5 = e6.querySelector("#sf-recording-timer");
1839
1971
  if (!t5) return;
1840
1972
  const n4 = setInterval(() => {
1841
- const e7 = Date.now() - (ge ?? Date.now()), n5 = Math.floor(e7 / 6e4).toString().padStart(2, "0"), i3 = Math.floor(e7 % 6e4 / 1e3).toString().padStart(2, "0");
1973
+ const e7 = Date.now() - (Be ?? Date.now()), n5 = Math.floor(e7 / 6e4).toString().padStart(2, "0"), i3 = Math.floor(e7 % 6e4 / 1e3).toString().padStart(2, "0");
1842
1974
  t5.textContent = `${n5}:${i3}`;
1843
1975
  }, 1e3);
1844
1976
  setTimerInterval(n4);
@@ -1847,33 +1979,41 @@ function injectModalHTML(e2 = "lookback") {
1847
1979
  }, 1e3);
1848
1980
  })();
1849
1981
  });
1850
- Te == null ? void 0 : Te.addEventListener("click", (e4) => {
1982
+ Ke == null ? void 0 : Ke.addEventListener("click", (e4) => {
1851
1983
  var _a;
1852
1984
  if (e4.target.closest("#sf-issue-submit-btn")) {
1853
- const e5 = ((_a = document.getElementById("sf-issue-description")) == null ? void 0 : _a.value) || "", t4 = fe.mode;
1854
- if (fe.description = e5, fe.createIssue && !fe.issueName.trim()) return void alert("Issue title is required when creating an issue.");
1985
+ const e5 = ((_a = document.getElementById("sf-issue-description")) == null ? void 0 : _a.value) || "", t4 = De.mode;
1986
+ if (De.description = e5, De.createIssue && !De.issueName.trim()) return void alert("Issue title is required when creating an issue.");
1855
1987
  let n3, i3;
1856
- if ("startnow" === t4) n3 = ge ?? Date.now() - 3e5, i3 = me ?? Date.now();
1988
+ if ("startnow" === t4) n3 = Be ?? Date.now() - 3e5, i3 = Pe ?? Date.now();
1857
1989
  else {
1858
1990
  const e6 = 60 * Number((o2 == null ? void 0 : o2.value) || "2") * 1e3;
1859
1991
  i3 = Date.now(), n3 = i3 - e6;
1860
1992
  }
1861
- if (fe.createIssue) {
1862
- const o3 = document.getElementById("sf-issue-name"), s3 = document.getElementById("sf-eng-ticket-team"), r3 = document.getElementById("sf-eng-ticket-project"), a3 = document.getElementById("sf-eng-ticket-priority"), l3 = document.getElementById("sf-eng-ticket-type"), c3 = (o3 == null ? void 0 : o3.value) || "", d3 = e5, u2 = (s3 == null ? void 0 : s3.value) || "", p2 = (r3 == null ? void 0 : r3.value) || "", f2 = a3 ? Number(a3.value) : 0, g2 = fe.engTicketLabels, m2 = (l3 == null ? void 0 : l3.value) || "", h2 = { ...fe.engTicketCustomFields };
1993
+ if (De.createIssue) {
1994
+ const o3 = document.getElementById("sf-issue-name"), r3 = document.getElementById("sf-eng-ticket-team"), s3 = document.getElementById("sf-eng-ticket-project"), a3 = document.getElementById("sf-eng-ticket-priority"), c3 = document.getElementById("sf-eng-ticket-type"), l3 = (o3 == null ? void 0 : o3.value) || "", d3 = e5, u2 = (r3 == null ? void 0 : r3.value) || "", p2 = (s3 == null ? void 0 : s3.value) || "", f2 = a3 ? Number(a3.value) : 0, g2 = De.engTicketLabels, m2 = (c3 == null ? void 0 : c3.value) || "", h2 = { ...De.engTicketCustomFields };
1863
1995
  document.querySelectorAll(".sf-dynamic-field").forEach((e6) => {
1864
1996
  const t5 = e6, n4 = t5.dataset.fieldId;
1865
1997
  n4 && ("checkbox" === t5.type ? h2[n4] = t5.checked : "number" === t5.type ? h2[n4] = parseFloat(t5.value) || null : t5.classList.contains("sf-custom-multiselect") || (h2[n4] = t5.value));
1866
1998
  });
1867
- const y2 = document.getElementById("sf-eng-ticket-sprint"), S2 = (y2 == null ? void 0 : y2.value) || fe.engTicketSprint;
1868
- if (S2) {
1999
+ const y2 = document.getElementById("sf-eng-ticket-sprint"), b2 = (y2 == null ? void 0 : y2.value) || De.engTicketSprint;
2000
+ if (b2) {
1869
2001
  const e6 = getSprintFieldId();
1870
- h2[e6] = parseInt(S2, 10);
2002
+ h2[e6] = parseInt(b2, 10);
2003
+ }
2004
+ const isFieldEmpty = (e6) => null == e6 || ("string" == typeof e6 ? "" === e6.trim() : !!Array.isArray(e6) && 0 === e6.length), v2 = (getFieldsForProject(p2, m2) || []).filter((e6) => e6 && e6.required), S2 = [];
2005
+ for (const e6 of v2) {
2006
+ const t5 = e6.fieldId || e6.key;
2007
+ if ("summary" === t5 || "description" === t5 || "priority" === t5) continue;
2008
+ let n4, i4;
2009
+ "project" === t5 ? (n4 = !!document.getElementById("sf-eng-ticket-project"), i4 = p2) : "issuetype" === t5 ? (n4 = !!document.getElementById("sf-eng-ticket-type"), i4 = m2) : (n4 = !!document.querySelector(`[data-field-id="${t5}"]`), i4 = h2[t5]), n4 && isFieldEmpty(i4) && S2.push(e6.name || t5);
1871
2010
  }
1872
- closeModal(), (async function createTriageAndIssue(e6, t5, n4, i4, o4, s4, r4, a4, l4, c4, d4, u3, p3) {
2011
+ if (S2.length > 0) return void alert(`Please fill in the required field${S2.length > 1 ? "s" : ""}: ${S2.join(", ")}`);
2012
+ closeModal(), (async function createTriageAndIssue(e6, t5, n4, i4, o4, r4, s4, a4, c4, l4, d4, u3, p3) {
1873
2013
  var _a2, _b, _c;
1874
2014
  try {
1875
2015
  showStatusModal(true);
1876
- const f3 = await createTriageAndIssueFromRecorder(Ie.apiKey, Ie.backendApi, getSessionIdSafely(), e6, t5, n4, i4, o4, s4, r4, a4, l4, c4, d4, u3, p3);
2016
+ const f3 = await createTriageAndIssueFromRecorder(We.apiKey, We.backendApi, getSessionIdSafely(), e6, t5, n4, i4, o4, r4, s4, a4, c4, l4, d4, u3, p3);
1877
2017
  if ((_a2 = f3 == null ? void 0 : f3.errors) == null ? void 0 : _a2.length) {
1878
2018
  const e7 = f3.errors.map((e8) => e8.message).join("; ");
1879
2019
  return console.error("GraphQL error creating triage and issue:", e7), void showStatusModal(false, null, e7);
@@ -1883,33 +2023,33 @@ function injectModalHTML(e2 = "lookback") {
1883
2023
  } catch (e7) {
1884
2024
  console.error("Error creating triage and issue:", e7), showStatusModal(false, null, "Something went wrong. Please try again.");
1885
2025
  }
1886
- })(`${n3}`, `${i3}`, e5, c3, d3, fe.createEngTicket, u2, p2, f2, g2, m2, h2, "startnow" === t4 ? "RECORDED" : "LOOKBACK");
2026
+ })(`${n3}`, `${i3}`, e5, l3, d3, De.createEngTicket, u2, p2, f2, g2, m2, h2, "startnow" === t4 ? "RECORDED" : "LOOKBACK");
1887
2027
  } else closeModal(), (async function createTriage(e6, t5, n4, i4) {
1888
2028
  var _a2, _b, _c;
1889
2029
  try {
1890
2030
  showStatusModal(true);
1891
- const o3 = await createTriageFromRecorder(Ie.apiKey, Ie.backendApi, getSessionIdSafely(), e6, t5, n4, i4);
2031
+ const o3 = await createTriageFromRecorder(We.apiKey, We.backendApi, getSessionIdSafely(), e6, t5, n4, i4);
1892
2032
  if ((_a2 = o3 == null ? void 0 : o3.errors) == null ? void 0 : _a2.length) {
1893
2033
  const e7 = o3.errors.map((e8) => e8.message).join("; ");
1894
2034
  return console.error("GraphQL error creating triage:", e7), void showStatusModal(false, null, e7);
1895
2035
  }
1896
- const s3 = (_c = (_b = o3 == null ? void 0 : o3.data) == null ? void 0 : _b.createTriageFromRecorder) == null ? void 0 : _c.id;
1897
- s3 ? showStatusModal(false, { type: "triage", id: s3 }) : (console.error("No Triage ID returned from backend."), showStatusModal(false, null, "No triage was created. Please try again."));
2036
+ const r3 = (_c = (_b = o3 == null ? void 0 : o3.data) == null ? void 0 : _b.createTriageFromRecorder) == null ? void 0 : _c.id;
2037
+ r3 ? showStatusModal(false, { type: "triage", id: r3 }) : (console.error("No Triage ID returned from backend."), showStatusModal(false, null, "No triage was created. Please try again."));
1898
2038
  } catch (e7) {
1899
2039
  console.error("Error creating triage:", e7), showStatusModal(false, null, "Something went wrong. Please try again.");
1900
2040
  }
1901
2041
  })(`${n3}`, `${i3}`, e5, "startnow" === t4 ? "RECORDED" : "LOOKBACK");
1902
2042
  }
1903
2043
  });
1904
- })(), Ie.deactivateIsolation = activateModalIsolation(Te), Ie.integrationData && fe.createEngTicket ? initializeEngTicketForm() : Ie.integrationData || (fe.createEngTicket = false), Ie.apiKey && Ie.backendApi && refreshIntegrationData(Ie.apiKey, Ie.backendApi).then((e3) => {
2044
+ })(), We.deactivateIsolation = activateModalIsolation(Ke), We.integrationData && De.createEngTicket ? initializeEngTicketForm() : We.integrationData || (De.createEngTicket = false), We.apiKey && We.backendApi && refreshIntegrationData(We.apiKey, We.backendApi).then((e3) => {
1905
2045
  if (!e3 || !document.getElementById("sf-report-issue-modal")) return;
1906
- Ie.integrationData = e3;
2046
+ We.integrationData = e3;
1907
2047
  const t3 = document.getElementById("sf-eng-ticket-fields-container");
1908
2048
  if (t3) {
1909
2049
  const e4 = generateEngTicketFieldsHTML();
1910
- e4 && (t3.innerHTML = e4, initializeEngTicketForm(), bindEngTicketListeners(), updateFormWithIntegrationData(fe), renderDynamicFields(fe.engTicketProject, fe.engTicketIssueType));
2050
+ e4 && (t3.innerHTML = e4, initializeEngTicketForm(), bindEngTicketListeners(), updateFormWithIntegrationData(De), renderDynamicFields(De.engTicketProject, De.engTicketIssueType));
1911
2051
  }
1912
- if (Ee) {
2052
+ if (Ve) {
1913
2053
  const e4 = document.getElementById("sf-create-eng-ticket-label");
1914
2054
  e4 && (e4.style.display = "flex");
1915
2055
  }
@@ -1917,40 +2057,40 @@ function injectModalHTML(e2 = "lookback") {
1917
2057
  }
1918
2058
  function initializeEngTicketForm() {
1919
2059
  var _a;
1920
- const e2 = Ie.integrationData;
2060
+ const e2 = We.integrationData;
1921
2061
  if (e2) {
1922
- if (!fe.engTicketTeam && e2.defaultTeam && (fe.engTicketTeam = e2.defaultTeam), !fe.engTicketProject && e2.defaultProject && (fe.engTicketProject = e2.defaultProject), !fe.engTicketPriority && e2.defaultPriority && (fe.engTicketPriority = e2.defaultPriority), updateFormWithIntegrationData(fe), "jira" === ((_a = e2.provider) == null ? void 0 : _a.toLowerCase()) && fe.engTicketProject && !fe.engTicketCustomFields.reporter) {
1923
- if (getFieldsForProject(fe.engTicketProject, fe.engTicketIssueType).find((e3) => "reporter" === e3.fieldId)) {
2062
+ if (!De.engTicketTeam && e2.defaultTeam && (De.engTicketTeam = e2.defaultTeam), !De.engTicketProject && e2.defaultProject && (De.engTicketProject = e2.defaultProject), !De.engTicketPriority && e2.defaultPriority && (De.engTicketPriority = e2.defaultPriority), updateFormWithIntegrationData(De), "jira" === ((_a = e2.provider) == null ? void 0 : _a.toLowerCase()) && De.engTicketProject && !De.engTicketCustomFields.reporter) {
2063
+ if (getFieldsForProject(De.engTicketProject, De.engTicketIssueType).find((e3) => "reporter" === e3.fieldId)) {
1924
2064
  const t2 = getValidSavedReporterAccountId() || getDefaultReporterAccountId();
1925
- fe.engTicketCustomFields.reporter = t2 || e2.jiraReporterAccountId || "";
2065
+ De.engTicketCustomFields.reporter = t2 || e2.jiraReporterAccountId || "";
1926
2066
  }
1927
2067
  }
1928
- fe.engTicketProject && renderDynamicFields(fe.engTicketProject, fe.engTicketIssueType);
2068
+ De.engTicketProject && renderDynamicFields(De.engTicketProject, De.engTicketIssueType);
1929
2069
  }
1930
2070
  }
1931
2071
  function setActiveTab(e2) {
1932
- fe.mode = e2;
1933
- const t2 = Te == null ? void 0 : Te.querySelector("#sf-tab-lookback"), n2 = Te == null ? void 0 : Te.querySelector("#sf-tab-startnow");
2072
+ De.mode = e2;
2073
+ const t2 = Ke == null ? void 0 : Ke.querySelector("#sf-tab-lookback"), n2 = Ke == null ? void 0 : Ke.querySelector("#sf-tab-startnow");
1934
2074
  "lookback" === e2 ? (t2.style.background = "white", t2.style.color = "#0F172A", n2.style.background = "transparent", n2.style.color = "#64748B") : (n2.style.background = "white", n2.style.color = "#0F172A", t2.style.background = "transparent", t2.style.color = "#64748B");
1935
2075
  }
1936
2076
  function updateModeSpecificUI(e2) {
1937
- const t2 = document.querySelector("#sf-issue-mode-info div"), n2 = document.getElementById("sf-issue-submit-btn"), i2 = document.getElementById("sf-record-button-container"), o2 = document.getElementById("sf-recording-timer-label"), s2 = document.getElementById("sf-recording-timer-display"), r2 = document.getElementById("sf-modal-footer"), a2 = document.getElementById("sf-lookback-container");
1938
- if (t2 && n2 && i2 && o2 && s2 && r2 && a2) if ("startnow" === e2) {
1939
- i2.style.display = "block", a2.style.display = "none", r2.style.justifyContent = "space-between", t2.textContent = "I want to reproduce the issue right now.";
1940
- const e3 = null !== ge && null !== me;
1941
- if (n2.disabled = !e3, n2.style.opacity = e3 ? "1" : "0.4", n2.style.cursor = e3 ? "pointer" : "not-allowed", ge && me) {
1942
- const e4 = Math.floor((me - ge) / 1e3), t3 = String(Math.floor(e4 / 60)).padStart(2, "0"), n3 = String(e4 % 60).padStart(2, "0");
1943
- o2.style.display = "block", s2.textContent = `${t3}:${n3}`;
2077
+ const t2 = document.querySelector("#sf-issue-mode-info div"), n2 = document.getElementById("sf-issue-submit-btn"), i2 = document.getElementById("sf-record-button-container"), o2 = document.getElementById("sf-recording-timer-label"), r2 = document.getElementById("sf-recording-timer-display"), s2 = document.getElementById("sf-modal-footer"), a2 = document.getElementById("sf-lookback-container");
2078
+ if (t2 && n2 && i2 && o2 && r2 && s2 && a2) if ("startnow" === e2) {
2079
+ i2.style.display = "block", a2.style.display = "none", s2.style.justifyContent = "space-between", t2.textContent = "I want to reproduce the issue right now.";
2080
+ const e3 = null !== Be && null !== Pe;
2081
+ if (n2.disabled = !e3, n2.style.opacity = e3 ? "1" : "0.4", n2.style.cursor = e3 ? "pointer" : "not-allowed", Be && Pe) {
2082
+ const e4 = Math.floor((Pe - Be) / 1e3), t3 = String(Math.floor(e4 / 60)).padStart(2, "0"), n3 = String(e4 % 60).padStart(2, "0");
2083
+ o2.style.display = "block", r2.textContent = `${t3}:${n3}`;
1944
2084
  } else o2.style.display = "none";
1945
- } else i2.style.display = "none", o2.style.display = "none", a2.style.display = "block", r2.style.justifyContent = "flex-end", t2.textContent = "Something already happened. Capture the past few minutes.", n2.disabled = false, n2.style.opacity = "1", n2.style.cursor = "pointer";
2085
+ } else i2.style.display = "none", o2.style.display = "none", a2.style.display = "block", s2.style.justifyContent = "flex-end", t2.textContent = "Something already happened. Capture the past few minutes.", n2.disabled = false, n2.style.opacity = "1", n2.style.cursor = "pointer";
1946
2086
  }
1947
2087
  function bindEngTicketListeners() {
1948
- const e2 = document.getElementById("sf-eng-ticket-team"), t2 = document.getElementById("sf-eng-ticket-project"), n2 = document.getElementById("sf-eng-ticket-priority"), i2 = document.getElementById("sf-eng-ticket-labels-container"), o2 = document.getElementById("sf-eng-ticket-type"), s2 = document.getElementById("sf-eng-ticket-sprint");
2088
+ const e2 = document.getElementById("sf-eng-ticket-team"), t2 = document.getElementById("sf-eng-ticket-project"), n2 = document.getElementById("sf-eng-ticket-priority"), i2 = document.getElementById("sf-eng-ticket-labels-container"), o2 = document.getElementById("sf-eng-ticket-type"), r2 = document.getElementById("sf-eng-ticket-sprint");
1949
2089
  e2 && e2.addEventListener("change", () => {
1950
- fe.engTicketTeam = e2.value, e2.style.color = e2.value ? "" : "#9ca3af";
2090
+ De.engTicketTeam = e2.value, e2.style.color = e2.value ? "" : "#9ca3af";
1951
2091
  const t3 = document.getElementById("sf-eng-ticket-project");
1952
2092
  if (t3) {
1953
- fe.engTicketProject = "", fe.engTicketCustomFields = {};
2093
+ De.engTicketProject = "", De.engTicketCustomFields = {};
1954
2094
  const n3 = getProjectsForTeam(e2.value);
1955
2095
  t3.innerHTML = '<option value="">Select project...</option>', n3.forEach((e3) => {
1956
2096
  const n4 = document.createElement("option");
@@ -1959,41 +2099,41 @@ function bindEngTicketListeners() {
1959
2099
  }
1960
2100
  }), t2 && t2.addEventListener("change", () => {
1961
2101
  var _a;
1962
- fe.engTicketProject = t2.value, t2.style.color = t2.value ? "" : "#9ca3af", fe.engTicketCustomFields = {};
2102
+ De.engTicketProject = t2.value, t2.style.color = t2.value ? "" : "#9ca3af", De.engTicketCustomFields = {};
1963
2103
  const e3 = getIntegrationData();
1964
- if (e3 && o2 && (updateIssueTypeOptions(o2, t2.value), fe.engTicketIssueType = o2.value), e3 && "jira" === ((_a = e3.provider) == null ? void 0 : _a.toLowerCase()) && t2.value) {
1965
- if (getFieldsForProject(t2.value, fe.engTicketIssueType).find((e4) => "reporter" === e4.fieldId)) {
2104
+ if (e3 && o2 && (updateIssueTypeOptions(o2, t2.value), De.engTicketIssueType = o2.value), e3 && "jira" === ((_a = e3.provider) == null ? void 0 : _a.toLowerCase()) && t2.value) {
2105
+ if (getFieldsForProject(t2.value, De.engTicketIssueType).find((e4) => "reporter" === e4.fieldId)) {
1966
2106
  const t3 = getValidSavedReporterAccountId() || getDefaultReporterAccountId();
1967
- fe.engTicketCustomFields.reporter = t3 || e3.jiraReporterAccountId || "";
2107
+ De.engTicketCustomFields.reporter = t3 || e3.jiraReporterAccountId || "";
1968
2108
  }
1969
2109
  }
1970
- renderDynamicFields(t2.value, fe.engTicketIssueType);
1971
- }), s2 && s2.addEventListener("change", () => {
1972
- fe.engTicketSprint = s2.value, s2.style.color = s2.value ? "" : "#9ca3af", setSprintDefaulted(true);
2110
+ renderDynamicFields(t2.value, De.engTicketIssueType);
2111
+ }), r2 && r2.addEventListener("change", () => {
2112
+ De.engTicketSprint = r2.value, r2.style.color = r2.value ? "" : "#9ca3af", setSprintDefaulted(true);
1973
2113
  }), n2 && n2.addEventListener("change", () => {
1974
- fe.engTicketPriority = Number(n2.value);
2114
+ De.engTicketPriority = Number(n2.value);
1975
2115
  }), i2 && setupCustomMultiSelectListeners("sf-eng-ticket-labels", (e3) => {
1976
- fe.engTicketLabels = e3;
2116
+ De.engTicketLabels = e3;
1977
2117
  }), o2 && o2.addEventListener("change", () => {
1978
- fe.engTicketIssueType = o2.value, o2.style.color = o2.value ? "" : "#9ca3af";
2118
+ De.engTicketIssueType = o2.value, o2.style.color = o2.value ? "" : "#9ca3af";
1979
2119
  const e3 = document.getElementById("sf-eng-ticket-project");
1980
2120
  if (e3 && e3.value) {
1981
- const t3 = fe.engTicketCustomFields.reporter;
1982
- fe.engTicketCustomFields = {}, t3 && (fe.engTicketCustomFields.reporter = t3), renderDynamicFields(e3.value, o2.value);
2121
+ const t3 = De.engTicketCustomFields.reporter;
2122
+ De.engTicketCustomFields = {}, t3 && (De.engTicketCustomFields.reporter = t3), renderDynamicFields(e3.value, o2.value);
1983
2123
  }
1984
2124
  });
1985
- const r2 = document.getElementById("sf-dynamic-fields-container");
1986
- r2 && (r2.addEventListener("input", (e3) => {
2125
+ const s2 = document.getElementById("sf-dynamic-fields-container");
2126
+ s2 && (s2.addEventListener("input", (e3) => {
1987
2127
  const t3 = e3.target;
1988
2128
  if (t3.classList.contains("sf-dynamic-field")) {
1989
2129
  const e4 = t3.dataset.fieldId;
1990
- e4 && ("checkbox" === t3.type ? fe.engTicketCustomFields[e4] = t3.checked : "number" === t3.type ? fe.engTicketCustomFields[e4] = parseFloat(t3.value) || null : fe.engTicketCustomFields[e4] = t3.value);
2130
+ e4 && ("checkbox" === t3.type ? De.engTicketCustomFields[e4] = t3.checked : "number" === t3.type ? De.engTicketCustomFields[e4] = parseFloat(t3.value) || null : De.engTicketCustomFields[e4] = t3.value);
1991
2131
  }
1992
- }), r2.addEventListener("change", (e3) => {
2132
+ }), s2.addEventListener("change", (e3) => {
1993
2133
  const t3 = e3.target;
1994
2134
  if (t3.classList.contains("sf-dynamic-field")) {
1995
2135
  const e4 = t3.dataset.fieldId;
1996
- if (e4 && (fe.engTicketCustomFields[e4] = t3.value, "reporter" === e4 && t3.value && saveLastReporterAccountId(t3.value)), "SELECT" === t3.tagName) {
2136
+ if (e4 && (De.engTicketCustomFields[e4] = t3.value, "reporter" === e4 && t3.value && saveLastReporterAccountId(t3.value)), "SELECT" === t3.tagName) {
1997
2137
  const e5 = t3;
1998
2138
  e5.style.color = e5.value ? "" : "#9ca3af";
1999
2139
  }
@@ -2003,10 +2143,10 @@ function bindEngTicketListeners() {
2003
2143
  async function stopRecording() {
2004
2144
  var _a;
2005
2145
  !(function setRecordingEndTime(e2) {
2006
- me = e2;
2007
- })(Date.now()), setIsRecording(false), he && (clearInterval(he), setTimerInterval(null)), (_a = document.getElementById("sf-recording-indicator")) == null ? void 0 : _a.remove();
2146
+ Pe = e2;
2147
+ })(Date.now()), setIsRecording(false), _e && (clearInterval(_e), setTimerInterval(null)), (_a = document.getElementById("sf-recording-indicator")) == null ? void 0 : _a.remove();
2008
2148
  try {
2009
- const { disableFunctionSpanTracking: e2 } = await Promise.resolve().then(() => z);
2149
+ const { disableFunctionSpanTracking: e2 } = await Promise.resolve().then(() => de);
2010
2150
  e2();
2011
2151
  } catch (e2) {
2012
2152
  console.error("[Report Issue] Failed to disable function span tracking:", e2);
@@ -2019,18 +2159,18 @@ async function stopRecording() {
2019
2159
  t3 && (t3.textContent = "Re-record");
2020
2160
  }
2021
2161
  const t2 = document.getElementById("sf-recording-timer-label"), n2 = document.getElementById("sf-recording-timer-display");
2022
- if (t2 && n2 && ge && me) {
2023
- const e3 = Math.floor((me - ge) / 1e3), i3 = Math.floor(e3 / 60).toString().padStart(2, "0"), o3 = (e3 % 60).toString().padStart(2, "0");
2162
+ if (t2 && n2 && Be && Pe) {
2163
+ const e3 = Math.floor((Pe - Be) / 1e3), i3 = Math.floor(e3 / 60).toString().padStart(2, "0"), o3 = (e3 % 60).toString().padStart(2, "0");
2024
2164
  n2.textContent = `${i3}:${o3}`, t2.style.display = "block";
2025
2165
  }
2026
2166
  const i2 = document.getElementById("sf-issue-description");
2027
- i2 && (i2.value = fe.description);
2167
+ i2 && (i2.value = De.description);
2028
2168
  const o2 = document.querySelector('input[value="startnow"]');
2029
2169
  o2 && (o2.checked = true);
2030
- const s2 = document.getElementById("sf-inline-record-chip"), r2 = document.getElementById("sf-inline-record-timer");
2031
- if (s2 && r2) {
2032
- const e3 = Math.floor(((me ?? 0) - (ge ?? 0)) / 1e3), t3 = Math.floor(e3 / 60).toString().padStart(2, "0"), n3 = Math.floor(e3 % 60).toString().padStart(2, "0");
2033
- r2.textContent = `${t3}:${n3}`, r2.style.color = "black", s2.style.display = "flex";
2170
+ const r2 = document.getElementById("sf-inline-record-chip"), s2 = document.getElementById("sf-inline-record-timer");
2171
+ if (r2 && s2) {
2172
+ const e3 = Math.floor(((Pe ?? 0) - (Be ?? 0)) / 1e3), t3 = Math.floor(e3 / 60).toString().padStart(2, "0"), n3 = Math.floor(e3 % 60).toString().padStart(2, "0");
2173
+ s2.textContent = `${t3}:${n3}`, s2.style.color = "black", r2.style.display = "flex";
2034
2174
  }
2035
2175
  const a2 = document.getElementById("sf-issue-submit-btn");
2036
2176
  a2.disabled = false, a2.style.opacity = "1", a2.style.cursor = "pointer";
@@ -2043,10 +2183,10 @@ function showStatusModal(e2, t2, n2) {
2043
2183
  var _a2, _b;
2044
2184
  (_a2 = document.getElementById("sf-report-issue-modal")) == null ? void 0 : _a2.remove(), (_b = document.getElementById("sf-triage-status-modal")) == null ? void 0 : _b.remove();
2045
2185
  })();
2046
- const o2 = !e3 && i2, s2 = n3 ? `${Ie.triageBaseUrl}/issues/${n3}?from=inAppReportIssue` : t3 ? `${Ie.triageBaseUrl}/triage/${t3}?from=inAppReportIssue` : "", r2 = document.createElement("div");
2047
- r2.id = "sf-triage-status-modal", Object.assign(r2.style, { position: "fixed", inset: "0", zIndex: "9998", display: "flex", alignItems: "center", justifyContent: "center" });
2048
- const a2 = e3 ? "Reporting Issue..." : o2 ? "Failed to report issue" : "Issue reported!", l2 = e3 ? '<p style="font-size:14px; color:#64748b; line-height:20px;">This may take ~10 seconds</p>' : o2 ? `<p style="font-size:14px; color:#ef4444; line-height:20px;">${i2}</p>` : "", c2 = e3 ? '<div style="display:flex; justify-content:center; align-items:center; padding: 40px 0;">\n <div style="width:24px; height:24px; border:2px solid #295dbf; border-top:2px solid white; border-radius:50%; animation:spin 1s linear infinite;"></div>\n </div>' : "", d2 = e3 ? "" : '<div id="sf-copied-status" style="display:none; font-size:12px; font-weight:500; color:white;\n background-color:#22c55e; padding:4px 8px; border-radius:6px; white-space:nowrap; align-items:center; gap:6px;">\n <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M21 7.5L9 19.5L3 13.5L5.25 11.25L9 15L18.75 5.25L21 7.5Z" fill="white"/>\n </svg>\n Copied\n </div>';
2049
- r2.innerHTML = `
2186
+ const o2 = !e3 && i2, r2 = n3 ? `${We.triageBaseUrl}/issues/${n3}?from=inAppReportIssue` : t3 ? `${We.triageBaseUrl}/triage/${t3}?from=inAppReportIssue` : "", s2 = document.createElement("div");
2187
+ s2.id = "sf-triage-status-modal", Object.assign(s2.style, { position: "fixed", inset: "0", zIndex: "9998", display: "flex", alignItems: "center", justifyContent: "center" });
2188
+ const a2 = e3 ? "Reporting Issue..." : o2 ? "Failed to report issue" : "Issue reported!", c2 = e3 ? '<p style="font-size:14px; color:#64748b; line-height:20px;">This may take ~10 seconds</p>' : o2 ? `<p style="font-size:14px; color:#ef4444; line-height:20px;">${i2}</p>` : "", l2 = e3 ? '<div style="display:flex; justify-content:center; align-items:center; padding: 40px 0;">\n <div style="width:24px; height:24px; border:2px solid #295dbf; border-top:2px solid white; border-radius:50%; animation:spin 1s linear infinite;"></div>\n </div>' : "", d2 = e3 ? "" : '<div id="sf-copied-status" style="display:none; font-size:12px; font-weight:500; color:white;\n background-color:#22c55e; padding:4px 8px; border-radius:6px; white-space:nowrap; align-items:center; gap:6px;">\n <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M21 7.5L9 19.5L3 13.5L5.25 11.25L9 15L18.75 5.25L21 7.5Z" fill="white"/>\n </svg>\n Copied\n </div>';
2189
+ s2.innerHTML = `
2050
2190
  <div style="position:fixed; inset:0; background:rgba(0,0,0,0.4); z-index:9998;"></div>
2051
2191
  <div id="sf-triage-card"
2052
2192
  style="position:relative; background:#fff; padding:24px; border-radius:12px; width:300px; max-width:90%;
@@ -2063,8 +2203,8 @@ function showStatusModal(e2, t2, n2) {
2063
2203
  </button>
2064
2204
 
2065
2205
  <h2 style="font-size:18px; font-weight:600; margin-bottom:${e3 || o2 ? 8 : 40}px; line-height:28px;">${a2}</h2>
2066
- ${l2}
2067
2206
  ${c2}
2207
+ ${l2}
2068
2208
 
2069
2209
  <div style="display:${o2 ? "none" : "flex"}; justify-content:flex-end; align-items:center; gap:8px;">
2070
2210
  <button id="sf-copy-triage-link"
@@ -2087,28 +2227,28 @@ function showStatusModal(e2, t2, n2) {
2087
2227
  <style>
2088
2228
  @keyframes spin { to { transform: rotate(360deg); } }
2089
2229
  </style>
2090
- `, document.body.appendChild(r2);
2091
- const u2 = r2.querySelector("#sf-triage-card");
2230
+ `, document.body.appendChild(s2);
2231
+ const u2 = s2.querySelector("#sf-triage-card");
2092
2232
  (_a = document.getElementById("sf-triage-modal-close")) == null ? void 0 : _a.addEventListener("click", () => {
2093
- fadeCardAndRemove(r2, u2, 300);
2233
+ fadeCardAndRemove(s2, u2, 300);
2094
2234
  });
2095
2235
  const p2 = document.getElementById("sf-copy-triage-link"), f2 = document.getElementById("sf-view-triage-btn");
2096
2236
  e3 ? (p2.disabled = true, p2.style.opacity = "0.4", p2.style.cursor = "not-allowed", f2.disabled = true, f2.style.opacity = "0.4", f2.style.cursor = "not-allowed") : (p2.disabled = false, p2.addEventListener("click", () => {
2097
- navigator.clipboard.writeText(s2).then(() => {
2237
+ navigator.clipboard.writeText(r2).then(() => {
2098
2238
  const e4 = document.getElementById("sf-copied-status");
2099
2239
  e4 && (e4.style.display = "flex");
2100
2240
  });
2101
2241
  }), f2.disabled = false, f2.addEventListener("click", () => {
2102
- (t3 || n3) && window.open(s2, "_blank");
2103
- }), o2 || setTimeout(() => fadeCardAndRemove(r2, u2, 300), 1e4));
2242
+ (t3 || n3) && window.open(r2, "_blank");
2243
+ }), o2 || setTimeout(() => fadeCardAndRemove(s2, u2, 300), 1e4));
2104
2244
  })(e2, "triage" === (t2 == null ? void 0 : t2.type) ? t2.id : void 0, "issue" === (t2 == null ? void 0 : t2.type) ? t2.id : void 0, n2);
2105
2245
  }
2106
2246
  function fadeCardAndRemove(e2, t2, n2 = 300) {
2107
2247
  t2.style.opacity = "0", t2.addEventListener("transitionend", () => e2.remove(), { once: true }), setTimeout(() => e2.remove(), n2 + 100);
2108
2248
  }
2109
- const Me = Object.freeze(Object.defineProperty({ __proto__: null, ReportIssueContext: Ie, openReportIssueModal, setupIssueReporting: function setupIssueReporting(e2) {
2110
- Ie.apiKey = e2.apiKey, Ie.backendApi = e2.backendApi, Ie.resolveSessionId = e2.getSessionId, Ie.integrationData = e2.integrationData || null, Ie.showEngTicketFieldsDefault = e2.showEngTicketFieldsInReportIssueModalDefault ?? false, e2.customBaseUrl && (Ie.triageBaseUrl = e2.customBaseUrl), Ie.shortcuts = (function mergeShortcutsConfig(e3) {
2111
- const t3 = { ...xe };
2249
+ const Ge = Object.freeze(Object.defineProperty({ __proto__: null, ReportIssueContext: We, openReportIssueModal, setupIssueReporting: function setupIssueReporting(e2) {
2250
+ We.apiKey = e2.apiKey, We.backendApi = e2.backendApi, We.resolveSessionId = e2.getSessionId, We.integrationData = e2.integrationData || null, We.showEngTicketFieldsDefault = e2.showEngTicketFieldsInReportIssueModalDefault ?? false, e2.customBaseUrl && (We.triageBaseUrl = e2.customBaseUrl), We.shortcuts = (function mergeShortcutsConfig(e3) {
2251
+ const t3 = { ...He };
2112
2252
  if (!e3) return t3;
2113
2253
  "boolean" == typeof e3.enabled && (t3.enabled = e3.enabled);
2114
2254
  const n2 = ["openModalExistingMode", "openModalCaptureNewMode", "closeModal", "submitReport", "startRecording", "stopRecording"];
@@ -2118,41 +2258,250 @@ const Me = Object.freeze(Object.defineProperty({ __proto__: null, ReportIssueCon
2118
2258
  }
2119
2259
  return t3;
2120
2260
  })(e2.shortcuts);
2121
- const { shortcuts: t2 } = Ie;
2261
+ const { shortcuts: t2 } = We;
2122
2262
  window.addEventListener("keydown", (e3) => {
2123
2263
  const n2 = (function isTypingInInput() {
2124
2264
  const e4 = document.activeElement;
2125
2265
  return e4 instanceof HTMLInputElement || e4 instanceof HTMLTextAreaElement || e4 instanceof HTMLElement && e4.isContentEditable;
2126
- })(), i2 = e3.key.toLowerCase(), o2 = e3.metaKey || e3.ctrlKey, s2 = !!document.getElementById("sf-report-issue-modal"), r2 = !n2 && (t2.enabled || s2), shortcutUsed = (e4) => i2 === t2[e4].key && o2 === t2[e4].requireCmdCtrl, a2 = s2 ? (e4) => {
2266
+ })(), i2 = e3.key.toLowerCase(), o2 = e3.metaKey || e3.ctrlKey, r2 = !!document.getElementById("sf-report-issue-modal"), s2 = !n2 && (t2.enabled || r2), shortcutUsed = (e4) => i2 === t2[e4].key && o2 === t2[e4].requireCmdCtrl, a2 = r2 ? (e4) => {
2127
2267
  setActiveTab(e4), updateModeSpecificUI(e4);
2128
2268
  } : injectModalHTML;
2129
- if (r2 && shortcutUsed("openModalExistingMode")) return e3.preventDefault(), void a2("lookback");
2130
- if (r2 && shortcutUsed("openModalCaptureNewMode")) return e3.preventDefault(), void a2("startnow");
2131
- if (s2 && !ye && shortcutUsed("closeModal")) return e3.preventDefault(), void closeModal();
2132
- if (s2 && shortcutUsed("submitReport")) {
2269
+ if (s2 && shortcutUsed("openModalExistingMode")) return e3.preventDefault(), void a2("lookback");
2270
+ if (s2 && shortcutUsed("openModalCaptureNewMode")) return e3.preventDefault(), void a2("startnow");
2271
+ if (r2 && !Oe && shortcutUsed("closeModal")) return e3.preventDefault(), void closeModal();
2272
+ if (r2 && shortcutUsed("submitReport")) {
2133
2273
  const t3 = document.getElementById("sf-issue-submit-btn");
2134
2274
  return void (t3 && !t3.disabled && (e3.preventDefault(), t3.click()));
2135
2275
  }
2136
- if (ye && i2 === t2.stopRecording.key && o2 === t2.stopRecording.requireCmdCtrl) return e3.preventDefault(), void stopRecording();
2137
- if (s2 && "startnow" === fe.mode && i2 === t2.startRecording.key && o2 === t2.startRecording.requireCmdCtrl && !n2) {
2276
+ if (Oe && i2 === t2.stopRecording.key && o2 === t2.stopRecording.requireCmdCtrl) return e3.preventDefault(), void stopRecording();
2277
+ if (r2 && "startnow" === De.mode && i2 === t2.startRecording.key && o2 === t2.startRecording.requireCmdCtrl && !n2) {
2138
2278
  const t3 = document.getElementById("sf-start-recording-btn");
2139
2279
  return void (t3 && (e3.preventDefault(), t3.click()));
2140
2280
  }
2141
2281
  });
2142
- } }, Symbol.toStringTag, { value: "Module" })), Ce = readDebugFlag(), $e = /* @__PURE__ */ new Map();
2282
+ } }, Symbol.toStringTag, { value: "Module" })), Qe = /* @__PURE__ */ new WeakMap();
2283
+ function creationOf(e2) {
2284
+ const t2 = {};
2285
+ try {
2286
+ let n2 = e2;
2287
+ for (let e3 = 0; e3 < 8 && n2 && "object" == typeof n2; e3++) {
2288
+ const e4 = Qe.get(n2);
2289
+ if (e4) {
2290
+ t2.createId = e4;
2291
+ break;
2292
+ }
2293
+ n2 = n2.parent;
2294
+ }
2295
+ } catch {
2296
+ }
2297
+ return t2;
2298
+ }
2299
+ function frameworkChildren(e2) {
2300
+ const t2 = [], push = (e3) => {
2301
+ e3 && "object" == typeof e3 && t2.push(e3);
2302
+ };
2303
+ try {
2304
+ const t3 = e2;
2305
+ if (Array.isArray(t3.children)) for (const e3 of t3.children) push(e3);
2306
+ if (push(t3.scene), Array.isArray(t3.scenes)) for (const e3 of t3.scenes) push(e3);
2307
+ if ("function" == typeof t3.getObjects) {
2308
+ const e3 = t3.getObjects();
2309
+ if (Array.isArray(e3)) for (const t4 of e3) push(t4);
2310
+ }
2311
+ } catch {
2312
+ }
2313
+ return t2;
2314
+ }
2315
+ function markSubtree(e2, t2) {
2316
+ try {
2317
+ if (!e2 || "object" != typeof e2) return;
2318
+ const n2 = /* @__PURE__ */ new WeakSet();
2319
+ let i2 = [e2];
2320
+ n2.add(e2);
2321
+ let o2 = 0;
2322
+ for (let e3 = 0; e3 <= 6 && i2.length; e3++) {
2323
+ const r2 = [];
2324
+ for (const s2 of i2) {
2325
+ if (o2 >= 2e3) return;
2326
+ o2++;
2327
+ try {
2328
+ Qe.has(s2) || Qe.set(s2, t2);
2329
+ } catch {
2330
+ }
2331
+ if (e3 < 6) for (const e4 of frameworkChildren(s2)) n2.has(e4) || (n2.add(e4), r2.push(e4));
2332
+ }
2333
+ i2 = r2;
2334
+ }
2335
+ } catch {
2336
+ }
2337
+ }
2338
+ const Xe = /* @__PURE__ */ new Map();
2339
+ function bind(e2, t2) {
2340
+ return (function isCanvas(e3) {
2341
+ return "undefined" != typeof HTMLCanvasElement && e3 instanceof HTMLCanvasElement;
2342
+ })(e2) ? (Xe.set(e2, t2), () => {
2343
+ Xe.get(e2) === t2 && Xe.delete(e2);
2344
+ }) : () => {
2345
+ };
2346
+ }
2347
+ function registerKonvaStage(e2) {
2348
+ var _a, _b, _c, _d;
2349
+ try {
2350
+ const t2 = e2, n2 = ((_a = t2.getLayers) == null ? void 0 : _a.call(t2)) ?? [], i2 = (_d = (_c = (_b = n2[0]) == null ? void 0 : _b.getCanvas) == null ? void 0 : _c.call(_b)) == null ? void 0 : _d._canvas;
2351
+ return bind(i2, (e3, n3) => {
2352
+ var _a2, _b2, _c2, _d2;
2353
+ const i3 = e3.getBoundingClientRect(), o2 = (_a2 = t2.getIntersection) == null ? void 0 : _a2.call(t2, { x: n3.clientX - i3.left, y: n3.clientY - i3.top });
2354
+ if (!o2) return null;
2355
+ const r2 = (_b2 = o2.getClassName) == null ? void 0 : _b2.call(o2);
2356
+ return { framework: "konva", label: ((_c2 = o2.name) == null ? void 0 : _c2.call(o2)) || ((_d2 = o2.id) == null ? void 0 : _d2.call(o2)) || r2 || "shape", objectType: r2, ...creationOf(o2) };
2357
+ });
2358
+ } catch {
2359
+ return () => {
2360
+ };
2361
+ }
2362
+ }
2363
+ function registerFabricCanvas(e2) {
2364
+ try {
2365
+ const t2 = e2;
2366
+ return bind(t2.lowerCanvasEl, (e3, n2) => {
2367
+ var _a;
2368
+ const i2 = (_a = t2.findTarget) == null ? void 0 : _a.call(t2, n2);
2369
+ if (!i2) return null;
2370
+ return { framework: "fabric", label: i2.name || i2.id || i2.type || "object", objectType: i2.type, ...creationOf(i2) };
2371
+ });
2372
+ } catch {
2373
+ return () => {
2374
+ };
2375
+ }
2376
+ }
2377
+ function registerChart(e2) {
2378
+ try {
2379
+ const t2 = e2;
2380
+ return bind(t2.canvas, (e3, n2) => {
2381
+ var _a, _b, _c, _d, _e2;
2382
+ const i2 = (_a = t2.getElementsAtEventForMode) == null ? void 0 : _a.call(t2, n2, "nearest", { intersect: true }, false);
2383
+ if (!i2 || !i2.length) return null;
2384
+ const { datasetIndex: o2, index: r2 } = i2[0];
2385
+ return { framework: "chartjs", label: `${((_d = (_c = (_b = t2.data) == null ? void 0 : _b.datasets) == null ? void 0 : _c[o2]) == null ? void 0 : _d.label) ?? `dataset${o2}`}[${r2}]`, objectType: (_e2 = t2.config) == null ? void 0 : _e2.type, ...creationOf(t2), configRef: { datasetIndex: o2, index: r2 } };
2386
+ });
2387
+ } catch {
2388
+ return () => {
2389
+ };
2390
+ }
2391
+ }
2392
+ function registerThreeScene(e2, t2, n2, i2) {
2393
+ try {
2394
+ const o2 = i2, r2 = n2, s2 = e2, a2 = new o2.Raycaster(), c2 = new o2.Vector2();
2395
+ return bind(r2.domElement, (e3, n3) => {
2396
+ const i3 = e3.getBoundingClientRect();
2397
+ c2.x = (n3.clientX - i3.left) / i3.width * 2 - 1, c2.y = -(n3.clientY - i3.top) / i3.height * 2 + 1, a2.setFromCamera(c2, t2);
2398
+ const o3 = a2.intersectObjects(s2.children ?? [], true);
2399
+ if (!o3.length) return null;
2400
+ const r3 = o3[0].object;
2401
+ let l2 = r3;
2402
+ for (; l2 && !l2.name && l2.parent; ) l2 = l2.parent;
2403
+ return { framework: "three", label: (l2 == null ? void 0 : l2.name) || r3.name || r3.uuid || "mesh", objectType: r3.type, path: r3.uuid, ...creationOf(r3) };
2404
+ });
2405
+ } catch {
2406
+ return () => {
2407
+ };
2408
+ }
2409
+ }
2410
+ function registerPixiApp(e2) {
2411
+ try {
2412
+ const t2 = e2;
2413
+ return bind(t2.canvas ?? t2.view, (e3, n2) => {
2414
+ var _a, _b, _c, _d;
2415
+ const i2 = e3.getBoundingClientRect(), o2 = n2.clientX - i2.left, r2 = n2.clientY - i2.top, s2 = (_d = (_c = (_b = (_a = t2.renderer) == null ? void 0 : _a.events) == null ? void 0 : _b.rootBoundary) == null ? void 0 : _c.hitTest) == null ? void 0 : _d.call(_c, o2, r2);
2416
+ if (!s2) return null;
2417
+ const a2 = (function pixiObjectType(e4) {
2418
+ var _a2;
2419
+ if ("string" == typeof e4.text) return "Text";
2420
+ const t3 = !!e4.texture && "function" != typeof e4.texture;
2421
+ if (t3 && (e4.tilePosition || e4.tileScale)) return "TilingSprite";
2422
+ if (e4.geometry && e4.shader) return "Mesh";
2423
+ if (e4.context) return "Graphics";
2424
+ if (t3) return "Sprite";
2425
+ if (Array.isArray(e4.children)) return "Container";
2426
+ const n3 = (_a2 = e4.constructor) == null ? void 0 : _a2.name;
2427
+ return n3 && n3.length > 1 ? n3 : void 0;
2428
+ })(s2);
2429
+ return { framework: "pixi", label: s2.label || s2.name || a2 || "displayObject", objectType: a2, ...creationOf(s2) };
2430
+ });
2431
+ } catch {
2432
+ return () => {
2433
+ };
2434
+ }
2435
+ }
2436
+ let Je = null, Ye = false;
2437
+ function onPointerDown(e2) {
2438
+ const t2 = Je;
2439
+ if (t2) for (const [n2, i2] of Xe) try {
2440
+ if (!n2.isConnected) {
2441
+ Xe.delete(n2);
2442
+ continue;
2443
+ }
2444
+ const o2 = n2.getBoundingClientRect();
2445
+ if (e2.clientX < o2.left || e2.clientX > o2.right || e2.clientY < o2.top || e2.clientY > o2.bottom) continue;
2446
+ const r2 = t2.canvasIdFor(n2);
2447
+ if (!r2) continue;
2448
+ const s2 = i2(n2, e2);
2449
+ if (!s2) continue;
2450
+ const a2 = n2.width, c2 = n2.height, l2 = o2.width ? Math.round((e2.clientX - o2.left) * a2 / o2.width) : 0, d2 = o2.height ? Math.round((e2.clientY - o2.top) * c2 / o2.height) : 0;
2451
+ t2.emitHit({ op: "hit", canvasId: r2, t: t2.now(), x: l2, y: d2, target: s2 });
2452
+ } catch {
2453
+ }
2454
+ }
2455
+ function installAdapters(e2) {
2456
+ Je = e2;
2457
+ const t2 = globalThis;
2458
+ t2.__sfCreateSite = (e3, t3) => {
2459
+ try {
2460
+ e3 && "object" == typeof e3 && Qe.set(e3, t3);
2461
+ } catch {
2462
+ }
2463
+ }, t2.__sfCreateFrom = (e3, t3) => {
2464
+ !(function createFrom(e4, t4) {
2465
+ try {
2466
+ if (!t4) return;
2467
+ if ((function isThenable(e5) {
2468
+ try {
2469
+ return !!e5 && ("object" == typeof e5 || "function" == typeof e5) && "function" == typeof e5.then;
2470
+ } catch {
2471
+ return false;
2472
+ }
2473
+ })(e4)) return void e4.then((e5) => {
2474
+ markSubtree(e5, t4);
2475
+ }, () => {
2476
+ });
2477
+ markSubtree(e4, t4);
2478
+ } catch {
2479
+ }
2480
+ })(e3, t3);
2481
+ }, Ye || "undefined" == typeof window || (window.addEventListener("pointerdown", onPointerDown, { capture: true, passive: true }), Ye = true);
2482
+ }
2483
+ function uninstallAdapters() {
2484
+ Je = null, Ye && "undefined" != typeof window && window.removeEventListener("pointerdown", onPointerDown, { capture: true }), Ye = false, Xe.clear();
2485
+ try {
2486
+ const e2 = globalThis;
2487
+ delete e2.__sfCreateSite, delete e2.__sfCreateFrom;
2488
+ } catch {
2489
+ }
2490
+ }
2491
+ const Ze = readDebugFlag(), et = /* @__PURE__ */ new Map();
2143
2492
  function getCachedRegex(e2, t2) {
2144
2493
  const n2 = `${e2}|${t2}`;
2145
- let i2 = $e.get(n2);
2146
- return i2 || (i2 = new RegExp(e2, t2), $e.set(n2, i2)), i2;
2494
+ let i2 = et.get(n2);
2495
+ return i2 || (i2 = new RegExp(e2, t2), et.set(n2, i2)), i2;
2147
2496
  }
2148
- const Fe = new Set([".js", ".mjs", ".cjs", ".ts", ".css", ".scss", ".sass", ".less", ".styl", ".stylus", ".png", ".jpg", ".jpeg", ".gif", ".svg", ".webp", ".avif", ".bmp", ".ico", ".tiff", ".tif", ".heic", ".woff", ".woff2", ".ttf", ".otf", ".eot", ".mp4", ".webm", ".ogv", ".mp3", ".wav", ".flac", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".csv", ".json", ".xml", ".txt", ".zip", ".rar", ".gz", ".tar", ".7z", ".map", ".webmanifest"].map((e2) => e2.toLowerCase())), Ae = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Le = [400, 403], Re = "CORS", De = 1, _e = "authorization", Pe = "Authorization", Be = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {}, enableFiberTracking: false, maskInputSelector: "", maskTextSelector: "", blockSelector: "", unmaskSelector: "", maskInputOptions: { password: true } }, Oe = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
2497
+ const tt = new Set([".js", ".mjs", ".cjs", ".ts", ".css", ".scss", ".sass", ".less", ".styl", ".stylus", ".png", ".jpg", ".jpeg", ".gif", ".svg", ".webp", ".avif", ".bmp", ".ico", ".tiff", ".tif", ".heic", ".woff", ".woff2", ".ttf", ".otf", ".eot", ".mp4", ".webm", ".ogv", ".mp3", ".wav", ".flac", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".csv", ".json", ".xml", ".txt", ".zip", ".rar", ".gz", ".tar", ".7z", ".map", ".webmanifest"].map((e2) => e2.toLowerCase())), nt = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], it = [400, 403], ot = "CORS", rt = 1, st = "authorization", at = "Authorization", ct = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {}, enableFiberTracking: false, maskInputSelector: "", maskTextSelector: "", blockSelector: "", unmaskSelector: "", maskInputOptions: { password: true } }, lt = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
2149
2498
  function maskAuthorizationHeader(e2) {
2150
- const t2 = e2[_e] ? _e : e2[Pe] ? Pe : null;
2499
+ const t2 = e2[st] ? st : e2[at] ? at : null;
2151
2500
  if (!t2) return;
2152
2501
  const n2 = e2[t2], i2 = n2.indexOf(" ");
2153
2502
  if (-1 !== i2) {
2154
- const o2 = n2.slice(0, i2 + 1), s2 = n2.slice(i2 + 1);
2155
- s2.length > 8 ? e2[t2] = o2 + s2.slice(0, 4) + "*".repeat(s2.length - 8) + s2.slice(-4) : e2[t2] = o2 + "*".repeat(s2.length);
2503
+ const o2 = n2.slice(0, i2 + 1), r2 = n2.slice(i2 + 1);
2504
+ r2.length > 8 ? e2[t2] = o2 + r2.slice(0, 4) + "*".repeat(r2.length - 8) + r2.slice(-4) : e2[t2] = o2 + "*".repeat(r2.length);
2156
2505
  } else n2.length > 8 ? e2[t2] = n2.slice(0, 4) + "*".repeat(n2.length - 8) + n2.slice(-4) : e2[t2] = "*".repeat(n2.length);
2157
2506
  }
2158
2507
  function trackDomainChangesOnce() {
@@ -2163,10 +2512,10 @@ function trackDomainChangesOnce() {
2163
2512
  const i2 = window.location.href.split("?")[0];
2164
2513
  if (n3 || i2 !== t2) {
2165
2514
  t2 = i2;
2166
- const o2 = uuidv4(), s2 = sessionStorage.getItem("pageVisitUUID") ?? "";
2167
- sessionStorage.setItem("pageVisitUUID", o2), sessionStorage.setItem("prevPageVisitUUID", s2), invalidateUrlCache();
2168
- const r2 = Date.now();
2169
- e2.internalDebugLogs && console.log("[sf-recorder] mint pageVisitUUID", { url: i2, newUuid: o2, prevUuid: s2, forceSend: n3, timestamp: r2, stack: new Error().stack }), sendMessage({ type: "routeChange", data: { url: i2, timestamp: r2, page_visit_uuid: o2, prev_page_visit_uuid: s2 } });
2515
+ const o2 = uuidv4(), r2 = sessionStorage.getItem("pageVisitUUID") ?? "";
2516
+ sessionStorage.setItem("pageVisitUUID", o2), sessionStorage.setItem("prevPageVisitUUID", r2), invalidateUrlCache();
2517
+ const s2 = Date.now();
2518
+ e2.internalDebugLogs && console.log("[sf-recorder] mint pageVisitUUID", { url: i2, newUuid: o2, prevUuid: r2, forceSend: n3, timestamp: s2, stack: new Error().stack }), sendMessage({ type: "routeChange", data: { url: i2, timestamp: s2, page_visit_uuid: o2, prev_page_visit_uuid: r2 } });
2170
2519
  }
2171
2520
  }, n2 = /* @__PURE__ */ (function debounce(e3, t3) {
2172
2521
  let n3;
@@ -2179,14 +2528,14 @@ function trackDomainChangesOnce() {
2179
2528
  function sendUserDeviceUuid() {
2180
2529
  sendMessage({ type: "userDeviceUuid", userDeviceUuid: (function getOrSetUserDeviceUuid() {
2181
2530
  let e2 = null;
2182
- if (m) try {
2531
+ if ($) try {
2183
2532
  e2 = localStorage.getItem("sailfishUserDeviceUuid");
2184
2533
  } catch {
2185
2534
  }
2186
2535
  if (!e2) {
2187
2536
  e2 = uuidv4();
2188
2537
  try {
2189
- m && localStorage.setItem("sailfishUserDeviceUuid", e2);
2538
+ $ && localStorage.setItem("sailfishUserDeviceUuid", e2);
2190
2539
  } catch {
2191
2540
  }
2192
2541
  }
@@ -2197,48 +2546,48 @@ function handleVisibilityChange() {
2197
2546
  const e2 = document.visibilityState, t2 = Date.now();
2198
2547
  "visible" === e2 && (getOrSetSessionId(), requestTimeSync());
2199
2548
  try {
2200
- sendMessage({ type: "visibilityChange", data: { state: e2, url: window.location.href.split("?")[0], timestamp: t2, ...getUrlAndStoredUuids() } }), Ce && console.log(`[Sailfish] Tab became ${e2}, sent visibility change event`);
2549
+ sendMessage({ type: "visibilityChange", data: { state: e2, url: window.location.href.split("?")[0], timestamp: t2, ...getUrlAndStoredUuids() } }), Ze && console.log(`[Sailfish] Tab became ${e2}, sent visibility change event`);
2201
2550
  } catch (e3) {
2202
2551
  console.warn("[Sailfish] Failed to send visibility change event:", e3);
2203
2552
  }
2204
2553
  sessionStorage.setItem("tabVisibilityChanged", t2.toString()), sessionStorage.setItem("tabVisibilityState", e2), invalidateUrlCache();
2205
2554
  }
2206
2555
  function clearPageVisitDataFromSessionStorage() {
2207
- h && (sessionStorage.removeItem("pageVisitUUID"), sessionStorage.removeItem("prevPageVisitUUID"), sessionStorage.removeItem("tabVisibilityChanged"), sessionStorage.removeItem("tabVisibilityState"), invalidateUrlCache());
2556
+ A && (sessionStorage.removeItem("pageVisitUUID"), sessionStorage.removeItem("prevPageVisitUUID"), sessionStorage.removeItem("tabVisibilityChanged"), sessionStorage.removeItem("tabVisibilityState"), invalidateUrlCache());
2208
2557
  }
2209
- let je = false;
2558
+ let dt = false;
2210
2559
  function _ensureModuleSideEffects() {
2211
- je || (je = true, restoreFuncSpanState(), (function ensureSessionListeners() {
2212
- v || (v = true, f && window.addEventListener("beforeunload", () => {
2213
- window.name = S + window.name;
2560
+ dt || (dt = true, restoreFuncSpanState(), (function ensureSessionListeners() {
2561
+ D || (D = true, C && window.addEventListener("beforeunload", () => {
2562
+ window.name = L + window.name;
2214
2563
  }));
2215
- })(), f && (sendUserDeviceUuid(), (function sendTimeZone() {
2564
+ })(), C && (sendUserDeviceUuid(), (function sendTimeZone() {
2216
2565
  sendMessage({ type: "timeZone", timezone: Intl.DateTimeFormat().resolvedOptions().timeZone });
2217
- })()), g && document.addEventListener("visibilitychange", handleVisibilityChange), f && (window.addEventListener("beforeunload", () => {
2566
+ })()), M && document.addEventListener("visibilitychange", handleVisibilityChange), C && (window.addEventListener("beforeunload", () => {
2218
2567
  clearPageVisitDataFromSessionStorage();
2219
2568
  }), window.addEventListener("online", () => {
2220
2569
  requestTimeSync();
2221
2570
  })));
2222
2571
  }
2223
2572
  function matchParsedUrlAgainstPatterns(e2, t2) {
2224
- const { hostname: n2, pathname: i2, port: o2 } = e2, s2 = n2.startsWith("www.") ? n2.slice(4).toLowerCase() : n2.toLowerCase();
2573
+ const { hostname: n2, pathname: i2, port: o2 } = e2, r2 = n2.startsWith("www.") ? n2.slice(4).toLowerCase() : n2.toLowerCase();
2225
2574
  return t2.some((e3) => {
2226
2575
  const t3 = String(e3 || "").replace(/^[a-zA-Z]+:\/\//, "");
2227
- let [n3, r2] = t3.split("/", 2), a2 = "";
2576
+ let [n3, s2] = t3.split("/", 2), a2 = "";
2228
2577
  n3.includes(":") && ([n3, a2] = n3.split(":"));
2229
- const l2 = getCachedRegex(`^${n3.replace(/\./g, "\\.").replace(/\*/g, ".*")}$`, "i"), c2 = s2.startsWith("www.") ? s2.slice(4) : s2;
2578
+ const c2 = getCachedRegex(`^${n3.replace(/\./g, "\\.").replace(/\*/g, ".*")}$`, "i"), l2 = r2.startsWith("www.") ? r2.slice(4) : r2;
2230
2579
  if (a2 && "*" !== a2 && o2 !== a2) return false;
2231
2580
  if (n3.startsWith("*.")) {
2232
2581
  const e4 = n3.slice(2).toLowerCase();
2233
- if (!(s2 === e4 || c2 === e4 || s2.endsWith("." + e4))) return false;
2234
- if (r2) {
2235
- return getCachedRegex(`^/${r2.replace(/\*/g, ".*").replace(/\/$/, "")}`, "i").test(i2);
2582
+ if (!(r2 === e4 || l2 === e4 || r2.endsWith("." + e4))) return false;
2583
+ if (s2) {
2584
+ return getCachedRegex(`^/${s2.replace(/\*/g, ".*").replace(/\/$/, "")}`, "i").test(i2);
2236
2585
  }
2237
2586
  return true;
2238
2587
  }
2239
- if (!l2.test(c2) && !l2.test(s2)) return false;
2240
- if (r2) {
2241
- return getCachedRegex(`^/${r2.replace(/\*/g, ".*").replace(/\/$/, "")}`, "i").test(i2);
2588
+ if (!c2.test(l2) && !c2.test(r2)) return false;
2589
+ if (s2) {
2590
+ return getCachedRegex(`^/${s2.replace(/\*/g, ".*").replace(/\/$/, "")}`, "i").test(i2);
2242
2591
  }
2243
2592
  return true;
2244
2593
  });
@@ -2264,7 +2613,7 @@ function matchUrlWithWildcard(e2, t2) {
2264
2613
  return matchParsedUrlAgainstPatterns(i2, t2);
2265
2614
  }
2266
2615
  function createSkipHeadersPropagationChecker(e2 = [], t2 = []) {
2267
- const n2 = [...Ae, ...e2], i2 = t2.length > 0;
2616
+ const n2 = [...nt, ...e2], i2 = t2.length > 0;
2268
2617
  return function shouldSkipHeadersPropagation(e3) {
2269
2618
  let o2;
2270
2619
  try {
@@ -2272,33 +2621,33 @@ function createSkipHeadersPropagationChecker(e2 = [], t2 = []) {
2272
2621
  } catch {
2273
2622
  return true;
2274
2623
  }
2275
- const s2 = o2.pathname.toLowerCase(), r2 = s2.lastIndexOf(".");
2276
- return !(-1 === r2 || !Fe.has(s2.slice(r2))) || (!(!i2 || matchParsedUrlAgainstPatterns(o2, t2)) || !!matchParsedUrlAgainstPatterns(o2, n2));
2624
+ const r2 = o2.pathname.toLowerCase(), s2 = r2.lastIndexOf(".");
2625
+ return !(-1 === s2 || !tt.has(r2.slice(s2))) || (!(!i2 || matchParsedUrlAgainstPatterns(o2, t2)) || !!matchParsedUrlAgainstPatterns(o2, n2));
2277
2626
  };
2278
2627
  }
2279
- function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, i2 = []) {
2280
- const o2 = window.fetch, s2 = getOrSetSessionId(), r2 = createSkipHeadersPropagationChecker(e2, i2), a2 = ["text/event-stream", "application/x-ndjson", "application/stream+json", "application/grpc", "application/grpc-web"], l2 = ["application/octet-stream"];
2281
- window.fetch = new Proxy(o2, { apply: async (e3, i3, o3) => {
2282
- let c2, d2 = o3[0], u2 = o3[1] || {};
2283
- if ("string" == typeof d2) c2 = d2;
2284
- else if (d2 instanceof Request) c2 = d2.url;
2628
+ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, n2 = []) {
2629
+ const i2 = window.fetch, o2 = getOrSetSessionId(), r2 = createSkipHeadersPropagationChecker(e2, n2), s2 = ["text/event-stream", "application/x-ndjson", "application/stream+json", "application/grpc", "application/grpc-web"], a2 = ["application/octet-stream"];
2630
+ window.fetch = new Proxy(i2, { apply: async (e3, n3, i3) => {
2631
+ let c2, l2 = i3[0], d2 = i3[1] || {};
2632
+ if ("string" == typeof l2) c2 = l2;
2633
+ else if (l2 instanceof Request) c2 = l2.url;
2285
2634
  else {
2286
- if (!(d2 instanceof URL)) return e3.apply(i3, o3);
2287
- c2 = d2.href;
2635
+ if (!(l2 instanceof URL)) return e3.apply(n3, i3);
2636
+ c2 = l2.href;
2288
2637
  }
2289
- return r2(c2) ? e3.apply(i3, o3) : (async function injectHeaderWrapper(e4, i4, o4, s3, r3, c3, d3) {
2638
+ return r2(c2) ? e3.apply(n3, i3) : (async function injectHeaderWrapper(e4, n4, i4, o3, r3, c3, l3) {
2290
2639
  var _a, _b;
2291
- if (!c3) return e4.apply(i4, o4);
2292
- let u3 = uuidv4();
2293
- const p2 = getUrlAndStoredUuids(), f2 = r3.method || "GET", g2 = Date.now();
2640
+ if (!c3) return e4.apply(n4, i4);
2641
+ let d3 = uuidv4();
2642
+ const u2 = getUrlAndStoredUuids(), p2 = r3.method || "GET", g2 = Date.now();
2294
2643
  let m2, h2 = {}, y2 = null;
2295
2644
  try {
2296
- if (s3 instanceof Request) {
2297
- s3.headers.forEach((e5, t3) => {
2645
+ if (o3 instanceof Request) {
2646
+ o3.headers.forEach((e5, t3) => {
2298
2647
  h2[t3] = e5;
2299
2648
  });
2300
2649
  try {
2301
- y2 = s3.clone();
2650
+ y2 = o3.clone();
2302
2651
  } catch (e5) {
2303
2652
  y2 = null;
2304
2653
  }
@@ -2308,96 +2657,96 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
2308
2657
  h2[e5] = t3;
2309
2658
  }) : h2 = { ...r3.headers }), m2 = r3.body;
2310
2659
  } catch (e5) {
2311
- Ce && console.warn("[Sailfish] Failed to capture request data:", e5);
2660
+ Ze && console.warn("[Sailfish] Failed to capture request data:", e5);
2312
2661
  }
2313
- delete h2[n];
2314
- const S2 = getFuncSpanHeader();
2315
- S2 && delete h2[S2.name];
2316
- const b2 = `${c3}/${p2.page_visit_uuid}/${u3}`;
2317
- h2[n] = b2, S2 && (h2[S2.name] = S2.value);
2662
+ delete h2[f];
2663
+ const b2 = getFuncSpanHeader();
2664
+ b2 && delete h2[b2.name];
2665
+ const v2 = `${c3}/${u2.page_visit_uuid}/${d3}`;
2666
+ h2[f] = v2, b2 && (h2[b2.name] = b2.value);
2318
2667
  maskAuthorizationHeader(h2);
2319
2668
  try {
2320
- let S3 = await (async function injectHeader(e5, t3, i5, o5, s4, r4, a3) {
2321
- const l3 = getFuncSpanHeader();
2322
- if (i5 instanceof Request) {
2323
- const c4 = i5.clone(), d4 = new Headers(c4.headers);
2324
- d4.set(n, `${s4}/${r4}/${a3}`), l3 && (d4.set(l3.name, l3.value), Ce && console.log("[Sailfish] Added funcspan header to HTTP Request:", { url: i5.url, header: l3.name }));
2325
- const u4 = new Request(c4, { headers: d4 });
2326
- return await e5.call(t3, u4, o5);
2669
+ let b3 = await (async function injectHeader(e5, t3, n5, i5, o4, r4, s3) {
2670
+ const a3 = getFuncSpanHeader();
2671
+ if (n5 instanceof Request) {
2672
+ const c4 = n5.clone(), l4 = new Headers(c4.headers);
2673
+ l4.set(f, `${o4}/${r4}/${s3}`), a3 && (l4.set(a3.name, a3.value), Ze && console.log("[Sailfish] Added funcspan header to HTTP Request:", { url: n5.url, header: a3.name }));
2674
+ const d4 = new Request(c4, { headers: l4 });
2675
+ return await e5.call(t3, d4, i5);
2327
2676
  }
2328
2677
  {
2329
- const c4 = { ...o5 }, d4 = new Headers(o5.headers || {});
2330
- return d4.set(n, `${s4}/${r4}/${a3}`), l3 && (d4.set(l3.name, l3.value), Ce && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof i5 ? i5 : i5.href, header: l3.name })), c4.headers = d4, await e5.call(t3, i5, c4);
2678
+ const c4 = { ...i5 }, l4 = new Headers(i5.headers || {});
2679
+ return l4.set(f, `${o4}/${r4}/${s3}`), a3 && (l4.set(a3.name, a3.value), Ze && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof n5 ? n5 : n5.href, header: a3.name })), c4.headers = l4, await e5.call(t3, n5, c4);
2331
2680
  }
2332
- })(e4, i4, s3, r3, c3, p2.page_visit_uuid, u3), b3 = false;
2333
- Le.includes(S3.status) && (Ce && console.log("Perform retry as status was fail:", S3), delete h2[n], S3 = await (async function retryWithoutPropagateHeaders(e5, t3, i5, o5) {
2681
+ })(e4, n4, o3, r3, c3, u2.page_visit_uuid, d3), v3 = false;
2682
+ it.includes(b3.status) && (Ze && console.log("Perform retry as status was fail:", b3), delete h2[f], b3 = await (async function retryWithoutPropagateHeaders(e5, t3, n5, i5) {
2334
2683
  try {
2335
- let o6 = i5[0], s4 = i5[1] || {};
2336
- if ("string" == typeof o6 || o6 instanceof URL) {
2337
- const i6 = { ...s4 }, r4 = new Headers(s4.headers || {});
2338
- r4.delete(n), i6.headers = r4;
2339
- return await e5.call(t3, o6, i6);
2684
+ let i6 = n5[0], o4 = n5[1] || {};
2685
+ if ("string" == typeof i6 || i6 instanceof URL) {
2686
+ const n6 = { ...o4 }, r4 = new Headers(o4.headers || {});
2687
+ r4.delete(f), n6.headers = r4;
2688
+ return await e5.call(t3, i6, n6);
2340
2689
  }
2341
- if (o6 instanceof Request) {
2342
- const i6 = o6.clone(), r4 = new Headers(i6.headers);
2343
- r4.delete(n);
2344
- const a3 = new Request(i6, { headers: r4 });
2345
- return await e5.call(t3, a3, s4);
2690
+ if (i6 instanceof Request) {
2691
+ const n6 = i6.clone(), r4 = new Headers(n6.headers);
2692
+ r4.delete(f);
2693
+ const s3 = new Request(n6, { headers: r4 });
2694
+ return await e5.call(t3, s3, o4);
2346
2695
  }
2347
- return e5.apply(t3, i5);
2696
+ return e5.apply(t3, n5);
2348
2697
  } catch (e6) {
2349
- throw Ce && console.log(`Retry without ${n} for ${o5} also failed:`, e6), e6;
2698
+ throw Ze && console.log(`Retry without ${f} for ${i5} also failed:`, e6), e6;
2350
2699
  }
2351
- })(e4, i4, o4, d3), b3 = true);
2352
- const v2 = Date.now(), w2 = (function captureClientTime() {
2700
+ })(e4, n4, i4, l3), v3 = true);
2701
+ const S2 = Date.now(), w2 = (function captureClientTime() {
2353
2702
  return { wallTimeMs: Date.now(), monotonicMs: monotonicNow(), timeOriginMs: timeOriginMs() };
2354
- })(), k2 = S3.status, x2 = S3.ok, I2 = x2 ? "" : `Request Error: ${S3.statusText}`;
2703
+ })(), k2 = b3.status, x2 = b3.ok, I2 = x2 ? "" : `Request Error: ${b3.statusText}`;
2355
2704
  let T2 = null;
2356
2705
  try {
2357
- T2 = {}, S3.headers.forEach((e5, t3) => {
2706
+ T2 = {}, b3.headers.forEach((e5, t3) => {
2358
2707
  T2[t3] = e5;
2359
2708
  });
2360
2709
  } catch (e5) {
2361
- Ce && console.warn("[Sailfish] Failed to capture response headers:", e5), T2 = null;
2710
+ Ze && console.warn("[Sailfish] Failed to capture response headers:", e5), T2 = null;
2362
2711
  }
2363
- const E2 = { type: 27, timestamp: v2, sessionId: c3, client: w2, data: { request_id: u3, session_id: c3, timestamp_start: g2, timestamp_end: v2, response_code: k2, success: x2, error: I2, method: f2, url: toAbsoluteUrl(d3), retry_without_trace_id: b3, request_headers: h2, request_body: m2, response_headers: T2, response_body: null }, ...p2 }, sendEventWithBody = (e5) => {
2712
+ const E2 = { type: 27, timestamp: S2, sessionId: c3, client: w2, data: { request_id: d3, session_id: c3, timestamp_start: g2, timestamp_end: S2, response_code: k2, success: x2, error: I2, method: p2, url: toAbsoluteUrl(l3), retry_without_trace_id: v3, request_headers: h2, request_body: m2, response_headers: T2, response_body: null }, ...u2 }, sendEventWithBody = (e5) => {
2364
2713
  E2.data.response_body = e5, y2 ? y2.text().then((e6) => {
2365
2714
  E2.data.request_body = e6, sendEvent(E2);
2366
2715
  }, () => {
2367
2716
  sendEvent(E2);
2368
2717
  }) : sendEvent(E2);
2369
- }, M2 = 1024 * t2.captureResponseBodyMaxMb * 1024;
2718
+ }, C2 = 1024 * t2.captureResponseBodyMaxMb * 1024;
2370
2719
  if (0 === t2.captureResponseBodyMaxMb) sendEventWithBody(null);
2371
2720
  else if ((function shouldSkipBodyCapture(e5) {
2372
2721
  const t3 = e5.headers.get("content-type");
2373
2722
  if (!t3) return false;
2374
- const n2 = t3.toLowerCase();
2375
- return l2.some((e6) => n2.includes(e6));
2376
- })(S3)) sendEventWithBody(null);
2723
+ const n5 = t3.toLowerCase();
2724
+ return a2.some((e6) => n5.includes(e6));
2725
+ })(b3)) sendEventWithBody(null);
2377
2726
  else if ((function isStreamingResponse(e5) {
2378
2727
  const t3 = e5.headers.get("content-type");
2379
2728
  if (!t3) return false;
2380
- const n2 = t3.toLowerCase();
2381
- return a2.some((e6) => n2.includes(e6));
2382
- })(S3)) if (t2.captureStreamingResponseBody) try {
2383
- (async function readStreamPrefix(e5, t3, n2) {
2729
+ const n5 = t3.toLowerCase();
2730
+ return s2.some((e6) => n5.includes(e6));
2731
+ })(b3)) if (t2.captureStreamingResponseBody) try {
2732
+ (async function readStreamPrefix(e5, t3, n5) {
2384
2733
  const i5 = e5.body;
2385
2734
  if (!i5) return null;
2386
- const o5 = i5.getReader(), s4 = new TextDecoder(), r4 = [];
2735
+ const o4 = i5.getReader(), r4 = new TextDecoder(), s3 = [];
2387
2736
  let a3 = 0;
2388
2737
  const readWithLimit = async () => {
2389
2738
  try {
2390
2739
  for (; a3 < t3; ) {
2391
- const { done: e6, value: t4 } = await o5.read();
2740
+ const { done: e6, value: t4 } = await o4.read();
2392
2741
  if (e6) break;
2393
- a3 += t4.byteLength, r4.push(s4.decode(t4, { stream: true }));
2742
+ a3 += t4.byteLength, s3.push(r4.decode(t4, { stream: true }));
2394
2743
  }
2395
- return r4.push(s4.decode()), r4.join("");
2744
+ return s3.push(r4.decode()), s3.join("");
2396
2745
  } catch {
2397
- return r4.length > 0 ? r4.join("") : null;
2746
+ return s3.length > 0 ? s3.join("") : null;
2398
2747
  } finally {
2399
2748
  try {
2400
- o5.cancel();
2749
+ o4.cancel();
2401
2750
  } catch {
2402
2751
  }
2403
2752
  }
@@ -2405,52 +2754,52 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
2405
2754
  try {
2406
2755
  return await Promise.race([readWithLimit(), new Promise((e6) => setTimeout(() => {
2407
2756
  try {
2408
- o5.cancel();
2757
+ o4.cancel();
2409
2758
  } catch {
2410
2759
  }
2411
- e6(r4.length > 0 ? r4.join("") : null);
2412
- }, n2))]);
2760
+ e6(s3.length > 0 ? s3.join("") : null);
2761
+ }, n5))]);
2413
2762
  } catch {
2414
2763
  try {
2415
- o5.cancel();
2764
+ o4.cancel();
2416
2765
  } catch {
2417
2766
  }
2418
2767
  return null;
2419
2768
  }
2420
- })(S3.clone(), 1024 * t2.captureStreamPrefixKb, t2.captureStreamTimeoutMs).then((e5) => sendEventWithBody(e5), () => sendEventWithBody(null));
2769
+ })(b3.clone(), 1024 * t2.captureStreamPrefixKb, t2.captureStreamTimeoutMs).then((e5) => sendEventWithBody(e5), () => sendEventWithBody(null));
2421
2770
  } catch {
2422
2771
  sendEventWithBody(null);
2423
2772
  }
2424
2773
  else sendEventWithBody(null);
2425
2774
  else {
2426
- const e5 = S3.headers.get("content-length"), t3 = e5 ? parseInt(e5, 10) : NaN;
2427
- if (!isNaN(t3) && t3 > M2) sendEventWithBody(null);
2775
+ const e5 = b3.headers.get("content-length"), t3 = e5 ? parseInt(e5, 10) : NaN;
2776
+ if (!isNaN(t3) && t3 > C2) sendEventWithBody(null);
2428
2777
  else try {
2429
- S3.clone().text().then((e6) => {
2430
- e6.length > M2 ? sendEventWithBody(null) : sendEventWithBody(e6);
2778
+ b3.clone().text().then((e6) => {
2779
+ e6.length > C2 ? sendEventWithBody(null) : sendEventWithBody(e6);
2431
2780
  }, () => sendEventWithBody(null));
2432
2781
  } catch {
2433
2782
  sendEventWithBody(null);
2434
2783
  }
2435
2784
  }
2436
- return S3;
2785
+ return b3;
2437
2786
  } catch (t3) {
2438
- const n2 = Date.now(), s4 = false, r4 = ((_a = t3.response) == null ? void 0 : _a.status) || 500, a3 = t3.message || "Fetch request failed";
2439
- if (t3 instanceof TypeError && ((_b = t3 == null ? void 0 : t3.message) == null ? void 0 : _b.toLowerCase().includes(Re.toLowerCase()))) return e4.apply(i4, o4);
2440
- let l3 = m2;
2787
+ const o4 = Date.now(), r4 = false, s3 = ((_a = t3.response) == null ? void 0 : _a.status) || 500, a3 = t3.message || "Fetch request failed";
2788
+ if (t3 instanceof TypeError && ((_b = t3 == null ? void 0 : t3.message) == null ? void 0 : _b.toLowerCase().includes(ot.toLowerCase()))) return e4.apply(n4, i4);
2789
+ let f2 = m2;
2441
2790
  if (y2) try {
2442
- l3 = await y2.text();
2791
+ f2 = await y2.text();
2443
2792
  } catch {
2444
- l3 = null;
2793
+ f2 = null;
2445
2794
  }
2446
- throw sendEvent({ type: 27, timestamp: n2, sessionId: c3, data: { request_id: u3, session_id: c3, timestamp_start: g2, timestamp_end: n2, response_code: r4, success: s4, error: a3, method: f2, url: toAbsoluteUrl(d3), request_headers: h2, request_body: l3, response_body: null }, ...p2 }), t3;
2795
+ throw sendEvent({ type: 27, timestamp: o4, sessionId: c3, data: { request_id: d3, session_id: c3, timestamp_start: g2, timestamp_end: o4, response_code: s3, success: r4, error: a3, method: p2, url: toAbsoluteUrl(l3), request_headers: h2, request_body: f2, response_body: null }, ...u2 }), t3;
2447
2796
  }
2448
- })(e3, i3, o3, d2, u2, s2, c2);
2797
+ })(e3, n3, i3, l2, d2, o2, c2);
2449
2798
  } });
2450
2799
  }
2451
- async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: i2 = ["*"], domainsToNotPropagateHeaderTo: o2 = [], serviceVersion: s2, serviceIdentifier: r2, gitSha: a2, serviceAdditionalMetadata: l2, enableIpTracking: c2, captureStreamingResponseBody: d2 = true, captureResponseBodyMaxMb: u2 = 10, captureStreamPrefixKb: p2 = 64, captureStreamTimeoutMs: f2 = 1e4, enableFiberTracking: g2 = false, deferRecording: m2, deferRecordingStart: y2, chunkSnapshot: S2, useWsWorker: b2 = true, capturePerformanceMetrics: v2 = true, maskTextClass: w2, maskInputSelector: k2, maskTextSelector: x2, blockSelector: I2, unmaskSelector: T2, maskInputOptions: E2, library: M2, headlessRecording: C2 = false }) {
2452
- var _a, _b;
2453
- if (!C2 && (function isHeadlessOrLighthouse() {
2800
+ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: n2 = ["*"], domainsToNotPropagateHeaderTo: i2 = [], serviceVersion: o2, serviceIdentifier: r2, gitSha: s2, serviceAdditionalMetadata: a2, enableIpTracking: c2, captureStreamingResponseBody: l2 = true, captureResponseBodyMaxMb: d2 = 10, captureStreamPrefixKb: u2 = 64, captureStreamTimeoutMs: g2 = 1e4, enableFiberTracking: m2 = false, deferRecording: h2, deferRecordingStart: y2, chunkSnapshot: b2, useWsWorker: v2 = true, capturePerformanceMetrics: S2 = true, maskTextClass: w2, maskInputSelector: k2, maskTextSelector: x2, blockSelector: I2, unmaskSelector: T2, maskInputOptions: E2, recordCanvas: C2, maskCanvasClass: M2, gitOrg: $2, gitRepo: F2, gitProvider: L2, library: R2, headlessRecording: D2 = false }) {
2801
+ var _a, _b, _c, _d;
2802
+ if (!D2 && (function isHeadlessOrLighthouse() {
2454
2803
  try {
2455
2804
  if ("undefined" == typeof navigator) return false;
2456
2805
  const e3 = navigator;
@@ -2461,53 +2810,53 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2461
2810
  return false;
2462
2811
  }
2463
2812
  })()) return;
2464
- const $2 = m2 ?? y2 ?? true, F2 = getOrSetSessionId(), A2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
2465
- if (A2.sessionId = F2, A2.apiKey = e2, A2.backendApi = t2, A2.serviceAdditionalMetadata = l2, A2.initialized && A2.sessionId === F2 && A2.ws && 1 === A2.ws.readyState) return void trackDomainChangesOnce();
2466
- const L2 = { captureStreamingResponseBody: d2, captureResponseBodyMaxMb: u2, captureStreamPrefixKb: p2, captureStreamTimeoutMs: f2 };
2467
- sessionStorage.getItem("pageVisitUUID") || (sessionStorage.setItem("pageVisitUUID", uuidv4()), invalidateUrlCache()), A2.xhrPatched || (!(function setupXMLHttpRequestInterceptor(e3 = [], t3 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, i3 = []) {
2468
- const o3 = XMLHttpRequest.prototype.open, s3 = XMLHttpRequest.prototype.send, r3 = XMLHttpRequest.prototype.setRequestHeader, a3 = getOrSetSessionId(), l3 = createSkipHeadersPropagationChecker(e3, i3);
2813
+ const B2 = h2 ?? y2 ?? true, P2 = getOrSetSessionId(), _2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
2814
+ if (_2.sessionId = P2, _2.apiKey = e2, _2.backendApi = t2, _2.serviceAdditionalMetadata = a2, _2.initialized && _2.sessionId === P2 && _2.ws && 1 === _2.ws.readyState) return void trackDomainChangesOnce();
2815
+ const O2 = { captureStreamingResponseBody: l2, captureResponseBodyMaxMb: d2, captureStreamPrefixKb: u2, captureStreamTimeoutMs: g2 };
2816
+ sessionStorage.getItem("pageVisitUUID") || (sessionStorage.setItem("pageVisitUUID", uuidv4()), invalidateUrlCache()), _2.xhrPatched || (!(function setupXMLHttpRequestInterceptor(e3 = [], t3 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, n3 = []) {
2817
+ const i3 = XMLHttpRequest.prototype.open, o3 = XMLHttpRequest.prototype.send, r3 = XMLHttpRequest.prototype.setRequestHeader, s3 = getOrSetSessionId(), a3 = createSkipHeadersPropagationChecker(e3, n3);
2469
2818
  XMLHttpRequest.prototype.setRequestHeader = function(e4, t4) {
2470
2819
  return this._capturedRequestHeaders || (this._capturedRequestHeaders = {}), this._capturedRequestHeaders[e4] = t4, r3.call(this, e4, t4);
2471
- }, XMLHttpRequest.prototype.open = function(e4, t4, ...n2) {
2472
- return this._requestUrl = "string" == typeof t4 && t4.length > 0 ? t4 : null, this._requestMethod = e4, this._capturedRequestHeaders = {}, o3.apply(this, [e4, t4, ...n2]);
2820
+ }, XMLHttpRequest.prototype.open = function(e4, t4, ...n4) {
2821
+ return this._requestUrl = "string" == typeof t4 && t4.length > 0 ? t4 : null, this._requestMethod = e4, this._capturedRequestHeaders = {}, i3.apply(this, [e4, t4, ...n4]);
2473
2822
  }, XMLHttpRequest.prototype.send = function(...e4) {
2474
- const i4 = this._requestUrl;
2475
- if (!i4) return s3.apply(this, e4);
2476
- if (l3(i4)) return s3.apply(this, e4);
2477
- const o4 = sessionStorage.getItem("pageVisitUUID"), r4 = uuidv4(), c3 = `${a3}/${o4}/${r4}`;
2823
+ const n4 = this._requestUrl;
2824
+ if (!n4) return o3.apply(this, e4);
2825
+ if (a3(n4)) return o3.apply(this, e4);
2826
+ const i4 = sessionStorage.getItem("pageVisitUUID"), r4 = uuidv4(), c3 = `${s3}/${i4}/${r4}`;
2478
2827
  try {
2479
- this.setRequestHeader(n, c3);
2828
+ this.setRequestHeader(f, c3);
2480
2829
  } catch (e5) {
2481
- console.warn(`Could not set X-Sf3-Rid for ${i4}`, e5);
2830
+ console.warn(`Could not set X-Sf3-Rid for ${n4}`, e5);
2482
2831
  }
2483
- const d3 = getFuncSpanHeader();
2484
- if (d3) try {
2485
- this.setRequestHeader(d3.name, d3.value), Ce && console.log("[Sailfish] Added funcspan header to XMLHttpRequest:", { url: i4, header: d3.name });
2832
+ const l3 = getFuncSpanHeader();
2833
+ if (l3) try {
2834
+ this.setRequestHeader(l3.name, l3.value), Ze && console.log("[Sailfish] Added funcspan header to XMLHttpRequest:", { url: n4, header: l3.name });
2486
2835
  } catch (e5) {
2487
- Ce && console.warn(`[Sailfish] Could not set funcspan header for ${i4}`, e5);
2836
+ Ze && console.warn(`[Sailfish] Could not set funcspan header for ${n4}`, e5);
2488
2837
  }
2489
- const u3 = Date.now();
2490
- let p3 = false;
2491
- const f3 = e4[0], g3 = { ...this._capturedRequestHeaders };
2838
+ const d3 = Date.now();
2839
+ let u3 = false;
2840
+ const p2 = e4[0], g3 = { ...this._capturedRequestHeaders };
2492
2841
  maskAuthorizationHeader(g3);
2493
- const emitFinished = (e5, t4, n2, o5, s4) => {
2494
- if (p3) return;
2495
- p3 = true;
2496
- const l4 = Date.now();
2497
- sendEvent({ type: 27, timestamp: l4, sessionId: a3, data: { request_id: r4, session_id: a3, timestamp_start: u3, timestamp_end: l4, response_code: t4, success: e5, error: n2, method: this._requestMethod, url: toAbsoluteUrl(i4), request_headers: g3, request_body: f3, response_headers: s4, response_body: o5 }, ...getUrlAndStoredUuids() });
2842
+ const emitFinished = (e5, t4, i5, o4, a4) => {
2843
+ if (u3) return;
2844
+ u3 = true;
2845
+ const c4 = Date.now();
2846
+ sendEvent({ type: 27, timestamp: c4, sessionId: s3, data: { request_id: r4, session_id: s3, timestamp_start: d3, timestamp_end: c4, response_code: t4, success: e5, error: i5, method: this._requestMethod, url: toAbsoluteUrl(n4), request_headers: g3, request_body: p2, response_headers: a4, response_body: o4 }, ...getUrlAndStoredUuids() });
2498
2847
  };
2499
2848
  return this.addEventListener("load", () => {
2500
2849
  const e5 = this.status || 0;
2501
- let n2, i5 = null;
2502
- const o5 = 1024 * t3.captureResponseBodyMaxMb * 1024;
2850
+ let n5, i5 = null;
2851
+ const o4 = 1024 * t3.captureResponseBodyMaxMb * 1024;
2503
2852
  try {
2504
- if (0 === t3.captureResponseBodyMaxMb) n2 = null;
2853
+ if (0 === t3.captureResponseBodyMaxMb) n5 = null;
2505
2854
  else {
2506
2855
  const e6 = this.responseText || this.response;
2507
- n2 = "string" == typeof e6 && e6.length > o5 ? null : e6;
2856
+ n5 = "string" == typeof e6 && e6.length > o4 ? null : e6;
2508
2857
  }
2509
2858
  } catch (e6) {
2510
- n2 = null;
2859
+ n5 = null;
2511
2860
  }
2512
2861
  try {
2513
2862
  i5 = {};
@@ -2517,36 +2866,45 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2517
2866
  2 === t4.length && (i5[t4[0]] = t4[1]);
2518
2867
  });
2519
2868
  } catch (e6) {
2520
- Ce && console.warn("[Sailfish] Failed to capture XHR response headers:", e6), i5 = null;
2869
+ Ze && console.warn("[Sailfish] Failed to capture XHR response headers:", e6), i5 = null;
2521
2870
  }
2522
- if (e5 >= 200 && e5 < 300) emitFinished(true, e5, "", n2, i5);
2871
+ if (e5 >= 200 && e5 < 300) emitFinished(true, e5, "", n5, i5);
2523
2872
  else {
2524
2873
  const t4 = this.statusText || `HTTP ${e5}`;
2525
- emitFinished(false, e5, t4, n2, i5);
2874
+ emitFinished(false, e5, t4, n5, i5);
2526
2875
  }
2527
2876
  }, { once: true }), this.addEventListener("error", () => {
2528
2877
  const e5 = this.status || 0, t4 = 0 === e5 ? "Network or CORS failure" : this.statusText || `Error ${e5}`;
2529
2878
  emitFinished(false, e5, t4);
2530
- }, { once: true }), s3.apply(this, e4);
2879
+ }, { once: true }), o3.apply(this, e4);
2531
2880
  };
2532
- })(o2, L2, i2), A2.xhrPatched = true), A2.fetchPatched || (setupFetchInterceptor(o2, L2, i2), A2.fetchPatched = true), await yieldToMain(), A2.domEventsInit || (initializeDomContentEvents(F2), A2.domEventsInit = true), await yieldToMain(), A2.consoleInit || (initializeConsolePlugin(Oe, F2), A2.consoleInit = true), await yieldToMain(), A2.errorInit || (!(function initializeErrorInterceptor() {
2881
+ })(i2, O2, n2), _2.xhrPatched = true), _2.fetchPatched || (setupFetchInterceptor(i2, O2, n2), _2.fetchPatched = true);
2882
+ const j2 = C2 ?? ct.recordCanvas;
2883
+ if (!_2.canvasObjLogInit && j2) {
2884
+ try {
2885
+ p();
2886
+ } catch {
2887
+ }
2888
+ _2.canvasObjLogInit = true;
2889
+ }
2890
+ await yieldToMain(), _2.domEventsInit || (initializeDomContentEvents(P2), _2.domEventsInit = true), await yieldToMain(), _2.consoleInit || (initializeConsolePlugin(lt, P2), _2.consoleInit = true), await yieldToMain(), _2.errorInit || (!(function initializeErrorInterceptor() {
2533
2891
  window.addEventListener("error", (e3) => {
2534
2892
  captureError(e3.error ?? e3.message, false, { filename: e3.filename, lineno: e3.lineno, colno: e3.colno });
2535
2893
  }), window.addEventListener("unhandledrejection", (e3) => {
2536
2894
  captureError(e3.reason, true);
2537
2895
  });
2538
- })(), A2.errorInit = true), await yieldToMain(), !A2.perfInit && v2 && (initializePerformancePlugin(F2), A2.perfInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
2539
- h && (sessionStorage.setItem("sailfishApiKey", e3), sessionStorage.setItem("sailfishBackendApi", t3));
2540
- })({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || A2.ws && 1 === A2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
2896
+ })(), _2.errorInit = true), await yieldToMain(), !_2.perfInit && S2 && (initializePerformancePlugin(P2), _2.perfInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
2897
+ A && (sessionStorage.setItem("sailfishApiKey", e3), sessionStorage.setItem("sailfishBackendApi", t3));
2898
+ })({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || _2.ws && 1 === _2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
2541
2899
  var _a2;
2542
- ((_a2 = e3.data) == null ? void 0 : _a2.isFunctionSpanTrackingEnabledFromApiKey) ?? false ? Ce && console.log("[Sailfish] Function span tracking state validated with backend: ACTIVE") : (clearStaleFuncSpanState(), Ce && console.log("[Sailfish] Cleared stale function span tracking state - backend validation shows tracking is not active"));
2900
+ ((_a2 = e3.data) == null ? void 0 : _a2.isFunctionSpanTrackingEnabledFromApiKey) ?? false ? Ze && console.log("[Sailfish] Function span tracking state validated with backend: ACTIVE") : (clearStaleFuncSpanState(), Ze && console.log("[Sailfish] Cleared stale function span tracking state - backend validation shows tracking is not active"));
2543
2901
  }).catch((e3) => {
2544
- Ce && console.warn("[Sailfish] Failed to validate function span tracking status with backend:", e3);
2545
- }), A2.sentDoNotPropagateOnce || (sendDomainsToNotPropagateHeaderTo(e2, [...o2, ...Ae], t2).catch((e3) => console.error("Failed to send domains to not propagate header to:", e3)), A2.sentDoNotPropagateOnce = true), (async function gatherAndCacheDeviceInfo() {
2902
+ Ze && console.warn("[Sailfish] Failed to validate function span tracking status with backend:", e3);
2903
+ }), _2.sentDoNotPropagateOnce || (sendDomainsToNotPropagateHeaderTo(e2, [...i2, ...nt], t2).catch((e3) => console.error("Failed to send domains to not propagate header to:", e3)), _2.sentDoNotPropagateOnce = true), (async function gatherAndCacheDeviceInfo() {
2546
2904
  sendMessage({ type: "deviceInfo", data: { deviceInfo: { language: navigator.language, userAgent: navigator.userAgent } } });
2547
- })(), c2 && fetchAndSendIp(F2);
2905
+ })(), c2 && fetchAndSendIp(P2);
2548
2906
  try {
2549
- const n2 = a2 ?? (function readGitSha() {
2907
+ const n3 = s2 ?? (function readGitSha() {
2550
2908
  var _a2;
2551
2909
  try {
2552
2910
  const e3 = globalThis;
@@ -2563,36 +2921,36 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
2563
2921
  if ("string" == typeof e3 && e3) return e3;
2564
2922
  } catch {
2565
2923
  }
2566
- })(), i3 = r2 ?? "", o3 = s2 ?? "", c3 = M2 ?? "JS/TS", d3 = (function getMapUuidFromWindow() {
2924
+ })(), i3 = r2 ?? "", c3 = o2 ?? "", l3 = R2 ?? "JS/TS", d3 = (function getMapUuidFromWindow() {
2567
2925
  try {
2568
2926
  const e3 = window;
2569
2927
  if (e3 && "string" == typeof e3.sfMapUuid && e3.sfMapUuid) return e3.sfMapUuid;
2570
2928
  } catch {
2571
2929
  }
2572
- })(), u3 = withAppUrlMetadata(l2), p3 = (function detectFramework(e3) {
2930
+ })(), u3 = withAppUrlMetadata(a2), p2 = (function detectFramework(e3) {
2573
2931
  let t3 = false;
2574
2932
  try {
2575
2933
  t3 = "undefined" != typeof document && "loading" !== document.readyState;
2576
2934
  } catch {
2577
2935
  }
2578
- const n3 = t3, i4 = [];
2579
- for (const e4 of de) {
2580
- const t4 = e4(n3);
2936
+ const n4 = t3, i4 = [];
2937
+ for (const e4 of Fe) {
2938
+ const t4 = e4(n4);
2581
2939
  t4 && !i4.includes(t4) && i4.push(t4);
2582
2940
  }
2583
2941
  return { framework: i4[0] ?? null, additionalFrameworks: i4.slice(1), serviceRole: "frontend" };
2584
- })(), f3 = { ...u3, serviceRole: p3.serviceRole, ...null !== p3.framework && { framework: p3.framework }, ...p3.additionalFrameworks.length > 0 && { additionalFrameworks: p3.additionalFrameworks } };
2942
+ })(), f2 = { ...u3, serviceRole: p2.serviceRole, ...null !== p2.framework && { framework: p2.framework }, ...p2.additionalFrameworks.length > 0 && { additionalFrameworks: p2.additionalFrameworks } };
2585
2943
  await yieldToMain();
2586
- const [m3, h2] = await Promise.all([fetchCaptureSettings(e2, t2), startRecordingSession(e2, F2, t2, i3, o3, d3, n2, c3, f3)]), y3 = { ...Be, ...(_a = m3.data) == null ? void 0 : _a.captureSettingsFromApiKey, enableFiberTracking: g2, ...void 0 !== w2 ? { maskTextClass: w2 } : {}, ...void 0 !== k2 ? { maskInputSelector: k2 } : {}, ...void 0 !== x2 ? { maskTextSelector: x2 } : {}, ...void 0 !== I2 ? { blockSelector: I2 } : {}, ...void 0 !== T2 ? { unmaskSelector: T2 } : {}, ...void 0 !== E2 ? { maskInputOptions: E2 } : {} };
2587
- if (A2.ws && 1 === A2.ws.readyState) return;
2588
- if ((_b = h2.data) == null ? void 0 : _b.startRecordingSession) {
2589
- const n3 = (l2 == null ? void 0 : l2.env) || (l2 == null ? void 0 : l2.environment);
2944
+ const [g3, h3] = await Promise.all([fetchCaptureSettings(e2, t2), startRecordingSession(e2, P2, t2, i3, c3, d3, n3, l3, f2, $2, F2, L2)]), y3 = { ...ct, ...(_a = g3.data) == null ? void 0 : _a.captureSettingsFromApiKey, enableFiberTracking: m2, ...void 0 !== w2 ? { maskTextClass: w2 } : {}, ...void 0 !== k2 ? { maskInputSelector: k2 } : {}, ...void 0 !== x2 ? { maskTextSelector: x2 } : {}, ...void 0 !== I2 ? { blockSelector: I2 } : {}, ...void 0 !== T2 ? { unmaskSelector: T2 } : {}, ...void 0 !== E2 ? { maskInputOptions: E2 } : {}, recordCanvas: C2 ?? ((_c = (_b = g3.data) == null ? void 0 : _b.captureSettingsFromApiKey) == null ? void 0 : _c.recordCanvasSf) ?? ct.recordCanvas, ...void 0 !== M2 ? { maskCanvasClass: M2 } : {} };
2945
+ if (_2.ws && 1 === _2.ws.readyState) return;
2946
+ if ((_d = h3.data) == null ? void 0 : _d.startRecordingSession) {
2947
+ const n4 = (a2 == null ? void 0 : a2.env) || (a2 == null ? void 0 : a2.environment);
2590
2948
  await yieldToMain();
2591
- const i4 = await initializeRecording(y3, t2, e2, F2, n3, $2, b2, S2 ?? false);
2592
- A2.ws = i4, A2.initialized = true, trackDomainChangesOnce(), A2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
2949
+ const i4 = await initializeRecording(y3, t2, e2, P2, n4, B2, v2, b2 ?? false);
2950
+ _2.ws = i4, _2.initialized = true, trackDomainChangesOnce(), _2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
2593
2951
  window.sfMapUuid && sendMessage({ type: "mapUuid", data: { mapUuid: window.sfMapUuid, serviceIdentifier: e3, serviceVersion: t3 } });
2594
- })(r2, s2), A2.sentMapUuidOnce = true);
2595
- } else console.error("Failed to start recording session:", h2.errors || h2);
2952
+ })(r2, o2), _2.sentMapUuidOnce = true);
2953
+ } else console.error("Failed to start recording session:", h3.errors || h3);
2596
2954
  } catch (e3) {
2597
2955
  console.error("Error starting recording:", e3);
2598
2956
  }
@@ -2605,14 +2963,14 @@ const initRecorder = async (e2) => {
2605
2963
  return clearPageVisitDataFromSessionStorage(), t2.initialized && t2.sessionId === n2 && t2.ws && 1 === t2.ws.readyState ? void 0 : (t2.initPromise || (t2.initPromise = (async () => {
2606
2964
  try {
2607
2965
  if (t2.hasLoggedInitOnce || (console.log("Initializing Sailfish Recorder (first run) …"), t2.hasLoggedInitOnce = true), await startRecording(e2), !t2.issueReportingInit) {
2608
- const n3 = e2.backendApi ?? "https://api-service.sailfishqa.com", [{ setupIssueReporting: i2 }, { fetchIntegrationData: o2, getIntegrationData: s2 }] = await Promise.all([Promise.resolve().then(() => Me), Promise.resolve().then(() => ke)]);
2609
- let r2 = null;
2966
+ const n3 = e2.backendApi ?? "https://api-service.sailfishqa.com", [{ setupIssueReporting: i2 }, { fetchIntegrationData: o2, getIntegrationData: r2 }] = await Promise.all([Promise.resolve().then(() => Ge), Promise.resolve().then(() => ze)]);
2967
+ let s2 = null;
2610
2968
  try {
2611
- await o2(e2.apiKey, n3), r2 = s2();
2969
+ await o2(e2.apiKey, n3), s2 = r2();
2612
2970
  } catch (e3) {
2613
2971
  console.warn("[Sailfish] Failed to fetch integration data for issue reporting:", e3);
2614
2972
  }
2615
- i2({ apiKey: e2.apiKey, backendApi: n3, getSessionId: () => getOrSetSessionId(), shortcuts: e2.reportIssueShortcuts, customBaseUrl: e2.customBaseUrl, integrationData: r2, showEngTicketFieldsInReportIssueModalDefault: e2.showEngTicketFieldsInReportIssueModalDefault }), t2.issueReportingInit = true;
2973
+ i2({ apiKey: e2.apiKey, backendApi: n3, getSessionId: () => getOrSetSessionId(), shortcuts: e2.reportIssueShortcuts, customBaseUrl: e2.customBaseUrl, integrationData: s2, showEngTicketFieldsInReportIssueModalDefault: e2.showEngTicketFieldsInReportIssueModalDefault }), t2.issueReportingInit = true;
2616
2974
  }
2617
2975
  } catch (e3) {
2618
2976
  console.warn("[Sailfish] Recorder initialization failed:", e3);
@@ -2621,33 +2979,74 @@ const initRecorder = async (e2) => {
2621
2979
  delete t2.initPromise;
2622
2980
  })), t2.initPromise);
2623
2981
  };
2982
+ function maskCanvasDraws(e2, t2, n2) {
2983
+ let i2 = null;
2984
+ try {
2985
+ i2 = "undefined" != typeof HTMLCanvasElement && e2 instanceof HTMLCanvasElement ? e2.getContext("2d") : e2;
2986
+ } catch {
2987
+ i2 = null;
2988
+ }
2989
+ const o2 = i2 ? l(i2) : void 0;
2990
+ if (!o2) {
2991
+ let n3 = null;
2992
+ try {
2993
+ if ("undefined" != typeof HTMLCanvasElement && e2 instanceof HTMLCanvasElement) n3 = e2;
2994
+ else {
2995
+ const e3 = i2 == null ? void 0 : i2.canvas;
2996
+ "undefined" != typeof HTMLCanvasElement && e3 instanceof HTMLCanvasElement && (n3 = e3);
2997
+ }
2998
+ } catch {
2999
+ n3 = null;
3000
+ }
3001
+ return d(n3), t2();
3002
+ }
3003
+ const r2 = o2.redactStyle, s2 = o2.textOnlyMask;
3004
+ n2 && (o2.redactStyle = u(r2, { text: n2.text, shape: n2.shape }), void 0 !== n2.keepShapes && (o2.textOnlyMask = n2.keepShapes)), o2.maskDepth++;
3005
+ try {
3006
+ return t2();
3007
+ } finally {
3008
+ o2.maskDepth--, o2.redactStyle = r2, o2.textOnlyMask = s2;
3009
+ }
3010
+ }
2624
3011
  export {
2625
- initializeDomContentEvents as A,
2626
- initializeFunctionSpanTrackingFromApi as B,
2627
- initializePerformancePlugin as C,
2628
- Be as D,
2629
- initializeRecording as E,
2630
- initializeWebSocket as F,
2631
- invalidateUrlCache as G,
2632
- isFunctionSpanTrackingEnabled as H,
2633
- maskInputFn as I,
2634
- matchUrlWithWildcard as J,
2635
- w as K,
2636
- onNavigationChange as L,
2637
- openReportIssueModal as M,
2638
- requestTimeSync as N,
2639
- restoreFuncSpanState as O,
2640
- sendDomainsToNotPropagateHeaderTo as P,
2641
- sendEvent as Q,
2642
- sendGraphQLRequest as R,
2643
- De as S,
2644
- sendMessage as T,
2645
- startRecording as U,
2646
- startRecordingSession as V,
2647
- toAbsoluteUrl as W,
2648
- trackingEvent as X,
2649
- withAppUrlMetadata as Y,
2650
- Oe as a,
3012
+ sendDomainsToNotPropagateHeaderTo as $,
3013
+ getUrlAndStoredUuids as A,
3014
+ identify as B,
3015
+ initRecorder as C,
3016
+ ct as D,
3017
+ initializeConsolePlugin as E,
3018
+ initializeDomContentEvents as F,
3019
+ initializeFunctionSpanTrackingFromApi as G,
3020
+ initializePerformancePlugin as H,
3021
+ initializeRecording as I,
3022
+ initializeWebSocket as J,
3023
+ invalidateUrlCache as K,
3024
+ isFunctionSpanTrackingEnabled as L,
3025
+ isTransportSaturated as M,
3026
+ maskCanvasDraws as N,
3027
+ maskInputFn as O,
3028
+ matchUrlWithWildcard as P,
3029
+ B as Q,
3030
+ onNavigationChange as R,
3031
+ rt as S,
3032
+ openReportIssueModal as T,
3033
+ registerChart as U,
3034
+ registerFabricCanvas as V,
3035
+ registerKonvaStage as W,
3036
+ registerPixiApp as X,
3037
+ registerThreeScene as Y,
3038
+ requestTimeSync as Z,
3039
+ restoreFuncSpanState as _,
3040
+ lt as a,
3041
+ sendEvent as a0,
3042
+ sendGraphQLRequest as a1,
3043
+ sendMessage as a2,
3044
+ startRecording as a3,
3045
+ startRecordingSession as a4,
3046
+ toAbsoluteUrl as a5,
3047
+ trackingEvent as a6,
3048
+ withAppUrlMetadata as a7,
3049
+ wsSendBinary as a8,
2651
3050
  addOrUpdateMetadata as b,
2652
3051
  buildBatches as c,
2653
3052
  clearStaleFuncSpanState as d,
@@ -2655,22 +3054,22 @@ export {
2655
3054
  createTriageAndIssueFromRecorder as f,
2656
3055
  createTriageFromRecorder as g,
2657
3056
  disableFunctionSpanTracking as h,
2658
- enableFunctionSpanTracking as i,
2659
- ensureHrefCache as j,
2660
- eventSize as k,
2661
- fetchAndSendIp as l,
2662
- fetchCaptureSettings as m,
2663
- fetchEngineeringTicketPlatformIntegrations as n,
2664
- fetchFunctionSpanTrackingEnabled as o,
2665
- flushBufferedEvents as p,
2666
- getCachedHref as q,
2667
- getCachedHrefNoQuery as r,
2668
- getFuncSpanHeader as s,
2669
- getIdentifiedUser as t,
2670
- getOrSetSessionId as u,
2671
- getUrlAndStoredUuids as v,
2672
- identify as w,
2673
- initRecorder as x,
3057
+ installAdapters as i,
3058
+ enableFunctionSpanTracking as j,
3059
+ ensureHrefCache as k,
3060
+ eventSize as l,
3061
+ fetchAndSendIp as m,
3062
+ fetchCaptureSettings as n,
3063
+ fetchEngineeringTicketPlatformIntegrations as o,
3064
+ fetchFunctionSpanTrackingEnabled as p,
3065
+ flushBufferedEvents as q,
3066
+ getBinaryDropCount as r,
3067
+ getBufferedAmount as s,
3068
+ getCachedHref as t,
3069
+ uninstallAdapters as u,
3070
+ getCachedHrefNoQuery as v,
3071
+ getFuncSpanHeader as w,
3072
+ getIdentifiedUser as x,
2674
3073
  yieldToMain as y,
2675
- initializeConsolePlugin as z
3074
+ getOrSetSessionId as z
2676
3075
  };