@safaricom-mxl/web-sdk 0.0.16 → 0.0.17

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 (819) hide show
  1. package/DATA_EXPORT.md +2 -3
  2. package/REACT.md +5 -7
  3. package/README.md +94 -57
  4. package/UPGRADING.md +29 -19
  5. package/dist/api-logs/api/LogAPI/LogAPI.cjs +3 -3
  6. package/dist/api-logs/api/LogAPI/LogAPI.cjs.map +1 -1
  7. package/dist/api-logs/api/LogAPI/LogAPI.js +3 -3
  8. package/dist/api-logs/api/LogAPI/LogAPI.js.map +1 -1
  9. package/dist/api-logs/manager/NoOpLogManager/NoOpLogManager.cjs.map +1 -1
  10. package/dist/api-logs/manager/NoOpLogManager/NoOpLogManager.js.map +1 -1
  11. package/dist/api-logs/manager/types.d.cts +4 -4
  12. package/dist/api-logs/manager/types.d.cts.map +1 -1
  13. package/dist/api-logs/manager/types.d.ts +4 -4
  14. package/dist/api-logs/manager/types.d.ts.map +1 -1
  15. package/dist/api-page/api/PageAPI/PageAPI.cjs +3 -3
  16. package/dist/api-page/api/PageAPI/PageAPI.cjs.map +1 -1
  17. package/dist/api-page/api/PageAPI/PageAPI.js +3 -3
  18. package/dist/api-page/api/PageAPI/PageAPI.js.map +1 -1
  19. package/dist/api-sessions/api/SessionAPI/SessionAPI.cjs +9 -9
  20. package/dist/api-sessions/api/SessionAPI/SessionAPI.cjs.map +1 -1
  21. package/dist/api-sessions/api/SessionAPI/SessionAPI.d.cts +5 -7
  22. package/dist/api-sessions/api/SessionAPI/SessionAPI.d.cts.map +1 -1
  23. package/dist/api-sessions/api/SessionAPI/SessionAPI.d.ts +5 -7
  24. package/dist/api-sessions/api/SessionAPI/SessionAPI.d.ts.map +1 -1
  25. package/dist/api-sessions/api/SessionAPI/SessionAPI.js +9 -9
  26. package/dist/api-sessions/api/SessionAPI/SessionAPI.js.map +1 -1
  27. package/dist/api-sessions/index.cjs +4 -4
  28. package/dist/api-sessions/index.d.cts +4 -4
  29. package/dist/api-sessions/index.d.ts +4 -4
  30. package/dist/api-sessions/index.js +3 -3
  31. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.cjs +47 -0
  32. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.cjs.map +1 -0
  33. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.d.cts +30 -0
  34. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.d.cts.map +1 -0
  35. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.d.ts +30 -0
  36. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.d.ts.map +1 -0
  37. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.js +46 -0
  38. package/dist/api-sessions/manager/NoOpUserSessionManager/NoOpUserSessionManager.js.map +1 -0
  39. package/dist/api-sessions/manager/NoOpUserSessionManager/index.cjs +3 -0
  40. package/dist/api-sessions/manager/NoOpUserSessionManager/index.d.cts +2 -0
  41. package/dist/api-sessions/manager/NoOpUserSessionManager/index.d.ts +2 -0
  42. package/dist/api-sessions/manager/NoOpUserSessionManager/index.js +2 -0
  43. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.cjs +81 -0
  44. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.cjs.map +1 -0
  45. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.d.cts +35 -0
  46. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.d.cts.map +1 -0
  47. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.d.ts +35 -0
  48. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.d.ts.map +1 -0
  49. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.js +81 -0
  50. package/dist/api-sessions/manager/ProxyUserSessionManager/ProxyUserSessionManager.js.map +1 -0
  51. package/dist/api-sessions/manager/ProxyUserSessionManager/index.cjs +3 -0
  52. package/dist/api-sessions/manager/ProxyUserSessionManager/index.d.cts +2 -0
  53. package/dist/api-sessions/manager/ProxyUserSessionManager/index.d.ts +2 -0
  54. package/dist/api-sessions/manager/ProxyUserSessionManager/index.js +2 -0
  55. package/dist/api-sessions/manager/index.cjs +4 -4
  56. package/dist/api-sessions/manager/index.d.cts +4 -4
  57. package/dist/api-sessions/manager/index.d.ts +4 -4
  58. package/dist/api-sessions/manager/index.js +3 -3
  59. package/dist/api-sessions/manager/types.d.cts +14 -24
  60. package/dist/api-sessions/manager/types.d.cts.map +1 -1
  61. package/dist/api-sessions/manager/types.d.ts +14 -24
  62. package/dist/api-sessions/manager/types.d.ts.map +1 -1
  63. package/dist/api-traces/api/TraceAPI/TraceAPI.cjs +3 -3
  64. package/dist/api-traces/api/TraceAPI/TraceAPI.cjs.map +1 -1
  65. package/dist/api-traces/api/TraceAPI/TraceAPI.js +3 -3
  66. package/dist/api-traces/api/TraceAPI/TraceAPI.js.map +1 -1
  67. package/dist/api-traces/api/TraceAPI/types.d.cts +2 -2
  68. package/dist/api-traces/api/TraceAPI/types.d.cts.map +1 -1
  69. package/dist/api-traces/api/TraceAPI/types.d.ts +2 -2
  70. package/dist/api-traces/api/TraceAPI/types.d.ts.map +1 -1
  71. package/dist/api-users/api/UserAPI/UserAPI.cjs +3 -3
  72. package/dist/api-users/api/UserAPI/UserAPI.cjs.map +1 -1
  73. package/dist/api-users/api/UserAPI/UserAPI.js +3 -3
  74. package/dist/api-users/api/UserAPI/UserAPI.js.map +1 -1
  75. package/dist/common/types.d.cts +2 -0
  76. package/dist/common/types.d.cts.map +1 -1
  77. package/dist/common/types.d.ts +2 -0
  78. package/dist/common/types.d.ts.map +1 -1
  79. package/dist/constants/attributes.cjs +28 -0
  80. package/dist/constants/attributes.cjs.map +1 -1
  81. package/dist/constants/attributes.d.cts +17 -2
  82. package/dist/constants/attributes.d.cts.map +1 -1
  83. package/dist/constants/attributes.d.ts +17 -2
  84. package/dist/constants/attributes.d.ts.map +1 -1
  85. package/dist/constants/attributes.js +16 -1
  86. package/dist/constants/attributes.js.map +1 -1
  87. package/dist/constants/index.cjs +13 -0
  88. package/dist/constants/index.d.cts +2 -2
  89. package/dist/constants/index.d.ts +2 -2
  90. package/dist/constants/index.js +2 -2
  91. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs +1 -2
  92. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs.map +1 -1
  93. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.cts +1 -2
  94. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.cts.map +1 -1
  95. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.ts +1 -2
  96. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.d.ts.map +1 -1
  97. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js +1 -2
  98. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js.map +1 -1
  99. package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.cjs.map +1 -1
  100. package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.js.map +1 -1
  101. package/dist/exporters/constants.cjs +1 -1
  102. package/dist/exporters/constants.cjs.map +1 -1
  103. package/dist/exporters/constants.d.cts +1 -1
  104. package/dist/exporters/constants.d.ts +1 -1
  105. package/dist/exporters/constants.js +1 -1
  106. package/dist/exporters/constants.js.map +1 -1
  107. package/dist/exporters/otlpBrowserFetchExportDelegate.cjs.map +1 -1
  108. package/dist/exporters/otlpBrowserFetchExportDelegate.js.map +1 -1
  109. package/dist/index.cjs +2 -0
  110. package/dist/index.d.cts +2 -1
  111. package/dist/index.d.ts +2 -1
  112. package/dist/index.js +2 -1
  113. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.cjs +2 -2
  114. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.cjs.map +1 -1
  115. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.d.cts.map +1 -1
  116. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.d.ts.map +1 -1
  117. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.js +2 -2
  118. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.js.map +1 -1
  119. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.cjs +6 -7
  120. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.cjs.map +1 -1
  121. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.d.cts +4 -5
  122. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.d.cts.map +1 -1
  123. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.d.ts +4 -5
  124. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.d.ts.map +1 -1
  125. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.js +6 -7
  126. package/dist/instrumentations/MXLInstrumentationBase/MXLInstrumentationBase.js.map +1 -1
  127. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.cjs +8 -8
  128. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.cjs.map +1 -1
  129. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.d.cts.map +1 -1
  130. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.d.ts.map +1 -1
  131. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.js +8 -8
  132. package/dist/instrumentations/clicks/ClicksInstrumentation/ClicksInstrumentation.js.map +1 -1
  133. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.cjs +10 -10
  134. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.cjs.map +1 -1
  135. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.js +10 -10
  136. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/DocumentLoadInstrumentation.js.map +1 -1
  137. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.cjs +2 -2
  138. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.cjs.map +1 -1
  139. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.js +2 -2
  140. package/dist/instrumentations/document-load/DocumentLoadInstrumentation/utils.js.map +1 -1
  141. package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.cjs +5 -5
  142. package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.cjs.map +1 -1
  143. package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.js +5 -5
  144. package/dist/instrumentations/element-timing/ElementTimingInstrumentation/ElementTimingInstrumentation.js.map +1 -1
  145. package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.cjs +4 -4
  146. package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.cjs.map +1 -1
  147. package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.js +4 -4
  148. package/dist/instrumentations/empty-root/EmptyRootInstrumentation/EmptyRootInstrumentation.js.map +1 -1
  149. package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.cjs +7 -7
  150. package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.cjs.map +1 -1
  151. package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.js +7 -7
  152. package/dist/instrumentations/exceptions/GlobalExceptionInstrumentation/GlobalExceptionInstrumentation.js.map +1 -1
  153. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.cjs +2 -2
  154. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.cjs.map +1 -1
  155. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.cts +4 -4
  156. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.cts.map +1 -1
  157. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.ts +4 -4
  158. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.d.ts.map +1 -1
  159. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.js +2 -2
  160. package/dist/instrumentations/exceptions/react/MXLErrorBoundary/MXLErrorBoundary.js.map +1 -1
  161. package/dist/instrumentations/index.cjs +2 -4
  162. package/dist/instrumentations/index.d.cts +4 -6
  163. package/dist/instrumentations/index.d.ts +4 -6
  164. package/dist/instrumentations/index.js +2 -3
  165. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.cjs +23 -23
  166. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.cjs.map +1 -1
  167. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.d.cts +2 -3
  168. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.d.cts.map +1 -1
  169. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.d.ts +2 -3
  170. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.d.ts.map +1 -1
  171. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.js +23 -23
  172. package/dist/instrumentations/loaf/LoafInstrumentation/LoafInstrumentation.js.map +1 -1
  173. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.cjs +5 -5
  174. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.cjs.map +1 -1
  175. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.d.cts.map +1 -1
  176. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.d.ts.map +1 -1
  177. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.js +5 -5
  178. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.js.map +1 -1
  179. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.cjs.map +1 -1
  180. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/withMXLRoutingLegacy.js.map +1 -1
  181. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.cjs +1 -1
  182. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.cjs.map +1 -1
  183. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.js +1 -1
  184. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/listenToRouterChanges.js.map +1 -1
  185. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/types.d.cts +10 -10
  186. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/types.d.cts.map +1 -1
  187. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/types.d.ts +10 -10
  188. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Data/types.d.ts.map +1 -1
  189. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/types.d.cts +2 -2
  190. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/types.d.cts.map +1 -1
  191. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/types.d.ts +2 -2
  192. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/types.d.ts.map +1 -1
  193. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/withMXLRouting.cjs.map +1 -1
  194. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV6Declarative/withMXLRouting.js.map +1 -1
  195. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs +257 -0
  196. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.cjs.map +1 -0
  197. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.cts +56 -0
  198. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.cts.map +1 -0
  199. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.ts +56 -0
  200. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.d.ts.map +1 -0
  201. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js +252 -0
  202. package/dist/instrumentations/replay/ReplayInstrumentation/ReplayInstrumentation.js.map +1 -0
  203. package/dist/instrumentations/replay/ReplayInstrumentation/constants.cjs +15 -0
  204. package/dist/instrumentations/replay/ReplayInstrumentation/constants.cjs.map +1 -0
  205. package/dist/instrumentations/replay/ReplayInstrumentation/constants.d.cts +9 -0
  206. package/dist/instrumentations/replay/ReplayInstrumentation/constants.d.cts.map +1 -0
  207. package/dist/instrumentations/replay/ReplayInstrumentation/constants.d.ts +9 -0
  208. package/dist/instrumentations/replay/ReplayInstrumentation/constants.d.ts.map +1 -0
  209. package/dist/instrumentations/replay/ReplayInstrumentation/constants.js +10 -0
  210. package/dist/instrumentations/replay/ReplayInstrumentation/constants.js.map +1 -0
  211. package/dist/instrumentations/replay/ReplayInstrumentation/index.cjs +3 -0
  212. package/dist/instrumentations/replay/ReplayInstrumentation/index.d.cts +3 -0
  213. package/dist/instrumentations/replay/ReplayInstrumentation/index.d.ts +3 -0
  214. package/dist/instrumentations/replay/ReplayInstrumentation/index.js +2 -0
  215. package/dist/instrumentations/replay/ReplayInstrumentation/types.d.cts +17 -0
  216. package/dist/instrumentations/replay/ReplayInstrumentation/types.d.cts.map +1 -0
  217. package/dist/instrumentations/replay/ReplayInstrumentation/types.d.ts +17 -0
  218. package/dist/instrumentations/replay/ReplayInstrumentation/types.d.ts.map +1 -0
  219. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.cjs +18 -0
  220. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.cjs.map +1 -0
  221. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.d.cts +8 -0
  222. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.d.cts.map +1 -0
  223. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.d.ts +8 -0
  224. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.d.ts.map +1 -0
  225. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.js +17 -0
  226. package/dist/instrumentations/replay/createSessionRecordingControlFromReplay.js.map +1 -0
  227. package/dist/instrumentations/replay/index.cjs +8 -0
  228. package/dist/instrumentations/replay/index.d.cts +4 -0
  229. package/dist/instrumentations/replay/index.d.ts +4 -0
  230. package/dist/instrumentations/replay/index.js +3 -0
  231. package/dist/instrumentations/replay/utils/index.cjs +5 -0
  232. package/dist/instrumentations/replay/utils/index.d.cts +2 -0
  233. package/dist/instrumentations/replay/utils/index.d.ts +2 -0
  234. package/dist/instrumentations/replay/utils/index.js +2 -0
  235. package/dist/instrumentations/replay/utils/session-recording-utils.cjs +79 -0
  236. package/dist/instrumentations/replay/utils/session-recording-utils.cjs.map +1 -0
  237. package/dist/instrumentations/replay/utils/session-recording-utils.d.cts +32 -0
  238. package/dist/instrumentations/replay/utils/session-recording-utils.d.cts.map +1 -0
  239. package/dist/instrumentations/replay/utils/session-recording-utils.d.ts +32 -0
  240. package/dist/instrumentations/replay/utils/session-recording-utils.d.ts.map +1 -0
  241. package/dist/instrumentations/replay/utils/session-recording-utils.js +73 -0
  242. package/dist/instrumentations/replay/utils/session-recording-utils.js.map +1 -0
  243. package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.cjs +6 -6
  244. package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.cjs.map +1 -1
  245. package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.js +6 -6
  246. package/dist/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.js.map +1 -1
  247. package/dist/instrumentations/session/index.cjs +0 -6
  248. package/dist/instrumentations/session/index.d.cts +2 -7
  249. package/dist/instrumentations/session/index.d.ts +2 -7
  250. package/dist/instrumentations/session/index.js +1 -4
  251. package/dist/instrumentations/session/types.d.cts +5 -5
  252. package/dist/instrumentations/session/types.d.cts.map +1 -1
  253. package/dist/instrumentations/session/types.d.ts +5 -5
  254. package/dist/instrumentations/session/types.d.ts.map +1 -1
  255. package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.cjs +10 -10
  256. package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.cjs.map +1 -1
  257. package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.js +10 -10
  258. package/dist/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.js.map +1 -1
  259. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.cjs +15 -15
  260. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.cjs.map +1 -1
  261. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.js +15 -15
  262. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.js.map +1 -1
  263. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.cts +1 -3
  264. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.cts.map +1 -1
  265. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.ts +1 -3
  266. package/dist/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.ts.map +1 -1
  267. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs +0 -1
  268. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.cjs.map +1 -1
  269. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.cts.map +1 -1
  270. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.d.ts.map +1 -1
  271. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js +0 -1
  272. package/dist/managers/MXLConfigManager/MXLDynamicConfigManager.js.map +1 -1
  273. package/dist/managers/MXLConfigManager/constants.cjs +2 -2
  274. package/dist/managers/MXLConfigManager/constants.cjs.map +1 -1
  275. package/dist/managers/MXLConfigManager/constants.js +2 -2
  276. package/dist/managers/MXLConfigManager/constants.js.map +1 -1
  277. package/dist/managers/MXLConfigManager/types.d.cts +8 -7
  278. package/dist/managers/MXLConfigManager/types.d.cts.map +1 -1
  279. package/dist/managers/MXLConfigManager/types.d.ts +8 -7
  280. package/dist/managers/MXLConfigManager/types.d.ts.map +1 -1
  281. package/dist/managers/MXLLimitManager/MXLLimitManager.cjs +20 -20
  282. package/dist/managers/MXLLimitManager/MXLLimitManager.cjs.map +1 -1
  283. package/dist/managers/MXLLimitManager/MXLLimitManager.js +20 -20
  284. package/dist/managers/MXLLimitManager/MXLLimitManager.js.map +1 -1
  285. package/dist/managers/MXLLimitManager/constants.cjs +20 -20
  286. package/dist/managers/MXLLimitManager/constants.cjs.map +1 -1
  287. package/dist/managers/MXLLimitManager/constants.js +20 -20
  288. package/dist/managers/MXLLimitManager/constants.js.map +1 -1
  289. package/dist/managers/MXLLimitManager/types.d.cts +8 -8
  290. package/dist/managers/MXLLimitManager/types.d.cts.map +1 -1
  291. package/dist/managers/MXLLimitManager/types.d.ts +8 -8
  292. package/dist/managers/MXLLimitManager/types.d.ts.map +1 -1
  293. package/dist/managers/MXLLogManager/MXLLogManager.cjs +19 -19
  294. package/dist/managers/MXLLogManager/MXLLogManager.cjs.map +1 -1
  295. package/dist/managers/MXLLogManager/MXLLogManager.d.cts +2 -2
  296. package/dist/managers/MXLLogManager/MXLLogManager.d.cts.map +1 -1
  297. package/dist/managers/MXLLogManager/MXLLogManager.d.ts +2 -2
  298. package/dist/managers/MXLLogManager/MXLLogManager.d.ts.map +1 -1
  299. package/dist/managers/MXLLogManager/MXLLogManager.js +19 -19
  300. package/dist/managers/MXLLogManager/MXLLogManager.js.map +1 -1
  301. package/dist/managers/MXLLogManager/types.d.cts +2 -2
  302. package/dist/managers/MXLLogManager/types.d.ts +2 -2
  303. package/dist/managers/MXLPageManager/MXLPageManager.cjs +1 -3
  304. package/dist/managers/MXLPageManager/MXLPageManager.cjs.map +1 -1
  305. package/dist/managers/MXLPageManager/MXLPageManager.d.cts.map +1 -1
  306. package/dist/managers/MXLPageManager/MXLPageManager.d.ts.map +1 -1
  307. package/dist/managers/MXLPageManager/MXLPageManager.js +1 -3
  308. package/dist/managers/MXLPageManager/MXLPageManager.js.map +1 -1
  309. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs +0 -4
  310. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.cjs.map +1 -1
  311. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts +0 -1
  312. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.cts.map +1 -1
  313. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts +0 -1
  314. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.d.ts.map +1 -1
  315. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js +0 -4
  316. package/dist/managers/MXLSDKFeaturesManager/MXLSDKFeaturesManager.js.map +1 -1
  317. package/dist/managers/MXLSDKFeaturesManager/types.d.cts +0 -1
  318. package/dist/managers/MXLSDKFeaturesManager/types.d.cts.map +1 -1
  319. package/dist/managers/MXLSDKFeaturesManager/types.d.ts +0 -1
  320. package/dist/managers/MXLSDKFeaturesManager/types.d.ts.map +1 -1
  321. package/dist/managers/MXLTraceManager/MXLExtendedSpan.cjs.map +1 -1
  322. package/dist/managers/MXLTraceManager/MXLExtendedSpan.js.map +1 -1
  323. package/dist/managers/MXLUserManager/MXLUserManager.cjs +14 -14
  324. package/dist/managers/MXLUserManager/MXLUserManager.cjs.map +1 -1
  325. package/dist/managers/MXLUserManager/MXLUserManager.js +14 -14
  326. package/dist/managers/MXLUserManager/MXLUserManager.js.map +1 -1
  327. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.cjs +574 -0
  328. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.cjs.map +1 -0
  329. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.cts +142 -0
  330. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.cts.map +1 -0
  331. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.ts +142 -0
  332. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.ts.map +1 -0
  333. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.js +572 -0
  334. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.js.map +1 -0
  335. package/dist/managers/MXLUserSessionManager/constants.cjs +55 -0
  336. package/dist/managers/MXLUserSessionManager/constants.cjs.map +1 -0
  337. package/dist/managers/MXLUserSessionManager/constants.d.cts +31 -0
  338. package/dist/managers/MXLUserSessionManager/constants.d.cts.map +1 -0
  339. package/dist/managers/MXLUserSessionManager/constants.d.ts +31 -0
  340. package/dist/managers/MXLUserSessionManager/constants.d.ts.map +1 -0
  341. package/dist/managers/MXLUserSessionManager/constants.js +37 -0
  342. package/dist/managers/MXLUserSessionManager/constants.js.map +1 -0
  343. package/dist/managers/MXLUserSessionManager/index.cjs +6 -0
  344. package/dist/managers/MXLUserSessionManager/index.d.cts +4 -0
  345. package/dist/managers/MXLUserSessionManager/index.d.ts +4 -0
  346. package/dist/managers/MXLUserSessionManager/index.js +3 -0
  347. package/dist/managers/MXLUserSessionManager/types.d.cts +84 -0
  348. package/dist/managers/MXLUserSessionManager/types.d.cts.map +1 -0
  349. package/dist/managers/MXLUserSessionManager/types.d.ts +84 -0
  350. package/dist/managers/MXLUserSessionManager/types.d.ts.map +1 -0
  351. package/dist/managers/MXLUserSessionManager/utils/activity.cjs +25 -0
  352. package/dist/managers/MXLUserSessionManager/utils/activity.cjs.map +1 -0
  353. package/dist/managers/MXLUserSessionManager/utils/activity.d.cts +40 -0
  354. package/dist/managers/MXLUserSessionManager/utils/activity.d.cts.map +1 -0
  355. package/dist/managers/MXLUserSessionManager/utils/activity.d.ts +40 -0
  356. package/dist/managers/MXLUserSessionManager/utils/activity.d.ts.map +1 -0
  357. package/dist/managers/MXLUserSessionManager/utils/activity.js +22 -0
  358. package/dist/managers/MXLUserSessionManager/utils/activity.js.map +1 -0
  359. package/dist/managers/MXLUserSessionManager/utils/index.cjs +11 -0
  360. package/dist/managers/MXLUserSessionManager/utils/index.d.cts +3 -0
  361. package/dist/managers/MXLUserSessionManager/utils/index.d.ts +3 -0
  362. package/dist/managers/MXLUserSessionManager/utils/index.js +3 -0
  363. package/dist/managers/MXLUserSessionManager/utils/state.cjs +78 -0
  364. package/dist/managers/MXLUserSessionManager/utils/state.cjs.map +1 -0
  365. package/dist/managers/MXLUserSessionManager/utils/state.d.cts +39 -0
  366. package/dist/managers/MXLUserSessionManager/utils/state.d.cts.map +1 -0
  367. package/dist/managers/MXLUserSessionManager/utils/state.d.ts +39 -0
  368. package/dist/managers/MXLUserSessionManager/utils/state.d.ts.map +1 -0
  369. package/dist/managers/MXLUserSessionManager/utils/state.js +73 -0
  370. package/dist/managers/MXLUserSessionManager/utils/state.js.map +1 -0
  371. package/dist/managers/MXLUserSessionManager/utils/tabTracking.cjs +132 -0
  372. package/dist/managers/MXLUserSessionManager/utils/tabTracking.cjs.map +1 -0
  373. package/dist/managers/MXLUserSessionManager/utils/tabTracking.d.cts +33 -0
  374. package/dist/managers/MXLUserSessionManager/utils/tabTracking.d.cts.map +1 -0
  375. package/dist/managers/MXLUserSessionManager/utils/tabTracking.d.ts +33 -0
  376. package/dist/managers/MXLUserSessionManager/utils/tabTracking.d.ts.map +1 -0
  377. package/dist/managers/MXLUserSessionManager/utils/tabTracking.js +127 -0
  378. package/dist/managers/MXLUserSessionManager/utils/tabTracking.js.map +1 -0
  379. package/dist/managers/index.cjs +5 -2
  380. package/dist/managers/index.d.cts +4 -3
  381. package/dist/managers/index.d.ts +4 -3
  382. package/dist/managers/index.js +3 -2
  383. package/dist/mxl-web-sdk.js +1 -23
  384. package/dist/mxl-web-sdk.js.map +1 -1
  385. package/dist/processors/BrowserLogRecordProcessor/BrowserLogRecordProcessor.cjs.map +1 -1
  386. package/dist/processors/BrowserLogRecordProcessor/BrowserLogRecordProcessor.js.map +1 -1
  387. package/dist/processors/BrowserSpanProcessor/BrowserSpanProcessor.cjs.map +1 -1
  388. package/dist/processors/BrowserSpanProcessor/BrowserSpanProcessor.js.map +1 -1
  389. package/dist/processors/LogRecordScrubProcessor/LogRecordScrubProcessor.cjs.map +1 -1
  390. package/dist/processors/LogRecordScrubProcessor/LogRecordScrubProcessor.js.map +1 -1
  391. package/dist/processors/LogRecordScrubProcessor/types.d.cts +2 -2
  392. package/dist/processors/LogRecordScrubProcessor/types.d.cts.map +1 -1
  393. package/dist/processors/LogRecordScrubProcessor/types.d.ts +2 -2
  394. package/dist/processors/LogRecordScrubProcessor/types.d.ts.map +1 -1
  395. package/dist/processors/MXLLogRecordProcessor/MXLLogRecordProcessor.cjs.map +1 -1
  396. package/dist/processors/MXLLogRecordProcessor/MXLLogRecordProcessor.js.map +1 -1
  397. package/dist/processors/MXLLogRecordProcessor/types.d.cts +2 -2
  398. package/dist/processors/MXLLogRecordProcessor/types.d.cts.map +1 -1
  399. package/dist/processors/MXLLogRecordProcessor/types.d.ts +2 -2
  400. package/dist/processors/MXLLogRecordProcessor/types.d.ts.map +1 -1
  401. package/dist/processors/MXLNetworkSpanProcessor/MXLNetworkSpanProcessor.cjs.map +1 -1
  402. package/dist/processors/MXLNetworkSpanProcessor/MXLNetworkSpanProcessor.js.map +1 -1
  403. package/dist/processors/MXLNetworkSpanProcessor/types.cjs.map +1 -1
  404. package/dist/processors/MXLNetworkSpanProcessor/types.js.map +1 -1
  405. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs +74 -0
  406. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.cjs.map +1 -0
  407. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts +28 -0
  408. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.cts.map +1 -0
  409. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts +28 -0
  410. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.d.ts.map +1 -0
  411. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js +72 -0
  412. package/dist/processors/MXLSessionPartBatchedSpanProcessor/MXLSessionPartBatchedSpanProcessor.js.map +1 -0
  413. package/dist/processors/MXLSessionPartBatchedSpanProcessor/index.cjs +3 -0
  414. package/dist/processors/MXLSessionPartBatchedSpanProcessor/index.d.cts +3 -0
  415. package/dist/processors/MXLSessionPartBatchedSpanProcessor/index.d.ts +3 -0
  416. package/dist/processors/MXLSessionPartBatchedSpanProcessor/index.js +2 -0
  417. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts +15 -0
  418. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.cts.map +1 -0
  419. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts +15 -0
  420. package/dist/processors/MXLSessionPartBatchedSpanProcessor/types.d.ts.map +1 -0
  421. package/dist/processors/PageLogRecordProcessor/PageLogRecordProcessor.cjs.map +1 -1
  422. package/dist/processors/PageLogRecordProcessor/PageLogRecordProcessor.js.map +1 -1
  423. package/dist/processors/PageSpanProcessor/PageSpanProcessor.cjs.map +1 -1
  424. package/dist/processors/PageSpanProcessor/PageSpanProcessor.js.map +1 -1
  425. package/dist/processors/SpanScrubProcessor/SpanScrubProcessor.cjs.map +1 -1
  426. package/dist/processors/SpanScrubProcessor/SpanScrubProcessor.js.map +1 -1
  427. package/dist/processors/UserLogRecordProcessor/UserLogRecordProcessor.cjs.map +1 -1
  428. package/dist/processors/UserLogRecordProcessor/UserLogRecordProcessor.js.map +1 -1
  429. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.cjs +34 -0
  430. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.cjs.map +1 -0
  431. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.d.cts +16 -0
  432. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.d.cts.map +1 -0
  433. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.d.ts +16 -0
  434. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.d.ts.map +1 -0
  435. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.js +32 -0
  436. package/dist/processors/UserSessionLogRecordProcessor/UserSessionLogRecordProcessor.js.map +1 -0
  437. package/dist/processors/UserSessionLogRecordProcessor/index.cjs +3 -0
  438. package/dist/processors/UserSessionLogRecordProcessor/index.d.cts +3 -0
  439. package/dist/processors/UserSessionLogRecordProcessor/index.d.ts +3 -0
  440. package/dist/processors/UserSessionLogRecordProcessor/index.js +2 -0
  441. package/dist/processors/UserSessionLogRecordProcessor/types.d.cts +8 -0
  442. package/dist/processors/UserSessionLogRecordProcessor/types.d.cts.map +1 -0
  443. package/dist/processors/UserSessionLogRecordProcessor/types.d.ts +8 -0
  444. package/dist/processors/UserSessionLogRecordProcessor/types.d.ts.map +1 -0
  445. package/dist/processors/UserSpanProcessor/UserSpanProcessor.cjs.map +1 -1
  446. package/dist/processors/UserSpanProcessor/UserSpanProcessor.js.map +1 -1
  447. package/dist/processors/index.cjs +4 -4
  448. package/dist/processors/index.d.cts +3 -3
  449. package/dist/processors/index.d.ts +3 -3
  450. package/dist/processors/index.js +3 -3
  451. package/dist/propagators/MXLW3CTraceContextPropagator/MXLW3CTraceContextPropagator.cjs.map +1 -1
  452. package/dist/propagators/MXLW3CTraceContextPropagator/MXLW3CTraceContextPropagator.js.map +1 -1
  453. package/dist/resources/appInstanceId.cjs +4 -4
  454. package/dist/resources/appInstanceId.cjs.map +1 -1
  455. package/dist/resources/appInstanceId.js +4 -4
  456. package/dist/resources/appInstanceId.js.map +1 -1
  457. package/dist/resources/constants/index.cjs +1 -1
  458. package/dist/resources/constants/index.cjs.map +1 -1
  459. package/dist/resources/constants/index.d.cts +1 -1
  460. package/dist/resources/constants/index.d.ts +1 -1
  461. package/dist/resources/constants/index.js +1 -1
  462. package/dist/resources/constants/index.js.map +1 -1
  463. package/dist/resources/webSdkResource.cjs +15 -19
  464. package/dist/resources/webSdkResource.cjs.map +1 -1
  465. package/dist/resources/webSdkResource.d.cts.map +1 -1
  466. package/dist/resources/webSdkResource.d.ts.map +1 -1
  467. package/dist/resources/webSdkResource.js +15 -19
  468. package/dist/resources/webSdkResource.js.map +1 -1
  469. package/dist/sdk/defaultAttributeScrubbers.cjs +8 -8
  470. package/dist/sdk/defaultAttributeScrubbers.cjs.map +1 -1
  471. package/dist/sdk/defaultAttributeScrubbers.js +8 -8
  472. package/dist/sdk/defaultAttributeScrubbers.js.map +1 -1
  473. package/dist/sdk/index.d.cts +3 -2
  474. package/dist/sdk/index.d.ts +3 -2
  475. package/dist/sdk/initSDK.cjs +137 -98
  476. package/dist/sdk/initSDK.cjs.map +1 -1
  477. package/dist/sdk/initSDK.d.cts +4 -2
  478. package/dist/sdk/initSDK.d.cts.map +1 -1
  479. package/dist/sdk/initSDK.d.ts +4 -2
  480. package/dist/sdk/initSDK.d.ts.map +1 -1
  481. package/dist/sdk/initSDK.js +137 -98
  482. package/dist/sdk/initSDK.js.map +1 -1
  483. package/dist/sdk/registry.cjs +1 -3
  484. package/dist/sdk/registry.cjs.map +1 -1
  485. package/dist/sdk/registry.d.cts.map +1 -1
  486. package/dist/sdk/registry.d.ts.map +1 -1
  487. package/dist/sdk/registry.js +1 -3
  488. package/dist/sdk/registry.js.map +1 -1
  489. package/dist/sdk/setupDefaultInstrumentations.cjs +9 -5
  490. package/dist/sdk/setupDefaultInstrumentations.cjs.map +1 -1
  491. package/dist/sdk/setupDefaultInstrumentations.d.cts +5 -2
  492. package/dist/sdk/setupDefaultInstrumentations.d.cts.map +1 -1
  493. package/dist/sdk/setupDefaultInstrumentations.d.ts +5 -2
  494. package/dist/sdk/setupDefaultInstrumentations.d.ts.map +1 -1
  495. package/dist/sdk/setupDefaultInstrumentations.js +9 -5
  496. package/dist/sdk/setupDefaultInstrumentations.js.map +1 -1
  497. package/dist/sdk/types.d.cts +68 -56
  498. package/dist/sdk/types.d.cts.map +1 -1
  499. package/dist/sdk/types.d.ts +69 -57
  500. package/dist/sdk/types.d.ts.map +1 -1
  501. package/dist/sdk/utils.cjs +1 -1
  502. package/dist/sdk/utils.cjs.map +1 -1
  503. package/dist/sdk/utils.d.cts.map +1 -1
  504. package/dist/sdk/utils.d.ts.map +1 -1
  505. package/dist/sdk/utils.js +1 -1
  506. package/dist/sdk/utils.js.map +1 -1
  507. package/dist/transport/FetchTransport/FetchTransport.cjs +13 -13
  508. package/dist/transport/FetchTransport/FetchTransport.cjs.map +1 -1
  509. package/dist/transport/FetchTransport/FetchTransport.js +13 -13
  510. package/dist/transport/FetchTransport/FetchTransport.js.map +1 -1
  511. package/dist/transport/RetryingTransport/RetryingTransport.cjs +1 -1
  512. package/dist/transport/RetryingTransport/RetryingTransport.cjs.map +1 -1
  513. package/dist/transport/RetryingTransport/RetryingTransport.js +1 -1
  514. package/dist/transport/RetryingTransport/RetryingTransport.js.map +1 -1
  515. package/dist/utils/NamespacedStorage/NamespacedStorage.cjs +69 -24
  516. package/dist/utils/NamespacedStorage/NamespacedStorage.cjs.map +1 -1
  517. package/dist/utils/NamespacedStorage/NamespacedStorage.d.cts +27 -13
  518. package/dist/utils/NamespacedStorage/NamespacedStorage.d.cts.map +1 -1
  519. package/dist/utils/NamespacedStorage/NamespacedStorage.d.ts +27 -13
  520. package/dist/utils/NamespacedStorage/NamespacedStorage.d.ts.map +1 -1
  521. package/dist/utils/NamespacedStorage/NamespacedStorage.js +68 -24
  522. package/dist/utils/NamespacedStorage/NamespacedStorage.js.map +1 -1
  523. package/dist/utils/PerformanceManager/OTelPerformanceManager.cjs.map +1 -1
  524. package/dist/utils/PerformanceManager/OTelPerformanceManager.js.map +1 -1
  525. package/dist/utils/clampNumber.cjs +23 -0
  526. package/dist/utils/clampNumber.cjs.map +1 -0
  527. package/dist/utils/clampNumber.d.cts +24 -0
  528. package/dist/utils/clampNumber.d.cts.map +1 -0
  529. package/dist/utils/clampNumber.d.ts +24 -0
  530. package/dist/utils/clampNumber.d.ts.map +1 -0
  531. package/dist/utils/clampNumber.js +22 -0
  532. package/dist/utils/clampNumber.js.map +1 -0
  533. package/dist/utils/createSafeProxy/createSafeProxy.cjs +2 -2
  534. package/dist/utils/createSafeProxy/createSafeProxy.cjs.map +1 -1
  535. package/dist/utils/createSafeProxy/createSafeProxy.d.cts.map +1 -1
  536. package/dist/utils/createSafeProxy/createSafeProxy.d.ts.map +1 -1
  537. package/dist/utils/createSafeProxy/createSafeProxy.js +2 -2
  538. package/dist/utils/createSafeProxy/createSafeProxy.js.map +1 -1
  539. package/dist/utils/generateWebVitalID.cjs +1 -3
  540. package/dist/utils/generateWebVitalID.cjs.map +1 -1
  541. package/dist/utils/generateWebVitalID.js +1 -3
  542. package/dist/utils/generateWebVitalID.js.map +1 -1
  543. package/dist/utils/getIncrementedCount.cjs +2 -2
  544. package/dist/utils/getIncrementedCount.cjs.map +1 -1
  545. package/dist/utils/getIncrementedCount.js +2 -2
  546. package/dist/utils/getIncrementedCount.js.map +1 -1
  547. package/dist/utils/globalConfig.cjs.map +1 -1
  548. package/dist/utils/globalConfig.d.cts +2 -2
  549. package/dist/utils/globalConfig.d.cts.map +1 -1
  550. package/dist/utils/globalConfig.d.ts +2 -2
  551. package/dist/utils/globalConfig.d.ts.map +1 -1
  552. package/dist/utils/globalConfig.js.map +1 -1
  553. package/dist/utils/index.cjs +2 -2
  554. package/dist/utils/index.d.cts +3 -3
  555. package/dist/utils/index.d.ts +3 -3
  556. package/dist/utils/index.js +2 -2
  557. package/dist/utils/isDeviceIdEnabled.cjs.map +1 -1
  558. package/dist/utils/isDeviceIdEnabled.js.map +1 -1
  559. package/dist/utils/performanceObserver/performanceObserver.cjs +3 -3
  560. package/dist/utils/performanceObserver/performanceObserver.cjs.map +1 -1
  561. package/dist/utils/performanceObserver/performanceObserver.js +3 -3
  562. package/dist/utils/performanceObserver/performanceObserver.js.map +1 -1
  563. package/dist/utils/throttle.cjs +13 -9
  564. package/dist/utils/throttle.cjs.map +1 -1
  565. package/dist/utils/throttle.d.cts +6 -3
  566. package/dist/utils/throttle.d.cts.map +1 -1
  567. package/dist/utils/throttle.d.ts +6 -3
  568. package/dist/utils/throttle.d.ts.map +1 -1
  569. package/dist/utils/throttle.js +13 -9
  570. package/dist/utils/throttle.js.map +1 -1
  571. package/package.json +56 -56
  572. package/dist/api-sessions/api/SessionAPI/types.d.cts +0 -8
  573. package/dist/api-sessions/api/SessionAPI/types.d.cts.map +0 -1
  574. package/dist/api-sessions/api/SessionAPI/types.d.ts +0 -8
  575. package/dist/api-sessions/api/SessionAPI/types.d.ts.map +0 -1
  576. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.cjs +0 -31
  577. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.cjs.map +0 -1
  578. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.d.cts +0 -24
  579. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.d.cts.map +0 -1
  580. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.d.ts +0 -24
  581. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.d.ts.map +0 -1
  582. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.js +0 -30
  583. package/dist/api-sessions/manager/NoOpSpanSessionManager/NoOpSpanSessionManager.js.map +0 -1
  584. package/dist/api-sessions/manager/NoOpSpanSessionManager/index.cjs +0 -3
  585. package/dist/api-sessions/manager/NoOpSpanSessionManager/index.d.cts +0 -2
  586. package/dist/api-sessions/manager/NoOpSpanSessionManager/index.d.ts +0 -2
  587. package/dist/api-sessions/manager/NoOpSpanSessionManager/index.js +0 -2
  588. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.cjs +0 -55
  589. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.cjs.map +0 -1
  590. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.d.cts +0 -27
  591. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.d.cts.map +0 -1
  592. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.d.ts +0 -27
  593. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.d.ts.map +0 -1
  594. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.js +0 -55
  595. package/dist/api-sessions/manager/ProxySpanSessionManager/ProxySpanSessionManager.js.map +0 -1
  596. package/dist/api-sessions/manager/ProxySpanSessionManager/index.cjs +0 -3
  597. package/dist/api-sessions/manager/ProxySpanSessionManager/index.d.cts +0 -2
  598. package/dist/api-sessions/manager/ProxySpanSessionManager/index.d.ts +0 -2
  599. package/dist/api-sessions/manager/ProxySpanSessionManager/index.js +0 -2
  600. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.cjs +0 -27
  601. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.cjs.map +0 -1
  602. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.d.cts +0 -15
  603. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.d.cts.map +0 -1
  604. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.d.ts +0 -15
  605. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.d.ts.map +0 -1
  606. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.js +0 -25
  607. package/dist/instrumentations/fetch/MXLFetchInstrumentation/MXLFetchInstrumentation.js.map +0 -1
  608. package/dist/instrumentations/fetch/MXLFetchInstrumentation/index.cjs +0 -3
  609. package/dist/instrumentations/fetch/MXLFetchInstrumentation/index.d.cts +0 -2
  610. package/dist/instrumentations/fetch/MXLFetchInstrumentation/index.d.ts +0 -2
  611. package/dist/instrumentations/fetch/MXLFetchInstrumentation/index.js +0 -2
  612. package/dist/instrumentations/fetch/MXLFetchInstrumentation/types.d.cts +0 -9
  613. package/dist/instrumentations/fetch/MXLFetchInstrumentation/types.d.cts.map +0 -1
  614. package/dist/instrumentations/fetch/MXLFetchInstrumentation/types.d.ts +0 -9
  615. package/dist/instrumentations/fetch/MXLFetchInstrumentation/types.d.ts.map +0 -1
  616. package/dist/instrumentations/fetch/index.cjs +0 -3
  617. package/dist/instrumentations/fetch/index.d.cts +0 -3
  618. package/dist/instrumentations/fetch/index.d.ts +0 -3
  619. package/dist/instrumentations/fetch/index.js +0 -2
  620. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.cjs +0 -60
  621. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.cjs.map +0 -1
  622. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.d.cts +0 -24
  623. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.d.cts.map +0 -1
  624. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.d.ts +0 -24
  625. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.d.ts.map +0 -1
  626. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.js +0 -59
  627. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/SpanSessionBrowserActivityInstrumentation.js.map +0 -1
  628. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.cjs +0 -19
  629. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.cjs.map +0 -1
  630. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.d.cts +0 -10
  631. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.d.cts.map +0 -1
  632. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.d.ts +0 -10
  633. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.d.ts.map +0 -1
  634. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.js +0 -16
  635. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/constants.js.map +0 -1
  636. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/index.cjs +0 -3
  637. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/index.d.cts +0 -3
  638. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/index.d.ts +0 -3
  639. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/index.js +0 -2
  640. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/types.d.cts +0 -6
  641. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/types.d.cts.map +0 -1
  642. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/types.d.ts +0 -6
  643. package/dist/instrumentations/session/SpanSessionBrowserActivityInstrumentation/types.d.ts.map +0 -1
  644. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.cjs +0 -24
  645. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.cjs.map +0 -1
  646. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.d.cts +0 -14
  647. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.d.cts.map +0 -1
  648. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.d.ts +0 -14
  649. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.d.ts.map +0 -1
  650. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.js +0 -23
  651. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/SpanSessionOnLoadInstrumentation.js.map +0 -1
  652. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/index.cjs +0 -3
  653. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/index.d.cts +0 -3
  654. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/index.d.ts +0 -3
  655. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/index.js +0 -2
  656. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/types.d.cts +0 -6
  657. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/types.d.cts.map +0 -1
  658. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/types.d.ts +0 -6
  659. package/dist/instrumentations/session/SpanSessionOnLoadInstrumentation/types.d.ts.map +0 -1
  660. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.cjs +0 -55
  661. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.cjs.map +0 -1
  662. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.d.cts +0 -22
  663. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.d.cts.map +0 -1
  664. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.d.ts +0 -22
  665. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.d.ts.map +0 -1
  666. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.js +0 -54
  667. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/SpanSessionTimeoutInstrumentation.js.map +0 -1
  668. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.cjs +0 -7
  669. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.cjs.map +0 -1
  670. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.d.cts +0 -5
  671. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.d.cts.map +0 -1
  672. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.d.ts +0 -5
  673. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.d.ts.map +0 -1
  674. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.js +0 -6
  675. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/constants.js.map +0 -1
  676. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/index.cjs +0 -3
  677. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/index.d.cts +0 -3
  678. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/index.d.ts +0 -3
  679. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/index.js +0 -2
  680. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.cjs +0 -0
  681. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.d.cts +0 -6
  682. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.d.cts.map +0 -1
  683. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.d.ts +0 -6
  684. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.d.ts.map +0 -1
  685. package/dist/instrumentations/session/SpanSessionTimeoutInstrumentation/types.js +0 -0
  686. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.cjs +0 -38
  687. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.cjs.map +0 -1
  688. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.d.cts +0 -17
  689. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.d.cts.map +0 -1
  690. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.d.ts +0 -17
  691. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.d.ts.map +0 -1
  692. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.js +0 -37
  693. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/SpanSessionVisibilityInstrumentation.js.map +0 -1
  694. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/index.cjs +0 -3
  695. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/index.d.cts +0 -3
  696. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/index.d.ts +0 -3
  697. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/index.js +0 -2
  698. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.cjs +0 -0
  699. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.d.cts +0 -10
  700. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.d.cts.map +0 -1
  701. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.d.ts +0 -10
  702. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.d.ts.map +0 -1
  703. package/dist/instrumentations/session/SpanSessionVisibilityInstrumentation/types.js +0 -0
  704. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.cjs +0 -27
  705. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.cjs.map +0 -1
  706. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.d.cts +0 -15
  707. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.d.cts.map +0 -1
  708. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.d.ts +0 -15
  709. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.d.ts.map +0 -1
  710. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.js +0 -25
  711. package/dist/instrumentations/xhr/MXLXHRInstrumentation/MXLXHRInstrumentation.js.map +0 -1
  712. package/dist/instrumentations/xhr/MXLXHRInstrumentation/index.cjs +0 -3
  713. package/dist/instrumentations/xhr/MXLXHRInstrumentation/index.d.cts +0 -2
  714. package/dist/instrumentations/xhr/MXLXHRInstrumentation/index.d.ts +0 -2
  715. package/dist/instrumentations/xhr/MXLXHRInstrumentation/index.js +0 -2
  716. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.cjs +0 -0
  717. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.d.cts +0 -9
  718. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.d.cts.map +0 -1
  719. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.d.ts +0 -9
  720. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.d.ts.map +0 -1
  721. package/dist/instrumentations/xhr/MXLXHRInstrumentation/types.js +0 -0
  722. package/dist/instrumentations/xhr/index.cjs +0 -3
  723. package/dist/instrumentations/xhr/index.d.cts +0 -3
  724. package/dist/instrumentations/xhr/index.d.ts +0 -3
  725. package/dist/instrumentations/xhr/index.js +0 -2
  726. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.cjs +0 -350
  727. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.cjs.map +0 -1
  728. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.cts +0 -72
  729. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.cts.map +0 -1
  730. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.ts +0 -72
  731. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.d.ts.map +0 -1
  732. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.js +0 -348
  733. package/dist/managers/MXLSpanSessionManager/MXLSpanSessionManager.js.map +0 -1
  734. package/dist/managers/MXLSpanSessionManager/constants.cjs +0 -11
  735. package/dist/managers/MXLSpanSessionManager/constants.cjs.map +0 -1
  736. package/dist/managers/MXLSpanSessionManager/constants.d.cts +0 -7
  737. package/dist/managers/MXLSpanSessionManager/constants.d.cts.map +0 -1
  738. package/dist/managers/MXLSpanSessionManager/constants.d.ts +0 -7
  739. package/dist/managers/MXLSpanSessionManager/constants.d.ts.map +0 -1
  740. package/dist/managers/MXLSpanSessionManager/constants.js +0 -8
  741. package/dist/managers/MXLSpanSessionManager/constants.js.map +0 -1
  742. package/dist/managers/MXLSpanSessionManager/index.cjs +0 -3
  743. package/dist/managers/MXLSpanSessionManager/index.d.cts +0 -3
  744. package/dist/managers/MXLSpanSessionManager/index.d.ts +0 -3
  745. package/dist/managers/MXLSpanSessionManager/index.js +0 -2
  746. package/dist/managers/MXLSpanSessionManager/types.cjs +0 -0
  747. package/dist/managers/MXLSpanSessionManager/types.d.cts +0 -41
  748. package/dist/managers/MXLSpanSessionManager/types.d.cts.map +0 -1
  749. package/dist/managers/MXLSpanSessionManager/types.d.ts +0 -41
  750. package/dist/managers/MXLSpanSessionManager/types.d.ts.map +0 -1
  751. package/dist/managers/MXLSpanSessionManager/types.js +0 -0
  752. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.cjs +0 -28
  753. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.cjs.map +0 -1
  754. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.d.cts +0 -16
  755. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.d.cts.map +0 -1
  756. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.d.ts +0 -16
  757. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.d.ts.map +0 -1
  758. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.js +0 -26
  759. package/dist/processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.js.map +0 -1
  760. package/dist/processors/IdentifiableSessionLogRecordProcessor/index.cjs +0 -3
  761. package/dist/processors/IdentifiableSessionLogRecordProcessor/index.d.cts +0 -2
  762. package/dist/processors/IdentifiableSessionLogRecordProcessor/index.d.ts +0 -2
  763. package/dist/processors/IdentifiableSessionLogRecordProcessor/index.js +0 -2
  764. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.cjs +0 -0
  765. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.d.cts +0 -9
  766. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.d.cts.map +0 -1
  767. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.d.ts +0 -9
  768. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.d.ts.map +0 -1
  769. package/dist/processors/IdentifiableSessionLogRecordProcessor/types.js +0 -0
  770. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.cjs +0 -95
  771. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.cjs.map +0 -1
  772. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.d.cts +0 -34
  773. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.d.cts.map +0 -1
  774. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.d.ts +0 -34
  775. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.d.ts.map +0 -1
  776. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.js +0 -93
  777. package/dist/processors/MXLSessionBatchedSpanProcessor/MXLSessionBatchedSpanProcessor.js.map +0 -1
  778. package/dist/processors/MXLSessionBatchedSpanProcessor/index.cjs +0 -3
  779. package/dist/processors/MXLSessionBatchedSpanProcessor/index.d.cts +0 -2
  780. package/dist/processors/MXLSessionBatchedSpanProcessor/index.d.ts +0 -2
  781. package/dist/processors/MXLSessionBatchedSpanProcessor/index.js +0 -2
  782. package/dist/processors/MXLSessionBatchedSpanProcessor/types.cjs +0 -0
  783. package/dist/processors/MXLSessionBatchedSpanProcessor/types.d.cts +0 -19
  784. package/dist/processors/MXLSessionBatchedSpanProcessor/types.d.cts.map +0 -1
  785. package/dist/processors/MXLSessionBatchedSpanProcessor/types.d.ts +0 -19
  786. package/dist/processors/MXLSessionBatchedSpanProcessor/types.d.ts.map +0 -1
  787. package/dist/processors/MXLSessionBatchedSpanProcessor/types.js +0 -0
  788. package/dist/sdk/setupSessionRecorder.cjs +0 -87
  789. package/dist/sdk/setupSessionRecorder.cjs.map +0 -1
  790. package/dist/sdk/setupSessionRecorder.d.cts +0 -30
  791. package/dist/sdk/setupSessionRecorder.d.cts.map +0 -1
  792. package/dist/sdk/setupSessionRecorder.d.ts +0 -30
  793. package/dist/sdk/setupSessionRecorder.d.ts.map +0 -1
  794. package/dist/sdk/setupSessionRecorder.js +0 -83
  795. package/dist/sdk/setupSessionRecorder.js.map +0 -1
  796. package/dist/utils/MXLSpanStorage/MXLSpanStorage.cjs +0 -116
  797. package/dist/utils/MXLSpanStorage/MXLSpanStorage.cjs.map +0 -1
  798. package/dist/utils/MXLSpanStorage/MXLSpanStorage.d.cts +0 -42
  799. package/dist/utils/MXLSpanStorage/MXLSpanStorage.d.cts.map +0 -1
  800. package/dist/utils/MXLSpanStorage/MXLSpanStorage.d.ts +0 -42
  801. package/dist/utils/MXLSpanStorage/MXLSpanStorage.d.ts.map +0 -1
  802. package/dist/utils/MXLSpanStorage/MXLSpanStorage.js +0 -114
  803. package/dist/utils/MXLSpanStorage/MXLSpanStorage.js.map +0 -1
  804. package/dist/utils/MXLSpanStorage/index.cjs +0 -3
  805. package/dist/utils/MXLSpanStorage/index.d.cts +0 -2
  806. package/dist/utils/MXLSpanStorage/index.d.ts +0 -2
  807. package/dist/utils/MXLSpanStorage/index.js +0 -2
  808. package/dist/utils/MXLSpanStorage/types.cjs +0 -0
  809. package/dist/utils/MXLSpanStorage/types.d.cts +0 -2
  810. package/dist/utils/MXLSpanStorage/types.d.ts +0 -2
  811. package/dist/utils/MXLSpanStorage/types.js +0 -0
  812. /package/dist/{api-sessions/api/SessionAPI → instrumentations/replay/ReplayInstrumentation}/types.cjs +0 -0
  813. /package/dist/{api-sessions/api/SessionAPI → instrumentations/replay/ReplayInstrumentation}/types.js +0 -0
  814. /package/dist/{instrumentations/fetch/MXLFetchInstrumentation → managers/MXLUserSessionManager}/types.cjs +0 -0
  815. /package/dist/{instrumentations/fetch/MXLFetchInstrumentation → managers/MXLUserSessionManager}/types.js +0 -0
  816. /package/dist/{instrumentations/session/SpanSessionBrowserActivityInstrumentation → processors/MXLSessionPartBatchedSpanProcessor}/types.cjs +0 -0
  817. /package/dist/{instrumentations/session/SpanSessionBrowserActivityInstrumentation → processors/MXLSessionPartBatchedSpanProcessor}/types.js +0 -0
  818. /package/dist/{instrumentations/session/SpanSessionOnLoadInstrumentation → processors/UserSessionLogRecordProcessor}/types.cjs +0 -0
  819. /package/dist/{instrumentations/session/SpanSessionOnLoadInstrumentation → processors/UserSessionLogRecordProcessor}/types.js +0 -0
@@ -0,0 +1,572 @@
1
+ import { clampNumber } from "../../utils/clampNumber.js";
2
+ import { generateUUID } from "../../utils/generateUUID.js";
3
+ import { getIncrementedCount } from "../../utils/getIncrementedCount.js";
4
+ import { KEY_MXL_COLD_START, KEY_MXL_EXPERIENCE_ID, KEY_MXL_IS_FINAL_SESSION_PART, KEY_MXL_NAVIGATION_SOURCE, KEY_MXL_REFERRER_URL, KEY_MXL_SDK_STARTUP_DURATION, KEY_MXL_SESSION_PART_END_REASON, KEY_MXL_SESSION_PART_ID, KEY_MXL_SESSION_PART_NUMBER, KEY_MXL_SESSION_PART_START_REASON, KEY_MXL_SOURCE_TAB_ID, KEY_MXL_STATE, KEY_MXL_TAB_ID, KEY_MXL_TYPE, KEY_MXL_USER_SESSION_ID, KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS, KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS, KEY_MXL_USER_SESSION_NUMBER, KEY_MXL_USER_SESSION_PART_INDEX, KEY_MXL_USER_SESSION_PREVIOUS_ID, KEY_MXL_USER_SESSION_START_TS, KEY_MXL_USER_SESSION_TERMINATION_REASON, KEY_PREFIX_MXL_PROPERTIES } from "../../constants/attributes.js";
5
+ import { getVisibilityState } from "../../utils/getVisibilityState.js";
6
+ import { throttle } from "../../utils/throttle.js";
7
+ import { DEFAULT_ACTIVITY_EVENTS, DEFAULT_ACTIVITY_THROTTLE_MS, DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS, DEFAULT_USER_SESSION_MAX_DURATION_SECONDS, MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS, MAX_USER_SESSION_MAX_DURATION_SECONDS, MIN_USER_SESSION_MAX_DURATION_SECONDS, MXL_LAST_END_USER_SESSION_TS_KEY, MXL_SESSION_PART_NUMBER_KEY, MXL_USER_SESSION_NUMBER_KEY, MXL_USER_SESSION_STATE_KEY, SESSION_PART_SPAN_NAME } from "./constants.js";
8
+ import { MXLExtendedSpan } from "../MXLTraceManager/MXLExtendedSpan.js";
9
+ import { addActivityListeners, isTabEngaged, removeActivityListeners } from "./utils/activity.js";
10
+ import { createUserSessionState, isUserSessionExpired, readPermanentProperties, readUserSessionState, storePermanentProperties } from "./utils/state.js";
11
+ import { initTabContext, setupNewTabClickListeners } from "./utils/tabTracking.js";
12
+ import { diag, trace } from "@opentelemetry/api";
13
+ import { ATTR_SESSION_ID, ATTR_SESSION_PREVIOUS_ID } from "@opentelemetry/semantic-conventions/incubating";
14
+ //#region src/managers/MXLUserSessionManager/MXLUserSessionManager.ts
15
+ /**
16
+ * Parts are engagement-gated (visible AND focused), so only one part can
17
+ * be active at a time. That mutex lets us treat storage as a
18
+ * plain shared row read on engagement and written on changes.
19
+ */
20
+ var MXLUserSessionManager = class MXLUserSessionManager {
21
+ static _testInstances = /* @__PURE__ */ new Set();
22
+ /** @internal Test-only helper to tear down leaked managers between tests. */
23
+ static shutdownAllTestInstances() {
24
+ for (const manager of MXLUserSessionManager._testInstances) manager._shutdown();
25
+ MXLUserSessionManager._testInstances.clear();
26
+ }
27
+ _state = null;
28
+ _previousUserSessionId = null;
29
+ _maxUserSessionDurationSeconds;
30
+ _inactivityTimeoutSeconds;
31
+ _maxDurationTimeout = null;
32
+ _isShutdown = false;
33
+ _permanentProperties = {};
34
+ _hasStoredState = false;
35
+ _activeSessionPartId = null;
36
+ _currentSessionPartNumber = null;
37
+ _sessionPartSpan = null;
38
+ _activeSessionPartCounts = null;
39
+ _coldStart = true;
40
+ _nextSessionPartCounts = {};
41
+ _sdkStartupDuration = 0;
42
+ _sessionPartStartedListeners = [];
43
+ _sessionPartEndedListeners = [];
44
+ _tracer;
45
+ _diag;
46
+ _perf;
47
+ _storage;
48
+ _visibilityDoc;
49
+ _limitManager;
50
+ _target;
51
+ _activityEvents;
52
+ _onActivityThrottled;
53
+ _sessionPartInactivityTimer = null;
54
+ _tab;
55
+ _navigationSource;
56
+ _referrerScrubbedUrl;
57
+ constructor({ config, diag: diagParam, perf, visibilityDoc, storage, limitManager, target = window, activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS, activityEvents = DEFAULT_ACTIVITY_EVENTS, tabStorage, referrer = typeof document !== "undefined" ? document.referrer : "", navigationPerformance = typeof window !== "undefined" ? window.performance : { getEntriesByType: () => [] } }) {
58
+ this._diag = diagParam ?? diag.createComponentLogger({ namespace: "MXLUserSessionManager" });
59
+ this._perf = perf;
60
+ this._visibilityDoc = visibilityDoc;
61
+ this._storage = storage;
62
+ this._limitManager = limitManager;
63
+ this._permanentProperties = readPermanentProperties(this._storage, this._diag);
64
+ this._tracer = trace.getTracer("mxl-web-sdk-session-parts");
65
+ this._target = target;
66
+ this._activityEvents = activityEvents;
67
+ this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);
68
+ const maxUserSessionDurationSeconds = clampNumber({
69
+ defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,
70
+ diag: this._diag,
71
+ max: MAX_USER_SESSION_MAX_DURATION_SECONDS,
72
+ min: MIN_USER_SESSION_MAX_DURATION_SECONDS,
73
+ value: config?.maxUserSessionDurationSeconds
74
+ });
75
+ const inactivityTimeoutSeconds = clampNumber({
76
+ defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,
77
+ diag: this._diag,
78
+ max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,
79
+ min: 30,
80
+ value: config?.inactivityTimeoutSeconds
81
+ });
82
+ this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;
83
+ if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;
84
+ else {
85
+ this._diag.warn(`inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`);
86
+ this._inactivityTimeoutSeconds = DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;
87
+ }
88
+ const tabContext = initTabContext({
89
+ diag: this._diag,
90
+ localStorage: storage,
91
+ navigationPerformance,
92
+ referrer,
93
+ sessionStorage: tabStorage
94
+ });
95
+ this._tab = tabContext.tab;
96
+ this._navigationSource = tabContext.navigationSource;
97
+ this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;
98
+ setupNewTabClickListeners(this._tab, storage, this._diag);
99
+ MXLUserSessionManager._testInstances.add(this);
100
+ }
101
+ setTracerProvider(tracerProvider) {
102
+ this._tracer = tracerProvider.getTracer("mxl-web-sdk-session-parts");
103
+ addActivityListeners({
104
+ activityEvents: this._activityEvents,
105
+ onActivity: this._onActivityThrottled,
106
+ onBlur: this._onBlur,
107
+ onFocus: this._onFocus,
108
+ onPageHide: this._onPageHide,
109
+ onPageShow: this._onPageShow,
110
+ onVisibilityChange: this._onVisibilityChange,
111
+ target: this._target,
112
+ visibilityDoc: this._visibilityDoc
113
+ });
114
+ const { state, created } = this._loadOrCreateUserSessionState(this._perf.getNowMillis());
115
+ this._state = state;
116
+ if (created) this._storeState();
117
+ }
118
+ recordSDKStartupDuration(duration) {
119
+ this._sdkStartupDuration = Math.ceil(duration);
120
+ }
121
+ getUserSessionId() {
122
+ return this._state?.userSessionId ?? null;
123
+ }
124
+ getPreviousUserSessionId() {
125
+ return this._state?.previousUserSessionId ?? this._previousUserSessionId;
126
+ }
127
+ getUserSessionStartTime() {
128
+ return this._state?.userSessionStartTs ?? null;
129
+ }
130
+ getUserSessionAttributes() {
131
+ if (!this._state) return null;
132
+ const previousUserSessionId = this.getPreviousUserSessionId() ?? "";
133
+ return {
134
+ [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,
135
+ [ATTR_SESSION_ID]: this._state.userSessionId,
136
+ [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,
137
+ [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,
138
+ [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,
139
+ [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,
140
+ [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,
141
+ [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,
142
+ [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]: this._state.maxUserSessionDurationSeconds,
143
+ [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]: this._state.inactivityTimeoutSeconds
144
+ };
145
+ }
146
+ endUserSession() {
147
+ if (!this._state) {
148
+ this._diag.debug("Trying to end user session, but there is no active session. This is a no-op.");
149
+ return;
150
+ }
151
+ const now = this._perf.getNowMillis();
152
+ const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);
153
+ const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);
154
+ if (Number.isFinite(lastEndTs) && now - lastEndTs < 5e3) {
155
+ this._diag.warn("endUserSession called within cooldown period, ignoring.");
156
+ return;
157
+ }
158
+ this._rolloverUserSession("manual");
159
+ this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));
160
+ }
161
+ getSessionPartId() {
162
+ return this._activeSessionPartId;
163
+ }
164
+ getSessionPartSpan() {
165
+ return this._sessionPartSpan;
166
+ }
167
+ startSessionPartInternal(reason) {
168
+ if (this._sessionPartSpan) {
169
+ this._diag.warn(`startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`);
170
+ return;
171
+ }
172
+ if (getVisibilityState(this._visibilityDoc) === "background" || !this._visibilityDoc.hasFocus()) {
173
+ this._diag.debug(`skipping session part start (reason: ${reason}) because the tab is not engaged`);
174
+ return;
175
+ }
176
+ const activeSessionPartId = generateUUID();
177
+ const previouslyRecordedCounts = this._nextSessionPartCounts;
178
+ this._beginUserSessionForPartStart();
179
+ const attributes = {
180
+ ...this.getUserSessionAttributes(),
181
+ [KEY_MXL_TYPE]: "ux.session_part",
182
+ [KEY_MXL_STATE]: "foreground",
183
+ [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,
184
+ [KEY_MXL_SESSION_PART_START_REASON]: reason,
185
+ [KEY_MXL_COLD_START]: this._coldStart,
186
+ [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,
187
+ [KEY_MXL_TAB_ID]: this._tab.tabId,
188
+ [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,
189
+ ...previouslyRecordedCounts
190
+ };
191
+ if (this._referrerScrubbedUrl) attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;
192
+ if (this._tab.sourceTabId) attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;
193
+ this._activeSessionPartId = activeSessionPartId;
194
+ let span;
195
+ try {
196
+ span = new MXLExtendedSpan(this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }));
197
+ } catch (error) {
198
+ this._activeSessionPartId = null;
199
+ this._diag.error("Error starting session part span", error);
200
+ return;
201
+ }
202
+ this._activeSessionPartCounts = {};
203
+ this._nextSessionPartCounts = {};
204
+ this._sessionPartSpan = span;
205
+ this._coldStart = false;
206
+ this._startSessionPartInactivityTimer();
207
+ this._fireListeners(this._sessionPartStartedListeners, "started");
208
+ }
209
+ endSessionPartInternal(reason, userSessionEndReason) {
210
+ if (!this._sessionPartSpan) {
211
+ this._diag.debug("trying to end a session part, but there is no session part in progress. This is a no-op.");
212
+ return;
213
+ }
214
+ this._clearSessionPartInactivityTimer();
215
+ const isFinal = reason === "user_session_ended" || reason === "inactivity";
216
+ const partEndTs = this._perf.getNowMillis();
217
+ const span = this._sessionPartSpan;
218
+ try {
219
+ const endAttrs = {
220
+ [KEY_MXL_SESSION_PART_END_REASON]: reason,
221
+ ...this._activeSessionPartCounts,
222
+ ...this._limitManager.getDiagnosticCounts(),
223
+ [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration
224
+ };
225
+ if (isFinal) {
226
+ endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;
227
+ if (userSessionEndReason) endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] = userSessionEndReason;
228
+ }
229
+ const propertyAttrs = {};
230
+ for (const [bareKey, value] of Object.entries(this.getSessionPartProperties())) propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;
231
+ try {
232
+ span.setAttributes({
233
+ ...propertyAttrs,
234
+ ...endAttrs
235
+ });
236
+ } catch (error) {
237
+ this._diag.warn("Error setting end attributes on session part span; ending span without them", error);
238
+ }
239
+ } finally {
240
+ this._fireListeners(this._sessionPartEndedListeners, "ended");
241
+ try {
242
+ span.end(partEndTs);
243
+ } catch (error) {
244
+ this._diag.warn("Error ending session part span", error);
245
+ }
246
+ this._sessionPartSpan = null;
247
+ this._activeSessionPartId = null;
248
+ this._activeSessionPartCounts = null;
249
+ this._currentSessionPartNumber = null;
250
+ this._limitManager.reset();
251
+ }
252
+ if (isFinal) {
253
+ this._previousUserSessionId = this._state?.userSessionId ?? null;
254
+ this._state = null;
255
+ this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);
256
+ this._clearMaxDurationTimer();
257
+ } else this._continueUserSessionAfterPartEnd(partEndTs);
258
+ }
259
+ addBreadcrumb(name) {
260
+ if (!this._sessionPartSpan) {
261
+ this._diag.debug("trying to add breadcrumb, but there is no session part in progress. This is a no-op.");
262
+ return;
263
+ }
264
+ const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);
265
+ if (limitedBreadcrumb === "dropped") return;
266
+ this._sessionPartSpan.addEvent("mxl-breadcrumb", { message: limitedBreadcrumb.name }, this._perf.getNowMillis());
267
+ }
268
+ addProperty(propertyKey, value, options) {
269
+ const limitedSessionProperty = this._limitManager.limitSessionProperty(propertyKey, value);
270
+ if (limitedSessionProperty === "dropped") return;
271
+ const bareKey = limitedSessionProperty.key;
272
+ const bareValue = limitedSessionProperty.value;
273
+ if (options?.lifespan === "permanent") {
274
+ const candidate = {
275
+ ...this._permanentProperties,
276
+ [bareKey]: bareValue
277
+ };
278
+ if (!storePermanentProperties(this._storage, candidate)) {
279
+ this._diag.warn("Storage unavailable; rejecting permanent property write.");
280
+ return;
281
+ }
282
+ this._permanentProperties = candidate;
283
+ this._removeFromUserSessionProperties(bareKey);
284
+ return;
285
+ }
286
+ const { state } = this._loadOrCreateUserSessionState(this._perf.getNowMillis());
287
+ this._state = {
288
+ ...state,
289
+ userSessionProperties: {
290
+ ...state.userSessionProperties,
291
+ [bareKey]: bareValue
292
+ }
293
+ };
294
+ if (!this._storeState()) {
295
+ this._state = state;
296
+ this._diag.warn("Storage unavailable; rejecting user-session property write.");
297
+ }
298
+ }
299
+ removeProperty(propertyKey) {
300
+ const bareKey = this._limitManager.truncateString("session_property_key", propertyKey);
301
+ this._removeFromPermanentProperties(bareKey);
302
+ this._removeFromUserSessionProperties(bareKey);
303
+ }
304
+ /**
305
+ * Bare-keyed view of properties for the active part. User-session-scoped
306
+ * entries shadow permanent ones, matching the cross-scope flip rule
307
+ * enforced in `addProperty`. Callers apply the wire-format prefix at
308
+ * stamp time.
309
+ */
310
+ getSessionPartProperties() {
311
+ return {
312
+ ...this._permanentProperties,
313
+ ...this._state?.userSessionProperties
314
+ };
315
+ }
316
+ incrSessionPartCountForKey(key) {
317
+ if (!this._sessionPartSpan || !this._activeSessionPartCounts) {
318
+ this._diag.debug("trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.");
319
+ return;
320
+ }
321
+ this._activeSessionPartCounts[key] = (this._activeSessionPartCounts[key] || 0) + 1;
322
+ }
323
+ incrNextSessionPartCountForKey(key) {
324
+ this._nextSessionPartCounts[key] = (this._nextSessionPartCounts[key] || 0) + 1;
325
+ }
326
+ addSessionPartStartedListener(listener) {
327
+ return this._addListener(this._sessionPartStartedListeners, listener);
328
+ }
329
+ addSessionPartEndedListener(listener) {
330
+ return this._addListener(this._sessionPartEndedListeners, listener);
331
+ }
332
+ /**
333
+ * Returns the persisted user-session state, rotating to a fresh one if
334
+ * the persisted row is missing or expired. Arms the max-duration timer
335
+ * when needed. The caller is responsible for assigning the result to
336
+ * `_state` and for persisting (the helper does not write to storage).
337
+ */
338
+ _loadOrCreateUserSessionState(now) {
339
+ let state = readUserSessionState(this._storage, this._diag);
340
+ let created = false;
341
+ if (!state || isUserSessionExpired(state, now)) {
342
+ if (state) this._previousUserSessionId = state.userSessionId;
343
+ const userSessionNumber = getIncrementedCount(this._storage, MXL_USER_SESSION_NUMBER_KEY, this._diag);
344
+ state = createUserSessionState({
345
+ inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,
346
+ maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,
347
+ now,
348
+ previousUserSessionId: this._previousUserSessionId,
349
+ userSessionNumber
350
+ });
351
+ created = true;
352
+ }
353
+ if (created || this._maxDurationTimeout === null) this._setupMaxDurationTimer(state, now);
354
+ return {
355
+ created,
356
+ state
357
+ };
358
+ }
359
+ /**
360
+ * Bumps the part counter and arms the max-duration timer. Relies on
361
+ * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,
362
+ * so `getUserSessionAttributes()` is guaranteed non-null after this.
363
+ */
364
+ _beginUserSessionForPartStart() {
365
+ const now = this._perf.getNowMillis();
366
+ const { state } = this._loadOrCreateUserSessionState(now);
367
+ this._currentSessionPartNumber = getIncrementedCount(this._storage, MXL_SESSION_PART_NUMBER_KEY, this._diag);
368
+ this._state = {
369
+ ...state,
370
+ userSessionPartIndex: state.userSessionPartIndex + 1,
371
+ inactivityDeadlineTs: null
372
+ };
373
+ this._storeState();
374
+ }
375
+ /**
376
+ * Records the inactivity deadline on the user-session row so the next
377
+ * part start can detect lazy expiry. The max-duration timer stays valid
378
+ * because userSessionMaxEndTs doesn't change between parts.
379
+ */
380
+ _continueUserSessionAfterPartEnd(partEndTs) {
381
+ if (!this._state) {
382
+ this._clearMaxDurationTimer();
383
+ return;
384
+ }
385
+ if (this._hasStoredState && this._storage.getItem("mxl_user_session_state") === null) {
386
+ this._previousUserSessionId = this._state.userSessionId;
387
+ this._state = null;
388
+ this._clearMaxDurationTimer();
389
+ return;
390
+ }
391
+ this._state = {
392
+ ...this._state,
393
+ inactivityDeadlineTs: partEndTs + this._state.inactivityTimeoutSeconds * 1e3
394
+ };
395
+ this._storeState();
396
+ }
397
+ /**
398
+ * Ends the active part as final and starts a fresh part for the next
399
+ * user session. State clearing for the engaged path is handled by
400
+ * endSessionPartInternal's isFinal branch. When no part is active
401
+ * (tab disengaged), the same state-clearing is performed inline so
402
+ * the next engagement creates a fresh user session rather than
403
+ * resuming the just-ended one.
404
+ */
405
+ _rolloverUserSession(userSessionEndReason) {
406
+ if (this._sessionPartSpan) {
407
+ this.endSessionPartInternal("user_session_ended", userSessionEndReason);
408
+ this.startSessionPartInternal("user_session_rollover");
409
+ return;
410
+ }
411
+ this._previousUserSessionId = this._state?.userSessionId ?? null;
412
+ this._state = null;
413
+ this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);
414
+ this._clearMaxDurationTimer();
415
+ }
416
+ _setupMaxDurationTimer(state, now) {
417
+ this._clearMaxDurationTimer();
418
+ const remaining = state.userSessionMaxEndTs - now;
419
+ if (remaining <= 0) return;
420
+ this._maxDurationTimeout = setTimeout(() => {
421
+ this._maxDurationTimeout = null;
422
+ this._rolloverUserSession("max_duration_reached");
423
+ }, remaining);
424
+ }
425
+ /**
426
+ * @internal Would be private but exposed for tests to simulate a page reload
427
+ */
428
+ _clearMaxDurationTimer() {
429
+ if (this._maxDurationTimeout !== null) {
430
+ clearTimeout(this._maxDurationTimeout);
431
+ this._maxDurationTimeout = null;
432
+ }
433
+ }
434
+ /**
435
+ * Detaches browser-activity listeners and clears the part-inactivity
436
+ * timer. Intended for SDK teardown and tests; in production the manager
437
+ * lives for the page's lifetime.
438
+ */
439
+ _shutdown() {
440
+ if (this._isShutdown) return;
441
+ this._isShutdown = true;
442
+ MXLUserSessionManager._testInstances.delete(this);
443
+ this._onActivityThrottled.cancel();
444
+ removeActivityListeners({
445
+ activityEvents: this._activityEvents,
446
+ onActivity: this._onActivityThrottled,
447
+ onBlur: this._onBlur,
448
+ onFocus: this._onFocus,
449
+ onPageHide: this._onPageHide,
450
+ onPageShow: this._onPageShow,
451
+ onVisibilityChange: this._onVisibilityChange,
452
+ target: this._target,
453
+ visibilityDoc: this._visibilityDoc
454
+ });
455
+ this._clearSessionPartInactivityTimer();
456
+ this._clearMaxDurationTimer();
457
+ }
458
+ _onActivity = () => {
459
+ try {
460
+ if (!isTabEngaged(this._visibilityDoc)) return;
461
+ if (this._activeSessionPartId === null) {
462
+ this.startSessionPartInternal("web_activity");
463
+ return;
464
+ }
465
+ this._startSessionPartInactivityTimer();
466
+ } catch (error) {
467
+ this._diag.warn("Error handling activity event", error);
468
+ }
469
+ };
470
+ _onVisibilityChange = () => {
471
+ this._handleEngagementTransition("visibilitychange");
472
+ };
473
+ _onFocus = () => {
474
+ this._handleEngagementTransition("focus");
475
+ };
476
+ _onBlur = () => {
477
+ this._handleEngagementTransition("blur");
478
+ };
479
+ _onPageShow = (event) => {
480
+ this._handleEngagementTransition(event.persisted ? "pageshow-bfcache" : "pageshow-initial");
481
+ };
482
+ _onPageHide = (event) => {
483
+ try {
484
+ if (this._activeSessionPartId === null) return;
485
+ const reason = event.persisted ? "web_background" : "web_hard_navigation";
486
+ this._diag.debug(`page hiding (persisted=${event.persisted}); ending current part as ${reason}`);
487
+ this.endSessionPartInternal(reason);
488
+ } catch (error) {
489
+ this._diag.error(`Error ending session part on pagehide (persisted=${event.persisted})`, error);
490
+ }
491
+ };
492
+ _handleEngagementTransition(source) {
493
+ try {
494
+ const engaged = isTabEngaged(this._visibilityDoc);
495
+ const active = this._activeSessionPartId !== null;
496
+ if (!engaged && active) {
497
+ this._diag.debug(`tab disengaged via ${source}; ending current part`);
498
+ this.endSessionPartInternal("web_background");
499
+ return;
500
+ }
501
+ if (engaged && !active) {
502
+ this._diag.debug(`tab engaged via ${source}; starting new part`);
503
+ this.startSessionPartInternal("web_foreground");
504
+ return;
505
+ }
506
+ if (engaged && active) this._startSessionPartInactivityTimer();
507
+ } catch (error) {
508
+ this._diag.warn("Error handling engagement change", error);
509
+ }
510
+ }
511
+ _onSessionPartInactivity = () => {
512
+ this._sessionPartInactivityTimer = null;
513
+ try {
514
+ if (this._activeSessionPartId === null) return;
515
+ this._diag.debug("inactivity timer fired; ending current part and user session");
516
+ this.endSessionPartInternal("inactivity", "inactivity");
517
+ } catch (error) {
518
+ this._diag.warn("Error handling inactivity timer", error);
519
+ }
520
+ };
521
+ _startSessionPartInactivityTimer() {
522
+ this._clearSessionPartInactivityTimer();
523
+ this._sessionPartInactivityTimer = setTimeout(this._onSessionPartInactivity, this._inactivityTimeoutSeconds * 1e3);
524
+ }
525
+ _clearSessionPartInactivityTimer() {
526
+ if (this._sessionPartInactivityTimer !== null) {
527
+ clearTimeout(this._sessionPartInactivityTimer);
528
+ this._sessionPartInactivityTimer = null;
529
+ }
530
+ }
531
+ _addListener(list, listener) {
532
+ list.push(listener);
533
+ return () => {
534
+ const i = list.indexOf(listener);
535
+ if (i !== -1) list.splice(i, 1);
536
+ };
537
+ }
538
+ _fireListeners(list, kind) {
539
+ for (const listener of list) try {
540
+ listener();
541
+ } catch (error) {
542
+ this._diag.warn(`Error while executing session part ${kind} listener`, error);
543
+ }
544
+ }
545
+ _storeState() {
546
+ if (!this._state) return false;
547
+ const stored = this._storage.setItem(MXL_USER_SESSION_STATE_KEY, JSON.stringify(this._state));
548
+ if (stored) this._hasStoredState = true;
549
+ return stored;
550
+ }
551
+ _removeFromPermanentProperties(bareKey) {
552
+ if (!(bareKey in this._permanentProperties)) return;
553
+ const pruned = { ...this._permanentProperties };
554
+ delete pruned[bareKey];
555
+ this._permanentProperties = pruned;
556
+ storePermanentProperties(this._storage, pruned);
557
+ }
558
+ _removeFromUserSessionProperties(bareKey) {
559
+ if (!this._state || !(bareKey in this._state.userSessionProperties)) return;
560
+ const pruned = { ...this._state.userSessionProperties };
561
+ delete pruned[bareKey];
562
+ this._state = {
563
+ ...this._state,
564
+ userSessionProperties: pruned
565
+ };
566
+ this._storeState();
567
+ }
568
+ };
569
+ //#endregion
570
+ export { MXLUserSessionManager };
571
+
572
+ //# sourceMappingURL=MXLUserSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MXLUserSessionManager.js","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"sourcesContent":["import type {\n Attributes,\n DiagLogger,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n ATTR_SESSION_ID,\n ATTR_SESSION_PREVIOUS_ID,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport type { ExtendedSpan } from '../..';\nimport type {\n PropertyOptions,\n SessionPartEndReason,\n SessionPartStartReason,\n UserSessionEndReason,\n} from '../../api-sessions/manager/types';\nimport type { VisibilityStateDocument } from '../../common';\nimport {\n KEY_MXL_COLD_START,\n KEY_MXL_EXPERIENCE_ID,\n KEY_MXL_IS_FINAL_SESSION_PART,\n KEY_MXL_NAVIGATION_SOURCE,\n KEY_MXL_REFERRER_URL,\n KEY_MXL_SDK_STARTUP_DURATION,\n KEY_MXL_SESSION_PART_END_REASON,\n KEY_MXL_SESSION_PART_ID,\n KEY_MXL_SESSION_PART_NUMBER,\n KEY_MXL_SESSION_PART_START_REASON,\n KEY_MXL_SOURCE_TAB_ID,\n KEY_MXL_STATE,\n KEY_MXL_TAB_ID,\n KEY_MXL_TYPE,\n KEY_MXL_USER_SESSION_ID,\n KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS,\n KEY_MXL_USER_SESSION_NUMBER,\n KEY_MXL_USER_SESSION_PART_INDEX,\n KEY_MXL_USER_SESSION_PREVIOUS_ID,\n KEY_MXL_USER_SESSION_START_TS,\n KEY_MXL_USER_SESSION_TERMINATION_REASON,\n KEY_PREFIX_MXL_PROPERTIES,\n MXL_STATES,\n MXL_TYPES,\n} from '../../constants';\nimport type {\n NamespacedStorage,\n PerformanceManager,\n TimeoutRef,\n} from '../../utils';\nimport {\n clampNumber,\n generateUUID,\n getIncrementedCount,\n getVisibilityState,\n throttle,\n type ThrottledFunction,\n} from '../../utils';\nimport type { LimitManagerInternal } from '../MXLLimitManager';\nimport { MXLExtendedSpan } from '../MXLTraceManager/MXLExtendedSpan';\nimport {\n DEFAULT_ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_THROTTLE_MS,\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n END_USER_SESSION_COOLDOWN_MS,\n MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MAX_USER_SESSION_MAX_DURATION_SECONDS,\n MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MIN_USER_SESSION_MAX_DURATION_SECONDS,\n MXL_LAST_END_USER_SESSION_TS_KEY,\n MXL_SESSION_PART_NUMBER_KEY,\n MXL_USER_SESSION_NUMBER_KEY,\n MXL_USER_SESSION_STATE_KEY,\n SESSION_PART_SPAN_NAME,\n} from './constants';\nimport type {\n MXLUserSessionManagerArgs,\n NavigationSource,\n Tab,\n UserSessionAttributes,\n UserSessionManagerInternal,\n UserSessionState,\n} from './types';\nimport {\n addActivityListeners,\n createUserSessionState,\n isTabEngaged,\n isUserSessionExpired,\n readPermanentProperties,\n readUserSessionState,\n removeActivityListeners,\n storePermanentProperties,\n} from './utils';\nimport { initTabContext, setupNewTabClickListeners } from './utils/tabTracking';\n\n/**\n * Parts are engagement-gated (visible AND focused), so only one part can\n * be active at a time. That mutex lets us treat storage as a\n * plain shared row read on engagement and written on changes.\n */\nexport class MXLUserSessionManager implements UserSessionManagerInternal {\n private static readonly _testInstances = new Set<MXLUserSessionManager>();\n\n /** @internal Test-only helper to tear down leaked managers between tests. */\n public static shutdownAllTestInstances(): void {\n for (const manager of MXLUserSessionManager._testInstances) {\n manager._shutdown();\n }\n MXLUserSessionManager._testInstances.clear();\n }\n\n private _state: UserSessionState | null = null;\n private _previousUserSessionId: string | null = null;\n private readonly _maxUserSessionDurationSeconds: number;\n private readonly _inactivityTimeoutSeconds: number;\n private _maxDurationTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isShutdown = false;\n // Bare keys; the wire-format prefix is applied at stamp time.\n private _permanentProperties: Record<string, string> = {};\n // Distinguishes \"another tab wiped storage after we wrote\" from \"we\n // Never managed to write in the first place\"; see\n // _continueUserSessionAfterPartEnd.\n private _hasStoredState = false;\n\n private _activeSessionPartId: string | null = null;\n // Snapshotted at part start so a concurrent bump in another tab doesn't\n // Shift this part's value before its span ends.\n private _currentSessionPartNumber: number | null = null;\n private _sessionPartSpan: ExtendedSpan | null = null;\n private _activeSessionPartCounts: Record<string, number> | null = null;\n // Marks the first part of the page lifetime so it can be reported as a\n // Cold start.\n private _coldStart = true;\n private _nextSessionPartCounts: Record<string, number> = {};\n private _sdkStartupDuration = 0;\n private readonly _sessionPartStartedListeners: (() => void)[] = [];\n private readonly _sessionPartEndedListeners: (() => void)[] = [];\n private _tracer: Tracer;\n\n private readonly _diag: DiagLogger;\n private readonly _perf: PerformanceManager;\n private readonly _storage: NamespacedStorage;\n private readonly _visibilityDoc: VisibilityStateDocument;\n private readonly _limitManager: LimitManagerInternal;\n private readonly _target: EventTarget;\n private readonly _activityEvents: readonly string[];\n private readonly _onActivityThrottled: ThrottledFunction<\n (event: Event) => void\n >;\n private _sessionPartInactivityTimer: TimeoutRef | null = null;\n private readonly _tab: Tab;\n private readonly _navigationSource: NavigationSource;\n private readonly _referrerScrubbedUrl?: string;\n\n public constructor({\n config,\n diag: diagParam,\n perf,\n visibilityDoc,\n storage,\n limitManager,\n target = window,\n activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS,\n activityEvents = DEFAULT_ACTIVITY_EVENTS,\n tabStorage,\n referrer = typeof document !== 'undefined' ? document.referrer : '',\n navigationPerformance = typeof window !== 'undefined'\n ? window.performance\n : { getEntriesByType: () => [] },\n }: MXLUserSessionManagerArgs) {\n this._diag =\n diagParam ??\n diag.createComponentLogger({\n namespace: 'MXLUserSessionManager',\n });\n this._perf = perf;\n this._visibilityDoc = visibilityDoc;\n this._storage = storage;\n this._limitManager = limitManager;\n this._permanentProperties = readPermanentProperties(\n this._storage,\n this._diag,\n );\n this._tracer = trace.getTracer('mxl-web-sdk-session-parts');\n this._target = target;\n this._activityEvents = activityEvents;\n this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);\n\n const maxUserSessionDurationSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_MAX_DURATION_SECONDS,\n min: MIN_USER_SESSION_MAX_DURATION_SECONDS,\n value: config?.maxUserSessionDurationSeconds,\n });\n const inactivityTimeoutSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n min: MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n value: config?.inactivityTimeoutSeconds,\n });\n\n this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;\n if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) {\n this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;\n } else {\n this._diag.warn(\n `inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) ` +\n `exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); ` +\n `falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`,\n );\n this._inactivityTimeoutSeconds =\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;\n }\n\n const tabContext = initTabContext({\n diag: this._diag,\n localStorage: storage,\n navigationPerformance,\n referrer,\n sessionStorage: tabStorage,\n });\n this._tab = tabContext.tab;\n this._navigationSource = tabContext.navigationSource;\n this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;\n setupNewTabClickListeners(this._tab, storage, this._diag);\n MXLUserSessionManager._testInstances.add(this);\n }\n\n public setTracerProvider(tracerProvider: TracerProvider): void {\n this._tracer = tracerProvider.getTracer('mxl-web-sdk-session-parts');\n // Listeners attach here rather than in the constructor so that tests\n // That construct a manager without going through SDK init don't\n // Pollute window with listeners, and so that browser-activity-driven\n // Parts only start once a real tracer is wired.\n addActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n // Eager state init so getUserSessionId() returns a real id before the\n // First part starts, and so other tabs see the row when we create a\n // Fresh session here.\n const { state, created } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = state;\n if (created) {\n this._storeState();\n }\n }\n\n public recordSDKStartupDuration(duration: number): void {\n this._sdkStartupDuration = Math.ceil(duration);\n }\n\n public getUserSessionId(): string | null {\n return this._state?.userSessionId ?? null;\n }\n\n public getPreviousUserSessionId(): string | null {\n // Fall back to in-memory for the brief window during user-session end\n // Where storage is cleared but the just-ended id is still held.\n return this._state?.previousUserSessionId ?? this._previousUserSessionId;\n }\n\n public getUserSessionStartTime(): number | null {\n return this._state?.userSessionStartTs ?? null;\n }\n\n public getUserSessionAttributes(): UserSessionAttributes | null {\n if (!this._state) {\n return null;\n }\n const previousUserSessionId = this.getPreviousUserSessionId() ?? '';\n return {\n [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,\n [ATTR_SESSION_ID]: this._state.userSessionId,\n [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,\n [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,\n [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,\n [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,\n [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]:\n this._state.maxUserSessionDurationSeconds,\n [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]:\n this._state.inactivityTimeoutSeconds,\n };\n }\n\n public endUserSession(): void {\n if (!this._state) {\n this._diag.debug(\n 'Trying to end user session, but there is no active session. This is a no-op.',\n );\n return;\n }\n\n const now = this._perf.getNowMillis();\n const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);\n const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);\n if (\n Number.isFinite(lastEndTs) &&\n now - lastEndTs < END_USER_SESSION_COOLDOWN_MS\n ) {\n this._diag.warn(\n 'endUserSession called within cooldown period, ignoring.',\n );\n return;\n }\n\n this._rolloverUserSession('manual');\n this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));\n }\n\n public getSessionPartId(): string | null {\n return this._activeSessionPartId;\n }\n\n public getSessionPartSpan(): ExtendedSpan | null {\n return this._sessionPartSpan;\n }\n\n public startSessionPartInternal(reason: SessionPartStartReason): void {\n if (this._sessionPartSpan) {\n this._diag.warn(\n `startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`,\n );\n return;\n }\n\n // Parts are foreground-only: a part corresponds to a tab that is both\n // Visible AND focused.\n if (\n getVisibilityState(this._visibilityDoc) === MXL_STATES.Background ||\n !this._visibilityDoc.hasFocus()\n ) {\n this._diag.debug(\n `skipping session part start (reason: ${reason}) because the tab is not engaged`,\n );\n return;\n }\n\n const activeSessionPartId = generateUUID();\n const previouslyRecordedCounts = this._nextSessionPartCounts;\n\n this._beginUserSessionForPartStart();\n\n const attributes: Attributes = {\n ...this.getUserSessionAttributes(),\n [KEY_MXL_TYPE]: MXL_TYPES.SessionPart,\n [KEY_MXL_STATE]: MXL_STATES.Foreground,\n [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,\n [KEY_MXL_SESSION_PART_START_REASON]: reason,\n [KEY_MXL_COLD_START]: this._coldStart,\n [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,\n [KEY_MXL_TAB_ID]: this._tab.tabId,\n [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,\n ...previouslyRecordedCounts,\n };\n\n if (this._referrerScrubbedUrl) {\n attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;\n }\n if (this._tab.sourceTabId) {\n attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;\n }\n\n this._activeSessionPartId = activeSessionPartId;\n let span: MXLExtendedSpan;\n try {\n span = new MXLExtendedSpan(\n this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }),\n );\n } catch (error) {\n this._activeSessionPartId = null;\n this._diag.error('Error starting session part span', error);\n return;\n }\n\n this._activeSessionPartCounts = {};\n this._nextSessionPartCounts = {};\n this._sessionPartSpan = span;\n this._coldStart = false;\n\n this._startSessionPartInactivityTimer();\n\n this._fireListeners(this._sessionPartStartedListeners, 'started');\n }\n\n public endSessionPartInternal(\n reason: SessionPartEndReason,\n userSessionEndReason?: UserSessionEndReason | null,\n ): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to end a session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n this._clearSessionPartInactivityTimer();\n\n const isFinal = reason === 'user_session_ended' || reason === 'inactivity';\n\n // Capture the end stamp upfront. SpanProcessor.onEnd can run unbounded\n // And must not push it forward.\n const partEndTs = this._perf.getNowMillis();\n const span = this._sessionPartSpan;\n try {\n const endAttrs: Attributes = {\n [KEY_MXL_SESSION_PART_END_REASON]: reason,\n ...this._activeSessionPartCounts,\n ...this._limitManager.getDiagnosticCounts(),\n [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration,\n };\n if (isFinal) {\n endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;\n if (userSessionEndReason) {\n endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] =\n userSessionEndReason;\n }\n }\n\n const propertyAttrs: Attributes = {};\n for (const [bareKey, value] of Object.entries(\n this.getSessionPartProperties(),\n )) {\n propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;\n }\n\n try {\n span.setAttributes({\n ...propertyAttrs,\n ...endAttrs,\n });\n } catch (error) {\n this._diag.warn(\n 'Error setting end attributes on session part span; ending span without them',\n error,\n );\n }\n } finally {\n // Fire listeners after end attributes are stamped (so subscribers can\n // Read them) and before span.end() (so anything they emit still\n // Attaches to the part that is conceptually still active).\n this._fireListeners(this._sessionPartEndedListeners, 'ended');\n try {\n span.end(partEndTs);\n } catch (error) {\n this._diag.warn('Error ending session part span', error);\n }\n this._sessionPartSpan = null;\n this._activeSessionPartId = null;\n this._activeSessionPartCounts = null;\n this._currentSessionPartNumber = null;\n this._limitManager.reset();\n }\n\n if (isFinal) {\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n } else {\n this._continueUserSessionAfterPartEnd(partEndTs);\n }\n }\n\n public addBreadcrumb(name: string): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to add breadcrumb, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);\n if (limitedBreadcrumb === 'dropped') {\n return;\n }\n\n this._sessionPartSpan.addEvent(\n 'mxl-breadcrumb',\n {\n message: limitedBreadcrumb.name,\n },\n this._perf.getNowMillis(),\n );\n }\n\n public addProperty(\n propertyKey: string,\n value: string,\n options?: PropertyOptions,\n ): void {\n const limitedSessionProperty = this._limitManager.limitSessionProperty(\n propertyKey,\n value,\n );\n\n if (limitedSessionProperty === 'dropped') {\n return;\n }\n\n const bareKey = limitedSessionProperty.key;\n const bareValue = limitedSessionProperty.value;\n\n if (options?.lifespan === 'permanent') {\n const candidate = {\n ...this._permanentProperties,\n [bareKey]: bareValue,\n };\n // Reject the write if storage is unavailable: a property that can't\n // Persist would silently diverge from what other tabs (and the next\n // Page load) see, which is worse than no property at all.\n if (!storePermanentProperties(this._storage, candidate)) {\n this._diag.warn(\n 'Storage unavailable; rejecting permanent property write.',\n );\n return;\n }\n this._permanentProperties = candidate;\n this._removeFromUserSessionProperties(bareKey);\n return;\n }\n\n // Ensure a state row exists so the write has somewhere to land;\n // AddProperty can fire before any part has started.\n const { state } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = {\n ...state,\n userSessionProperties: {\n ...state.userSessionProperties,\n [bareKey]: bareValue,\n },\n };\n if (!this._storeState()) {\n // Roll back so callers don't observe a value that won't persist.\n // The user session itself stays in memory.\n this._state = state;\n this._diag.warn(\n 'Storage unavailable; rejecting user-session property write.',\n );\n }\n }\n\n public removeProperty(propertyKey: string): void {\n const bareKey = this._limitManager.truncateString(\n 'session_property_key',\n propertyKey,\n );\n\n // Try both stores so a key that was flipped between scopes doesn't\n // Linger in the other one.\n this._removeFromPermanentProperties(bareKey);\n this._removeFromUserSessionProperties(bareKey);\n }\n\n /**\n * Bare-keyed view of properties for the active part. User-session-scoped\n * entries shadow permanent ones, matching the cross-scope flip rule\n * enforced in `addProperty`. Callers apply the wire-format prefix at\n * stamp time.\n */\n public getSessionPartProperties(): Record<string, string> {\n return {\n ...this._permanentProperties,\n ...this._state?.userSessionProperties,\n };\n }\n\n public incrSessionPartCountForKey(key: string): void {\n if (!this._sessionPartSpan || !this._activeSessionPartCounts) {\n this._diag.debug(\n 'trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n this._activeSessionPartCounts[key] =\n (this._activeSessionPartCounts[key] || 0) + 1;\n }\n\n public incrNextSessionPartCountForKey(key: string): void {\n this._nextSessionPartCounts[key] =\n (this._nextSessionPartCounts[key] || 0) + 1;\n }\n\n public addSessionPartStartedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartStartedListeners, listener);\n }\n\n public addSessionPartEndedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartEndedListeners, listener);\n }\n\n /**\n * Returns the persisted user-session state, rotating to a fresh one if\n * the persisted row is missing or expired. Arms the max-duration timer\n * when needed. The caller is responsible for assigning the result to\n * `_state` and for persisting (the helper does not write to storage).\n */\n private _loadOrCreateUserSessionState(now: number): {\n state: UserSessionState;\n created: boolean;\n } {\n let state = readUserSessionState(this._storage, this._diag);\n let created = false;\n if (!state || isUserSessionExpired(state, now)) {\n if (state) {\n this._previousUserSessionId = state.userSessionId;\n }\n const userSessionNumber = getIncrementedCount(\n this._storage,\n MXL_USER_SESSION_NUMBER_KEY,\n this._diag,\n );\n state = createUserSessionState({\n inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,\n maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,\n now,\n previousUserSessionId: this._previousUserSessionId,\n userSessionNumber,\n });\n created = true;\n }\n // Arm on a freshly created state, and on the page-reload case where a\n // New manager loads existing state and has no timer running yet.\n // UserSessionMaxEndTs is fixed at creation, so re-arming the same value\n // On every load/start call is wasteful.\n if (created || this._maxDurationTimeout === null) {\n this._setupMaxDurationTimer(state, now);\n }\n return { created, state };\n }\n\n /**\n * Bumps the part counter and arms the max-duration timer. Relies on\n * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,\n * so `getUserSessionAttributes()` is guaranteed non-null after this.\n */\n private _beginUserSessionForPartStart(): void {\n const now = this._perf.getNowMillis();\n const { state } = this._loadOrCreateUserSessionState(now);\n\n this._currentSessionPartNumber = getIncrementedCount(\n this._storage,\n MXL_SESSION_PART_NUMBER_KEY,\n this._diag,\n );\n\n this._state = {\n ...state,\n userSessionPartIndex: state.userSessionPartIndex + 1,\n // A part is active, so any pending inactivity deadline no longer\n // Applies; it gets re-armed when the part ends.\n inactivityDeadlineTs: null,\n };\n this._storeState();\n }\n\n /**\n * Records the inactivity deadline on the user-session row so the next\n * part start can detect lazy expiry. The max-duration timer stays valid\n * because userSessionMaxEndTs doesn't change between parts.\n */\n private _continueUserSessionAfterPartEnd(partEndTs: number): void {\n if (!this._state) {\n this._clearMaxDurationTimer();\n return;\n }\n\n // If the state row was present at part start but is gone now (user\n // Wiped site data, quota eviction, sibling tab cleared), don't\n // Resurrect it from memory. Drop in-memory state so the next part\n // Start creates a fresh user session; carry the just-ended id\n // Forward so the next session can back-link to it.\n // _hasStoredState gates this: if we never persisted in the first\n // Place, the in-memory copy stays authoritative.\n if (\n this._hasStoredState &&\n this._storage.getItem(MXL_USER_SESSION_STATE_KEY) === null\n ) {\n this._previousUserSessionId = this._state.userSessionId;\n this._state = null;\n this._clearMaxDurationTimer();\n return;\n }\n\n this._state = {\n ...this._state,\n inactivityDeadlineTs:\n partEndTs + this._state.inactivityTimeoutSeconds * 1000,\n };\n this._storeState();\n }\n\n /**\n * Ends the active part as final and starts a fresh part for the next\n * user session. State clearing for the engaged path is handled by\n * endSessionPartInternal's isFinal branch. When no part is active\n * (tab disengaged), the same state-clearing is performed inline so\n * the next engagement creates a fresh user session rather than\n * resuming the just-ended one.\n */\n private _rolloverUserSession(\n userSessionEndReason: UserSessionEndReason,\n ): void {\n if (this._sessionPartSpan) {\n this.endSessionPartInternal('user_session_ended', userSessionEndReason);\n this.startSessionPartInternal('user_session_rollover');\n return;\n }\n\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n }\n\n private _setupMaxDurationTimer(state: UserSessionState, now: number): void {\n this._clearMaxDurationTimer();\n\n const remaining = state.userSessionMaxEndTs - now;\n if (remaining <= 0) {\n return;\n }\n\n this._maxDurationTimeout = setTimeout(() => {\n this._maxDurationTimeout = null;\n this._rolloverUserSession('max_duration_reached');\n }, remaining);\n }\n\n /**\n * @internal Would be private but exposed for tests to simulate a page reload\n */\n public _clearMaxDurationTimer(): void {\n if (this._maxDurationTimeout !== null) {\n clearTimeout(this._maxDurationTimeout);\n this._maxDurationTimeout = null;\n }\n }\n\n /**\n * Detaches browser-activity listeners and clears the part-inactivity\n * timer. Intended for SDK teardown and tests; in production the manager\n * lives for the page's lifetime.\n */\n public _shutdown(): void {\n if (this._isShutdown) {\n return;\n }\n this._isShutdown = true;\n MXLUserSessionManager._testInstances.delete(this);\n this._onActivityThrottled.cancel();\n removeActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n this._clearSessionPartInactivityTimer();\n this._clearMaxDurationTimer();\n }\n\n private readonly _onActivity = (): void => {\n try {\n if (!isTabEngaged(this._visibilityDoc)) {\n return;\n }\n if (this._activeSessionPartId === null) {\n this.startSessionPartInternal('web_activity');\n return;\n }\n this._startSessionPartInactivityTimer();\n } catch (error) {\n this._diag.warn('Error handling activity event', error);\n }\n };\n\n // Tab visibility flipped (switch tabs, minimize, OS app switch). Drives\n // The engagement transition off the current visibilityState/hasFocus pair.\n private readonly _onVisibilityChange = (): void => {\n this._handleEngagementTransition('visibilitychange');\n };\n\n // Window focus arrived (alt-tab back, clicked into the document). hasFocus\n // Is now true; engagement transition resolves whether to start a part.\n private readonly _onFocus = (): void => {\n this._handleEngagementTransition('focus');\n };\n\n // Window focus lost (alt-tab away, clicked into DevTools or another window).\n // HasFocus is now false; engagement transition ends the active part.\n private readonly _onBlur = (): void => {\n this._handleEngagementTransition('blur');\n };\n\n // Initial page load OR BFCache restore. event.persisted only affects the\n // Debug source string; routing is via _handleEngagementTransition, which\n // Keys off engagement state and whether a part is currently active.\n private readonly _onPageShow = (event: PageTransitionEvent): void => {\n this._handleEngagementTransition(\n event.persisted ? 'pageshow-bfcache' : 'pageshow-initial',\n );\n };\n\n // Navigation away (hard nav, tab close) OR BFCache freeze. Both signal the\n // Page is about to stop running, so we always end the active part. Ending\n // The part flushes its span (and the spans batched against it in\n // MXLSessionPartBatchedSpanProcessor) through the export pipeline while\n // The page can still issue a keepalive fetch. On BFCache restore, pageshow\n // Will start a fresh part.\n private readonly _onPageHide = (event: PageTransitionEvent): void => {\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n const reason: SessionPartEndReason = event.persisted\n ? 'web_background'\n : 'web_hard_navigation';\n this._diag.debug(\n `page hiding (persisted=${event.persisted}); ending current part as ${reason}`,\n );\n this.endSessionPartInternal(reason);\n } catch (error) {\n this._diag.error(\n `Error ending session part on pagehide (persisted=${event.persisted})`,\n error,\n );\n }\n };\n\n private _handleEngagementTransition(source: string): void {\n try {\n const engaged = isTabEngaged(this._visibilityDoc);\n const active = this._activeSessionPartId !== null;\n if (!engaged && active) {\n this._diag.debug(`tab disengaged via ${source}; ending current part`);\n this.endSessionPartInternal('web_background');\n return;\n }\n if (engaged && !active) {\n this._diag.debug(`tab engaged via ${source}; starting new part`);\n this.startSessionPartInternal('web_foreground');\n return;\n }\n if (engaged && active) {\n // Redundant engagement event while a part is already active (browser\n // Quirk: an extra focus/visibility fire that isn't a real transition).\n // Re-arm the inactivity timer since the event still implies presence.\n this._startSessionPartInactivityTimer();\n }\n } catch (error) {\n this._diag.warn('Error handling engagement change', error);\n }\n }\n\n private readonly _onSessionPartInactivity = (): void => {\n this._sessionPartInactivityTimer = null;\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n this._diag.debug(\n 'inactivity timer fired; ending current part and user session',\n );\n this.endSessionPartInternal('inactivity', 'inactivity');\n } catch (error) {\n this._diag.warn('Error handling inactivity timer', error);\n }\n };\n\n private _startSessionPartInactivityTimer(): void {\n this._clearSessionPartInactivityTimer();\n this._sessionPartInactivityTimer = setTimeout(\n this._onSessionPartInactivity,\n this._inactivityTimeoutSeconds * 1000,\n );\n }\n\n private _clearSessionPartInactivityTimer(): void {\n if (this._sessionPartInactivityTimer !== null) {\n clearTimeout(this._sessionPartInactivityTimer);\n this._sessionPartInactivityTimer = null;\n }\n }\n\n private _addListener(list: (() => void)[], listener: () => void): () => void {\n list.push(listener);\n return () => {\n const i = list.indexOf(listener);\n if (i !== -1) {\n list.splice(i, 1);\n }\n };\n }\n\n private _fireListeners(list: (() => void)[], kind: string): void {\n for (const listener of list) {\n try {\n listener();\n } catch (error) {\n this._diag.warn(\n `Error while executing session part ${kind} listener`,\n error,\n );\n }\n }\n }\n\n private _storeState(): boolean {\n if (!this._state) {\n return false;\n }\n const stored = this._storage.setItem(\n MXL_USER_SESSION_STATE_KEY,\n JSON.stringify(this._state),\n );\n if (stored) {\n this._hasStoredState = true;\n }\n return stored;\n }\n\n private _removeFromPermanentProperties(bareKey: string): void {\n if (!(bareKey in this._permanentProperties)) {\n return;\n }\n const pruned = { ...this._permanentProperties };\n delete pruned[bareKey];\n this._permanentProperties = pruned;\n storePermanentProperties(this._storage, pruned);\n }\n\n private _removeFromUserSessionProperties(bareKey: string): void {\n if (!this._state || !(bareKey in this._state.userSessionProperties)) {\n return;\n }\n const pruned = { ...this._state.userSessionProperties };\n delete pruned[bareKey];\n this._state = {\n ...this._state,\n userSessionProperties: pruned,\n };\n this._storeState();\n }\n}\n"],"mappings":"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"}