@safaricom-mxl/web-sdk 0.0.19 → 0.0.20
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/DATA_EXPORT.md +9 -7
- package/dist/exporters/MXLLogExporter/MXLLogExporter.cjs +2 -2
- package/dist/exporters/MXLLogExporter/MXLLogExporter.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.d.cts +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.d.cts.map +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.d.ts +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.d.ts.map +1 -1
- package/dist/exporters/MXLLogExporter/MXLLogExporter.js +2 -2
- package/dist/exporters/MXLLogExporter/MXLLogExporter.js.map +1 -1
- package/dist/exporters/MXLLogExporter/types.d.cts +1 -1
- package/dist/exporters/MXLLogExporter/types.d.cts.map +1 -1
- package/dist/exporters/MXLLogExporter/types.d.ts +1 -1
- package/dist/exporters/MXLLogExporter/types.d.ts.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.cjs +1 -1
- package/dist/exporters/MXLLogExporter/utils.cjs.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.d.cts +1 -1
- package/dist/exporters/MXLLogExporter/utils.d.cts.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.d.ts +1 -1
- package/dist/exporters/MXLLogExporter/utils.d.ts.map +1 -1
- package/dist/exporters/MXLLogExporter/utils.js +2 -2
- package/dist/exporters/MXLLogExporter/utils.js.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.cjs +2 -2
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.cjs.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.cts +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.cts.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.ts +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.ts.map +1 -1
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.js +2 -2
- package/dist/exporters/MXLTraceExporter/MXLTraceExporter.js.map +1 -1
- package/dist/exporters/MXLTraceExporter/types.d.cts +1 -1
- package/dist/exporters/MXLTraceExporter/types.d.cts.map +1 -1
- package/dist/exporters/MXLTraceExporter/types.d.ts +1 -1
- package/dist/exporters/MXLTraceExporter/types.d.ts.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.cjs +1 -1
- package/dist/exporters/MXLTraceExporter/utils.cjs.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.d.cts +1 -1
- package/dist/exporters/MXLTraceExporter/utils.d.cts.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.d.ts +1 -1
- package/dist/exporters/MXLTraceExporter/utils.d.ts.map +1 -1
- package/dist/exporters/MXLTraceExporter/utils.js +2 -2
- package/dist/exporters/MXLTraceExporter/utils.js.map +1 -1
- package/dist/exporters/utils.cjs +2 -2
- package/dist/exporters/utils.cjs.map +1 -1
- package/dist/exporters/utils.d.cts +2 -2
- package/dist/exporters/utils.d.cts.map +1 -1
- package/dist/exporters/utils.d.ts +2 -2
- package/dist/exporters/utils.d.ts.map +1 -1
- package/dist/exporters/utils.js +2 -2
- package/dist/exporters/utils.js.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs +1 -0
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs.map +1 -1
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.cts.map +1 -1
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.ts.map +1 -1
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js +1 -0
- package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js.map +1 -1
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.cjs +32 -6
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.cjs.map +1 -1
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.cts +1 -2
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.cts.map +1 -1
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts +1 -2
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts.map +1 -1
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.js +32 -6
- package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.js.map +1 -1
- package/dist/instrumentations/replay/session-recording/config.cjs.map +1 -1
- package/dist/instrumentations/replay/session-recording/config.d.cts +1 -1
- package/dist/instrumentations/replay/session-recording/config.d.cts.map +1 -1
- package/dist/instrumentations/replay/session-recording/config.d.ts +1 -1
- package/dist/instrumentations/replay/session-recording/config.d.ts.map +1 -1
- package/dist/instrumentations/replay/session-recording/config.js.map +1 -1
- package/dist/instrumentations/replay/transport/replayTransport.cjs +11 -8
- package/dist/instrumentations/replay/transport/replayTransport.cjs.map +1 -1
- package/dist/instrumentations/replay/transport/replayTransport.d.cts +2 -1
- package/dist/instrumentations/replay/transport/replayTransport.d.cts.map +1 -1
- package/dist/instrumentations/replay/transport/replayTransport.d.ts +2 -1
- package/dist/instrumentations/replay/transport/replayTransport.d.ts.map +1 -1
- package/dist/instrumentations/replay/transport/replayTransport.js +12 -9
- package/dist/instrumentations/replay/transport/replayTransport.js.map +1 -1
- package/dist/instrumentations/replay/transport/types.d.cts +1 -0
- package/dist/instrumentations/replay/transport/types.d.cts.map +1 -1
- package/dist/instrumentations/replay/transport/types.d.ts +1 -0
- package/dist/instrumentations/replay/transport/types.d.ts.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs +19 -11
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts +3 -3
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts +3 -3
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts.map +1 -1
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js +19 -11
- package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js.map +1 -1
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.cjs +28 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.cjs.map +1 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.cts +23 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.cts.map +1 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts +23 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts.map +1 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.js +27 -0
- package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.js.map +1 -0
- package/dist/managers/MXLConfigManager/types.d.cts +16 -6
- package/dist/managers/MXLConfigManager/types.d.cts.map +1 -1
- package/dist/managers/MXLConfigManager/types.d.ts +16 -6
- package/dist/managers/MXLConfigManager/types.d.ts.map +1 -1
- package/dist/managers/MXLConfigManager/utils.cjs +66 -1
- package/dist/managers/MXLConfigManager/utils.cjs.map +1 -1
- package/dist/managers/MXLConfigManager/utils.d.cts +10 -3
- package/dist/managers/MXLConfigManager/utils.d.cts.map +1 -1
- package/dist/managers/MXLConfigManager/utils.d.ts +10 -3
- package/dist/managers/MXLConfigManager/utils.d.ts.map +1 -1
- package/dist/managers/MXLConfigManager/utils.js +64 -2
- package/dist/managers/MXLConfigManager/utils.js.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs +8 -0
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts +2 -0
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts +2 -0
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js +8 -0
- package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/types.d.cts +2 -0
- package/dist/managers/MXLSDKFeaturesManager/types.d.cts.map +1 -1
- package/dist/managers/MXLSDKFeaturesManager/types.d.ts +2 -0
- package/dist/managers/MXLSDKFeaturesManager/types.d.ts.map +1 -1
- package/dist/mxl-web-sdk.js +2 -2
- package/dist/mxl-web-sdk.js.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs +10 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts +3 -0
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts +3 -0
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js +10 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts +1 -0
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts.map +1 -1
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts +1 -0
- package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts.map +1 -1
- package/dist/resources/sdkConstants.cjs +1 -1
- package/dist/resources/sdkConstants.cjs.map +1 -1
- package/dist/resources/sdkConstants.d.cts +1 -1
- package/dist/resources/sdkConstants.d.ts +1 -1
- package/dist/resources/sdkConstants.js +1 -1
- package/dist/resources/sdkConstants.js.map +1 -1
- package/dist/sdk/initSDK.cjs +19 -11
- package/dist/sdk/initSDK.cjs.map +1 -1
- package/dist/sdk/initSDK.d.cts +2 -2
- package/dist/sdk/initSDK.d.cts.map +1 -1
- package/dist/sdk/initSDK.d.ts +2 -2
- package/dist/sdk/initSDK.d.ts.map +1 -1
- package/dist/sdk/initSDK.js +19 -11
- package/dist/sdk/initSDK.js.map +1 -1
- package/dist/sdk/types.d.cts +23 -7
- package/dist/sdk/types.d.cts.map +1 -1
- package/dist/sdk/types.d.ts +23 -7
- package/dist/sdk/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,25 +1,51 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts
|
|
3
|
+
const RRWEB_URL = "https://unpkg.com/rrweb@2.0.0-alpha.20/dist/rrweb.umd.cjs";
|
|
3
4
|
let rrwebModulePromise;
|
|
4
5
|
let rrwebModuleLoaderOverride;
|
|
6
|
+
let rrwebScriptUrl = RRWEB_URL;
|
|
7
|
+
function setRrwebScriptUrl(url) {
|
|
8
|
+
rrwebScriptUrl = url;
|
|
9
|
+
rrwebModulePromise = void 0;
|
|
10
|
+
}
|
|
11
|
+
function loadRrwebScript(src) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const s = document.createElement("script");
|
|
14
|
+
s.src = src;
|
|
15
|
+
s.async = true;
|
|
16
|
+
s.onload = () => resolve();
|
|
17
|
+
s.onerror = reject;
|
|
18
|
+
document.head.appendChild(s);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async function loadRrwebFromScript() {
|
|
22
|
+
if (typeof window === "undefined") throw new Error("no browser");
|
|
23
|
+
if (window.rrweb) return window.rrweb;
|
|
24
|
+
await loadRrwebScript(rrwebScriptUrl);
|
|
25
|
+
if (!window.rrweb) throw new Error("no rrweb");
|
|
26
|
+
return window.rrweb;
|
|
27
|
+
}
|
|
28
|
+
async function loadRrwebModuleImpl() {
|
|
29
|
+
try {
|
|
30
|
+
return await import("rrweb");
|
|
31
|
+
} catch {
|
|
32
|
+
return loadRrwebFromScript();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
5
35
|
function loadRrwebModule() {
|
|
6
36
|
if (rrwebModuleLoaderOverride) return rrwebModuleLoaderOverride();
|
|
7
|
-
if (rrwebModulePromise === void 0) rrwebModulePromise =
|
|
8
|
-
/* @vite-ignore */
|
|
9
|
-
"rrweb"
|
|
10
|
-
);
|
|
37
|
+
if (rrwebModulePromise === void 0) rrwebModulePromise = loadRrwebModuleImpl();
|
|
11
38
|
return rrwebModulePromise;
|
|
12
39
|
}
|
|
13
40
|
function resetRrwebModuleCacheForTests() {
|
|
14
41
|
rrwebModulePromise = void 0;
|
|
15
42
|
rrwebModuleLoaderOverride = void 0;
|
|
43
|
+
rrwebScriptUrl = RRWEB_URL;
|
|
16
44
|
}
|
|
17
45
|
function setRrwebModuleLoaderForTests(loader) {
|
|
18
46
|
rrwebModuleLoaderOverride = loader;
|
|
19
47
|
rrwebModulePromise = void 0;
|
|
20
48
|
}
|
|
21
|
-
/** No-op for ESM/CJS builds that lazy-load rrweb via dynamic import. */
|
|
22
|
-
function setRrwebScriptUrl(_url) {}
|
|
23
49
|
//#endregion
|
|
24
50
|
exports.loadRrwebModule = loadRrwebModule;
|
|
25
51
|
exports.resetRrwebModuleCacheForTests = resetRrwebModuleCacheForTests;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRrwebModule.esm.cjs","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"sourcesContent":["import type { RrwebModule } from './types.ts';\n\nlet rrwebModulePromise: Promise<RrwebModule> | undefined;\nlet rrwebModuleLoaderOverride: (() => Promise<RrwebModule>) | undefined;\n\nexport function loadRrwebModule(): Promise<RrwebModule> {\n if (rrwebModuleLoaderOverride) {\n return rrwebModuleLoaderOverride();\n }\n\n if (rrwebModulePromise === undefined) {\n rrwebModulePromise =
|
|
1
|
+
{"version":3,"file":"loadRrwebModule.esm.cjs","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"sourcesContent":["import type { RrwebModule } from './types.ts';\n\nconst RRWEB_URL =\n 'https://unpkg.com/rrweb@2.0.0-alpha.20/dist/rrweb.umd.cjs';\n\nlet rrwebModulePromise: Promise<RrwebModule> | undefined;\nlet rrwebModuleLoaderOverride: (() => Promise<RrwebModule>) | undefined;\nlet rrwebScriptUrl = RRWEB_URL;\n\nexport function setRrwebScriptUrl(url: string): void {\n rrwebScriptUrl = url;\n rrwebModulePromise = undefined;\n}\n\nfunction loadRrwebScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('script');\n s.src = src;\n s.async = true;\n s.onload = () => resolve();\n s.onerror = reject;\n document.head.appendChild(s);\n });\n}\n\nasync function loadRrwebFromScript(): Promise<RrwebModule> {\n if (typeof window === 'undefined') {\n throw new Error('no browser');\n }\n\n if (window.rrweb) {\n return window.rrweb;\n }\n\n await loadRrwebScript(rrwebScriptUrl);\n\n if (!window.rrweb) {\n throw new Error('no rrweb');\n }\n\n return window.rrweb;\n}\n\nasync function loadRrwebModuleImpl(): Promise<RrwebModule> {\n try {\n return await import('rrweb');\n } catch {\n return loadRrwebFromScript();\n }\n}\n\nexport function loadRrwebModule(): Promise<RrwebModule> {\n if (rrwebModuleLoaderOverride) {\n return rrwebModuleLoaderOverride();\n }\n\n if (rrwebModulePromise === undefined) {\n rrwebModulePromise = loadRrwebModuleImpl();\n }\n return rrwebModulePromise;\n}\n\nexport function resetRrwebModuleCacheForTests(): void {\n rrwebModulePromise = undefined;\n rrwebModuleLoaderOverride = undefined;\n rrwebScriptUrl = RRWEB_URL;\n}\n\nexport function setRrwebModuleLoaderForTests(\n loader: (() => Promise<RrwebModule>) | undefined,\n): void {\n rrwebModuleLoaderOverride = loader;\n rrwebModulePromise = undefined;\n}\n"],"mappings":";;AAEA,MAAM,YACJ;AAEF,IAAI;AACJ,IAAI;AACJ,IAAI,iBAAiB;AAErB,SAAgB,kBAAkB,KAAmB;AACnD,kBAAiB;AACjB,sBAAqB,KAAA;;AAGvB,SAAS,gBAAgB,KAA4B;AACnD,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,IAAI,SAAS,cAAc,SAAS;AAC1C,IAAE,MAAM;AACR,IAAE,QAAQ;AACV,IAAE,eAAe,SAAS;AAC1B,IAAE,UAAU;AACZ,WAAS,KAAK,YAAY,EAAE;GAC5B;;AAGJ,eAAe,sBAA4C;AACzD,KAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MAAM,aAAa;AAG/B,KAAI,OAAO,MACT,QAAO,OAAO;AAGhB,OAAM,gBAAgB,eAAe;AAErC,KAAI,CAAC,OAAO,MACV,OAAM,IAAI,MAAM,WAAW;AAG7B,QAAO,OAAO;;AAGhB,eAAe,sBAA4C;AACzD,KAAI;AACF,SAAO,MAAM,OAAO;SACd;AACN,SAAO,qBAAqB;;;AAIhC,SAAgB,kBAAwC;AACtD,KAAI,0BACF,QAAO,2BAA2B;AAGpC,KAAI,uBAAuB,KAAA,EACzB,sBAAqB,qBAAqB;AAE5C,QAAO;;AAGT,SAAgB,gCAAsC;AACpD,sBAAqB,KAAA;AACrB,6BAA4B,KAAA;AAC5B,kBAAiB;;AAGnB,SAAgB,6BACd,QACM;AACN,6BAA4B;AAC5B,sBAAqB,KAAA"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { RrwebModule } from "./types.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts
|
|
4
|
+
declare function setRrwebScriptUrl(url: string): void;
|
|
4
5
|
declare function loadRrwebModule(): Promise<RrwebModule>;
|
|
5
6
|
declare function resetRrwebModuleCacheForTests(): void;
|
|
6
7
|
declare function setRrwebModuleLoaderForTests(loader: (() => Promise<RrwebModule>) | undefined): void;
|
|
7
|
-
/** No-op for ESM/CJS builds that lazy-load rrweb via dynamic import. */
|
|
8
|
-
declare function setRrwebScriptUrl(_url: string): void;
|
|
9
8
|
//#endregion
|
|
10
9
|
export { loadRrwebModule, resetRrwebModuleCacheForTests, setRrwebModuleLoaderForTests, setRrwebScriptUrl };
|
|
11
10
|
//# sourceMappingURL=loadRrwebModule.esm.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRrwebModule.esm.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"loadRrwebModule.esm.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"mappings":";;;iBASgB,iBAAA,CAAkB,GAAA;AAAA,iBA0ClB,eAAA,CAAA,GAAmB,OAAA,CAAQ,WAAA;AAAA,iBAW3B,6BAAA,CAAA;AAAA,iBAMA,4BAAA,CACd,MAAA,SAAe,OAAA,CAAQ,WAAA"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { RrwebModule } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts
|
|
4
|
+
declare function setRrwebScriptUrl(url: string): void;
|
|
4
5
|
declare function loadRrwebModule(): Promise<RrwebModule>;
|
|
5
6
|
declare function resetRrwebModuleCacheForTests(): void;
|
|
6
7
|
declare function setRrwebModuleLoaderForTests(loader: (() => Promise<RrwebModule>) | undefined): void;
|
|
7
|
-
/** No-op for ESM/CJS builds that lazy-load rrweb via dynamic import. */
|
|
8
|
-
declare function setRrwebScriptUrl(_url: string): void;
|
|
9
8
|
//#endregion
|
|
10
9
|
export { loadRrwebModule, resetRrwebModuleCacheForTests, setRrwebModuleLoaderForTests, setRrwebScriptUrl };
|
|
11
10
|
//# sourceMappingURL=loadRrwebModule.esm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRrwebModule.esm.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"loadRrwebModule.esm.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"mappings":";;;iBASgB,iBAAA,CAAkB,GAAA;AAAA,iBA0ClB,eAAA,CAAA,GAAmB,OAAA,CAAQ,WAAA;AAAA,iBAW3B,6BAAA,CAAA;AAAA,iBAMA,4BAAA,CACd,MAAA,SAAe,OAAA,CAAQ,WAAA"}
|
|
@@ -1,24 +1,50 @@
|
|
|
1
1
|
//#region src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts
|
|
2
|
+
const RRWEB_URL = "https://unpkg.com/rrweb@2.0.0-alpha.20/dist/rrweb.umd.cjs";
|
|
2
3
|
let rrwebModulePromise;
|
|
3
4
|
let rrwebModuleLoaderOverride;
|
|
5
|
+
let rrwebScriptUrl = RRWEB_URL;
|
|
6
|
+
function setRrwebScriptUrl(url) {
|
|
7
|
+
rrwebScriptUrl = url;
|
|
8
|
+
rrwebModulePromise = void 0;
|
|
9
|
+
}
|
|
10
|
+
function loadRrwebScript(src) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const s = document.createElement("script");
|
|
13
|
+
s.src = src;
|
|
14
|
+
s.async = true;
|
|
15
|
+
s.onload = () => resolve();
|
|
16
|
+
s.onerror = reject;
|
|
17
|
+
document.head.appendChild(s);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function loadRrwebFromScript() {
|
|
21
|
+
if (typeof window === "undefined") throw new Error("no browser");
|
|
22
|
+
if (window.rrweb) return window.rrweb;
|
|
23
|
+
await loadRrwebScript(rrwebScriptUrl);
|
|
24
|
+
if (!window.rrweb) throw new Error("no rrweb");
|
|
25
|
+
return window.rrweb;
|
|
26
|
+
}
|
|
27
|
+
async function loadRrwebModuleImpl() {
|
|
28
|
+
try {
|
|
29
|
+
return await import("rrweb");
|
|
30
|
+
} catch {
|
|
31
|
+
return loadRrwebFromScript();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
4
34
|
function loadRrwebModule() {
|
|
5
35
|
if (rrwebModuleLoaderOverride) return rrwebModuleLoaderOverride();
|
|
6
|
-
if (rrwebModulePromise === void 0) rrwebModulePromise =
|
|
7
|
-
/* @vite-ignore */
|
|
8
|
-
"rrweb"
|
|
9
|
-
);
|
|
36
|
+
if (rrwebModulePromise === void 0) rrwebModulePromise = loadRrwebModuleImpl();
|
|
10
37
|
return rrwebModulePromise;
|
|
11
38
|
}
|
|
12
39
|
function resetRrwebModuleCacheForTests() {
|
|
13
40
|
rrwebModulePromise = void 0;
|
|
14
41
|
rrwebModuleLoaderOverride = void 0;
|
|
42
|
+
rrwebScriptUrl = RRWEB_URL;
|
|
15
43
|
}
|
|
16
44
|
function setRrwebModuleLoaderForTests(loader) {
|
|
17
45
|
rrwebModuleLoaderOverride = loader;
|
|
18
46
|
rrwebModulePromise = void 0;
|
|
19
47
|
}
|
|
20
|
-
/** No-op for ESM/CJS builds that lazy-load rrweb via dynamic import. */
|
|
21
|
-
function setRrwebScriptUrl(_url) {}
|
|
22
48
|
//#endregion
|
|
23
49
|
export { loadRrwebModule, resetRrwebModuleCacheForTests, setRrwebModuleLoaderForTests, setRrwebScriptUrl };
|
|
24
50
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadRrwebModule.esm.js","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"sourcesContent":["import type { RrwebModule } from './types.ts';\n\nlet rrwebModulePromise: Promise<RrwebModule> | undefined;\nlet rrwebModuleLoaderOverride: (() => Promise<RrwebModule>) | undefined;\n\nexport function loadRrwebModule(): Promise<RrwebModule> {\n if (rrwebModuleLoaderOverride) {\n return rrwebModuleLoaderOverride();\n }\n\n if (rrwebModulePromise === undefined) {\n rrwebModulePromise =
|
|
1
|
+
{"version":3,"file":"loadRrwebModule.esm.js","names":[],"sources":["../../../../src/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.ts"],"sourcesContent":["import type { RrwebModule } from './types.ts';\n\nconst RRWEB_URL =\n 'https://unpkg.com/rrweb@2.0.0-alpha.20/dist/rrweb.umd.cjs';\n\nlet rrwebModulePromise: Promise<RrwebModule> | undefined;\nlet rrwebModuleLoaderOverride: (() => Promise<RrwebModule>) | undefined;\nlet rrwebScriptUrl = RRWEB_URL;\n\nexport function setRrwebScriptUrl(url: string): void {\n rrwebScriptUrl = url;\n rrwebModulePromise = undefined;\n}\n\nfunction loadRrwebScript(src: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const s = document.createElement('script');\n s.src = src;\n s.async = true;\n s.onload = () => resolve();\n s.onerror = reject;\n document.head.appendChild(s);\n });\n}\n\nasync function loadRrwebFromScript(): Promise<RrwebModule> {\n if (typeof window === 'undefined') {\n throw new Error('no browser');\n }\n\n if (window.rrweb) {\n return window.rrweb;\n }\n\n await loadRrwebScript(rrwebScriptUrl);\n\n if (!window.rrweb) {\n throw new Error('no rrweb');\n }\n\n return window.rrweb;\n}\n\nasync function loadRrwebModuleImpl(): Promise<RrwebModule> {\n try {\n return await import('rrweb');\n } catch {\n return loadRrwebFromScript();\n }\n}\n\nexport function loadRrwebModule(): Promise<RrwebModule> {\n if (rrwebModuleLoaderOverride) {\n return rrwebModuleLoaderOverride();\n }\n\n if (rrwebModulePromise === undefined) {\n rrwebModulePromise = loadRrwebModuleImpl();\n }\n return rrwebModulePromise;\n}\n\nexport function resetRrwebModuleCacheForTests(): void {\n rrwebModulePromise = undefined;\n rrwebModuleLoaderOverride = undefined;\n rrwebScriptUrl = RRWEB_URL;\n}\n\nexport function setRrwebModuleLoaderForTests(\n loader: (() => Promise<RrwebModule>) | undefined,\n): void {\n rrwebModuleLoaderOverride = loader;\n rrwebModulePromise = undefined;\n}\n"],"mappings":";AAEA,MAAM,YACJ;AAEF,IAAI;AACJ,IAAI;AACJ,IAAI,iBAAiB;AAErB,SAAgB,kBAAkB,KAAmB;AACnD,kBAAiB;AACjB,sBAAqB,KAAA;;AAGvB,SAAS,gBAAgB,KAA4B;AACnD,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,IAAI,SAAS,cAAc,SAAS;AAC1C,IAAE,MAAM;AACR,IAAE,QAAQ;AACV,IAAE,eAAe,SAAS;AAC1B,IAAE,UAAU;AACZ,WAAS,KAAK,YAAY,EAAE;GAC5B;;AAGJ,eAAe,sBAA4C;AACzD,KAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MAAM,aAAa;AAG/B,KAAI,OAAO,MACT,QAAO,OAAO;AAGhB,OAAM,gBAAgB,eAAe;AAErC,KAAI,CAAC,OAAO,MACV,OAAM,IAAI,MAAM,WAAW;AAG7B,QAAO,OAAO;;AAGhB,eAAe,sBAA4C;AACzD,KAAI;AACF,SAAO,MAAM,OAAO;SACd;AACN,SAAO,qBAAqB;;;AAIhC,SAAgB,kBAAwC;AACtD,KAAI,0BACF,QAAO,2BAA2B;AAGpC,KAAI,uBAAuB,KAAA,EACzB,sBAAqB,qBAAqB;AAE5C,QAAO;;AAGT,SAAgB,gCAAsC;AACpD,sBAAqB,KAAA;AACrB,6BAA4B,KAAA;AAC5B,kBAAiB;;AAGnB,SAAgB,6BACd,QACM;AACN,6BAA4B;AAC5B,sBAAqB,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.cjs","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../ReplayInstrumentation/types';\nimport type { ReplayTransport } from '../transport/types';\n\nexport interface ResolvedReplayConfig {\n readonly appID: string;\n readonly userID: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly environment?: string;\n readonly replayEnabled: boolean;\n readonly replaySampleRate: number;\n readonly maskAllInputs: boolean;\n readonly maskAllText: boolean;\n readonly debug: boolean;\n readonly flushIntervalMs: number;\n readonly rrwebOptions: Omit<\n ReplayUserConfig,\n | 'debug'\n | 'enabled'\n | 'sampleRate'\n | 'maskAllInputs'\n | 'maskAllText'\n | 'flushIntervalMs'\n | 'omitRedundantInstrumentations'\n >;\n userId?: string;\n}\n\nexport interface ReplayContext {\n readonly appID: string;\n readonly userID: string;\n readonly
|
|
1
|
+
{"version":3,"file":"config.cjs","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../ReplayInstrumentation/types';\nimport type { ReplayTransport } from '../transport/types';\n\nexport interface ResolvedReplayConfig {\n readonly appID: string;\n readonly userID: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly environment?: string;\n readonly replayEnabled: boolean;\n readonly replaySampleRate: number;\n readonly maskAllInputs: boolean;\n readonly maskAllText: boolean;\n readonly debug: boolean;\n readonly flushIntervalMs: number;\n readonly rrwebOptions: Omit<\n ReplayUserConfig,\n | 'debug'\n | 'enabled'\n | 'sampleRate'\n | 'maskAllInputs'\n | 'maskAllText'\n | 'flushIntervalMs'\n | 'omitRedundantInstrumentations'\n >;\n userId?: string;\n}\n\nexport interface ReplayContext {\n readonly appID: string;\n readonly userID: string;\n readonly apiURL?: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly transport: ReplayTransport;\n}\n\nexport function resolveReplayConfig(\n context: ReplayContext,\n options?: ReplayUserConfig,\n recordUserSessions = true,\n): ResolvedReplayConfig {\n const {\n debug = false,\n enabled,\n sampleRate,\n maskAllInputs = true,\n maskAllText = true,\n flushIntervalMs = 5_000,\n omitRedundantInstrumentations: _omitRedundantInstrumentations,\n ...rrwebOptions\n } = options ?? {};\n\n return {\n appID: context.appID,\n appVersion: context.appVersion,\n debug,\n environment: undefined,\n flushIntervalMs,\n maskAllInputs,\n maskAllText,\n replayEnabled: enabled ?? recordUserSessions,\n replaySampleRate: sampleRate ?? 1,\n rrwebOptions,\n serviceName: context.serviceName,\n userID: context.userID,\n };\n}\n"],"mappings":";;AAqCA,SAAgB,oBACd,SACA,SACA,qBAAqB,MACC;CACtB,MAAM,EACJ,QAAQ,OACR,SACA,YACA,gBAAgB,MAChB,cAAc,MACd,kBAAkB,KAClB,+BAA+B,gCAC/B,GAAG,iBACD,WAAW,EAAE;AAEjB,QAAO;EACL,OAAO,QAAQ;EACf,YAAY,QAAQ;EACpB;EACA,aAAa,KAAA;EACb;EACA;EACA;EACA,eAAe,WAAW;EAC1B,kBAAkB,cAAc;EAChC;EACA,aAAa,QAAQ;EACrB,QAAQ,QAAQ;EACjB"}
|
|
@@ -20,7 +20,7 @@ interface ResolvedReplayConfig {
|
|
|
20
20
|
interface ReplayContext {
|
|
21
21
|
readonly appID: string;
|
|
22
22
|
readonly userID: string;
|
|
23
|
-
readonly
|
|
23
|
+
readonly apiURL?: string;
|
|
24
24
|
readonly appVersion?: string;
|
|
25
25
|
readonly serviceName?: string;
|
|
26
26
|
readonly transport: ReplayTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"mappings":";;;;UAGiB,oBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA;EAAA,SACA,aAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAAA,SACA,WAAA;EAAA,SACA,KAAA;EAAA,SACA,eAAA;EAAA,SACA,YAAA,EAAc,IAAA,CACrB,gBAAA;EASF,MAAA;AAAA;AAAA,UAGe,aAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,
|
|
1
|
+
{"version":3,"file":"config.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"mappings":";;;;UAGiB,oBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA;EAAA,SACA,aAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAAA,SACA,WAAA;EAAA,SACA,KAAA;EAAA,SACA,eAAA;EAAA,SACA,YAAA,EAAc,IAAA,CACrB,gBAAA;EASF,MAAA;AAAA;AAAA,UAGe,aAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,SAAA,EAAW,eAAA;AAAA;AAAA,iBAGN,mBAAA,CACd,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,gBAAA,EACV,kBAAA,aACC,oBAAA"}
|
|
@@ -20,7 +20,7 @@ interface ResolvedReplayConfig {
|
|
|
20
20
|
interface ReplayContext {
|
|
21
21
|
readonly appID: string;
|
|
22
22
|
readonly userID: string;
|
|
23
|
-
readonly
|
|
23
|
+
readonly apiURL?: string;
|
|
24
24
|
readonly appVersion?: string;
|
|
25
25
|
readonly serviceName?: string;
|
|
26
26
|
readonly transport: ReplayTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"mappings":";;;;UAGiB,oBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA;EAAA,SACA,aAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAAA,SACA,WAAA;EAAA,SACA,KAAA;EAAA,SACA,eAAA;EAAA,SACA,YAAA,EAAc,IAAA,CACrB,gBAAA;EASF,MAAA;AAAA;AAAA,UAGe,aAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,
|
|
1
|
+
{"version":3,"file":"config.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"mappings":";;;;UAGiB,oBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA;EAAA,SACA,aAAA;EAAA,SACA,gBAAA;EAAA,SACA,aAAA;EAAA,SACA,WAAA;EAAA,SACA,KAAA;EAAA,SACA,eAAA;EAAA,SACA,YAAA,EAAc,IAAA,CACrB,gBAAA;EASF,MAAA;AAAA;AAAA,UAGe,aAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,MAAA;EAAA,SACA,UAAA;EAAA,SACA,WAAA;EAAA,SACA,SAAA,EAAW,eAAA;AAAA;AAAA,iBAGN,mBAAA,CACd,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,gBAAA,EACV,kBAAA,aACC,oBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../ReplayInstrumentation/types';\nimport type { ReplayTransport } from '../transport/types';\n\nexport interface ResolvedReplayConfig {\n readonly appID: string;\n readonly userID: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly environment?: string;\n readonly replayEnabled: boolean;\n readonly replaySampleRate: number;\n readonly maskAllInputs: boolean;\n readonly maskAllText: boolean;\n readonly debug: boolean;\n readonly flushIntervalMs: number;\n readonly rrwebOptions: Omit<\n ReplayUserConfig,\n | 'debug'\n | 'enabled'\n | 'sampleRate'\n | 'maskAllInputs'\n | 'maskAllText'\n | 'flushIntervalMs'\n | 'omitRedundantInstrumentations'\n >;\n userId?: string;\n}\n\nexport interface ReplayContext {\n readonly appID: string;\n readonly userID: string;\n readonly
|
|
1
|
+
{"version":3,"file":"config.js","names":[],"sources":["../../../../src/instrumentations/replay/session-recording/config.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../ReplayInstrumentation/types';\nimport type { ReplayTransport } from '../transport/types';\n\nexport interface ResolvedReplayConfig {\n readonly appID: string;\n readonly userID: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly environment?: string;\n readonly replayEnabled: boolean;\n readonly replaySampleRate: number;\n readonly maskAllInputs: boolean;\n readonly maskAllText: boolean;\n readonly debug: boolean;\n readonly flushIntervalMs: number;\n readonly rrwebOptions: Omit<\n ReplayUserConfig,\n | 'debug'\n | 'enabled'\n | 'sampleRate'\n | 'maskAllInputs'\n | 'maskAllText'\n | 'flushIntervalMs'\n | 'omitRedundantInstrumentations'\n >;\n userId?: string;\n}\n\nexport interface ReplayContext {\n readonly appID: string;\n readonly userID: string;\n readonly apiURL?: string;\n readonly appVersion?: string;\n readonly serviceName?: string;\n readonly transport: ReplayTransport;\n}\n\nexport function resolveReplayConfig(\n context: ReplayContext,\n options?: ReplayUserConfig,\n recordUserSessions = true,\n): ResolvedReplayConfig {\n const {\n debug = false,\n enabled,\n sampleRate,\n maskAllInputs = true,\n maskAllText = true,\n flushIntervalMs = 5_000,\n omitRedundantInstrumentations: _omitRedundantInstrumentations,\n ...rrwebOptions\n } = options ?? {};\n\n return {\n appID: context.appID,\n appVersion: context.appVersion,\n debug,\n environment: undefined,\n flushIntervalMs,\n maskAllInputs,\n maskAllText,\n replayEnabled: enabled ?? recordUserSessions,\n replaySampleRate: sampleRate ?? 1,\n rrwebOptions,\n serviceName: context.serviceName,\n userID: context.userID,\n };\n}\n"],"mappings":";AAqCA,SAAgB,oBACd,SACA,SACA,qBAAqB,MACC;CACtB,MAAM,EACJ,QAAQ,OACR,SACA,YACA,gBAAgB,MAChB,cAAc,MACd,kBAAkB,KAClB,+BAA+B,gCAC/B,GAAG,iBACD,WAAW,EAAE;AAEjB,QAAO;EACL,OAAO,QAAQ;EACf,YAAY,QAAQ;EACpB;EACA,aAAa,KAAA;EACb;EACA;EACA;EACA,eAAe,WAAW;EAC1B,kBAAkB,cAAc;EAChC;EACA,aAAa,QAAQ;EACrB,QAAQ,QAAQ;EACjB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_instrumentations_replay_transport_gzip = require("./gzip.cjs");
|
|
3
3
|
const require_exporters_utils = require("../../../exporters/utils.cjs");
|
|
4
|
+
const require_managers_MXLConfigManager_utils = require("../../../managers/MXLConfigManager/utils.cjs");
|
|
4
5
|
//#region src/instrumentations/replay/transport/replayTransport.ts
|
|
5
6
|
/**
|
|
6
7
|
* Ported from Maple browser SDK (MIT), adapted for MXL auth and endpoints.
|
|
@@ -16,16 +17,17 @@ function warnDropped(what, error) {
|
|
|
16
17
|
function createReplayTransport(config) {
|
|
17
18
|
const headers = require_exporters_utils.getMXLHeaders(config.appID, config.userID);
|
|
18
19
|
const baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
20
|
+
const otelCollectorURL = config.otelCollectorURL.replace(/\/$/, "");
|
|
19
21
|
const ignoredPathPrefixes = [
|
|
20
|
-
`${baseUrl}/
|
|
21
|
-
`${baseUrl}/
|
|
22
|
-
`${
|
|
23
|
-
`${
|
|
22
|
+
`${baseUrl}/sessionReplays/`,
|
|
23
|
+
`${baseUrl}/sessionEvents`,
|
|
24
|
+
`${otelCollectorURL}/v1/logs`,
|
|
25
|
+
`${otelCollectorURL}/v1/traces`
|
|
24
26
|
];
|
|
25
27
|
const shouldIgnoreUrl = (url) => ignoredPathPrefixes.some((prefix) => url.startsWith(prefix));
|
|
26
28
|
const postSessionMeta = async (row, keepalive = false) => {
|
|
27
29
|
const body = `${JSON.stringify(row)}\n`;
|
|
28
|
-
await fetch(`${baseUrl}/
|
|
30
|
+
await fetch(`${baseUrl}/sessionReplays/meta`, {
|
|
29
31
|
body,
|
|
30
32
|
headers: {
|
|
31
33
|
...headers,
|
|
@@ -40,7 +42,7 @@ function createReplayTransport(config) {
|
|
|
40
42
|
const postSessionEvents = async (rows, keepalive = false) => {
|
|
41
43
|
if (rows.length === 0) return;
|
|
42
44
|
const body = `${rows.map((row) => JSON.stringify(row)).join("\n")}\n`;
|
|
43
|
-
await fetch(`${baseUrl}/
|
|
45
|
+
await fetch(`${baseUrl}/sessionEvents`, {
|
|
44
46
|
body,
|
|
45
47
|
headers: {
|
|
46
48
|
...headers,
|
|
@@ -53,7 +55,7 @@ function createReplayTransport(config) {
|
|
|
53
55
|
});
|
|
54
56
|
};
|
|
55
57
|
const postSessionBlob = async (meta, gzipped, keepalive = false) => {
|
|
56
|
-
await fetch(`${baseUrl}/
|
|
58
|
+
await fetch(`${baseUrl}/sessionReplays/blob`, {
|
|
57
59
|
body: gzipped,
|
|
58
60
|
headers: {
|
|
59
61
|
...headers,
|
|
@@ -80,7 +82,8 @@ function createReplayTransport(config) {
|
|
|
80
82
|
function createReplayTransportFromInit(args) {
|
|
81
83
|
return createReplayTransport({
|
|
82
84
|
appID: args.appID,
|
|
83
|
-
baseUrl:
|
|
85
|
+
baseUrl: require_managers_MXLConfigManager_utils.getApiURL(args.apiURL),
|
|
86
|
+
otelCollectorURL: require_managers_MXLConfigManager_utils.getOtelCollectorURL(args.otelCollectorURL),
|
|
84
87
|
userID: args.userID
|
|
85
88
|
});
|
|
86
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayTransport.cjs","names":["getMXLHeaders","
|
|
1
|
+
{"version":3,"file":"replayTransport.cjs","names":["getMXLHeaders","getApiURL","getOtelCollectorURL"],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"sourcesContent":["/**\n * Ported from Maple browser SDK (MIT), adapted for MXL auth and endpoints.\n * @see https://github.com/Makisuo/maple/tree/main/packages/browser/src/replay/transport.ts\n */\n\nimport { getMXLHeaders } from '../../../exporters/utils';\nimport {\n getApiURL,\n getOtelCollectorURL\n} from '../../../managers/MXLConfigManager/utils';\nimport { gzip } from './gzip';\nimport type { ChunkMeta, ReplayTransport, ReplayTransportConfig } from './types';\n\nexport { gzip };\n\nlet lastWarnAt = 0;\n\nfunction warnDropped(what: string, error: unknown): void {\n const now = Date.now();\n if (now - lastWarnAt < 30_000) {\n return;\n }\n lastWarnAt = now;\n // oxlint-disable-next-line no-console -- best-effort replay diagnostics\n console.warn(\n `[mxl] session replay ${what} failed (dropping; will retry on next chunk):`,\n error,\n );\n}\n\nexport function createReplayTransport(\n config: ReplayTransportConfig,\n): ReplayTransport {\n const headers = getMXLHeaders(config.appID, config.userID);\n const baseUrl = config.baseUrl.replace(/\\/$/, '');\n const otelCollectorURL = config.otelCollectorURL.replace(/\\/$/, '');\n\n const ignoredPathPrefixes = [\n `${baseUrl}/sessionReplays/`,\n `${baseUrl}/sessionEvents`,\n `${otelCollectorURL}/v1/logs`,\n `${otelCollectorURL}/v1/traces`,\n ];\n\n const shouldIgnoreUrl = (url: string): boolean =>\n ignoredPathPrefixes.some((prefix) => url.startsWith(prefix));\n\n const postSessionMeta = async (\n row: Record<string, unknown>,\n keepalive = false,\n ): Promise<void> => {\n const body = `${JSON.stringify(row)}\\n`;\n await fetch(`${baseUrl}/sessionReplays/meta`, {\n body,\n headers: {\n ...headers,\n 'content-type': 'application/x-ndjson',\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('metadata POST', error);\n });\n };\n\n const postSessionEvents = async (\n rows: ReadonlyArray<Record<string, unknown>>,\n keepalive = false,\n ): Promise<void> => {\n if (rows.length === 0) {\n return;\n }\n const body = `${rows.map((row) => JSON.stringify(row)).join('\\n')}\\n`;\n await fetch(`${baseUrl}/sessionEvents`, {\n body,\n headers: {\n ...headers,\n 'content-type': 'application/x-ndjson',\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('events POST', error);\n });\n };\n\n const postSessionBlob = async (\n meta: ChunkMeta,\n gzipped: Uint8Array,\n keepalive = false,\n ): Promise<void> => {\n await fetch(`${baseUrl}/sessionReplays/blob`, {\n body: gzipped as unknown as BodyInit,\n headers: {\n ...headers,\n 'content-type': 'application/octet-stream',\n 'x-mxl-chunk-seq': String(meta.chunkSeq),\n 'x-mxl-duration-ms': String(meta.durationMs),\n 'x-mxl-event-count': String(meta.eventCount),\n 'x-mxl-is-checkpoint': meta.isCheckpoint ? '1' : '0',\n 'x-mxl-session-id': meta.sessionId,\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('blob POST', error);\n });\n };\n\n return {\n postSessionBlob,\n postSessionEvents,\n postSessionMeta,\n shouldIgnoreUrl,\n };\n}\n\nexport function createReplayTransportFromInit(args: {\n appID: string;\n userID: string;\n apiURL?: string;\n otelCollectorURL?: string;\n}): ReplayTransport {\n return createReplayTransport({\n appID: args.appID,\n baseUrl: getApiURL(args.apiURL),\n otelCollectorURL: getOtelCollectorURL(args.otelCollectorURL),\n userID: args.userID,\n });\n}\n"],"mappings":";;;;;;;;;AAeA,IAAI,aAAa;AAEjB,SAAS,YAAY,MAAc,OAAsB;CACvD,MAAM,MAAM,KAAK,KAAK;AACtB,KAAI,MAAM,aAAa,IACrB;AAEF,cAAa;AAEb,SAAQ,KACN,wBAAwB,KAAK,gDAC7B,MACD;;AAGH,SAAgB,sBACd,QACiB;CACjB,MAAM,UAAUA,wBAAAA,cAAc,OAAO,OAAO,OAAO,OAAO;CAC1D,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,GAAG;CACjD,MAAM,mBAAmB,OAAO,iBAAiB,QAAQ,OAAO,GAAG;CAEnE,MAAM,sBAAsB;EAC1B,GAAG,QAAQ;EACX,GAAG,QAAQ;EACX,GAAG,iBAAiB;EACpB,GAAG,iBAAiB;EACrB;CAED,MAAM,mBAAmB,QACvB,oBAAoB,MAAM,WAAW,IAAI,WAAW,OAAO,CAAC;CAE9D,MAAM,kBAAkB,OACtB,KACA,YAAY,UACM;EAClB,MAAM,OAAO,GAAG,KAAK,UAAU,IAAI,CAAC;AACpC,QAAM,MAAM,GAAG,QAAQ,uBAAuB;GAC5C;GACA,SAAS;IACP,GAAG;IACH,gBAAgB;IACjB;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,iBAAiB,MAAM;IACnC;;CAGJ,MAAM,oBAAoB,OACxB,MACA,YAAY,UACM;AAClB,MAAI,KAAK,WAAW,EAClB;EAEF,MAAM,OAAO,GAAG,KAAK,KAAK,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AAClE,QAAM,MAAM,GAAG,QAAQ,iBAAiB;GACtC;GACA,SAAS;IACP,GAAG;IACH,gBAAgB;IACjB;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,eAAe,MAAM;IACjC;;CAGJ,MAAM,kBAAkB,OACtB,MACA,SACA,YAAY,UACM;AAClB,QAAM,MAAM,GAAG,QAAQ,uBAAuB;GAC5C,MAAM;GACN,SAAS;IACP,GAAG;IACH,gBAAgB;IAChB,mBAAmB,OAAO,KAAK,SAAS;IACxC,qBAAqB,OAAO,KAAK,WAAW;IAC5C,qBAAqB,OAAO,KAAK,WAAW;IAC5C,uBAAuB,KAAK,eAAe,MAAM;IACjD,oBAAoB,KAAK;IAC1B;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,aAAa,MAAM;IAC/B;;AAGJ,QAAO;EACL;EACA;EACA;EACA;EACD;;AAGH,SAAgB,8BAA8B,MAK1B;AAClB,QAAO,sBAAsB;EAC3B,OAAO,KAAK;EACZ,SAASC,wCAAAA,UAAU,KAAK,OAAO;EAC/B,kBAAkBC,wCAAAA,oBAAoB,KAAK,iBAAiB;EAC5D,QAAQ,KAAK;EACd,CAAC"}
|
|
@@ -6,7 +6,8 @@ declare function createReplayTransport(config: ReplayTransportConfig): ReplayTra
|
|
|
6
6
|
declare function createReplayTransportFromInit(args: {
|
|
7
7
|
appID: string;
|
|
8
8
|
userID: string;
|
|
9
|
-
|
|
9
|
+
apiURL?: string;
|
|
10
|
+
otelCollectorURL?: string;
|
|
10
11
|
}): ReplayTransport;
|
|
11
12
|
//#endregion
|
|
12
13
|
export { createReplayTransport, createReplayTransportFromInit, gzip };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayTransport.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"replayTransport.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"mappings":";;;;iBA8BgB,qBAAA,CACd,MAAA,EAAQ,qBAAA,GACP,eAAA;AAAA,iBAqFa,6BAAA,CAA8B,IAAA;EAC5C,KAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA;AAAA,IACE,eAAA"}
|
|
@@ -6,7 +6,8 @@ declare function createReplayTransport(config: ReplayTransportConfig): ReplayTra
|
|
|
6
6
|
declare function createReplayTransportFromInit(args: {
|
|
7
7
|
appID: string;
|
|
8
8
|
userID: string;
|
|
9
|
-
|
|
9
|
+
apiURL?: string;
|
|
10
|
+
otelCollectorURL?: string;
|
|
10
11
|
}): ReplayTransport;
|
|
11
12
|
//#endregion
|
|
12
13
|
export { createReplayTransport, createReplayTransportFromInit, gzip };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayTransport.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"replayTransport.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"mappings":";;;;iBA8BgB,qBAAA,CACd,MAAA,EAAQ,qBAAA,GACP,eAAA;AAAA,iBAqFa,6BAAA,CAA8B,IAAA;EAC5C,KAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA;AAAA,IACE,eAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { gzip } from "./gzip.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getMXLHeaders } from "../../../exporters/utils.js";
|
|
3
|
+
import { getApiURL, getOtelCollectorURL } from "../../../managers/MXLConfigManager/utils.js";
|
|
3
4
|
//#region src/instrumentations/replay/transport/replayTransport.ts
|
|
4
5
|
/**
|
|
5
6
|
* Ported from Maple browser SDK (MIT), adapted for MXL auth and endpoints.
|
|
@@ -15,16 +16,17 @@ function warnDropped(what, error) {
|
|
|
15
16
|
function createReplayTransport(config) {
|
|
16
17
|
const headers = getMXLHeaders(config.appID, config.userID);
|
|
17
18
|
const baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
19
|
+
const otelCollectorURL = config.otelCollectorURL.replace(/\/$/, "");
|
|
18
20
|
const ignoredPathPrefixes = [
|
|
19
|
-
`${baseUrl}/
|
|
20
|
-
`${baseUrl}/
|
|
21
|
-
`${
|
|
22
|
-
`${
|
|
21
|
+
`${baseUrl}/sessionReplays/`,
|
|
22
|
+
`${baseUrl}/sessionEvents`,
|
|
23
|
+
`${otelCollectorURL}/v1/logs`,
|
|
24
|
+
`${otelCollectorURL}/v1/traces`
|
|
23
25
|
];
|
|
24
26
|
const shouldIgnoreUrl = (url) => ignoredPathPrefixes.some((prefix) => url.startsWith(prefix));
|
|
25
27
|
const postSessionMeta = async (row, keepalive = false) => {
|
|
26
28
|
const body = `${JSON.stringify(row)}\n`;
|
|
27
|
-
await fetch(`${baseUrl}/
|
|
29
|
+
await fetch(`${baseUrl}/sessionReplays/meta`, {
|
|
28
30
|
body,
|
|
29
31
|
headers: {
|
|
30
32
|
...headers,
|
|
@@ -39,7 +41,7 @@ function createReplayTransport(config) {
|
|
|
39
41
|
const postSessionEvents = async (rows, keepalive = false) => {
|
|
40
42
|
if (rows.length === 0) return;
|
|
41
43
|
const body = `${rows.map((row) => JSON.stringify(row)).join("\n")}\n`;
|
|
42
|
-
await fetch(`${baseUrl}/
|
|
44
|
+
await fetch(`${baseUrl}/sessionEvents`, {
|
|
43
45
|
body,
|
|
44
46
|
headers: {
|
|
45
47
|
...headers,
|
|
@@ -52,7 +54,7 @@ function createReplayTransport(config) {
|
|
|
52
54
|
});
|
|
53
55
|
};
|
|
54
56
|
const postSessionBlob = async (meta, gzipped, keepalive = false) => {
|
|
55
|
-
await fetch(`${baseUrl}/
|
|
57
|
+
await fetch(`${baseUrl}/sessionReplays/blob`, {
|
|
56
58
|
body: gzipped,
|
|
57
59
|
headers: {
|
|
58
60
|
...headers,
|
|
@@ -79,7 +81,8 @@ function createReplayTransport(config) {
|
|
|
79
81
|
function createReplayTransportFromInit(args) {
|
|
80
82
|
return createReplayTransport({
|
|
81
83
|
appID: args.appID,
|
|
82
|
-
baseUrl:
|
|
84
|
+
baseUrl: getApiURL(args.apiURL),
|
|
85
|
+
otelCollectorURL: getOtelCollectorURL(args.otelCollectorURL),
|
|
83
86
|
userID: args.userID
|
|
84
87
|
});
|
|
85
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replayTransport.js","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"sourcesContent":["/**\n * Ported from Maple browser SDK (MIT), adapted for MXL auth and endpoints.\n * @see https://github.com/Makisuo/maple/tree/main/packages/browser/src/replay/transport.ts\n */\n\nimport {
|
|
1
|
+
{"version":3,"file":"replayTransport.js","names":[],"sources":["../../../../src/instrumentations/replay/transport/replayTransport.ts"],"sourcesContent":["/**\n * Ported from Maple browser SDK (MIT), adapted for MXL auth and endpoints.\n * @see https://github.com/Makisuo/maple/tree/main/packages/browser/src/replay/transport.ts\n */\n\nimport { getMXLHeaders } from '../../../exporters/utils';\nimport {\n getApiURL,\n getOtelCollectorURL\n} from '../../../managers/MXLConfigManager/utils';\nimport { gzip } from './gzip';\nimport type { ChunkMeta, ReplayTransport, ReplayTransportConfig } from './types';\n\nexport { gzip };\n\nlet lastWarnAt = 0;\n\nfunction warnDropped(what: string, error: unknown): void {\n const now = Date.now();\n if (now - lastWarnAt < 30_000) {\n return;\n }\n lastWarnAt = now;\n // oxlint-disable-next-line no-console -- best-effort replay diagnostics\n console.warn(\n `[mxl] session replay ${what} failed (dropping; will retry on next chunk):`,\n error,\n );\n}\n\nexport function createReplayTransport(\n config: ReplayTransportConfig,\n): ReplayTransport {\n const headers = getMXLHeaders(config.appID, config.userID);\n const baseUrl = config.baseUrl.replace(/\\/$/, '');\n const otelCollectorURL = config.otelCollectorURL.replace(/\\/$/, '');\n\n const ignoredPathPrefixes = [\n `${baseUrl}/sessionReplays/`,\n `${baseUrl}/sessionEvents`,\n `${otelCollectorURL}/v1/logs`,\n `${otelCollectorURL}/v1/traces`,\n ];\n\n const shouldIgnoreUrl = (url: string): boolean =>\n ignoredPathPrefixes.some((prefix) => url.startsWith(prefix));\n\n const postSessionMeta = async (\n row: Record<string, unknown>,\n keepalive = false,\n ): Promise<void> => {\n const body = `${JSON.stringify(row)}\\n`;\n await fetch(`${baseUrl}/sessionReplays/meta`, {\n body,\n headers: {\n ...headers,\n 'content-type': 'application/x-ndjson',\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('metadata POST', error);\n });\n };\n\n const postSessionEvents = async (\n rows: ReadonlyArray<Record<string, unknown>>,\n keepalive = false,\n ): Promise<void> => {\n if (rows.length === 0) {\n return;\n }\n const body = `${rows.map((row) => JSON.stringify(row)).join('\\n')}\\n`;\n await fetch(`${baseUrl}/sessionEvents`, {\n body,\n headers: {\n ...headers,\n 'content-type': 'application/x-ndjson',\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('events POST', error);\n });\n };\n\n const postSessionBlob = async (\n meta: ChunkMeta,\n gzipped: Uint8Array,\n keepalive = false,\n ): Promise<void> => {\n await fetch(`${baseUrl}/sessionReplays/blob`, {\n body: gzipped as unknown as BodyInit,\n headers: {\n ...headers,\n 'content-type': 'application/octet-stream',\n 'x-mxl-chunk-seq': String(meta.chunkSeq),\n 'x-mxl-duration-ms': String(meta.durationMs),\n 'x-mxl-event-count': String(meta.eventCount),\n 'x-mxl-is-checkpoint': meta.isCheckpoint ? '1' : '0',\n 'x-mxl-session-id': meta.sessionId,\n },\n keepalive,\n method: 'POST',\n }).catch((error) => {\n warnDropped('blob POST', error);\n });\n };\n\n return {\n postSessionBlob,\n postSessionEvents,\n postSessionMeta,\n shouldIgnoreUrl,\n };\n}\n\nexport function createReplayTransportFromInit(args: {\n appID: string;\n userID: string;\n apiURL?: string;\n otelCollectorURL?: string;\n}): ReplayTransport {\n return createReplayTransport({\n appID: args.appID,\n baseUrl: getApiURL(args.apiURL),\n otelCollectorURL: getOtelCollectorURL(args.otelCollectorURL),\n userID: args.userID,\n });\n}\n"],"mappings":";;;;;;;;AAeA,IAAI,aAAa;AAEjB,SAAS,YAAY,MAAc,OAAsB;CACvD,MAAM,MAAM,KAAK,KAAK;AACtB,KAAI,MAAM,aAAa,IACrB;AAEF,cAAa;AAEb,SAAQ,KACN,wBAAwB,KAAK,gDAC7B,MACD;;AAGH,SAAgB,sBACd,QACiB;CACjB,MAAM,UAAU,cAAc,OAAO,OAAO,OAAO,OAAO;CAC1D,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,GAAG;CACjD,MAAM,mBAAmB,OAAO,iBAAiB,QAAQ,OAAO,GAAG;CAEnE,MAAM,sBAAsB;EAC1B,GAAG,QAAQ;EACX,GAAG,QAAQ;EACX,GAAG,iBAAiB;EACpB,GAAG,iBAAiB;EACrB;CAED,MAAM,mBAAmB,QACvB,oBAAoB,MAAM,WAAW,IAAI,WAAW,OAAO,CAAC;CAE9D,MAAM,kBAAkB,OACtB,KACA,YAAY,UACM;EAClB,MAAM,OAAO,GAAG,KAAK,UAAU,IAAI,CAAC;AACpC,QAAM,MAAM,GAAG,QAAQ,uBAAuB;GAC5C;GACA,SAAS;IACP,GAAG;IACH,gBAAgB;IACjB;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,iBAAiB,MAAM;IACnC;;CAGJ,MAAM,oBAAoB,OACxB,MACA,YAAY,UACM;AAClB,MAAI,KAAK,WAAW,EAClB;EAEF,MAAM,OAAO,GAAG,KAAK,KAAK,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AAClE,QAAM,MAAM,GAAG,QAAQ,iBAAiB;GACtC;GACA,SAAS;IACP,GAAG;IACH,gBAAgB;IACjB;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,eAAe,MAAM;IACjC;;CAGJ,MAAM,kBAAkB,OACtB,MACA,SACA,YAAY,UACM;AAClB,QAAM,MAAM,GAAG,QAAQ,uBAAuB;GAC5C,MAAM;GACN,SAAS;IACP,GAAG;IACH,gBAAgB;IAChB,mBAAmB,OAAO,KAAK,SAAS;IACxC,qBAAqB,OAAO,KAAK,WAAW;IAC5C,qBAAqB,OAAO,KAAK,WAAW;IAC5C,uBAAuB,KAAK,eAAe,MAAM;IACjD,oBAAoB,KAAK;IAC1B;GACD;GACA,QAAQ;GACT,CAAC,CAAC,OAAO,UAAU;AAClB,eAAY,aAAa,MAAM;IAC/B;;AAGJ,QAAO;EACL;EACA;EACA;EACA;EACD;;AAGH,SAAgB,8BAA8B,MAK1B;AAClB,QAAO,sBAAsB;EAC3B,OAAO,KAAK;EACZ,SAAS,UAAU,KAAK,OAAO;EAC/B,kBAAkB,oBAAoB,KAAK,iBAAiB;EAC5D,QAAQ,KAAK;EACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/transport/types.ts"],"mappings":";UAAiB,qBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;AAAA;AAAA,UAGM,SAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;EAAA,SACA,UAAA;EAAA,SACA,UAAA;AAAA;AAAA,UAGM,eAAA;EACf,eAAA,GACE,GAAA,EAAK,MAAA,mBACL,SAAA,eACG,OAAA;EACL,iBAAA,GACE,IAAA,EAAM,aAAA,CAAc,MAAA,oBACpB,SAAA,eACG,OAAA;EACL,eAAA,GACE,IAAA,EAAM,SAAA,EACN,OAAA,EAAS,UAAA,EACT,SAAA,eACG,OAAA;EACL,eAAA,GAAkB,GAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/instrumentations/replay/transport/types.ts"],"mappings":";UAAiB,qBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;EAAA,SACA,gBAAA;AAAA;AAAA,UAGM,SAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;EAAA,SACA,UAAA;EAAA,SACA,UAAA;AAAA;AAAA,UAGM,eAAA;EACf,eAAA,GACE,GAAA,EAAK,MAAA,mBACL,SAAA,eACG,OAAA;EACL,iBAAA,GACE,IAAA,EAAM,aAAA,CAAc,MAAA,oBACpB,SAAA,eACG,OAAA;EACL,eAAA,GACE,IAAA,EAAM,SAAA,EACN,OAAA,EAAS,UAAA,EACT,SAAA,eACG,OAAA;EACL,eAAA,GAAkB,GAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/transport/types.ts"],"mappings":";UAAiB,qBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;AAAA;AAAA,UAGM,SAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;EAAA,SACA,UAAA;EAAA,SACA,UAAA;AAAA;AAAA,UAGM,eAAA;EACf,eAAA,GACE,GAAA,EAAK,MAAA,mBACL,SAAA,eACG,OAAA;EACL,iBAAA,GACE,IAAA,EAAM,aAAA,CAAc,MAAA,oBACpB,SAAA,eACG,OAAA;EACL,eAAA,GACE,IAAA,EAAM,SAAA,EACN,OAAA,EAAS,UAAA,EACT,SAAA,eACG,OAAA;EACL,eAAA,GAAkB,GAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/instrumentations/replay/transport/types.ts"],"mappings":";UAAiB,qBAAA;EAAA,SACN,KAAA;EAAA,SACA,MAAA;EAAA,SACA,OAAA;EAAA,SACA,gBAAA;AAAA;AAAA,UAGM,SAAA;EAAA,SACN,SAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;EAAA,SACA,UAAA;EAAA,SACA,UAAA;AAAA;AAAA,UAGM,eAAA;EACf,eAAA,GACE,GAAA,EAAK,MAAA,mBACL,SAAA,eACG,OAAA;EACL,iBAAA,GACE,IAAA,EAAM,aAAA,CAAc,MAAA,oBACpB,SAAA,eACG,OAAA;EACL,eAAA,GACE,IAAA,EAAM,SAAA,EACN,OAAA,EAAS,UAAA,EACT,SAAA,eACG,OAAA;EACL,eAAA,GAAkB,GAAA;AAAA"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_managers_MXLConfigManager_utils = require("./utils.cjs");
|
|
3
4
|
const require_resources_webSdkResource = require("../../resources/webSdkResource.cjs");
|
|
4
5
|
const require_managers_MXLConfigManager_constants = require("./constants.cjs");
|
|
5
|
-
const require_managers_MXLConfigManager_utils = require("./utils.cjs");
|
|
6
6
|
let _opentelemetry_api = require("@opentelemetry/api");
|
|
7
7
|
//#region src/managers/MXLConfigManager/MXLDynamicConfigManager.ts
|
|
8
8
|
const parseRemoteConfig = (remoteConfig) => {
|
|
9
9
|
const parsed = { samplingPct: remoteConfig.threshold };
|
|
10
|
-
if (remoteConfig.
|
|
11
|
-
if (remoteConfig.
|
|
10
|
+
if (remoteConfig.networkSpanForwarding !== void 0) parsed.networkSpansForwardingThreshold = remoteConfig.networkSpanForwarding.pctEnabled;
|
|
11
|
+
if (remoteConfig.serviceName !== void 0 && remoteConfig.serviceName !== "") parsed.serviceName = remoteConfig.serviceName;
|
|
12
|
+
if (remoteConfig.emptySessionAvoidanceEnabledPct !== void 0) parsed.emptySessionAvoidanceEnabledPct = remoteConfig.emptySessionAvoidanceEnabledPct;
|
|
13
|
+
if (remoteConfig.sessionReplay !== void 0) parsed.replay = { ...remoteConfig.sessionReplay };
|
|
12
14
|
return parsed;
|
|
13
15
|
};
|
|
14
16
|
var MXLDynamicConfigManager = class {
|
|
@@ -19,14 +21,14 @@ var MXLDynamicConfigManager = class {
|
|
|
19
21
|
_baseConfig;
|
|
20
22
|
_sdkConfig;
|
|
21
23
|
_etag = null;
|
|
22
|
-
/** Non-empty `
|
|
24
|
+
/** Non-empty `serviceName` from the last persisted or fetched remote payload (if any). */
|
|
23
25
|
_remoteSourceServiceName;
|
|
24
|
-
constructor({ appID, appVersion, deviceId, diag: diagParam = _opentelemetry_api.diag.createComponentLogger({ namespace: "mxl-config-manager" }), storage = window.localStorage, defaultConfig = {},
|
|
26
|
+
constructor({ appID, appVersion, deviceId, diag: diagParam = _opentelemetry_api.diag.createComponentLogger({ namespace: "mxl-config-manager" }), storage = window.localStorage, defaultConfig = {}, apiURL } = {}) {
|
|
25
27
|
if (appID && appVersion && deviceId) this._remoteConfigURL = require_managers_MXLConfigManager_utils.getConfigURL(appID, {
|
|
26
28
|
appVersion,
|
|
27
29
|
deviceId,
|
|
28
30
|
osVersion: "1"
|
|
29
|
-
},
|
|
31
|
+
}, apiURL);
|
|
30
32
|
this._diag = diagParam;
|
|
31
33
|
this._storage = storage;
|
|
32
34
|
const storedRemoteConfig = this._getRemoteConfigFromStorage();
|
|
@@ -53,7 +55,7 @@ var MXLDynamicConfigManager = class {
|
|
|
53
55
|
return this._sdkConfig;
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
|
-
* OpenTelemetry `service.name`: remote `
|
|
58
|
+
* OpenTelemetry `service.name`: remote `serviceName` wins, then explicit init `serviceName`,
|
|
57
59
|
* then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.
|
|
58
60
|
*/
|
|
59
61
|
resolveApplicationServiceName(initServiceName) {
|
|
@@ -66,8 +68,8 @@ var MXLDynamicConfigManager = class {
|
|
|
66
68
|
return require_resources_webSdkResource.OTEL_DEFAULT_SERVICE_NAME;
|
|
67
69
|
}
|
|
68
70
|
_captureRemoteServiceName(raw) {
|
|
69
|
-
if (raw.
|
|
70
|
-
const sn = raw.
|
|
71
|
+
if (raw.serviceName === void 0) return;
|
|
72
|
+
const sn = raw.serviceName.trim();
|
|
71
73
|
this._remoteSourceServiceName = sn.length > 0 ? sn : void 0;
|
|
72
74
|
}
|
|
73
75
|
async refreshRemoteConfig() {
|
|
@@ -96,7 +98,13 @@ var MXLDynamicConfigManager = class {
|
|
|
96
98
|
_getRemoteConfigFromStorage() {
|
|
97
99
|
try {
|
|
98
100
|
const configString = this._storage.getItem(require_managers_MXLConfigManager_constants.LOCAL_STORAGE_REMOTE_CONFIG_KEY);
|
|
99
|
-
if (configString)
|
|
101
|
+
if (configString) {
|
|
102
|
+
const stored = JSON.parse(configString);
|
|
103
|
+
return {
|
|
104
|
+
config: require_managers_MXLConfigManager_utils.normalizeStoredRemoteConfig(stored.config),
|
|
105
|
+
etag: stored.etag
|
|
106
|
+
};
|
|
107
|
+
}
|
|
100
108
|
return null;
|
|
101
109
|
} catch (error) {
|
|
102
110
|
this._diag.warn(`Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -111,7 +119,7 @@ var MXLDynamicConfigManager = class {
|
|
|
111
119
|
this._diag.warn(`Failed to fetch remote config from ${url}: ${response.statusText}`);
|
|
112
120
|
return null;
|
|
113
121
|
}
|
|
114
|
-
return [await response.json(), etag];
|
|
122
|
+
return [require_managers_MXLConfigManager_utils.normalizeStoredRemoteConfig(await response.json()), etag];
|
|
115
123
|
}
|
|
116
124
|
};
|
|
117
125
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MXLDynamicConfigManager.cjs","names":["diag","getConfigURL","DEFAULT_CONFIG","OTEL_DEFAULT_SERVICE_NAME","LOCAL_STORAGE_REMOTE_CONFIG_KEY"],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk/types';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.
|
|
1
|
+
{"version":3,"file":"MXLDynamicConfigManager.cjs","names":["diag","getConfigURL","DEFAULT_CONFIG","OTEL_DEFAULT_SERVICE_NAME","LOCAL_STORAGE_REMOTE_CONFIG_KEY","normalizeStoredRemoteConfig"],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk/types';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL, normalizeStoredRemoteConfig } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.networkSpanForwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.networkSpanForwarding.pctEnabled;\n }\n\n if (\n remoteConfig.serviceName !== undefined &&\n remoteConfig.serviceName !== ''\n ) {\n parsed.serviceName = remoteConfig.serviceName;\n }\n\n if (remoteConfig.emptySessionAvoidanceEnabledPct !== undefined) {\n parsed.emptySessionAvoidanceEnabledPct =\n remoteConfig.emptySessionAvoidanceEnabledPct;\n }\n\n if (remoteConfig.sessionReplay !== undefined) {\n parsed.replay = { ...remoteConfig.sessionReplay };\n }\n\n return parsed;\n};\n\nexport class MXLDynamicConfigManager implements DynamicConfigManager {\n // Set to null if appID is not provided, in that case only rely on local config\n private readonly _remoteConfigURL: string | null = null;\n private readonly _diag: DiagLogger;\n private readonly _storage: Storage;\n /** Defaults + user's `dynamicSDKConfig` / init-time merge; survives remote refresh merges. */\n private readonly _baseConfig: DynamicSDKConfig;\n\n private _sdkConfig: DynamicSDKConfig;\n private _etag: string | null = null;\n /** Non-empty `serviceName` from the last persisted or fetched remote payload (if any). */\n private _remoteSourceServiceName: string | undefined;\n\n public constructor({\n appID,\n appVersion,\n deviceId,\n diag: diagParam = diag.createComponentLogger({\n namespace: 'mxl-config-manager',\n }),\n storage = window.localStorage,\n defaultConfig = {},\n apiURL,\n }: MXLDynamicConfigManagerArgs = {}) {\n if (appID && appVersion && deviceId) {\n this._remoteConfigURL = getConfigURL(\n appID,\n {\n appVersion,\n deviceId,\n // TODO: Replace with actual OS version once we start capturing it\n osVersion: '1',\n },\n apiURL,\n );\n }\n\n this._diag = diagParam;\n this._storage = storage;\n\n const storedRemoteConfig = this._getRemoteConfigFromStorage();\n\n if (storedRemoteConfig) {\n this._etag = storedRemoteConfig.etag;\n this._captureRemoteServiceName(storedRemoteConfig.config);\n }\n\n // Default config merged with any user-provided defaults; user-provided values take precedence.\n // Kept around so refreshRemoteConfig can re-merge against it instead of dropping defaults.\n this._baseConfig = {\n ...DEFAULT_CONFIG,\n ...defaultConfig,\n };\n\n this._sdkConfig = {\n ...this._baseConfig,\n // Stored remote config values will override both defaults and user-provided defaults\n ...(storedRemoteConfig\n ? parseRemoteConfig(storedRemoteConfig.config)\n : {}),\n };\n }\n\n public setConfig(config: Partial<DynamicSDKConfig>): void {\n this._sdkConfig = {\n ...this._sdkConfig,\n ...config,\n };\n }\n\n public getConfig(): DynamicSDKConfig {\n return this._sdkConfig;\n }\n\n /**\n * OpenTelemetry `service.name`: remote `serviceName` wins, then explicit init `serviceName`,\n * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.\n */\n public resolveApplicationServiceName(initServiceName?: string): string {\n const remote = this._remoteSourceServiceName?.trim();\n if (remote) {\n return remote;\n }\n const fromInit = initServiceName?.trim();\n if (fromInit) {\n return fromInit;\n }\n const fromBootstrap = this._baseConfig.serviceName?.trim();\n if (fromBootstrap) {\n return fromBootstrap;\n }\n return OTEL_DEFAULT_SERVICE_NAME;\n }\n\n private _captureRemoteServiceName(raw: RemoteConfig): void {\n if (raw.serviceName === undefined) {\n return;\n }\n const sn = raw.serviceName.trim();\n this._remoteSourceServiceName = sn.length > 0 ? sn : undefined;\n }\n\n // No-op if not sending data to mxl\n public async refreshRemoteConfig(): Promise<void> {\n if (!this._remoteConfigURL) {\n return;\n }\n\n try {\n const remoteConfigResponse = await this._fetchRemoteConfig(\n this._remoteConfigURL,\n );\n\n if (!remoteConfigResponse) {\n this._diag.debug('No changes in remote config, skipping update');\n return;\n }\n\n const [remoteConfig, etag] = remoteConfigResponse;\n this._captureRemoteServiceName(remoteConfig);\n this._storage.setItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n JSON.stringify({\n config: remoteConfig,\n etag,\n } as StoredRemoteConfig),\n );\n\n this._sdkConfig = {\n ...this._baseConfig,\n ...parseRemoteConfig(remoteConfig),\n };\n this._etag = etag;\n } catch (error: unknown) {\n this._diag.warn(\n `Failed to refresh remote config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _getRemoteConfigFromStorage(): StoredRemoteConfig | null {\n try {\n const configString = this._storage.getItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n );\n\n if (configString) {\n const stored = JSON.parse(configString) as {\n config: unknown;\n etag: string | null;\n };\n\n return {\n config: normalizeStoredRemoteConfig(stored.config),\n etag: stored.etag,\n };\n }\n\n return null;\n } catch (error) {\n this._diag.warn(\n `Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return null;\n }\n }\n\n private async _fetchRemoteConfig(\n url: string,\n ): Promise<[RemoteConfig, string | null] | null> {\n const response = await fetch(url, {\n headers: this._etag ? { 'If-None-Match': this._etag } : {},\n });\n\n const etag = response.headers.get('etag');\n\n // Nothing changed, return null\n if (response.status === 304) {\n return null;\n }\n\n if (!response.ok) {\n this._diag.warn(\n `Failed to fetch remote config from ${url}: ${response.statusText}`,\n );\n\n return null;\n }\n\n const remoteConfig = normalizeStoredRemoteConfig(await response.json());\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":";;;;;;;AAYA,MAAM,qBAAqB,iBAAiD;CAC1E,MAAM,SAA2B,EAC/B,aAAa,aAAa,WAC3B;AAED,KAAI,aAAa,0BAA0B,KAAA,EACzC,QAAO,kCACL,aAAa,sBAAsB;AAGvC,KACE,aAAa,gBAAgB,KAAA,KAC7B,aAAa,gBAAgB,GAE7B,QAAO,cAAc,aAAa;AAGpC,KAAI,aAAa,oCAAoC,KAAA,EACnD,QAAO,kCACL,aAAa;AAGjB,KAAI,aAAa,kBAAkB,KAAA,EACjC,QAAO,SAAS,EAAE,GAAG,aAAa,eAAe;AAGnD,QAAO;;AAGT,IAAa,0BAAb,MAAqE;CAEnE,mBAAmD;CACnD;CACA;;CAEA;CAEA;CACA,QAA+B;;CAE/B;CAEA,YAAmB,EACjB,OACA,YACA,UACA,MAAM,YAAYA,mBAAAA,KAAK,sBAAsB,EAC3C,WAAW,sBACZ,CAAC,EACF,UAAU,OAAO,cACjB,gBAAgB,EAAE,EAClB,WAC+B,EAAE,EAAE;AACnC,MAAI,SAAS,cAAc,SACzB,MAAK,mBAAmBC,wCAAAA,aACtB,OACA;GACE;GACA;GAEA,WAAW;GACZ,EACD,OACD;AAGH,OAAK,QAAQ;AACb,OAAK,WAAW;EAEhB,MAAM,qBAAqB,KAAK,6BAA6B;AAE7D,MAAI,oBAAoB;AACtB,QAAK,QAAQ,mBAAmB;AAChC,QAAK,0BAA0B,mBAAmB,OAAO;;AAK3D,OAAK,cAAc;GACjB,GAAGC,4CAAAA;GACH,GAAG;GACJ;AAED,OAAK,aAAa;GAChB,GAAG,KAAK;GAER,GAAI,qBACA,kBAAkB,mBAAmB,OAAO,GAC5C,EAAE;GACP;;CAGH,UAAiB,QAAyC;AACxD,OAAK,aAAa;GAChB,GAAG,KAAK;GACR,GAAG;GACJ;;CAGH,YAAqC;AACnC,SAAO,KAAK;;;;;;CAOd,8BAAqC,iBAAkC;EACrE,MAAM,SAAS,KAAK,0BAA0B,MAAM;AACpD,MAAI,OACF,QAAO;EAET,MAAM,WAAW,iBAAiB,MAAM;AACxC,MAAI,SACF,QAAO;EAET,MAAM,gBAAgB,KAAK,YAAY,aAAa,MAAM;AAC1D,MAAI,cACF,QAAO;AAET,SAAOC,iCAAAA;;CAGT,0BAAkC,KAAyB;AACzD,MAAI,IAAI,gBAAgB,KAAA,EACtB;EAEF,MAAM,KAAK,IAAI,YAAY,MAAM;AACjC,OAAK,2BAA2B,GAAG,SAAS,IAAI,KAAK,KAAA;;CAIvD,MAAa,sBAAqC;AAChD,MAAI,CAAC,KAAK,iBACR;AAGF,MAAI;GACF,MAAM,uBAAuB,MAAM,KAAK,mBACtC,KAAK,iBACN;AAED,OAAI,CAAC,sBAAsB;AACzB,SAAK,MAAM,MAAM,+CAA+C;AAChE;;GAGF,MAAM,CAAC,cAAc,QAAQ;AAC7B,QAAK,0BAA0B,aAAa;AAC5C,QAAK,SAAS,QACZC,4CAAAA,iCACA,KAAK,UAAU;IACb,QAAQ;IACR;IACD,CAAuB,CACzB;AAED,QAAK,aAAa;IAChB,GAAG,KAAK;IACR,GAAG,kBAAkB,aAAa;IACnC;AACD,QAAK,QAAQ;WACN,OAAgB;AACvB,QAAK,MAAM,KACT,oCAAoC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAC3F;;;CAIL,8BAAiE;AAC/D,MAAI;GACF,MAAM,eAAe,KAAK,SAAS,QACjCA,4CAAAA,gCACD;AAED,OAAI,cAAc;IAChB,MAAM,SAAS,KAAK,MAAM,aAAa;AAKvC,WAAO;KACL,QAAQC,wCAAAA,4BAA4B,OAAO,OAAO;KAClD,MAAM,OAAO;KACd;;AAGH,UAAO;WACA,OAAO;AACd,QAAK,MAAM,KACT,+CAA+C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GACtG;AAED,UAAO;;;CAIX,MAAc,mBACZ,KAC+C;EAC/C,MAAM,WAAW,MAAM,MAAM,KAAK,EAChC,SAAS,KAAK,QAAQ,EAAE,iBAAiB,KAAK,OAAO,GAAG,EAAE,EAC3D,CAAC;EAEF,MAAM,OAAO,SAAS,QAAQ,IAAI,OAAO;AAGzC,MAAI,SAAS,WAAW,IACtB,QAAO;AAGT,MAAI,CAAC,SAAS,IAAI;AAChB,QAAK,MAAM,KACT,sCAAsC,IAAI,IAAI,SAAS,aACxD;AAED,UAAO;;AAKT,SAAO,CAFcA,wCAAAA,4BAA4B,MAAM,SAAS,MAAM,CAElD,EAAE,KAAK"}
|