@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.
Files changed (156) hide show
  1. package/DATA_EXPORT.md +9 -7
  2. package/dist/exporters/MXLLogExporter/MXLLogExporter.cjs +2 -2
  3. package/dist/exporters/MXLLogExporter/MXLLogExporter.cjs.map +1 -1
  4. package/dist/exporters/MXLLogExporter/MXLLogExporter.d.cts +1 -1
  5. package/dist/exporters/MXLLogExporter/MXLLogExporter.d.cts.map +1 -1
  6. package/dist/exporters/MXLLogExporter/MXLLogExporter.d.ts +1 -1
  7. package/dist/exporters/MXLLogExporter/MXLLogExporter.d.ts.map +1 -1
  8. package/dist/exporters/MXLLogExporter/MXLLogExporter.js +2 -2
  9. package/dist/exporters/MXLLogExporter/MXLLogExporter.js.map +1 -1
  10. package/dist/exporters/MXLLogExporter/types.d.cts +1 -1
  11. package/dist/exporters/MXLLogExporter/types.d.cts.map +1 -1
  12. package/dist/exporters/MXLLogExporter/types.d.ts +1 -1
  13. package/dist/exporters/MXLLogExporter/types.d.ts.map +1 -1
  14. package/dist/exporters/MXLLogExporter/utils.cjs +1 -1
  15. package/dist/exporters/MXLLogExporter/utils.cjs.map +1 -1
  16. package/dist/exporters/MXLLogExporter/utils.d.cts +1 -1
  17. package/dist/exporters/MXLLogExporter/utils.d.cts.map +1 -1
  18. package/dist/exporters/MXLLogExporter/utils.d.ts +1 -1
  19. package/dist/exporters/MXLLogExporter/utils.d.ts.map +1 -1
  20. package/dist/exporters/MXLLogExporter/utils.js +2 -2
  21. package/dist/exporters/MXLLogExporter/utils.js.map +1 -1
  22. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.cjs +2 -2
  23. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.cjs.map +1 -1
  24. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.cts +1 -1
  25. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.cts.map +1 -1
  26. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.ts +1 -1
  27. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.d.ts.map +1 -1
  28. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.js +2 -2
  29. package/dist/exporters/MXLTraceExporter/MXLTraceExporter.js.map +1 -1
  30. package/dist/exporters/MXLTraceExporter/types.d.cts +1 -1
  31. package/dist/exporters/MXLTraceExporter/types.d.cts.map +1 -1
  32. package/dist/exporters/MXLTraceExporter/types.d.ts +1 -1
  33. package/dist/exporters/MXLTraceExporter/types.d.ts.map +1 -1
  34. package/dist/exporters/MXLTraceExporter/utils.cjs +1 -1
  35. package/dist/exporters/MXLTraceExporter/utils.cjs.map +1 -1
  36. package/dist/exporters/MXLTraceExporter/utils.d.cts +1 -1
  37. package/dist/exporters/MXLTraceExporter/utils.d.cts.map +1 -1
  38. package/dist/exporters/MXLTraceExporter/utils.d.ts +1 -1
  39. package/dist/exporters/MXLTraceExporter/utils.d.ts.map +1 -1
  40. package/dist/exporters/MXLTraceExporter/utils.js +2 -2
  41. package/dist/exporters/MXLTraceExporter/utils.js.map +1 -1
  42. package/dist/exporters/utils.cjs +2 -2
  43. package/dist/exporters/utils.cjs.map +1 -1
  44. package/dist/exporters/utils.d.cts +2 -2
  45. package/dist/exporters/utils.d.cts.map +1 -1
  46. package/dist/exporters/utils.d.ts +2 -2
  47. package/dist/exporters/utils.d.ts.map +1 -1
  48. package/dist/exporters/utils.js +2 -2
  49. package/dist/exporters/utils.js.map +1 -1
  50. package/dist/index.d.cts +2 -2
  51. package/dist/index.d.ts +2 -2
  52. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs +1 -0
  53. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs.map +1 -1
  54. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.cts.map +1 -1
  55. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.ts.map +1 -1
  56. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js +1 -0
  57. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js.map +1 -1
  58. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.cjs +32 -6
  59. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.cjs.map +1 -1
  60. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.cts +1 -2
  61. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.cts.map +1 -1
  62. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts +1 -2
  63. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.d.ts.map +1 -1
  64. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.js +32 -6
  65. package/dist/instrumentations/replay/rrwebLoader/loadRrwebModule.esm.js.map +1 -1
  66. package/dist/instrumentations/replay/session-recording/config.cjs.map +1 -1
  67. package/dist/instrumentations/replay/session-recording/config.d.cts +1 -1
  68. package/dist/instrumentations/replay/session-recording/config.d.cts.map +1 -1
  69. package/dist/instrumentations/replay/session-recording/config.d.ts +1 -1
  70. package/dist/instrumentations/replay/session-recording/config.d.ts.map +1 -1
  71. package/dist/instrumentations/replay/session-recording/config.js.map +1 -1
  72. package/dist/instrumentations/replay/transport/replayTransport.cjs +11 -8
  73. package/dist/instrumentations/replay/transport/replayTransport.cjs.map +1 -1
  74. package/dist/instrumentations/replay/transport/replayTransport.d.cts +2 -1
  75. package/dist/instrumentations/replay/transport/replayTransport.d.cts.map +1 -1
  76. package/dist/instrumentations/replay/transport/replayTransport.d.ts +2 -1
  77. package/dist/instrumentations/replay/transport/replayTransport.d.ts.map +1 -1
  78. package/dist/instrumentations/replay/transport/replayTransport.js +12 -9
  79. package/dist/instrumentations/replay/transport/replayTransport.js.map +1 -1
  80. package/dist/instrumentations/replay/transport/types.d.cts +1 -0
  81. package/dist/instrumentations/replay/transport/types.d.cts.map +1 -1
  82. package/dist/instrumentations/replay/transport/types.d.ts +1 -0
  83. package/dist/instrumentations/replay/transport/types.d.ts.map +1 -1
  84. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs +19 -11
  85. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs.map +1 -1
  86. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts +3 -3
  87. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts.map +1 -1
  88. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts +3 -3
  89. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts.map +1 -1
  90. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js +19 -11
  91. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js.map +1 -1
  92. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.cjs +28 -0
  93. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.cjs.map +1 -0
  94. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.cts +23 -0
  95. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.cts.map +1 -0
  96. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts +23 -0
  97. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts.map +1 -0
  98. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.js +27 -0
  99. package/dist/managers/MXLConfigManager/resolveEffectiveReplayConfig.js.map +1 -0
  100. package/dist/managers/MXLConfigManager/types.d.cts +16 -6
  101. package/dist/managers/MXLConfigManager/types.d.cts.map +1 -1
  102. package/dist/managers/MXLConfigManager/types.d.ts +16 -6
  103. package/dist/managers/MXLConfigManager/types.d.ts.map +1 -1
  104. package/dist/managers/MXLConfigManager/utils.cjs +66 -1
  105. package/dist/managers/MXLConfigManager/utils.cjs.map +1 -1
  106. package/dist/managers/MXLConfigManager/utils.d.cts +10 -3
  107. package/dist/managers/MXLConfigManager/utils.d.cts.map +1 -1
  108. package/dist/managers/MXLConfigManager/utils.d.ts +10 -3
  109. package/dist/managers/MXLConfigManager/utils.d.ts.map +1 -1
  110. package/dist/managers/MXLConfigManager/utils.js +64 -2
  111. package/dist/managers/MXLConfigManager/utils.js.map +1 -1
  112. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs +8 -0
  113. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs.map +1 -1
  114. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts +2 -0
  115. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts.map +1 -1
  116. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts +2 -0
  117. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts.map +1 -1
  118. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js +8 -0
  119. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js.map +1 -1
  120. package/dist/managers/MXLSDKFeaturesManager/types.d.cts +2 -0
  121. package/dist/managers/MXLSDKFeaturesManager/types.d.cts.map +1 -1
  122. package/dist/managers/MXLSDKFeaturesManager/types.d.ts +2 -0
  123. package/dist/managers/MXLSDKFeaturesManager/types.d.ts.map +1 -1
  124. package/dist/mxl-web-sdk.js +2 -2
  125. package/dist/mxl-web-sdk.js.map +1 -1
  126. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs +10 -1
  127. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs.map +1 -1
  128. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts +3 -0
  129. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts.map +1 -1
  130. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts +3 -0
  131. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts.map +1 -1
  132. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js +10 -1
  133. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js.map +1 -1
  134. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts +1 -0
  135. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts.map +1 -1
  136. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts +1 -0
  137. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts.map +1 -1
  138. package/dist/resources/sdkConstants.cjs +1 -1
  139. package/dist/resources/sdkConstants.cjs.map +1 -1
  140. package/dist/resources/sdkConstants.d.cts +1 -1
  141. package/dist/resources/sdkConstants.d.ts +1 -1
  142. package/dist/resources/sdkConstants.js +1 -1
  143. package/dist/resources/sdkConstants.js.map +1 -1
  144. package/dist/sdk/initSDK.cjs +19 -11
  145. package/dist/sdk/initSDK.cjs.map +1 -1
  146. package/dist/sdk/initSDK.d.cts +2 -2
  147. package/dist/sdk/initSDK.d.cts.map +1 -1
  148. package/dist/sdk/initSDK.d.ts +2 -2
  149. package/dist/sdk/initSDK.d.ts.map +1 -1
  150. package/dist/sdk/initSDK.js +19 -11
  151. package/dist/sdk/initSDK.js.map +1 -1
  152. package/dist/sdk/types.d.cts +23 -7
  153. package/dist/sdk/types.d.cts.map +1 -1
  154. package/dist/sdk/types.d.ts +23 -7
  155. package/dist/sdk/types.d.ts.map +1 -1
  156. package/package.json +1 -1
@@ -10,7 +10,7 @@ declare class MXLDynamicConfigManager implements DynamicConfigManager {
10
10
  private readonly _baseConfig;
11
11
  private _sdkConfig;
12
12
  private _etag;
13
- /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */
13
+ /** Non-empty `serviceName` from the last persisted or fetched remote payload (if any). */
14
14
  private _remoteSourceServiceName;
15
15
  constructor({
16
16
  appID,
@@ -19,12 +19,12 @@ declare class MXLDynamicConfigManager implements DynamicConfigManager {
19
19
  diag: diagParam,
20
20
  storage,
21
21
  defaultConfig,
22
- mxlConfigURL
22
+ apiURL
23
23
  }?: MXLDynamicConfigManagerArgs);
24
24
  setConfig(config: Partial<DynamicSDKConfig>): void;
25
25
  getConfig(): DynamicSDKConfig;
26
26
  /**
27
- * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,
27
+ * OpenTelemetry `service.name`: remote `serviceName` wins, then explicit init `serviceName`,
28
28
  * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.
29
29
  */
30
30
  resolveApplicationServiceName(initServiceName?: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAgCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;;mBAEA,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAQA;EAAA,QANA,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EAPa;;;;EAe1B,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAyCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;;mBAEA,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAQA;EAAA,QANA,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EAPa;;;;EAe1B,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QA4BM,kBAAA;AAAA"}
@@ -10,7 +10,7 @@ declare class MXLDynamicConfigManager implements DynamicConfigManager {
10
10
  private readonly _baseConfig;
11
11
  private _sdkConfig;
12
12
  private _etag;
13
- /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */
13
+ /** Non-empty `serviceName` from the last persisted or fetched remote payload (if any). */
14
14
  private _remoteSourceServiceName;
15
15
  constructor({
16
16
  appID,
@@ -19,12 +19,12 @@ declare class MXLDynamicConfigManager implements DynamicConfigManager {
19
19
  diag: diagParam,
20
20
  storage,
21
21
  defaultConfig,
22
- mxlConfigURL
22
+ apiURL
23
23
  }?: MXLDynamicConfigManagerArgs);
24
24
  setConfig(config: Partial<DynamicSDKConfig>): void;
25
25
  getConfig(): DynamicSDKConfig;
26
26
  /**
27
- * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,
27
+ * OpenTelemetry `service.name`: remote `serviceName` wins, then explicit init `serviceName`,
28
28
  * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.
29
29
  */
30
30
  resolveApplicationServiceName(initServiceName?: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAgCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;;mBAEA,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAQA;EAAA,QANA,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EAPa;;;;EAe1B,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAyCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;;mBAEA,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAQA;EAAA,QANA,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EAPa;;;;EAe1B,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QA4BM,kBAAA;AAAA"}
@@ -1,12 +1,14 @@
1
+ import { getConfigURL, normalizeStoredRemoteConfig } from "./utils.js";
1
2
  import { OTEL_DEFAULT_SERVICE_NAME } from "../../resources/webSdkResource.js";
2
3
  import { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from "./constants.js";
3
- import { getConfigURL } from "./utils.js";
4
4
  import { diag } from "@opentelemetry/api";
5
5
  //#region src/managers/MXLConfigManager/MXLDynamicConfigManager.ts
6
6
  const parseRemoteConfig = (remoteConfig) => {
7
7
  const parsed = { samplingPct: remoteConfig.threshold };
8
- if (remoteConfig.network_span_forwarding !== void 0) parsed.networkSpansForwardingThreshold = remoteConfig.network_span_forwarding.pct_enabled;
9
- if (remoteConfig.service_name !== void 0 && remoteConfig.service_name !== "") parsed.serviceName = remoteConfig.service_name;
8
+ if (remoteConfig.networkSpanForwarding !== void 0) parsed.networkSpansForwardingThreshold = remoteConfig.networkSpanForwarding.pctEnabled;
9
+ if (remoteConfig.serviceName !== void 0 && remoteConfig.serviceName !== "") parsed.serviceName = remoteConfig.serviceName;
10
+ if (remoteConfig.emptySessionAvoidanceEnabledPct !== void 0) parsed.emptySessionAvoidanceEnabledPct = remoteConfig.emptySessionAvoidanceEnabledPct;
11
+ if (remoteConfig.sessionReplay !== void 0) parsed.replay = { ...remoteConfig.sessionReplay };
10
12
  return parsed;
11
13
  };
12
14
  var MXLDynamicConfigManager = class {
@@ -17,14 +19,14 @@ var MXLDynamicConfigManager = class {
17
19
  _baseConfig;
18
20
  _sdkConfig;
19
21
  _etag = null;
20
- /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */
22
+ /** Non-empty `serviceName` from the last persisted or fetched remote payload (if any). */
21
23
  _remoteSourceServiceName;
22
- constructor({ appID, appVersion, deviceId, diag: diagParam = diag.createComponentLogger({ namespace: "mxl-config-manager" }), storage = window.localStorage, defaultConfig = {}, mxlConfigURL } = {}) {
24
+ constructor({ appID, appVersion, deviceId, diag: diagParam = diag.createComponentLogger({ namespace: "mxl-config-manager" }), storage = window.localStorage, defaultConfig = {}, apiURL } = {}) {
23
25
  if (appID && appVersion && deviceId) this._remoteConfigURL = getConfigURL(appID, {
24
26
  appVersion,
25
27
  deviceId,
26
28
  osVersion: "1"
27
- }, mxlConfigURL);
29
+ }, apiURL);
28
30
  this._diag = diagParam;
29
31
  this._storage = storage;
30
32
  const storedRemoteConfig = this._getRemoteConfigFromStorage();
@@ -51,7 +53,7 @@ var MXLDynamicConfigManager = class {
51
53
  return this._sdkConfig;
52
54
  }
53
55
  /**
54
- * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,
56
+ * OpenTelemetry `service.name`: remote `serviceName` wins, then explicit init `serviceName`,
55
57
  * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.
56
58
  */
57
59
  resolveApplicationServiceName(initServiceName) {
@@ -64,8 +66,8 @@ var MXLDynamicConfigManager = class {
64
66
  return OTEL_DEFAULT_SERVICE_NAME;
65
67
  }
66
68
  _captureRemoteServiceName(raw) {
67
- if (raw.service_name === void 0) return;
68
- const sn = raw.service_name.trim();
69
+ if (raw.serviceName === void 0) return;
70
+ const sn = raw.serviceName.trim();
69
71
  this._remoteSourceServiceName = sn.length > 0 ? sn : void 0;
70
72
  }
71
73
  async refreshRemoteConfig() {
@@ -94,7 +96,13 @@ var MXLDynamicConfigManager = class {
94
96
  _getRemoteConfigFromStorage() {
95
97
  try {
96
98
  const configString = this._storage.getItem(LOCAL_STORAGE_REMOTE_CONFIG_KEY);
97
- if (configString) return JSON.parse(configString);
99
+ if (configString) {
100
+ const stored = JSON.parse(configString);
101
+ return {
102
+ config: normalizeStoredRemoteConfig(stored.config),
103
+ etag: stored.etag
104
+ };
105
+ }
98
106
  return null;
99
107
  } catch (error) {
100
108
  this._diag.warn(`Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`);
@@ -109,7 +117,7 @@ var MXLDynamicConfigManager = class {
109
117
  this._diag.warn(`Failed to fetch remote config from ${url}: ${response.statusText}`);
110
118
  return null;
111
119
  }
112
- return [await response.json(), etag];
120
+ return [normalizeStoredRemoteConfig(await response.json()), etag];
113
121
  }
114
122
  };
115
123
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.js","names":[],"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.network_span_forwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.network_span_forwarding.pct_enabled;\n }\n\n if (\n remoteConfig.service_name !== undefined &&\n remoteConfig.service_name !== ''\n ) {\n parsed.serviceName = remoteConfig.service_name;\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 `service_name` 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 mxlConfigURL,\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 mxlConfigURL,\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 `service_name` 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.service_name === undefined) {\n return;\n }\n const sn = raw.service_name.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 return JSON.parse(configString) as StoredRemoteConfig;\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 = (await response.json()) as RemoteConfig;\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.js","names":[],"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":"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"}
@@ -0,0 +1,28 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts
3
+ function resolveEffectiveReplayConfig({ recordUserSessions, replay, dynamicConfig, isSessionReplayEnabled }) {
4
+ if (!isSessionReplayEnabled) return {
5
+ recordUserSessions: false,
6
+ replay
7
+ };
8
+ const remoteReplay = dynamicConfig.replay;
9
+ if (!remoteReplay) return {
10
+ recordUserSessions,
11
+ replay
12
+ };
13
+ const merged = { ...replay };
14
+ if (remoteReplay.sampleRate !== void 0) merged.sampleRate = remoteReplay.sampleRate;
15
+ if (remoteReplay.maskAllInputs !== void 0) merged.maskAllInputs = remoteReplay.maskAllInputs;
16
+ if (remoteReplay.maskAllText !== void 0) merged.maskAllText = remoteReplay.maskAllText;
17
+ if (remoteReplay.flushIntervalMs !== void 0) merged.flushIntervalMs = remoteReplay.flushIntervalMs;
18
+ if (remoteReplay.omitRedundantInstrumentations !== void 0) merged.omitRedundantInstrumentations = remoteReplay.omitRedundantInstrumentations;
19
+ if (remoteReplay.debug !== void 0) merged.debug = remoteReplay.debug;
20
+ return {
21
+ recordUserSessions,
22
+ replay: merged
23
+ };
24
+ }
25
+ //#endregion
26
+ exports.resolveEffectiveReplayConfig = resolveEffectiveReplayConfig;
27
+
28
+ //# sourceMappingURL=resolveEffectiveReplayConfig.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEffectiveReplayConfig.cjs","names":[],"sources":["../../../src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../../instrumentations/replay/ReplayInstrumentation/types';\nimport type { DynamicSDKConfig } from '../../sdk/types';\n\nexport interface ResolveEffectiveReplayConfigArgs {\n recordUserSessions: boolean;\n replay?: ReplayUserConfig;\n dynamicConfig: DynamicSDKConfig;\n isSessionReplayEnabled: boolean;\n}\n\nexport interface EffectiveReplayConfig {\n recordUserSessions: boolean;\n replay?: ReplayUserConfig;\n}\n\nexport function resolveEffectiveReplayConfig({\n recordUserSessions,\n replay,\n dynamicConfig,\n isSessionReplayEnabled,\n}: ResolveEffectiveReplayConfigArgs): EffectiveReplayConfig {\n if (!isSessionReplayEnabled) {\n return { recordUserSessions: false, replay };\n }\n\n const remoteReplay = dynamicConfig.replay;\n if (!remoteReplay) {\n return { recordUserSessions, replay };\n }\n\n const merged: ReplayUserConfig = { ...replay };\n\n if (remoteReplay.sampleRate !== undefined) {\n merged.sampleRate = remoteReplay.sampleRate;\n }\n if (remoteReplay.maskAllInputs !== undefined) {\n merged.maskAllInputs = remoteReplay.maskAllInputs;\n }\n if (remoteReplay.maskAllText !== undefined) {\n merged.maskAllText = remoteReplay.maskAllText;\n }\n if (remoteReplay.flushIntervalMs !== undefined) {\n merged.flushIntervalMs = remoteReplay.flushIntervalMs;\n }\n if (remoteReplay.omitRedundantInstrumentations !== undefined) {\n merged.omitRedundantInstrumentations =\n remoteReplay.omitRedundantInstrumentations;\n }\n if (remoteReplay.debug !== undefined) {\n merged.debug = remoteReplay.debug;\n }\n\n return {\n recordUserSessions,\n replay: merged,\n };\n}\n"],"mappings":";;AAeA,SAAgB,6BAA6B,EAC3C,oBACA,QACA,eACA,0BAC0D;AAC1D,KAAI,CAAC,uBACH,QAAO;EAAE,oBAAoB;EAAO;EAAQ;CAG9C,MAAM,eAAe,cAAc;AACnC,KAAI,CAAC,aACH,QAAO;EAAE;EAAoB;EAAQ;CAGvC,MAAM,SAA2B,EAAE,GAAG,QAAQ;AAE9C,KAAI,aAAa,eAAe,KAAA,EAC9B,QAAO,aAAa,aAAa;AAEnC,KAAI,aAAa,kBAAkB,KAAA,EACjC,QAAO,gBAAgB,aAAa;AAEtC,KAAI,aAAa,gBAAgB,KAAA,EAC/B,QAAO,cAAc,aAAa;AAEpC,KAAI,aAAa,oBAAoB,KAAA,EACnC,QAAO,kBAAkB,aAAa;AAExC,KAAI,aAAa,kCAAkC,KAAA,EACjD,QAAO,gCACL,aAAa;AAEjB,KAAI,aAAa,UAAU,KAAA,EACzB,QAAO,QAAQ,aAAa;AAG9B,QAAO;EACL;EACA,QAAQ;EACT"}
@@ -0,0 +1,23 @@
1
+ import { ReplayUserConfig } from "../../instrumentations/replay/ReplayInstrumentation/types.cjs";
2
+ import { DynamicSDKConfig } from "../../sdk/types.cjs";
3
+
4
+ //#region src/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts
5
+ interface ResolveEffectiveReplayConfigArgs {
6
+ recordUserSessions: boolean;
7
+ replay?: ReplayUserConfig;
8
+ dynamicConfig: DynamicSDKConfig;
9
+ isSessionReplayEnabled: boolean;
10
+ }
11
+ interface EffectiveReplayConfig {
12
+ recordUserSessions: boolean;
13
+ replay?: ReplayUserConfig;
14
+ }
15
+ declare function resolveEffectiveReplayConfig({
16
+ recordUserSessions,
17
+ replay,
18
+ dynamicConfig,
19
+ isSessionReplayEnabled
20
+ }: ResolveEffectiveReplayConfigArgs): EffectiveReplayConfig;
21
+ //#endregion
22
+ export { EffectiveReplayConfig, ResolveEffectiveReplayConfigArgs, resolveEffectiveReplayConfig };
23
+ //# sourceMappingURL=resolveEffectiveReplayConfig.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEffectiveReplayConfig.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts"],"mappings":";;;;UAGiB,gCAAA;EACf,kBAAA;EACA,MAAA,GAAS,gBAAA;EACT,aAAA,EAAe,gBAAA;EACf,sBAAA;AAAA;AAAA,UAGe,qBAAA;EACf,kBAAA;EACA,MAAA,GAAS,gBAAA;AAAA;AAAA,iBAGK,4BAAA,CAAA;EACd,kBAAA;EACA,MAAA;EACA,aAAA;EACA;AAAA,GACC,gCAAA,GAAmC,qBAAA"}
@@ -0,0 +1,23 @@
1
+ import { ReplayUserConfig } from "../../instrumentations/replay/ReplayInstrumentation/types.js";
2
+ import { DynamicSDKConfig } from "../../sdk/types.js";
3
+
4
+ //#region src/managers/MXLConfigManager/resolveEffectiveReplayConfig.d.ts
5
+ interface ResolveEffectiveReplayConfigArgs {
6
+ recordUserSessions: boolean;
7
+ replay?: ReplayUserConfig;
8
+ dynamicConfig: DynamicSDKConfig;
9
+ isSessionReplayEnabled: boolean;
10
+ }
11
+ interface EffectiveReplayConfig {
12
+ recordUserSessions: boolean;
13
+ replay?: ReplayUserConfig;
14
+ }
15
+ declare function resolveEffectiveReplayConfig({
16
+ recordUserSessions,
17
+ replay,
18
+ dynamicConfig,
19
+ isSessionReplayEnabled
20
+ }: ResolveEffectiveReplayConfigArgs): EffectiveReplayConfig;
21
+ //#endregion
22
+ export { EffectiveReplayConfig, ResolveEffectiveReplayConfigArgs, resolveEffectiveReplayConfig };
23
+ //# sourceMappingURL=resolveEffectiveReplayConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEffectiveReplayConfig.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts"],"mappings":";;;;UAGiB,gCAAA;EACf,kBAAA;EACA,MAAA,GAAS,gBAAA;EACT,aAAA,EAAe,gBAAA;EACf,sBAAA;AAAA;AAAA,UAGe,qBAAA;EACf,kBAAA;EACA,MAAA,GAAS,gBAAA;AAAA;AAAA,iBAGK,4BAAA,CAAA;EACd,kBAAA;EACA,MAAA;EACA,aAAA;EACA;AAAA,GACC,gCAAA,GAAmC,qBAAA"}
@@ -0,0 +1,27 @@
1
+ //#region src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts
2
+ function resolveEffectiveReplayConfig({ recordUserSessions, replay, dynamicConfig, isSessionReplayEnabled }) {
3
+ if (!isSessionReplayEnabled) return {
4
+ recordUserSessions: false,
5
+ replay
6
+ };
7
+ const remoteReplay = dynamicConfig.replay;
8
+ if (!remoteReplay) return {
9
+ recordUserSessions,
10
+ replay
11
+ };
12
+ const merged = { ...replay };
13
+ if (remoteReplay.sampleRate !== void 0) merged.sampleRate = remoteReplay.sampleRate;
14
+ if (remoteReplay.maskAllInputs !== void 0) merged.maskAllInputs = remoteReplay.maskAllInputs;
15
+ if (remoteReplay.maskAllText !== void 0) merged.maskAllText = remoteReplay.maskAllText;
16
+ if (remoteReplay.flushIntervalMs !== void 0) merged.flushIntervalMs = remoteReplay.flushIntervalMs;
17
+ if (remoteReplay.omitRedundantInstrumentations !== void 0) merged.omitRedundantInstrumentations = remoteReplay.omitRedundantInstrumentations;
18
+ if (remoteReplay.debug !== void 0) merged.debug = remoteReplay.debug;
19
+ return {
20
+ recordUserSessions,
21
+ replay: merged
22
+ };
23
+ }
24
+ //#endregion
25
+ export { resolveEffectiveReplayConfig };
26
+
27
+ //# sourceMappingURL=resolveEffectiveReplayConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveEffectiveReplayConfig.js","names":[],"sources":["../../../src/managers/MXLConfigManager/resolveEffectiveReplayConfig.ts"],"sourcesContent":["import type { ReplayUserConfig } from '../../instrumentations/replay/ReplayInstrumentation/types';\nimport type { DynamicSDKConfig } from '../../sdk/types';\n\nexport interface ResolveEffectiveReplayConfigArgs {\n recordUserSessions: boolean;\n replay?: ReplayUserConfig;\n dynamicConfig: DynamicSDKConfig;\n isSessionReplayEnabled: boolean;\n}\n\nexport interface EffectiveReplayConfig {\n recordUserSessions: boolean;\n replay?: ReplayUserConfig;\n}\n\nexport function resolveEffectiveReplayConfig({\n recordUserSessions,\n replay,\n dynamicConfig,\n isSessionReplayEnabled,\n}: ResolveEffectiveReplayConfigArgs): EffectiveReplayConfig {\n if (!isSessionReplayEnabled) {\n return { recordUserSessions: false, replay };\n }\n\n const remoteReplay = dynamicConfig.replay;\n if (!remoteReplay) {\n return { recordUserSessions, replay };\n }\n\n const merged: ReplayUserConfig = { ...replay };\n\n if (remoteReplay.sampleRate !== undefined) {\n merged.sampleRate = remoteReplay.sampleRate;\n }\n if (remoteReplay.maskAllInputs !== undefined) {\n merged.maskAllInputs = remoteReplay.maskAllInputs;\n }\n if (remoteReplay.maskAllText !== undefined) {\n merged.maskAllText = remoteReplay.maskAllText;\n }\n if (remoteReplay.flushIntervalMs !== undefined) {\n merged.flushIntervalMs = remoteReplay.flushIntervalMs;\n }\n if (remoteReplay.omitRedundantInstrumentations !== undefined) {\n merged.omitRedundantInstrumentations =\n remoteReplay.omitRedundantInstrumentations;\n }\n if (remoteReplay.debug !== undefined) {\n merged.debug = remoteReplay.debug;\n }\n\n return {\n recordUserSessions,\n replay: merged,\n };\n}\n"],"mappings":";AAeA,SAAgB,6BAA6B,EAC3C,oBACA,QACA,eACA,0BAC0D;AAC1D,KAAI,CAAC,uBACH,QAAO;EAAE,oBAAoB;EAAO;EAAQ;CAG9C,MAAM,eAAe,cAAc;AACnC,KAAI,CAAC,aACH,QAAO;EAAE;EAAoB;EAAQ;CAGvC,MAAM,SAA2B,EAAE,GAAG,QAAQ;AAE9C,KAAI,aAAa,eAAe,KAAA,EAC9B,QAAO,aAAa,aAAa;AAEnC,KAAI,aAAa,kBAAkB,KAAA,EACjC,QAAO,gBAAgB,aAAa;AAEtC,KAAI,aAAa,gBAAgB,KAAA,EAC/B,QAAO,cAAc,aAAa;AAEpC,KAAI,aAAa,oBAAoB,KAAA,EACnC,QAAO,kBAAkB,aAAa;AAExC,KAAI,aAAa,kCAAkC,KAAA,EACjD,QAAO,gCACL,aAAa;AAEjB,KAAI,aAAa,UAAU,KAAA,EACzB,QAAO,QAAQ,aAAa;AAG9B,QAAO;EACL;EACA,QAAQ;EACT"}
@@ -7,14 +7,24 @@ interface RemoteConfigURLParams {
7
7
  appVersion: string;
8
8
  deviceId: string;
9
9
  }
10
+ interface RemoteSessionReplayConfig {
11
+ pctEnabled?: number;
12
+ sampleRate?: number;
13
+ maskAllInputs?: boolean;
14
+ maskAllText?: boolean;
15
+ flushIntervalMs?: number;
16
+ omitRedundantInstrumentations?: boolean;
17
+ debug?: boolean;
18
+ }
10
19
  interface RemoteConfig {
11
20
  threshold: number;
12
- network_span_forwarding?: {
13
- pct_enabled: number;
21
+ networkSpanForwarding?: {
22
+ pctEnabled: number;
14
23
  };
15
- empty_session_avoidance_enabled_pct?: number;
24
+ emptySessionAvoidanceEnabledPct?: number;
16
25
  /** When present from the MXL config service, overrides init-time `serviceName` / partial dynamic config for `service.name`. */
17
- service_name?: string;
26
+ serviceName?: string;
27
+ sessionReplay?: RemoteSessionReplayConfig;
18
28
  }
19
29
  interface StoredRemoteConfig {
20
30
  config: RemoteConfig;
@@ -27,8 +37,8 @@ interface MXLDynamicConfigManagerArgs {
27
37
  diag?: DiagLogger;
28
38
  storage?: Storage;
29
39
  defaultConfig?: Partial<DynamicSDKConfig>;
30
- mxlConfigURL?: string;
40
+ apiURL?: string;
31
41
  }
32
42
  //#endregion
33
- export { MXLDynamicConfigManagerArgs, RemoteConfig, RemoteConfigURLParams, StoredRemoteConfig };
43
+ export { MXLDynamicConfigManagerArgs, RemoteConfig, RemoteConfigURLParams, RemoteSessionReplayConfig, StoredRemoteConfig };
34
44
  //# sourceMappingURL=types.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/types.ts"],"mappings":";;;;UAEiB,qBAAA;EACf,SAAA;EACA,UAAA;EACA,QAAA;AAAA;AAAA,UAKe,YAAA;EACf,SAAA;EACA,uBAAA;IACE,WAAA;EAAA;EAEF,mCAAA;EALe;EAOf,YAAA;AAAA;AAAA,UAGe,kBAAA;EACf,MAAA,EAAQ,YAAA;EACR,IAAA;AAAA;AAAA,UAGe,2BAAA;EACf,KAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,GAAO,UAAA;EACP,OAAA,GAAU,OAAA;EACV,aAAA,GAAgB,OAAA,CAAQ,gBAAA;EACxB,YAAA;AAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/types.ts"],"mappings":";;;;UAEiB,qBAAA;EACf,SAAA;EACA,UAAA;EACA,QAAA;AAAA;AAAA,UAGe,yBAAA;EACf,UAAA;EACA,UAAA;EACA,aAAA;EACA,WAAA;EACA,eAAA;EACA,6BAAA;EACA,KAAA;AAAA;AAAA,UAKe,YAAA;EACf,SAAA;EACA,qBAAA;IACE,UAAA;EAAA;EAEF,+BAAA;EAXA;EAaA,WAAA;EACA,aAAA,GAAgB,yBAAA;AAAA;AAAA,UAGD,kBAAA;EACf,MAAA,EAAQ,YAAA;EACR,IAAA;AAAA;AAAA,UAGe,2BAAA;EACf,KAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,GAAO,UAAA;EACP,OAAA,GAAU,OAAA;EACV,aAAA,GAAgB,OAAA,CAAQ,gBAAA;EACxB,MAAA;AAAA"}
@@ -7,14 +7,24 @@ interface RemoteConfigURLParams {
7
7
  appVersion: string;
8
8
  deviceId: string;
9
9
  }
10
+ interface RemoteSessionReplayConfig {
11
+ pctEnabled?: number;
12
+ sampleRate?: number;
13
+ maskAllInputs?: boolean;
14
+ maskAllText?: boolean;
15
+ flushIntervalMs?: number;
16
+ omitRedundantInstrumentations?: boolean;
17
+ debug?: boolean;
18
+ }
10
19
  interface RemoteConfig {
11
20
  threshold: number;
12
- network_span_forwarding?: {
13
- pct_enabled: number;
21
+ networkSpanForwarding?: {
22
+ pctEnabled: number;
14
23
  };
15
- empty_session_avoidance_enabled_pct?: number;
24
+ emptySessionAvoidanceEnabledPct?: number;
16
25
  /** When present from the MXL config service, overrides init-time `serviceName` / partial dynamic config for `service.name`. */
17
- service_name?: string;
26
+ serviceName?: string;
27
+ sessionReplay?: RemoteSessionReplayConfig;
18
28
  }
19
29
  interface StoredRemoteConfig {
20
30
  config: RemoteConfig;
@@ -27,8 +37,8 @@ interface MXLDynamicConfigManagerArgs {
27
37
  diag?: DiagLogger;
28
38
  storage?: Storage;
29
39
  defaultConfig?: Partial<DynamicSDKConfig>;
30
- mxlConfigURL?: string;
40
+ apiURL?: string;
31
41
  }
32
42
  //#endregion
33
- export { MXLDynamicConfigManagerArgs, RemoteConfig, RemoteConfigURLParams, StoredRemoteConfig };
43
+ export { MXLDynamicConfigManagerArgs, RemoteConfig, RemoteConfigURLParams, RemoteSessionReplayConfig, StoredRemoteConfig };
34
44
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/types.ts"],"mappings":";;;;UAEiB,qBAAA;EACf,SAAA;EACA,UAAA;EACA,QAAA;AAAA;AAAA,UAKe,YAAA;EACf,SAAA;EACA,uBAAA;IACE,WAAA;EAAA;EAEF,mCAAA;EALe;EAOf,YAAA;AAAA;AAAA,UAGe,kBAAA;EACf,MAAA,EAAQ,YAAA;EACR,IAAA;AAAA;AAAA,UAGe,2BAAA;EACf,KAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,GAAO,UAAA;EACP,OAAA,GAAU,OAAA;EACV,aAAA,GAAgB,OAAA,CAAQ,gBAAA;EACxB,YAAA;AAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/types.ts"],"mappings":";;;;UAEiB,qBAAA;EACf,SAAA;EACA,UAAA;EACA,QAAA;AAAA;AAAA,UAGe,yBAAA;EACf,UAAA;EACA,UAAA;EACA,aAAA;EACA,WAAA;EACA,eAAA;EACA,6BAAA;EACA,KAAA;AAAA;AAAA,UAKe,YAAA;EACf,SAAA;EACA,qBAAA;IACE,UAAA;EAAA;EAEF,+BAAA;EAXA;EAaA,WAAA;EACA,aAAA,GAAgB,yBAAA;AAAA;AAAA,UAGD,kBAAA;EACf,MAAA,EAAQ,YAAA;EACR,IAAA;AAAA;AAAA,UAGe,2BAAA;EACf,KAAA;EACA,UAAA;EACA,QAAA;EACA,IAAA,GAAO,UAAA;EACP,OAAA,GAAU,OAAA;EACV,aAAA,GAAgB,OAAA,CAAQ,gBAAA;EACxB,MAAA;AAAA"}
@@ -1,7 +1,72 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region src/managers/MXLConfigManager/utils.ts
3
- const getConfigURL = (appId, { osVersion, appVersion, deviceId }, mxlConfigURL) => `${mxlConfigURL || `https://mxl-basket.apps.ocpthikadev01.safaricom.net`}/config?appId=${appId}&osVersion=${osVersion}&appVersion=${appVersion}&deviceId=${deviceId}`;
3
+ const getApiURL = (apiURL) => apiURL || "http://mxl-basket.apps.ocpthikadev01.safaricom.net";
4
+ const getOtelCollectorURL = (otelCollectorURL) => otelCollectorURL || "http://mxl-otel-collector.apps.ocpthikadev01.safaricom.net";
5
+ const getConfigURL = (appId, { osVersion, appVersion, deviceId }, apiURL) => `${getApiURL(apiURL)}/config?appId=${appId}&osVersion=${osVersion}&appVersion=${appVersion}&deviceId=${deviceId}`;
6
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
7
+ const readNumber = (record, camelKey, snakeKey) => {
8
+ const camelValue = record[camelKey];
9
+ if (typeof camelValue === "number") return camelValue;
10
+ const snakeValue = record[snakeKey];
11
+ if (typeof snakeValue === "number") return snakeValue;
12
+ };
13
+ const readBoolean = (record, camelKey, snakeKey) => {
14
+ const camelValue = record[camelKey];
15
+ if (typeof camelValue === "boolean") return camelValue;
16
+ const snakeValue = record[snakeKey];
17
+ if (typeof snakeValue === "boolean") return snakeValue;
18
+ };
19
+ const readString = (record, camelKey, snakeKey) => {
20
+ const camelValue = record[camelKey];
21
+ if (typeof camelValue === "string") return camelValue;
22
+ const snakeValue = record[snakeKey];
23
+ if (typeof snakeValue === "string") return snakeValue;
24
+ };
25
+ const normalizeSessionReplay = (raw) => {
26
+ if (!isRecord(raw)) return;
27
+ const replay = {};
28
+ const pctEnabled = readNumber(raw, "pctEnabled", "pct_enabled");
29
+ if (pctEnabled !== void 0) replay.pctEnabled = pctEnabled;
30
+ const sampleRate = readNumber(raw, "sampleRate", "sample_rate");
31
+ if (sampleRate !== void 0) replay.sampleRate = sampleRate;
32
+ const maskAllInputs = readBoolean(raw, "maskAllInputs", "mask_all_inputs");
33
+ if (maskAllInputs !== void 0) replay.maskAllInputs = maskAllInputs;
34
+ const maskAllText = readBoolean(raw, "maskAllText", "mask_all_text");
35
+ if (maskAllText !== void 0) replay.maskAllText = maskAllText;
36
+ const flushIntervalMs = readNumber(raw, "flushIntervalMs", "flush_interval_ms");
37
+ if (flushIntervalMs !== void 0) replay.flushIntervalMs = flushIntervalMs;
38
+ const omitRedundantInstrumentations = readBoolean(raw, "omitRedundantInstrumentations", "omit_redundant_instrumentations");
39
+ if (omitRedundantInstrumentations !== void 0) replay.omitRedundantInstrumentations = omitRedundantInstrumentations;
40
+ const debug = readBoolean(raw, "debug", "debug");
41
+ if (debug !== void 0) replay.debug = debug;
42
+ return Object.keys(replay).length > 0 ? replay : void 0;
43
+ };
44
+ /**
45
+ * Normalizes remote config JSON from the API or localStorage into camelCase
46
+ * {@link RemoteConfig}. Accepts legacy snake_case payloads for backward compatibility.
47
+ */
48
+ const normalizeStoredRemoteConfig = (raw) => {
49
+ if (!isRecord(raw)) throw new TypeError("Remote config must be an object");
50
+ const threshold = raw.threshold;
51
+ if (typeof threshold !== "number") throw new TypeError("Remote config threshold must be a number");
52
+ const normalized = { threshold };
53
+ const networkSpanForwardingRaw = raw.networkSpanForwarding ?? raw.network_span_forwarding;
54
+ if (isRecord(networkSpanForwardingRaw)) {
55
+ const pctEnabled = readNumber(networkSpanForwardingRaw, "pctEnabled", "pct_enabled");
56
+ if (pctEnabled !== void 0) normalized.networkSpanForwarding = { pctEnabled };
57
+ }
58
+ const emptySessionAvoidanceEnabledPct = readNumber(raw, "emptySessionAvoidanceEnabledPct", "empty_session_avoidance_enabled_pct");
59
+ if (emptySessionAvoidanceEnabledPct !== void 0) normalized.emptySessionAvoidanceEnabledPct = emptySessionAvoidanceEnabledPct;
60
+ const serviceName = readString(raw, "serviceName", "service_name");
61
+ if (serviceName !== void 0) normalized.serviceName = serviceName;
62
+ const sessionReplay = normalizeSessionReplay(raw.sessionReplay ?? raw.session_replay);
63
+ if (sessionReplay !== void 0) normalized.sessionReplay = sessionReplay;
64
+ return normalized;
65
+ };
4
66
  //#endregion
67
+ exports.getApiURL = getApiURL;
5
68
  exports.getConfigURL = getConfigURL;
69
+ exports.getOtelCollectorURL = getOtelCollectorURL;
70
+ exports.normalizeStoredRemoteConfig = normalizeStoredRemoteConfig;
6
71
 
7
72
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"sourcesContent":["import type { RemoteConfigURLParams } from './types';\n\nexport const getConfigURL = (\n appId: string,\n { osVersion, appVersion, deviceId }: RemoteConfigURLParams,\n mxlConfigURL?: string,\n): string =>\n `${mxlConfigURL || `https://mxl-basket.apps.ocpthikadev01.safaricom.net`}/config?appId=${appId}&osVersion=${osVersion}&appVersion=${appVersion}&deviceId=${deviceId}`;\n"],"mappings":";;AAEA,MAAa,gBACX,OACA,EAAE,WAAW,YAAY,YACzB,iBAEA,GAAG,gBAAgB,sDAAsD,gBAAgB,MAAM,aAAa,UAAU,cAAc,WAAW,YAAY"}
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"sourcesContent":["import type {\n RemoteConfig,\n RemoteConfigURLParams,\n RemoteSessionReplayConfig,\n} from './types';\n\nexport const getApiURL = (apiURL?: string): string =>\n apiURL || 'http://mxl-basket.apps.ocpthikadev01.safaricom.net';\nexport const getOtelCollectorURL = (otelCollectorURL?: string): string =>\n otelCollectorURL || 'http://mxl-otel-collector.apps.ocpthikadev01.safaricom.net';\n\nexport const getConfigURL = (\n appId: string,\n { osVersion, appVersion, deviceId }: RemoteConfigURLParams,\n apiURL?: string,\n): string =>\n `${getApiURL(apiURL)}/config?appId=${appId}&osVersion=${osVersion}&appVersion=${appVersion}&deviceId=${deviceId}`;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst readNumber = (\n record: Record<string, unknown>,\n camelKey: string,\n snakeKey: string,\n): number | undefined => {\n const camelValue = record[camelKey];\n if (typeof camelValue === 'number') {\n return camelValue;\n }\n\n const snakeValue = record[snakeKey];\n if (typeof snakeValue === 'number') {\n return snakeValue;\n }\n\n return undefined;\n};\n\nconst readBoolean = (\n record: Record<string, unknown>,\n camelKey: string,\n snakeKey: string,\n): boolean | undefined => {\n const camelValue = record[camelKey];\n if (typeof camelValue === 'boolean') {\n return camelValue;\n }\n\n const snakeValue = record[snakeKey];\n if (typeof snakeValue === 'boolean') {\n return snakeValue;\n }\n\n return undefined;\n};\n\nconst readString = (\n record: Record<string, unknown>,\n camelKey: string,\n snakeKey: string,\n): string | undefined => {\n const camelValue = record[camelKey];\n if (typeof camelValue === 'string') {\n return camelValue;\n }\n\n const snakeValue = record[snakeKey];\n if (typeof snakeValue === 'string') {\n return snakeValue;\n }\n\n return undefined;\n};\n\nconst normalizeSessionReplay = (\n raw: unknown,\n): RemoteSessionReplayConfig | undefined => {\n if (!isRecord(raw)) {\n return undefined;\n }\n\n const replay: RemoteSessionReplayConfig = {};\n\n const pctEnabled = readNumber(raw, 'pctEnabled', 'pct_enabled');\n if (pctEnabled !== undefined) {\n replay.pctEnabled = pctEnabled;\n }\n\n const sampleRate = readNumber(raw, 'sampleRate', 'sample_rate');\n if (sampleRate !== undefined) {\n replay.sampleRate = sampleRate;\n }\n\n const maskAllInputs = readBoolean(raw, 'maskAllInputs', 'mask_all_inputs');\n if (maskAllInputs !== undefined) {\n replay.maskAllInputs = maskAllInputs;\n }\n\n const maskAllText = readBoolean(raw, 'maskAllText', 'mask_all_text');\n if (maskAllText !== undefined) {\n replay.maskAllText = maskAllText;\n }\n\n const flushIntervalMs = readNumber(\n raw,\n 'flushIntervalMs',\n 'flush_interval_ms',\n );\n if (flushIntervalMs !== undefined) {\n replay.flushIntervalMs = flushIntervalMs;\n }\n\n const omitRedundantInstrumentations = readBoolean(\n raw,\n 'omitRedundantInstrumentations',\n 'omit_redundant_instrumentations',\n );\n if (omitRedundantInstrumentations !== undefined) {\n replay.omitRedundantInstrumentations = omitRedundantInstrumentations;\n }\n\n const debug = readBoolean(raw, 'debug', 'debug');\n if (debug !== undefined) {\n replay.debug = debug;\n }\n\n return Object.keys(replay).length > 0 ? replay : undefined;\n};\n\n/**\n * Normalizes remote config JSON from the API or localStorage into camelCase\n * {@link RemoteConfig}. Accepts legacy snake_case payloads for backward compatibility.\n */\nexport const normalizeStoredRemoteConfig = (raw: unknown): RemoteConfig => {\n if (!isRecord(raw)) {\n throw new TypeError('Remote config must be an object');\n }\n\n const threshold = raw.threshold;\n if (typeof threshold !== 'number') {\n throw new TypeError('Remote config threshold must be a number');\n }\n\n const normalized: RemoteConfig = { threshold };\n\n const networkSpanForwardingRaw =\n raw.networkSpanForwarding ?? raw.network_span_forwarding;\n if (isRecord(networkSpanForwardingRaw)) {\n const pctEnabled = readNumber(\n networkSpanForwardingRaw,\n 'pctEnabled',\n 'pct_enabled',\n );\n if (pctEnabled !== undefined) {\n normalized.networkSpanForwarding = { pctEnabled };\n }\n }\n\n const emptySessionAvoidanceEnabledPct = readNumber(\n raw,\n 'emptySessionAvoidanceEnabledPct',\n 'empty_session_avoidance_enabled_pct',\n );\n if (emptySessionAvoidanceEnabledPct !== undefined) {\n normalized.emptySessionAvoidanceEnabledPct =\n emptySessionAvoidanceEnabledPct;\n }\n\n const serviceName = readString(raw, 'serviceName', 'service_name');\n if (serviceName !== undefined) {\n normalized.serviceName = serviceName;\n }\n\n const sessionReplay = normalizeSessionReplay(\n raw.sessionReplay ?? raw.session_replay,\n );\n if (sessionReplay !== undefined) {\n normalized.sessionReplay = sessionReplay;\n }\n\n return normalized;\n};\n"],"mappings":";;AAMA,MAAa,aAAa,WACxB,UAAU;AACZ,MAAa,uBAAuB,qBAClC,oBAAoB;AAEtB,MAAa,gBACX,OACA,EAAE,WAAW,YAAY,YACzB,WAEA,GAAG,UAAU,OAAO,CAAC,gBAAgB,MAAM,aAAa,UAAU,cAAc,WAAW,YAAY;AAEzG,MAAM,YAAY,UAChB,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;AAEtE,MAAM,cACJ,QACA,UACA,aACuB;CACvB,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,SACxB,QAAO;CAGT,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,SACxB,QAAO;;AAMX,MAAM,eACJ,QACA,UACA,aACwB;CACxB,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,UACxB,QAAO;CAGT,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,UACxB,QAAO;;AAMX,MAAM,cACJ,QACA,UACA,aACuB;CACvB,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,SACxB,QAAO;CAGT,MAAM,aAAa,OAAO;AAC1B,KAAI,OAAO,eAAe,SACxB,QAAO;;AAMX,MAAM,0BACJ,QAC0C;AAC1C,KAAI,CAAC,SAAS,IAAI,CAChB;CAGF,MAAM,SAAoC,EAAE;CAE5C,MAAM,aAAa,WAAW,KAAK,cAAc,cAAc;AAC/D,KAAI,eAAe,KAAA,EACjB,QAAO,aAAa;CAGtB,MAAM,aAAa,WAAW,KAAK,cAAc,cAAc;AAC/D,KAAI,eAAe,KAAA,EACjB,QAAO,aAAa;CAGtB,MAAM,gBAAgB,YAAY,KAAK,iBAAiB,kBAAkB;AAC1E,KAAI,kBAAkB,KAAA,EACpB,QAAO,gBAAgB;CAGzB,MAAM,cAAc,YAAY,KAAK,eAAe,gBAAgB;AACpE,KAAI,gBAAgB,KAAA,EAClB,QAAO,cAAc;CAGvB,MAAM,kBAAkB,WACtB,KACA,mBACA,oBACD;AACD,KAAI,oBAAoB,KAAA,EACtB,QAAO,kBAAkB;CAG3B,MAAM,gCAAgC,YACpC,KACA,iCACA,kCACD;AACD,KAAI,kCAAkC,KAAA,EACpC,QAAO,gCAAgC;CAGzC,MAAM,QAAQ,YAAY,KAAK,SAAS,QAAQ;AAChD,KAAI,UAAU,KAAA,EACZ,QAAO,QAAQ;AAGjB,QAAO,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,SAAS,KAAA;;;;;;AAOnD,MAAa,+BAA+B,QAA+B;AACzE,KAAI,CAAC,SAAS,IAAI,CAChB,OAAM,IAAI,UAAU,kCAAkC;CAGxD,MAAM,YAAY,IAAI;AACtB,KAAI,OAAO,cAAc,SACvB,OAAM,IAAI,UAAU,2CAA2C;CAGjE,MAAM,aAA2B,EAAE,WAAW;CAE9C,MAAM,2BACJ,IAAI,yBAAyB,IAAI;AACnC,KAAI,SAAS,yBAAyB,EAAE;EACtC,MAAM,aAAa,WACjB,0BACA,cACA,cACD;AACD,MAAI,eAAe,KAAA,EACjB,YAAW,wBAAwB,EAAE,YAAY;;CAIrD,MAAM,kCAAkC,WACtC,KACA,mCACA,sCACD;AACD,KAAI,oCAAoC,KAAA,EACtC,YAAW,kCACT;CAGJ,MAAM,cAAc,WAAW,KAAK,eAAe,eAAe;AAClE,KAAI,gBAAgB,KAAA,EAClB,YAAW,cAAc;CAG3B,MAAM,gBAAgB,uBACpB,IAAI,iBAAiB,IAAI,eAC1B;AACD,KAAI,kBAAkB,KAAA,EACpB,YAAW,gBAAgB;AAG7B,QAAO"}
@@ -1,11 +1,18 @@
1
- import { RemoteConfigURLParams } from "./types.cjs";
1
+ import { RemoteConfig, RemoteConfigURLParams } from "./types.cjs";
2
2
 
3
3
  //#region src/managers/MXLConfigManager/utils.d.ts
4
+ declare const getApiURL: (apiURL?: string) => string;
5
+ declare const getOtelCollectorURL: (otelCollectorURL?: string) => string;
4
6
  declare const getConfigURL: (appId: string, {
5
7
  osVersion,
6
8
  appVersion,
7
9
  deviceId
8
- }: RemoteConfigURLParams, mxlConfigURL?: string) => string;
10
+ }: RemoteConfigURLParams, apiURL?: string) => string;
11
+ /**
12
+ * Normalizes remote config JSON from the API or localStorage into camelCase
13
+ * {@link RemoteConfig}. Accepts legacy snake_case payloads for backward compatibility.
14
+ */
15
+ declare const normalizeStoredRemoteConfig: (raw: unknown) => RemoteConfig;
9
16
  //#endregion
10
- export { getConfigURL };
17
+ export { getApiURL, getConfigURL, getOtelCollectorURL, normalizeStoredRemoteConfig };
11
18
  //# sourceMappingURL=utils.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"mappings":";;;cAEa,YAAA,GACX,KAAA;EACA,SAAA;EAAA,UAAA;EAAA;AAAA,GAAqC,qBAAA,EACrC,YAAA"}
1
+ {"version":3,"file":"utils.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"mappings":";;;cAMa,SAAA,GAAa,MAAA;AAAA,cAEb,mBAAA,GAAuB,gBAAA;AAAA,cAGvB,YAAA,GACX,KAAA;EACA,SAAA;EAAA,UAAA;EAAA;AAAA,GAAqC,qBAAA,EACrC,MAAA;;;;;cAwHW,2BAAA,GAA+B,GAAA,cAAe,YAAA"}
@@ -1,11 +1,18 @@
1
- import { RemoteConfigURLParams } from "./types.js";
1
+ import { RemoteConfig, RemoteConfigURLParams } from "./types.js";
2
2
 
3
3
  //#region src/managers/MXLConfigManager/utils.d.ts
4
+ declare const getApiURL: (apiURL?: string) => string;
5
+ declare const getOtelCollectorURL: (otelCollectorURL?: string) => string;
4
6
  declare const getConfigURL: (appId: string, {
5
7
  osVersion,
6
8
  appVersion,
7
9
  deviceId
8
- }: RemoteConfigURLParams, mxlConfigURL?: string) => string;
10
+ }: RemoteConfigURLParams, apiURL?: string) => string;
11
+ /**
12
+ * Normalizes remote config JSON from the API or localStorage into camelCase
13
+ * {@link RemoteConfig}. Accepts legacy snake_case payloads for backward compatibility.
14
+ */
15
+ declare const normalizeStoredRemoteConfig: (raw: unknown) => RemoteConfig;
9
16
  //#endregion
10
- export { getConfigURL };
17
+ export { getApiURL, getConfigURL, getOtelCollectorURL, normalizeStoredRemoteConfig };
11
18
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"mappings":";;;cAEa,YAAA,GACX,KAAA;EACA,SAAA;EAAA,UAAA;EAAA;AAAA,GAAqC,qBAAA,EACrC,YAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/utils.ts"],"mappings":";;;cAMa,SAAA,GAAa,MAAA;AAAA,cAEb,mBAAA,GAAuB,gBAAA;AAAA,cAGvB,YAAA,GACX,KAAA;EACA,SAAA;EAAA,UAAA;EAAA;AAAA,GAAqC,qBAAA,EACrC,MAAA;;;;;cAwHW,2BAAA,GAA+B,GAAA,cAAe,YAAA"}