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