@sailfish-ai/recorder 1.12.7 → 1.12.8
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.
- package/dist/chunks/{canvasManager-B9uQ-PFS.js → canvasManager-3AzRUaNq.js} +1 -1
- package/dist/chunks/canvasManager-3AzRUaNq.js.br +0 -0
- package/dist/chunks/canvasManager-3AzRUaNq.js.gz +0 -0
- package/dist/chunks/{canvasManager-Ce7vazTt.js → canvasManager-CDEhVz_J.js} +1 -1
- package/dist/chunks/canvasManager-CDEhVz_J.js.br +0 -0
- package/dist/chunks/canvasManager-CDEhVz_J.js.gz +0 -0
- package/dist/chunks/{chunkSerializer-B-z7p0r-.js → chunkSerializer-B3loCr3q.js} +1 -1
- package/dist/chunks/chunkSerializer-B3loCr3q.js.br +0 -0
- package/dist/chunks/chunkSerializer-B3loCr3q.js.gz +0 -0
- package/dist/chunks/{chunkSerializer-C1knjCQ5.js → chunkSerializer-Cz0TPV-B.js} +1 -1
- package/dist/chunks/chunkSerializer-Cz0TPV-B.js.br +0 -0
- package/dist/chunks/chunkSerializer-Cz0TPV-B.js.gz +0 -0
- package/dist/chunks/hoverDetection-Bl-yKKI3.js +137 -0
- package/dist/chunks/hoverDetection-Bl-yKKI3.js.br +0 -0
- package/dist/chunks/hoverDetection-Bl-yKKI3.js.gz +0 -0
- package/dist/chunks/hoverDetection-CYsyBQjj.js +139 -0
- package/dist/chunks/hoverDetection-CYsyBQjj.js.br +0 -0
- package/dist/chunks/hoverDetection-CYsyBQjj.js.gz +0 -0
- package/dist/chunks/{index-BMHQ-0NY.js → index-BUAmLDnY.js} +109 -103
- package/dist/chunks/index-BUAmLDnY.js.br +0 -0
- package/dist/chunks/index-BUAmLDnY.js.gz +0 -0
- package/dist/chunks/{index-qgM1hFXO.js → index-CPZwt1ko.js} +59 -53
- package/dist/chunks/index-CPZwt1ko.js.br +0 -0
- package/dist/chunks/index-CPZwt1ko.js.gz +0 -0
- package/dist/hoverDetection.js +371 -0
- package/dist/hoverDetection.js.br +0 -0
- package/dist/hoverDetection.js.gz +0 -0
- package/dist/hoverDetection.test.js +187 -0
- package/dist/hoverDetection.test.js.br +0 -0
- package/dist/hoverDetection.test.js.gz +0 -0
- package/dist/index.js +8 -0
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/recorder.cjs +1 -1
- package/dist/recorder.cjs.br +0 -0
- package/dist/recorder.cjs.gz +0 -0
- package/dist/recorder.js +1 -1
- package/dist/recorder.js.br +0 -0
- package/dist/recorder.js.gz +0 -0
- package/dist/recorder.umd.cjs +572 -434
- package/dist/recorder.umd.cjs.br +0 -0
- package/dist/recorder.umd.cjs.gz +0 -0
- package/dist/recording.js +27 -0
- package/dist/recording.js.br +0 -0
- package/dist/recording.js.gz +0 -0
- package/dist/types/hoverDetection.d.ts +37 -0
- package/dist/types/hoverDetection.test.d.ts +1 -0
- package/dist/types/types.d.ts +6 -0
- package/package.json +1 -1
- package/dist/chunks/canvasManager-B9uQ-PFS.js.br +0 -0
- package/dist/chunks/canvasManager-B9uQ-PFS.js.gz +0 -0
- package/dist/chunks/canvasManager-Ce7vazTt.js.br +0 -0
- package/dist/chunks/canvasManager-Ce7vazTt.js.gz +0 -0
- package/dist/chunks/chunkSerializer-B-z7p0r-.js.br +0 -0
- package/dist/chunks/chunkSerializer-B-z7p0r-.js.gz +0 -0
- package/dist/chunks/chunkSerializer-C1knjCQ5.js.br +0 -0
- package/dist/chunks/chunkSerializer-C1knjCQ5.js.gz +0 -0
- package/dist/chunks/index-BMHQ-0NY.js.br +0 -0
- package/dist/chunks/index-BMHQ-0NY.js.gz +0 -0
- package/dist/chunks/index-qgM1hFXO.js.br +0 -0
- package/dist/chunks/index-qgM1hFXO.js.gz +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -259,7 +259,7 @@ async function deleteNotifyMessageById(e2) {
|
|
|
259
259
|
t2.delete(e2);
|
|
260
260
|
});
|
|
261
261
|
}
|
|
262
|
-
const y = "undefined" != typeof globalThis && void 0 !== globalThis.window,
|
|
262
|
+
const y = "undefined" != typeof globalThis && void 0 !== globalThis.window, v = "undefined" != typeof globalThis && void 0 !== globalThis.document, S = "undefined" != typeof globalThis && "localStorage" in globalThis, b = "undefined" != typeof globalThis && "sessionStorage" in globalThis, w = "sailfishSessionId", k = "__sailfish_refresh__";
|
|
263
263
|
let x = null;
|
|
264
264
|
function getOrSetSessionId() {
|
|
265
265
|
if (!y) return uuidv4();
|
|
@@ -400,21 +400,21 @@ function enrichEventWithTimeSync(e2) {
|
|
|
400
400
|
const t2 = buildEventTimeEnvelope(monotonicNow(), Date.now());
|
|
401
401
|
e2.client = t2.client, e2.serverEstimated = t2.serverEstimated;
|
|
402
402
|
}
|
|
403
|
-
let N = "", q = "",
|
|
404
|
-
const
|
|
403
|
+
let N = "", q = "", H = false;
|
|
404
|
+
const z = [];
|
|
405
405
|
function onNavigationChange(e2) {
|
|
406
|
-
|
|
406
|
+
z.push(e2);
|
|
407
407
|
}
|
|
408
408
|
function _updateHrefCache() {
|
|
409
409
|
N = window.location.href, q = window.location.origin + window.location.pathname;
|
|
410
|
-
for (const e2 of
|
|
410
|
+
for (const e2 of z) try {
|
|
411
411
|
e2();
|
|
412
412
|
} catch (e3) {
|
|
413
413
|
}
|
|
414
414
|
}
|
|
415
415
|
function ensureHrefCache() {
|
|
416
|
-
if (
|
|
417
|
-
|
|
416
|
+
if (H || "undefined" == typeof window) return;
|
|
417
|
+
H = true, _updateHrefCache(), window.addEventListener("popstate", _updateHrefCache), window.addEventListener("hashchange", _updateHrefCache);
|
|
418
418
|
const e2 = history.pushState;
|
|
419
419
|
history.pushState = function(...t3) {
|
|
420
420
|
e2.apply(this, t3), _updateHrefCache();
|
|
@@ -624,7 +624,7 @@ function initializeWebSocket(t2, n2, i2, o2, r2 = false) {
|
|
|
624
624
|
const t3 = new URL(e2);
|
|
625
625
|
return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
|
|
626
626
|
})(t2);
|
|
627
|
-
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.
|
|
627
|
+
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${s2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.8`;
|
|
628
628
|
if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), $ = null, A = null, F = 0, C = r2 ? (function tryCreateWsWorker() {
|
|
629
629
|
if ("undefined" == typeof Worker) return null;
|
|
630
630
|
try {
|
|
@@ -896,13 +896,13 @@ function maskInputFn(e2, t2) {
|
|
|
896
896
|
var _a;
|
|
897
897
|
return "hidden" === t2.type ? "" : t2.hasAttribute("data-cc") || ((_a = t2.getAttribute("autocomplete")) == null ? void 0 : _a.startsWith("cc-")) || n.looksLikeCreditCard(e2) ? n.redactCreditCard(e2) : t2.hasAttribute("data-ssn") || n.looksLikeSsn(e2) ? n.redactSsn(e2) : t2.hasAttribute("data-dob") ? n.redactDob(e2) : "*".repeat(e2.length);
|
|
898
898
|
}
|
|
899
|
-
let me = true, he = null, ye = null,
|
|
899
|
+
let me = true, he = null, ye = null, ve = null, Se = null;
|
|
900
900
|
function invalidateUrlCache() {
|
|
901
901
|
me = true;
|
|
902
902
|
}
|
|
903
903
|
const getUrlAndStoredUuids = () => (me && (function _refreshSessionStorageCache() {
|
|
904
|
-
he = sessionStorage.getItem("pageVisitUUID"), ye = sessionStorage.getItem("prevPageVisitUUID"),
|
|
905
|
-
})(), { page_visit_uuid: he, prev_page_visit_uuid: ye, href: getCachedHrefNoQuery(), tabVisibilityChanged:
|
|
904
|
+
he = sessionStorage.getItem("pageVisitUUID"), ye = sessionStorage.getItem("prevPageVisitUUID"), ve = sessionStorage.getItem("tabVisibilityChanged"), Se = sessionStorage.getItem("tabVisibilityState"), me = false;
|
|
905
|
+
})(), { page_visit_uuid: he, prev_page_visit_uuid: ye, href: getCachedHrefNoQuery(), tabVisibilityChanged: ve, tabVisibilityState: Se });
|
|
906
906
|
function initializeDomContentEvents(e2) {
|
|
907
907
|
document.addEventListener("readystatechange", () => {
|
|
908
908
|
const t2 = { type: 24, data: { source: 0, info: "" }, timestamp: Date.now(), sessionId: e2, ...getUrlAndStoredUuids() };
|
|
@@ -979,7 +979,7 @@ async function initializeRecording(e2, i2, o2, r2, s2, a2 = true, c2 = false, l2
|
|
|
979
979
|
ue = i4, await yieldToMain();
|
|
980
980
|
const o3 = e2.unmaskSelector || void 0, s3 = e2.blockSelector || void 0, a3 = e2.maskTextSelector || void 0, c3 = e2.maskInputSelector || void 0, d3 = { ...e2.maskInputOptions ?? {} }, u2 = c3 ? { ...de } : d3, p2 = n.buildMaskInputFn({ baseFn: maskInputFn, unmaskSelector: o3, maskInputSelector: c3, adminMaskInputOptions: d3 }), f2 = n.makeMaskTextFn(o3);
|
|
981
981
|
if (l2) {
|
|
982
|
-
const { chunkedSnapshot: n2 } = await Promise.resolve().then(() => require("./chunkSerializer-
|
|
982
|
+
const { chunkedSnapshot: n2 } = await Promise.resolve().then(() => require("./chunkSerializer-Cz0TPV-B.js")), r3 = i4.mirror;
|
|
983
983
|
let l3 = true;
|
|
984
984
|
const d4 = [];
|
|
985
985
|
i4({ emit(e3) {
|
|
@@ -994,8 +994,14 @@ async function initializeRecording(e2, i2, o2, r2, s2, a2 = true, c2 = false, l2
|
|
|
994
994
|
} else i4({ emit(e3) {
|
|
995
995
|
emitWithContext(e3);
|
|
996
996
|
}, ...e2, maskInputOptions: u2, maskInputFn: p2, maskTextFn: f2, maskInputSelector: c3, maskTextSelector: a3, blockSelector: s3, maskTextClass: e2.maskTextClass ?? pe, recordCanvas: false });
|
|
997
|
+
if (false !== e2.recordHover) try {
|
|
998
|
+
const { installHoverDetection: t2 } = await Promise.resolve().then(() => require("./hoverDetection-Bl-yKKI3.js")), num = (e3, t3) => "number" == typeof e3 ? e3 : t3, n2 = t2(i4, { dwellMs: num(e2.hoverDwellMs, 500), strictAffordance: false !== e2.hoverStrictAffordance, cooldownMs: num(e2.hoverCooldownMs, 3e3), maxPerSession: num(e2.hoverMaxPerSession, 300), maxPerSecond: num(e2.hoverMaxPerSecond, 1) });
|
|
999
|
+
window.addEventListener("pagehide", () => n2(), { once: true });
|
|
1000
|
+
} catch (e3) {
|
|
1001
|
+
console.warn("[Sailfish] Failed to enable hover detection:", e3);
|
|
1002
|
+
}
|
|
997
1003
|
if (e2.recordCanvas) try {
|
|
998
|
-
const { startCanvasRecording: n2, stopCanvasRecording: o4, flushAllCanvas: s4, isCanvasRecordingActive: a4 } = await Promise.resolve().then(() => require("./canvasManager-
|
|
1004
|
+
const { startCanvasRecording: n2, stopCanvasRecording: o4, flushAllCanvas: s4, isCanvasRecordingActive: a4 } = await Promise.resolve().then(() => require("./canvasManager-CDEhVz_J.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: i4.mirror, addSailfishEvent: (e3) => {
|
|
999
1005
|
ue == null ? void 0 : ue.addSailfishEvent(t.EventType.SailfishCustom, { ...e3, tag: "sf-canvas" });
|
|
1000
1006
|
}, sendBinary: wsSendBinary, getContextIds: () => ({ session_id: r2, page_visit_uuid: getUrlAndStoredUuids().page_visit_uuid }), isTransportSaturated };
|
|
1001
1007
|
n2(c4);
|
|
@@ -1063,7 +1069,7 @@ async function initializeRecording(e2, i2, o2, r2, s2, a2 = true, c2 = false, l2
|
|
|
1063
1069
|
}
|
|
1064
1070
|
return d2;
|
|
1065
1071
|
}
|
|
1066
|
-
const
|
|
1072
|
+
const be = [(e2) => (function checkNextJs() {
|
|
1067
1073
|
try {
|
|
1068
1074
|
if (void 0 !== globalThis.__NEXT_DATA__) return "nextjs";
|
|
1069
1075
|
} catch {
|
|
@@ -1128,7 +1134,7 @@ const ve = [(e2) => (function checkNextJs() {
|
|
|
1128
1134
|
const we = "sf-create-issue-preference", ke = "sf-create-eng-ticket-preference";
|
|
1129
1135
|
function getInitialState() {
|
|
1130
1136
|
const e2 = (function loadUserPreferences() {
|
|
1131
|
-
return { createIssue:
|
|
1137
|
+
return { createIssue: S && "true" === localStorage.getItem(we), createEngTicket: S && "true" === localStorage.getItem(ke) };
|
|
1132
1138
|
})();
|
|
1133
1139
|
return { mode: "lookback", description: "", occurredInThisTab: true, createIssue: e2.createIssue, issueName: "", issueDescription: "", createEngTicket: e2.createEngTicket, engTicketTeam: "", engTicketProject: "", engTicketPriority: 0, engTicketLabels: [], engTicketSprint: "", engTicketIssueType: "", engTicketCustomFields: {} };
|
|
1134
1140
|
}
|
|
@@ -2004,19 +2010,19 @@ function injectModalHTML(e2 = "lookback") {
|
|
|
2004
2010
|
const t5 = e6, n4 = t5.dataset.fieldId;
|
|
2005
2011
|
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));
|
|
2006
2012
|
});
|
|
2007
|
-
const y2 = document.getElementById("sf-eng-ticket-sprint"),
|
|
2008
|
-
if (
|
|
2013
|
+
const y2 = document.getElementById("sf-eng-ticket-sprint"), v2 = (y2 == null ? void 0 : y2.value) || xe.engTicketSprint;
|
|
2014
|
+
if (v2) {
|
|
2009
2015
|
const e6 = getSprintFieldId();
|
|
2010
|
-
h2[e6] = parseInt(
|
|
2016
|
+
h2[e6] = parseInt(v2, 10);
|
|
2011
2017
|
}
|
|
2012
|
-
const isFieldEmpty = (e6) => null == e6 || ("string" == typeof e6 ? "" === e6.trim() : !!Array.isArray(e6) && 0 === e6.length),
|
|
2013
|
-
for (const e6 of
|
|
2018
|
+
const isFieldEmpty = (e6) => null == e6 || ("string" == typeof e6 ? "" === e6.trim() : !!Array.isArray(e6) && 0 === e6.length), S2 = xe.createEngTicket ? (getFieldsForProject(p2, m2) || []).filter((e6) => e6 && e6.required) : [], b2 = [];
|
|
2019
|
+
for (const e6 of S2) {
|
|
2014
2020
|
const t5 = e6.fieldId || e6.key;
|
|
2015
2021
|
if ("summary" === t5 || "description" === t5 || "priority" === t5) continue;
|
|
2016
2022
|
let n4, i4;
|
|
2017
|
-
"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) &&
|
|
2023
|
+
"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) && b2.push(e6.name || t5);
|
|
2018
2024
|
}
|
|
2019
|
-
if (
|
|
2025
|
+
if (b2.length > 0) return void alert(`Please fill in the required field${b2.length > 1 ? "s" : ""}: ${b2.join(", ")}`);
|
|
2020
2026
|
closeModal(), (async function createTriageAndIssue(e6, t5, n4, i4, o4, r4, s4, a4, c4, l4, d4, u3, p3) {
|
|
2021
2027
|
var _a2, _b, _c;
|
|
2022
2028
|
try {
|
|
@@ -2371,13 +2377,13 @@ function onPointerDown(e2) {
|
|
|
2371
2377
|
} catch {
|
|
2372
2378
|
}
|
|
2373
2379
|
}
|
|
2374
|
-
const qe = readDebugFlag(),
|
|
2380
|
+
const qe = readDebugFlag(), He = /* @__PURE__ */ new Map();
|
|
2375
2381
|
function getCachedRegex(e2, t2) {
|
|
2376
2382
|
const n2 = `${e2}|${t2}`;
|
|
2377
|
-
let i2 =
|
|
2378
|
-
return i2 || (i2 = new RegExp(e2, t2),
|
|
2383
|
+
let i2 = He.get(n2);
|
|
2384
|
+
return i2 || (i2 = new RegExp(e2, t2), He.set(n2, i2)), i2;
|
|
2379
2385
|
}
|
|
2380
|
-
const
|
|
2386
|
+
const ze = 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())), We = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Ke = [400, 403], Ge = "CORS", Ve = "authorization", Qe = "Authorization", Xe = { 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 }, recordHover: true, hoverDwellMs: 500, hoverStrictAffordance: true, hoverCooldownMs: 3e3, hoverMaxPerSession: 300, hoverMaxPerSecond: 1 }, Je = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
|
|
2381
2387
|
function maskAuthorizationHeader(e2) {
|
|
2382
2388
|
const t2 = e2[Ve] ? Ve : e2[Qe] ? Qe : null;
|
|
2383
2389
|
if (!t2) return;
|
|
@@ -2411,14 +2417,14 @@ function trackDomainChangesOnce() {
|
|
|
2411
2417
|
function sendUserDeviceUuid() {
|
|
2412
2418
|
sendMessage({ type: "userDeviceUuid", userDeviceUuid: (function getOrSetUserDeviceUuid() {
|
|
2413
2419
|
let e2 = null;
|
|
2414
|
-
if (
|
|
2420
|
+
if (S) try {
|
|
2415
2421
|
e2 = localStorage.getItem("sailfishUserDeviceUuid");
|
|
2416
2422
|
} catch {
|
|
2417
2423
|
}
|
|
2418
2424
|
if (!e2) {
|
|
2419
2425
|
e2 = uuidv4();
|
|
2420
2426
|
try {
|
|
2421
|
-
|
|
2427
|
+
S && localStorage.setItem("sailfishUserDeviceUuid", e2);
|
|
2422
2428
|
} catch {
|
|
2423
2429
|
}
|
|
2424
2430
|
}
|
|
@@ -2436,7 +2442,7 @@ function handleVisibilityChange() {
|
|
|
2436
2442
|
sessionStorage.setItem("tabVisibilityChanged", t2.toString()), sessionStorage.setItem("tabVisibilityState", e2), invalidateUrlCache();
|
|
2437
2443
|
}
|
|
2438
2444
|
function clearPageVisitDataFromSessionStorage() {
|
|
2439
|
-
|
|
2445
|
+
b && (sessionStorage.removeItem("pageVisitUUID"), sessionStorage.removeItem("prevPageVisitUUID"), sessionStorage.removeItem("tabVisibilityChanged"), sessionStorage.removeItem("tabVisibilityState"), invalidateUrlCache());
|
|
2440
2446
|
}
|
|
2441
2447
|
let Ye = false;
|
|
2442
2448
|
function _ensureModuleSideEffects() {
|
|
@@ -2446,7 +2452,7 @@ function _ensureModuleSideEffects() {
|
|
|
2446
2452
|
}));
|
|
2447
2453
|
})(), y && (sendUserDeviceUuid(), (function sendTimeZone() {
|
|
2448
2454
|
sendMessage({ type: "timeZone", timezone: Intl.DateTimeFormat().resolvedOptions().timeZone });
|
|
2449
|
-
})()),
|
|
2455
|
+
})()), v && document.addEventListener("visibilitychange", handleVisibilityChange), y && (window.addEventListener("beforeunload", () => {
|
|
2450
2456
|
clearPageVisitDataFromSessionStorage();
|
|
2451
2457
|
}), window.addEventListener("online", () => {
|
|
2452
2458
|
requestTimeSync();
|
|
@@ -2494,7 +2500,7 @@ function createSkipHeadersPropagationChecker(e2 = [], t2 = []) {
|
|
|
2494
2500
|
return true;
|
|
2495
2501
|
}
|
|
2496
2502
|
const r2 = o2.pathname.toLowerCase(), s2 = r2.lastIndexOf(".");
|
|
2497
|
-
return !(-1 === s2 || !
|
|
2503
|
+
return !(-1 === s2 || !ze.has(r2.slice(s2))) || (!(!i2 || matchParsedUrlAgainstPatterns(o2, t2)) || !!matchParsedUrlAgainstPatterns(o2, n2));
|
|
2498
2504
|
};
|
|
2499
2505
|
}
|
|
2500
2506
|
function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: true, captureResponseBodyMaxMb: 10, captureStreamPrefixKb: 64, captureStreamTimeoutMs: 1e4 }, n2 = []) {
|
|
@@ -2532,13 +2538,13 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2532
2538
|
qe && console.warn("[Sailfish] Failed to capture request data:", e5);
|
|
2533
2539
|
}
|
|
2534
2540
|
delete h2[i];
|
|
2535
|
-
const
|
|
2536
|
-
|
|
2537
|
-
const
|
|
2538
|
-
h2[i] =
|
|
2541
|
+
const v2 = getFuncSpanHeader();
|
|
2542
|
+
v2 && delete h2[v2.name];
|
|
2543
|
+
const S2 = `${l3}/${p2.page_visit_uuid}/${u3}`;
|
|
2544
|
+
h2[i] = S2, v2 && (h2[v2.name] = v2.value);
|
|
2539
2545
|
maskAuthorizationHeader(h2);
|
|
2540
2546
|
try {
|
|
2541
|
-
let
|
|
2547
|
+
let v3 = await (async function injectHeader(e5, t3, n5, o5, r4, s4, a3) {
|
|
2542
2548
|
const c3 = getFuncSpanHeader();
|
|
2543
2549
|
if (n5 instanceof Request) {
|
|
2544
2550
|
const l4 = n5.clone(), d4 = new Headers(l4.headers);
|
|
@@ -2550,8 +2556,8 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2550
2556
|
const l4 = { ...o5 }, d4 = new Headers(o5.headers || {});
|
|
2551
2557
|
return d4.set(i, `${r4}/${s4}/${a3}`), c3 && (d4.set(c3.name, c3.value), qe && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof n5 ? n5 : n5.href, header: c3.name })), l4.headers = d4, await e5.call(t3, n5, l4);
|
|
2552
2558
|
}
|
|
2553
|
-
})(e4, n4, r3, s3, l3, p2.page_visit_uuid, u3),
|
|
2554
|
-
Ke.includes(
|
|
2559
|
+
})(e4, n4, r3, s3, l3, p2.page_visit_uuid, u3), S3 = false;
|
|
2560
|
+
Ke.includes(v3.status) && (qe && console.log("Perform retry as status was fail:", v3), delete h2[i], v3 = await (async function retryWithoutPropagateHeaders(e5, t3, n5, o5) {
|
|
2555
2561
|
try {
|
|
2556
2562
|
let o6 = n5[0], r4 = n5[1] || {};
|
|
2557
2563
|
if ("string" == typeof o6 || o6 instanceof URL) {
|
|
@@ -2569,19 +2575,19 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2569
2575
|
} catch (e6) {
|
|
2570
2576
|
throw qe && console.log(`Retry without ${i} for ${o5} also failed:`, e6), e6;
|
|
2571
2577
|
}
|
|
2572
|
-
})(e4, n4, o4, d3),
|
|
2573
|
-
const
|
|
2578
|
+
})(e4, n4, o4, d3), S3 = true);
|
|
2579
|
+
const b2 = Date.now(), w2 = (function captureClientTime() {
|
|
2574
2580
|
return { wallTimeMs: Date.now(), monotonicMs: monotonicNow(), timeOriginMs: timeOriginMs() };
|
|
2575
|
-
})(), k2 =
|
|
2581
|
+
})(), k2 = v3.status, x2 = v3.ok, T2 = x2 ? "" : `Request Error: ${v3.statusText}`;
|
|
2576
2582
|
let I2 = null;
|
|
2577
2583
|
try {
|
|
2578
|
-
I2 = {},
|
|
2584
|
+
I2 = {}, v3.headers.forEach((e5, t3) => {
|
|
2579
2585
|
I2[t3] = e5;
|
|
2580
2586
|
});
|
|
2581
2587
|
} catch (e5) {
|
|
2582
2588
|
qe && console.warn("[Sailfish] Failed to capture response headers:", e5), I2 = null;
|
|
2583
2589
|
}
|
|
2584
|
-
const E2 = { type: 27, timestamp:
|
|
2590
|
+
const E2 = { type: 27, timestamp: b2, sessionId: l3, client: w2, data: { request_id: u3, session_id: l3, timestamp_start: g2, timestamp_end: b2, response_code: k2, success: x2, error: T2, method: f2, url: toAbsoluteUrl(d3), retry_without_trace_id: S3, request_headers: h2, request_body: m2, response_headers: I2, response_body: null }, ...p2 }, sendEventWithBody = (e5) => {
|
|
2585
2591
|
E2.data.response_body = e5, y2 ? y2.text().then((e6) => {
|
|
2586
2592
|
E2.data.request_body = e6, sendEvent(E2);
|
|
2587
2593
|
}, () => {
|
|
@@ -2594,13 +2600,13 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2594
2600
|
if (!t3) return false;
|
|
2595
2601
|
const n5 = t3.toLowerCase();
|
|
2596
2602
|
return c2.some((e6) => n5.includes(e6));
|
|
2597
|
-
})(
|
|
2603
|
+
})(v3)) sendEventWithBody(null);
|
|
2598
2604
|
else if ((function isStreamingResponse(e5) {
|
|
2599
2605
|
const t3 = e5.headers.get("content-type");
|
|
2600
2606
|
if (!t3) return false;
|
|
2601
2607
|
const n5 = t3.toLowerCase();
|
|
2602
2608
|
return a2.some((e6) => n5.includes(e6));
|
|
2603
|
-
})(
|
|
2609
|
+
})(v3)) if (t2.captureStreamingResponseBody) try {
|
|
2604
2610
|
(async function readStreamPrefix(e5, t3, n5) {
|
|
2605
2611
|
const i2 = e5.body;
|
|
2606
2612
|
if (!i2) return null;
|
|
@@ -2638,23 +2644,23 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2638
2644
|
}
|
|
2639
2645
|
return null;
|
|
2640
2646
|
}
|
|
2641
|
-
})(
|
|
2647
|
+
})(v3.clone(), 1024 * t2.captureStreamPrefixKb, t2.captureStreamTimeoutMs).then((e5) => sendEventWithBody(e5), () => sendEventWithBody(null));
|
|
2642
2648
|
} catch {
|
|
2643
2649
|
sendEventWithBody(null);
|
|
2644
2650
|
}
|
|
2645
2651
|
else sendEventWithBody(null);
|
|
2646
2652
|
else {
|
|
2647
|
-
const e5 =
|
|
2653
|
+
const e5 = v3.headers.get("content-length"), t3 = e5 ? parseInt(e5, 10) : NaN;
|
|
2648
2654
|
if (!isNaN(t3) && t3 > C2) sendEventWithBody(null);
|
|
2649
2655
|
else try {
|
|
2650
|
-
|
|
2656
|
+
v3.clone().text().then((e6) => {
|
|
2651
2657
|
e6.length > C2 ? sendEventWithBody(null) : sendEventWithBody(e6);
|
|
2652
2658
|
}, () => sendEventWithBody(null));
|
|
2653
2659
|
} catch {
|
|
2654
2660
|
sendEventWithBody(null);
|
|
2655
2661
|
}
|
|
2656
2662
|
}
|
|
2657
|
-
return
|
|
2663
|
+
return v3;
|
|
2658
2664
|
} catch (t3) {
|
|
2659
2665
|
const i2 = Date.now(), r4 = false, s4 = ((_a = t3.response) == null ? void 0 : _a.status) || 500, a3 = t3.message || "Fetch request failed";
|
|
2660
2666
|
if (t3 instanceof TypeError && ((_b = t3 == null ? void 0 : t3.message) == null ? void 0 : _b.toLowerCase().includes(Ge.toLowerCase()))) return e4.apply(n4, o4);
|
|
@@ -2669,7 +2675,7 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2669
2675
|
})(e3, n3, o3, d2, u2, r2, l2);
|
|
2670
2676
|
} });
|
|
2671
2677
|
}
|
|
2672
|
-
async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: o2 = ["*"], domainsToNotPropagateHeaderTo: r2 = [], serviceVersion: s2, serviceIdentifier: a2, gitSha: c2, serviceAdditionalMetadata: l2, enableIpTracking: d2, captureStreamingResponseBody: u2 = true, captureResponseBodyMaxMb: p2 = 10, captureStreamPrefixKb: f2 = 64, captureStreamTimeoutMs: g2 = 1e4, enableFiberTracking: m2 = false, deferRecording: h2, deferRecordingStart: y2, chunkSnapshot:
|
|
2678
|
+
async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-service.sailfishqa.com", domainsToPropagateHeaderTo: o2 = ["*"], domainsToNotPropagateHeaderTo: r2 = [], serviceVersion: s2, serviceIdentifier: a2, gitSha: c2, serviceAdditionalMetadata: l2, enableIpTracking: d2, captureStreamingResponseBody: u2 = true, captureResponseBodyMaxMb: p2 = 10, captureStreamPrefixKb: f2 = 64, captureStreamTimeoutMs: g2 = 1e4, enableFiberTracking: m2 = false, deferRecording: h2, deferRecordingStart: y2, chunkSnapshot: v2, useWsWorker: S2 = true, capturePerformanceMetrics: w2 = true, maskTextClass: k2, maskInputSelector: x2, maskTextSelector: T2, blockSelector: I2, unmaskSelector: E2, maskInputOptions: C2, recordCanvas: M2, maskCanvasClass: $2, gitOrg: A2, gitRepo: F2, gitProvider: L2, library: R2, headlessRecording: D2 = false }) {
|
|
2673
2679
|
var _a, _b, _c, _d;
|
|
2674
2680
|
if (!D2 && (function isHeadlessOrLighthouse() {
|
|
2675
2681
|
try {
|
|
@@ -2766,7 +2772,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
|
|
|
2766
2772
|
captureError(e3.reason, true);
|
|
2767
2773
|
});
|
|
2768
2774
|
})(), _2.errorInit = true), await yieldToMain(), !_2.perfInit && w2 && (initializePerformancePlugin(B2), _2.perfInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
|
|
2769
|
-
|
|
2775
|
+
b && (sessionStorage.setItem("sailfishApiKey", e3), sessionStorage.setItem("sailfishBackendApi", t3));
|
|
2770
2776
|
})({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || _2.ws && 1 === _2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
|
|
2771
2777
|
var _a2;
|
|
2772
2778
|
((_a2 = e3.data) == null ? void 0 : _a2.isFunctionSpanTrackingEnabledFromApiKey) ?? false ? qe && console.log("[Sailfish] Function span tracking state validated with backend: ACTIVE") : (clearStaleFuncSpanState(), qe && console.log("[Sailfish] Cleared stale function span tracking state - backend validation shows tracking is not active"));
|
|
@@ -2806,7 +2812,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
|
|
|
2806
2812
|
} catch {
|
|
2807
2813
|
}
|
|
2808
2814
|
const n3 = t3, i3 = [];
|
|
2809
|
-
for (const e4 of
|
|
2815
|
+
for (const e4 of be) {
|
|
2810
2816
|
const t4 = e4(n3);
|
|
2811
2817
|
t4 && !i3.includes(t4) && i3.push(t4);
|
|
2812
2818
|
}
|
|
@@ -2818,7 +2824,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
|
|
|
2818
2824
|
if ((_d = h3.data) == null ? void 0 : _d.startRecordingSession) {
|
|
2819
2825
|
const n3 = (l2 == null ? void 0 : l2.env) || (l2 == null ? void 0 : l2.environment);
|
|
2820
2826
|
await yieldToMain();
|
|
2821
|
-
const i3 = await initializeRecording(y3, t2, e2, B2, n3, P2,
|
|
2827
|
+
const i3 = await initializeRecording(y3, t2, e2, B2, n3, P2, S2, v2 ?? false);
|
|
2822
2828
|
_2.ws = i3, _2.initialized = true, trackDomainChangesOnce(), _2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
|
|
2823
2829
|
window.sfMapUuid && sendMessage({ type: "mapUuid", data: { mapUuid: window.sfMapUuid, serviceIdentifier: e3, serviceVersion: t3 } });
|
|
2824
2830
|
})(a2, s2), _2.sentMapUuidOnce = true);
|
|
Binary file
|
|
Binary file
|