@sailfish-ai/recorder 1.8.21 → 1.8.22
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/index.js +56 -12
- package/dist/recorder.cjs +28 -16
- package/dist/recorder.js +31 -19
- package/dist/recorder.js.br +0 -0
- package/dist/recorder.js.gz +0 -0
- package/dist/recorder.umd.cjs +30 -18
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -39,6 +39,8 @@ const INCLUDE = "include";
|
|
|
39
39
|
const SAME_ORIGIN = "same-origin";
|
|
40
40
|
const ALLOWED_HEADERS_HEADER = "access-control-allow-headers";
|
|
41
41
|
const OPTIONS = "OPTIONS";
|
|
42
|
+
const AUTHORIZATION_HEADER_KEY_LOWER = "authorization";
|
|
43
|
+
const AUTHORIZATION_HEADER_KEY = "Authorization";
|
|
42
44
|
const ActionType = {
|
|
43
45
|
PROPAGATE: "propagate",
|
|
44
46
|
IGNORE: "ignore",
|
|
@@ -83,6 +85,41 @@ export const DEFAULT_CONSOLE_RECORDING_SETTINGS = {
|
|
|
83
85
|
// recordBody: true,
|
|
84
86
|
// recordInitialRequests: false,
|
|
85
87
|
// };
|
|
88
|
+
function maskAuthorizationHeader(requestHeaders) {
|
|
89
|
+
const authKey = requestHeaders[AUTHORIZATION_HEADER_KEY_LOWER]
|
|
90
|
+
? AUTHORIZATION_HEADER_KEY_LOWER
|
|
91
|
+
: requestHeaders[AUTHORIZATION_HEADER_KEY]
|
|
92
|
+
? AUTHORIZATION_HEADER_KEY
|
|
93
|
+
: null;
|
|
94
|
+
if (!authKey) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const authValue = requestHeaders[authKey];
|
|
98
|
+
const spaceIndex = authValue.indexOf(" ");
|
|
99
|
+
if (spaceIndex !== -1) {
|
|
100
|
+
const scheme = authValue.slice(0, spaceIndex + 1); // "Bearer "
|
|
101
|
+
const token = authValue.slice(spaceIndex + 1);
|
|
102
|
+
if (token.length > 8) {
|
|
103
|
+
requestHeaders[authKey] =
|
|
104
|
+
scheme +
|
|
105
|
+
token.slice(0, 4) +
|
|
106
|
+
"*".repeat(token.length - 8) +
|
|
107
|
+
token.slice(-4);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
requestHeaders[authKey] = scheme + "*".repeat(token.length);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else if (authValue.length > 8) {
|
|
114
|
+
requestHeaders[authKey] =
|
|
115
|
+
authValue.slice(0, 4) +
|
|
116
|
+
"*".repeat(authValue.length - 8) +
|
|
117
|
+
authValue.slice(-4);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
requestHeaders[authKey] = "*".repeat(authValue.length);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
86
123
|
function trackDomainChangesOnce() {
|
|
87
124
|
const g = (window.__sailfish_recorder ||= {});
|
|
88
125
|
if (g.routeWatcherIntervalId) {
|
|
@@ -403,12 +440,11 @@ function setupXMLHttpRequestInterceptor(domainsToNotPropagateHeaderTo = []) {
|
|
|
403
440
|
const startTime = Date.now();
|
|
404
441
|
let finished = false;
|
|
405
442
|
const requestBody = args[0]; // Capture the request body/payload
|
|
406
|
-
|
|
407
|
-
//
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
}
|
|
443
|
+
// Note: _capturedRequestHeaders already includes x-sf3-rid and funcSpan headers
|
|
444
|
+
// because setRequestHeader() above goes through our intercepted version
|
|
445
|
+
const requestHeaders = { ...this._capturedRequestHeaders };
|
|
446
|
+
// Mask authorization header for privacy (preserve scheme like "Bearer", mask the token)
|
|
447
|
+
maskAuthorizationHeader(requestHeaders);
|
|
412
448
|
// 4️⃣ Helper to emit networkRequestFinished
|
|
413
449
|
const emitFinished = (success, status, errorMsg, responseData, responseHeaders) => {
|
|
414
450
|
if (finished)
|
|
@@ -576,20 +612,28 @@ function setupFetchInterceptor(domainsToNotPropagateHeadersTo = []) {
|
|
|
576
612
|
console.warn("[Sailfish] Failed to capture request data:", e);
|
|
577
613
|
}
|
|
578
614
|
}
|
|
579
|
-
//
|
|
615
|
+
// Remove any existing Sailfish headers (in case app already set them)
|
|
580
616
|
delete requestHeaders[xSf3RidHeader];
|
|
581
|
-
const
|
|
582
|
-
if (
|
|
583
|
-
delete requestHeaders[
|
|
617
|
+
const funcSpanHeader = getFuncSpanHeader();
|
|
618
|
+
if (funcSpanHeader) {
|
|
619
|
+
delete requestHeaders[funcSpanHeader.name];
|
|
620
|
+
}
|
|
621
|
+
// Add Sailfish headers with correct values
|
|
622
|
+
const xSf3RidValue = `${sessionId}/${urlAndStoredUuids.page_visit_uuid}/${networkUUID}`;
|
|
623
|
+
requestHeaders[xSf3RidHeader] = xSf3RidValue;
|
|
624
|
+
if (funcSpanHeader) {
|
|
625
|
+
requestHeaders[funcSpanHeader.name] = funcSpanHeader.value;
|
|
584
626
|
}
|
|
627
|
+
// Mask authorization header for privacy (preserve scheme like "Bearer", mask the token)
|
|
628
|
+
maskAuthorizationHeader(requestHeaders);
|
|
585
629
|
try {
|
|
586
630
|
let response = await injectHeader(target, thisArg, input, init, sessionId, urlAndStoredUuids.page_visit_uuid, networkUUID);
|
|
587
631
|
let isRetry = false;
|
|
588
632
|
// Retry logic for 400/403 before logging finished event
|
|
589
633
|
if (BAD_HTTP_STATUS.includes(response.status)) {
|
|
590
634
|
DEBUG && console.log("Perform retry as status was fail:", response);
|
|
591
|
-
//
|
|
592
|
-
|
|
635
|
+
// Remove x-sf3-rid from captured headers since retry doesn't include it
|
|
636
|
+
delete requestHeaders[xSf3RidHeader];
|
|
593
637
|
response = await retryWithoutPropagateHeaders(target, thisArg, args, url);
|
|
594
638
|
isRetry = true;
|
|
595
639
|
}
|
package/dist/recorder.cjs
CHANGED
|
@@ -465,7 +465,7 @@ function initializeWebSocket(e, a, u, m2) {
|
|
|
465
465
|
const a2 = document.createElement("a");
|
|
466
466
|
return a2.href = e2, `${a2.hostname}${a2.port ? `:${a2.port}` : ""}`;
|
|
467
467
|
})(e);
|
|
468
|
-
let b2 = `${"https:" === new URL(e).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a}&sessionId=${u}&sender=JS%2FTS&version=1.8.
|
|
468
|
+
let b2 = `${"https:" === new URL(e).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a}&sessionId=${u}&sender=JS%2FTS&version=1.8.22`;
|
|
469
469
|
m2 && (b2 += `&envValue=${encodeURIComponent(m2)}`);
|
|
470
470
|
return oe = new U(b2, [], { connectionTimeout: 3e4 }), oe.addEventListener("open", () => {
|
|
471
471
|
ne && (console.log("[Sailfish] WebSocket connection opened"), console.log("[Sailfish] Function span tracking state: " + (ce ? "ENABLED" : "DISABLED"))), (async () => {
|
|
@@ -7791,7 +7791,16 @@ async function initializeRecording(e, a, u, m2, w2) {
|
|
|
7791
7791
|
return b2;
|
|
7792
7792
|
}
|
|
7793
7793
|
let wd = null, Sd = null;
|
|
7794
|
-
const bd = readDebugFlag(), vd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], kd = [400, 403], xd = "CORS", Cd = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} },
|
|
7794
|
+
const bd = readDebugFlag(), vd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], kd = [400, 403], xd = "CORS", Cd = "authorization", Id = "Authorization", Md = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} }, Ed = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
|
|
7795
|
+
function maskAuthorizationHeader(e) {
|
|
7796
|
+
const a = e[Cd] ? Cd : e[Id] ? Id : null;
|
|
7797
|
+
if (!a) return;
|
|
7798
|
+
const u = e[a], m2 = u.indexOf(" ");
|
|
7799
|
+
if (-1 !== m2) {
|
|
7800
|
+
const w2 = u.slice(0, m2 + 1), b2 = u.slice(m2 + 1);
|
|
7801
|
+
b2.length > 8 ? e[a] = w2 + b2.slice(0, 4) + "*".repeat(b2.length - 8) + b2.slice(-4) : e[a] = w2 + "*".repeat(b2.length);
|
|
7802
|
+
} else u.length > 8 ? e[a] = u.slice(0, 4) + "*".repeat(u.length - 8) + u.slice(-4) : e[a] = "*".repeat(u.length);
|
|
7803
|
+
}
|
|
7795
7804
|
function trackDomainChangesOnce() {
|
|
7796
7805
|
const e = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7797
7806
|
if (e.routeWatcherIntervalId) return;
|
|
@@ -7871,7 +7880,7 @@ function setupFetchInterceptor(e = []) {
|
|
|
7871
7880
|
x2 = C2.href;
|
|
7872
7881
|
}
|
|
7873
7882
|
return shouldSkipHeadersPropagation(x2, e) ? a2.apply(m2, w2) : (async function injectHeaderWrapper(e2, a3, u2, m3, w3, x3, C3) {
|
|
7874
|
-
var _a2, _b
|
|
7883
|
+
var _a2, _b;
|
|
7875
7884
|
if (!x3) return e2.apply(a3, u2);
|
|
7876
7885
|
let I3 = v4();
|
|
7877
7886
|
const E2 = getUrlAndStoredUuids(), _2 = w3.method || "GET", O2 = Date.now();
|
|
@@ -7896,8 +7905,11 @@ function setupFetchInterceptor(e = []) {
|
|
|
7896
7905
|
bd && console.warn("[Sailfish] Failed to capture request data:", e3);
|
|
7897
7906
|
}
|
|
7898
7907
|
delete D2[b];
|
|
7899
|
-
const $2 =
|
|
7900
|
-
$2 && delete D2[$2];
|
|
7908
|
+
const $2 = getFuncSpanHeader();
|
|
7909
|
+
$2 && delete D2[$2.name];
|
|
7910
|
+
const B2 = `${x3}/${E2.page_visit_uuid}/${I3}`;
|
|
7911
|
+
D2[b] = B2, $2 && (D2[$2.name] = $2.value);
|
|
7912
|
+
maskAuthorizationHeader(D2);
|
|
7901
7913
|
try {
|
|
7902
7914
|
let $3 = await (async function injectHeader(e3, a4, u3, m4, w4, x4, C4) {
|
|
7903
7915
|
const I4 = getFuncSpanHeader();
|
|
@@ -7911,8 +7923,8 @@ function setupFetchInterceptor(e = []) {
|
|
|
7911
7923
|
const E3 = { ...m4 }, _3 = new Headers(m4.headers || {});
|
|
7912
7924
|
return _3.set(b, `${w4}/${x4}/${C4}`), I4 && (_3.set(I4.name, I4.value), bd && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof u3 ? u3 : u3.href, header: I4.name })), E3.headers = _3, await e3.call(a4, u3, E3);
|
|
7913
7925
|
}
|
|
7914
|
-
})(e2, a3, m3, w3, x3, E2.page_visit_uuid, I3),
|
|
7915
|
-
kd.includes($3.status) && (bd && console.log("Perform retry as status was fail:", $3),
|
|
7926
|
+
})(e2, a3, m3, w3, x3, E2.page_visit_uuid, I3), B3 = false;
|
|
7927
|
+
kd.includes($3.status) && (bd && console.log("Perform retry as status was fail:", $3), delete D2[b], $3 = await (async function retryWithoutPropagateHeaders(e3, a4, u3, m4) {
|
|
7916
7928
|
try {
|
|
7917
7929
|
let m5 = u3[0], w4 = u3[1] || {};
|
|
7918
7930
|
if ("string" == typeof m5 || m5 instanceof URL) {
|
|
@@ -7930,7 +7942,7 @@ function setupFetchInterceptor(e = []) {
|
|
|
7930
7942
|
} catch (e4) {
|
|
7931
7943
|
throw bd && console.log(`Retry without ${b} for ${m4} also failed:`, e4), e4;
|
|
7932
7944
|
}
|
|
7933
|
-
})(e2, a3, u2, C3),
|
|
7945
|
+
})(e2, a3, u2, C3), B3 = true);
|
|
7934
7946
|
const U2 = Date.now(), j2 = $3.status, z2 = $3.ok, q2 = z2 ? "" : `Request Error: ${$3.statusText}`;
|
|
7935
7947
|
let V2;
|
|
7936
7948
|
try {
|
|
@@ -7947,11 +7959,11 @@ function setupFetchInterceptor(e = []) {
|
|
|
7947
7959
|
} catch (e3) {
|
|
7948
7960
|
bd && console.warn("[Sailfish] Failed to capture response headers:", e3), H2 = null;
|
|
7949
7961
|
}
|
|
7950
|
-
return sendEvent({ type: 27, timestamp: U2, sessionId: x3, data: { request_id: I3, session_id: x3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: C3, retry_without_trace_id:
|
|
7962
|
+
return sendEvent({ type: 27, timestamp: U2, sessionId: x3, data: { request_id: I3, session_id: x3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: C3, retry_without_trace_id: B3, request_headers: D2, request_body: F2, response_headers: H2, response_body: V2 }, ...E2 }), $3;
|
|
7951
7963
|
} catch (m4) {
|
|
7952
|
-
const w4 = Date.now(), b2 = false, $3 = ((
|
|
7953
|
-
if (m4 instanceof TypeError && ((
|
|
7954
|
-
throw sendEvent({ type: 27, timestamp: w4, sessionId: x3, data: { request_id: I3, session_id: x3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: b2, error:
|
|
7964
|
+
const w4 = Date.now(), b2 = false, $3 = ((_a2 = m4.response) == null ? void 0 : _a2.status) || 500, B3 = m4.message || "Fetch request failed";
|
|
7965
|
+
if (m4 instanceof TypeError && ((_b = m4 == null ? void 0 : m4.message) == null ? void 0 : _b.toLowerCase().includes(xd.toLowerCase()))) return e2.apply(a3, u2);
|
|
7966
|
+
throw sendEvent({ type: 27, timestamp: w4, sessionId: x3, data: { request_id: I3, session_id: x3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: b2, error: B3, method: _2, url: C3, request_headers: D2, request_body: F2, response_body: null }, ...E2 }), m4;
|
|
7955
7967
|
}
|
|
7956
7968
|
})(a2, m2, w2, C2, I2, u, x2);
|
|
7957
7969
|
} });
|
|
@@ -7984,7 +7996,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
7984
7996
|
})(), D2 = getOrSetSessionId(), $2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7985
7997
|
if ($2.sessionId = D2, $2.apiKey = e, $2.backendApi = a, $2.serviceAdditionalMetadata = I2, $2.initialized && $2.sessionId === D2 && $2.ws && 1 === $2.ws.readyState) trackDomainChangesOnce();
|
|
7986
7998
|
else {
|
|
7987
|
-
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(
|
|
7999
|
+
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(Ed, D2), $2.consoleInit = true), $2.errorInit || (!(function initializeErrorInterceptor() {
|
|
7988
8000
|
window.addEventListener("error", (e2) => {
|
|
7989
8001
|
captureError(e2.error || e2.message);
|
|
7990
8002
|
}), window.addEventListener("unhandledrejection", (e2) => {
|
|
@@ -8022,7 +8034,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
8022
8034
|
const _3 = Date.now();
|
|
8023
8035
|
let O3 = false;
|
|
8024
8036
|
const F3 = a3[0], D3 = { ...this._capturedRequestHeaders };
|
|
8025
|
-
|
|
8037
|
+
maskAuthorizationHeader(D3);
|
|
8026
8038
|
const emitFinished = (e3, a4, u3, b2, x4) => {
|
|
8027
8039
|
if (O3) return;
|
|
8028
8040
|
O3 = true;
|
|
@@ -8061,7 +8073,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
8061
8073
|
sendMessage({ type: "deviceInfo", data: { deviceInfo: { language: navigator.language, userAgent: navigator.userAgent } } });
|
|
8062
8074
|
})();
|
|
8063
8075
|
try {
|
|
8064
|
-
const u2 = await fetchCaptureSettings(e, a), m3 = ((_a2 = u2.data) == null ? void 0 : _a2.captureSettingsFromApiKey) ||
|
|
8076
|
+
const u2 = await fetchCaptureSettings(e, a), m3 = ((_a2 = u2.data) == null ? void 0 : _a2.captureSettingsFromApiKey) || Md;
|
|
8065
8077
|
if ($2.ws && 1 === $2.ws.readyState) return;
|
|
8066
8078
|
const b2 = withAppUrlMetadata(I2), C3 = await startRecordingSession(e, D2, a, _2, O2, F2, E2, "JS/TS", b2);
|
|
8067
8079
|
if ((_b = C3.data) == null ? void 0 : _b.startRecordingSession) {
|
|
@@ -8105,7 +8117,7 @@ H && (!(function sendUserDeviceUuid() {
|
|
|
8105
8117
|
}), H && window.addEventListener("beforeunload", () => {
|
|
8106
8118
|
clearPageVisitDataFromSessionStorage();
|
|
8107
8119
|
});
|
|
8108
|
-
exports.DEFAULT_CAPTURE_SETTINGS =
|
|
8120
|
+
exports.DEFAULT_CAPTURE_SETTINGS = Md, exports.DEFAULT_CONSOLE_RECORDING_SETTINGS = Ed, exports.STORAGE_VERSION = 1, exports.addOrUpdateMetadata = function addOrUpdateMetadata(e) {
|
|
8109
8121
|
const a = { type: "addOrUpdateMetadata", metadata: e };
|
|
8110
8122
|
Sd && JSON.stringify(Sd) === JSON.stringify(e) || (Sd = e, sendMessage(a));
|
|
8111
8123
|
}, exports.buildBatches = buildBatches, exports.clearStaleFuncSpanState = clearStaleFuncSpanState, exports.createTriageAndIssueFromRecorder = createTriageAndIssueFromRecorder, exports.createTriageFromRecorder = createTriageFromRecorder, exports.disableFunctionSpanTracking = disableFunctionSpanTracking, exports.enableFunctionSpanTracking = enableFunctionSpanTracking, exports.eventSize = eventSize, exports.fetchCaptureSettings = fetchCaptureSettings, exports.fetchEngineeringTicketPlatformIntegrations = fetchEngineeringTicketPlatformIntegrations, exports.fetchFunctionSpanTrackingEnabled = fetchFunctionSpanTrackingEnabled, exports.flushBufferedEvents = flushBufferedEvents, exports.getFuncSpanHeader = getFuncSpanHeader, exports.getOrSetSessionId = getOrSetSessionId, exports.getUrlAndStoredUuids = getUrlAndStoredUuids, exports.identify = function identify(e, a = {}, u = false) {
|
package/dist/recorder.js
CHANGED
|
@@ -465,7 +465,7 @@ function initializeWebSocket(e, a, u, m2) {
|
|
|
465
465
|
const a2 = document.createElement("a");
|
|
466
466
|
return a2.href = e2, `${a2.hostname}${a2.port ? `:${a2.port}` : ""}`;
|
|
467
467
|
})(e);
|
|
468
|
-
let b2 = `${"https:" === new URL(e).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a}&sessionId=${u}&sender=JS%2FTS&version=1.8.
|
|
468
|
+
let b2 = `${"https:" === new URL(e).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a}&sessionId=${u}&sender=JS%2FTS&version=1.8.22`;
|
|
469
469
|
m2 && (b2 += `&envValue=${encodeURIComponent(m2)}`);
|
|
470
470
|
return se = new U(b2, [], { connectionTimeout: 3e4 }), se.addEventListener("open", () => {
|
|
471
471
|
re && (console.log("[Sailfish] WebSocket connection opened"), console.log("[Sailfish] Function span tracking state: " + (de ? "ENABLED" : "DISABLED"))), (async () => {
|
|
@@ -1490,7 +1490,7 @@ function renderDynamicFields(e, a) {
|
|
|
1490
1490
|
})();
|
|
1491
1491
|
if (!m2 || 0 === m2.length) return void (u.innerHTML = "");
|
|
1492
1492
|
const b2 = m2.map((e2) => (function renderDynamicField(e3, a2, u2 = []) {
|
|
1493
|
-
var _a2, _b, _c2,
|
|
1493
|
+
var _a2, _b, _c2, _d2;
|
|
1494
1494
|
const m3 = e3.fieldId || e3.key, w3 = e3.name, b3 = (_a2 = e3.schema) == null ? void 0 : _a2.type, C2 = (_b = e3.schema) == null ? void 0 : _b.system, x2 = (_c2 = e3.schema) == null ? void 0 : _c2.custom, I2 = e3.required || false, E2 = e3.allowedValues, _2 = ["summary", "description", "project", "issuetype", "priority"];
|
|
1495
1495
|
if (_2.includes(m3) || _2.includes(C2)) return null;
|
|
1496
1496
|
const O2 = I2 ? '<span style="color:#ef4444;">*</span>' : "", F2 = "width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none;";
|
|
@@ -1635,7 +1635,7 @@ function renderDynamicFields(e, a) {
|
|
|
1635
1635
|
</div>
|
|
1636
1636
|
`;
|
|
1637
1637
|
default:
|
|
1638
|
-
return ((
|
|
1638
|
+
return ((_d2 = e3.operations) == null ? void 0 : _d2.includes("set")) ? `
|
|
1639
1639
|
<div>
|
|
1640
1640
|
<label for="${m3}" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">
|
|
1641
1641
|
${w3} ${O2}
|
|
@@ -7805,7 +7805,16 @@ function addOrUpdateMetadata(e) {
|
|
|
7805
7805
|
function trackingEvent(e) {
|
|
7806
7806
|
sendMessage({ type: "trackingEvent", trackingData: e, timestamp: ne() });
|
|
7807
7807
|
}
|
|
7808
|
-
const vd = readDebugFlag(), kd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Cd = [400, 403], xd = "CORS", Id = 1, Md = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} },
|
|
7808
|
+
const vd = readDebugFlag(), kd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Cd = [400, 403], xd = "CORS", Id = 1, Md = "authorization", Ed = "Authorization", _d = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} }, Od = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
|
|
7809
|
+
function maskAuthorizationHeader(e) {
|
|
7810
|
+
const a = e[Md] ? Md : e[Ed] ? Ed : null;
|
|
7811
|
+
if (!a) return;
|
|
7812
|
+
const u = e[a], m2 = u.indexOf(" ");
|
|
7813
|
+
if (-1 !== m2) {
|
|
7814
|
+
const w2 = u.slice(0, m2 + 1), b2 = u.slice(m2 + 1);
|
|
7815
|
+
b2.length > 8 ? e[a] = w2 + b2.slice(0, 4) + "*".repeat(b2.length - 8) + b2.slice(-4) : e[a] = w2 + "*".repeat(b2.length);
|
|
7816
|
+
} else u.length > 8 ? e[a] = u.slice(0, 4) + "*".repeat(u.length - 8) + u.slice(-4) : e[a] = "*".repeat(u.length);
|
|
7817
|
+
}
|
|
7809
7818
|
function trackDomainChangesOnce() {
|
|
7810
7819
|
const e = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7811
7820
|
if (e.routeWatcherIntervalId) return;
|
|
@@ -7885,7 +7894,7 @@ function setupFetchInterceptor(e = []) {
|
|
|
7885
7894
|
C2 = x2.href;
|
|
7886
7895
|
}
|
|
7887
7896
|
return shouldSkipHeadersPropagation(C2, e) ? a2.apply(m2, w2) : (async function injectHeaderWrapper(e2, a3, u2, m3, w3, C3, x3) {
|
|
7888
|
-
var _a2, _b
|
|
7897
|
+
var _a2, _b;
|
|
7889
7898
|
if (!C3) return e2.apply(a3, u2);
|
|
7890
7899
|
let I3 = v4();
|
|
7891
7900
|
const E2 = getUrlAndStoredUuids(), _2 = w3.method || "GET", O2 = Date.now();
|
|
@@ -7910,8 +7919,11 @@ function setupFetchInterceptor(e = []) {
|
|
|
7910
7919
|
vd && console.warn("[Sailfish] Failed to capture request data:", e3);
|
|
7911
7920
|
}
|
|
7912
7921
|
delete D2[b];
|
|
7913
|
-
const $2 =
|
|
7914
|
-
$2 && delete D2[$2];
|
|
7922
|
+
const $2 = getFuncSpanHeader();
|
|
7923
|
+
$2 && delete D2[$2.name];
|
|
7924
|
+
const B2 = `${C3}/${E2.page_visit_uuid}/${I3}`;
|
|
7925
|
+
D2[b] = B2, $2 && (D2[$2.name] = $2.value);
|
|
7926
|
+
maskAuthorizationHeader(D2);
|
|
7915
7927
|
try {
|
|
7916
7928
|
let $3 = await (async function injectHeader(e3, a4, u3, m4, w4, C4, x4) {
|
|
7917
7929
|
const I4 = getFuncSpanHeader();
|
|
@@ -7925,8 +7937,8 @@ function setupFetchInterceptor(e = []) {
|
|
|
7925
7937
|
const E3 = { ...m4 }, _3 = new Headers(m4.headers || {});
|
|
7926
7938
|
return _3.set(b, `${w4}/${C4}/${x4}`), I4 && (_3.set(I4.name, I4.value), vd && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof u3 ? u3 : u3.href, header: I4.name })), E3.headers = _3, await e3.call(a4, u3, E3);
|
|
7927
7939
|
}
|
|
7928
|
-
})(e2, a3, m3, w3, C3, E2.page_visit_uuid, I3),
|
|
7929
|
-
Cd.includes($3.status) && (vd && console.log("Perform retry as status was fail:", $3),
|
|
7940
|
+
})(e2, a3, m3, w3, C3, E2.page_visit_uuid, I3), B3 = false;
|
|
7941
|
+
Cd.includes($3.status) && (vd && console.log("Perform retry as status was fail:", $3), delete D2[b], $3 = await (async function retryWithoutPropagateHeaders(e3, a4, u3, m4) {
|
|
7930
7942
|
try {
|
|
7931
7943
|
let m5 = u3[0], w4 = u3[1] || {};
|
|
7932
7944
|
if ("string" == typeof m5 || m5 instanceof URL) {
|
|
@@ -7944,7 +7956,7 @@ function setupFetchInterceptor(e = []) {
|
|
|
7944
7956
|
} catch (e4) {
|
|
7945
7957
|
throw vd && console.log(`Retry without ${b} for ${m4} also failed:`, e4), e4;
|
|
7946
7958
|
}
|
|
7947
|
-
})(e2, a3, u2, x3),
|
|
7959
|
+
})(e2, a3, u2, x3), B3 = true);
|
|
7948
7960
|
const U2 = Date.now(), j2 = $3.status, z2 = $3.ok, q2 = z2 ? "" : `Request Error: ${$3.statusText}`;
|
|
7949
7961
|
let V2;
|
|
7950
7962
|
try {
|
|
@@ -7961,11 +7973,11 @@ function setupFetchInterceptor(e = []) {
|
|
|
7961
7973
|
} catch (e3) {
|
|
7962
7974
|
vd && console.warn("[Sailfish] Failed to capture response headers:", e3), H2 = null;
|
|
7963
7975
|
}
|
|
7964
|
-
return sendEvent({ type: 27, timestamp: U2, sessionId: C3, data: { request_id: I3, session_id: C3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: x3, retry_without_trace_id:
|
|
7976
|
+
return sendEvent({ type: 27, timestamp: U2, sessionId: C3, data: { request_id: I3, session_id: C3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: x3, retry_without_trace_id: B3, request_headers: D2, request_body: F2, response_headers: H2, response_body: V2 }, ...E2 }), $3;
|
|
7965
7977
|
} catch (m4) {
|
|
7966
|
-
const w4 = Date.now(), b2 = false, $3 = ((
|
|
7967
|
-
if (m4 instanceof TypeError && ((
|
|
7968
|
-
throw sendEvent({ type: 27, timestamp: w4, sessionId: C3, data: { request_id: I3, session_id: C3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: b2, error:
|
|
7978
|
+
const w4 = Date.now(), b2 = false, $3 = ((_a2 = m4.response) == null ? void 0 : _a2.status) || 500, B3 = m4.message || "Fetch request failed";
|
|
7979
|
+
if (m4 instanceof TypeError && ((_b = m4 == null ? void 0 : m4.message) == null ? void 0 : _b.toLowerCase().includes(xd.toLowerCase()))) return e2.apply(a3, u2);
|
|
7980
|
+
throw sendEvent({ type: 27, timestamp: w4, sessionId: C3, data: { request_id: I3, session_id: C3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: b2, error: B3, method: _2, url: x3, request_headers: D2, request_body: F2, response_body: null }, ...E2 }), m4;
|
|
7969
7981
|
}
|
|
7970
7982
|
})(a2, m2, w2, x2, I2, u, C2);
|
|
7971
7983
|
} });
|
|
@@ -7998,7 +8010,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
7998
8010
|
})(), D2 = getOrSetSessionId(), $2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7999
8011
|
if ($2.sessionId = D2, $2.apiKey = e, $2.backendApi = a, $2.serviceAdditionalMetadata = I2, $2.initialized && $2.sessionId === D2 && $2.ws && 1 === $2.ws.readyState) trackDomainChangesOnce();
|
|
8000
8012
|
else {
|
|
8001
|
-
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(
|
|
8013
|
+
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(Od, D2), $2.consoleInit = true), $2.errorInit || (!(function initializeErrorInterceptor() {
|
|
8002
8014
|
window.addEventListener("error", (e2) => {
|
|
8003
8015
|
captureError(e2.error || e2.message);
|
|
8004
8016
|
}), window.addEventListener("unhandledrejection", (e2) => {
|
|
@@ -8036,7 +8048,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
8036
8048
|
const _3 = Date.now();
|
|
8037
8049
|
let O3 = false;
|
|
8038
8050
|
const F3 = a3[0], D3 = { ...this._capturedRequestHeaders };
|
|
8039
|
-
|
|
8051
|
+
maskAuthorizationHeader(D3);
|
|
8040
8052
|
const emitFinished = (e3, a4, u3, b2, C4) => {
|
|
8041
8053
|
if (O3) return;
|
|
8042
8054
|
O3 = true;
|
|
@@ -8075,7 +8087,7 @@ async function startRecording({ apiKey: e, backendApi: a = "https://api-service.
|
|
|
8075
8087
|
sendMessage({ type: "deviceInfo", data: { deviceInfo: { language: navigator.language, userAgent: navigator.userAgent } } });
|
|
8076
8088
|
})();
|
|
8077
8089
|
try {
|
|
8078
|
-
const u2 = await fetchCaptureSettings(e, a), m3 = ((_a2 = u2.data) == null ? void 0 : _a2.captureSettingsFromApiKey) ||
|
|
8090
|
+
const u2 = await fetchCaptureSettings(e, a), m3 = ((_a2 = u2.data) == null ? void 0 : _a2.captureSettingsFromApiKey) || _d;
|
|
8079
8091
|
if ($2.ws && 1 === $2.ws.readyState) return;
|
|
8080
8092
|
const b2 = withAppUrlMetadata(I2), x3 = await startRecordingSession(e, D2, a, _2, O2, F2, E2, "JS/TS", b2);
|
|
8081
8093
|
if ((_b = x3.data) == null ? void 0 : _b.startRecordingSession) {
|
|
@@ -8138,8 +8150,8 @@ const initRecorder = async (e) => {
|
|
|
8138
8150
|
})), a.initPromise);
|
|
8139
8151
|
};
|
|
8140
8152
|
export {
|
|
8141
|
-
|
|
8142
|
-
|
|
8153
|
+
_d as DEFAULT_CAPTURE_SETTINGS,
|
|
8154
|
+
Od as DEFAULT_CONSOLE_RECORDING_SETTINGS,
|
|
8143
8155
|
Id as STORAGE_VERSION,
|
|
8144
8156
|
addOrUpdateMetadata,
|
|
8145
8157
|
buildBatches,
|
package/dist/recorder.js.br
CHANGED
|
Binary file
|
package/dist/recorder.js.gz
CHANGED
|
Binary file
|
package/dist/recorder.umd.cjs
CHANGED
|
@@ -467,7 +467,7 @@
|
|
|
467
467
|
const a3 = document.createElement("a");
|
|
468
468
|
return a3.href = e3, `${a3.hostname}${a3.port ? `:${a3.port}` : ""}`;
|
|
469
469
|
})(e2);
|
|
470
|
-
let b2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a2}&sessionId=${u2}&sender=JS%2FTS&version=1.8.
|
|
470
|
+
let b2 = `${"https:" === new URL(e2).protocol ? "wss" : "ws"}://${w2}/ws/notify/?apiKey=${a2}&sessionId=${u2}&sender=JS%2FTS&version=1.8.22`;
|
|
471
471
|
m2 && (b2 += `&envValue=${encodeURIComponent(m2)}`);
|
|
472
472
|
return se = new j(b2, [], { connectionTimeout: 3e4 }), se.addEventListener("open", () => {
|
|
473
473
|
re && (console.log("[Sailfish] WebSocket connection opened"), console.log("[Sailfish] Function span tracking state: " + (de ? "ENABLED" : "DISABLED"))), (async () => {
|
|
@@ -1492,7 +1492,7 @@
|
|
|
1492
1492
|
})();
|
|
1493
1493
|
if (!m2 || 0 === m2.length) return void (u2.innerHTML = "");
|
|
1494
1494
|
const b2 = m2.map((e3) => (function renderDynamicField(e4, a3, u3 = []) {
|
|
1495
|
-
var _a2, _b, _c2,
|
|
1495
|
+
var _a2, _b, _c2, _d2;
|
|
1496
1496
|
const m3 = e4.fieldId || e4.key, w3 = e4.name, b3 = (_a2 = e4.schema) == null ? void 0 : _a2.type, C2 = (_b = e4.schema) == null ? void 0 : _b.system, x2 = (_c2 = e4.schema) == null ? void 0 : _c2.custom, I2 = e4.required || false, E2 = e4.allowedValues, _2 = ["summary", "description", "project", "issuetype", "priority"];
|
|
1497
1497
|
if (_2.includes(m3) || _2.includes(C2)) return null;
|
|
1498
1498
|
const O2 = I2 ? '<span style="color:#ef4444;">*</span>' : "", F2 = "width:100%; padding:8px 12px; font-size:14px; border:1px solid #cbd5e1; border-radius:6px; outline:none;";
|
|
@@ -1637,7 +1637,7 @@
|
|
|
1637
1637
|
</div>
|
|
1638
1638
|
`;
|
|
1639
1639
|
default:
|
|
1640
|
-
return ((
|
|
1640
|
+
return ((_d2 = e4.operations) == null ? void 0 : _d2.includes("set")) ? `
|
|
1641
1641
|
<div>
|
|
1642
1642
|
<label for="${m3}" style="display:block; font-size:14px; font-weight:500; margin-bottom:6px;">
|
|
1643
1643
|
${w3} ${O2}
|
|
@@ -7793,7 +7793,16 @@
|
|
|
7793
7793
|
return b2;
|
|
7794
7794
|
}
|
|
7795
7795
|
let bd = null, Sd = null;
|
|
7796
|
-
const vd = readDebugFlag(), kd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Cd = [400, 403], xd = "CORS", Id = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} },
|
|
7796
|
+
const vd = readDebugFlag(), kd = ["t.co", "*.twitter.com", "*.gravatar.com", "*.googleapis.com", "*.amazonaws.com", "*.smooch.io", "*.zendesk.com", "*.zdassets.com"], Cd = [400, 403], xd = "CORS", Id = "authorization", Md = "Authorization", Ed = { recordCanvas: false, recordCrossOriginIframes: false, collectFonts: false, inlineImages: false, recordPassword: false, recordRealName: true, recordCreditCardInfo: false, recordSsn: false, recordDob: false, sampling: {} }, _d = { level: ["info", "log", "warn", "error"], lengthThreshold: 1e4, stringifyOptions: { stringLengthLimit: 1e3, numOfKeysLimit: 20, depthOfLimit: 4 }, logger: "console" };
|
|
7797
|
+
function maskAuthorizationHeader(e2) {
|
|
7798
|
+
const a2 = e2[Id] ? Id : e2[Md] ? Md : null;
|
|
7799
|
+
if (!a2) return;
|
|
7800
|
+
const u2 = e2[a2], m2 = u2.indexOf(" ");
|
|
7801
|
+
if (-1 !== m2) {
|
|
7802
|
+
const w2 = u2.slice(0, m2 + 1), b2 = u2.slice(m2 + 1);
|
|
7803
|
+
b2.length > 8 ? e2[a2] = w2 + b2.slice(0, 4) + "*".repeat(b2.length - 8) + b2.slice(-4) : e2[a2] = w2 + "*".repeat(b2.length);
|
|
7804
|
+
} else u2.length > 8 ? e2[a2] = u2.slice(0, 4) + "*".repeat(u2.length - 8) + u2.slice(-4) : e2[a2] = "*".repeat(u2.length);
|
|
7805
|
+
}
|
|
7797
7806
|
function trackDomainChangesOnce() {
|
|
7798
7807
|
const e2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7799
7808
|
if (e2.routeWatcherIntervalId) return;
|
|
@@ -7873,7 +7882,7 @@
|
|
|
7873
7882
|
b2 = x2.href;
|
|
7874
7883
|
}
|
|
7875
7884
|
return shouldSkipHeadersPropagation(b2, e2) ? a3.apply(m2, w2) : (async function injectHeaderWrapper(e3, a4, u3, m3, w3, b3, x3) {
|
|
7876
|
-
var _a2, _b
|
|
7885
|
+
var _a2, _b;
|
|
7877
7886
|
if (!b3) return e3.apply(a4, u3);
|
|
7878
7887
|
let I3 = v4();
|
|
7879
7888
|
const E2 = getUrlAndStoredUuids(), _2 = w3.method || "GET", O2 = Date.now();
|
|
@@ -7898,8 +7907,11 @@
|
|
|
7898
7907
|
vd && console.warn("[Sailfish] Failed to capture request data:", e4);
|
|
7899
7908
|
}
|
|
7900
7909
|
delete D2[C];
|
|
7901
|
-
const $2 =
|
|
7902
|
-
$2 && delete D2[$2];
|
|
7910
|
+
const $2 = getFuncSpanHeader();
|
|
7911
|
+
$2 && delete D2[$2.name];
|
|
7912
|
+
const B2 = `${b3}/${E2.page_visit_uuid}/${I3}`;
|
|
7913
|
+
D2[C] = B2, $2 && (D2[$2.name] = $2.value);
|
|
7914
|
+
maskAuthorizationHeader(D2);
|
|
7903
7915
|
try {
|
|
7904
7916
|
let $3 = await (async function injectHeader(e4, a5, u4, m4, w4, b4, x4) {
|
|
7905
7917
|
const I4 = getFuncSpanHeader();
|
|
@@ -7913,8 +7925,8 @@
|
|
|
7913
7925
|
const E3 = { ...m4 }, _3 = new Headers(m4.headers || {});
|
|
7914
7926
|
return _3.set(C, `${w4}/${b4}/${x4}`), I4 && (_3.set(I4.name, I4.value), vd && console.log("[Sailfish] Added funcspan header to HTTP fetch:", { url: "string" == typeof u4 ? u4 : u4.href, header: I4.name })), E3.headers = _3, await e4.call(a5, u4, E3);
|
|
7915
7927
|
}
|
|
7916
|
-
})(e3, a4, m3, w3, b3, E2.page_visit_uuid, I3),
|
|
7917
|
-
Cd.includes($3.status) && (vd && console.log("Perform retry as status was fail:", $3),
|
|
7928
|
+
})(e3, a4, m3, w3, b3, E2.page_visit_uuid, I3), B3 = false;
|
|
7929
|
+
Cd.includes($3.status) && (vd && console.log("Perform retry as status was fail:", $3), delete D2[C], $3 = await (async function retryWithoutPropagateHeaders(e4, a5, u4, m4) {
|
|
7918
7930
|
try {
|
|
7919
7931
|
let m5 = u4[0], w4 = u4[1] || {};
|
|
7920
7932
|
if ("string" == typeof m5 || m5 instanceof URL) {
|
|
@@ -7932,7 +7944,7 @@
|
|
|
7932
7944
|
} catch (e5) {
|
|
7933
7945
|
throw vd && console.log(`Retry without ${C} for ${m4} also failed:`, e5), e5;
|
|
7934
7946
|
}
|
|
7935
|
-
})(e3, a4, u3, x3),
|
|
7947
|
+
})(e3, a4, u3, x3), B3 = true);
|
|
7936
7948
|
const U2 = Date.now(), j2 = $3.status, z2 = $3.ok, q2 = z2 ? "" : `Request Error: ${$3.statusText}`;
|
|
7937
7949
|
let V2;
|
|
7938
7950
|
try {
|
|
@@ -7949,11 +7961,11 @@
|
|
|
7949
7961
|
} catch (e4) {
|
|
7950
7962
|
vd && console.warn("[Sailfish] Failed to capture response headers:", e4), H2 = null;
|
|
7951
7963
|
}
|
|
7952
|
-
return sendEvent({ type: 27, timestamp: U2, sessionId: b3, data: { request_id: I3, session_id: b3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: x3, retry_without_trace_id:
|
|
7964
|
+
return sendEvent({ type: 27, timestamp: U2, sessionId: b3, data: { request_id: I3, session_id: b3, timestamp_start: O2, timestamp_end: U2, response_code: j2, success: z2, error: q2, method: _2, url: x3, retry_without_trace_id: B3, request_headers: D2, request_body: F2, response_headers: H2, response_body: V2 }, ...E2 }), $3;
|
|
7953
7965
|
} catch (m4) {
|
|
7954
|
-
const w4 = Date.now(), C2 = false, $3 = ((
|
|
7955
|
-
if (m4 instanceof TypeError && ((
|
|
7956
|
-
throw sendEvent({ type: 27, timestamp: w4, sessionId: b3, data: { request_id: I3, session_id: b3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: C2, error:
|
|
7966
|
+
const w4 = Date.now(), C2 = false, $3 = ((_a2 = m4.response) == null ? void 0 : _a2.status) || 500, B3 = m4.message || "Fetch request failed";
|
|
7967
|
+
if (m4 instanceof TypeError && ((_b = m4 == null ? void 0 : m4.message) == null ? void 0 : _b.toLowerCase().includes(xd.toLowerCase()))) return e3.apply(a4, u3);
|
|
7968
|
+
throw sendEvent({ type: 27, timestamp: w4, sessionId: b3, data: { request_id: I3, session_id: b3, timestamp_start: O2, timestamp_end: w4, response_code: $3, success: C2, error: B3, method: _2, url: x3, request_headers: D2, request_body: F2, response_body: null }, ...E2 }), m4;
|
|
7957
7969
|
}
|
|
7958
7970
|
})(a3, m2, w2, x2, I2, u2, b2);
|
|
7959
7971
|
} });
|
|
@@ -7986,7 +7998,7 @@
|
|
|
7986
7998
|
})(), D2 = getOrSetSessionId(), $2 = window.__sailfish_recorder || (window.__sailfish_recorder = {});
|
|
7987
7999
|
if ($2.sessionId = D2, $2.apiKey = e2, $2.backendApi = a2, $2.serviceAdditionalMetadata = I2, $2.initialized && $2.sessionId === D2 && $2.ws && 1 === $2.ws.readyState) trackDomainChangesOnce();
|
|
7988
8000
|
else {
|
|
7989
|
-
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(
|
|
8001
|
+
$2.domEventsInit || (initializeDomContentEvents(D2), $2.domEventsInit = true), $2.consoleInit || (initializeConsolePlugin(_d, D2), $2.consoleInit = true), $2.errorInit || (!(function initializeErrorInterceptor() {
|
|
7990
8002
|
window.addEventListener("error", (e3) => {
|
|
7991
8003
|
captureError(e3.error || e3.message);
|
|
7992
8004
|
}), window.addEventListener("unhandledrejection", (e3) => {
|
|
@@ -8024,7 +8036,7 @@
|
|
|
8024
8036
|
const _3 = Date.now();
|
|
8025
8037
|
let O3 = false;
|
|
8026
8038
|
const F3 = a4[0], D3 = { ...this._capturedRequestHeaders };
|
|
8027
|
-
|
|
8039
|
+
maskAuthorizationHeader(D3);
|
|
8028
8040
|
const emitFinished = (e4, a5, u4, b4, C2) => {
|
|
8029
8041
|
if (O3) return;
|
|
8030
8042
|
O3 = true;
|
|
@@ -8063,7 +8075,7 @@
|
|
|
8063
8075
|
sendMessage({ type: "deviceInfo", data: { deviceInfo: { language: navigator.language, userAgent: navigator.userAgent } } });
|
|
8064
8076
|
})();
|
|
8065
8077
|
try {
|
|
8066
|
-
const u3 = await fetchCaptureSettings(e2, a2), m3 = ((_a2 = u3.data) == null ? void 0 : _a2.captureSettingsFromApiKey) ||
|
|
8078
|
+
const u3 = await fetchCaptureSettings(e2, a2), m3 = ((_a2 = u3.data) == null ? void 0 : _a2.captureSettingsFromApiKey) || Ed;
|
|
8067
8079
|
if ($2.ws && 1 === $2.ws.readyState) return;
|
|
8068
8080
|
const C2 = withAppUrlMetadata(I2), x3 = await startRecordingSession(e2, D2, a2, _2, O2, F2, E2, "JS/TS", C2);
|
|
8069
8081
|
if ((_b = x3.data) == null ? void 0 : _b.startRecordingSession) {
|
|
@@ -8107,7 +8119,7 @@
|
|
|
8107
8119
|
}), J && window.addEventListener("beforeunload", () => {
|
|
8108
8120
|
clearPageVisitDataFromSessionStorage();
|
|
8109
8121
|
});
|
|
8110
|
-
e.DEFAULT_CAPTURE_SETTINGS =
|
|
8122
|
+
e.DEFAULT_CAPTURE_SETTINGS = Ed, e.DEFAULT_CONSOLE_RECORDING_SETTINGS = _d, e.STORAGE_VERSION = 1, e.addOrUpdateMetadata = function addOrUpdateMetadata(e2) {
|
|
8111
8123
|
const a2 = { type: "addOrUpdateMetadata", metadata: e2 };
|
|
8112
8124
|
Sd && JSON.stringify(Sd) === JSON.stringify(e2) || (Sd = e2, sendMessage(a2));
|
|
8113
8125
|
}, e.buildBatches = buildBatches, e.clearStaleFuncSpanState = clearStaleFuncSpanState, e.createTriageAndIssueFromRecorder = createTriageAndIssueFromRecorder, e.createTriageFromRecorder = createTriageFromRecorder, e.disableFunctionSpanTracking = disableFunctionSpanTracking, e.enableFunctionSpanTracking = enableFunctionSpanTracking, e.eventSize = eventSize, e.fetchCaptureSettings = fetchCaptureSettings, e.fetchEngineeringTicketPlatformIntegrations = fetchEngineeringTicketPlatformIntegrations, e.fetchFunctionSpanTrackingEnabled = fetchFunctionSpanTrackingEnabled, e.flushBufferedEvents = flushBufferedEvents, e.getFuncSpanHeader = getFuncSpanHeader, e.getOrSetSessionId = getOrSetSessionId, e.getUrlAndStoredUuids = getUrlAndStoredUuids, e.identify = function identify(e2, a2 = {}, u2 = false) {
|