@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
@@ -1 +1 @@
1
- {"version":3,"file":"UserTimingInstrumentation.js","names":[],"sources":["../../../../src/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.ts"],"sourcesContent":["import { SeverityNumber } from '@opentelemetry/api-logs';\nimport {\n KEY_MXL_INSTRUMENTATION,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXL_PERFORMANCE_INSTRUMENTATIONS } from '../../../constants/attributes';\nimport { createPerformanceObserver } from '../../../utils';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_USER_TIMING_DETAIL,\n KEY_MXL_USER_TIMING_DURATION,\n KEY_MXL_USER_TIMING_ENTRY_TYPE,\n KEY_MXL_USER_TIMING_NAME,\n KEY_MXL_USER_TIMING_START_TIME,\n USER_TIMING_EVENT_NAME,\n} from './constants';\nimport type {\n UserTimingEntryFilter,\n UserTimingInstrumentationArgs,\n} from './types';\n\nexport class UserTimingInstrumentation extends MXLInstrumentationBase {\n private _markObserver: PerformanceObserver | null = null;\n private _measureObserver: PerformanceObserver | null = null;\n private _seenEntries: Set<string> = new Set();\n private _isEnabled = false;\n private readonly _allowedEntries: UserTimingEntryFilter | undefined;\n\n public constructor({\n diag,\n perf,\n limitManager,\n allowedEntries,\n }: UserTimingInstrumentationArgs = {}) {\n super({\n instrumentationName: 'UserTimingInstrumentation',\n instrumentationVersion: '1.0.0',\n diag,\n perf,\n limitManager,\n config: {},\n });\n this._allowedEntries = allowedEntries;\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public enable(): void {\n if (this._isEnabled) {\n return;\n }\n\n this._isEnabled = true;\n this._seenEntries = new Set();\n\n if (this._markObserver) {\n this._markObserver.disconnect();\n }\n if (this._measureObserver) {\n this._measureObserver.disconnect();\n }\n\n this._markObserver = createPerformanceObserver<PerformanceMark>(\n 'mark',\n this._processEntry.bind(this),\n { diag: this._diag },\n );\n\n if (!this._markObserver) {\n this._diag.error('failed to enable mark observer');\n }\n\n this._measureObserver = createPerformanceObserver<PerformanceMeasure>(\n 'measure',\n (entry) => this._processEntry(entry),\n { diag: this._diag },\n );\n\n if (!this._measureObserver) {\n this._diag.error('failed to enable measure observer');\n }\n\n if (!this._markObserver && !this._measureObserver) {\n this._isEnabled = false;\n }\n }\n\n public disable(): void {\n this._isEnabled = false;\n\n if (this._markObserver) {\n this._markObserver.disconnect();\n this._markObserver = null;\n }\n\n if (this._measureObserver) {\n this._measureObserver.disconnect();\n this._measureObserver = null;\n }\n\n this._seenEntries = new Set();\n }\n\n private _processEntry(entry: PerformanceMark | PerformanceMeasure): void {\n if (!this._isEnabled) {\n return;\n }\n\n if (this._allowedEntries !== undefined) {\n const allowed = Array.isArray(this._allowedEntries)\n ? this._allowedEntries.includes(entry.name)\n : this._allowedEntries(entry);\n if (!allowed) {\n return;\n }\n }\n\n const key = `${location.href}::${entry.name}`;\n // De-duplicate entries by name and page URL, only processing the first occurrence of each unique name on each page URL\n if (this._seenEntries.has(key)) {\n return;\n }\n this._seenEntries.add(key);\n\n if (\n this.limitManager?.limitUserTimingEntry(\n entry.entryType as 'mark' | 'measure',\n )\n ) {\n return;\n }\n\n if (entry.entryType === 'measure') {\n const measureDetail = (entry as PerformanceMeasure).detail;\n const span = this.tracer.startSpan(entry.name, {\n startTime: this.perf.epochMillisFromOriginOffset(entry.startTime),\n attributes: {\n [KEY_MXL_TYPE]: MXL_TYPES.UserTiming,\n [KEY_MXL_INSTRUMENTATION]:\n MXL_PERFORMANCE_INSTRUMENTATIONS.UserTiming,\n [KEY_MXL_USER_TIMING_ENTRY_TYPE]: entry.entryType,\n [KEY_MXL_USER_TIMING_START_TIME]: this.perf.millisFromZeroTime(\n entry.startTime,\n ),\n [KEY_MXL_USER_TIMING_DURATION]: entry.duration,\n ...(measureDetail != null && {\n [KEY_MXL_USER_TIMING_DETAIL]: JSON.stringify(measureDetail),\n }),\n },\n });\n span.end(\n this.perf.epochMillisFromOriginOffset(entry.startTime + entry.duration),\n );\n return;\n }\n\n const detail = (entry as PerformanceMark).detail;\n const body = detail != null ? JSON.stringify(detail) : undefined;\n\n this.logger.emit({\n timestamp: this.perf.epochMillisFromOriginOffset(entry.startTime),\n eventName: USER_TIMING_EVENT_NAME,\n severityNumber: SeverityNumber.INFO,\n attributes: {\n [KEY_MXL_TYPE]: MXL_TYPES.UserTiming,\n [KEY_MXL_USER_TIMING_NAME]: entry.name,\n [KEY_MXL_USER_TIMING_START_TIME]: this.perf.millisFromZeroTime(\n entry.startTime,\n ),\n [KEY_MXL_USER_TIMING_DURATION]: entry.duration,\n [KEY_MXL_USER_TIMING_ENTRY_TYPE]: entry.entryType,\n },\n body,\n });\n }\n}\n"],"mappings":";;;;;;AAsBA,IAAa,4BAAb,cAA+C,uBAAuB;CACpE,gBAAoD;CACpD,mBAAuD;CACvD,+BAAoC,IAAI,KAAK;CAC7C,aAAqB;CACrB;CAEA,YAAmB,EACjB,MACA,MACA,cACA,mBACiC,EAAE,EAAE;AACrC,QAAM;GACJ,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACA;GACA,QAAQ,EAAE;GACX,CAAC;AACF,OAAK,kBAAkB;AAEvB,MAAI,KAAK,QAAQ,QACf,MAAK,QAAQ;;CAIjB,SAAsB;AACpB,MAAI,KAAK,WACP;AAGF,OAAK,aAAa;AAClB,OAAK,+BAAe,IAAI,KAAK;AAE7B,MAAI,KAAK,cACP,MAAK,cAAc,YAAY;AAEjC,MAAI,KAAK,iBACP,MAAK,iBAAiB,YAAY;AAGpC,OAAK,gBAAgB,0BACnB,QACA,KAAK,cAAc,KAAK,KAAK,EAC7B,EAAE,MAAM,KAAK,OAAO,CACrB;AAED,MAAI,CAAC,KAAK,cACR,MAAK,MAAM,MAAM,iCAAiC;AAGpD,OAAK,mBAAmB,0BACtB,YACC,UAAU,KAAK,cAAc,MAAM,EACpC,EAAE,MAAM,KAAK,OAAO,CACrB;AAED,MAAI,CAAC,KAAK,iBACR,MAAK,MAAM,MAAM,oCAAoC;AAGvD,MAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,iBAC/B,MAAK,aAAa;;CAItB,UAAuB;AACrB,OAAK,aAAa;AAElB,MAAI,KAAK,eAAe;AACtB,QAAK,cAAc,YAAY;AAC/B,QAAK,gBAAgB;;AAGvB,MAAI,KAAK,kBAAkB;AACzB,QAAK,iBAAiB,YAAY;AAClC,QAAK,mBAAmB;;AAG1B,OAAK,+BAAe,IAAI,KAAK;;CAG/B,cAAsB,OAAmD;AACvE,MAAI,CAAC,KAAK,WACR;AAGF,MAAI,KAAK,oBAAoB,KAAA;OAIvB,EAHY,MAAM,QAAQ,KAAK,gBAAgB,GAC/C,KAAK,gBAAgB,SAAS,MAAM,KAAK,GACzC,KAAK,gBAAgB,MAAM,EAE7B;;EAIJ,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,MAAM;AAEvC,MAAI,KAAK,aAAa,IAAI,IAAI,CAC5B;AAEF,OAAK,aAAa,IAAI,IAAI;AAE1B,MACE,KAAK,cAAc,qBACjB,MAAM,UACP,CAED;AAGF,MAAI,MAAM,cAAc,WAAW;GACjC,MAAM,gBAAiB,MAA6B;AACvC,QAAK,OAAO,UAAU,MAAM,MAAM;IAC7C,WAAW,KAAK,KAAK,4BAA4B,MAAM,UAAU;IACjE,YAAY;MACT,eAAA;MACA,0BAAA;MAEA,iCAAiC,MAAM;MACvC,iCAAiC,KAAK,KAAK,mBAC1C,MAAM,UACP;MACA,+BAA+B,MAAM;KACtC,GAAI,iBAAiB,QAAQ,GAAA,2BACG,KAAK,UAAU,cAAc,EAC5D;KACF;IACF,CACG,CAAC,IACH,KAAK,KAAK,4BAA4B,MAAM,YAAY,MAAM,SAAS,CACxE;AACD;;EAGF,MAAM,SAAU,MAA0B;EAC1C,MAAM,OAAO,UAAU,OAAO,KAAK,UAAU,OAAO,GAAG,KAAA;AAEvD,OAAK,OAAO,KAAK;GACf,WAAW,KAAK,KAAK,4BAA4B,MAAM,UAAU;GACjE,WAAW;GACX,gBAAgB,eAAe;GAC/B,YAAY;KACT,eAAA;KACA,2BAA2B,MAAM;KACjC,iCAAiC,KAAK,KAAK,mBAC1C,MAAM,UACP;KACA,+BAA+B,MAAM;KACrC,iCAAiC,MAAM;IACzC;GACD;GACD,CAAC"}
1
+ {"version":3,"file":"UserTimingInstrumentation.js","names":[],"sources":["../../../../src/instrumentations/user-timing/UserTimingInstrumentation/UserTimingInstrumentation.ts"],"sourcesContent":["import { SeverityNumber } from '@opentelemetry/api-logs';\nimport {\n KEY_MXL_INSTRUMENTATION,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXL_PERFORMANCE_INSTRUMENTATIONS } from '../../../constants/attributes';\nimport { createPerformanceObserver } from '../../../utils';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_USER_TIMING_DETAIL,\n KEY_MXL_USER_TIMING_DURATION,\n KEY_MXL_USER_TIMING_ENTRY_TYPE,\n KEY_MXL_USER_TIMING_NAME,\n KEY_MXL_USER_TIMING_START_TIME,\n USER_TIMING_EVENT_NAME,\n} from './constants';\nimport type {\n UserTimingEntryFilter,\n UserTimingInstrumentationArgs,\n} from './types';\n\nexport class UserTimingInstrumentation extends MXLInstrumentationBase {\n private _markObserver: PerformanceObserver | null = null;\n private _measureObserver: PerformanceObserver | null = null;\n private _seenEntries = new Set<string>();\n private _isEnabled = false;\n private readonly _allowedEntries: UserTimingEntryFilter | undefined;\n\n public constructor({\n diag,\n perf,\n limitManager,\n allowedEntries,\n }: UserTimingInstrumentationArgs = {}) {\n super({\n config: {},\n diag,\n instrumentationName: 'UserTimingInstrumentation',\n instrumentationVersion: '1.0.0',\n limitManager,\n perf,\n });\n this._allowedEntries = allowedEntries;\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public enable(): void {\n if (this._isEnabled) {\n return;\n }\n\n this._isEnabled = true;\n this._seenEntries = new Set();\n\n if (this._markObserver) {\n this._markObserver.disconnect();\n }\n if (this._measureObserver) {\n this._measureObserver.disconnect();\n }\n\n this._markObserver = createPerformanceObserver<PerformanceMark>(\n 'mark',\n this._processEntry.bind(this),\n { diag: this._diag },\n );\n\n if (!this._markObserver) {\n this._diag.error('failed to enable mark observer');\n }\n\n this._measureObserver = createPerformanceObserver<PerformanceMeasure>(\n 'measure',\n (entry) => this._processEntry(entry),\n { diag: this._diag },\n );\n\n if (!this._measureObserver) {\n this._diag.error('failed to enable measure observer');\n }\n\n if (!this._markObserver && !this._measureObserver) {\n this._isEnabled = false;\n }\n }\n\n public disable(): void {\n this._isEnabled = false;\n\n if (this._markObserver) {\n this._markObserver.disconnect();\n this._markObserver = null;\n }\n\n if (this._measureObserver) {\n this._measureObserver.disconnect();\n this._measureObserver = null;\n }\n\n this._seenEntries = new Set();\n }\n\n private _processEntry(entry: PerformanceMark | PerformanceMeasure): void {\n if (!this._isEnabled) {\n return;\n }\n\n if (this._allowedEntries !== undefined) {\n const allowed = Array.isArray(this._allowedEntries)\n ? this._allowedEntries.includes(entry.name)\n : this._allowedEntries(entry);\n if (!allowed) {\n return;\n }\n }\n\n const key = `${location.href}::${entry.name}`;\n // De-duplicate entries by name and page URL, only processing the first occurrence of each unique name on each page URL\n if (this._seenEntries.has(key)) {\n return;\n }\n this._seenEntries.add(key);\n\n if (\n this.limitManager?.limitUserTimingEntry(\n entry.entryType as 'mark' | 'measure',\n )\n ) {\n return;\n }\n\n if (entry.entryType === 'measure') {\n const measureDetail = (entry as PerformanceMeasure).detail;\n const span = this.tracer.startSpan(entry.name, {\n attributes: {\n [KEY_MXL_TYPE]: MXL_TYPES.UserTiming,\n [KEY_MXL_INSTRUMENTATION]:\n MXL_PERFORMANCE_INSTRUMENTATIONS.UserTiming,\n [KEY_MXL_USER_TIMING_ENTRY_TYPE]: entry.entryType,\n [KEY_MXL_USER_TIMING_START_TIME]: this.perf.millisFromZeroTime(\n entry.startTime,\n ),\n [KEY_MXL_USER_TIMING_DURATION]: entry.duration,\n ...(measureDetail != null && {\n [KEY_MXL_USER_TIMING_DETAIL]: JSON.stringify(measureDetail),\n }),\n },\n startTime: this.perf.epochMillisFromOriginOffset(entry.startTime),\n });\n span.end(\n this.perf.epochMillisFromOriginOffset(entry.startTime + entry.duration),\n );\n return;\n }\n\n const { detail } = entry as PerformanceMark;\n const body = detail != null ? JSON.stringify(detail) : undefined;\n\n this.logger.emit({\n attributes: {\n [KEY_MXL_TYPE]: MXL_TYPES.UserTiming,\n [KEY_MXL_USER_TIMING_NAME]: entry.name,\n [KEY_MXL_USER_TIMING_START_TIME]: this.perf.millisFromZeroTime(\n entry.startTime,\n ),\n [KEY_MXL_USER_TIMING_DURATION]: entry.duration,\n [KEY_MXL_USER_TIMING_ENTRY_TYPE]: entry.entryType,\n },\n body,\n eventName: USER_TIMING_EVENT_NAME,\n severityNumber: SeverityNumber.INFO,\n timestamp: this.perf.epochMillisFromOriginOffset(entry.startTime),\n });\n }\n}\n"],"mappings":";;;;;;AAsBA,IAAa,4BAAb,cAA+C,uBAAuB;CACpE,gBAAoD;CACpD,mBAAuD;CACvD,+BAAuB,IAAI,KAAa;CACxC,aAAqB;CACrB;CAEA,YAAmB,EACjB,MACA,MACA,cACA,mBACiC,EAAE,EAAE;AACrC,QAAM;GACJ,QAAQ,EAAE;GACV;GACA,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACD,CAAC;AACF,OAAK,kBAAkB;AAEvB,MAAI,KAAK,QAAQ,QACf,MAAK,QAAQ;;CAIjB,SAAsB;AACpB,MAAI,KAAK,WACP;AAGF,OAAK,aAAa;AAClB,OAAK,+BAAe,IAAI,KAAK;AAE7B,MAAI,KAAK,cACP,MAAK,cAAc,YAAY;AAEjC,MAAI,KAAK,iBACP,MAAK,iBAAiB,YAAY;AAGpC,OAAK,gBAAgB,0BACnB,QACA,KAAK,cAAc,KAAK,KAAK,EAC7B,EAAE,MAAM,KAAK,OAAO,CACrB;AAED,MAAI,CAAC,KAAK,cACR,MAAK,MAAM,MAAM,iCAAiC;AAGpD,OAAK,mBAAmB,0BACtB,YACC,UAAU,KAAK,cAAc,MAAM,EACpC,EAAE,MAAM,KAAK,OAAO,CACrB;AAED,MAAI,CAAC,KAAK,iBACR,MAAK,MAAM,MAAM,oCAAoC;AAGvD,MAAI,CAAC,KAAK,iBAAiB,CAAC,KAAK,iBAC/B,MAAK,aAAa;;CAItB,UAAuB;AACrB,OAAK,aAAa;AAElB,MAAI,KAAK,eAAe;AACtB,QAAK,cAAc,YAAY;AAC/B,QAAK,gBAAgB;;AAGvB,MAAI,KAAK,kBAAkB;AACzB,QAAK,iBAAiB,YAAY;AAClC,QAAK,mBAAmB;;AAG1B,OAAK,+BAAe,IAAI,KAAK;;CAG/B,cAAsB,OAAmD;AACvE,MAAI,CAAC,KAAK,WACR;AAGF,MAAI,KAAK,oBAAoB,KAAA;OAIvB,EAHY,MAAM,QAAQ,KAAK,gBAAgB,GAC/C,KAAK,gBAAgB,SAAS,MAAM,KAAK,GACzC,KAAK,gBAAgB,MAAM,EAE7B;;EAIJ,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,MAAM;AAEvC,MAAI,KAAK,aAAa,IAAI,IAAI,CAC5B;AAEF,OAAK,aAAa,IAAI,IAAI;AAE1B,MACE,KAAK,cAAc,qBACjB,MAAM,UACP,CAED;AAGF,MAAI,MAAM,cAAc,WAAW;GACjC,MAAM,gBAAiB,MAA6B;AACvC,QAAK,OAAO,UAAU,MAAM,MAAM;IAC7C,YAAY;MACT,eAAA;MACA,0BAAA;MAEA,iCAAiC,MAAM;MACvC,iCAAiC,KAAK,KAAK,mBAC1C,MAAM,UACP;MACA,+BAA+B,MAAM;KACtC,GAAI,iBAAiB,QAAQ,GAAA,2BACG,KAAK,UAAU,cAAc,EAC5D;KACF;IACD,WAAW,KAAK,KAAK,4BAA4B,MAAM,UAAU;IAClE,CACG,CAAC,IACH,KAAK,KAAK,4BAA4B,MAAM,YAAY,MAAM,SAAS,CACxE;AACD;;EAGF,MAAM,EAAE,WAAW;EACnB,MAAM,OAAO,UAAU,OAAO,KAAK,UAAU,OAAO,GAAG,KAAA;AAEvD,OAAK,OAAO,KAAK;GACf,YAAY;KACT,eAAA;KACA,2BAA2B,MAAM;KACjC,iCAAiC,KAAK,KAAK,mBAC1C,MAAM,UACP;KACA,+BAA+B,MAAM;KACrC,iCAAiC,MAAM;IACzC;GACD;GACA,WAAW;GACX,gBAAgB,eAAe;GAC/B,WAAW,KAAK,KAAK,4BAA4B,MAAM,UAAU;GAClE,CAAC"}
@@ -14,7 +14,7 @@ const isPrimitiveValue = (value) => {
14
14
  const roundClamp = (value) => Math.round(Math.max(0, value));
15
15
  const webVitalAttributionToReport = (metric) => {
16
16
  const attributes = {};
17
- const attribution = metric.attribution;
17
+ const { attribution } = metric;
18
18
  if (!attribution || typeof attribution !== "object") return attributes;
19
19
  for (const [key, value] of Object.entries(attribution)) if (isPrimitiveValue(value)) attributes[`${require_instrumentations_web_vitals_WebVitalsInstrumentation_attributes.KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;
20
20
  return attributes;
@@ -34,19 +34,19 @@ const loafScriptsAttribution = (metric, diag) => {
34
34
  existing.styleAndLayoutDuration += script.forcedStyleAndLayoutDuration;
35
35
  existing.count++;
36
36
  } else scripts.set(url, {
37
- totalDuration: script.duration,
37
+ count: 1,
38
38
  styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,
39
- count: 1
39
+ totalDuration: script.duration
40
40
  });
41
41
  }
42
42
  if (scripts.size > 0) attributes[`${require_instrumentations_web_vitals_WebVitalsInstrumentation_attributes.KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] = JSON.stringify(Object.fromEntries([...scripts].sort((a, b) => b[1].totalDuration - a[1].totalDuration).slice(0, 250).map(([url, script]) => [url, {
43
- total_duration: Math.round(script.totalDuration),
43
+ count: script.count,
44
44
  style_and_layout_duration: Math.round(script.styleAndLayoutDuration),
45
- count: script.count
45
+ total_duration: Math.round(script.totalDuration)
46
46
  }])));
47
47
  }
48
- } catch (e) {
49
- diag.error("error building loaf scripts for INP", e);
48
+ } catch (error) {
49
+ diag.error("error building loaf scripts for INP", error);
50
50
  }
51
51
  return attributes;
52
52
  };
@@ -67,8 +67,8 @@ const ttfbSubPartsAttribution = (metric, diag) => {
67
67
  attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;
68
68
  attributes[`${prefix}serverResponse`] = serverResponse;
69
69
  attributes[`${prefix}unattributed`] = unattributed;
70
- } catch (e) {
71
- diag.error("error computing TTFB timing breakdown", e);
70
+ } catch (error) {
71
+ diag.error("error computing TTFB timing breakdown", error);
72
72
  }
73
73
  else diag.debug("TTFB navigationEntry unavailable, skipping timing breakdown");
74
74
  return attributes;
@@ -79,10 +79,10 @@ var WebVitalsInstrumentation = class extends require_instrumentations_MXLInstrum
79
79
  _urlAttribution;
80
80
  _pageManager;
81
81
  _attributedPage = {
82
- INP: void 0,
83
- LCP: void 0,
84
82
  CLS: void 0,
85
83
  FCP: void 0,
84
+ INP: void 0,
85
+ LCP: void 0,
86
86
  TTFB: void 0
87
87
  };
88
88
  _largestShiftTargetForCLS;
@@ -90,11 +90,11 @@ var WebVitalsInstrumentation = class extends require_instrumentations_MXLInstrum
90
90
  _isEnabled = false;
91
91
  constructor({ diag, perf, listeners = require_instrumentations_web_vitals_WebVitalsInstrumentation_constants.WEB_VITALS_ID_TO_LISTENER, urlDocument = window.document, urlAttribution = true, pageManager } = {}) {
92
92
  super({
93
+ config: {},
94
+ diag,
93
95
  instrumentationName: "WebVitalsInstrumentation",
94
96
  instrumentationVersion: "1.0.0",
95
- diag,
96
- perf,
97
- config: {}
97
+ perf
98
98
  });
99
99
  this._listeners = listeners;
100
100
  this._urlDocument = urlDocument;
@@ -116,7 +116,7 @@ var WebVitalsInstrumentation = class extends require_instrumentations_MXLInstrum
116
116
  require_instrumentations_web_vitals_WebVitalsInstrumentation_constants.ALL_WEB_VITALS.forEach((name) => {
117
117
  this._listeners[name]?.((metric) => {
118
118
  if (!this._isEnabled) return;
119
- const currentSessionSpan = this.sessionManager.getSessionSpan();
119
+ const currentSessionSpan = this.userSessionManager.getSessionPartSpan();
120
120
  if (!currentSessionSpan) return;
121
121
  const metricTime = this._getTimeForMetric(metric);
122
122
  const attributedPage = this._getAttributedPageForMetric(metric);
@@ -1 +1 @@
1
- {"version":3,"file":"WebVitalsInstrumentation.cjs","names":["KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX","MAX_LOAF_SCRIPT_URL_LENGTH","MXLInstrumentationBase","WEB_VITALS_ID_TO_LISTENER","page","KEY_MXL_TYPE","ATTR_URL_FULL","KEY_BROWSER_URL_FULL","KEY_MXL_WEB_VITAL_NAVIGATION_TYPE","KEY_MXL_WEB_VITAL_NAME","KEY_MXL_WEB_VITAL_RATING","KEY_MXL_WEB_VITAL_ID","KEY_MXL_WEB_VITAL_DELTA","KEY_MXL_WEB_VITAL_VALUE","KEY_MXL_PAGE_PATH","KEY_MXL_PAGE_ID","KEY_APP_SURFACE_LABEL","MXL_WEB_VITALS_PREFIX"],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.ts"],"sourcesContent":["import type {\n Attributes,\n AttributeValue,\n DiagLogger,\n} from '@opentelemetry/api';\nimport { ATTR_URL_FULL } from '@opentelemetry/semantic-conventions';\nimport type {\n CLSMetricWithAttribution,\n INPAttribution,\n Metric,\n MetricWithAttribution,\n TTFBAttribution,\n} from 'web-vitals/attribution';\nimport type { PageManager } from '../../../api-page';\nimport { page } from '../../../api-page';\nimport type { URLDocument } from '../../../common';\nimport {\n KEY_APP_SURFACE_LABEL,\n KEY_BROWSER_URL_FULL,\n KEY_MXL_PAGE_ID,\n KEY_MXL_PAGE_PATH,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX,\n KEY_MXL_WEB_VITAL_DELTA,\n KEY_MXL_WEB_VITAL_ID,\n KEY_MXL_WEB_VITAL_NAME,\n KEY_MXL_WEB_VITAL_NAVIGATION_TYPE,\n KEY_MXL_WEB_VITAL_RATING,\n KEY_MXL_WEB_VITAL_VALUE,\n} from './attributes';\nimport {\n ALL_WEB_VITALS,\n MAX_LOAF_SCRIPT_ENTRIES,\n MAX_LOAF_SCRIPT_URL_LENGTH,\n MXL_WEB_VITALS_PREFIX,\n WEB_VITALS_ID_TO_LISTENER,\n} from './constants';\nimport type { WebVitalListeners, WebVitalsInstrumentationArgs } from './types';\n\ntype AttributedPage = {\n fullURL: string;\n path?: string;\n pageID?: string;\n label?: string;\n};\n\nconst isPrimitiveValue = (value: unknown): value is AttributeValue => {\n const type = typeof value;\n return type === 'number' || type === 'string' || type === 'boolean';\n};\n\nconst roundClamp = (value: number): number => Math.round(Math.max(0, value));\n\nconst webVitalAttributionToReport = (\n metric: MetricWithAttribution,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution;\n\n if (!attribution || typeof attribution !== 'object') {\n return attributes;\n }\n\n for (const [key, value] of Object.entries(attribution)) {\n if (isPrimitiveValue(value)) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;\n }\n }\n\n return attributes;\n};\n\nconst loafScriptsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as INPAttribution;\n\n try {\n // suppress LoAF baseline errors\n /* eslint-disable baseline-js/use-baseline */\n if (attribution.longAnimationFrameEntries.length > 0) {\n const scripts = new Map<\n string,\n {\n totalDuration: number;\n styleAndLayoutDuration: number;\n count: number;\n }\n >();\n for (const entry of attribution.longAnimationFrameEntries) {\n for (const script of entry.scripts) {\n let url = script.sourceURL || '(inline)';\n if (url.length > MAX_LOAF_SCRIPT_URL_LENGTH) {\n url = `${url.substring(0, MAX_LOAF_SCRIPT_URL_LENGTH)}...`;\n }\n const existing = scripts.get(url);\n if (existing) {\n existing.totalDuration += script.duration;\n existing.styleAndLayoutDuration +=\n script.forcedStyleAndLayoutDuration;\n existing.count++;\n } else {\n scripts.set(url, {\n totalDuration: script.duration,\n styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,\n count: 1,\n });\n }\n }\n }\n if (scripts.size > 0) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] =\n JSON.stringify(\n Object.fromEntries(\n [...scripts]\n .sort((a, b) => b[1].totalDuration - a[1].totalDuration)\n .slice(0, MAX_LOAF_SCRIPT_ENTRIES)\n .map(([url, script]) => [\n url,\n {\n total_duration: Math.round(script.totalDuration),\n style_and_layout_duration: Math.round(\n script.styleAndLayoutDuration,\n ),\n count: script.count,\n },\n ]),\n ),\n );\n }\n }\n /* eslint-enable baseline-js/use-baseline */\n } catch (e) {\n diag.error('error building loaf scripts for INP', e);\n }\n\n return attributes;\n};\n\nconst ttfbSubPartsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as TTFBAttribution;\n const entry = attribution.navigationEntry as\n | PerformanceNavigationTiming\n | undefined;\n\n if (entry) {\n try {\n const redirect = roundClamp(entry.redirectEnd - entry.redirectStart);\n const domainLookup = roundClamp(\n entry.domainLookupEnd - entry.domainLookupStart,\n );\n const tcpConnection = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.secureConnectionStart - entry.connectStart\n : entry.connectEnd - entry.connectStart,\n );\n const tlsNegotiation = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.connectEnd - entry.secureConnectionStart\n : 0,\n );\n const effectiveResponseStart = Math.max(\n // @ts-expect-error 103 Early hints are not supported in all browsers\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/finalResponseHeadersStart\n entry.finalResponseHeadersStart ?? 0,\n entry.responseStart,\n );\n const serverResponse = roundClamp(\n effectiveResponseStart - entry.requestStart,\n );\n const total = Math.round(entry.responseEnd - entry.startTime);\n const unattributed = roundClamp(\n total -\n redirect -\n domainLookup -\n tcpConnection -\n tlsNegotiation -\n serverResponse,\n );\n const prefix = KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX;\n attributes[`${prefix}redirect`] = redirect;\n attributes[`${prefix}domainLookup`] = domainLookup;\n attributes[`${prefix}tcpConnection`] = tcpConnection;\n attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;\n attributes[`${prefix}serverResponse`] = serverResponse;\n attributes[`${prefix}unattributed`] = unattributed;\n } catch (e) {\n diag.error('error computing TTFB timing breakdown', e);\n }\n } else {\n diag.debug('TTFB navigationEntry unavailable, skipping timing breakdown');\n }\n\n return attributes;\n};\n\nexport class WebVitalsInstrumentation extends MXLInstrumentationBase {\n private readonly _listeners: WebVitalListeners;\n private readonly _urlDocument: URLDocument;\n private readonly _urlAttribution: boolean;\n private readonly _pageManager: PageManager;\n private readonly _attributedPage: Record<\n Metric['name'],\n AttributedPage | undefined\n > = {\n INP: undefined,\n LCP: undefined,\n CLS: undefined,\n FCP: undefined,\n TTFB: undefined,\n };\n private _largestShiftTargetForCLS: string | undefined;\n private _listenersRegistered = false;\n private _isEnabled = false;\n\n // instrumentation that adds an event to the session span for each web vital report\n public constructor({\n diag,\n perf,\n listeners = WEB_VITALS_ID_TO_LISTENER,\n urlDocument = window.document,\n urlAttribution = true,\n pageManager,\n }: WebVitalsInstrumentationArgs = {}) {\n super({\n instrumentationName: 'WebVitalsInstrumentation',\n instrumentationVersion: '1.0.0',\n diag,\n perf,\n config: {},\n });\n this._listeners = listeners;\n this._urlDocument = urlDocument;\n this._urlAttribution = urlAttribution;\n this._pageManager = pageManager ?? page.getPageManager();\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override disable(): void {\n // web-vitals library doesn't support removing listeners, so we just pause emission\n // https://github.com/GoogleChrome/web-vitals/issues/357#issuecomment-1593439036\n this._isEnabled = false;\n this._diag.debug('WebVitalsInstrumentation disabled, pausing emission');\n }\n\n public enable(): void {\n this._isEnabled = true;\n\n // web-vitals library doesn't support removing listeners, so only register once\n if (this._listenersRegistered) {\n this._diag.debug(\n 'WebVitalsInstrumentation listeners already registered, resuming emission',\n );\n return;\n }\n this._listenersRegistered = true;\n\n ALL_WEB_VITALS.forEach((name) => {\n this._listeners[name]?.((metric) => {\n if (!this._isEnabled) {\n return;\n }\n\n const currentSessionSpan = this.sessionManager.getSessionSpan();\n\n if (!currentSessionSpan) {\n return;\n }\n\n // first thing record the time when this cb was invoked\n const metricTime = this._getTimeForMetric(metric);\n\n const attributedPage = this._getAttributedPageForMetric(metric);\n\n const attrs: Attributes = {\n [KEY_MXL_TYPE]: MXL_TYPES.WebVital,\n [ATTR_URL_FULL]: attributedPage.fullURL,\n [KEY_BROWSER_URL_FULL]: attributedPage.fullURL,\n [KEY_MXL_WEB_VITAL_NAVIGATION_TYPE]: metric.navigationType,\n [KEY_MXL_WEB_VITAL_NAME]: metric.name,\n [KEY_MXL_WEB_VITAL_RATING]: metric.rating,\n [KEY_MXL_WEB_VITAL_ID]: metric.id,\n [KEY_MXL_WEB_VITAL_DELTA]: metric.delta,\n [KEY_MXL_WEB_VITAL_VALUE]: metric.value,\n ...webVitalAttributionToReport(metric),\n ...(name === 'INP' ? loafScriptsAttribution(metric, this._diag) : {}),\n ...(name === 'TTFB'\n ? ttfbSubPartsAttribution(metric, this._diag)\n : {}),\n };\n\n // Add page attributes if route and page ID exist\n if (attributedPage.path && attributedPage.pageID) {\n attrs[KEY_MXL_PAGE_PATH] = attributedPage.path;\n attrs[KEY_MXL_PAGE_ID] = attributedPage.pageID;\n }\n\n if (attributedPage.label) {\n attrs[KEY_APP_SURFACE_LABEL] = attributedPage.label;\n }\n\n currentSessionSpan.addEvent(\n `${MXL_WEB_VITALS_PREFIX}-report-${name}`,\n attrs,\n metricTime,\n );\n });\n });\n\n if (this._urlAttribution) {\n // When these web vitals make their final report (e.g. when the listeners w/ reportAllChanges=false trigger) the\n // document's URL at that time may not match what it was at the time the scores were last updated. Instead, listen\n // for updates to the scores and keep track of the Page information to attribute for each\n this._listeners.TTFB?.(\n () => {\n this._attributedPage.TTFB = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.FCP?.(\n () => {\n this._attributedPage.FCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.INP?.(\n () => {\n this._attributedPage.INP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.LCP?.(\n () => {\n this._attributedPage.LCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.CLS?.(\n (metric: MetricWithAttribution) => {\n const clsMetric = metric as CLSMetricWithAttribution;\n // A layout shift could cause CLS to change its rating but because the score is cumulative this might not\n // correspond with an updated `largestShiftTarget`. Since we want to tie the attributed URL to the page that\n // the `largestShiftTarget` was on we only update the attributed URL if that target has changed\n if (\n this._largestShiftTargetForCLS !==\n clsMetric.attribution.largestShiftTarget\n ) {\n this._largestShiftTargetForCLS =\n clsMetric.attribution.largestShiftTarget;\n this._attributedPage.CLS = this._currentAttributedPage();\n }\n },\n {\n reportAllChanges: true,\n },\n );\n }\n }\n\n private _getTimeForMetric(metric: MetricWithAttribution): number {\n if (metric.name === 'CLS' && metric.attribution.largestShiftTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.largestShiftTime,\n );\n }\n\n if (metric.name === 'INP' && metric.attribution.interactionTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.interactionTime,\n );\n }\n\n return this.perf.getNowMillis();\n }\n\n private _currentAttributedPage(): AttributedPage {\n const attributed: AttributedPage = {\n fullURL: this._urlDocument.URL,\n };\n\n const currentRoute = this._pageManager.getCurrentRoute();\n const currentPageId = this._pageManager.getCurrentPageId();\n if (currentRoute && currentPageId) {\n attributed.path = currentRoute.path;\n attributed.pageID = currentPageId;\n }\n\n const pageLabel = this._pageManager.getPageLabel();\n if (pageLabel) {\n attributed.label = pageLabel;\n }\n\n return attributed;\n }\n\n private _getAttributedPageForMetric(\n metric: MetricWithAttribution,\n ): AttributedPage {\n if (metric.name === 'FCP' && this._attributedPage.FCP) {\n return this._attributedPage.FCP;\n }\n\n if (metric.name === 'TTFB' && this._attributedPage.TTFB) {\n return this._attributedPage.TTFB;\n }\n\n if (metric.name === 'INP' && this._attributedPage.INP) {\n return this._attributedPage.INP;\n }\n\n if (metric.name === 'LCP' && this._attributedPage.LCP) {\n return this._attributedPage.LCP;\n }\n\n if (\n metric.name === 'CLS' &&\n this._attributedPage.CLS &&\n metric.attribution.largestShiftTarget === this._largestShiftTargetForCLS\n ) {\n return this._attributedPage.CLS;\n }\n\n return this._currentAttributedPage();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WebVitalsInstrumentation.cjs","names":["KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX","MAX_LOAF_SCRIPT_URL_LENGTH","MXLInstrumentationBase","WEB_VITALS_ID_TO_LISTENER","page","KEY_MXL_TYPE","ATTR_URL_FULL","KEY_BROWSER_URL_FULL","KEY_MXL_WEB_VITAL_NAVIGATION_TYPE","KEY_MXL_WEB_VITAL_NAME","KEY_MXL_WEB_VITAL_RATING","KEY_MXL_WEB_VITAL_ID","KEY_MXL_WEB_VITAL_DELTA","KEY_MXL_WEB_VITAL_VALUE","KEY_MXL_PAGE_PATH","KEY_MXL_PAGE_ID","KEY_APP_SURFACE_LABEL","MXL_WEB_VITALS_PREFIX"],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.ts"],"sourcesContent":["import type {\n AttributeValue,\n Attributes,\n DiagLogger,\n} from '@opentelemetry/api';\nimport { ATTR_URL_FULL } from '@opentelemetry/semantic-conventions';\nimport type {\n CLSMetricWithAttribution,\n INPAttribution,\n Metric,\n MetricWithAttribution,\n TTFBAttribution,\n} from 'web-vitals/attribution';\nimport type { PageManager } from '../../../api-page';\nimport { page } from '../../../api-page';\nimport type { URLDocument } from '../../../common';\nimport {\n KEY_APP_SURFACE_LABEL,\n KEY_BROWSER_URL_FULL,\n KEY_MXL_PAGE_ID,\n KEY_MXL_PAGE_PATH,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX,\n KEY_MXL_WEB_VITAL_DELTA,\n KEY_MXL_WEB_VITAL_ID,\n KEY_MXL_WEB_VITAL_NAME,\n KEY_MXL_WEB_VITAL_NAVIGATION_TYPE,\n KEY_MXL_WEB_VITAL_RATING,\n KEY_MXL_WEB_VITAL_VALUE,\n} from './attributes';\nimport {\n ALL_WEB_VITALS,\n MAX_LOAF_SCRIPT_ENTRIES,\n MAX_LOAF_SCRIPT_URL_LENGTH,\n MXL_WEB_VITALS_PREFIX,\n WEB_VITALS_ID_TO_LISTENER,\n} from './constants';\nimport type { WebVitalListeners, WebVitalsInstrumentationArgs } from './types';\n\ninterface AttributedPage {\n fullURL: string;\n path?: string;\n pageID?: string;\n label?: string;\n}\n\nconst isPrimitiveValue = (value: unknown): value is AttributeValue => {\n const type = typeof value;\n return type === 'number' || type === 'string' || type === 'boolean';\n};\n\nconst roundClamp = (value: number): number => Math.round(Math.max(0, value));\n\nconst webVitalAttributionToReport = (\n metric: MetricWithAttribution,\n): Attributes => {\n const attributes: Attributes = {};\n const { attribution } = metric;\n\n if (!attribution || typeof attribution !== 'object') {\n return attributes;\n }\n\n for (const [key, value] of Object.entries(attribution)) {\n if (isPrimitiveValue(value)) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;\n }\n }\n\n return attributes;\n};\n\nconst loafScriptsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as INPAttribution;\n\n try {\n // Suppress LoAF baseline errors\n /* eslint-disable baseline-js/use-baseline */\n if (attribution.longAnimationFrameEntries.length > 0) {\n const scripts = new Map<\n string,\n {\n totalDuration: number;\n styleAndLayoutDuration: number;\n count: number;\n }\n >();\n for (const entry of attribution.longAnimationFrameEntries) {\n for (const script of entry.scripts) {\n let url = script.sourceURL || '(inline)';\n if (url.length > MAX_LOAF_SCRIPT_URL_LENGTH) {\n url = `${url.substring(0, MAX_LOAF_SCRIPT_URL_LENGTH)}...`;\n }\n const existing = scripts.get(url);\n if (existing) {\n existing.totalDuration += script.duration;\n existing.styleAndLayoutDuration +=\n script.forcedStyleAndLayoutDuration;\n existing.count++;\n } else {\n scripts.set(url, {\n count: 1,\n styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,\n totalDuration: script.duration,\n });\n }\n }\n }\n if (scripts.size > 0) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] =\n JSON.stringify(\n Object.fromEntries(\n [...scripts]\n .sort((a, b) => b[1].totalDuration - a[1].totalDuration)\n .slice(0, MAX_LOAF_SCRIPT_ENTRIES)\n .map(([url, script]) => [\n url,\n {\n count: script.count,\n style_and_layout_duration: Math.round(\n script.styleAndLayoutDuration,\n ),\n total_duration: Math.round(script.totalDuration),\n },\n ]),\n ),\n );\n }\n }\n /* eslint-enable baseline-js/use-baseline */\n } catch (error) {\n diag.error('error building loaf scripts for INP', error);\n }\n\n return attributes;\n};\n\nconst ttfbSubPartsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as TTFBAttribution;\n const entry = attribution.navigationEntry as\n | PerformanceNavigationTiming\n | undefined;\n\n if (entry) {\n try {\n const redirect = roundClamp(entry.redirectEnd - entry.redirectStart);\n const domainLookup = roundClamp(\n entry.domainLookupEnd - entry.domainLookupStart,\n );\n const tcpConnection = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.secureConnectionStart - entry.connectStart\n : entry.connectEnd - entry.connectStart,\n );\n const tlsNegotiation = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.connectEnd - entry.secureConnectionStart\n : 0,\n );\n const effectiveResponseStart = Math.max(\n // @ts-expect-error 103 Early hints are not supported in all browsers\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/finalResponseHeadersStart\n entry.finalResponseHeadersStart ?? 0,\n entry.responseStart,\n );\n const serverResponse = roundClamp(\n effectiveResponseStart - entry.requestStart,\n );\n const total = Math.round(entry.responseEnd - entry.startTime);\n const unattributed = roundClamp(\n total -\n redirect -\n domainLookup -\n tcpConnection -\n tlsNegotiation -\n serverResponse,\n );\n const prefix = KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX;\n attributes[`${prefix}redirect`] = redirect;\n attributes[`${prefix}domainLookup`] = domainLookup;\n attributes[`${prefix}tcpConnection`] = tcpConnection;\n attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;\n attributes[`${prefix}serverResponse`] = serverResponse;\n attributes[`${prefix}unattributed`] = unattributed;\n } catch (error) {\n diag.error('error computing TTFB timing breakdown', error);\n }\n } else {\n diag.debug('TTFB navigationEntry unavailable, skipping timing breakdown');\n }\n\n return attributes;\n};\n\nexport class WebVitalsInstrumentation extends MXLInstrumentationBase {\n private readonly _listeners: WebVitalListeners;\n private readonly _urlDocument: URLDocument;\n private readonly _urlAttribution: boolean;\n private readonly _pageManager: PageManager;\n private readonly _attributedPage: Record<\n Metric['name'],\n AttributedPage | undefined\n > = {\n CLS: undefined,\n FCP: undefined,\n INP: undefined,\n LCP: undefined,\n TTFB: undefined,\n };\n private _largestShiftTargetForCLS: string | undefined;\n private _listenersRegistered = false;\n private _isEnabled = false;\n\n // Instrumentation that adds an event to the session span for each web vital report\n public constructor({\n diag,\n perf,\n listeners = WEB_VITALS_ID_TO_LISTENER,\n urlDocument = window.document,\n urlAttribution = true,\n pageManager,\n }: WebVitalsInstrumentationArgs = {}) {\n super({\n config: {},\n diag,\n instrumentationName: 'WebVitalsInstrumentation',\n instrumentationVersion: '1.0.0',\n perf,\n });\n this._listeners = listeners;\n this._urlDocument = urlDocument;\n this._urlAttribution = urlAttribution;\n this._pageManager = pageManager ?? page.getPageManager();\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override disable(): void {\n // Web-vitals library doesn't support removing listeners, so we just pause emission\n // https://github.com/GoogleChrome/web-vitals/issues/357#issuecomment-1593439036\n this._isEnabled = false;\n this._diag.debug('WebVitalsInstrumentation disabled, pausing emission');\n }\n\n public enable(): void {\n this._isEnabled = true;\n\n // Web-vitals library doesn't support removing listeners, so only register once\n if (this._listenersRegistered) {\n this._diag.debug(\n 'WebVitalsInstrumentation listeners already registered, resuming emission',\n );\n return;\n }\n this._listenersRegistered = true;\n\n ALL_WEB_VITALS.forEach((name) => {\n this._listeners[name]?.((metric) => {\n if (!this._isEnabled) {\n return;\n }\n\n const currentSessionSpan = this.userSessionManager.getSessionPartSpan();\n\n if (!currentSessionSpan) {\n return;\n }\n\n // First thing record the time when this cb was invoked\n const metricTime = this._getTimeForMetric(metric);\n\n const attributedPage = this._getAttributedPageForMetric(metric);\n\n const attrs: Attributes = {\n [KEY_MXL_TYPE]: MXL_TYPES.WebVital,\n [ATTR_URL_FULL]: attributedPage.fullURL,\n [KEY_BROWSER_URL_FULL]: attributedPage.fullURL,\n [KEY_MXL_WEB_VITAL_NAVIGATION_TYPE]: metric.navigationType,\n [KEY_MXL_WEB_VITAL_NAME]: metric.name,\n [KEY_MXL_WEB_VITAL_RATING]: metric.rating,\n [KEY_MXL_WEB_VITAL_ID]: metric.id,\n [KEY_MXL_WEB_VITAL_DELTA]: metric.delta,\n [KEY_MXL_WEB_VITAL_VALUE]: metric.value,\n ...webVitalAttributionToReport(metric),\n ...(name === 'INP' ? loafScriptsAttribution(metric, this._diag) : {}),\n ...(name === 'TTFB'\n ? ttfbSubPartsAttribution(metric, this._diag)\n : {}),\n };\n\n // Add page attributes if route and page ID exist\n if (attributedPage.path && attributedPage.pageID) {\n attrs[KEY_MXL_PAGE_PATH] = attributedPage.path;\n attrs[KEY_MXL_PAGE_ID] = attributedPage.pageID;\n }\n\n if (attributedPage.label) {\n attrs[KEY_APP_SURFACE_LABEL] = attributedPage.label;\n }\n\n currentSessionSpan.addEvent(\n `${MXL_WEB_VITALS_PREFIX}-report-${name}`,\n attrs,\n metricTime,\n );\n });\n });\n\n if (this._urlAttribution) {\n // When these web vitals make their final report (e.g. when the listeners w/ reportAllChanges=false trigger) the\n // Document's URL at that time may not match what it was at the time the scores were last updated. Instead, listen\n // For updates to the scores and keep track of the Page information to attribute for each\n this._listeners.TTFB?.(\n () => {\n this._attributedPage.TTFB = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.FCP?.(\n () => {\n this._attributedPage.FCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.INP?.(\n () => {\n this._attributedPage.INP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.LCP?.(\n () => {\n this._attributedPage.LCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.CLS?.(\n (metric: MetricWithAttribution) => {\n const clsMetric = metric as CLSMetricWithAttribution;\n // A layout shift could cause CLS to change its rating but because the score is cumulative this might not\n // Correspond with an updated `largestShiftTarget`. Since we want to tie the attributed URL to the page that\n // The `largestShiftTarget` was on we only update the attributed URL if that target has changed\n if (\n this._largestShiftTargetForCLS !==\n clsMetric.attribution.largestShiftTarget\n ) {\n this._largestShiftTargetForCLS =\n clsMetric.attribution.largestShiftTarget;\n this._attributedPage.CLS = this._currentAttributedPage();\n }\n },\n {\n reportAllChanges: true,\n },\n );\n }\n }\n\n private _getTimeForMetric(metric: MetricWithAttribution): number {\n if (metric.name === 'CLS' && metric.attribution.largestShiftTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.largestShiftTime,\n );\n }\n\n if (metric.name === 'INP' && metric.attribution.interactionTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.interactionTime,\n );\n }\n\n return this.perf.getNowMillis();\n }\n\n private _currentAttributedPage(): AttributedPage {\n const attributed: AttributedPage = {\n fullURL: this._urlDocument.URL,\n };\n\n const currentRoute = this._pageManager.getCurrentRoute();\n const currentPageId = this._pageManager.getCurrentPageId();\n if (currentRoute && currentPageId) {\n attributed.path = currentRoute.path;\n attributed.pageID = currentPageId;\n }\n\n const pageLabel = this._pageManager.getPageLabel();\n if (pageLabel) {\n attributed.label = pageLabel;\n }\n\n return attributed;\n }\n\n private _getAttributedPageForMetric(\n metric: MetricWithAttribution,\n ): AttributedPage {\n if (metric.name === 'FCP' && this._attributedPage.FCP) {\n return this._attributedPage.FCP;\n }\n\n if (metric.name === 'TTFB' && this._attributedPage.TTFB) {\n return this._attributedPage.TTFB;\n }\n\n if (metric.name === 'INP' && this._attributedPage.INP) {\n return this._attributedPage.INP;\n }\n\n if (metric.name === 'LCP' && this._attributedPage.LCP) {\n return this._attributedPage.LCP;\n }\n\n if (\n metric.name === 'CLS' &&\n this._attributedPage.CLS &&\n metric.attribution.largestShiftTarget === this._largestShiftTargetForCLS\n ) {\n return this._attributedPage.CLS;\n }\n\n return this._currentAttributedPage();\n }\n}\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ const isPrimitiveValue = (value) => {
12
12
  const roundClamp = (value) => Math.round(Math.max(0, value));
13
13
  const webVitalAttributionToReport = (metric) => {
14
14
  const attributes = {};
15
- const attribution = metric.attribution;
15
+ const { attribution } = metric;
16
16
  if (!attribution || typeof attribution !== "object") return attributes;
17
17
  for (const [key, value] of Object.entries(attribution)) if (isPrimitiveValue(value)) attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;
18
18
  return attributes;
@@ -32,19 +32,19 @@ const loafScriptsAttribution = (metric, diag) => {
32
32
  existing.styleAndLayoutDuration += script.forcedStyleAndLayoutDuration;
33
33
  existing.count++;
34
34
  } else scripts.set(url, {
35
- totalDuration: script.duration,
35
+ count: 1,
36
36
  styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,
37
- count: 1
37
+ totalDuration: script.duration
38
38
  });
39
39
  }
40
40
  if (scripts.size > 0) attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] = JSON.stringify(Object.fromEntries([...scripts].sort((a, b) => b[1].totalDuration - a[1].totalDuration).slice(0, 250).map(([url, script]) => [url, {
41
- total_duration: Math.round(script.totalDuration),
41
+ count: script.count,
42
42
  style_and_layout_duration: Math.round(script.styleAndLayoutDuration),
43
- count: script.count
43
+ total_duration: Math.round(script.totalDuration)
44
44
  }])));
45
45
  }
46
- } catch (e) {
47
- diag.error("error building loaf scripts for INP", e);
46
+ } catch (error) {
47
+ diag.error("error building loaf scripts for INP", error);
48
48
  }
49
49
  return attributes;
50
50
  };
@@ -65,8 +65,8 @@ const ttfbSubPartsAttribution = (metric, diag) => {
65
65
  attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;
66
66
  attributes[`${prefix}serverResponse`] = serverResponse;
67
67
  attributes[`${prefix}unattributed`] = unattributed;
68
- } catch (e) {
69
- diag.error("error computing TTFB timing breakdown", e);
68
+ } catch (error) {
69
+ diag.error("error computing TTFB timing breakdown", error);
70
70
  }
71
71
  else diag.debug("TTFB navigationEntry unavailable, skipping timing breakdown");
72
72
  return attributes;
@@ -77,10 +77,10 @@ var WebVitalsInstrumentation = class extends MXLInstrumentationBase {
77
77
  _urlAttribution;
78
78
  _pageManager;
79
79
  _attributedPage = {
80
- INP: void 0,
81
- LCP: void 0,
82
80
  CLS: void 0,
83
81
  FCP: void 0,
82
+ INP: void 0,
83
+ LCP: void 0,
84
84
  TTFB: void 0
85
85
  };
86
86
  _largestShiftTargetForCLS;
@@ -88,11 +88,11 @@ var WebVitalsInstrumentation = class extends MXLInstrumentationBase {
88
88
  _isEnabled = false;
89
89
  constructor({ diag, perf, listeners = WEB_VITALS_ID_TO_LISTENER, urlDocument = window.document, urlAttribution = true, pageManager } = {}) {
90
90
  super({
91
+ config: {},
92
+ diag,
91
93
  instrumentationName: "WebVitalsInstrumentation",
92
94
  instrumentationVersion: "1.0.0",
93
- diag,
94
- perf,
95
- config: {}
95
+ perf
96
96
  });
97
97
  this._listeners = listeners;
98
98
  this._urlDocument = urlDocument;
@@ -114,7 +114,7 @@ var WebVitalsInstrumentation = class extends MXLInstrumentationBase {
114
114
  ALL_WEB_VITALS.forEach((name) => {
115
115
  this._listeners[name]?.((metric) => {
116
116
  if (!this._isEnabled) return;
117
- const currentSessionSpan = this.sessionManager.getSessionSpan();
117
+ const currentSessionSpan = this.userSessionManager.getSessionPartSpan();
118
118
  if (!currentSessionSpan) return;
119
119
  const metricTime = this._getTimeForMetric(metric);
120
120
  const attributedPage = this._getAttributedPageForMetric(metric);
@@ -1 +1 @@
1
- {"version":3,"file":"WebVitalsInstrumentation.js","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.ts"],"sourcesContent":["import type {\n Attributes,\n AttributeValue,\n DiagLogger,\n} from '@opentelemetry/api';\nimport { ATTR_URL_FULL } from '@opentelemetry/semantic-conventions';\nimport type {\n CLSMetricWithAttribution,\n INPAttribution,\n Metric,\n MetricWithAttribution,\n TTFBAttribution,\n} from 'web-vitals/attribution';\nimport type { PageManager } from '../../../api-page';\nimport { page } from '../../../api-page';\nimport type { URLDocument } from '../../../common';\nimport {\n KEY_APP_SURFACE_LABEL,\n KEY_BROWSER_URL_FULL,\n KEY_MXL_PAGE_ID,\n KEY_MXL_PAGE_PATH,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX,\n KEY_MXL_WEB_VITAL_DELTA,\n KEY_MXL_WEB_VITAL_ID,\n KEY_MXL_WEB_VITAL_NAME,\n KEY_MXL_WEB_VITAL_NAVIGATION_TYPE,\n KEY_MXL_WEB_VITAL_RATING,\n KEY_MXL_WEB_VITAL_VALUE,\n} from './attributes';\nimport {\n ALL_WEB_VITALS,\n MAX_LOAF_SCRIPT_ENTRIES,\n MAX_LOAF_SCRIPT_URL_LENGTH,\n MXL_WEB_VITALS_PREFIX,\n WEB_VITALS_ID_TO_LISTENER,\n} from './constants';\nimport type { WebVitalListeners, WebVitalsInstrumentationArgs } from './types';\n\ntype AttributedPage = {\n fullURL: string;\n path?: string;\n pageID?: string;\n label?: string;\n};\n\nconst isPrimitiveValue = (value: unknown): value is AttributeValue => {\n const type = typeof value;\n return type === 'number' || type === 'string' || type === 'boolean';\n};\n\nconst roundClamp = (value: number): number => Math.round(Math.max(0, value));\n\nconst webVitalAttributionToReport = (\n metric: MetricWithAttribution,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution;\n\n if (!attribution || typeof attribution !== 'object') {\n return attributes;\n }\n\n for (const [key, value] of Object.entries(attribution)) {\n if (isPrimitiveValue(value)) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;\n }\n }\n\n return attributes;\n};\n\nconst loafScriptsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as INPAttribution;\n\n try {\n // suppress LoAF baseline errors\n /* eslint-disable baseline-js/use-baseline */\n if (attribution.longAnimationFrameEntries.length > 0) {\n const scripts = new Map<\n string,\n {\n totalDuration: number;\n styleAndLayoutDuration: number;\n count: number;\n }\n >();\n for (const entry of attribution.longAnimationFrameEntries) {\n for (const script of entry.scripts) {\n let url = script.sourceURL || '(inline)';\n if (url.length > MAX_LOAF_SCRIPT_URL_LENGTH) {\n url = `${url.substring(0, MAX_LOAF_SCRIPT_URL_LENGTH)}...`;\n }\n const existing = scripts.get(url);\n if (existing) {\n existing.totalDuration += script.duration;\n existing.styleAndLayoutDuration +=\n script.forcedStyleAndLayoutDuration;\n existing.count++;\n } else {\n scripts.set(url, {\n totalDuration: script.duration,\n styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,\n count: 1,\n });\n }\n }\n }\n if (scripts.size > 0) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] =\n JSON.stringify(\n Object.fromEntries(\n [...scripts]\n .sort((a, b) => b[1].totalDuration - a[1].totalDuration)\n .slice(0, MAX_LOAF_SCRIPT_ENTRIES)\n .map(([url, script]) => [\n url,\n {\n total_duration: Math.round(script.totalDuration),\n style_and_layout_duration: Math.round(\n script.styleAndLayoutDuration,\n ),\n count: script.count,\n },\n ]),\n ),\n );\n }\n }\n /* eslint-enable baseline-js/use-baseline */\n } catch (e) {\n diag.error('error building loaf scripts for INP', e);\n }\n\n return attributes;\n};\n\nconst ttfbSubPartsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as TTFBAttribution;\n const entry = attribution.navigationEntry as\n | PerformanceNavigationTiming\n | undefined;\n\n if (entry) {\n try {\n const redirect = roundClamp(entry.redirectEnd - entry.redirectStart);\n const domainLookup = roundClamp(\n entry.domainLookupEnd - entry.domainLookupStart,\n );\n const tcpConnection = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.secureConnectionStart - entry.connectStart\n : entry.connectEnd - entry.connectStart,\n );\n const tlsNegotiation = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.connectEnd - entry.secureConnectionStart\n : 0,\n );\n const effectiveResponseStart = Math.max(\n // @ts-expect-error 103 Early hints are not supported in all browsers\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/finalResponseHeadersStart\n entry.finalResponseHeadersStart ?? 0,\n entry.responseStart,\n );\n const serverResponse = roundClamp(\n effectiveResponseStart - entry.requestStart,\n );\n const total = Math.round(entry.responseEnd - entry.startTime);\n const unattributed = roundClamp(\n total -\n redirect -\n domainLookup -\n tcpConnection -\n tlsNegotiation -\n serverResponse,\n );\n const prefix = KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX;\n attributes[`${prefix}redirect`] = redirect;\n attributes[`${prefix}domainLookup`] = domainLookup;\n attributes[`${prefix}tcpConnection`] = tcpConnection;\n attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;\n attributes[`${prefix}serverResponse`] = serverResponse;\n attributes[`${prefix}unattributed`] = unattributed;\n } catch (e) {\n diag.error('error computing TTFB timing breakdown', e);\n }\n } else {\n diag.debug('TTFB navigationEntry unavailable, skipping timing breakdown');\n }\n\n return attributes;\n};\n\nexport class WebVitalsInstrumentation extends MXLInstrumentationBase {\n private readonly _listeners: WebVitalListeners;\n private readonly _urlDocument: URLDocument;\n private readonly _urlAttribution: boolean;\n private readonly _pageManager: PageManager;\n private readonly _attributedPage: Record<\n Metric['name'],\n AttributedPage | undefined\n > = {\n INP: undefined,\n LCP: undefined,\n CLS: undefined,\n FCP: undefined,\n TTFB: undefined,\n };\n private _largestShiftTargetForCLS: string | undefined;\n private _listenersRegistered = false;\n private _isEnabled = false;\n\n // instrumentation that adds an event to the session span for each web vital report\n public constructor({\n diag,\n perf,\n listeners = WEB_VITALS_ID_TO_LISTENER,\n urlDocument = window.document,\n urlAttribution = true,\n pageManager,\n }: WebVitalsInstrumentationArgs = {}) {\n super({\n instrumentationName: 'WebVitalsInstrumentation',\n instrumentationVersion: '1.0.0',\n diag,\n perf,\n config: {},\n });\n this._listeners = listeners;\n this._urlDocument = urlDocument;\n this._urlAttribution = urlAttribution;\n this._pageManager = pageManager ?? page.getPageManager();\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override disable(): void {\n // web-vitals library doesn't support removing listeners, so we just pause emission\n // https://github.com/GoogleChrome/web-vitals/issues/357#issuecomment-1593439036\n this._isEnabled = false;\n this._diag.debug('WebVitalsInstrumentation disabled, pausing emission');\n }\n\n public enable(): void {\n this._isEnabled = true;\n\n // web-vitals library doesn't support removing listeners, so only register once\n if (this._listenersRegistered) {\n this._diag.debug(\n 'WebVitalsInstrumentation listeners already registered, resuming emission',\n );\n return;\n }\n this._listenersRegistered = true;\n\n ALL_WEB_VITALS.forEach((name) => {\n this._listeners[name]?.((metric) => {\n if (!this._isEnabled) {\n return;\n }\n\n const currentSessionSpan = this.sessionManager.getSessionSpan();\n\n if (!currentSessionSpan) {\n return;\n }\n\n // first thing record the time when this cb was invoked\n const metricTime = this._getTimeForMetric(metric);\n\n const attributedPage = this._getAttributedPageForMetric(metric);\n\n const attrs: Attributes = {\n [KEY_MXL_TYPE]: MXL_TYPES.WebVital,\n [ATTR_URL_FULL]: attributedPage.fullURL,\n [KEY_BROWSER_URL_FULL]: attributedPage.fullURL,\n [KEY_MXL_WEB_VITAL_NAVIGATION_TYPE]: metric.navigationType,\n [KEY_MXL_WEB_VITAL_NAME]: metric.name,\n [KEY_MXL_WEB_VITAL_RATING]: metric.rating,\n [KEY_MXL_WEB_VITAL_ID]: metric.id,\n [KEY_MXL_WEB_VITAL_DELTA]: metric.delta,\n [KEY_MXL_WEB_VITAL_VALUE]: metric.value,\n ...webVitalAttributionToReport(metric),\n ...(name === 'INP' ? loafScriptsAttribution(metric, this._diag) : {}),\n ...(name === 'TTFB'\n ? ttfbSubPartsAttribution(metric, this._diag)\n : {}),\n };\n\n // Add page attributes if route and page ID exist\n if (attributedPage.path && attributedPage.pageID) {\n attrs[KEY_MXL_PAGE_PATH] = attributedPage.path;\n attrs[KEY_MXL_PAGE_ID] = attributedPage.pageID;\n }\n\n if (attributedPage.label) {\n attrs[KEY_APP_SURFACE_LABEL] = attributedPage.label;\n }\n\n currentSessionSpan.addEvent(\n `${MXL_WEB_VITALS_PREFIX}-report-${name}`,\n attrs,\n metricTime,\n );\n });\n });\n\n if (this._urlAttribution) {\n // When these web vitals make their final report (e.g. when the listeners w/ reportAllChanges=false trigger) the\n // document's URL at that time may not match what it was at the time the scores were last updated. Instead, listen\n // for updates to the scores and keep track of the Page information to attribute for each\n this._listeners.TTFB?.(\n () => {\n this._attributedPage.TTFB = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.FCP?.(\n () => {\n this._attributedPage.FCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.INP?.(\n () => {\n this._attributedPage.INP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.LCP?.(\n () => {\n this._attributedPage.LCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.CLS?.(\n (metric: MetricWithAttribution) => {\n const clsMetric = metric as CLSMetricWithAttribution;\n // A layout shift could cause CLS to change its rating but because the score is cumulative this might not\n // correspond with an updated `largestShiftTarget`. Since we want to tie the attributed URL to the page that\n // the `largestShiftTarget` was on we only update the attributed URL if that target has changed\n if (\n this._largestShiftTargetForCLS !==\n clsMetric.attribution.largestShiftTarget\n ) {\n this._largestShiftTargetForCLS =\n clsMetric.attribution.largestShiftTarget;\n this._attributedPage.CLS = this._currentAttributedPage();\n }\n },\n {\n reportAllChanges: true,\n },\n );\n }\n }\n\n private _getTimeForMetric(metric: MetricWithAttribution): number {\n if (metric.name === 'CLS' && metric.attribution.largestShiftTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.largestShiftTime,\n );\n }\n\n if (metric.name === 'INP' && metric.attribution.interactionTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.interactionTime,\n );\n }\n\n return this.perf.getNowMillis();\n }\n\n private _currentAttributedPage(): AttributedPage {\n const attributed: AttributedPage = {\n fullURL: this._urlDocument.URL,\n };\n\n const currentRoute = this._pageManager.getCurrentRoute();\n const currentPageId = this._pageManager.getCurrentPageId();\n if (currentRoute && currentPageId) {\n attributed.path = currentRoute.path;\n attributed.pageID = currentPageId;\n }\n\n const pageLabel = this._pageManager.getPageLabel();\n if (pageLabel) {\n attributed.label = pageLabel;\n }\n\n return attributed;\n }\n\n private _getAttributedPageForMetric(\n metric: MetricWithAttribution,\n ): AttributedPage {\n if (metric.name === 'FCP' && this._attributedPage.FCP) {\n return this._attributedPage.FCP;\n }\n\n if (metric.name === 'TTFB' && this._attributedPage.TTFB) {\n return this._attributedPage.TTFB;\n }\n\n if (metric.name === 'INP' && this._attributedPage.INP) {\n return this._attributedPage.INP;\n }\n\n if (metric.name === 'LCP' && this._attributedPage.LCP) {\n return this._attributedPage.LCP;\n }\n\n if (\n metric.name === 'CLS' &&\n this._attributedPage.CLS &&\n metric.attribution.largestShiftTarget === this._largestShiftTargetForCLS\n ) {\n return this._attributedPage.CLS;\n }\n\n return this._currentAttributedPage();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WebVitalsInstrumentation.js","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/WebVitalsInstrumentation.ts"],"sourcesContent":["import type {\n AttributeValue,\n Attributes,\n DiagLogger,\n} from '@opentelemetry/api';\nimport { ATTR_URL_FULL } from '@opentelemetry/semantic-conventions';\nimport type {\n CLSMetricWithAttribution,\n INPAttribution,\n Metric,\n MetricWithAttribution,\n TTFBAttribution,\n} from 'web-vitals/attribution';\nimport type { PageManager } from '../../../api-page';\nimport { page } from '../../../api-page';\nimport type { URLDocument } from '../../../common';\nimport {\n KEY_APP_SURFACE_LABEL,\n KEY_BROWSER_URL_FULL,\n KEY_MXL_PAGE_ID,\n KEY_MXL_PAGE_PATH,\n KEY_MXL_TYPE,\n MXL_TYPES,\n} from '../../../constants';\nimport { MXLInstrumentationBase } from '../../MXLInstrumentationBase';\nimport {\n KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX,\n KEY_MXL_WEB_VITAL_DELTA,\n KEY_MXL_WEB_VITAL_ID,\n KEY_MXL_WEB_VITAL_NAME,\n KEY_MXL_WEB_VITAL_NAVIGATION_TYPE,\n KEY_MXL_WEB_VITAL_RATING,\n KEY_MXL_WEB_VITAL_VALUE,\n} from './attributes';\nimport {\n ALL_WEB_VITALS,\n MAX_LOAF_SCRIPT_ENTRIES,\n MAX_LOAF_SCRIPT_URL_LENGTH,\n MXL_WEB_VITALS_PREFIX,\n WEB_VITALS_ID_TO_LISTENER,\n} from './constants';\nimport type { WebVitalListeners, WebVitalsInstrumentationArgs } from './types';\n\ninterface AttributedPage {\n fullURL: string;\n path?: string;\n pageID?: string;\n label?: string;\n}\n\nconst isPrimitiveValue = (value: unknown): value is AttributeValue => {\n const type = typeof value;\n return type === 'number' || type === 'string' || type === 'boolean';\n};\n\nconst roundClamp = (value: number): number => Math.round(Math.max(0, value));\n\nconst webVitalAttributionToReport = (\n metric: MetricWithAttribution,\n): Attributes => {\n const attributes: Attributes = {};\n const { attribution } = metric;\n\n if (!attribution || typeof attribution !== 'object') {\n return attributes;\n }\n\n for (const [key, value] of Object.entries(attribution)) {\n if (isPrimitiveValue(value)) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}${key}`] = value;\n }\n }\n\n return attributes;\n};\n\nconst loafScriptsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as INPAttribution;\n\n try {\n // Suppress LoAF baseline errors\n /* eslint-disable baseline-js/use-baseline */\n if (attribution.longAnimationFrameEntries.length > 0) {\n const scripts = new Map<\n string,\n {\n totalDuration: number;\n styleAndLayoutDuration: number;\n count: number;\n }\n >();\n for (const entry of attribution.longAnimationFrameEntries) {\n for (const script of entry.scripts) {\n let url = script.sourceURL || '(inline)';\n if (url.length > MAX_LOAF_SCRIPT_URL_LENGTH) {\n url = `${url.substring(0, MAX_LOAF_SCRIPT_URL_LENGTH)}...`;\n }\n const existing = scripts.get(url);\n if (existing) {\n existing.totalDuration += script.duration;\n existing.styleAndLayoutDuration +=\n script.forcedStyleAndLayoutDuration;\n existing.count++;\n } else {\n scripts.set(url, {\n count: 1,\n styleAndLayoutDuration: script.forcedStyleAndLayoutDuration,\n totalDuration: script.duration,\n });\n }\n }\n }\n if (scripts.size > 0) {\n attributes[`${KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX}loaf_scripts`] =\n JSON.stringify(\n Object.fromEntries(\n [...scripts]\n .sort((a, b) => b[1].totalDuration - a[1].totalDuration)\n .slice(0, MAX_LOAF_SCRIPT_ENTRIES)\n .map(([url, script]) => [\n url,\n {\n count: script.count,\n style_and_layout_duration: Math.round(\n script.styleAndLayoutDuration,\n ),\n total_duration: Math.round(script.totalDuration),\n },\n ]),\n ),\n );\n }\n }\n /* eslint-enable baseline-js/use-baseline */\n } catch (error) {\n diag.error('error building loaf scripts for INP', error);\n }\n\n return attributes;\n};\n\nconst ttfbSubPartsAttribution = (\n metric: MetricWithAttribution,\n diag: DiagLogger,\n): Attributes => {\n const attributes: Attributes = {};\n const attribution = metric.attribution as TTFBAttribution;\n const entry = attribution.navigationEntry as\n | PerformanceNavigationTiming\n | undefined;\n\n if (entry) {\n try {\n const redirect = roundClamp(entry.redirectEnd - entry.redirectStart);\n const domainLookup = roundClamp(\n entry.domainLookupEnd - entry.domainLookupStart,\n );\n const tcpConnection = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.secureConnectionStart - entry.connectStart\n : entry.connectEnd - entry.connectStart,\n );\n const tlsNegotiation = roundClamp(\n entry.secureConnectionStart > 0\n ? entry.connectEnd - entry.secureConnectionStart\n : 0,\n );\n const effectiveResponseStart = Math.max(\n // @ts-expect-error 103 Early hints are not supported in all browsers\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/finalResponseHeadersStart\n entry.finalResponseHeadersStart ?? 0,\n entry.responseStart,\n );\n const serverResponse = roundClamp(\n effectiveResponseStart - entry.requestStart,\n );\n const total = Math.round(entry.responseEnd - entry.startTime);\n const unattributed = roundClamp(\n total -\n redirect -\n domainLookup -\n tcpConnection -\n tlsNegotiation -\n serverResponse,\n );\n const prefix = KEY_MXL_WEB_VITAL_ATTRIBUTION_PREFIX;\n attributes[`${prefix}redirect`] = redirect;\n attributes[`${prefix}domainLookup`] = domainLookup;\n attributes[`${prefix}tcpConnection`] = tcpConnection;\n attributes[`${prefix}tlsNegotiation`] = tlsNegotiation;\n attributes[`${prefix}serverResponse`] = serverResponse;\n attributes[`${prefix}unattributed`] = unattributed;\n } catch (error) {\n diag.error('error computing TTFB timing breakdown', error);\n }\n } else {\n diag.debug('TTFB navigationEntry unavailable, skipping timing breakdown');\n }\n\n return attributes;\n};\n\nexport class WebVitalsInstrumentation extends MXLInstrumentationBase {\n private readonly _listeners: WebVitalListeners;\n private readonly _urlDocument: URLDocument;\n private readonly _urlAttribution: boolean;\n private readonly _pageManager: PageManager;\n private readonly _attributedPage: Record<\n Metric['name'],\n AttributedPage | undefined\n > = {\n CLS: undefined,\n FCP: undefined,\n INP: undefined,\n LCP: undefined,\n TTFB: undefined,\n };\n private _largestShiftTargetForCLS: string | undefined;\n private _listenersRegistered = false;\n private _isEnabled = false;\n\n // Instrumentation that adds an event to the session span for each web vital report\n public constructor({\n diag,\n perf,\n listeners = WEB_VITALS_ID_TO_LISTENER,\n urlDocument = window.document,\n urlAttribution = true,\n pageManager,\n }: WebVitalsInstrumentationArgs = {}) {\n super({\n config: {},\n diag,\n instrumentationName: 'WebVitalsInstrumentation',\n instrumentationVersion: '1.0.0',\n perf,\n });\n this._listeners = listeners;\n this._urlDocument = urlDocument;\n this._urlAttribution = urlAttribution;\n this._pageManager = pageManager ?? page.getPageManager();\n\n if (this._config.enabled) {\n this.enable();\n }\n }\n\n public override disable(): void {\n // Web-vitals library doesn't support removing listeners, so we just pause emission\n // https://github.com/GoogleChrome/web-vitals/issues/357#issuecomment-1593439036\n this._isEnabled = false;\n this._diag.debug('WebVitalsInstrumentation disabled, pausing emission');\n }\n\n public enable(): void {\n this._isEnabled = true;\n\n // Web-vitals library doesn't support removing listeners, so only register once\n if (this._listenersRegistered) {\n this._diag.debug(\n 'WebVitalsInstrumentation listeners already registered, resuming emission',\n );\n return;\n }\n this._listenersRegistered = true;\n\n ALL_WEB_VITALS.forEach((name) => {\n this._listeners[name]?.((metric) => {\n if (!this._isEnabled) {\n return;\n }\n\n const currentSessionSpan = this.userSessionManager.getSessionPartSpan();\n\n if (!currentSessionSpan) {\n return;\n }\n\n // First thing record the time when this cb was invoked\n const metricTime = this._getTimeForMetric(metric);\n\n const attributedPage = this._getAttributedPageForMetric(metric);\n\n const attrs: Attributes = {\n [KEY_MXL_TYPE]: MXL_TYPES.WebVital,\n [ATTR_URL_FULL]: attributedPage.fullURL,\n [KEY_BROWSER_URL_FULL]: attributedPage.fullURL,\n [KEY_MXL_WEB_VITAL_NAVIGATION_TYPE]: metric.navigationType,\n [KEY_MXL_WEB_VITAL_NAME]: metric.name,\n [KEY_MXL_WEB_VITAL_RATING]: metric.rating,\n [KEY_MXL_WEB_VITAL_ID]: metric.id,\n [KEY_MXL_WEB_VITAL_DELTA]: metric.delta,\n [KEY_MXL_WEB_VITAL_VALUE]: metric.value,\n ...webVitalAttributionToReport(metric),\n ...(name === 'INP' ? loafScriptsAttribution(metric, this._diag) : {}),\n ...(name === 'TTFB'\n ? ttfbSubPartsAttribution(metric, this._diag)\n : {}),\n };\n\n // Add page attributes if route and page ID exist\n if (attributedPage.path && attributedPage.pageID) {\n attrs[KEY_MXL_PAGE_PATH] = attributedPage.path;\n attrs[KEY_MXL_PAGE_ID] = attributedPage.pageID;\n }\n\n if (attributedPage.label) {\n attrs[KEY_APP_SURFACE_LABEL] = attributedPage.label;\n }\n\n currentSessionSpan.addEvent(\n `${MXL_WEB_VITALS_PREFIX}-report-${name}`,\n attrs,\n metricTime,\n );\n });\n });\n\n if (this._urlAttribution) {\n // When these web vitals make their final report (e.g. when the listeners w/ reportAllChanges=false trigger) the\n // Document's URL at that time may not match what it was at the time the scores were last updated. Instead, listen\n // For updates to the scores and keep track of the Page information to attribute for each\n this._listeners.TTFB?.(\n () => {\n this._attributedPage.TTFB = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.FCP?.(\n () => {\n this._attributedPage.FCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.INP?.(\n () => {\n this._attributedPage.INP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.LCP?.(\n () => {\n this._attributedPage.LCP = this._currentAttributedPage();\n },\n {\n reportAllChanges: true,\n },\n );\n this._listeners.CLS?.(\n (metric: MetricWithAttribution) => {\n const clsMetric = metric as CLSMetricWithAttribution;\n // A layout shift could cause CLS to change its rating but because the score is cumulative this might not\n // Correspond with an updated `largestShiftTarget`. Since we want to tie the attributed URL to the page that\n // The `largestShiftTarget` was on we only update the attributed URL if that target has changed\n if (\n this._largestShiftTargetForCLS !==\n clsMetric.attribution.largestShiftTarget\n ) {\n this._largestShiftTargetForCLS =\n clsMetric.attribution.largestShiftTarget;\n this._attributedPage.CLS = this._currentAttributedPage();\n }\n },\n {\n reportAllChanges: true,\n },\n );\n }\n }\n\n private _getTimeForMetric(metric: MetricWithAttribution): number {\n if (metric.name === 'CLS' && metric.attribution.largestShiftTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.largestShiftTime,\n );\n }\n\n if (metric.name === 'INP' && metric.attribution.interactionTime) {\n return this.perf.epochMillisFromOriginOffset(\n metric.attribution.interactionTime,\n );\n }\n\n return this.perf.getNowMillis();\n }\n\n private _currentAttributedPage(): AttributedPage {\n const attributed: AttributedPage = {\n fullURL: this._urlDocument.URL,\n };\n\n const currentRoute = this._pageManager.getCurrentRoute();\n const currentPageId = this._pageManager.getCurrentPageId();\n if (currentRoute && currentPageId) {\n attributed.path = currentRoute.path;\n attributed.pageID = currentPageId;\n }\n\n const pageLabel = this._pageManager.getPageLabel();\n if (pageLabel) {\n attributed.label = pageLabel;\n }\n\n return attributed;\n }\n\n private _getAttributedPageForMetric(\n metric: MetricWithAttribution,\n ): AttributedPage {\n if (metric.name === 'FCP' && this._attributedPage.FCP) {\n return this._attributedPage.FCP;\n }\n\n if (metric.name === 'TTFB' && this._attributedPage.TTFB) {\n return this._attributedPage.TTFB;\n }\n\n if (metric.name === 'INP' && this._attributedPage.INP) {\n return this._attributedPage.INP;\n }\n\n if (metric.name === 'LCP' && this._attributedPage.LCP) {\n return this._attributedPage.LCP;\n }\n\n if (\n metric.name === 'CLS' &&\n this._attributedPage.CLS &&\n metric.attribution.largestShiftTarget === this._largestShiftTargetForCLS\n ) {\n return this._attributedPage.CLS;\n }\n\n return this._currentAttributedPage();\n }\n}\n"],"mappings":"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"}
@@ -4,16 +4,14 @@ import { MXLInstrumentationBaseArgs } from "../../MXLInstrumentationBase/types.c
4
4
  import { Metric, MetricWithAttribution, ReportOpts } from "web-vitals/attribution";
5
5
 
6
6
  //#region src/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.ts
7
- type TrackingLevel = 'core' | 'all';
8
7
  type WebVitalOnReport = (metric: MetricWithAttribution) => void;
9
8
  type WebVitalListeners = Record<Metric['name'], ((onReport: WebVitalOnReport, opts?: ReportOpts) => void) | undefined>;
10
9
  type WebVitalsInstrumentationArgs = {
11
- /** @deprecated All vitals metrics are tracked by default */trackingLevel?: TrackingLevel;
12
10
  listeners?: WebVitalListeners;
13
11
  urlDocument?: URLDocument;
14
12
  urlAttribution?: boolean;
15
13
  pageManager?: PageManager;
16
14
  } & Pick<MXLInstrumentationBaseArgs, 'diag' | 'perf'>;
17
15
  //#endregion
18
- export { TrackingLevel, WebVitalListeners, WebVitalOnReport, WebVitalsInstrumentationArgs };
16
+ export { WebVitalListeners, WebVitalOnReport, WebVitalsInstrumentationArgs };
19
17
  //# sourceMappingURL=types.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/types.ts"],"mappings":";;;;;;KASY,aAAA;AAAA,KAEA,gBAAA,IAAoB,MAAA,EAAQ,qBAAA;AAAA,KAE5B,iBAAA,GAAoB,MAAA,CAC9B,MAAA,YACE,QAAA,EAAU,gBAAA,EAAkB,IAAA,GAAO,UAAA;AAAA,KAG3B,4BAAA;EATa,4DAWvB,aAAA,GAAgB,aAAA;EAChB,SAAA,GAAY,iBAAA;EACZ,WAAA,GAAc,WAAA;EACd,cAAA;EACA,WAAA,GAAc,WAAA;AAAA,IACZ,IAAA,CAAK,0BAAA"}
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/types.ts"],"mappings":";;;;;;KASY,gBAAA,IAAoB,MAAA,EAAQ,qBAAA;AAAA,KAE5B,iBAAA,GAAoB,MAAA,CAC9B,MAAA,YACE,QAAA,EAAU,gBAAA,EAAkB,IAAA,GAAO,UAAA;AAAA,KAG3B,4BAAA;EACV,SAAA,GAAY,iBAAA;EACZ,WAAA,GAAc,WAAA;EACd,cAAA;EACA,WAAA,GAAc,WAAA;AAAA,IACZ,IAAA,CAAK,0BAAA"}
@@ -4,16 +4,14 @@ import { MXLInstrumentationBaseArgs } from "../../MXLInstrumentationBase/types.j
4
4
  import { Metric, MetricWithAttribution, ReportOpts } from "web-vitals/attribution";
5
5
 
6
6
  //#region src/instrumentations/web-vitals/WebVitalsInstrumentation/types.d.ts
7
- type TrackingLevel = 'core' | 'all';
8
7
  type WebVitalOnReport = (metric: MetricWithAttribution) => void;
9
8
  type WebVitalListeners = Record<Metric['name'], ((onReport: WebVitalOnReport, opts?: ReportOpts) => void) | undefined>;
10
9
  type WebVitalsInstrumentationArgs = {
11
- /** @deprecated All vitals metrics are tracked by default */trackingLevel?: TrackingLevel;
12
10
  listeners?: WebVitalListeners;
13
11
  urlDocument?: URLDocument;
14
12
  urlAttribution?: boolean;
15
13
  pageManager?: PageManager;
16
14
  } & Pick<MXLInstrumentationBaseArgs, 'diag' | 'perf'>;
17
15
  //#endregion
18
- export { TrackingLevel, WebVitalListeners, WebVitalOnReport, WebVitalsInstrumentationArgs };
16
+ export { WebVitalListeners, WebVitalOnReport, WebVitalsInstrumentationArgs };
19
17
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/types.ts"],"mappings":";;;;;;KASY,aAAA;AAAA,KAEA,gBAAA,IAAoB,MAAA,EAAQ,qBAAA;AAAA,KAE5B,iBAAA,GAAoB,MAAA,CAC9B,MAAA,YACE,QAAA,EAAU,gBAAA,EAAkB,IAAA,GAAO,UAAA;AAAA,KAG3B,4BAAA;EATa,4DAWvB,aAAA,GAAgB,aAAA;EAChB,SAAA,GAAY,iBAAA;EACZ,WAAA,GAAc,WAAA;EACd,cAAA;EACA,WAAA,GAAc,WAAA;AAAA,IACZ,IAAA,CAAK,0BAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/instrumentations/web-vitals/WebVitalsInstrumentation/types.ts"],"mappings":";;;;;;KASY,gBAAA,IAAoB,MAAA,EAAQ,qBAAA;AAAA,KAE5B,iBAAA,GAAoB,MAAA,CAC9B,MAAA,YACE,QAAA,EAAU,gBAAA,EAAkB,IAAA,GAAO,UAAA;AAAA,KAG3B,4BAAA;EACV,SAAA,GAAY,iBAAA;EACZ,WAAA,GAAc,WAAA;EACd,cAAA;EACA,WAAA,GAAc,WAAA;AAAA,IACZ,IAAA,CAAK,0BAAA"}
@@ -8,7 +8,6 @@ let _opentelemetry_api = require("@opentelemetry/api");
8
8
  const parseRemoteConfig = (remoteConfig) => {
9
9
  const parsed = { samplingPct: remoteConfig.threshold };
10
10
  if (remoteConfig.network_span_forwarding !== void 0) parsed.networkSpansForwardingThreshold = remoteConfig.network_span_forwarding.pct_enabled;
11
- if (remoteConfig.empty_session_avoidance_enabled_pct !== void 0) parsed.emptySessionAvoidanceEnabledPct = remoteConfig.empty_session_avoidance_enabled_pct;
12
11
  if (remoteConfig.service_name !== void 0 && remoteConfig.service_name !== "") parsed.serviceName = remoteConfig.service_name;
13
12
  return parsed;
14
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.cjs","names":["diag","getConfigURL","DEFAULT_CONFIG","OTEL_DEFAULT_SERVICE_NAME","LOCAL_STORAGE_REMOTE_CONFIG_KEY"],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.network_span_forwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.network_span_forwarding.pct_enabled;\n }\n\n if (remoteConfig.empty_session_avoidance_enabled_pct !== undefined) {\n parsed.emptySessionAvoidanceEnabledPct =\n remoteConfig.empty_session_avoidance_enabled_pct;\n }\n\n if (\n remoteConfig.service_name !== undefined &&\n remoteConfig.service_name !== ''\n ) {\n parsed.serviceName = remoteConfig.service_name;\n }\n\n return parsed;\n};\n\nexport class MXLDynamicConfigManager implements DynamicConfigManager {\n // Set to null if appID is not provided, in that case only rely on local config\n private readonly _remoteConfigURL: string | null = null;\n private readonly _diag: DiagLogger;\n private readonly _storage: Storage;\n /** Defaults + user's `dynamicSDKConfig` / init-time merge; survives remote refresh merges. */\n private readonly _baseConfig: DynamicSDKConfig;\n\n private _sdkConfig: DynamicSDKConfig;\n private _etag: string | null = null;\n /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */\n private _remoteSourceServiceName: string | undefined;\n\n public constructor({\n appID,\n appVersion,\n deviceId,\n diag: diagParam = diag.createComponentLogger({\n namespace: 'mxl-config-manager',\n }),\n storage = window.localStorage,\n defaultConfig = {},\n mxlConfigURL,\n }: MXLDynamicConfigManagerArgs = {}) {\n if (appID && appVersion && deviceId) {\n this._remoteConfigURL = getConfigURL(\n appID,\n {\n appVersion,\n deviceId,\n // TODO: Replace with actual OS version once we start capturing it\n osVersion: '1',\n },\n mxlConfigURL,\n );\n }\n\n this._diag = diagParam;\n this._storage = storage;\n\n const storedRemoteConfig = this._getRemoteConfigFromStorage();\n\n if (storedRemoteConfig) {\n this._etag = storedRemoteConfig.etag;\n this._captureRemoteServiceName(storedRemoteConfig.config);\n }\n\n // Default config merged with any user-provided defaults; user-provided values take precedence.\n // Kept around so refreshRemoteConfig can re-merge against it instead of dropping defaults.\n this._baseConfig = {\n ...DEFAULT_CONFIG,\n ...defaultConfig,\n };\n\n this._sdkConfig = {\n ...this._baseConfig,\n // Stored remote config values will override both defaults and user-provided defaults\n ...(storedRemoteConfig\n ? parseRemoteConfig(storedRemoteConfig.config)\n : {}),\n };\n }\n\n public setConfig(config: Partial<DynamicSDKConfig>): void {\n this._sdkConfig = {\n ...this._sdkConfig,\n ...config,\n };\n }\n\n public getConfig(): DynamicSDKConfig {\n return this._sdkConfig;\n }\n\n /**\n * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,\n * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.\n */\n public resolveApplicationServiceName(initServiceName?: string): string {\n const remote = this._remoteSourceServiceName?.trim();\n if (remote) {\n return remote;\n }\n const fromInit = initServiceName?.trim();\n if (fromInit) {\n return fromInit;\n }\n const fromBootstrap = this._baseConfig.serviceName?.trim();\n if (fromBootstrap) {\n return fromBootstrap;\n }\n return OTEL_DEFAULT_SERVICE_NAME;\n }\n\n private _captureRemoteServiceName(raw: RemoteConfig): void {\n if (raw.service_name === undefined) {\n return;\n }\n const sn = raw.service_name.trim();\n this._remoteSourceServiceName = sn.length > 0 ? sn : undefined;\n }\n\n // No-op if not sending data to mxl\n public async refreshRemoteConfig(): Promise<void> {\n if (!this._remoteConfigURL) {\n return;\n }\n\n try {\n const remoteConfigResponse = await this._fetchRemoteConfig(\n this._remoteConfigURL,\n );\n\n if (!remoteConfigResponse) {\n this._diag.debug('No changes in remote config, skipping update');\n return;\n }\n\n const [remoteConfig, etag] = remoteConfigResponse;\n this._captureRemoteServiceName(remoteConfig);\n this._storage.setItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n JSON.stringify({\n config: remoteConfig,\n etag,\n } as StoredRemoteConfig),\n );\n\n this._sdkConfig = {\n ...this._baseConfig,\n ...parseRemoteConfig(remoteConfig),\n };\n this._etag = etag;\n } catch (error: unknown) {\n this._diag.warn(\n `Failed to refresh remote config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _getRemoteConfigFromStorage(): StoredRemoteConfig | null {\n try {\n const configString = this._storage.getItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n );\n\n if (configString) {\n return JSON.parse(configString) as StoredRemoteConfig;\n }\n\n return null;\n } catch (error) {\n this._diag.warn(\n `Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return null;\n }\n }\n\n private async _fetchRemoteConfig(\n url: string,\n ): Promise<[RemoteConfig, string | null] | null> {\n const response = await fetch(url, {\n headers: this._etag ? { 'If-None-Match': this._etag } : {},\n });\n\n const etag = response.headers.get('etag');\n\n // Nothing changed, return null\n if (response.status === 304) {\n return null;\n }\n\n if (!response.ok) {\n this._diag.warn(\n `Failed to fetch remote config from ${url}: ${response.statusText}`,\n );\n\n return null;\n }\n\n const remoteConfig = (await response.json()) as RemoteConfig;\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.cjs","names":["diag","getConfigURL","DEFAULT_CONFIG","OTEL_DEFAULT_SERVICE_NAME","LOCAL_STORAGE_REMOTE_CONFIG_KEY"],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.network_span_forwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.network_span_forwarding.pct_enabled;\n }\n\n if (\n remoteConfig.service_name !== undefined &&\n remoteConfig.service_name !== ''\n ) {\n parsed.serviceName = remoteConfig.service_name;\n }\n\n return parsed;\n};\n\nexport class MXLDynamicConfigManager implements DynamicConfigManager {\n // Set to null if appID is not provided, in that case only rely on local config\n private readonly _remoteConfigURL: string | null = null;\n private readonly _diag: DiagLogger;\n private readonly _storage: Storage;\n /** Defaults + user's `dynamicSDKConfig` / init-time merge; survives remote refresh merges. */\n private readonly _baseConfig: DynamicSDKConfig;\n\n private _sdkConfig: DynamicSDKConfig;\n private _etag: string | null = null;\n /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */\n private _remoteSourceServiceName: string | undefined;\n\n public constructor({\n appID,\n appVersion,\n deviceId,\n diag: diagParam = diag.createComponentLogger({\n namespace: 'mxl-config-manager',\n }),\n storage = window.localStorage,\n defaultConfig = {},\n mxlConfigURL,\n }: MXLDynamicConfigManagerArgs = {}) {\n if (appID && appVersion && deviceId) {\n this._remoteConfigURL = getConfigURL(\n appID,\n {\n appVersion,\n deviceId,\n // TODO: Replace with actual OS version once we start capturing it\n osVersion: '1',\n },\n mxlConfigURL,\n );\n }\n\n this._diag = diagParam;\n this._storage = storage;\n\n const storedRemoteConfig = this._getRemoteConfigFromStorage();\n\n if (storedRemoteConfig) {\n this._etag = storedRemoteConfig.etag;\n this._captureRemoteServiceName(storedRemoteConfig.config);\n }\n\n // Default config merged with any user-provided defaults; user-provided values take precedence.\n // Kept around so refreshRemoteConfig can re-merge against it instead of dropping defaults.\n this._baseConfig = {\n ...DEFAULT_CONFIG,\n ...defaultConfig,\n };\n\n this._sdkConfig = {\n ...this._baseConfig,\n // Stored remote config values will override both defaults and user-provided defaults\n ...(storedRemoteConfig\n ? parseRemoteConfig(storedRemoteConfig.config)\n : {}),\n };\n }\n\n public setConfig(config: Partial<DynamicSDKConfig>): void {\n this._sdkConfig = {\n ...this._sdkConfig,\n ...config,\n };\n }\n\n public getConfig(): DynamicSDKConfig {\n return this._sdkConfig;\n }\n\n /**\n * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,\n * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.\n */\n public resolveApplicationServiceName(initServiceName?: string): string {\n const remote = this._remoteSourceServiceName?.trim();\n if (remote) {\n return remote;\n }\n const fromInit = initServiceName?.trim();\n if (fromInit) {\n return fromInit;\n }\n const fromBootstrap = this._baseConfig.serviceName?.trim();\n if (fromBootstrap) {\n return fromBootstrap;\n }\n return OTEL_DEFAULT_SERVICE_NAME;\n }\n\n private _captureRemoteServiceName(raw: RemoteConfig): void {\n if (raw.service_name === undefined) {\n return;\n }\n const sn = raw.service_name.trim();\n this._remoteSourceServiceName = sn.length > 0 ? sn : undefined;\n }\n\n // No-op if not sending data to mxl\n public async refreshRemoteConfig(): Promise<void> {\n if (!this._remoteConfigURL) {\n return;\n }\n\n try {\n const remoteConfigResponse = await this._fetchRemoteConfig(\n this._remoteConfigURL,\n );\n\n if (!remoteConfigResponse) {\n this._diag.debug('No changes in remote config, skipping update');\n return;\n }\n\n const [remoteConfig, etag] = remoteConfigResponse;\n this._captureRemoteServiceName(remoteConfig);\n this._storage.setItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n JSON.stringify({\n config: remoteConfig,\n etag,\n } as StoredRemoteConfig),\n );\n\n this._sdkConfig = {\n ...this._baseConfig,\n ...parseRemoteConfig(remoteConfig),\n };\n this._etag = etag;\n } catch (error: unknown) {\n this._diag.warn(\n `Failed to refresh remote config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _getRemoteConfigFromStorage(): StoredRemoteConfig | null {\n try {\n const configString = this._storage.getItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n );\n\n if (configString) {\n return JSON.parse(configString) as StoredRemoteConfig;\n }\n\n return null;\n } catch (error) {\n this._diag.warn(\n `Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return null;\n }\n }\n\n private async _fetchRemoteConfig(\n url: string,\n ): Promise<[RemoteConfig, string | null] | null> {\n const response = await fetch(url, {\n headers: this._etag ? { 'If-None-Match': this._etag } : {},\n });\n\n const etag = response.headers.get('etag');\n\n // Nothing changed, return null\n if (response.status === 304) {\n return null;\n }\n\n if (!response.ok) {\n this._diag.warn(\n `Failed to fetch remote config from ${url}: ${response.statusText}`,\n );\n\n return null;\n }\n\n const remoteConfig = (await response.json()) as RemoteConfig;\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAqCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAJkB;EAAA,iBAMlB,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAON;EAAA,QALM,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EA/CjB;;;;EAuDI,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.d.cts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAgCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAJkB;EAAA,iBAMlB,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAON;EAAA,QALM,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EA/CjB;;;;EAuDI,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAqCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAJkB;EAAA,iBAMlB,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAON;EAAA,QALM,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EA/CjB;;;;EAuDI,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.d.ts","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"mappings":";;;;cAgCa,uBAAA,YAAmC,oBAAA;EAAA,iBAE7B,gBAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAJkB;EAAA,iBAMlB,WAAA;EAAA,QAET,UAAA;EAAA,QACA,KAAA;EAON;EAAA,QALM,wBAAA;;IAGN,KAAA;IACA,UAAA;IACA,QAAA;IACA,IAAA,EAAM,SAAA;IAGN,OAAA;IACA,aAAA;IACA;EAAA,IACC,2BAAA;EAwCI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,gBAAA;EAO1B,SAAA,CAAA,GAAa,gBAAA;EA/CjB;;;;EAuDI,6BAAA,CAA8B,eAAA;EAAA,QAgB7B,yBAAA;EASK,mBAAA,CAAA,GAAuB,OAAA;EAAA,QAqC5B,2BAAA;EAAA,QAoBM,kBAAA;AAAA"}
@@ -6,7 +6,6 @@ import { diag } from "@opentelemetry/api";
6
6
  const parseRemoteConfig = (remoteConfig) => {
7
7
  const parsed = { samplingPct: remoteConfig.threshold };
8
8
  if (remoteConfig.network_span_forwarding !== void 0) parsed.networkSpansForwardingThreshold = remoteConfig.network_span_forwarding.pct_enabled;
9
- if (remoteConfig.empty_session_avoidance_enabled_pct !== void 0) parsed.emptySessionAvoidanceEnabledPct = remoteConfig.empty_session_avoidance_enabled_pct;
10
9
  if (remoteConfig.service_name !== void 0 && remoteConfig.service_name !== "") parsed.serviceName = remoteConfig.service_name;
11
10
  return parsed;
12
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MXLDynamicConfigManager.js","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.network_span_forwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.network_span_forwarding.pct_enabled;\n }\n\n if (remoteConfig.empty_session_avoidance_enabled_pct !== undefined) {\n parsed.emptySessionAvoidanceEnabledPct =\n remoteConfig.empty_session_avoidance_enabled_pct;\n }\n\n if (\n remoteConfig.service_name !== undefined &&\n remoteConfig.service_name !== ''\n ) {\n parsed.serviceName = remoteConfig.service_name;\n }\n\n return parsed;\n};\n\nexport class MXLDynamicConfigManager implements DynamicConfigManager {\n // Set to null if appID is not provided, in that case only rely on local config\n private readonly _remoteConfigURL: string | null = null;\n private readonly _diag: DiagLogger;\n private readonly _storage: Storage;\n /** Defaults + user's `dynamicSDKConfig` / init-time merge; survives remote refresh merges. */\n private readonly _baseConfig: DynamicSDKConfig;\n\n private _sdkConfig: DynamicSDKConfig;\n private _etag: string | null = null;\n /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */\n private _remoteSourceServiceName: string | undefined;\n\n public constructor({\n appID,\n appVersion,\n deviceId,\n diag: diagParam = diag.createComponentLogger({\n namespace: 'mxl-config-manager',\n }),\n storage = window.localStorage,\n defaultConfig = {},\n mxlConfigURL,\n }: MXLDynamicConfigManagerArgs = {}) {\n if (appID && appVersion && deviceId) {\n this._remoteConfigURL = getConfigURL(\n appID,\n {\n appVersion,\n deviceId,\n // TODO: Replace with actual OS version once we start capturing it\n osVersion: '1',\n },\n mxlConfigURL,\n );\n }\n\n this._diag = diagParam;\n this._storage = storage;\n\n const storedRemoteConfig = this._getRemoteConfigFromStorage();\n\n if (storedRemoteConfig) {\n this._etag = storedRemoteConfig.etag;\n this._captureRemoteServiceName(storedRemoteConfig.config);\n }\n\n // Default config merged with any user-provided defaults; user-provided values take precedence.\n // Kept around so refreshRemoteConfig can re-merge against it instead of dropping defaults.\n this._baseConfig = {\n ...DEFAULT_CONFIG,\n ...defaultConfig,\n };\n\n this._sdkConfig = {\n ...this._baseConfig,\n // Stored remote config values will override both defaults and user-provided defaults\n ...(storedRemoteConfig\n ? parseRemoteConfig(storedRemoteConfig.config)\n : {}),\n };\n }\n\n public setConfig(config: Partial<DynamicSDKConfig>): void {\n this._sdkConfig = {\n ...this._sdkConfig,\n ...config,\n };\n }\n\n public getConfig(): DynamicSDKConfig {\n return this._sdkConfig;\n }\n\n /**\n * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,\n * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.\n */\n public resolveApplicationServiceName(initServiceName?: string): string {\n const remote = this._remoteSourceServiceName?.trim();\n if (remote) {\n return remote;\n }\n const fromInit = initServiceName?.trim();\n if (fromInit) {\n return fromInit;\n }\n const fromBootstrap = this._baseConfig.serviceName?.trim();\n if (fromBootstrap) {\n return fromBootstrap;\n }\n return OTEL_DEFAULT_SERVICE_NAME;\n }\n\n private _captureRemoteServiceName(raw: RemoteConfig): void {\n if (raw.service_name === undefined) {\n return;\n }\n const sn = raw.service_name.trim();\n this._remoteSourceServiceName = sn.length > 0 ? sn : undefined;\n }\n\n // No-op if not sending data to mxl\n public async refreshRemoteConfig(): Promise<void> {\n if (!this._remoteConfigURL) {\n return;\n }\n\n try {\n const remoteConfigResponse = await this._fetchRemoteConfig(\n this._remoteConfigURL,\n );\n\n if (!remoteConfigResponse) {\n this._diag.debug('No changes in remote config, skipping update');\n return;\n }\n\n const [remoteConfig, etag] = remoteConfigResponse;\n this._captureRemoteServiceName(remoteConfig);\n this._storage.setItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n JSON.stringify({\n config: remoteConfig,\n etag,\n } as StoredRemoteConfig),\n );\n\n this._sdkConfig = {\n ...this._baseConfig,\n ...parseRemoteConfig(remoteConfig),\n };\n this._etag = etag;\n } catch (error: unknown) {\n this._diag.warn(\n `Failed to refresh remote config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _getRemoteConfigFromStorage(): StoredRemoteConfig | null {\n try {\n const configString = this._storage.getItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n );\n\n if (configString) {\n return JSON.parse(configString) as StoredRemoteConfig;\n }\n\n return null;\n } catch (error) {\n this._diag.warn(\n `Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return null;\n }\n }\n\n private async _fetchRemoteConfig(\n url: string,\n ): Promise<[RemoteConfig, string | null] | null> {\n const response = await fetch(url, {\n headers: this._etag ? { 'If-None-Match': this._etag } : {},\n });\n\n const etag = response.headers.get('etag');\n\n // Nothing changed, return null\n if (response.status === 304) {\n return null;\n }\n\n if (!response.ok) {\n this._diag.warn(\n `Failed to fetch remote config from ${url}: ${response.statusText}`,\n );\n\n return null;\n }\n\n const remoteConfig = (await response.json()) as RemoteConfig;\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MXLDynamicConfigManager.js","names":[],"sources":["../../../src/managers/MXLConfigManager/MXLDynamicConfigManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport { OTEL_DEFAULT_SERVICE_NAME } from '../../resources/webSdkResource';\nimport type { DynamicConfigManager, DynamicSDKConfig } from '../../sdk';\nimport { DEFAULT_CONFIG, LOCAL_STORAGE_REMOTE_CONFIG_KEY } from './constants';\nimport type {\n MXLDynamicConfigManagerArgs,\n RemoteConfig,\n StoredRemoteConfig,\n} from './types';\nimport { getConfigURL } from './utils';\n\nconst parseRemoteConfig = (remoteConfig: RemoteConfig): DynamicSDKConfig => {\n const parsed: DynamicSDKConfig = {\n samplingPct: remoteConfig.threshold,\n };\n\n if (remoteConfig.network_span_forwarding !== undefined) {\n parsed.networkSpansForwardingThreshold =\n remoteConfig.network_span_forwarding.pct_enabled;\n }\n\n if (\n remoteConfig.service_name !== undefined &&\n remoteConfig.service_name !== ''\n ) {\n parsed.serviceName = remoteConfig.service_name;\n }\n\n return parsed;\n};\n\nexport class MXLDynamicConfigManager implements DynamicConfigManager {\n // Set to null if appID is not provided, in that case only rely on local config\n private readonly _remoteConfigURL: string | null = null;\n private readonly _diag: DiagLogger;\n private readonly _storage: Storage;\n /** Defaults + user's `dynamicSDKConfig` / init-time merge; survives remote refresh merges. */\n private readonly _baseConfig: DynamicSDKConfig;\n\n private _sdkConfig: DynamicSDKConfig;\n private _etag: string | null = null;\n /** Non-empty `service_name` from the last persisted or fetched remote payload (if any). */\n private _remoteSourceServiceName: string | undefined;\n\n public constructor({\n appID,\n appVersion,\n deviceId,\n diag: diagParam = diag.createComponentLogger({\n namespace: 'mxl-config-manager',\n }),\n storage = window.localStorage,\n defaultConfig = {},\n mxlConfigURL,\n }: MXLDynamicConfigManagerArgs = {}) {\n if (appID && appVersion && deviceId) {\n this._remoteConfigURL = getConfigURL(\n appID,\n {\n appVersion,\n deviceId,\n // TODO: Replace with actual OS version once we start capturing it\n osVersion: '1',\n },\n mxlConfigURL,\n );\n }\n\n this._diag = diagParam;\n this._storage = storage;\n\n const storedRemoteConfig = this._getRemoteConfigFromStorage();\n\n if (storedRemoteConfig) {\n this._etag = storedRemoteConfig.etag;\n this._captureRemoteServiceName(storedRemoteConfig.config);\n }\n\n // Default config merged with any user-provided defaults; user-provided values take precedence.\n // Kept around so refreshRemoteConfig can re-merge against it instead of dropping defaults.\n this._baseConfig = {\n ...DEFAULT_CONFIG,\n ...defaultConfig,\n };\n\n this._sdkConfig = {\n ...this._baseConfig,\n // Stored remote config values will override both defaults and user-provided defaults\n ...(storedRemoteConfig\n ? parseRemoteConfig(storedRemoteConfig.config)\n : {}),\n };\n }\n\n public setConfig(config: Partial<DynamicSDKConfig>): void {\n this._sdkConfig = {\n ...this._sdkConfig,\n ...config,\n };\n }\n\n public getConfig(): DynamicSDKConfig {\n return this._sdkConfig;\n }\n\n /**\n * OpenTelemetry `service.name`: remote `service_name` wins, then explicit init `serviceName`,\n * then bootstrap {@link DynamicSDKConfig.serviceName}, then `unknown_service`.\n */\n public resolveApplicationServiceName(initServiceName?: string): string {\n const remote = this._remoteSourceServiceName?.trim();\n if (remote) {\n return remote;\n }\n const fromInit = initServiceName?.trim();\n if (fromInit) {\n return fromInit;\n }\n const fromBootstrap = this._baseConfig.serviceName?.trim();\n if (fromBootstrap) {\n return fromBootstrap;\n }\n return OTEL_DEFAULT_SERVICE_NAME;\n }\n\n private _captureRemoteServiceName(raw: RemoteConfig): void {\n if (raw.service_name === undefined) {\n return;\n }\n const sn = raw.service_name.trim();\n this._remoteSourceServiceName = sn.length > 0 ? sn : undefined;\n }\n\n // No-op if not sending data to mxl\n public async refreshRemoteConfig(): Promise<void> {\n if (!this._remoteConfigURL) {\n return;\n }\n\n try {\n const remoteConfigResponse = await this._fetchRemoteConfig(\n this._remoteConfigURL,\n );\n\n if (!remoteConfigResponse) {\n this._diag.debug('No changes in remote config, skipping update');\n return;\n }\n\n const [remoteConfig, etag] = remoteConfigResponse;\n this._captureRemoteServiceName(remoteConfig);\n this._storage.setItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n JSON.stringify({\n config: remoteConfig,\n etag,\n } as StoredRemoteConfig),\n );\n\n this._sdkConfig = {\n ...this._baseConfig,\n ...parseRemoteConfig(remoteConfig),\n };\n this._etag = etag;\n } catch (error: unknown) {\n this._diag.warn(\n `Failed to refresh remote config: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _getRemoteConfigFromStorage(): StoredRemoteConfig | null {\n try {\n const configString = this._storage.getItem(\n LOCAL_STORAGE_REMOTE_CONFIG_KEY,\n );\n\n if (configString) {\n return JSON.parse(configString) as StoredRemoteConfig;\n }\n\n return null;\n } catch (error) {\n this._diag.warn(\n `Failed to parse remote config from storage: ${error instanceof Error ? error.message : String(error)}`,\n );\n\n return null;\n }\n }\n\n private async _fetchRemoteConfig(\n url: string,\n ): Promise<[RemoteConfig, string | null] | null> {\n const response = await fetch(url, {\n headers: this._etag ? { 'If-None-Match': this._etag } : {},\n });\n\n const etag = response.headers.get('etag');\n\n // Nothing changed, return null\n if (response.status === 304) {\n return null;\n }\n\n if (!response.ok) {\n this._diag.warn(\n `Failed to fetch remote config from ${url}: ${response.statusText}`,\n );\n\n return null;\n }\n\n const remoteConfig = (await response.json()) as RemoteConfig;\n\n return [remoteConfig, etag];\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  //#region src/managers/MXLConfigManager/constants.ts
3
3
  const DEFAULT_CONFIG = {
4
- samplingPct: 100,
5
- networkSpansForwardingThreshold: 0
4
+ networkSpansForwardingThreshold: 0,
5
+ samplingPct: 100
6
6
  };
7
7
  const LOCAL_STORAGE_REMOTE_CONFIG_KEY = "mxl_remote_config";
8
8
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/managers/MXLConfigManager/constants.ts"],"sourcesContent":["import type { DynamicSDKConfig } from '../../sdk';\n\nexport const DEFAULT_CONFIG: DynamicSDKConfig = {\n samplingPct: 100,\n networkSpansForwardingThreshold: 0,\n};\n\nexport const LOCAL_STORAGE_REMOTE_CONFIG_KEY = 'mxl_remote_config';\n"],"mappings":";;AAEA,MAAa,iBAAmC;CAC9C,aAAa;CACb,iCAAiC;CAClC;AAED,MAAa,kCAAkC"}
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/managers/MXLConfigManager/constants.ts"],"sourcesContent":["import type { DynamicSDKConfig } from '../../sdk';\n\nexport const DEFAULT_CONFIG: DynamicSDKConfig = {\n networkSpansForwardingThreshold: 0,\n samplingPct: 100,\n};\n\nexport const LOCAL_STORAGE_REMOTE_CONFIG_KEY = 'mxl_remote_config';\n"],"mappings":";;AAEA,MAAa,iBAAmC;CAC9C,iCAAiC;CACjC,aAAa;CACd;AAED,MAAa,kCAAkC"}
@@ -1,7 +1,7 @@
1
1
  //#region src/managers/MXLConfigManager/constants.ts
2
2
  const DEFAULT_CONFIG = {
3
- samplingPct: 100,
4
- networkSpansForwardingThreshold: 0
3
+ networkSpansForwardingThreshold: 0,
4
+ samplingPct: 100
5
5
  };
6
6
  const LOCAL_STORAGE_REMOTE_CONFIG_KEY = "mxl_remote_config";
7
7
  //#endregion