@sailfish-ai/recorder 1.12.4 → 1.12.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{chunkSerializer-FQtY90Av.js → chunkSerializer-Cd8y9tID.js} +1 -1
- package/dist/chunks/chunkSerializer-Cd8y9tID.js.br +0 -0
- package/dist/chunks/chunkSerializer-Cd8y9tID.js.gz +0 -0
- package/dist/chunks/{chunkSerializer-DDukZpgl.js → chunkSerializer-pkpgT-FH.js} +1 -1
- package/dist/chunks/chunkSerializer-pkpgT-FH.js.br +0 -0
- package/dist/chunks/chunkSerializer-pkpgT-FH.js.gz +0 -0
- package/dist/chunks/{index-C-qbsfKe.js → index-Bvd8oTpV.js} +63 -55
- package/dist/chunks/index-Bvd8oTpV.js.br +0 -0
- package/dist/chunks/index-Bvd8oTpV.js.gz +0 -0
- package/dist/chunks/{index-D6axlCRu.js → index-CXvHbLRT.js} +24 -16
- package/dist/chunks/index-CXvHbLRT.js.br +0 -0
- package/dist/chunks/index-CXvHbLRT.js.gz +0 -0
- package/dist/inAppReportIssueModal/index.js +48 -0
- package/dist/inAppReportIssueModal/index.js.br +0 -0
- package/dist/inAppReportIssueModal/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 +9 -1
- package/dist/recorder.umd.cjs.br +0 -0
- package/dist/recorder.umd.cjs.gz +0 -0
- package/package.json +1 -1
- package/dist/chunks/chunkSerializer-DDukZpgl.js.br +0 -0
- package/dist/chunks/chunkSerializer-DDukZpgl.js.gz +0 -0
- package/dist/chunks/chunkSerializer-FQtY90Av.js.br +0 -0
- package/dist/chunks/chunkSerializer-FQtY90Av.js.gz +0 -0
- package/dist/chunks/index-C-qbsfKe.js.br +0 -0
- package/dist/chunks/index-C-qbsfKe.js.gz +0 -0
- package/dist/chunks/index-D6axlCRu.js.br +0 -0
- package/dist/chunks/index-D6axlCRu.js.gz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const e = require("./index-
|
|
3
|
+
const e = require("./index-Bvd8oTpV.js");
|
|
4
4
|
exports.chunkedSnapshot = async function chunkedSnapshot(t, n, s = {}) {
|
|
5
5
|
const o = s.chunkSize ?? 500, r = s.maxChunkMs ?? 16, { blockClass: a, blockSelector: c, maskTextClass: i, maskTextSelector: u, maskInputSelector: d, maskInputOptions: l, maskInputFn: f, maskTextFn: N, unmaskSelector: h } = s;
|
|
6
6
|
function matchesSelectorSafe(e2, t2) {
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { y as e } from "./index-
|
|
1
|
+
import { y as e } from "./index-CXvHbLRT.js";
|
|
2
2
|
async function chunkedSnapshot(t, n, s = {}) {
|
|
3
3
|
const o = s.chunkSize ?? 500, r = s.maxChunkMs ?? 16, { blockClass: a, blockSelector: c, maskTextClass: i, maskTextSelector: u, maskInputSelector: d, maskInputOptions: l, maskInputFn: f, maskTextFn: N, unmaskSelector: m } = s;
|
|
4
4
|
function matchesSelectorSafe(e2, t2) {
|
|
Binary file
|
|
Binary file
|
|
@@ -202,24 +202,24 @@ async function deleteNotifyMessageById(e2) {
|
|
|
202
202
|
});
|
|
203
203
|
}
|
|
204
204
|
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__";
|
|
205
|
-
let
|
|
205
|
+
let v = null;
|
|
206
206
|
function getOrSetSessionId() {
|
|
207
207
|
if (!f) return uuidv4();
|
|
208
|
-
if (
|
|
208
|
+
if (v) return v;
|
|
209
209
|
const e2 = window.name.startsWith(S);
|
|
210
210
|
if (e2 && (window.name = window.name.substring(20)), e2) {
|
|
211
211
|
const e3 = window.sessionStorage.getItem(y);
|
|
212
|
-
if (e3) return
|
|
212
|
+
if (e3) return v = e3, e3;
|
|
213
213
|
}
|
|
214
214
|
const t2 = uuidv4();
|
|
215
|
-
|
|
215
|
+
v = t2;
|
|
216
216
|
try {
|
|
217
217
|
window.sessionStorage.setItem(y, t2);
|
|
218
218
|
} catch (e3) {
|
|
219
219
|
}
|
|
220
220
|
return t2;
|
|
221
221
|
}
|
|
222
|
-
let
|
|
222
|
+
let b = false;
|
|
223
223
|
function buildBatches(e2, t2, n2) {
|
|
224
224
|
const i2 = {};
|
|
225
225
|
for (const t3 of e2) {
|
|
@@ -358,10 +358,10 @@ function clearGlobalFuncSpanState() {
|
|
|
358
358
|
function clearStaleFuncSpanState() {
|
|
359
359
|
_ = false, B = null, j = false, clearGlobalFuncSpanState(), w && console.log("[Sailfish] Cleared stale function span tracking state (backend validation failed)");
|
|
360
360
|
}
|
|
361
|
-
let
|
|
361
|
+
let q = false;
|
|
362
362
|
function restoreFuncSpanState() {
|
|
363
|
-
if (
|
|
364
|
-
|
|
363
|
+
if (q) return;
|
|
364
|
+
q = true;
|
|
365
365
|
const e2 = (function loadGlobalFuncSpanState() {
|
|
366
366
|
try {
|
|
367
367
|
if ("undefined" == typeof localStorage) return null;
|
|
@@ -491,7 +491,7 @@ function initializeWebSocket(t2, n2, i2, o2, s2 = false) {
|
|
|
491
491
|
const t3 = new URL(e2);
|
|
492
492
|
return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
|
|
493
493
|
})(t2);
|
|
494
|
-
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${r2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.
|
|
494
|
+
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${r2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.5`;
|
|
495
495
|
if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), x = s2 ? (function tryCreateWsWorker() {
|
|
496
496
|
if ("undefined" == typeof Worker) return null;
|
|
497
497
|
try {
|
|
@@ -546,7 +546,7 @@ function getFuncSpanHeader() {
|
|
|
546
546
|
}
|
|
547
547
|
return { name: "X-Sf3-FunctionSpanCaptureOverride", value: "1-1-10-10-1-1.0-1-0-0" };
|
|
548
548
|
}
|
|
549
|
-
const
|
|
549
|
+
const N = 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" }));
|
|
550
550
|
let z = null, H = null;
|
|
551
551
|
function getIdentifiedUser() {
|
|
552
552
|
return z;
|
|
@@ -871,7 +871,7 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
|
|
|
871
871
|
return (t2, n5) => closestSafe(n5, e3) ? t2 : t2.replace(/\S/g, "*");
|
|
872
872
|
})(i3);
|
|
873
873
|
if (l2) {
|
|
874
|
-
const { chunkedSnapshot: a4 } = await Promise.resolve().then(() => require("./chunkSerializer-
|
|
874
|
+
const { chunkedSnapshot: a4 } = await Promise.resolve().then(() => require("./chunkSerializer-Cd8y9tID.js")), l3 = n4.mirror;
|
|
875
875
|
let p2 = true;
|
|
876
876
|
const f2 = [];
|
|
877
877
|
n4({ emit(e3) {
|
|
@@ -1012,13 +1012,13 @@ function setIsRecording(e2) {
|
|
|
1012
1012
|
he = e2;
|
|
1013
1013
|
}
|
|
1014
1014
|
const Se = ["jira", "linear", "zendesk"];
|
|
1015
|
-
let
|
|
1016
|
-
const
|
|
1015
|
+
let ve = null;
|
|
1016
|
+
const be = /* @__PURE__ */ new Map();
|
|
1017
1017
|
function getIntegrationData() {
|
|
1018
|
-
return
|
|
1018
|
+
return ve;
|
|
1019
1019
|
}
|
|
1020
1020
|
function hasValidIntegration() {
|
|
1021
|
-
return null !==
|
|
1021
|
+
return null !== ve && true === ve.installed;
|
|
1022
1022
|
}
|
|
1023
1023
|
function resolveIntegration(e2) {
|
|
1024
1024
|
var _a;
|
|
@@ -1032,14 +1032,14 @@ function resolveIntegration(e2) {
|
|
|
1032
1032
|
var _a2;
|
|
1033
1033
|
return "jira" === ((_a2 = e3.provider) == null ? void 0 : _a2.toLowerCase());
|
|
1034
1034
|
}) || n2[0];
|
|
1035
|
-
return (i2 == null ? void 0 : i2.primaryCloudId) &&
|
|
1035
|
+
return (i2 == null ? void 0 : i2.primaryCloudId) && be.set(i2.primaryCloudId, i2), i2;
|
|
1036
1036
|
}
|
|
1037
1037
|
async function refreshIntegrationData(e2, t2) {
|
|
1038
1038
|
try {
|
|
1039
1039
|
const n2 = resolveIntegration(await fetchEngineeringTicketPlatformIntegrations(e2, t2));
|
|
1040
|
-
return
|
|
1040
|
+
return ve = n2, n2;
|
|
1041
1041
|
} catch (e3) {
|
|
1042
|
-
return console.error("Error refreshing integration data:", e3),
|
|
1042
|
+
return console.error("Error refreshing integration data:", e3), ve;
|
|
1043
1043
|
}
|
|
1044
1044
|
}
|
|
1045
1045
|
function populateSelectOptions(e2, t2, n2) {
|
|
@@ -1084,8 +1084,8 @@ function populateSprintOptions(e2, t2, n2) {
|
|
|
1084
1084
|
}), n2 && (e2.value = n2);
|
|
1085
1085
|
}
|
|
1086
1086
|
function getSprintFieldId() {
|
|
1087
|
-
if (!(
|
|
1088
|
-
const e2 = Array.isArray(
|
|
1087
|
+
if (!(ve == null ? void 0 : ve.fieldConfigurations)) return "customfield_10020";
|
|
1088
|
+
const e2 = Array.isArray(ve.fieldConfigurations) ? ve.fieldConfigurations : [];
|
|
1089
1089
|
for (const t2 of e2) {
|
|
1090
1090
|
const e3 = (t2.fields || []).find((e4) => {
|
|
1091
1091
|
var _a;
|
|
@@ -1097,12 +1097,12 @@ function getSprintFieldId() {
|
|
|
1097
1097
|
}
|
|
1098
1098
|
function updateIssueTypeOptions(e2, t2) {
|
|
1099
1099
|
var _a;
|
|
1100
|
-
if (!(
|
|
1100
|
+
if (!(ve == null ? void 0 : ve.projects) || !t2) {
|
|
1101
1101
|
e2.innerHTML = "";
|
|
1102
1102
|
const t3 = document.createElement("option");
|
|
1103
1103
|
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");
|
|
1104
1104
|
}
|
|
1105
|
-
const n2 =
|
|
1105
|
+
const n2 = ve.projects.find((e3) => e3.id === t2);
|
|
1106
1106
|
if (!n2 || !n2.issue_types) {
|
|
1107
1107
|
e2.innerHTML = "";
|
|
1108
1108
|
const t3 = document.createElement("option");
|
|
@@ -1126,12 +1126,12 @@ function updateIssueTypeOptions(e2, t2) {
|
|
|
1126
1126
|
}
|
|
1127
1127
|
}
|
|
1128
1128
|
function getFieldsForProject(e2, t2) {
|
|
1129
|
-
if (!(
|
|
1130
|
-
const n2 = Array.isArray(
|
|
1129
|
+
if (!(ve == null ? void 0 : ve.fieldConfigurations) || !e2) return [];
|
|
1130
|
+
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];
|
|
1131
1131
|
return n2 && n2.fields ? n2.fields : [];
|
|
1132
1132
|
}
|
|
1133
1133
|
function getUsers() {
|
|
1134
|
-
return (
|
|
1134
|
+
return (ve == null ? void 0 : ve.users) ? ve.users : [];
|
|
1135
1135
|
}
|
|
1136
1136
|
function getDefaultReporterAccountId() {
|
|
1137
1137
|
const e2 = getUsers(), t2 = getIdentifiedUser();
|
|
@@ -1148,8 +1148,8 @@ function getDefaultReporterAccountId() {
|
|
|
1148
1148
|
return s2 && (s2.id || s2.accountId) || null;
|
|
1149
1149
|
}
|
|
1150
1150
|
function lastReporterStorageKey() {
|
|
1151
|
-
if (!
|
|
1152
|
-
const e2 =
|
|
1151
|
+
if (!ve) return null;
|
|
1152
|
+
const e2 = ve.primaryCloudId || ve.provider || "";
|
|
1153
1153
|
return e2 ? `sf-veritas:lastReporter:${e2}` : null;
|
|
1154
1154
|
}
|
|
1155
1155
|
function getSavedLastReporterAccountId() {
|
|
@@ -1176,42 +1176,42 @@ function getValidSavedReporterAccountId() {
|
|
|
1176
1176
|
return getUsers().some((t2) => (t2.accountId || t2.id) === e2 && false !== t2.active) ? e2 : null;
|
|
1177
1177
|
}
|
|
1178
1178
|
function getProjectsForTeam(e2) {
|
|
1179
|
-
if (!
|
|
1180
|
-
const t2 =
|
|
1179
|
+
if (!ve) return [];
|
|
1180
|
+
const t2 = ve.teams && Array.isArray(ve.teams) && ve.teams.length > 0;
|
|
1181
1181
|
if (t2 && e2) {
|
|
1182
|
-
const t3 =
|
|
1182
|
+
const t3 = ve.teams.find((t4) => t4.id === e2);
|
|
1183
1183
|
return (t3 == null ? void 0 : t3.projects) || [];
|
|
1184
1184
|
}
|
|
1185
|
-
return !t2 &&
|
|
1185
|
+
return !t2 && ve.projects ? ve.projects : [];
|
|
1186
1186
|
}
|
|
1187
1187
|
function updateFormWithIntegrationData(e2) {
|
|
1188
1188
|
var _a;
|
|
1189
|
-
if (!
|
|
1190
|
-
const t2 =
|
|
1191
|
-
n2 && t2 && (populateSelectOptions(n2,
|
|
1189
|
+
if (!ve) return e2;
|
|
1190
|
+
const t2 = ve.teams && Array.isArray(ve.teams) && ve.teams.length > 0, n2 = document.getElementById("sf-eng-ticket-team");
|
|
1191
|
+
n2 && t2 && (populateSelectOptions(n2, ve.teams, ve.defaultTeam), e2.engTicketTeam ? n2.value = e2.engTicketTeam : e2.engTicketTeam = n2.value);
|
|
1192
1192
|
const i2 = document.getElementById("sf-eng-ticket-project");
|
|
1193
1193
|
if (i2) {
|
|
1194
|
-
populateSelectOptions(i2, t2 ? getProjectsForTeam(e2.engTicketTeam) :
|
|
1194
|
+
populateSelectOptions(i2, t2 ? getProjectsForTeam(e2.engTicketTeam) : ve.projects || [], ve.defaultProject), e2.engTicketProject ? i2.value = e2.engTicketProject : e2.engTicketProject = i2.value;
|
|
1195
1195
|
}
|
|
1196
1196
|
const o2 = document.getElementById("sf-eng-ticket-priority");
|
|
1197
|
-
o2 && (populatePriorityOptions(o2,
|
|
1198
|
-
const s2 = document.getElementById("sf-eng-ticket-sprint"), r2 = "jira" === ((_a =
|
|
1199
|
-
if (s2 && r2 &&
|
|
1197
|
+
o2 && (populatePriorityOptions(o2, ve.provider || "", ve.defaultPriority), e2.engTicketPriority ? o2.value = String(e2.engTicketPriority) : e2.engTicketPriority = Number(o2.value));
|
|
1198
|
+
const s2 = document.getElementById("sf-eng-ticket-sprint"), r2 = "jira" === ((_a = ve.provider) == null ? void 0 : _a.toLowerCase());
|
|
1199
|
+
if (s2 && r2 && ve.sprints) {
|
|
1200
1200
|
if (!e2.engTicketSprint && !ye) {
|
|
1201
|
-
const t3 = pickDefaultActiveSprint(
|
|
1201
|
+
const t3 = pickDefaultActiveSprint(ve.sprints, e2.engTicketProject, ve.projects || []);
|
|
1202
1202
|
(t3 == null ? void 0 : t3.id) && (e2.engTicketSprint = String(t3.id), setSprintDefaulted(true));
|
|
1203
1203
|
}
|
|
1204
|
-
populateSprintOptions(s2,
|
|
1204
|
+
populateSprintOptions(s2, ve.sprints, e2.engTicketSprint || void 0), e2.engTicketSprint && (s2.style.color = "");
|
|
1205
1205
|
}
|
|
1206
1206
|
const a2 = document.getElementById("sf-eng-ticket-type");
|
|
1207
1207
|
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;
|
|
1208
1208
|
}
|
|
1209
1209
|
const we = Object.freeze(Object.defineProperty({ __proto__: null, fetchIntegrationData: async function fetchIntegrationData(e2, t2) {
|
|
1210
|
-
if (!
|
|
1210
|
+
if (!ve) try {
|
|
1211
1211
|
const n2 = await fetchEngineeringTicketPlatformIntegrations(e2, t2);
|
|
1212
|
-
|
|
1212
|
+
ve = resolveIntegration(n2);
|
|
1213
1213
|
} catch (e3) {
|
|
1214
|
-
console.error("Error fetching integration data:", e3),
|
|
1214
|
+
console.error("Error fetching integration data:", e3), ve = null;
|
|
1215
1215
|
}
|
|
1216
1216
|
}, getDefaultReporterAccountId, getFieldsForProject, getIntegrationData, getProjectsForTeam, getSavedLastReporterAccountId, getSprintFieldId, getUsers, getValidSavedReporterAccountId, hasValidIntegration, pickDefaultActiveSprint, populatePriorityOptions, populateSelectOptions, populateSprintOptions, refreshIntegrationData, saveLastReporterAccountId, updateFormWithIntegrationData, updateIssueTypeOptions }, Symbol.toStringTag, { value: "Module" }));
|
|
1217
1217
|
function renderCustomMultiSelect(e2, t2, n2, i2, o2 = false) {
|
|
@@ -1820,7 +1820,7 @@ function injectModalHTML(e2 = "lookback") {
|
|
|
1820
1820
|
fe = e6;
|
|
1821
1821
|
})(Date.now()), setIsRecording(true);
|
|
1822
1822
|
try {
|
|
1823
|
-
const { enableFunctionSpanTracking: e6 } = await Promise.resolve().then(() =>
|
|
1823
|
+
const { enableFunctionSpanTracking: e6 } = await Promise.resolve().then(() => N);
|
|
1824
1824
|
e6();
|
|
1825
1825
|
} catch (e6) {
|
|
1826
1826
|
console.error("[Report Issue] Failed to enable function span tracking:", e6);
|
|
@@ -1878,6 +1878,14 @@ function injectModalHTML(e2 = "lookback") {
|
|
|
1878
1878
|
const e6 = getSprintFieldId();
|
|
1879
1879
|
h2[e6] = parseInt(S2, 10);
|
|
1880
1880
|
}
|
|
1881
|
+
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), b2 = [];
|
|
1882
|
+
for (const e6 of v2) {
|
|
1883
|
+
const t5 = e6.fieldId || e6.key;
|
|
1884
|
+
if ("summary" === t5 || "description" === t5 || "priority" === t5) continue;
|
|
1885
|
+
let n4, i4;
|
|
1886
|
+
"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);
|
|
1887
|
+
}
|
|
1888
|
+
if (b2.length > 0) return void alert(`Please fill in the required field${b2.length > 1 ? "s" : ""}: ${b2.join(", ")}`);
|
|
1881
1889
|
closeModal(), (async function createTriageAndIssue(e6, t5, n4, i4, o4, s4, r4, a4, l4, c4, d4, u3, p3) {
|
|
1882
1890
|
var _a2, _b, _c;
|
|
1883
1891
|
try {
|
|
@@ -2015,7 +2023,7 @@ async function stopRecording() {
|
|
|
2015
2023
|
ge = e2;
|
|
2016
2024
|
})(Date.now()), setIsRecording(false), me && (clearInterval(me), setTimerInterval(null)), (_a = document.getElementById("sf-recording-indicator")) == null ? void 0 : _a.remove();
|
|
2017
2025
|
try {
|
|
2018
|
-
const { disableFunctionSpanTracking: e2 } = await Promise.resolve().then(() =>
|
|
2026
|
+
const { disableFunctionSpanTracking: e2 } = await Promise.resolve().then(() => N);
|
|
2019
2027
|
e2();
|
|
2020
2028
|
} catch (e2) {
|
|
2021
2029
|
console.error("[Report Issue] Failed to disable function span tracking:", e2);
|
|
@@ -2218,7 +2226,7 @@ function clearPageVisitDataFromSessionStorage() {
|
|
|
2218
2226
|
let Oe = false;
|
|
2219
2227
|
function _ensureModuleSideEffects() {
|
|
2220
2228
|
Oe || (Oe = true, restoreFuncSpanState(), (function ensureSessionListeners() {
|
|
2221
|
-
|
|
2229
|
+
b || (b = true, f && window.addEventListener("beforeunload", () => {
|
|
2222
2230
|
window.name = S + window.name;
|
|
2223
2231
|
}));
|
|
2224
2232
|
})(), f && (sendUserDeviceUuid(), (function sendTimeZone() {
|
|
@@ -2311,8 +2319,8 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2311
2319
|
delete h2[n];
|
|
2312
2320
|
const S2 = getFuncSpanHeader();
|
|
2313
2321
|
S2 && delete h2[S2.name];
|
|
2314
|
-
const
|
|
2315
|
-
h2[n] =
|
|
2322
|
+
const v2 = `${c3}/${p2.page_visit_uuid}/${u3}`;
|
|
2323
|
+
h2[n] = v2, S2 && (h2[S2.name] = S2.value);
|
|
2316
2324
|
maskAuthorizationHeader(h2);
|
|
2317
2325
|
try {
|
|
2318
2326
|
let S3 = await (async function injectHeader(e5, t3, i5, o5, s4, r4, a3) {
|
|
@@ -2327,7 +2335,7 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2327
2335
|
const c4 = { ...o5 }, d4 = new Headers(o5.headers || {});
|
|
2328
2336
|
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);
|
|
2329
2337
|
}
|
|
2330
|
-
})(e4, i4, s3, r3, c3, p2.page_visit_uuid, u3),
|
|
2338
|
+
})(e4, i4, s3, r3, c3, p2.page_visit_uuid, u3), v3 = false;
|
|
2331
2339
|
Ae.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) {
|
|
2332
2340
|
try {
|
|
2333
2341
|
let o6 = i5[0], s4 = i5[1] || {};
|
|
@@ -2346,8 +2354,8 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2346
2354
|
} catch (e6) {
|
|
2347
2355
|
throw Ce && console.log(`Retry without ${n} for ${o5} also failed:`, e6), e6;
|
|
2348
2356
|
}
|
|
2349
|
-
})(e4, i4, o4, d3),
|
|
2350
|
-
const
|
|
2357
|
+
})(e4, i4, o4, d3), v3 = true);
|
|
2358
|
+
const b2 = Date.now(), w2 = (function captureClientTime() {
|
|
2351
2359
|
return { wallTimeMs: Date.now(), monotonicMs: monotonicNow(), timeOriginMs: timeOriginMs() };
|
|
2352
2360
|
})(), k2 = S3.status, x2 = S3.ok, I2 = x2 ? "" : `Request Error: ${S3.statusText}`;
|
|
2353
2361
|
let T2 = null;
|
|
@@ -2358,7 +2366,7 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2358
2366
|
} catch (e5) {
|
|
2359
2367
|
Ce && console.warn("[Sailfish] Failed to capture response headers:", e5), T2 = null;
|
|
2360
2368
|
}
|
|
2361
|
-
const E2 = { type: 27, timestamp:
|
|
2369
|
+
const E2 = { type: 27, timestamp: b2, sessionId: c3, client: w2, data: { request_id: u3, session_id: c3, timestamp_start: g2, timestamp_end: b2, response_code: k2, success: x2, error: I2, method: f2, url: toAbsoluteUrl(d3), retry_without_trace_id: v3, request_headers: h2, request_body: m2, response_headers: T2, response_body: null }, ...p2 }, sendEventWithBody = (e5) => {
|
|
2362
2370
|
E2.data.response_body = e5, y2 ? y2.text().then((e6) => {
|
|
2363
2371
|
E2.data.request_body = e6, sendEvent(E2);
|
|
2364
2372
|
}, () => {
|
|
@@ -2446,7 +2454,7 @@ function setupFetchInterceptor(e2 = [], t2 = { captureStreamingResponseBody: tru
|
|
|
2446
2454
|
})(e3, i3, o3, d2, u2, s2, c2);
|
|
2447
2455
|
} });
|
|
2448
2456
|
}
|
|
2449
|
-
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:
|
|
2457
|
+
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: v2 = true, capturePerformanceMetrics: b2 = true, maskTextClass: w2, maskInputSelector: k2, maskTextSelector: x2, blockSelector: I2, unmaskSelector: T2, maskInputOptions: E2, library: C2, headlessRecording: M2 = false }) {
|
|
2450
2458
|
var _a, _b;
|
|
2451
2459
|
if (!M2 && (function isHeadlessOrLighthouse() {
|
|
2452
2460
|
try {
|
|
@@ -2533,7 +2541,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
|
|
|
2533
2541
|
}), window.addEventListener("unhandledrejection", (e3) => {
|
|
2534
2542
|
captureError(e3.reason, true);
|
|
2535
2543
|
});
|
|
2536
|
-
})(), A2.errorInit = true), await yieldToMain(), !A2.perfInit &&
|
|
2544
|
+
})(), A2.errorInit = true), await yieldToMain(), !A2.perfInit && b2 && (initializePerformancePlugin(F2), A2.perfInit = true), await yieldToMain(), _ensureModuleSideEffects(), (function storeCredentialsAndConnection({ apiKey: e3, backendApi: t3 }) {
|
|
2537
2545
|
h && (sessionStorage.setItem("sailfishApiKey", e3), sessionStorage.setItem("sailfishBackendApi", t3));
|
|
2538
2546
|
})({ apiKey: e2, backendApi: t2 }), !isFunctionSpanTrackingEnabled() || A2.ws && 1 === A2.ws.readyState || fetchFunctionSpanTrackingEnabled(e2, t2).then((e3) => {
|
|
2539
2547
|
var _a2;
|
|
@@ -2586,7 +2594,7 @@ async function startRecording({ apiKey: e2, backendApi: t2 = "https://api-servic
|
|
|
2586
2594
|
if ((_b = h2.data) == null ? void 0 : _b.startRecordingSession) {
|
|
2587
2595
|
const n3 = (l2 == null ? void 0 : l2.env) || (l2 == null ? void 0 : l2.environment);
|
|
2588
2596
|
await yieldToMain();
|
|
2589
|
-
const i4 = await initializeRecording(y3, t2, e2, F2, n3, $2,
|
|
2597
|
+
const i4 = await initializeRecording(y3, t2, e2, F2, n3, $2, v2, S2 ?? false);
|
|
2590
2598
|
A2.ws = i4, A2.initialized = true, trackDomainChangesOnce(), A2.sentMapUuidOnce || (!(function sendMapUuidIfAvailable(e3 = "", t3 = "") {
|
|
2591
2599
|
window.sfMapUuid && sendMessage({ type: "mapUuid", data: { mapUuid: window.sfMapUuid, serviceIdentifier: e3, serviceVersion: t3 } });
|
|
2592
2600
|
})(r2, s2), A2.sentMapUuidOnce = true);
|
|
Binary file
|
|
Binary file
|
|
@@ -277,21 +277,21 @@ function getCachedHref() {
|
|
|
277
277
|
function getCachedHrefNoQuery() {
|
|
278
278
|
return L || ("undefined" != typeof window ? window.location.origin + window.location.pathname : "");
|
|
279
279
|
}
|
|
280
|
-
const
|
|
281
|
-
let
|
|
280
|
+
const P = [];
|
|
281
|
+
let _ = null;
|
|
282
282
|
function queueEventForIDB(e2) {
|
|
283
|
-
|
|
283
|
+
P.push(e2), P.length >= 50 ? _flushIDBQueue() : _ || (_ = setTimeout(_flushIDBQueue, 100));
|
|
284
284
|
}
|
|
285
285
|
function _flushIDBQueue() {
|
|
286
|
-
if (
|
|
286
|
+
if (_ && (clearTimeout(_), _ = null), 0 === P.length) return;
|
|
287
287
|
!(async function saveEventsToIDB(e2) {
|
|
288
288
|
await withStore$1("readwrite", async (t2) => {
|
|
289
289
|
for (const n2 of e2) t2.add({ timestamp: Date.now(), data: n2 });
|
|
290
290
|
});
|
|
291
|
-
})(
|
|
291
|
+
})(P.splice(0));
|
|
292
292
|
}
|
|
293
293
|
let B = false, O = null, j = null, U = false;
|
|
294
|
-
const
|
|
294
|
+
const q = "sailfish_funcspan_global_state";
|
|
295
295
|
function wsSendPayload(e2) {
|
|
296
296
|
if (!isWebSocketOpen(T)) return false;
|
|
297
297
|
if (I) try {
|
|
@@ -322,7 +322,7 @@ function saveGlobalFuncSpanState(e2, t2) {
|
|
|
322
322
|
try {
|
|
323
323
|
if ("undefined" == typeof localStorage) return;
|
|
324
324
|
const n2 = { enabled: e2, expirationTimestampMs: t2, savedAt: Date.now() };
|
|
325
|
-
localStorage.setItem(
|
|
325
|
+
localStorage.setItem(q, JSON.stringify(n2)), k && console.log("[Sailfish] Saved funcSpan state to localStorage:", n2);
|
|
326
326
|
} catch (e3) {
|
|
327
327
|
k && console.warn("[Sailfish] Failed to save funcSpan state to localStorage:", e3);
|
|
328
328
|
}
|
|
@@ -330,7 +330,7 @@ function saveGlobalFuncSpanState(e2, t2) {
|
|
|
330
330
|
function clearGlobalFuncSpanState() {
|
|
331
331
|
try {
|
|
332
332
|
if ("undefined" == typeof localStorage) return;
|
|
333
|
-
localStorage.removeItem(
|
|
333
|
+
localStorage.removeItem(q), k && console.log("[Sailfish] Cleared funcSpan state from localStorage");
|
|
334
334
|
} catch (e2) {
|
|
335
335
|
k && console.warn("[Sailfish] Failed to clear funcSpan state from localStorage:", e2);
|
|
336
336
|
}
|
|
@@ -338,14 +338,14 @@ function clearGlobalFuncSpanState() {
|
|
|
338
338
|
function clearStaleFuncSpanState() {
|
|
339
339
|
B = false, j = null, U = false, clearGlobalFuncSpanState(), k && console.log("[Sailfish] Cleared stale function span tracking state (backend validation failed)");
|
|
340
340
|
}
|
|
341
|
-
let
|
|
341
|
+
let N = false;
|
|
342
342
|
function restoreFuncSpanState() {
|
|
343
|
-
if (
|
|
344
|
-
|
|
343
|
+
if (N) return;
|
|
344
|
+
N = true;
|
|
345
345
|
const e2 = (function loadGlobalFuncSpanState() {
|
|
346
346
|
try {
|
|
347
347
|
if ("undefined" == typeof localStorage) return null;
|
|
348
|
-
const e3 = localStorage.getItem(
|
|
348
|
+
const e3 = localStorage.getItem(q);
|
|
349
349
|
if (!e3) return null;
|
|
350
350
|
const t2 = JSON.parse(e3);
|
|
351
351
|
return k && console.log("[Sailfish] Loaded funcSpan state from localStorage:", t2), t2;
|
|
@@ -471,7 +471,7 @@ function initializeWebSocket(t2, n2, i2, o2, s2 = false) {
|
|
|
471
471
|
const t3 = new URL(e2);
|
|
472
472
|
return `${t3.hostname}${t3.port ? `:${t3.port}` : ""}`;
|
|
473
473
|
})(t2);
|
|
474
|
-
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${r2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.
|
|
474
|
+
let a2 = `${"https:" === new URL(t2).protocol ? "wss" : "ws"}://${r2}/ws/notify/?apiKey=${n2}&sessionId=${i2}&sender=JS%2FTS&version=1.12.5`;
|
|
475
475
|
if (o2 && (a2 += `&envValue=${encodeURIComponent(o2)}`), I = s2 ? (function tryCreateWsWorker() {
|
|
476
476
|
if ("undefined" == typeof Worker) return null;
|
|
477
477
|
try {
|
|
@@ -862,7 +862,7 @@ async function initializeRecording(e2, n2, i2, o2, s2, r2 = true, a2 = false, l2
|
|
|
862
862
|
return (t2, n5) => closestSafe(n5, e3) ? t2 : t2.replace(/\S/g, "*");
|
|
863
863
|
})(i3);
|
|
864
864
|
if (l2) {
|
|
865
|
-
const { chunkedSnapshot: a4 } = await import("./chunkSerializer-
|
|
865
|
+
const { chunkedSnapshot: a4 } = await import("./chunkSerializer-pkpgT-FH.js"), l3 = n4.mirror;
|
|
866
866
|
let p2 = true;
|
|
867
867
|
const f2 = [];
|
|
868
868
|
n4({ emit(e3) {
|
|
@@ -1869,6 +1869,14 @@ function injectModalHTML(e2 = "lookback") {
|
|
|
1869
1869
|
const e6 = getSprintFieldId();
|
|
1870
1870
|
h2[e6] = parseInt(S2, 10);
|
|
1871
1871
|
}
|
|
1872
|
+
const isFieldEmpty = (e6) => null == e6 || ("string" == typeof e6 ? "" === e6.trim() : !!Array.isArray(e6) && 0 === e6.length), b2 = (getFieldsForProject(p2, m2) || []).filter((e6) => e6 && e6.required), v2 = [];
|
|
1873
|
+
for (const e6 of b2) {
|
|
1874
|
+
const t5 = e6.fieldId || e6.key;
|
|
1875
|
+
if ("summary" === t5 || "description" === t5 || "priority" === t5) continue;
|
|
1876
|
+
let n4, i4;
|
|
1877
|
+
"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) && v2.push(e6.name || t5);
|
|
1878
|
+
}
|
|
1879
|
+
if (v2.length > 0) return void alert(`Please fill in the required field${v2.length > 1 ? "s" : ""}: ${v2.join(", ")}`);
|
|
1872
1880
|
closeModal(), (async function createTriageAndIssue(e6, t5, n4, i4, o4, s4, r4, a4, l4, c4, d4, u3, p3) {
|
|
1873
1881
|
var _a2, _b, _c;
|
|
1874
1882
|
try {
|
|
@@ -2145,9 +2153,9 @@ function getCachedRegex(e2, t2) {
|
|
|
2145
2153
|
let i2 = $e.get(n2);
|
|
2146
2154
|
return i2 || (i2 = new RegExp(e2, t2), $e.set(n2, i2)), i2;
|
|
2147
2155
|
}
|
|
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,
|
|
2156
|
+
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, Pe = "authorization", _e = "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" };
|
|
2149
2157
|
function maskAuthorizationHeader(e2) {
|
|
2150
|
-
const t2 = e2[
|
|
2158
|
+
const t2 = e2[Pe] ? Pe : e2[_e] ? _e : null;
|
|
2151
2159
|
if (!t2) return;
|
|
2152
2160
|
const n2 = e2[t2], i2 = n2.indexOf(" ");
|
|
2153
2161
|
if (-1 !== i2) {
|
|
Binary file
|
|
Binary file
|
|
@@ -1283,6 +1283,54 @@ function bindListeners() {
|
|
|
1283
1283
|
const sprintFieldId = getSprintFieldId();
|
|
1284
1284
|
engTicketCustomFields[sprintFieldId] = parseInt(sprintValue, 10);
|
|
1285
1285
|
}
|
|
1286
|
+
// Block submit when a required eng-ticket field that's actually
|
|
1287
|
+
// rendered has no value. We only flag fields the user can fix:
|
|
1288
|
+
// renderDynamicField returns null (no DOM input) for fields like a
|
|
1289
|
+
// user picker with no assignable users, so absence of a
|
|
1290
|
+
// [data-field-id] element means the field isn't on screen and is
|
|
1291
|
+
// skipped. The title is already validated above; priority always has
|
|
1292
|
+
// a default selection. (Done before closeModal so the inputs still
|
|
1293
|
+
// exist to probe.)
|
|
1294
|
+
const isFieldEmpty = (v) => {
|
|
1295
|
+
if (v === undefined || v === null)
|
|
1296
|
+
return true;
|
|
1297
|
+
if (typeof v === "string")
|
|
1298
|
+
return v.trim() === "";
|
|
1299
|
+
if (Array.isArray(v))
|
|
1300
|
+
return v.length === 0;
|
|
1301
|
+
return false;
|
|
1302
|
+
};
|
|
1303
|
+
const requiredFields = (getFieldsForProject(engTicketProject, engTicketIssueType) || []).filter((f) => f && f.required);
|
|
1304
|
+
const missingRequired = [];
|
|
1305
|
+
for (const f of requiredFields) {
|
|
1306
|
+
const fid = f.fieldId || f.key;
|
|
1307
|
+
if (fid === "summary" || fid === "description" || fid === "priority") {
|
|
1308
|
+
continue;
|
|
1309
|
+
}
|
|
1310
|
+
let rendered;
|
|
1311
|
+
let value;
|
|
1312
|
+
if (fid === "project") {
|
|
1313
|
+
rendered = !!document.getElementById("sf-eng-ticket-project");
|
|
1314
|
+
value = engTicketProject;
|
|
1315
|
+
}
|
|
1316
|
+
else if (fid === "issuetype") {
|
|
1317
|
+
rendered = !!document.getElementById("sf-eng-ticket-type");
|
|
1318
|
+
value = engTicketIssueType;
|
|
1319
|
+
}
|
|
1320
|
+
else {
|
|
1321
|
+
// Dynamic field — only flag when renderDynamicField produced an
|
|
1322
|
+
// input (its container/control carries data-field-id).
|
|
1323
|
+
rendered = !!document.querySelector(`[data-field-id="${fid}"]`);
|
|
1324
|
+
value = engTicketCustomFields[fid];
|
|
1325
|
+
}
|
|
1326
|
+
if (rendered && isFieldEmpty(value)) {
|
|
1327
|
+
missingRequired.push(f.name || fid);
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
if (missingRequired.length > 0) {
|
|
1331
|
+
alert(`Please fill in the required field${missingRequired.length > 1 ? "s" : ""}: ${missingRequired.join(", ")}`);
|
|
1332
|
+
return;
|
|
1333
|
+
}
|
|
1286
1334
|
closeModal();
|
|
1287
1335
|
// Create triage + issue (with optional engineering ticket)
|
|
1288
1336
|
createTriageAndIssue(`${startTimestamp}`, `${endTimestamp}`, desc, issueName, issueDescription, currentState.createEngTicket, engTicketTeam, engTicketProject, engTicketPriority, engTicketLabels, engTicketIssueType, engTicketCustomFields, mode === "startnow" ? "RECORDED" : "LOOKBACK");
|
|
Binary file
|
|
Binary file
|
package/dist/recorder.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const e = require("./chunks/index-
|
|
3
|
+
const e = require("./chunks/index-Bvd8oTpV.js");
|
|
4
4
|
exports.DEFAULT_CAPTURE_SETTINGS = e.DEFAULT_CAPTURE_SETTINGS, exports.DEFAULT_CONSOLE_RECORDING_SETTINGS = e.DEFAULT_CONSOLE_RECORDING_SETTINGS, exports.STORAGE_VERSION = e.STORAGE_VERSION, exports.addOrUpdateMetadata = e.addOrUpdateMetadata, exports.buildBatches = e.buildBatches, exports.clearStaleFuncSpanState = e.clearStaleFuncSpanState, exports.createSkipHeadersPropagationChecker = e.createSkipHeadersPropagationChecker, exports.createTriageAndIssueFromRecorder = e.createTriageAndIssueFromRecorder, exports.createTriageFromRecorder = e.createTriageFromRecorder, exports.disableFunctionSpanTracking = e.disableFunctionSpanTracking, exports.enableFunctionSpanTracking = e.enableFunctionSpanTracking, exports.ensureHrefCache = e.ensureHrefCache, exports.eventSize = e.eventSize, exports.fetchAndSendIp = e.fetchAndSendIp, exports.fetchCaptureSettings = e.fetchCaptureSettings, exports.fetchEngineeringTicketPlatformIntegrations = e.fetchEngineeringTicketPlatformIntegrations, exports.fetchFunctionSpanTrackingEnabled = e.fetchFunctionSpanTrackingEnabled, exports.flushBufferedEvents = e.flushBufferedEvents, exports.getCachedHref = e.getCachedHref, exports.getCachedHrefNoQuery = e.getCachedHrefNoQuery, exports.getFuncSpanHeader = e.getFuncSpanHeader, exports.getIdentifiedUser = e.getIdentifiedUser, exports.getOrSetSessionId = e.getOrSetSessionId, exports.getUrlAndStoredUuids = e.getUrlAndStoredUuids, exports.identify = e.identify, exports.initRecorder = e.initRecorder, exports.initializeConsolePlugin = e.initializeConsolePlugin, exports.initializeDomContentEvents = e.initializeDomContentEvents, exports.initializeFunctionSpanTrackingFromApi = e.initializeFunctionSpanTrackingFromApi, exports.initializePerformancePlugin = e.initializePerformancePlugin, exports.initializeRecording = e.initializeRecording, exports.initializeWebSocket = e.initializeWebSocket, exports.invalidateUrlCache = e.invalidateUrlCache, exports.isFunctionSpanTrackingEnabled = e.isFunctionSpanTrackingEnabled, exports.maskInputFn = e.maskInputFn, exports.matchUrlWithWildcard = e.matchUrlWithWildcard, Object.defineProperty(exports, "nowTimestamp", { enumerable: true, get: () => e.nowTimestamp }), exports.onNavigationChange = e.onNavigationChange, exports.openReportIssueModal = e.openReportIssueModal, exports.requestTimeSync = e.requestTimeSync, exports.restoreFuncSpanState = e.restoreFuncSpanState, exports.sendDomainsToNotPropagateHeaderTo = e.sendDomainsToNotPropagateHeaderTo, exports.sendEvent = e.sendEvent, exports.sendGraphQLRequest = e.sendGraphQLRequest, exports.sendMessage = e.sendMessage, exports.startRecording = e.startRecording, exports.startRecordingSession = e.startRecordingSession, exports.toAbsoluteUrl = e.toAbsoluteUrl, exports.trackingEvent = e.trackingEvent, exports.withAppUrlMetadata = e.withAppUrlMetadata;
|
package/dist/recorder.cjs.br
CHANGED
|
Binary file
|
package/dist/recorder.cjs.gz
CHANGED
|
Binary file
|
package/dist/recorder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { D, a, S, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, z, A, B, C, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, T, U, V, W, X, Y } from "./chunks/index-
|
|
1
|
+
import { D, a, S, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, z, A, B, C, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, T, U, V, W, X, Y } from "./chunks/index-CXvHbLRT.js";
|
|
2
2
|
export {
|
|
3
3
|
D as DEFAULT_CAPTURE_SETTINGS,
|
|
4
4
|
a as DEFAULT_CONSOLE_RECORDING_SETTINGS,
|
package/dist/recorder.js.br
CHANGED
|
Binary file
|
package/dist/recorder.js.gz
CHANGED
|
Binary file
|
package/dist/recorder.umd.cjs
CHANGED
|
@@ -694,7 +694,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
694
694
|
const w3 = new URL(e3);
|
|
695
695
|
return `${w3.hostname}${w3.port ? `:${w3.port}` : ""}`;
|
|
696
696
|
})(e2);
|
|
697
|
-
let _2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${M2}/ws/notify/?apiKey=${w2}&sessionId=${C2}&sender=JS%2FTS&version=1.12.
|
|
697
|
+
let _2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${M2}/ws/notify/?apiKey=${w2}&sessionId=${C2}&sender=JS%2FTS&version=1.12.5`;
|
|
698
698
|
if (x2 && (_2 += `&envValue=${encodeURIComponent(x2)}`), de = I2 ? (function tryCreateWsWorker() {
|
|
699
699
|
if ("undefined" == typeof Worker) return null;
|
|
700
700
|
try {
|
|
@@ -2083,6 +2083,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
2083
2083
|
const e6 = getSprintFieldId();
|
|
2084
2084
|
Z2[e6] = parseInt(ee2, 10);
|
|
2085
2085
|
}
|
|
2086
|
+
const isFieldEmpty = (e6) => null == e6 || ("string" == typeof e6 ? "" === e6.trim() : !!Array.isArray(e6) && 0 === e6.length), te2 = (getFieldsForProject(K2, Q2) || []).filter((e6) => e6 && e6.required), ne2 = [];
|
|
2087
|
+
for (const e6 of te2) {
|
|
2088
|
+
const w5 = e6.fieldId || e6.key;
|
|
2089
|
+
if ("summary" === w5 || "description" === w5 || "priority" === w5) continue;
|
|
2090
|
+
let C4, x4;
|
|
2091
|
+
"project" === w5 ? (C4 = !!document.getElementById("sf-eng-ticket-project"), x4 = K2) : "issuetype" === w5 ? (C4 = !!document.getElementById("sf-eng-ticket-type"), x4 = Q2) : (C4 = !!document.querySelector(`[data-field-id="${w5}"]`), x4 = Z2[w5]), C4 && isFieldEmpty(x4) && ne2.push(e6.name || w5);
|
|
2092
|
+
}
|
|
2093
|
+
if (ne2.length > 0) return void alert(`Please fill in the required field${ne2.length > 1 ? "s" : ""}: ${ne2.join(", ")}`);
|
|
2086
2094
|
closeModal(), (async function createTriageAndIssue(e6, w5, C4, x4, I4, M4, _4, U4, j4, z4, W4, H3, K3) {
|
|
2087
2095
|
var _a3, _b, _c2;
|
|
2088
2096
|
try {
|
package/dist/recorder.umd.cjs.br
CHANGED
|
Binary file
|
package/dist/recorder.umd.cjs.gz
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|