@safaricom-mxl/web-sdk 0.0.21 → 0.0.23

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 (498) hide show
  1. package/README.md +48 -1
  2. package/dist/api-analytics/analyticsAPI.cjs +7 -0
  3. package/dist/api-analytics/analyticsAPI.cjs.map +1 -0
  4. package/dist/api-analytics/analyticsAPI.d.cts +7 -0
  5. package/dist/api-analytics/analyticsAPI.d.cts.map +1 -0
  6. package/dist/api-analytics/analyticsAPI.d.ts +7 -0
  7. package/dist/api-analytics/analyticsAPI.d.ts.map +1 -0
  8. package/dist/api-analytics/analyticsAPI.js +7 -0
  9. package/dist/api-analytics/analyticsAPI.js.map +1 -0
  10. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.cjs +34 -0
  11. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.cjs.map +1 -0
  12. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.d.cts +17 -0
  13. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.d.cts.map +1 -0
  14. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.d.ts +17 -0
  15. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.d.ts.map +1 -0
  16. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.js +32 -0
  17. package/dist/api-analytics/api/AnalyticsAPI/AnalyticsAPI.js.map +1 -0
  18. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.cjs +14 -0
  19. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.cjs.map +1 -0
  20. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.d.cts +14 -0
  21. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.d.cts.map +1 -0
  22. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.d.ts +14 -0
  23. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.d.ts.map +1 -0
  24. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.js +13 -0
  25. package/dist/api-analytics/manager/NoOpAnalyticsManager/NoOpAnalyticsManager.js.map +1 -0
  26. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.cjs +34 -0
  27. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.cjs.map +1 -0
  28. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.d.cts +17 -0
  29. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.d.cts.map +1 -0
  30. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.d.ts +17 -0
  31. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.d.ts.map +1 -0
  32. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.js +34 -0
  33. package/dist/api-analytics/manager/ProxyAnalyticsManager/ProxyAnalyticsManager.js.map +1 -0
  34. package/dist/api-analytics/manager/types.cjs +0 -0
  35. package/dist/api-analytics/manager/types.d.cts +37 -0
  36. package/dist/api-analytics/manager/types.d.cts.map +1 -0
  37. package/dist/api-analytics/manager/types.d.ts +37 -0
  38. package/dist/api-analytics/manager/types.d.ts.map +1 -0
  39. package/dist/api-analytics/manager/types.js +0 -0
  40. package/dist/constants/attributes.cjs +62 -0
  41. package/dist/constants/attributes.cjs.map +1 -1
  42. package/dist/constants/attributes.d.cts +35 -1
  43. package/dist/constants/attributes.d.cts.map +1 -1
  44. package/dist/constants/attributes.d.ts +35 -1
  45. package/dist/constants/attributes.d.ts.map +1 -1
  46. package/dist/constants/attributes.js +36 -1
  47. package/dist/constants/attributes.js.map +1 -1
  48. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.cjs +1 -1
  49. package/dist/exporters/MXLLogExporter/OTLPFetchLogExporter.js +1 -1
  50. package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.cjs +1 -1
  51. package/dist/exporters/MXLTraceExporter/OTLPFetchTraceExporter.js +1 -1
  52. package/dist/exporters/otlpBrowserFetchExportDelegate.d.cts +1 -1
  53. package/dist/exporters/otlpBrowserFetchExportDelegate.d.ts +1 -1
  54. package/dist/index.cjs +2 -0
  55. package/dist/index.d.cts +2 -1
  56. package/dist/index.d.ts +2 -1
  57. package/dist/index.js +2 -1
  58. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.d.ts +2 -2
  59. package/dist/instrumentations/InstrumentationAbstract/InstrumentationAbstract.d.ts.map +1 -1
  60. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.cjs +2 -0
  61. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.cjs.map +1 -1
  62. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.d.cts.map +1 -1
  63. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.d.ts.map +1 -1
  64. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.js +2 -0
  65. package/dist/instrumentations/navigation/NavigationInstrumentation/NavigationInstrumentation.js.map +1 -1
  66. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/types.d.cts +3 -0
  67. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/types.d.cts.map +1 -1
  68. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/types.d.ts +3 -0
  69. package/dist/instrumentations/navigation/NavigationInstrumentation/react/reactRouterV5/types.d.ts.map +1 -1
  70. package/dist/instrumentations/replay/session-recording/SessionRecording.cjs +1 -1
  71. package/dist/instrumentations/replay/session-recording/SessionRecording.cjs.map +1 -1
  72. package/dist/instrumentations/replay/session-recording/SessionRecording.js +1 -1
  73. package/dist/instrumentations/replay/session-recording/SessionRecording.js.map +1 -1
  74. package/dist/instrumentations/replay/session-recording/lifecycle.cjs +4 -4
  75. package/dist/instrumentations/replay/session-recording/lifecycle.cjs.map +1 -1
  76. package/dist/instrumentations/replay/session-recording/lifecycle.js +4 -4
  77. package/dist/instrumentations/replay/session-recording/lifecycle.js.map +1 -1
  78. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.cjs +193 -0
  79. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.cjs.map +1 -0
  80. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.d.cts +49 -0
  81. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.d.cts.map +1 -0
  82. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.d.ts +49 -0
  83. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.d.ts.map +1 -0
  84. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.js +191 -0
  85. package/dist/managers/MXLAnalyticsManager/MXLAnalyticsManager.js.map +1 -0
  86. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.cjs +159 -0
  87. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.cjs.map +1 -0
  88. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.d.cts +50 -0
  89. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.d.cts.map +1 -0
  90. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.d.ts +50 -0
  91. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.d.ts.map +1 -0
  92. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.js +154 -0
  93. package/dist/managers/MXLAnalyticsManager/sessionAnalyticsState.js.map +1 -0
  94. package/dist/managers/MXLAnalyticsManager/types.cjs +0 -0
  95. package/dist/managers/MXLAnalyticsManager/types.d.cts +19 -0
  96. package/dist/managers/MXLAnalyticsManager/types.d.cts.map +1 -0
  97. package/dist/managers/MXLAnalyticsManager/types.d.ts +19 -0
  98. package/dist/managers/MXLAnalyticsManager/types.d.ts.map +1 -0
  99. package/dist/managers/MXLAnalyticsManager/types.js +0 -0
  100. package/dist/managers/MXLConfigManager/utils.cjs +3 -3
  101. package/dist/managers/MXLConfigManager/utils.cjs.map +1 -1
  102. package/dist/managers/MXLConfigManager/utils.js +3 -3
  103. package/dist/managers/MXLConfigManager/utils.js.map +1 -1
  104. package/dist/managers/MXLUserManager/MXLUserManager.cjs +1 -1
  105. package/dist/managers/MXLUserManager/MXLUserManager.js +1 -1
  106. package/dist/managers/MXLUserManager/constants.cjs +4 -0
  107. package/dist/managers/MXLUserManager/constants.cjs.map +1 -1
  108. package/dist/managers/MXLUserManager/constants.d.cts +3 -1
  109. package/dist/managers/MXLUserManager/constants.d.cts.map +1 -1
  110. package/dist/managers/MXLUserManager/constants.d.ts +3 -1
  111. package/dist/managers/MXLUserManager/constants.d.ts.map +1 -1
  112. package/dist/managers/MXLUserManager/constants.js +3 -1
  113. package/dist/managers/MXLUserManager/constants.js.map +1 -1
  114. package/dist/managers/MXLUserManager/profileSnapshot.cjs +64 -0
  115. package/dist/managers/MXLUserManager/profileSnapshot.cjs.map +1 -0
  116. package/dist/managers/MXLUserManager/profileSnapshot.d.cts +19 -0
  117. package/dist/managers/MXLUserManager/profileSnapshot.d.cts.map +1 -0
  118. package/dist/managers/MXLUserManager/profileSnapshot.d.ts +19 -0
  119. package/dist/managers/MXLUserManager/profileSnapshot.d.ts.map +1 -0
  120. package/dist/managers/MXLUserManager/profileSnapshot.js +59 -0
  121. package/dist/managers/MXLUserManager/profileSnapshot.js.map +1 -0
  122. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.cjs +9 -0
  123. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.cjs.map +1 -1
  124. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.cts +3 -0
  125. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.cts.map +1 -1
  126. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.ts +3 -0
  127. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.d.ts.map +1 -1
  128. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.js +9 -0
  129. package/dist/managers/MXLUserSessionManager/MXLUserSessionManager.js.map +1 -1
  130. package/dist/managers/MXLUserSessionManager/types.d.cts +2 -0
  131. package/dist/managers/MXLUserSessionManager/types.d.cts.map +1 -1
  132. package/dist/managers/MXLUserSessionManager/types.d.ts +2 -0
  133. package/dist/managers/MXLUserSessionManager/types.d.ts.map +1 -1
  134. package/dist/mxl-web-sdk.js +2 -2
  135. package/dist/mxl-web-sdk.js.map +1 -1
  136. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js +9 -4
  137. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js.map +1 -0
  138. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js +1 -1
  139. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/common/utils.js.map +1 -1
  140. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/logs/internal.js +7 -11
  141. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/esm/logs/internal.js.map +1 -0
  142. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/logs/json/logs.js +1 -1
  143. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/logs/json/logs.js.map +1 -1
  144. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js +2 -2
  145. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/internal.js.map +1 -1
  146. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js +1 -1
  147. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/esm/trace/json/trace.js.map +1 -1
  148. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/hex-to-binary.cjs +1 -1
  149. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/hex-to-binary.cjs.map +1 -1
  150. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/internal.cjs +8 -3
  151. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/common/internal.cjs.map +1 -0
  152. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/common-serializer.cjs +6 -1
  153. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/common-serializer.cjs.map +1 -1
  154. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-reader.cjs +6 -10
  155. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-reader.cjs.map +1 -0
  156. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-size-estimator.cjs +1 -1
  157. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-size-estimator.cjs.map +1 -1
  158. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-writer.cjs +1 -1
  159. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-writer.cjs.map +1 -1
  160. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/utils.cjs +1 -1
  161. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/utils.cjs.map +1 -1
  162. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/utils.cjs +1 -1
  163. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/common/utils.cjs.map +1 -1
  164. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/i-serializer.d.cts +1 -1
  165. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/i-serializer.d.cts.map +1 -1
  166. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/i-serializer.d.ts +1 -1
  167. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/i-serializer.d.ts.map +1 -1
  168. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/index.cjs +1 -1
  169. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/index.cjs.map +1 -1
  170. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/internal.cjs +7 -12
  171. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/logs/internal.cjs.map +1 -0
  172. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.cjs +1 -1
  173. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.cjs.map +1 -1
  174. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.cjs +1 -1
  175. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.cjs.map +1 -1
  176. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.cjs +1 -1
  177. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.cjs.map +1 -1
  178. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs-serializer.cjs +1 -1
  179. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs-serializer.cjs.map +1 -1
  180. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.cjs +1 -1
  181. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.cjs.map +1 -1
  182. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/response-deserializer.cjs +1 -1
  183. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/response-deserializer.cjs.map +1 -1
  184. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal-types.cjs +1 -1
  185. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal-types.cjs.map +1 -1
  186. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal.cjs +3 -3
  187. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal.cjs.map +1 -0
  188. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.cjs +1 -1
  189. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.cjs.map +1 -1
  190. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.cjs +1 -1
  191. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.cjs.map +1 -1
  192. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.cjs +1 -1
  193. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.cjs.map +1 -1
  194. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics-serializer.cjs +2 -2
  195. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics-serializer.cjs.map +1 -1
  196. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.cjs +1 -1
  197. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.cjs.map +1 -1
  198. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/response-deserializer.cjs +1 -1
  199. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/response-deserializer.cjs.map +1 -1
  200. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/internal.cjs +2 -2
  201. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/internal.cjs.map +1 -1
  202. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.cjs +1 -1
  203. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.cjs.map +1 -1
  204. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.cjs +1 -1
  205. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.cjs.map +1 -1
  206. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.cjs +1 -1
  207. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.cjs.map +1 -1
  208. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/response-deserializer.cjs +1 -1
  209. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/response-deserializer.cjs.map +1 -1
  210. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace-serializer.cjs +1 -1
  211. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace-serializer.cjs.map +1 -1
  212. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.cjs +1 -1
  213. package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.cjs.map +1 -1
  214. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.cjs +1 -1
  215. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.cjs.map +1 -1
  216. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/Instruments.cjs +3 -4
  217. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/Instruments.cjs.map +1 -0
  218. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/Meter.cjs +1 -1
  219. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/Meter.cjs.map +1 -1
  220. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.cjs +4 -1
  221. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.cjs.map +1 -0
  222. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/ObservableResult.cjs +1 -1
  223. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/ObservableResult.cjs.map +1 -1
  224. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.cjs +1 -1
  225. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.cjs.map +1 -1
  226. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.cjs +1 -1
  227. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.cjs.map +1 -1
  228. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.cjs +1 -1
  229. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.cjs.map +1 -1
  230. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.cjs +1 -1
  231. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.cjs.map +1 -1
  232. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.cjs +1 -1
  233. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.cjs.map +1 -1
  234. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.cjs +1 -1
  235. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/Buckets.cjs.map +1 -1
  236. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ExponentMapping.cjs +1 -1
  237. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ExponentMapping.cjs.map +1 -1
  238. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/LogarithmMapping.cjs +1 -1
  239. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/LogarithmMapping.cjs.map +1 -1
  240. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/getMapping.cjs +1 -1
  241. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/getMapping.cjs.map +1 -1
  242. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ieee754.cjs +1 -1
  243. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/ieee754.cjs.map +1 -1
  244. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.cjs +1 -1
  245. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/mapping/types.cjs.map +1 -1
  246. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/util.cjs +1 -1
  247. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/exponential-histogram/util.cjs.map +1 -1
  248. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.cjs +1 -1
  249. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.cjs.map +1 -1
  250. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.cjs +1 -1
  251. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.cjs.map +1 -1
  252. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.cjs +1 -1
  253. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.cjs.map +1 -1
  254. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.cjs +1 -1
  255. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationTemporality.cjs.map +1 -1
  256. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.cjs +1 -1
  257. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.cjs.map +1 -1
  258. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.cjs +1 -1
  259. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.cjs.map +1 -1
  260. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.cjs +1 -1
  261. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.cjs.map +1 -1
  262. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricDataSplitter.cjs +81 -0
  263. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricDataSplitter.cjs.map +1 -0
  264. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.cjs +18 -1
  265. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.cjs.map +1 -0
  266. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReaderMetrics.cjs +48 -0
  267. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReaderMetrics.cjs.map +1 -0
  268. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.cjs +62 -18
  269. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.cjs.map +1 -0
  270. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/index.cjs +1 -1
  271. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/index.cjs.map +1 -1
  272. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/semconv.cjs +96 -0
  273. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/semconv.cjs.map +1 -0
  274. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/AsyncMetricStorage.cjs +5 -1
  275. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/AsyncMetricStorage.cjs.map +1 -0
  276. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/DeltaMetricProcessor.cjs +6 -4
  277. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/DeltaMetricProcessor.cjs.map +1 -0
  278. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/HashMap.cjs +1 -1
  279. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/HashMap.cjs.map +1 -1
  280. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterProviderSharedState.cjs +1 -1
  281. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterProviderSharedState.cjs.map +1 -1
  282. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterSharedState.cjs +2 -4
  283. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterSharedState.cjs.map +1 -0
  284. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricCollector.cjs +1 -1
  285. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricCollector.cjs.map +1 -1
  286. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorage.cjs +1 -1
  287. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorage.cjs.map +1 -1
  288. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorageRegistry.cjs +1 -1
  289. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MetricStorageRegistry.cjs.map +1 -1
  290. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/MultiWritableMetricStorage.cjs +5 -1
  291. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/MultiWritableMetricStorage.cjs.map +1 -0
  292. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/ObservableRegistry.cjs +1 -1
  293. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/ObservableRegistry.cjs.map +1 -1
  294. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/SyncMetricStorage.cjs +6 -3
  295. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/SyncMetricStorage.cjs.map +1 -0
  296. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/state/TemporalMetricProcessor.cjs +1 -1
  297. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/TemporalMetricProcessor.cjs.map +1 -0
  298. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/utils.cjs +1 -1
  299. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/utils.cjs.map +1 -1
  300. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/version.cjs +16 -0
  301. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/version.cjs.map +1 -0
  302. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.cjs +1 -1
  303. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.cjs.map +1 -1
  304. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.cjs +1 -1
  305. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.cjs.map +1 -1
  306. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.cjs +1 -1
  307. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.cjs.map +1 -1
  308. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.cjs +1 -1
  309. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.cjs.map +1 -1
  310. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.cjs +1 -1
  311. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/MeterSelector.cjs.map +1 -1
  312. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.cjs +1 -1
  313. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Predicate.cjs.map +1 -1
  314. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/RegistrationConflicts.cjs +1 -1
  315. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/RegistrationConflicts.cjs.map +1 -1
  316. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.cjs +2 -2
  317. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.cjs.map +1 -1
  318. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/ViewRegistry.cjs +1 -1
  319. package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/ViewRegistry.cjs.map +1 -1
  320. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/inspect.d.cts +2 -0
  321. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/inspect.d.ts +2 -0
  322. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/sampler/TraceIdRatioBasedSampler.d.cts +1 -0
  323. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/sampler/TraceIdRatioBasedSampler.d.ts +1 -0
  324. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/types.d.cts +2 -0
  325. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/types.d.ts +2 -0
  326. package/dist/resources/sdkConstants.cjs +1 -1
  327. package/dist/resources/sdkConstants.cjs.map +1 -1
  328. package/dist/resources/sdkConstants.d.cts +1 -1
  329. package/dist/resources/sdkConstants.d.ts +1 -1
  330. package/dist/resources/sdkConstants.js +1 -1
  331. package/dist/resources/sdkConstants.js.map +1 -1
  332. package/dist/resources/types.d.cts +2 -0
  333. package/dist/resources/types.d.cts.map +1 -1
  334. package/dist/resources/types.d.ts +2 -0
  335. package/dist/resources/types.d.ts.map +1 -1
  336. package/dist/resources/webSdkResource.cjs +5 -2
  337. package/dist/resources/webSdkResource.cjs.map +1 -1
  338. package/dist/resources/webSdkResource.d.cts +3 -1
  339. package/dist/resources/webSdkResource.d.cts.map +1 -1
  340. package/dist/resources/webSdkResource.d.ts +3 -1
  341. package/dist/resources/webSdkResource.d.ts.map +1 -1
  342. package/dist/resources/webSdkResource.js +6 -3
  343. package/dist/resources/webSdkResource.js.map +1 -1
  344. package/dist/sdk/initSDK.cjs +21 -4
  345. package/dist/sdk/initSDK.cjs.map +1 -1
  346. package/dist/sdk/initSDK.d.cts +1 -0
  347. package/dist/sdk/initSDK.d.cts.map +1 -1
  348. package/dist/sdk/initSDK.d.ts +1 -0
  349. package/dist/sdk/initSDK.d.ts.map +1 -1
  350. package/dist/sdk/initSDK.js +24 -7
  351. package/dist/sdk/initSDK.js.map +1 -1
  352. package/dist/sdk/types.d.cts +7 -0
  353. package/dist/sdk/types.d.cts.map +1 -1
  354. package/dist/sdk/types.d.ts +7 -0
  355. package/dist/sdk/types.d.ts.map +1 -1
  356. package/dist/sdk/utils.cjs +10 -0
  357. package/dist/sdk/utils.cjs.map +1 -1
  358. package/dist/sdk/utils.d.cts +2 -1
  359. package/dist/sdk/utils.d.cts.map +1 -1
  360. package/dist/sdk/utils.d.ts +2 -1
  361. package/dist/sdk/utils.d.ts.map +1 -1
  362. package/dist/sdk/utils.js +10 -1
  363. package/dist/sdk/utils.js.map +1 -1
  364. package/package.json +21 -14
  365. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/esm/common/internal.js.map +0 -1
  366. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/esm/logs/internal.js.map +0 -1
  367. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/common/internal.cjs.map +0 -1
  368. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/common/protobuf/protobuf-reader.cjs.map +0 -1
  369. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/logs/internal.cjs.map +0 -1
  370. package/dist/node_modules/.pnpm/@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/internal.cjs.map +0 -1
  371. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/Instruments.cjs.map +0 -1
  372. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.cjs.map +0 -1
  373. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.cjs.map +0 -1
  374. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.cjs.map +0 -1
  375. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/AsyncMetricStorage.cjs.map +0 -1
  376. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/DeltaMetricProcessor.cjs.map +0 -1
  377. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/MeterSharedState.cjs.map +0 -1
  378. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/MultiWritableMetricStorage.cjs.map +0 -1
  379. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/SyncMetricStorage.cjs.map +0 -1
  380. package/dist/node_modules/.pnpm/@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-metrics/build/src/state/TemporalMetricProcessor.cjs.map +0 -1
  381. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/types.d.cts +0 -2
  382. package/dist/node_modules/.pnpm/@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/types.d.ts +0 -2
  383. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/index.d.cts +0 -0
  384. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/index.d.ts +0 -0
  385. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.d.cts +0 -0
  386. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/index.d.ts +0 -0
  387. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.d.cts +0 -0
  388. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/json/logs.d.ts +0 -0
  389. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.d.cts +0 -0
  390. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/index.d.ts +0 -0
  391. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.d.cts +0 -0
  392. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/logs/protobuf/logs.d.ts +0 -0
  393. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.d.cts +0 -0
  394. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/index.d.ts +0 -0
  395. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.d.cts +0 -0
  396. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/json/metrics.d.ts +0 -0
  397. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.d.cts +0 -0
  398. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/index.d.ts +0 -0
  399. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.d.cts +0 -0
  400. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/metrics/protobuf/metrics.d.ts +0 -0
  401. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.d.cts +0 -0
  402. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/index.d.ts +0 -0
  403. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.d.cts +0 -0
  404. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/json/trace.d.ts +0 -0
  405. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.d.cts +0 -0
  406. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/index.d.ts +0 -0
  407. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.d.cts +0 -0
  408. /package/dist/node_modules/.pnpm/{@opentelemetry_otlp-transformer@0.218.0_@opentelemetry_api@1.9.1 → @opentelemetry_otlp-transformer@0.220.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/otlp-transformer/build/src/trace/protobuf/trace.d.ts +0 -0
  409. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.d.cts +0 -0
  410. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/InstrumentDescriptor.d.ts +0 -0
  411. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.d.cts +0 -0
  412. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/MeterProvider.d.ts +0 -0
  413. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.d.cts +0 -0
  414. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Drop.d.ts +0 -0
  415. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.d.cts +0 -0
  416. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/ExponentialHistogram.d.ts +0 -0
  417. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.d.cts +0 -0
  418. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Histogram.d.ts +0 -0
  419. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.d.cts +0 -0
  420. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/LastValue.d.ts +0 -0
  421. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.d.cts +0 -0
  422. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/Sum.d.ts +0 -0
  423. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.d.cts +0 -0
  424. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/index.d.ts +0 -0
  425. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.d.cts +0 -0
  426. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/aggregator/types.d.ts +0 -0
  427. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.d.cts +0 -0
  428. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/AggregationSelector.d.ts +0 -0
  429. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/CardinalitySelector.d.cts +0 -0
  430. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/CardinalitySelector.d.ts +0 -0
  431. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.d.cts +0 -0
  432. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/ConsoleMetricExporter.d.ts +0 -0
  433. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.d.cts +0 -0
  434. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/InMemoryMetricExporter.d.ts +0 -0
  435. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.d.cts +0 -0
  436. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricData.d.ts +0 -0
  437. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricExporter.d.cts +0 -0
  438. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricExporter.d.ts +0 -0
  439. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricProducer.d.cts +0 -0
  440. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricProducer.d.ts +0 -0
  441. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.d.cts +0 -0
  442. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/MetricReader.d.ts +0 -0
  443. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.d.cts +0 -0
  444. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/export/PeriodicExportingMetricReader.d.ts +0 -0
  445. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/index.d.cts +0 -0
  446. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/index.d.ts +0 -0
  447. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/utils.d.cts +0 -0
  448. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/utils.d.ts +0 -0
  449. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.d.cts +0 -0
  450. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/Aggregation.d.ts +0 -0
  451. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.d.cts +0 -0
  452. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AggregationOption.d.ts +0 -0
  453. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.d.cts +0 -0
  454. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/AttributesProcessor.d.ts +0 -0
  455. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.d.cts +0 -0
  456. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/InstrumentSelector.d.ts +0 -0
  457. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.d.cts +0 -0
  458. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-metrics@2.7.1_@opentelemetry_api@1.9.1 → @opentelemetry_sdk-metrics@2.9.0_@opentelemetry_api@1.9.1}/node_modules/@opentelemetry/sdk-metrics/build/src/view/View.d.ts +0 -0
  459. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/Sampler.d.cts +0 -0
  460. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/Sampler.d.ts +0 -0
  461. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/Span.d.cts +0 -0
  462. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/Span.d.ts +0 -0
  463. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/SpanProcessor.d.cts +0 -0
  464. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/SpanProcessor.d.ts +0 -0
  465. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/TimedEvent.d.cts +0 -0
  466. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/TimedEvent.d.ts +0 -0
  467. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.d.cts → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/TracerProvider.d.cts} +0 -0
  468. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.d.ts → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/TracerProvider.d.ts} +0 -0
  469. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/BatchSpanProcessorBase.d.cts +0 -0
  470. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/BatchSpanProcessorBase.d.ts +0 -0
  471. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/ConsoleSpanExporter.d.cts +0 -0
  472. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/ConsoleSpanExporter.d.ts +0 -0
  473. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/InMemorySpanExporter.d.cts +0 -0
  474. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/InMemorySpanExporter.d.ts +0 -0
  475. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/NoopSpanProcessor.d.cts +0 -0
  476. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/NoopSpanProcessor.d.ts +0 -0
  477. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/ReadableSpan.d.cts +0 -0
  478. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/ReadableSpan.d.ts +0 -0
  479. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/SimpleSpanProcessor.d.cts +0 -0
  480. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/SimpleSpanProcessor.d.ts +0 -0
  481. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/SpanExporter.d.cts +0 -0
  482. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/export/SpanExporter.d.ts +0 -0
  483. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/index.d.cts +0 -0
  484. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/index.d.ts +0 -0
  485. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/index.d.cts +0 -0
  486. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/index.d.ts +0 -0
  487. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/node/export/BatchSpanProcessor.d.cts +0 -0
  488. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/node/export/BatchSpanProcessor.d.ts +0 -0
  489. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/node/index.d.cts +0 -0
  490. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/platform/node/index.d.ts +0 -0
  491. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/AlwaysOffSampler.d.cts +0 -0
  492. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/AlwaysOffSampler.d.ts +0 -0
  493. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/AlwaysOnSampler.d.cts +0 -0
  494. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/AlwaysOnSampler.d.ts +0 -0
  495. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.d.cts → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/sampler/AlwaysRecordSampler.d.cts} +0 -0
  496. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base/build/src/sampler/TraceIdRatioBasedSampler.d.ts → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace/build/src/sampler/AlwaysRecordSampler.d.ts} +0 -0
  497. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/ParentBasedSampler.d.cts +0 -0
  498. /package/dist/node_modules/.pnpm/{@opentelemetry_sdk-trace-base@2.7.1_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace-base → @opentelemetry_sdk-trace@2.9.0_@opentelemetry_api@1.9.1/node_modules/@opentelemetry/sdk-trace}/build/src/sampler/ParentBasedSampler.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileSnapshot.js","names":[],"sources":["../../../src/managers/MXLUserManager/profileSnapshot.ts"],"sourcesContent":["import { MXL_PROFILE_SNAPSHOT_STORAGE_KEY } from './constants';\n\nexport interface ProfileSnapshot {\n profileId: string;\n firstName: string;\n lastName: string;\n email: string;\n avatar: string;\n properties: Record<string, string>;\n}\n\nconst EMPTY_SNAPSHOT = (): ProfileSnapshot => ({\n avatar: '',\n email: '',\n firstName: '',\n lastName: '',\n profileId: '',\n properties: {},\n});\n\nexport function loadProfileSnapshot(storage: Storage): ProfileSnapshot | null {\n try {\n const raw = storage.getItem(MXL_PROFILE_SNAPSHOT_STORAGE_KEY);\n if (!raw) {\n return null;\n }\n const parsed: unknown = JSON.parse(raw);\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n typeof (parsed as ProfileSnapshot).profileId === 'string'\n ) {\n return parsed as ProfileSnapshot;\n }\n } catch {\n // ignore corrupt snapshot\n }\n return null;\n}\n\nexport function saveProfileSnapshot(\n storage: Storage,\n snapshot: ProfileSnapshot,\n): boolean {\n try {\n storage.setItem(MXL_PROFILE_SNAPSHOT_STORAGE_KEY, JSON.stringify(snapshot));\n return true;\n } catch {\n return false;\n }\n}\n\nexport function clearProfileSnapshot(storage: Storage): void {\n try {\n storage.removeItem(MXL_PROFILE_SNAPSHOT_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function mergeProfileSnapshot(\n existing: ProfileSnapshot | null,\n patch: Partial<ProfileSnapshot> & { profileId: string },\n): ProfileSnapshot {\n const base = existing ?? EMPTY_SNAPSHOT();\n const mergedProperties = {\n ...base.properties,\n ...(patch.properties ?? {}),\n };\n\n return {\n avatar: patch.avatar !== undefined ? patch.avatar : base.avatar,\n email: patch.email !== undefined ? patch.email : base.email,\n firstName:\n patch.firstName !== undefined ? patch.firstName : base.firstName,\n lastName: patch.lastName !== undefined ? patch.lastName : base.lastName,\n profileId: patch.profileId,\n properties: mergedProperties,\n };\n}\n\nexport function snapshotToEventProperties(\n snapshot: ProfileSnapshot,\n): Record<string, string> {\n const props: Record<string, string> = { ...snapshot.properties };\n if (snapshot.firstName) {\n props.first_name = snapshot.firstName;\n }\n if (snapshot.lastName) {\n props.last_name = snapshot.lastName;\n }\n if (snapshot.email) {\n props.email = snapshot.email;\n }\n if (snapshot.avatar) {\n props.avatar = snapshot.avatar;\n }\n return props;\n}\n"],"mappings":";;AAWA,MAAM,wBAAyC;CAC7C,QAAQ;CACR,OAAO;CACP,WAAW;CACX,UAAU;CACV,WAAW;CACX,YAAY,EAAE;CACf;AAED,SAAgB,oBAAoB,SAA0C;AAC5E,KAAI;EACF,MAAM,MAAM,QAAQ,QAAQ,iCAAiC;AAC7D,MAAI,CAAC,IACH,QAAO;EAET,MAAM,SAAkB,KAAK,MAAM,IAAI;AACvC,MACE,OAAO,WAAW,YAClB,WAAW,QACX,OAAQ,OAA2B,cAAc,SAEjD,QAAO;SAEH;AAGR,QAAO;;AAGT,SAAgB,oBACd,SACA,UACS;AACT,KAAI;AACF,UAAQ,QAAQ,kCAAkC,KAAK,UAAU,SAAS,CAAC;AAC3E,SAAO;SACD;AACN,SAAO;;;AAIX,SAAgB,qBAAqB,SAAwB;AAC3D,KAAI;AACF,UAAQ,WAAW,iCAAiC;SAC9C;;AAKV,SAAgB,qBACd,UACA,OACiB;CACjB,MAAM,OAAO,YAAY,gBAAgB;CACzC,MAAM,mBAAmB;EACvB,GAAG,KAAK;EACR,GAAI,MAAM,cAAc,EAAE;EAC3B;AAED,QAAO;EACL,QAAQ,MAAM,WAAW,KAAA,IAAY,MAAM,SAAS,KAAK;EACzD,OAAO,MAAM,UAAU,KAAA,IAAY,MAAM,QAAQ,KAAK;EACtD,WACE,MAAM,cAAc,KAAA,IAAY,MAAM,YAAY,KAAK;EACzD,UAAU,MAAM,aAAa,KAAA,IAAY,MAAM,WAAW,KAAK;EAC/D,WAAW,MAAM;EACjB,YAAY;EACb;;AAGH,SAAgB,0BACd,UACwB;CACxB,MAAM,QAAgC,EAAE,GAAG,SAAS,YAAY;AAChE,KAAI,SAAS,UACX,OAAM,aAAa,SAAS;AAE9B,KAAI,SAAS,SACX,OAAM,YAAY,SAAS;AAE7B,KAAI,SAAS,MACX,OAAM,QAAQ,SAAS;AAEzB,KAAI,SAAS,OACX,OAAM,SAAS,SAAS;AAE1B,QAAO"}
@@ -56,6 +56,7 @@ var MXLUserSessionManager = class MXLUserSessionManager {
56
56
  _tab;
57
57
  _navigationSource;
58
58
  _referrerScrubbedUrl;
59
+ _analyticsManager = null;
59
60
  constructor({ config, diag: diagParam, perf, visibilityDoc, storage, limitManager, target = window, activityThrottleMs = require_managers_MXLUserSessionManager_constants.DEFAULT_ACTIVITY_THROTTLE_MS, activityEvents = require_managers_MXLUserSessionManager_constants.DEFAULT_ACTIVITY_EVENTS, tabStorage, referrer = typeof document !== "undefined" ? document.referrer : "", navigationPerformance = typeof window !== "undefined" ? window.performance : { getEntriesByType: () => [] } }) {
60
61
  this._diag = diagParam ?? _opentelemetry_api.diag.createComponentLogger({ namespace: "MXLUserSessionManager" });
61
62
  this._perf = perf;
@@ -120,6 +121,9 @@ var MXLUserSessionManager = class MXLUserSessionManager {
120
121
  recordSDKStartupDuration(duration) {
121
122
  this._sdkStartupDuration = Math.ceil(duration);
122
123
  }
124
+ setAnalyticsManager(manager) {
125
+ this._analyticsManager = manager;
126
+ }
123
127
  getUserSessionId() {
124
128
  return this._state?.userSessionId ?? null;
125
129
  }
@@ -228,6 +232,10 @@ var MXLUserSessionManager = class MXLUserSessionManager {
228
232
  endAttrs[require_constants_attributes.KEY_MXL_IS_FINAL_SESSION_PART] = 1;
229
233
  if (userSessionEndReason) endAttrs[require_constants_attributes.KEY_MXL_USER_SESSION_TERMINATION_REASON] = userSessionEndReason;
230
234
  }
235
+ if (this._analyticsManager) {
236
+ Object.assign(endAttrs, this._analyticsManager.buildSessionPartAnalyticsAttributes());
237
+ this._analyticsManager.finalizeSessionPartAnalytics();
238
+ }
231
239
  const propertyAttrs = {};
232
240
  for (const [bareKey, value] of Object.entries(this.getSessionPartProperties())) propertyAttrs[require_constants_attributes.KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;
233
241
  try {
@@ -351,6 +359,7 @@ var MXLUserSessionManager = class MXLUserSessionManager {
351
359
  userSessionNumber
352
360
  });
353
361
  created = true;
362
+ this._analyticsManager?.resetSessionAnalyticsForNewUserSession();
354
363
  }
355
364
  if (created || this._maxDurationTimeout === null) this._setupMaxDurationTimer(state, now);
356
365
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"MXLUserSessionManager.cjs","names":["DEFAULT_ACTIVITY_THROTTLE_MS","DEFAULT_ACTIVITY_EVENTS","diag","readPermanentProperties","trace","throttle","clampNumber","DEFAULT_USER_SESSION_MAX_DURATION_SECONDS","MAX_USER_SESSION_MAX_DURATION_SECONDS","MIN_USER_SESSION_MAX_DURATION_SECONDS","DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","initTabContext","KEY_MXL_USER_SESSION_ID","ATTR_SESSION_ID","KEY_MXL_USER_SESSION_PREVIOUS_ID","ATTR_SESSION_PREVIOUS_ID","KEY_MXL_USER_SESSION_NUMBER","KEY_MXL_USER_SESSION_PART_INDEX","KEY_MXL_SESSION_PART_NUMBER","KEY_MXL_USER_SESSION_START_TS","KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS","KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","MXL_LAST_END_USER_SESSION_TS_KEY","getVisibilityState","generateUUID","KEY_MXL_TYPE","KEY_MXL_STATE","KEY_MXL_SESSION_PART_ID","KEY_MXL_SESSION_PART_START_REASON","KEY_MXL_COLD_START","KEY_MXL_EXPERIENCE_ID","KEY_MXL_TAB_ID","KEY_MXL_NAVIGATION_SOURCE","KEY_MXL_REFERRER_URL","KEY_MXL_SOURCE_TAB_ID","MXLExtendedSpan","SESSION_PART_SPAN_NAME","KEY_MXL_SESSION_PART_END_REASON","KEY_MXL_SDK_STARTUP_DURATION","KEY_MXL_IS_FINAL_SESSION_PART","KEY_MXL_USER_SESSION_TERMINATION_REASON","KEY_PREFIX_MXL_PROPERTIES","MXL_USER_SESSION_STATE_KEY","storePermanentProperties","readUserSessionState","isUserSessionExpired","getIncrementedCount","MXL_USER_SESSION_NUMBER_KEY","createUserSessionState","MXL_SESSION_PART_NUMBER_KEY","isTabEngaged"],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"sourcesContent":["import type {\n Attributes,\n DiagLogger,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n ATTR_SESSION_ID,\n ATTR_SESSION_PREVIOUS_ID,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport type {\n PropertyOptions,\n SessionPartEndReason,\n SessionPartStartReason,\n UserSessionEndReason,\n} from '../../api-sessions/manager/types';\nimport type { ExtendedSpan } from '../../api-traces/api/TraceAPI/types';\nimport type { VisibilityStateDocument } from '../../common/types';\nimport {\n KEY_MXL_COLD_START,\n KEY_MXL_EXPERIENCE_ID,\n KEY_MXL_IS_FINAL_SESSION_PART,\n KEY_MXL_NAVIGATION_SOURCE,\n KEY_MXL_REFERRER_URL,\n KEY_MXL_SDK_STARTUP_DURATION,\n KEY_MXL_SESSION_PART_END_REASON,\n KEY_MXL_SESSION_PART_ID,\n KEY_MXL_SESSION_PART_NUMBER,\n KEY_MXL_SESSION_PART_START_REASON,\n KEY_MXL_SOURCE_TAB_ID,\n KEY_MXL_STATE,\n KEY_MXL_TAB_ID,\n KEY_MXL_TYPE,\n KEY_MXL_USER_SESSION_ID,\n KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS,\n KEY_MXL_USER_SESSION_NUMBER,\n KEY_MXL_USER_SESSION_PART_INDEX,\n KEY_MXL_USER_SESSION_PREVIOUS_ID,\n KEY_MXL_USER_SESSION_START_TS,\n KEY_MXL_USER_SESSION_TERMINATION_REASON,\n KEY_PREFIX_MXL_PROPERTIES,\n MXL_STATES,\n MXL_TYPES,\n} from '../../constants/attributes';\nimport { clampNumber } from '../../utils/clampNumber';\nimport { generateUUID } from '../../utils/generateUUID';\nimport { getIncrementedCount } from '../../utils/getIncrementedCount';\nimport { getVisibilityState } from '../../utils/getVisibilityState';\nimport type { NamespacedStorage } from '../../utils/NamespacedStorage/NamespacedStorage';\nimport type { PerformanceManager } from '../../utils/PerformanceManager/types';\nimport { throttle } from '../../utils/throttle';\nimport type { ThrottledFunction } from '../../utils/throttle';\nimport type { TimeoutRef } from '../../utils/timeout/types';\nimport type { LimitManagerInternal } from '../MXLLimitManager/types';\nimport { MXLExtendedSpan } from '../MXLTraceManager/MXLExtendedSpan';\nimport {\n DEFAULT_ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_THROTTLE_MS,\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n END_USER_SESSION_COOLDOWN_MS,\n MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MAX_USER_SESSION_MAX_DURATION_SECONDS,\n MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MIN_USER_SESSION_MAX_DURATION_SECONDS,\n MXL_LAST_END_USER_SESSION_TS_KEY,\n MXL_SESSION_PART_NUMBER_KEY,\n MXL_USER_SESSION_NUMBER_KEY,\n MXL_USER_SESSION_STATE_KEY,\n SESSION_PART_SPAN_NAME,\n} from './constants';\nimport type {\n MXLUserSessionManagerArgs,\n NavigationSource,\n Tab,\n UserSessionAttributes,\n UserSessionManagerInternal,\n UserSessionState,\n} from './types';\nimport {\n addActivityListeners,\n isTabEngaged,\n removeActivityListeners,\n} from './utils/activity';\nimport {\n createUserSessionState,\n isUserSessionExpired,\n readPermanentProperties,\n readUserSessionState,\n storePermanentProperties,\n} from './utils/state';\nimport { initTabContext, setupNewTabClickListeners } from './utils/tabTracking';\n\n/**\n * Parts are engagement-gated (visible AND focused), so only one part can\n * be active at a time. That mutex lets us treat storage as a\n * plain shared row read on engagement and written on changes.\n */\nexport class MXLUserSessionManager implements UserSessionManagerInternal {\n private static readonly _testInstances = new Set<MXLUserSessionManager>();\n\n /** @internal Test-only helper to tear down leaked managers between tests. */\n public static shutdownAllTestInstances(): void {\n for (const manager of MXLUserSessionManager._testInstances) {\n manager._shutdown();\n }\n MXLUserSessionManager._testInstances.clear();\n }\n\n private _state: UserSessionState | null = null;\n private _previousUserSessionId: string | null = null;\n private readonly _maxUserSessionDurationSeconds: number;\n private readonly _inactivityTimeoutSeconds: number;\n private _maxDurationTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isShutdown = false;\n // Bare keys; the wire-format prefix is applied at stamp time.\n private _permanentProperties: Record<string, string> = {};\n // Distinguishes \"another tab wiped storage after we wrote\" from \"we\n // Never managed to write in the first place\"; see\n // _continueUserSessionAfterPartEnd.\n private _hasStoredState = false;\n\n private _activeSessionPartId: string | null = null;\n // Snapshotted at part start so a concurrent bump in another tab doesn't\n // Shift this part's value before its span ends.\n private _currentSessionPartNumber: number | null = null;\n private _sessionPartSpan: ExtendedSpan | null = null;\n private _activeSessionPartCounts: Record<string, number> | null = null;\n // Marks the first part of the page lifetime so it can be reported as a\n // Cold start.\n private _coldStart = true;\n private _nextSessionPartCounts: Record<string, number> = {};\n private _sdkStartupDuration = 0;\n private readonly _sessionPartStartedListeners: (() => void)[] = [];\n private readonly _sessionPartEndedListeners: (() => void)[] = [];\n private _tracer: Tracer;\n\n private readonly _diag: DiagLogger;\n private readonly _perf: PerformanceManager;\n private readonly _storage: NamespacedStorage;\n private readonly _visibilityDoc: VisibilityStateDocument;\n private readonly _limitManager: LimitManagerInternal;\n private readonly _target: EventTarget;\n private readonly _activityEvents: readonly string[];\n private readonly _onActivityThrottled: ThrottledFunction<\n (event: Event) => void\n >;\n private _sessionPartInactivityTimer: TimeoutRef | null = null;\n private readonly _tab: Tab;\n private readonly _navigationSource: NavigationSource;\n private readonly _referrerScrubbedUrl?: string;\n\n public constructor({\n config,\n diag: diagParam,\n perf,\n visibilityDoc,\n storage,\n limitManager,\n target = window,\n activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS,\n activityEvents = DEFAULT_ACTIVITY_EVENTS,\n tabStorage,\n referrer = typeof document !== 'undefined' ? document.referrer : '',\n navigationPerformance = typeof window !== 'undefined'\n ? window.performance\n : { getEntriesByType: () => [] },\n }: MXLUserSessionManagerArgs) {\n this._diag =\n diagParam ??\n diag.createComponentLogger({\n namespace: 'MXLUserSessionManager',\n });\n this._perf = perf;\n this._visibilityDoc = visibilityDoc;\n this._storage = storage;\n this._limitManager = limitManager;\n this._permanentProperties = readPermanentProperties(\n this._storage,\n this._diag,\n );\n this._tracer = trace.getTracer('mxl-web-sdk-session-parts');\n this._target = target;\n this._activityEvents = activityEvents;\n this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);\n\n const maxUserSessionDurationSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_MAX_DURATION_SECONDS,\n min: MIN_USER_SESSION_MAX_DURATION_SECONDS,\n value: config?.maxUserSessionDurationSeconds,\n });\n const inactivityTimeoutSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n min: MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n value: config?.inactivityTimeoutSeconds,\n });\n\n this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;\n if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) {\n this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;\n } else {\n this._diag.warn(\n `inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) ` +\n `exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); ` +\n `falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`,\n );\n this._inactivityTimeoutSeconds =\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;\n }\n\n const tabContext = initTabContext({\n diag: this._diag,\n localStorage: storage,\n navigationPerformance,\n referrer,\n sessionStorage: tabStorage,\n });\n this._tab = tabContext.tab;\n this._navigationSource = tabContext.navigationSource;\n this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;\n setupNewTabClickListeners(this._tab, storage, this._diag);\n MXLUserSessionManager._testInstances.add(this);\n }\n\n public setTracerProvider(tracerProvider: TracerProvider): void {\n this._tracer = tracerProvider.getTracer('mxl-web-sdk-session-parts');\n // Listeners attach here rather than in the constructor so that tests\n // That construct a manager without going through SDK init don't\n // Pollute window with listeners, and so that browser-activity-driven\n // Parts only start once a real tracer is wired.\n addActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n // Eager state init so getUserSessionId() returns a real id before the\n // First part starts, and so other tabs see the row when we create a\n // Fresh session here.\n const { state, created } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = state;\n if (created) {\n this._storeState();\n }\n }\n\n public recordSDKStartupDuration(duration: number): void {\n this._sdkStartupDuration = Math.ceil(duration);\n }\n\n public getUserSessionId(): string | null {\n return this._state?.userSessionId ?? null;\n }\n\n public getPreviousUserSessionId(): string | null {\n // Fall back to in-memory for the brief window during user-session end\n // Where storage is cleared but the just-ended id is still held.\n return this._state?.previousUserSessionId ?? this._previousUserSessionId;\n }\n\n public getUserSessionStartTime(): number | null {\n return this._state?.userSessionStartTs ?? null;\n }\n\n public getUserSessionAttributes(): UserSessionAttributes | null {\n if (!this._state) {\n return null;\n }\n const previousUserSessionId = this.getPreviousUserSessionId() ?? '';\n return {\n [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,\n [ATTR_SESSION_ID]: this._state.userSessionId,\n [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,\n [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,\n [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,\n [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,\n [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]:\n this._state.maxUserSessionDurationSeconds,\n [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]:\n this._state.inactivityTimeoutSeconds,\n };\n }\n\n public endUserSession(): void {\n if (!this._state) {\n this._diag.debug(\n 'Trying to end user session, but there is no active session. This is a no-op.',\n );\n return;\n }\n\n const now = this._perf.getNowMillis();\n const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);\n const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);\n if (\n Number.isFinite(lastEndTs) &&\n now - lastEndTs < END_USER_SESSION_COOLDOWN_MS\n ) {\n this._diag.warn(\n 'endUserSession called within cooldown period, ignoring.',\n );\n return;\n }\n\n this._rolloverUserSession('manual');\n this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));\n }\n\n public getSessionPartId(): string | null {\n return this._activeSessionPartId;\n }\n\n public getSessionPartSpan(): ExtendedSpan | null {\n return this._sessionPartSpan;\n }\n\n public startSessionPartInternal(reason: SessionPartStartReason): void {\n if (this._sessionPartSpan) {\n this._diag.warn(\n `startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`,\n );\n return;\n }\n\n // Parts are foreground-only: a part corresponds to a tab that is both\n // Visible AND focused.\n if (\n getVisibilityState(this._visibilityDoc) === MXL_STATES.Background ||\n !this._visibilityDoc.hasFocus()\n ) {\n this._diag.debug(\n `skipping session part start (reason: ${reason}) because the tab is not engaged`,\n );\n return;\n }\n\n const activeSessionPartId = generateUUID();\n const previouslyRecordedCounts = this._nextSessionPartCounts;\n\n this._beginUserSessionForPartStart();\n\n const attributes: Attributes = {\n ...this.getUserSessionAttributes(),\n [KEY_MXL_TYPE]: MXL_TYPES.SessionPart,\n [KEY_MXL_STATE]: MXL_STATES.Foreground,\n [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,\n [KEY_MXL_SESSION_PART_START_REASON]: reason,\n [KEY_MXL_COLD_START]: this._coldStart,\n [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,\n [KEY_MXL_TAB_ID]: this._tab.tabId,\n [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,\n ...previouslyRecordedCounts,\n };\n\n if (this._referrerScrubbedUrl) {\n attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;\n }\n if (this._tab.sourceTabId) {\n attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;\n }\n\n this._activeSessionPartId = activeSessionPartId;\n let span: MXLExtendedSpan;\n try {\n span = new MXLExtendedSpan(\n this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }),\n );\n } catch (error) {\n this._activeSessionPartId = null;\n this._diag.error('Error starting session part span', error);\n return;\n }\n\n this._activeSessionPartCounts = {};\n this._nextSessionPartCounts = {};\n this._sessionPartSpan = span;\n this._coldStart = false;\n\n this._startSessionPartInactivityTimer();\n\n this._fireListeners(this._sessionPartStartedListeners, 'started');\n }\n\n public endSessionPartInternal(\n reason: SessionPartEndReason,\n userSessionEndReason?: UserSessionEndReason | null,\n ): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to end a session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n this._clearSessionPartInactivityTimer();\n\n const isFinal = reason === 'user_session_ended' || reason === 'inactivity';\n\n // Capture the end stamp upfront. SpanProcessor.onEnd can run unbounded\n // And must not push it forward.\n const partEndTs = this._perf.getNowMillis();\n const span = this._sessionPartSpan;\n try {\n const endAttrs: Attributes = {\n [KEY_MXL_SESSION_PART_END_REASON]: reason,\n ...this._activeSessionPartCounts,\n ...this._limitManager.getDiagnosticCounts(),\n [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration,\n };\n if (isFinal) {\n endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;\n if (userSessionEndReason) {\n endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] =\n userSessionEndReason;\n }\n }\n\n const propertyAttrs: Attributes = {};\n for (const [bareKey, value] of Object.entries(\n this.getSessionPartProperties(),\n )) {\n propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;\n }\n\n try {\n span.setAttributes({\n ...propertyAttrs,\n ...endAttrs,\n });\n } catch (error) {\n this._diag.warn(\n 'Error setting end attributes on session part span; ending span without them',\n error,\n );\n }\n } finally {\n // Fire listeners after end attributes are stamped (so subscribers can\n // Read them) and before span.end() (so anything they emit still\n // Attaches to the part that is conceptually still active).\n this._fireListeners(this._sessionPartEndedListeners, 'ended');\n try {\n span.end(partEndTs);\n } catch (error) {\n this._diag.warn('Error ending session part span', error);\n }\n this._sessionPartSpan = null;\n this._activeSessionPartId = null;\n this._activeSessionPartCounts = null;\n this._currentSessionPartNumber = null;\n this._limitManager.reset();\n }\n\n if (isFinal) {\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n } else {\n this._continueUserSessionAfterPartEnd(partEndTs);\n }\n }\n\n public addBreadcrumb(name: string): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to add breadcrumb, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);\n if (limitedBreadcrumb === 'dropped') {\n return;\n }\n\n this._sessionPartSpan.addEvent(\n 'mxl-breadcrumb',\n {\n message: limitedBreadcrumb.name,\n },\n this._perf.getNowMillis(),\n );\n }\n\n public addProperty(\n propertyKey: string,\n value: string,\n options?: PropertyOptions,\n ): void {\n const limitedSessionProperty = this._limitManager.limitSessionProperty(\n propertyKey,\n value,\n );\n\n if (limitedSessionProperty === 'dropped') {\n return;\n }\n\n const bareKey = limitedSessionProperty.key;\n const bareValue = limitedSessionProperty.value;\n\n if (options?.lifespan === 'permanent') {\n const candidate = {\n ...this._permanentProperties,\n [bareKey]: bareValue,\n };\n // Reject the write if storage is unavailable: a property that can't\n // Persist would silently diverge from what other tabs (and the next\n // Page load) see, which is worse than no property at all.\n if (!storePermanentProperties(this._storage, candidate)) {\n this._diag.warn(\n 'Storage unavailable; rejecting permanent property write.',\n );\n return;\n }\n this._permanentProperties = candidate;\n this._removeFromUserSessionProperties(bareKey);\n return;\n }\n\n // Ensure a state row exists so the write has somewhere to land;\n // AddProperty can fire before any part has started.\n const { state } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = {\n ...state,\n userSessionProperties: {\n ...state.userSessionProperties,\n [bareKey]: bareValue,\n },\n };\n if (!this._storeState()) {\n // Roll back so callers don't observe a value that won't persist.\n // The user session itself stays in memory.\n this._state = state;\n this._diag.warn(\n 'Storage unavailable; rejecting user-session property write.',\n );\n }\n }\n\n public removeProperty(propertyKey: string): void {\n const bareKey = this._limitManager.truncateString(\n 'session_property_key',\n propertyKey,\n );\n\n // Try both stores so a key that was flipped between scopes doesn't\n // Linger in the other one.\n this._removeFromPermanentProperties(bareKey);\n this._removeFromUserSessionProperties(bareKey);\n }\n\n /**\n * Bare-keyed view of properties for the active part. User-session-scoped\n * entries shadow permanent ones, matching the cross-scope flip rule\n * enforced in `addProperty`. Callers apply the wire-format prefix at\n * stamp time.\n */\n public getSessionPartProperties(): Record<string, string> {\n return {\n ...this._permanentProperties,\n ...this._state?.userSessionProperties,\n };\n }\n\n public incrSessionPartCountForKey(key: string): void {\n if (!this._sessionPartSpan || !this._activeSessionPartCounts) {\n this._diag.debug(\n 'trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n this._activeSessionPartCounts[key] =\n (this._activeSessionPartCounts[key] || 0) + 1;\n }\n\n public incrNextSessionPartCountForKey(key: string): void {\n this._nextSessionPartCounts[key] =\n (this._nextSessionPartCounts[key] || 0) + 1;\n }\n\n public addSessionPartStartedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartStartedListeners, listener);\n }\n\n public addSessionPartEndedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartEndedListeners, listener);\n }\n\n /**\n * Returns the persisted user-session state, rotating to a fresh one if\n * the persisted row is missing or expired. Arms the max-duration timer\n * when needed. The caller is responsible for assigning the result to\n * `_state` and for persisting (the helper does not write to storage).\n */\n private _loadOrCreateUserSessionState(now: number): {\n state: UserSessionState;\n created: boolean;\n } {\n let state = readUserSessionState(this._storage, this._diag);\n let created = false;\n if (!state || isUserSessionExpired(state, now)) {\n if (state) {\n this._previousUserSessionId = state.userSessionId;\n }\n const userSessionNumber = getIncrementedCount(\n this._storage,\n MXL_USER_SESSION_NUMBER_KEY,\n this._diag,\n );\n state = createUserSessionState({\n inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,\n maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,\n now,\n previousUserSessionId: this._previousUserSessionId,\n userSessionNumber,\n });\n created = true;\n }\n // Arm on a freshly created state, and on the page-reload case where a\n // New manager loads existing state and has no timer running yet.\n // UserSessionMaxEndTs is fixed at creation, so re-arming the same value\n // On every load/start call is wasteful.\n if (created || this._maxDurationTimeout === null) {\n this._setupMaxDurationTimer(state, now);\n }\n return { created, state };\n }\n\n /**\n * Bumps the part counter and arms the max-duration timer. Relies on\n * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,\n * so `getUserSessionAttributes()` is guaranteed non-null after this.\n */\n private _beginUserSessionForPartStart(): void {\n const now = this._perf.getNowMillis();\n const { state } = this._loadOrCreateUserSessionState(now);\n\n this._currentSessionPartNumber = getIncrementedCount(\n this._storage,\n MXL_SESSION_PART_NUMBER_KEY,\n this._diag,\n );\n\n this._state = {\n ...state,\n userSessionPartIndex: state.userSessionPartIndex + 1,\n // A part is active, so any pending inactivity deadline no longer\n // Applies; it gets re-armed when the part ends.\n inactivityDeadlineTs: null,\n };\n this._storeState();\n }\n\n /**\n * Records the inactivity deadline on the user-session row so the next\n * part start can detect lazy expiry. The max-duration timer stays valid\n * because userSessionMaxEndTs doesn't change between parts.\n */\n private _continueUserSessionAfterPartEnd(partEndTs: number): void {\n if (!this._state) {\n this._clearMaxDurationTimer();\n return;\n }\n\n // If the state row was present at part start but is gone now (user\n // Wiped site data, quota eviction, sibling tab cleared), don't\n // Resurrect it from memory. Drop in-memory state so the next part\n // Start creates a fresh user session; carry the just-ended id\n // Forward so the next session can back-link to it.\n // _hasStoredState gates this: if we never persisted in the first\n // Place, the in-memory copy stays authoritative.\n if (\n this._hasStoredState &&\n this._storage.getItem(MXL_USER_SESSION_STATE_KEY) === null\n ) {\n this._previousUserSessionId = this._state.userSessionId;\n this._state = null;\n this._clearMaxDurationTimer();\n return;\n }\n\n this._state = {\n ...this._state,\n inactivityDeadlineTs:\n partEndTs + this._state.inactivityTimeoutSeconds * 1000,\n };\n this._storeState();\n }\n\n /**\n * Ends the active part as final and starts a fresh part for the next\n * user session. State clearing for the engaged path is handled by\n * endSessionPartInternal's isFinal branch. When no part is active\n * (tab disengaged), the same state-clearing is performed inline so\n * the next engagement creates a fresh user session rather than\n * resuming the just-ended one.\n */\n private _rolloverUserSession(\n userSessionEndReason: UserSessionEndReason,\n ): void {\n if (this._sessionPartSpan) {\n this.endSessionPartInternal('user_session_ended', userSessionEndReason);\n this.startSessionPartInternal('user_session_rollover');\n return;\n }\n\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n }\n\n private _setupMaxDurationTimer(state: UserSessionState, now: number): void {\n this._clearMaxDurationTimer();\n\n const remaining = state.userSessionMaxEndTs - now;\n if (remaining <= 0) {\n return;\n }\n\n this._maxDurationTimeout = setTimeout(() => {\n this._maxDurationTimeout = null;\n this._rolloverUserSession('max_duration_reached');\n }, remaining);\n }\n\n /**\n * @internal Would be private but exposed for tests to simulate a page reload\n */\n public _clearMaxDurationTimer(): void {\n if (this._maxDurationTimeout !== null) {\n clearTimeout(this._maxDurationTimeout);\n this._maxDurationTimeout = null;\n }\n }\n\n /**\n * Detaches browser-activity listeners and clears the part-inactivity\n * timer. Intended for SDK teardown and tests; in production the manager\n * lives for the page's lifetime.\n */\n public _shutdown(): void {\n if (this._isShutdown) {\n return;\n }\n this._isShutdown = true;\n MXLUserSessionManager._testInstances.delete(this);\n this._onActivityThrottled.cancel();\n removeActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n this._clearSessionPartInactivityTimer();\n this._clearMaxDurationTimer();\n }\n\n private readonly _onActivity = (): void => {\n try {\n if (!isTabEngaged(this._visibilityDoc)) {\n return;\n }\n if (this._activeSessionPartId === null) {\n this.startSessionPartInternal('web_activity');\n return;\n }\n this._startSessionPartInactivityTimer();\n } catch (error) {\n this._diag.warn('Error handling activity event', error);\n }\n };\n\n // Tab visibility flipped (switch tabs, minimize, OS app switch). Drives\n // The engagement transition off the current visibilityState/hasFocus pair.\n private readonly _onVisibilityChange = (): void => {\n this._handleEngagementTransition('visibilitychange');\n };\n\n // Window focus arrived (alt-tab back, clicked into the document). hasFocus\n // Is now true; engagement transition resolves whether to start a part.\n private readonly _onFocus = (): void => {\n this._handleEngagementTransition('focus');\n };\n\n // Window focus lost (alt-tab away, clicked into DevTools or another window).\n // HasFocus is now false; engagement transition ends the active part.\n private readonly _onBlur = (): void => {\n this._handleEngagementTransition('blur');\n };\n\n // Initial page load OR BFCache restore. event.persisted only affects the\n // Debug source string; routing is via _handleEngagementTransition, which\n // Keys off engagement state and whether a part is currently active.\n private readonly _onPageShow = (event: PageTransitionEvent): void => {\n this._handleEngagementTransition(\n event.persisted ? 'pageshow-bfcache' : 'pageshow-initial',\n );\n };\n\n // Navigation away (hard nav, tab close) OR BFCache freeze. Both signal the\n // Page is about to stop running, so we always end the active part. Ending\n // The part flushes its span (and the spans batched against it in\n // MXLSessionPartBatchedSpanProcessor) through the export pipeline while\n // The page can still issue a keepalive fetch. On BFCache restore, pageshow\n // Will start a fresh part.\n private readonly _onPageHide = (event: PageTransitionEvent): void => {\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n const reason: SessionPartEndReason = event.persisted\n ? 'web_background'\n : 'web_hard_navigation';\n this._diag.debug(\n `page hiding (persisted=${event.persisted}); ending current part as ${reason}`,\n );\n this.endSessionPartInternal(reason);\n } catch (error) {\n this._diag.error(\n `Error ending session part on pagehide (persisted=${event.persisted})`,\n error,\n );\n }\n };\n\n private _handleEngagementTransition(source: string): void {\n try {\n const engaged = isTabEngaged(this._visibilityDoc);\n const active = this._activeSessionPartId !== null;\n if (!engaged && active) {\n this._diag.debug(`tab disengaged via ${source}; ending current part`);\n this.endSessionPartInternal('web_background');\n return;\n }\n if (engaged && !active) {\n this._diag.debug(`tab engaged via ${source}; starting new part`);\n this.startSessionPartInternal('web_foreground');\n return;\n }\n if (engaged && active) {\n // Redundant engagement event while a part is already active (browser\n // Quirk: an extra focus/visibility fire that isn't a real transition).\n // Re-arm the inactivity timer since the event still implies presence.\n this._startSessionPartInactivityTimer();\n }\n } catch (error) {\n this._diag.warn('Error handling engagement change', error);\n }\n }\n\n private readonly _onSessionPartInactivity = (): void => {\n this._sessionPartInactivityTimer = null;\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n this._diag.debug(\n 'inactivity timer fired; ending current part and user session',\n );\n this.endSessionPartInternal('inactivity', 'inactivity');\n } catch (error) {\n this._diag.warn('Error handling inactivity timer', error);\n }\n };\n\n private _startSessionPartInactivityTimer(): void {\n this._clearSessionPartInactivityTimer();\n this._sessionPartInactivityTimer = setTimeout(\n this._onSessionPartInactivity,\n this._inactivityTimeoutSeconds * 1000,\n );\n }\n\n private _clearSessionPartInactivityTimer(): void {\n if (this._sessionPartInactivityTimer !== null) {\n clearTimeout(this._sessionPartInactivityTimer);\n this._sessionPartInactivityTimer = null;\n }\n }\n\n private _addListener(list: (() => void)[], listener: () => void): () => void {\n list.push(listener);\n return () => {\n const i = list.indexOf(listener);\n if (i !== -1) {\n list.splice(i, 1);\n }\n };\n }\n\n private _fireListeners(list: (() => void)[], kind: string): void {\n for (const listener of list) {\n try {\n listener();\n } catch (error) {\n this._diag.warn(\n `Error while executing session part ${kind} listener`,\n error,\n );\n }\n }\n }\n\n private _storeState(): boolean {\n if (!this._state) {\n return false;\n }\n const stored = this._storage.setItem(\n MXL_USER_SESSION_STATE_KEY,\n JSON.stringify(this._state),\n );\n if (stored) {\n this._hasStoredState = true;\n }\n return stored;\n }\n\n private _removeFromPermanentProperties(bareKey: string): void {\n if (!(bareKey in this._permanentProperties)) {\n return;\n }\n const pruned = { ...this._permanentProperties };\n delete pruned[bareKey];\n this._permanentProperties = pruned;\n storePermanentProperties(this._storage, pruned);\n }\n\n private _removeFromUserSessionProperties(bareKey: string): void {\n if (!this._state || !(bareKey in this._state.userSessionProperties)) {\n return;\n }\n const pruned = { ...this._state.userSessionProperties };\n delete pruned[bareKey];\n this._state = {\n ...this._state,\n userSessionProperties: pruned,\n };\n this._storeState();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MXLUserSessionManager.cjs","names":["DEFAULT_ACTIVITY_THROTTLE_MS","DEFAULT_ACTIVITY_EVENTS","diag","readPermanentProperties","trace","throttle","clampNumber","DEFAULT_USER_SESSION_MAX_DURATION_SECONDS","MAX_USER_SESSION_MAX_DURATION_SECONDS","MIN_USER_SESSION_MAX_DURATION_SECONDS","DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","initTabContext","KEY_MXL_USER_SESSION_ID","ATTR_SESSION_ID","KEY_MXL_USER_SESSION_PREVIOUS_ID","ATTR_SESSION_PREVIOUS_ID","KEY_MXL_USER_SESSION_NUMBER","KEY_MXL_USER_SESSION_PART_INDEX","KEY_MXL_SESSION_PART_NUMBER","KEY_MXL_USER_SESSION_START_TS","KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS","KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS","MXL_LAST_END_USER_SESSION_TS_KEY","getVisibilityState","generateUUID","KEY_MXL_TYPE","KEY_MXL_STATE","KEY_MXL_SESSION_PART_ID","KEY_MXL_SESSION_PART_START_REASON","KEY_MXL_COLD_START","KEY_MXL_EXPERIENCE_ID","KEY_MXL_TAB_ID","KEY_MXL_NAVIGATION_SOURCE","KEY_MXL_REFERRER_URL","KEY_MXL_SOURCE_TAB_ID","MXLExtendedSpan","SESSION_PART_SPAN_NAME","KEY_MXL_SESSION_PART_END_REASON","KEY_MXL_SDK_STARTUP_DURATION","KEY_MXL_IS_FINAL_SESSION_PART","KEY_MXL_USER_SESSION_TERMINATION_REASON","KEY_PREFIX_MXL_PROPERTIES","MXL_USER_SESSION_STATE_KEY","storePermanentProperties","readUserSessionState","isUserSessionExpired","getIncrementedCount","MXL_USER_SESSION_NUMBER_KEY","createUserSessionState","MXL_SESSION_PART_NUMBER_KEY","isTabEngaged"],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"sourcesContent":["import type {\n Attributes,\n DiagLogger,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n ATTR_SESSION_ID,\n ATTR_SESSION_PREVIOUS_ID,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport type {\n PropertyOptions,\n SessionPartEndReason,\n SessionPartStartReason,\n UserSessionEndReason,\n} from '../../api-sessions/manager/types';\nimport type { ExtendedSpan } from '../../api-traces/api/TraceAPI/types';\nimport type { VisibilityStateDocument } from '../../common/types';\nimport {\n KEY_MXL_COLD_START,\n KEY_MXL_EXPERIENCE_ID,\n KEY_MXL_IS_FINAL_SESSION_PART,\n KEY_MXL_NAVIGATION_SOURCE,\n KEY_MXL_REFERRER_URL,\n KEY_MXL_SDK_STARTUP_DURATION,\n KEY_MXL_SESSION_PART_END_REASON,\n KEY_MXL_SESSION_PART_ID,\n KEY_MXL_SESSION_PART_NUMBER,\n KEY_MXL_SESSION_PART_START_REASON,\n KEY_MXL_SOURCE_TAB_ID,\n KEY_MXL_STATE,\n KEY_MXL_TAB_ID,\n KEY_MXL_TYPE,\n KEY_MXL_USER_SESSION_ID,\n KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS,\n KEY_MXL_USER_SESSION_NUMBER,\n KEY_MXL_USER_SESSION_PART_INDEX,\n KEY_MXL_USER_SESSION_PREVIOUS_ID,\n KEY_MXL_USER_SESSION_START_TS,\n KEY_MXL_USER_SESSION_TERMINATION_REASON,\n KEY_PREFIX_MXL_PROPERTIES,\n MXL_STATES,\n MXL_TYPES,\n} from '../../constants/attributes';\nimport { clampNumber } from '../../utils/clampNumber';\nimport { generateUUID } from '../../utils/generateUUID';\nimport { getIncrementedCount } from '../../utils/getIncrementedCount';\nimport { getVisibilityState } from '../../utils/getVisibilityState';\nimport type { NamespacedStorage } from '../../utils/NamespacedStorage/NamespacedStorage';\nimport type { PerformanceManager } from '../../utils/PerformanceManager/types';\nimport { throttle } from '../../utils/throttle';\nimport type { ThrottledFunction } from '../../utils/throttle';\nimport type { TimeoutRef } from '../../utils/timeout/types';\nimport type { LimitManagerInternal } from '../MXLLimitManager/types';\nimport type { AnalyticsManagerInternal } from '../../api-analytics/manager/types';\nimport { MXLExtendedSpan } from '../MXLTraceManager/MXLExtendedSpan';\nimport {\n DEFAULT_ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_THROTTLE_MS,\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n END_USER_SESSION_COOLDOWN_MS,\n MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MAX_USER_SESSION_MAX_DURATION_SECONDS,\n MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MIN_USER_SESSION_MAX_DURATION_SECONDS,\n MXL_LAST_END_USER_SESSION_TS_KEY,\n MXL_SESSION_PART_NUMBER_KEY,\n MXL_USER_SESSION_NUMBER_KEY,\n MXL_USER_SESSION_STATE_KEY,\n SESSION_PART_SPAN_NAME,\n} from './constants';\nimport type {\n MXLUserSessionManagerArgs,\n NavigationSource,\n Tab,\n UserSessionAttributes,\n UserSessionManagerInternal,\n UserSessionState,\n} from './types';\nimport {\n addActivityListeners,\n isTabEngaged,\n removeActivityListeners,\n} from './utils/activity';\nimport {\n createUserSessionState,\n isUserSessionExpired,\n readPermanentProperties,\n readUserSessionState,\n storePermanentProperties,\n} from './utils/state';\nimport { initTabContext, setupNewTabClickListeners } from './utils/tabTracking';\n\n/**\n * Parts are engagement-gated (visible AND focused), so only one part can\n * be active at a time. That mutex lets us treat storage as a\n * plain shared row read on engagement and written on changes.\n */\nexport class MXLUserSessionManager implements UserSessionManagerInternal {\n private static readonly _testInstances = new Set<MXLUserSessionManager>();\n\n /** @internal Test-only helper to tear down leaked managers between tests. */\n public static shutdownAllTestInstances(): void {\n for (const manager of MXLUserSessionManager._testInstances) {\n manager._shutdown();\n }\n MXLUserSessionManager._testInstances.clear();\n }\n\n private _state: UserSessionState | null = null;\n private _previousUserSessionId: string | null = null;\n private readonly _maxUserSessionDurationSeconds: number;\n private readonly _inactivityTimeoutSeconds: number;\n private _maxDurationTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isShutdown = false;\n // Bare keys; the wire-format prefix is applied at stamp time.\n private _permanentProperties: Record<string, string> = {};\n // Distinguishes \"another tab wiped storage after we wrote\" from \"we\n // Never managed to write in the first place\"; see\n // _continueUserSessionAfterPartEnd.\n private _hasStoredState = false;\n\n private _activeSessionPartId: string | null = null;\n // Snapshotted at part start so a concurrent bump in another tab doesn't\n // Shift this part's value before its span ends.\n private _currentSessionPartNumber: number | null = null;\n private _sessionPartSpan: ExtendedSpan | null = null;\n private _activeSessionPartCounts: Record<string, number> | null = null;\n // Marks the first part of the page lifetime so it can be reported as a\n // Cold start.\n private _coldStart = true;\n private _nextSessionPartCounts: Record<string, number> = {};\n private _sdkStartupDuration = 0;\n private readonly _sessionPartStartedListeners: (() => void)[] = [];\n private readonly _sessionPartEndedListeners: (() => void)[] = [];\n private _tracer: Tracer;\n\n private readonly _diag: DiagLogger;\n private readonly _perf: PerformanceManager;\n private readonly _storage: NamespacedStorage;\n private readonly _visibilityDoc: VisibilityStateDocument;\n private readonly _limitManager: LimitManagerInternal;\n private readonly _target: EventTarget;\n private readonly _activityEvents: readonly string[];\n private readonly _onActivityThrottled: ThrottledFunction<\n (event: Event) => void\n >;\n private _sessionPartInactivityTimer: TimeoutRef | null = null;\n private readonly _tab: Tab;\n private readonly _navigationSource: NavigationSource;\n private readonly _referrerScrubbedUrl?: string;\n private _analyticsManager: AnalyticsManagerInternal | null = null;\n\n public constructor({\n config,\n diag: diagParam,\n perf,\n visibilityDoc,\n storage,\n limitManager,\n target = window,\n activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS,\n activityEvents = DEFAULT_ACTIVITY_EVENTS,\n tabStorage,\n referrer = typeof document !== 'undefined' ? document.referrer : '',\n navigationPerformance = typeof window !== 'undefined'\n ? window.performance\n : { getEntriesByType: () => [] },\n }: MXLUserSessionManagerArgs) {\n this._diag =\n diagParam ??\n diag.createComponentLogger({\n namespace: 'MXLUserSessionManager',\n });\n this._perf = perf;\n this._visibilityDoc = visibilityDoc;\n this._storage = storage;\n this._limitManager = limitManager;\n this._permanentProperties = readPermanentProperties(\n this._storage,\n this._diag,\n );\n this._tracer = trace.getTracer('mxl-web-sdk-session-parts');\n this._target = target;\n this._activityEvents = activityEvents;\n this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);\n\n const maxUserSessionDurationSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_MAX_DURATION_SECONDS,\n min: MIN_USER_SESSION_MAX_DURATION_SECONDS,\n value: config?.maxUserSessionDurationSeconds,\n });\n const inactivityTimeoutSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n min: MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n value: config?.inactivityTimeoutSeconds,\n });\n\n this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;\n if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) {\n this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;\n } else {\n this._diag.warn(\n `inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) ` +\n `exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); ` +\n `falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`,\n );\n this._inactivityTimeoutSeconds =\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;\n }\n\n const tabContext = initTabContext({\n diag: this._diag,\n localStorage: storage,\n navigationPerformance,\n referrer,\n sessionStorage: tabStorage,\n });\n this._tab = tabContext.tab;\n this._navigationSource = tabContext.navigationSource;\n this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;\n setupNewTabClickListeners(this._tab, storage, this._diag);\n MXLUserSessionManager._testInstances.add(this);\n }\n\n public setTracerProvider(tracerProvider: TracerProvider): void {\n this._tracer = tracerProvider.getTracer('mxl-web-sdk-session-parts');\n // Listeners attach here rather than in the constructor so that tests\n // That construct a manager without going through SDK init don't\n // Pollute window with listeners, and so that browser-activity-driven\n // Parts only start once a real tracer is wired.\n addActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n // Eager state init so getUserSessionId() returns a real id before the\n // First part starts, and so other tabs see the row when we create a\n // Fresh session here.\n const { state, created } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = state;\n if (created) {\n this._storeState();\n }\n }\n\n public recordSDKStartupDuration(duration: number): void {\n this._sdkStartupDuration = Math.ceil(duration);\n }\n\n public setAnalyticsManager(manager: AnalyticsManagerInternal | null): void {\n this._analyticsManager = manager;\n }\n\n public getUserSessionId(): string | null {\n return this._state?.userSessionId ?? null;\n }\n\n public getPreviousUserSessionId(): string | null {\n // Fall back to in-memory for the brief window during user-session end\n // Where storage is cleared but the just-ended id is still held.\n return this._state?.previousUserSessionId ?? this._previousUserSessionId;\n }\n\n public getUserSessionStartTime(): number | null {\n return this._state?.userSessionStartTs ?? null;\n }\n\n public getUserSessionAttributes(): UserSessionAttributes | null {\n if (!this._state) {\n return null;\n }\n const previousUserSessionId = this.getPreviousUserSessionId() ?? '';\n return {\n [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,\n [ATTR_SESSION_ID]: this._state.userSessionId,\n [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,\n [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,\n [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,\n [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,\n [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]:\n this._state.maxUserSessionDurationSeconds,\n [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]:\n this._state.inactivityTimeoutSeconds,\n };\n }\n\n public endUserSession(): void {\n if (!this._state) {\n this._diag.debug(\n 'Trying to end user session, but there is no active session. This is a no-op.',\n );\n return;\n }\n\n const now = this._perf.getNowMillis();\n const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);\n const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);\n if (\n Number.isFinite(lastEndTs) &&\n now - lastEndTs < END_USER_SESSION_COOLDOWN_MS\n ) {\n this._diag.warn(\n 'endUserSession called within cooldown period, ignoring.',\n );\n return;\n }\n\n this._rolloverUserSession('manual');\n this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));\n }\n\n public getSessionPartId(): string | null {\n return this._activeSessionPartId;\n }\n\n public getSessionPartSpan(): ExtendedSpan | null {\n return this._sessionPartSpan;\n }\n\n public startSessionPartInternal(reason: SessionPartStartReason): void {\n if (this._sessionPartSpan) {\n this._diag.warn(\n `startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`,\n );\n return;\n }\n\n // Parts are foreground-only: a part corresponds to a tab that is both\n // Visible AND focused.\n if (\n getVisibilityState(this._visibilityDoc) === MXL_STATES.Background ||\n !this._visibilityDoc.hasFocus()\n ) {\n this._diag.debug(\n `skipping session part start (reason: ${reason}) because the tab is not engaged`,\n );\n return;\n }\n\n const activeSessionPartId = generateUUID();\n const previouslyRecordedCounts = this._nextSessionPartCounts;\n\n this._beginUserSessionForPartStart();\n\n const attributes: Attributes = {\n ...this.getUserSessionAttributes(),\n [KEY_MXL_TYPE]: MXL_TYPES.SessionPart,\n [KEY_MXL_STATE]: MXL_STATES.Foreground,\n [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,\n [KEY_MXL_SESSION_PART_START_REASON]: reason,\n [KEY_MXL_COLD_START]: this._coldStart,\n [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,\n [KEY_MXL_TAB_ID]: this._tab.tabId,\n [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,\n ...previouslyRecordedCounts,\n };\n\n if (this._referrerScrubbedUrl) {\n attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;\n }\n if (this._tab.sourceTabId) {\n attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;\n }\n\n this._activeSessionPartId = activeSessionPartId;\n let span: MXLExtendedSpan;\n try {\n span = new MXLExtendedSpan(\n this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }),\n );\n } catch (error) {\n this._activeSessionPartId = null;\n this._diag.error('Error starting session part span', error);\n return;\n }\n\n this._activeSessionPartCounts = {};\n this._nextSessionPartCounts = {};\n this._sessionPartSpan = span;\n this._coldStart = false;\n\n this._startSessionPartInactivityTimer();\n\n this._fireListeners(this._sessionPartStartedListeners, 'started');\n }\n\n public endSessionPartInternal(\n reason: SessionPartEndReason,\n userSessionEndReason?: UserSessionEndReason | null,\n ): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to end a session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n this._clearSessionPartInactivityTimer();\n\n const isFinal = reason === 'user_session_ended' || reason === 'inactivity';\n\n // Capture the end stamp upfront. SpanProcessor.onEnd can run unbounded\n // And must not push it forward.\n const partEndTs = this._perf.getNowMillis();\n const span = this._sessionPartSpan;\n try {\n const endAttrs: Attributes = {\n [KEY_MXL_SESSION_PART_END_REASON]: reason,\n ...this._activeSessionPartCounts,\n ...this._limitManager.getDiagnosticCounts(),\n [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration,\n };\n if (isFinal) {\n endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;\n if (userSessionEndReason) {\n endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] =\n userSessionEndReason;\n }\n }\n\n if (this._analyticsManager) {\n Object.assign(\n endAttrs,\n this._analyticsManager.buildSessionPartAnalyticsAttributes(),\n );\n this._analyticsManager.finalizeSessionPartAnalytics();\n }\n\n const propertyAttrs: Attributes = {};\n for (const [bareKey, value] of Object.entries(\n this.getSessionPartProperties(),\n )) {\n propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;\n }\n\n try {\n span.setAttributes({\n ...propertyAttrs,\n ...endAttrs,\n });\n } catch (error) {\n this._diag.warn(\n 'Error setting end attributes on session part span; ending span without them',\n error,\n );\n }\n } finally {\n // Fire listeners after end attributes are stamped (so subscribers can\n // Read them) and before span.end() (so anything they emit still\n // Attaches to the part that is conceptually still active).\n this._fireListeners(this._sessionPartEndedListeners, 'ended');\n try {\n span.end(partEndTs);\n } catch (error) {\n this._diag.warn('Error ending session part span', error);\n }\n this._sessionPartSpan = null;\n this._activeSessionPartId = null;\n this._activeSessionPartCounts = null;\n this._currentSessionPartNumber = null;\n this._limitManager.reset();\n }\n\n if (isFinal) {\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n } else {\n this._continueUserSessionAfterPartEnd(partEndTs);\n }\n }\n\n public addBreadcrumb(name: string): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to add breadcrumb, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);\n if (limitedBreadcrumb === 'dropped') {\n return;\n }\n\n this._sessionPartSpan.addEvent(\n 'mxl-breadcrumb',\n {\n message: limitedBreadcrumb.name,\n },\n this._perf.getNowMillis(),\n );\n }\n\n public addProperty(\n propertyKey: string,\n value: string,\n options?: PropertyOptions,\n ): void {\n const limitedSessionProperty = this._limitManager.limitSessionProperty(\n propertyKey,\n value,\n );\n\n if (limitedSessionProperty === 'dropped') {\n return;\n }\n\n const bareKey = limitedSessionProperty.key;\n const bareValue = limitedSessionProperty.value;\n\n if (options?.lifespan === 'permanent') {\n const candidate = {\n ...this._permanentProperties,\n [bareKey]: bareValue,\n };\n // Reject the write if storage is unavailable: a property that can't\n // Persist would silently diverge from what other tabs (and the next\n // Page load) see, which is worse than no property at all.\n if (!storePermanentProperties(this._storage, candidate)) {\n this._diag.warn(\n 'Storage unavailable; rejecting permanent property write.',\n );\n return;\n }\n this._permanentProperties = candidate;\n this._removeFromUserSessionProperties(bareKey);\n return;\n }\n\n // Ensure a state row exists so the write has somewhere to land;\n // AddProperty can fire before any part has started.\n const { state } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = {\n ...state,\n userSessionProperties: {\n ...state.userSessionProperties,\n [bareKey]: bareValue,\n },\n };\n if (!this._storeState()) {\n // Roll back so callers don't observe a value that won't persist.\n // The user session itself stays in memory.\n this._state = state;\n this._diag.warn(\n 'Storage unavailable; rejecting user-session property write.',\n );\n }\n }\n\n public removeProperty(propertyKey: string): void {\n const bareKey = this._limitManager.truncateString(\n 'session_property_key',\n propertyKey,\n );\n\n // Try both stores so a key that was flipped between scopes doesn't\n // Linger in the other one.\n this._removeFromPermanentProperties(bareKey);\n this._removeFromUserSessionProperties(bareKey);\n }\n\n /**\n * Bare-keyed view of properties for the active part. User-session-scoped\n * entries shadow permanent ones, matching the cross-scope flip rule\n * enforced in `addProperty`. Callers apply the wire-format prefix at\n * stamp time.\n */\n public getSessionPartProperties(): Record<string, string> {\n return {\n ...this._permanentProperties,\n ...this._state?.userSessionProperties,\n };\n }\n\n public incrSessionPartCountForKey(key: string): void {\n if (!this._sessionPartSpan || !this._activeSessionPartCounts) {\n this._diag.debug(\n 'trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n this._activeSessionPartCounts[key] =\n (this._activeSessionPartCounts[key] || 0) + 1;\n }\n\n public incrNextSessionPartCountForKey(key: string): void {\n this._nextSessionPartCounts[key] =\n (this._nextSessionPartCounts[key] || 0) + 1;\n }\n\n public addSessionPartStartedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartStartedListeners, listener);\n }\n\n public addSessionPartEndedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartEndedListeners, listener);\n }\n\n /**\n * Returns the persisted user-session state, rotating to a fresh one if\n * the persisted row is missing or expired. Arms the max-duration timer\n * when needed. The caller is responsible for assigning the result to\n * `_state` and for persisting (the helper does not write to storage).\n */\n private _loadOrCreateUserSessionState(now: number): {\n state: UserSessionState;\n created: boolean;\n } {\n let state = readUserSessionState(this._storage, this._diag);\n let created = false;\n if (!state || isUserSessionExpired(state, now)) {\n if (state) {\n this._previousUserSessionId = state.userSessionId;\n }\n const userSessionNumber = getIncrementedCount(\n this._storage,\n MXL_USER_SESSION_NUMBER_KEY,\n this._diag,\n );\n state = createUserSessionState({\n inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,\n maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,\n now,\n previousUserSessionId: this._previousUserSessionId,\n userSessionNumber,\n });\n created = true;\n this._analyticsManager?.resetSessionAnalyticsForNewUserSession();\n }\n // Arm on a freshly created state, and on the page-reload case where a\n // New manager loads existing state and has no timer running yet.\n // UserSessionMaxEndTs is fixed at creation, so re-arming the same value\n // On every load/start call is wasteful.\n if (created || this._maxDurationTimeout === null) {\n this._setupMaxDurationTimer(state, now);\n }\n return { created, state };\n }\n\n /**\n * Bumps the part counter and arms the max-duration timer. Relies on\n * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,\n * so `getUserSessionAttributes()` is guaranteed non-null after this.\n */\n private _beginUserSessionForPartStart(): void {\n const now = this._perf.getNowMillis();\n const { state } = this._loadOrCreateUserSessionState(now);\n\n this._currentSessionPartNumber = getIncrementedCount(\n this._storage,\n MXL_SESSION_PART_NUMBER_KEY,\n this._diag,\n );\n\n this._state = {\n ...state,\n userSessionPartIndex: state.userSessionPartIndex + 1,\n // A part is active, so any pending inactivity deadline no longer\n // Applies; it gets re-armed when the part ends.\n inactivityDeadlineTs: null,\n };\n this._storeState();\n }\n\n /**\n * Records the inactivity deadline on the user-session row so the next\n * part start can detect lazy expiry. The max-duration timer stays valid\n * because userSessionMaxEndTs doesn't change between parts.\n */\n private _continueUserSessionAfterPartEnd(partEndTs: number): void {\n if (!this._state) {\n this._clearMaxDurationTimer();\n return;\n }\n\n // If the state row was present at part start but is gone now (user\n // Wiped site data, quota eviction, sibling tab cleared), don't\n // Resurrect it from memory. Drop in-memory state so the next part\n // Start creates a fresh user session; carry the just-ended id\n // Forward so the next session can back-link to it.\n // _hasStoredState gates this: if we never persisted in the first\n // Place, the in-memory copy stays authoritative.\n if (\n this._hasStoredState &&\n this._storage.getItem(MXL_USER_SESSION_STATE_KEY) === null\n ) {\n this._previousUserSessionId = this._state.userSessionId;\n this._state = null;\n this._clearMaxDurationTimer();\n return;\n }\n\n this._state = {\n ...this._state,\n inactivityDeadlineTs:\n partEndTs + this._state.inactivityTimeoutSeconds * 1000,\n };\n this._storeState();\n }\n\n /**\n * Ends the active part as final and starts a fresh part for the next\n * user session. State clearing for the engaged path is handled by\n * endSessionPartInternal's isFinal branch. When no part is active\n * (tab disengaged), the same state-clearing is performed inline so\n * the next engagement creates a fresh user session rather than\n * resuming the just-ended one.\n */\n private _rolloverUserSession(\n userSessionEndReason: UserSessionEndReason,\n ): void {\n if (this._sessionPartSpan) {\n this.endSessionPartInternal('user_session_ended', userSessionEndReason);\n this.startSessionPartInternal('user_session_rollover');\n return;\n }\n\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n }\n\n private _setupMaxDurationTimer(state: UserSessionState, now: number): void {\n this._clearMaxDurationTimer();\n\n const remaining = state.userSessionMaxEndTs - now;\n if (remaining <= 0) {\n return;\n }\n\n this._maxDurationTimeout = setTimeout(() => {\n this._maxDurationTimeout = null;\n this._rolloverUserSession('max_duration_reached');\n }, remaining);\n }\n\n /**\n * @internal Would be private but exposed for tests to simulate a page reload\n */\n public _clearMaxDurationTimer(): void {\n if (this._maxDurationTimeout !== null) {\n clearTimeout(this._maxDurationTimeout);\n this._maxDurationTimeout = null;\n }\n }\n\n /**\n * Detaches browser-activity listeners and clears the part-inactivity\n * timer. Intended for SDK teardown and tests; in production the manager\n * lives for the page's lifetime.\n */\n public _shutdown(): void {\n if (this._isShutdown) {\n return;\n }\n this._isShutdown = true;\n MXLUserSessionManager._testInstances.delete(this);\n this._onActivityThrottled.cancel();\n removeActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n this._clearSessionPartInactivityTimer();\n this._clearMaxDurationTimer();\n }\n\n private readonly _onActivity = (): void => {\n try {\n if (!isTabEngaged(this._visibilityDoc)) {\n return;\n }\n if (this._activeSessionPartId === null) {\n this.startSessionPartInternal('web_activity');\n return;\n }\n this._startSessionPartInactivityTimer();\n } catch (error) {\n this._diag.warn('Error handling activity event', error);\n }\n };\n\n // Tab visibility flipped (switch tabs, minimize, OS app switch). Drives\n // The engagement transition off the current visibilityState/hasFocus pair.\n private readonly _onVisibilityChange = (): void => {\n this._handleEngagementTransition('visibilitychange');\n };\n\n // Window focus arrived (alt-tab back, clicked into the document). hasFocus\n // Is now true; engagement transition resolves whether to start a part.\n private readonly _onFocus = (): void => {\n this._handleEngagementTransition('focus');\n };\n\n // Window focus lost (alt-tab away, clicked into DevTools or another window).\n // HasFocus is now false; engagement transition ends the active part.\n private readonly _onBlur = (): void => {\n this._handleEngagementTransition('blur');\n };\n\n // Initial page load OR BFCache restore. event.persisted only affects the\n // Debug source string; routing is via _handleEngagementTransition, which\n // Keys off engagement state and whether a part is currently active.\n private readonly _onPageShow = (event: PageTransitionEvent): void => {\n this._handleEngagementTransition(\n event.persisted ? 'pageshow-bfcache' : 'pageshow-initial',\n );\n };\n\n // Navigation away (hard nav, tab close) OR BFCache freeze. Both signal the\n // Page is about to stop running, so we always end the active part. Ending\n // The part flushes its span (and the spans batched against it in\n // MXLSessionPartBatchedSpanProcessor) through the export pipeline while\n // The page can still issue a keepalive fetch. On BFCache restore, pageshow\n // Will start a fresh part.\n private readonly _onPageHide = (event: PageTransitionEvent): void => {\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n const reason: SessionPartEndReason = event.persisted\n ? 'web_background'\n : 'web_hard_navigation';\n this._diag.debug(\n `page hiding (persisted=${event.persisted}); ending current part as ${reason}`,\n );\n this.endSessionPartInternal(reason);\n } catch (error) {\n this._diag.error(\n `Error ending session part on pagehide (persisted=${event.persisted})`,\n error,\n );\n }\n };\n\n private _handleEngagementTransition(source: string): void {\n try {\n const engaged = isTabEngaged(this._visibilityDoc);\n const active = this._activeSessionPartId !== null;\n if (!engaged && active) {\n this._diag.debug(`tab disengaged via ${source}; ending current part`);\n this.endSessionPartInternal('web_background');\n return;\n }\n if (engaged && !active) {\n this._diag.debug(`tab engaged via ${source}; starting new part`);\n this.startSessionPartInternal('web_foreground');\n return;\n }\n if (engaged && active) {\n // Redundant engagement event while a part is already active (browser\n // Quirk: an extra focus/visibility fire that isn't a real transition).\n // Re-arm the inactivity timer since the event still implies presence.\n this._startSessionPartInactivityTimer();\n }\n } catch (error) {\n this._diag.warn('Error handling engagement change', error);\n }\n }\n\n private readonly _onSessionPartInactivity = (): void => {\n this._sessionPartInactivityTimer = null;\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n this._diag.debug(\n 'inactivity timer fired; ending current part and user session',\n );\n this.endSessionPartInternal('inactivity', 'inactivity');\n } catch (error) {\n this._diag.warn('Error handling inactivity timer', error);\n }\n };\n\n private _startSessionPartInactivityTimer(): void {\n this._clearSessionPartInactivityTimer();\n this._sessionPartInactivityTimer = setTimeout(\n this._onSessionPartInactivity,\n this._inactivityTimeoutSeconds * 1000,\n );\n }\n\n private _clearSessionPartInactivityTimer(): void {\n if (this._sessionPartInactivityTimer !== null) {\n clearTimeout(this._sessionPartInactivityTimer);\n this._sessionPartInactivityTimer = null;\n }\n }\n\n private _addListener(list: (() => void)[], listener: () => void): () => void {\n list.push(listener);\n return () => {\n const i = list.indexOf(listener);\n if (i !== -1) {\n list.splice(i, 1);\n }\n };\n }\n\n private _fireListeners(list: (() => void)[], kind: string): void {\n for (const listener of list) {\n try {\n listener();\n } catch (error) {\n this._diag.warn(\n `Error while executing session part ${kind} listener`,\n error,\n );\n }\n }\n }\n\n private _storeState(): boolean {\n if (!this._state) {\n return false;\n }\n const stored = this._storage.setItem(\n MXL_USER_SESSION_STATE_KEY,\n JSON.stringify(this._state),\n );\n if (stored) {\n this._hasStoredState = true;\n }\n return stored;\n }\n\n private _removeFromPermanentProperties(bareKey: string): void {\n if (!(bareKey in this._permanentProperties)) {\n return;\n }\n const pruned = { ...this._permanentProperties };\n delete pruned[bareKey];\n this._permanentProperties = pruned;\n storePermanentProperties(this._storage, pruned);\n }\n\n private _removeFromUserSessionProperties(bareKey: string): void {\n if (!this._state || !(bareKey in this._state.userSessionProperties)) {\n return;\n }\n const pruned = { ...this._state.userSessionProperties };\n delete pruned[bareKey];\n this._state = {\n ...this._state,\n userSessionProperties: pruned,\n };\n this._storeState();\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { AnalyticsManagerInternal } from "../../api-analytics/manager/types.cjs";
1
2
  import { ExtendedSpan } from "../../api-traces/api/TraceAPI/types.cjs";
2
3
  import { PropertyOptions, SessionPartEndReason, SessionPartStartReason, UserSessionEndReason } from "../../api-sessions/manager/types.cjs";
3
4
  import { MXLUserSessionManagerArgs, UserSessionAttributes, UserSessionManagerInternal } from "./types.cjs";
@@ -43,6 +44,7 @@ declare class MXLUserSessionManager implements UserSessionManagerInternal {
43
44
  private readonly _tab;
44
45
  private readonly _navigationSource;
45
46
  private readonly _referrerScrubbedUrl?;
47
+ private _analyticsManager;
46
48
  constructor({
47
49
  config,
48
50
  diag: diagParam,
@@ -59,6 +61,7 @@ declare class MXLUserSessionManager implements UserSessionManagerInternal {
59
61
  }: MXLUserSessionManagerArgs);
60
62
  setTracerProvider(tracerProvider: TracerProvider): void;
61
63
  recordSDKStartupDuration(duration: number): void;
64
+ setAnalyticsManager(manager: AnalyticsManagerInternal | null): void;
62
65
  getUserSessionId(): string | null;
63
66
  getPreviousUserSessionId(): string | null;
64
67
  getUserSessionStartTime(): number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"MXLUserSessionManager.d.cts","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"mappings":";;;;;;;;AAoGA;;;cAAa,qBAAA,YAAiC,0BAAA;EAAA,wBACpB,cAAA;EAwDtB;EAAA,OArDY,wBAAA,CAAA;EAAA,QAON,MAAA;EAAA,QACA,sBAAA;EAAA,iBACS,8BAAA;EAAA,iBACA,yBAAA;EAAA,QACT,mBAAA;EAAA,QACA,WAAA;EAAA,QAEA,oBAAA;EAAA,QAIA,eAAA;EAAA,QAEA,oBAAA;EAAA,QAGA,yBAAA;EAAA,QACA,gBAAA;EAAA,QACA,wBAAA;EAAA,QAGA,UAAA;EAAA,QACA,sBAAA;EAAA,QACA,mBAAA;EAAA,iBACS,4BAAA;EAAA,iBACA,0BAAA;EAAA,QACT,OAAA;EAAA,iBAES,KAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAAA,iBACA,cAAA;EAAA,iBACA,aAAA;EAAA,iBACA,OAAA;EAAA,iBACA,eAAA;EAAA,iBACA,oBAAA;EAAA,QAGT,2BAAA;EAAA,iBACS,IAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,oBAAA;;IAGf,MAAA;IACA,IAAA,EAAM,SAAA;IACN,IAAA;IACA,aAAA;IACA,OAAA;IACA,YAAA;IACA,MAAA;IACA,kBAAA;IACA,cAAA;IACA,UAAA;IACA,QAAA;IACA;EAAA,GAGC,yBAAA;EA6DI,iBAAA,CAAkB,cAAA,EAAgB,cAAA;EA6BlC,wBAAA,CAAyB,QAAA;EAIzB,gBAAA,CAAA;EAIA,wBAAA,CAAA;EAMA,uBAAA,CAAA;EAIA,wBAAA,CAAA,GAA4B,qBAAA;EAqB5B,cAAA,CAAA;EAyBA,gBAAA,CAAA;EAIA,kBAAA,CAAA,GAAsB,YAAA;EAItB,wBAAA,CAAyB,MAAA,EAAQ,sBAAA;EAmEjC,sBAAA,CACL,MAAA,EAAQ,oBAAA,EACR,oBAAA,GAAuB,oBAAA;EA6ElB,aAAA,CAAc,IAAA;EAsBd,WAAA,CACL,WAAA,UACA,KAAA,UACA,OAAA,GAAU,eAAA;EAuDL,cAAA,CAAe,WAAA;EA9ZL;;;;;;EAgbV,wBAAA,CAAA,GAA4B,MAAA;EAO5B,0BAAA,CAA2B,GAAA;EAW3B,8BAAA,CAA+B,GAAA;EAK/B,6BAAA,CAA8B,QAAA;EAI9B,2BAAA,CAA4B,QAAA;EA9bjC;;;;;;EAAA,QAwcM,6BAAA;EArcN;;;;;EAAA,QA4eM,6BAAA;EAzeN;;;;;EAAA,QAkgBM,gCAAA;EA/fN;;;;;;;;EAAA,QAsiBM,oBAAA;EAAA,QAeA,sBAAA;EA/cD;;;EAgeA,sBAAA,CAAA;EAjcA;;;;;EA6cA,SAAA,CAAA;EAAA,iBAsBU,WAAA;EAAA,iBAiBA,mBAAA;EAAA,iBAMA,QAAA;EAAA,iBAMA,OAAA;EAAA,iBAOA,WAAA;EAAA,iBAYA,WAAA;EAAA,QAoBT,2BAAA;EAAA,iBAyBS,wBAAA;EAAA,QAeT,gCAAA;EAAA,QAQA,gCAAA;EAAA,QAOA,YAAA;EAAA,QAUA,cAAA;EAAA,QAaA,WAAA;EAAA,QAcA,8BAAA;EAAA,QAUA,gCAAA;AAAA"}
1
+ {"version":3,"file":"MXLUserSessionManager.d.cts","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"mappings":";;;;;;;;;AAqGA;;;cAAa,qBAAA,YAAiC,0BAAA;EAAA,wBACpB,cAAA;EAyDtB;EAAA,OAtDY,wBAAA,CAAA;EAAA,QAON,MAAA;EAAA,QACA,sBAAA;EAAA,iBACS,8BAAA;EAAA,iBACA,yBAAA;EAAA,QACT,mBAAA;EAAA,QACA,WAAA;EAAA,QAEA,oBAAA;EAAA,QAIA,eAAA;EAAA,QAEA,oBAAA;EAAA,QAGA,yBAAA;EAAA,QACA,gBAAA;EAAA,QACA,wBAAA;EAAA,QAGA,UAAA;EAAA,QACA,sBAAA;EAAA,QACA,mBAAA;EAAA,iBACS,4BAAA;EAAA,iBACA,0BAAA;EAAA,QACT,OAAA;EAAA,iBAES,KAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAAA,iBACA,cAAA;EAAA,iBACA,aAAA;EAAA,iBACA,OAAA;EAAA,iBACA,eAAA;EAAA,iBACA,oBAAA;EAAA,QAGT,2BAAA;EAAA,iBACS,IAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,oBAAA;EAAA,QACT,iBAAA;;IAGN,MAAA;IACA,IAAA,EAAM,SAAA;IACN,IAAA;IACA,aAAA;IACA,OAAA;IACA,YAAA;IACA,MAAA;IACA,kBAAA;IACA,cAAA;IACA,UAAA;IACA,QAAA;IACA;EAAA,GAGC,yBAAA;EA6DI,iBAAA,CAAkB,cAAA,EAAgB,cAAA;EA6BlC,wBAAA,CAAyB,QAAA;EAIzB,mBAAA,CAAoB,OAAA,EAAS,wBAAA;EAI7B,gBAAA,CAAA;EAIA,wBAAA,CAAA;EAMA,uBAAA,CAAA;EAIA,wBAAA,CAAA,GAA4B,qBAAA;EAqB5B,cAAA,CAAA;EAyBA,gBAAA,CAAA;EAIA,kBAAA,CAAA,GAAsB,YAAA;EAItB,wBAAA,CAAyB,MAAA,EAAQ,sBAAA;EAmEjC,sBAAA,CACL,MAAA,EAAQ,oBAAA,EACR,oBAAA,GAAuB,oBAAA;EAqFlB,aAAA,CAAc,IAAA;EAsBd,WAAA,CACL,WAAA,UACA,KAAA,UACA,OAAA,GAAU,eAAA;EAuDL,cAAA,CAAe,WAAA;EA1aL;;;;;;EA4bV,wBAAA,CAAA,GAA4B,MAAA;EAO5B,0BAAA,CAA2B,GAAA;EAW3B,8BAAA,CAA+B,GAAA;EAK/B,6BAAA,CAA8B,QAAA;EAI9B,2BAAA,CAA4B,QAAA;EA1cjC;;;;;;EAAA,QAodM,6BAAA;EAjdN;;;;;EAAA,QAyfM,6BAAA;EAtfN;;;;;EAAA,QA+gBM,gCAAA;EA5gBN;;;;;;;;EAAA,QAmjBM,oBAAA;EAAA,QAeA,sBAAA;EAhe4B;;;EAif7B,sBAAA,CAAA;EAneA;;;;;EA+eA,SAAA,CAAA;EAAA,iBAsBU,WAAA;EAAA,iBAiBA,mBAAA;EAAA,iBAMA,QAAA;EAAA,iBAMA,OAAA;EAAA,iBAOA,WAAA;EAAA,iBAYA,WAAA;EAAA,QAoBT,2BAAA;EAAA,iBAyBS,wBAAA;EAAA,QAeT,gCAAA;EAAA,QAQA,gCAAA;EAAA,QAOA,YAAA;EAAA,QAUA,cAAA;EAAA,QAaA,WAAA;EAAA,QAcA,8BAAA;EAAA,QAUA,gCAAA;AAAA"}
@@ -1,3 +1,4 @@
1
+ import { AnalyticsManagerInternal } from "../../api-analytics/manager/types.js";
1
2
  import { ExtendedSpan } from "../../api-traces/api/TraceAPI/types.js";
2
3
  import { PropertyOptions, SessionPartEndReason, SessionPartStartReason, UserSessionEndReason } from "../../api-sessions/manager/types.js";
3
4
  import { MXLUserSessionManagerArgs, UserSessionAttributes, UserSessionManagerInternal } from "./types.js";
@@ -43,6 +44,7 @@ declare class MXLUserSessionManager implements UserSessionManagerInternal {
43
44
  private readonly _tab;
44
45
  private readonly _navigationSource;
45
46
  private readonly _referrerScrubbedUrl?;
47
+ private _analyticsManager;
46
48
  constructor({
47
49
  config,
48
50
  diag: diagParam,
@@ -59,6 +61,7 @@ declare class MXLUserSessionManager implements UserSessionManagerInternal {
59
61
  }: MXLUserSessionManagerArgs);
60
62
  setTracerProvider(tracerProvider: TracerProvider): void;
61
63
  recordSDKStartupDuration(duration: number): void;
64
+ setAnalyticsManager(manager: AnalyticsManagerInternal | null): void;
62
65
  getUserSessionId(): string | null;
63
66
  getPreviousUserSessionId(): string | null;
64
67
  getUserSessionStartTime(): number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"MXLUserSessionManager.d.ts","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"mappings":";;;;;;;;AAoGA;;;cAAa,qBAAA,YAAiC,0BAAA;EAAA,wBACpB,cAAA;EAwDtB;EAAA,OArDY,wBAAA,CAAA;EAAA,QAON,MAAA;EAAA,QACA,sBAAA;EAAA,iBACS,8BAAA;EAAA,iBACA,yBAAA;EAAA,QACT,mBAAA;EAAA,QACA,WAAA;EAAA,QAEA,oBAAA;EAAA,QAIA,eAAA;EAAA,QAEA,oBAAA;EAAA,QAGA,yBAAA;EAAA,QACA,gBAAA;EAAA,QACA,wBAAA;EAAA,QAGA,UAAA;EAAA,QACA,sBAAA;EAAA,QACA,mBAAA;EAAA,iBACS,4BAAA;EAAA,iBACA,0BAAA;EAAA,QACT,OAAA;EAAA,iBAES,KAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAAA,iBACA,cAAA;EAAA,iBACA,aAAA;EAAA,iBACA,OAAA;EAAA,iBACA,eAAA;EAAA,iBACA,oBAAA;EAAA,QAGT,2BAAA;EAAA,iBACS,IAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,oBAAA;;IAGf,MAAA;IACA,IAAA,EAAM,SAAA;IACN,IAAA;IACA,aAAA;IACA,OAAA;IACA,YAAA;IACA,MAAA;IACA,kBAAA;IACA,cAAA;IACA,UAAA;IACA,QAAA;IACA;EAAA,GAGC,yBAAA;EA6DI,iBAAA,CAAkB,cAAA,EAAgB,cAAA;EA6BlC,wBAAA,CAAyB,QAAA;EAIzB,gBAAA,CAAA;EAIA,wBAAA,CAAA;EAMA,uBAAA,CAAA;EAIA,wBAAA,CAAA,GAA4B,qBAAA;EAqB5B,cAAA,CAAA;EAyBA,gBAAA,CAAA;EAIA,kBAAA,CAAA,GAAsB,YAAA;EAItB,wBAAA,CAAyB,MAAA,EAAQ,sBAAA;EAmEjC,sBAAA,CACL,MAAA,EAAQ,oBAAA,EACR,oBAAA,GAAuB,oBAAA;EA6ElB,aAAA,CAAc,IAAA;EAsBd,WAAA,CACL,WAAA,UACA,KAAA,UACA,OAAA,GAAU,eAAA;EAuDL,cAAA,CAAe,WAAA;EA9ZL;;;;;;EAgbV,wBAAA,CAAA,GAA4B,MAAA;EAO5B,0BAAA,CAA2B,GAAA;EAW3B,8BAAA,CAA+B,GAAA;EAK/B,6BAAA,CAA8B,QAAA;EAI9B,2BAAA,CAA4B,QAAA;EA9bjC;;;;;;EAAA,QAwcM,6BAAA;EArcN;;;;;EAAA,QA4eM,6BAAA;EAzeN;;;;;EAAA,QAkgBM,gCAAA;EA/fN;;;;;;;;EAAA,QAsiBM,oBAAA;EAAA,QAeA,sBAAA;EA/cD;;;EAgeA,sBAAA,CAAA;EAjcA;;;;;EA6cA,SAAA,CAAA;EAAA,iBAsBU,WAAA;EAAA,iBAiBA,mBAAA;EAAA,iBAMA,QAAA;EAAA,iBAMA,OAAA;EAAA,iBAOA,WAAA;EAAA,iBAYA,WAAA;EAAA,QAoBT,2BAAA;EAAA,iBAyBS,wBAAA;EAAA,QAeT,gCAAA;EAAA,QAQA,gCAAA;EAAA,QAOA,YAAA;EAAA,QAUA,cAAA;EAAA,QAaA,WAAA;EAAA,QAcA,8BAAA;EAAA,QAUA,gCAAA;AAAA"}
1
+ {"version":3,"file":"MXLUserSessionManager.d.ts","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"mappings":";;;;;;;;;AAqGA;;;cAAa,qBAAA,YAAiC,0BAAA;EAAA,wBACpB,cAAA;EAyDtB;EAAA,OAtDY,wBAAA,CAAA;EAAA,QAON,MAAA;EAAA,QACA,sBAAA;EAAA,iBACS,8BAAA;EAAA,iBACA,yBAAA;EAAA,QACT,mBAAA;EAAA,QACA,WAAA;EAAA,QAEA,oBAAA;EAAA,QAIA,eAAA;EAAA,QAEA,oBAAA;EAAA,QAGA,yBAAA;EAAA,QACA,gBAAA;EAAA,QACA,wBAAA;EAAA,QAGA,UAAA;EAAA,QACA,sBAAA;EAAA,QACA,mBAAA;EAAA,iBACS,4BAAA;EAAA,iBACA,0BAAA;EAAA,QACT,OAAA;EAAA,iBAES,KAAA;EAAA,iBACA,KAAA;EAAA,iBACA,QAAA;EAAA,iBACA,cAAA;EAAA,iBACA,aAAA;EAAA,iBACA,OAAA;EAAA,iBACA,eAAA;EAAA,iBACA,oBAAA;EAAA,QAGT,2BAAA;EAAA,iBACS,IAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,oBAAA;EAAA,QACT,iBAAA;;IAGN,MAAA;IACA,IAAA,EAAM,SAAA;IACN,IAAA;IACA,aAAA;IACA,OAAA;IACA,YAAA;IACA,MAAA;IACA,kBAAA;IACA,cAAA;IACA,UAAA;IACA,QAAA;IACA;EAAA,GAGC,yBAAA;EA6DI,iBAAA,CAAkB,cAAA,EAAgB,cAAA;EA6BlC,wBAAA,CAAyB,QAAA;EAIzB,mBAAA,CAAoB,OAAA,EAAS,wBAAA;EAI7B,gBAAA,CAAA;EAIA,wBAAA,CAAA;EAMA,uBAAA,CAAA;EAIA,wBAAA,CAAA,GAA4B,qBAAA;EAqB5B,cAAA,CAAA;EAyBA,gBAAA,CAAA;EAIA,kBAAA,CAAA,GAAsB,YAAA;EAItB,wBAAA,CAAyB,MAAA,EAAQ,sBAAA;EAmEjC,sBAAA,CACL,MAAA,EAAQ,oBAAA,EACR,oBAAA,GAAuB,oBAAA;EAqFlB,aAAA,CAAc,IAAA;EAsBd,WAAA,CACL,WAAA,UACA,KAAA,UACA,OAAA,GAAU,eAAA;EAuDL,cAAA,CAAe,WAAA;EA1aL;;;;;;EA4bV,wBAAA,CAAA,GAA4B,MAAA;EAO5B,0BAAA,CAA2B,GAAA;EAW3B,8BAAA,CAA+B,GAAA;EAK/B,6BAAA,CAA8B,QAAA;EAI9B,2BAAA,CAA4B,QAAA;EA1cjC;;;;;;EAAA,QAodM,6BAAA;EAjdN;;;;;EAAA,QAyfM,6BAAA;EAtfN;;;;;EAAA,QA+gBM,gCAAA;EA5gBN;;;;;;;;EAAA,QAmjBM,oBAAA;EAAA,QAeA,sBAAA;EAhe4B;;;EAif7B,sBAAA,CAAA;EAneA;;;;;EA+eA,SAAA,CAAA;EAAA,iBAsBU,WAAA;EAAA,iBAiBA,mBAAA;EAAA,iBAMA,QAAA;EAAA,iBAMA,OAAA;EAAA,iBAOA,WAAA;EAAA,iBAYA,WAAA;EAAA,QAoBT,2BAAA;EAAA,iBAyBS,wBAAA;EAAA,QAeT,gCAAA;EAAA,QAQA,gCAAA;EAAA,QAOA,YAAA;EAAA,QAUA,cAAA;EAAA,QAaA,WAAA;EAAA,QAcA,8BAAA;EAAA,QAUA,gCAAA;AAAA"}
@@ -54,6 +54,7 @@ var MXLUserSessionManager = class MXLUserSessionManager {
54
54
  _tab;
55
55
  _navigationSource;
56
56
  _referrerScrubbedUrl;
57
+ _analyticsManager = null;
57
58
  constructor({ config, diag: diagParam, perf, visibilityDoc, storage, limitManager, target = window, activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS, activityEvents = DEFAULT_ACTIVITY_EVENTS, tabStorage, referrer = typeof document !== "undefined" ? document.referrer : "", navigationPerformance = typeof window !== "undefined" ? window.performance : { getEntriesByType: () => [] } }) {
58
59
  this._diag = diagParam ?? diag.createComponentLogger({ namespace: "MXLUserSessionManager" });
59
60
  this._perf = perf;
@@ -118,6 +119,9 @@ var MXLUserSessionManager = class MXLUserSessionManager {
118
119
  recordSDKStartupDuration(duration) {
119
120
  this._sdkStartupDuration = Math.ceil(duration);
120
121
  }
122
+ setAnalyticsManager(manager) {
123
+ this._analyticsManager = manager;
124
+ }
121
125
  getUserSessionId() {
122
126
  return this._state?.userSessionId ?? null;
123
127
  }
@@ -226,6 +230,10 @@ var MXLUserSessionManager = class MXLUserSessionManager {
226
230
  endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;
227
231
  if (userSessionEndReason) endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] = userSessionEndReason;
228
232
  }
233
+ if (this._analyticsManager) {
234
+ Object.assign(endAttrs, this._analyticsManager.buildSessionPartAnalyticsAttributes());
235
+ this._analyticsManager.finalizeSessionPartAnalytics();
236
+ }
229
237
  const propertyAttrs = {};
230
238
  for (const [bareKey, value] of Object.entries(this.getSessionPartProperties())) propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;
231
239
  try {
@@ -349,6 +357,7 @@ var MXLUserSessionManager = class MXLUserSessionManager {
349
357
  userSessionNumber
350
358
  });
351
359
  created = true;
360
+ this._analyticsManager?.resetSessionAnalyticsForNewUserSession();
352
361
  }
353
362
  if (created || this._maxDurationTimeout === null) this._setupMaxDurationTimer(state, now);
354
363
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"MXLUserSessionManager.js","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"sourcesContent":["import type {\n Attributes,\n DiagLogger,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n ATTR_SESSION_ID,\n ATTR_SESSION_PREVIOUS_ID,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport type {\n PropertyOptions,\n SessionPartEndReason,\n SessionPartStartReason,\n UserSessionEndReason,\n} from '../../api-sessions/manager/types';\nimport type { ExtendedSpan } from '../../api-traces/api/TraceAPI/types';\nimport type { VisibilityStateDocument } from '../../common/types';\nimport {\n KEY_MXL_COLD_START,\n KEY_MXL_EXPERIENCE_ID,\n KEY_MXL_IS_FINAL_SESSION_PART,\n KEY_MXL_NAVIGATION_SOURCE,\n KEY_MXL_REFERRER_URL,\n KEY_MXL_SDK_STARTUP_DURATION,\n KEY_MXL_SESSION_PART_END_REASON,\n KEY_MXL_SESSION_PART_ID,\n KEY_MXL_SESSION_PART_NUMBER,\n KEY_MXL_SESSION_PART_START_REASON,\n KEY_MXL_SOURCE_TAB_ID,\n KEY_MXL_STATE,\n KEY_MXL_TAB_ID,\n KEY_MXL_TYPE,\n KEY_MXL_USER_SESSION_ID,\n KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS,\n KEY_MXL_USER_SESSION_NUMBER,\n KEY_MXL_USER_SESSION_PART_INDEX,\n KEY_MXL_USER_SESSION_PREVIOUS_ID,\n KEY_MXL_USER_SESSION_START_TS,\n KEY_MXL_USER_SESSION_TERMINATION_REASON,\n KEY_PREFIX_MXL_PROPERTIES,\n MXL_STATES,\n MXL_TYPES,\n} from '../../constants/attributes';\nimport { clampNumber } from '../../utils/clampNumber';\nimport { generateUUID } from '../../utils/generateUUID';\nimport { getIncrementedCount } from '../../utils/getIncrementedCount';\nimport { getVisibilityState } from '../../utils/getVisibilityState';\nimport type { NamespacedStorage } from '../../utils/NamespacedStorage/NamespacedStorage';\nimport type { PerformanceManager } from '../../utils/PerformanceManager/types';\nimport { throttle } from '../../utils/throttle';\nimport type { ThrottledFunction } from '../../utils/throttle';\nimport type { TimeoutRef } from '../../utils/timeout/types';\nimport type { LimitManagerInternal } from '../MXLLimitManager/types';\nimport { MXLExtendedSpan } from '../MXLTraceManager/MXLExtendedSpan';\nimport {\n DEFAULT_ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_THROTTLE_MS,\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n END_USER_SESSION_COOLDOWN_MS,\n MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MAX_USER_SESSION_MAX_DURATION_SECONDS,\n MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MIN_USER_SESSION_MAX_DURATION_SECONDS,\n MXL_LAST_END_USER_SESSION_TS_KEY,\n MXL_SESSION_PART_NUMBER_KEY,\n MXL_USER_SESSION_NUMBER_KEY,\n MXL_USER_SESSION_STATE_KEY,\n SESSION_PART_SPAN_NAME,\n} from './constants';\nimport type {\n MXLUserSessionManagerArgs,\n NavigationSource,\n Tab,\n UserSessionAttributes,\n UserSessionManagerInternal,\n UserSessionState,\n} from './types';\nimport {\n addActivityListeners,\n isTabEngaged,\n removeActivityListeners,\n} from './utils/activity';\nimport {\n createUserSessionState,\n isUserSessionExpired,\n readPermanentProperties,\n readUserSessionState,\n storePermanentProperties,\n} from './utils/state';\nimport { initTabContext, setupNewTabClickListeners } from './utils/tabTracking';\n\n/**\n * Parts are engagement-gated (visible AND focused), so only one part can\n * be active at a time. That mutex lets us treat storage as a\n * plain shared row read on engagement and written on changes.\n */\nexport class MXLUserSessionManager implements UserSessionManagerInternal {\n private static readonly _testInstances = new Set<MXLUserSessionManager>();\n\n /** @internal Test-only helper to tear down leaked managers between tests. */\n public static shutdownAllTestInstances(): void {\n for (const manager of MXLUserSessionManager._testInstances) {\n manager._shutdown();\n }\n MXLUserSessionManager._testInstances.clear();\n }\n\n private _state: UserSessionState | null = null;\n private _previousUserSessionId: string | null = null;\n private readonly _maxUserSessionDurationSeconds: number;\n private readonly _inactivityTimeoutSeconds: number;\n private _maxDurationTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isShutdown = false;\n // Bare keys; the wire-format prefix is applied at stamp time.\n private _permanentProperties: Record<string, string> = {};\n // Distinguishes \"another tab wiped storage after we wrote\" from \"we\n // Never managed to write in the first place\"; see\n // _continueUserSessionAfterPartEnd.\n private _hasStoredState = false;\n\n private _activeSessionPartId: string | null = null;\n // Snapshotted at part start so a concurrent bump in another tab doesn't\n // Shift this part's value before its span ends.\n private _currentSessionPartNumber: number | null = null;\n private _sessionPartSpan: ExtendedSpan | null = null;\n private _activeSessionPartCounts: Record<string, number> | null = null;\n // Marks the first part of the page lifetime so it can be reported as a\n // Cold start.\n private _coldStart = true;\n private _nextSessionPartCounts: Record<string, number> = {};\n private _sdkStartupDuration = 0;\n private readonly _sessionPartStartedListeners: (() => void)[] = [];\n private readonly _sessionPartEndedListeners: (() => void)[] = [];\n private _tracer: Tracer;\n\n private readonly _diag: DiagLogger;\n private readonly _perf: PerformanceManager;\n private readonly _storage: NamespacedStorage;\n private readonly _visibilityDoc: VisibilityStateDocument;\n private readonly _limitManager: LimitManagerInternal;\n private readonly _target: EventTarget;\n private readonly _activityEvents: readonly string[];\n private readonly _onActivityThrottled: ThrottledFunction<\n (event: Event) => void\n >;\n private _sessionPartInactivityTimer: TimeoutRef | null = null;\n private readonly _tab: Tab;\n private readonly _navigationSource: NavigationSource;\n private readonly _referrerScrubbedUrl?: string;\n\n public constructor({\n config,\n diag: diagParam,\n perf,\n visibilityDoc,\n storage,\n limitManager,\n target = window,\n activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS,\n activityEvents = DEFAULT_ACTIVITY_EVENTS,\n tabStorage,\n referrer = typeof document !== 'undefined' ? document.referrer : '',\n navigationPerformance = typeof window !== 'undefined'\n ? window.performance\n : { getEntriesByType: () => [] },\n }: MXLUserSessionManagerArgs) {\n this._diag =\n diagParam ??\n diag.createComponentLogger({\n namespace: 'MXLUserSessionManager',\n });\n this._perf = perf;\n this._visibilityDoc = visibilityDoc;\n this._storage = storage;\n this._limitManager = limitManager;\n this._permanentProperties = readPermanentProperties(\n this._storage,\n this._diag,\n );\n this._tracer = trace.getTracer('mxl-web-sdk-session-parts');\n this._target = target;\n this._activityEvents = activityEvents;\n this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);\n\n const maxUserSessionDurationSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_MAX_DURATION_SECONDS,\n min: MIN_USER_SESSION_MAX_DURATION_SECONDS,\n value: config?.maxUserSessionDurationSeconds,\n });\n const inactivityTimeoutSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n min: MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n value: config?.inactivityTimeoutSeconds,\n });\n\n this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;\n if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) {\n this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;\n } else {\n this._diag.warn(\n `inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) ` +\n `exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); ` +\n `falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`,\n );\n this._inactivityTimeoutSeconds =\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;\n }\n\n const tabContext = initTabContext({\n diag: this._diag,\n localStorage: storage,\n navigationPerformance,\n referrer,\n sessionStorage: tabStorage,\n });\n this._tab = tabContext.tab;\n this._navigationSource = tabContext.navigationSource;\n this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;\n setupNewTabClickListeners(this._tab, storage, this._diag);\n MXLUserSessionManager._testInstances.add(this);\n }\n\n public setTracerProvider(tracerProvider: TracerProvider): void {\n this._tracer = tracerProvider.getTracer('mxl-web-sdk-session-parts');\n // Listeners attach here rather than in the constructor so that tests\n // That construct a manager without going through SDK init don't\n // Pollute window with listeners, and so that browser-activity-driven\n // Parts only start once a real tracer is wired.\n addActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n // Eager state init so getUserSessionId() returns a real id before the\n // First part starts, and so other tabs see the row when we create a\n // Fresh session here.\n const { state, created } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = state;\n if (created) {\n this._storeState();\n }\n }\n\n public recordSDKStartupDuration(duration: number): void {\n this._sdkStartupDuration = Math.ceil(duration);\n }\n\n public getUserSessionId(): string | null {\n return this._state?.userSessionId ?? null;\n }\n\n public getPreviousUserSessionId(): string | null {\n // Fall back to in-memory for the brief window during user-session end\n // Where storage is cleared but the just-ended id is still held.\n return this._state?.previousUserSessionId ?? this._previousUserSessionId;\n }\n\n public getUserSessionStartTime(): number | null {\n return this._state?.userSessionStartTs ?? null;\n }\n\n public getUserSessionAttributes(): UserSessionAttributes | null {\n if (!this._state) {\n return null;\n }\n const previousUserSessionId = this.getPreviousUserSessionId() ?? '';\n return {\n [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,\n [ATTR_SESSION_ID]: this._state.userSessionId,\n [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,\n [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,\n [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,\n [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,\n [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]:\n this._state.maxUserSessionDurationSeconds,\n [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]:\n this._state.inactivityTimeoutSeconds,\n };\n }\n\n public endUserSession(): void {\n if (!this._state) {\n this._diag.debug(\n 'Trying to end user session, but there is no active session. This is a no-op.',\n );\n return;\n }\n\n const now = this._perf.getNowMillis();\n const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);\n const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);\n if (\n Number.isFinite(lastEndTs) &&\n now - lastEndTs < END_USER_SESSION_COOLDOWN_MS\n ) {\n this._diag.warn(\n 'endUserSession called within cooldown period, ignoring.',\n );\n return;\n }\n\n this._rolloverUserSession('manual');\n this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));\n }\n\n public getSessionPartId(): string | null {\n return this._activeSessionPartId;\n }\n\n public getSessionPartSpan(): ExtendedSpan | null {\n return this._sessionPartSpan;\n }\n\n public startSessionPartInternal(reason: SessionPartStartReason): void {\n if (this._sessionPartSpan) {\n this._diag.warn(\n `startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`,\n );\n return;\n }\n\n // Parts are foreground-only: a part corresponds to a tab that is both\n // Visible AND focused.\n if (\n getVisibilityState(this._visibilityDoc) === MXL_STATES.Background ||\n !this._visibilityDoc.hasFocus()\n ) {\n this._diag.debug(\n `skipping session part start (reason: ${reason}) because the tab is not engaged`,\n );\n return;\n }\n\n const activeSessionPartId = generateUUID();\n const previouslyRecordedCounts = this._nextSessionPartCounts;\n\n this._beginUserSessionForPartStart();\n\n const attributes: Attributes = {\n ...this.getUserSessionAttributes(),\n [KEY_MXL_TYPE]: MXL_TYPES.SessionPart,\n [KEY_MXL_STATE]: MXL_STATES.Foreground,\n [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,\n [KEY_MXL_SESSION_PART_START_REASON]: reason,\n [KEY_MXL_COLD_START]: this._coldStart,\n [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,\n [KEY_MXL_TAB_ID]: this._tab.tabId,\n [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,\n ...previouslyRecordedCounts,\n };\n\n if (this._referrerScrubbedUrl) {\n attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;\n }\n if (this._tab.sourceTabId) {\n attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;\n }\n\n this._activeSessionPartId = activeSessionPartId;\n let span: MXLExtendedSpan;\n try {\n span = new MXLExtendedSpan(\n this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }),\n );\n } catch (error) {\n this._activeSessionPartId = null;\n this._diag.error('Error starting session part span', error);\n return;\n }\n\n this._activeSessionPartCounts = {};\n this._nextSessionPartCounts = {};\n this._sessionPartSpan = span;\n this._coldStart = false;\n\n this._startSessionPartInactivityTimer();\n\n this._fireListeners(this._sessionPartStartedListeners, 'started');\n }\n\n public endSessionPartInternal(\n reason: SessionPartEndReason,\n userSessionEndReason?: UserSessionEndReason | null,\n ): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to end a session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n this._clearSessionPartInactivityTimer();\n\n const isFinal = reason === 'user_session_ended' || reason === 'inactivity';\n\n // Capture the end stamp upfront. SpanProcessor.onEnd can run unbounded\n // And must not push it forward.\n const partEndTs = this._perf.getNowMillis();\n const span = this._sessionPartSpan;\n try {\n const endAttrs: Attributes = {\n [KEY_MXL_SESSION_PART_END_REASON]: reason,\n ...this._activeSessionPartCounts,\n ...this._limitManager.getDiagnosticCounts(),\n [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration,\n };\n if (isFinal) {\n endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;\n if (userSessionEndReason) {\n endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] =\n userSessionEndReason;\n }\n }\n\n const propertyAttrs: Attributes = {};\n for (const [bareKey, value] of Object.entries(\n this.getSessionPartProperties(),\n )) {\n propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;\n }\n\n try {\n span.setAttributes({\n ...propertyAttrs,\n ...endAttrs,\n });\n } catch (error) {\n this._diag.warn(\n 'Error setting end attributes on session part span; ending span without them',\n error,\n );\n }\n } finally {\n // Fire listeners after end attributes are stamped (so subscribers can\n // Read them) and before span.end() (so anything they emit still\n // Attaches to the part that is conceptually still active).\n this._fireListeners(this._sessionPartEndedListeners, 'ended');\n try {\n span.end(partEndTs);\n } catch (error) {\n this._diag.warn('Error ending session part span', error);\n }\n this._sessionPartSpan = null;\n this._activeSessionPartId = null;\n this._activeSessionPartCounts = null;\n this._currentSessionPartNumber = null;\n this._limitManager.reset();\n }\n\n if (isFinal) {\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n } else {\n this._continueUserSessionAfterPartEnd(partEndTs);\n }\n }\n\n public addBreadcrumb(name: string): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to add breadcrumb, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);\n if (limitedBreadcrumb === 'dropped') {\n return;\n }\n\n this._sessionPartSpan.addEvent(\n 'mxl-breadcrumb',\n {\n message: limitedBreadcrumb.name,\n },\n this._perf.getNowMillis(),\n );\n }\n\n public addProperty(\n propertyKey: string,\n value: string,\n options?: PropertyOptions,\n ): void {\n const limitedSessionProperty = this._limitManager.limitSessionProperty(\n propertyKey,\n value,\n );\n\n if (limitedSessionProperty === 'dropped') {\n return;\n }\n\n const bareKey = limitedSessionProperty.key;\n const bareValue = limitedSessionProperty.value;\n\n if (options?.lifespan === 'permanent') {\n const candidate = {\n ...this._permanentProperties,\n [bareKey]: bareValue,\n };\n // Reject the write if storage is unavailable: a property that can't\n // Persist would silently diverge from what other tabs (and the next\n // Page load) see, which is worse than no property at all.\n if (!storePermanentProperties(this._storage, candidate)) {\n this._diag.warn(\n 'Storage unavailable; rejecting permanent property write.',\n );\n return;\n }\n this._permanentProperties = candidate;\n this._removeFromUserSessionProperties(bareKey);\n return;\n }\n\n // Ensure a state row exists so the write has somewhere to land;\n // AddProperty can fire before any part has started.\n const { state } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = {\n ...state,\n userSessionProperties: {\n ...state.userSessionProperties,\n [bareKey]: bareValue,\n },\n };\n if (!this._storeState()) {\n // Roll back so callers don't observe a value that won't persist.\n // The user session itself stays in memory.\n this._state = state;\n this._diag.warn(\n 'Storage unavailable; rejecting user-session property write.',\n );\n }\n }\n\n public removeProperty(propertyKey: string): void {\n const bareKey = this._limitManager.truncateString(\n 'session_property_key',\n propertyKey,\n );\n\n // Try both stores so a key that was flipped between scopes doesn't\n // Linger in the other one.\n this._removeFromPermanentProperties(bareKey);\n this._removeFromUserSessionProperties(bareKey);\n }\n\n /**\n * Bare-keyed view of properties for the active part. User-session-scoped\n * entries shadow permanent ones, matching the cross-scope flip rule\n * enforced in `addProperty`. Callers apply the wire-format prefix at\n * stamp time.\n */\n public getSessionPartProperties(): Record<string, string> {\n return {\n ...this._permanentProperties,\n ...this._state?.userSessionProperties,\n };\n }\n\n public incrSessionPartCountForKey(key: string): void {\n if (!this._sessionPartSpan || !this._activeSessionPartCounts) {\n this._diag.debug(\n 'trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n this._activeSessionPartCounts[key] =\n (this._activeSessionPartCounts[key] || 0) + 1;\n }\n\n public incrNextSessionPartCountForKey(key: string): void {\n this._nextSessionPartCounts[key] =\n (this._nextSessionPartCounts[key] || 0) + 1;\n }\n\n public addSessionPartStartedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartStartedListeners, listener);\n }\n\n public addSessionPartEndedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartEndedListeners, listener);\n }\n\n /**\n * Returns the persisted user-session state, rotating to a fresh one if\n * the persisted row is missing or expired. Arms the max-duration timer\n * when needed. The caller is responsible for assigning the result to\n * `_state` and for persisting (the helper does not write to storage).\n */\n private _loadOrCreateUserSessionState(now: number): {\n state: UserSessionState;\n created: boolean;\n } {\n let state = readUserSessionState(this._storage, this._diag);\n let created = false;\n if (!state || isUserSessionExpired(state, now)) {\n if (state) {\n this._previousUserSessionId = state.userSessionId;\n }\n const userSessionNumber = getIncrementedCount(\n this._storage,\n MXL_USER_SESSION_NUMBER_KEY,\n this._diag,\n );\n state = createUserSessionState({\n inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,\n maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,\n now,\n previousUserSessionId: this._previousUserSessionId,\n userSessionNumber,\n });\n created = true;\n }\n // Arm on a freshly created state, and on the page-reload case where a\n // New manager loads existing state and has no timer running yet.\n // UserSessionMaxEndTs is fixed at creation, so re-arming the same value\n // On every load/start call is wasteful.\n if (created || this._maxDurationTimeout === null) {\n this._setupMaxDurationTimer(state, now);\n }\n return { created, state };\n }\n\n /**\n * Bumps the part counter and arms the max-duration timer. Relies on\n * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,\n * so `getUserSessionAttributes()` is guaranteed non-null after this.\n */\n private _beginUserSessionForPartStart(): void {\n const now = this._perf.getNowMillis();\n const { state } = this._loadOrCreateUserSessionState(now);\n\n this._currentSessionPartNumber = getIncrementedCount(\n this._storage,\n MXL_SESSION_PART_NUMBER_KEY,\n this._diag,\n );\n\n this._state = {\n ...state,\n userSessionPartIndex: state.userSessionPartIndex + 1,\n // A part is active, so any pending inactivity deadline no longer\n // Applies; it gets re-armed when the part ends.\n inactivityDeadlineTs: null,\n };\n this._storeState();\n }\n\n /**\n * Records the inactivity deadline on the user-session row so the next\n * part start can detect lazy expiry. The max-duration timer stays valid\n * because userSessionMaxEndTs doesn't change between parts.\n */\n private _continueUserSessionAfterPartEnd(partEndTs: number): void {\n if (!this._state) {\n this._clearMaxDurationTimer();\n return;\n }\n\n // If the state row was present at part start but is gone now (user\n // Wiped site data, quota eviction, sibling tab cleared), don't\n // Resurrect it from memory. Drop in-memory state so the next part\n // Start creates a fresh user session; carry the just-ended id\n // Forward so the next session can back-link to it.\n // _hasStoredState gates this: if we never persisted in the first\n // Place, the in-memory copy stays authoritative.\n if (\n this._hasStoredState &&\n this._storage.getItem(MXL_USER_SESSION_STATE_KEY) === null\n ) {\n this._previousUserSessionId = this._state.userSessionId;\n this._state = null;\n this._clearMaxDurationTimer();\n return;\n }\n\n this._state = {\n ...this._state,\n inactivityDeadlineTs:\n partEndTs + this._state.inactivityTimeoutSeconds * 1000,\n };\n this._storeState();\n }\n\n /**\n * Ends the active part as final and starts a fresh part for the next\n * user session. State clearing for the engaged path is handled by\n * endSessionPartInternal's isFinal branch. When no part is active\n * (tab disengaged), the same state-clearing is performed inline so\n * the next engagement creates a fresh user session rather than\n * resuming the just-ended one.\n */\n private _rolloverUserSession(\n userSessionEndReason: UserSessionEndReason,\n ): void {\n if (this._sessionPartSpan) {\n this.endSessionPartInternal('user_session_ended', userSessionEndReason);\n this.startSessionPartInternal('user_session_rollover');\n return;\n }\n\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n }\n\n private _setupMaxDurationTimer(state: UserSessionState, now: number): void {\n this._clearMaxDurationTimer();\n\n const remaining = state.userSessionMaxEndTs - now;\n if (remaining <= 0) {\n return;\n }\n\n this._maxDurationTimeout = setTimeout(() => {\n this._maxDurationTimeout = null;\n this._rolloverUserSession('max_duration_reached');\n }, remaining);\n }\n\n /**\n * @internal Would be private but exposed for tests to simulate a page reload\n */\n public _clearMaxDurationTimer(): void {\n if (this._maxDurationTimeout !== null) {\n clearTimeout(this._maxDurationTimeout);\n this._maxDurationTimeout = null;\n }\n }\n\n /**\n * Detaches browser-activity listeners and clears the part-inactivity\n * timer. Intended for SDK teardown and tests; in production the manager\n * lives for the page's lifetime.\n */\n public _shutdown(): void {\n if (this._isShutdown) {\n return;\n }\n this._isShutdown = true;\n MXLUserSessionManager._testInstances.delete(this);\n this._onActivityThrottled.cancel();\n removeActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n this._clearSessionPartInactivityTimer();\n this._clearMaxDurationTimer();\n }\n\n private readonly _onActivity = (): void => {\n try {\n if (!isTabEngaged(this._visibilityDoc)) {\n return;\n }\n if (this._activeSessionPartId === null) {\n this.startSessionPartInternal('web_activity');\n return;\n }\n this._startSessionPartInactivityTimer();\n } catch (error) {\n this._diag.warn('Error handling activity event', error);\n }\n };\n\n // Tab visibility flipped (switch tabs, minimize, OS app switch). Drives\n // The engagement transition off the current visibilityState/hasFocus pair.\n private readonly _onVisibilityChange = (): void => {\n this._handleEngagementTransition('visibilitychange');\n };\n\n // Window focus arrived (alt-tab back, clicked into the document). hasFocus\n // Is now true; engagement transition resolves whether to start a part.\n private readonly _onFocus = (): void => {\n this._handleEngagementTransition('focus');\n };\n\n // Window focus lost (alt-tab away, clicked into DevTools or another window).\n // HasFocus is now false; engagement transition ends the active part.\n private readonly _onBlur = (): void => {\n this._handleEngagementTransition('blur');\n };\n\n // Initial page load OR BFCache restore. event.persisted only affects the\n // Debug source string; routing is via _handleEngagementTransition, which\n // Keys off engagement state and whether a part is currently active.\n private readonly _onPageShow = (event: PageTransitionEvent): void => {\n this._handleEngagementTransition(\n event.persisted ? 'pageshow-bfcache' : 'pageshow-initial',\n );\n };\n\n // Navigation away (hard nav, tab close) OR BFCache freeze. Both signal the\n // Page is about to stop running, so we always end the active part. Ending\n // The part flushes its span (and the spans batched against it in\n // MXLSessionPartBatchedSpanProcessor) through the export pipeline while\n // The page can still issue a keepalive fetch. On BFCache restore, pageshow\n // Will start a fresh part.\n private readonly _onPageHide = (event: PageTransitionEvent): void => {\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n const reason: SessionPartEndReason = event.persisted\n ? 'web_background'\n : 'web_hard_navigation';\n this._diag.debug(\n `page hiding (persisted=${event.persisted}); ending current part as ${reason}`,\n );\n this.endSessionPartInternal(reason);\n } catch (error) {\n this._diag.error(\n `Error ending session part on pagehide (persisted=${event.persisted})`,\n error,\n );\n }\n };\n\n private _handleEngagementTransition(source: string): void {\n try {\n const engaged = isTabEngaged(this._visibilityDoc);\n const active = this._activeSessionPartId !== null;\n if (!engaged && active) {\n this._diag.debug(`tab disengaged via ${source}; ending current part`);\n this.endSessionPartInternal('web_background');\n return;\n }\n if (engaged && !active) {\n this._diag.debug(`tab engaged via ${source}; starting new part`);\n this.startSessionPartInternal('web_foreground');\n return;\n }\n if (engaged && active) {\n // Redundant engagement event while a part is already active (browser\n // Quirk: an extra focus/visibility fire that isn't a real transition).\n // Re-arm the inactivity timer since the event still implies presence.\n this._startSessionPartInactivityTimer();\n }\n } catch (error) {\n this._diag.warn('Error handling engagement change', error);\n }\n }\n\n private readonly _onSessionPartInactivity = (): void => {\n this._sessionPartInactivityTimer = null;\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n this._diag.debug(\n 'inactivity timer fired; ending current part and user session',\n );\n this.endSessionPartInternal('inactivity', 'inactivity');\n } catch (error) {\n this._diag.warn('Error handling inactivity timer', error);\n }\n };\n\n private _startSessionPartInactivityTimer(): void {\n this._clearSessionPartInactivityTimer();\n this._sessionPartInactivityTimer = setTimeout(\n this._onSessionPartInactivity,\n this._inactivityTimeoutSeconds * 1000,\n );\n }\n\n private _clearSessionPartInactivityTimer(): void {\n if (this._sessionPartInactivityTimer !== null) {\n clearTimeout(this._sessionPartInactivityTimer);\n this._sessionPartInactivityTimer = null;\n }\n }\n\n private _addListener(list: (() => void)[], listener: () => void): () => void {\n list.push(listener);\n return () => {\n const i = list.indexOf(listener);\n if (i !== -1) {\n list.splice(i, 1);\n }\n };\n }\n\n private _fireListeners(list: (() => void)[], kind: string): void {\n for (const listener of list) {\n try {\n listener();\n } catch (error) {\n this._diag.warn(\n `Error while executing session part ${kind} listener`,\n error,\n );\n }\n }\n }\n\n private _storeState(): boolean {\n if (!this._state) {\n return false;\n }\n const stored = this._storage.setItem(\n MXL_USER_SESSION_STATE_KEY,\n JSON.stringify(this._state),\n );\n if (stored) {\n this._hasStoredState = true;\n }\n return stored;\n }\n\n private _removeFromPermanentProperties(bareKey: string): void {\n if (!(bareKey in this._permanentProperties)) {\n return;\n }\n const pruned = { ...this._permanentProperties };\n delete pruned[bareKey];\n this._permanentProperties = pruned;\n storePermanentProperties(this._storage, pruned);\n }\n\n private _removeFromUserSessionProperties(bareKey: string): void {\n if (!this._state || !(bareKey in this._state.userSessionProperties)) {\n return;\n }\n const pruned = { ...this._state.userSessionProperties };\n delete pruned[bareKey];\n this._state = {\n ...this._state,\n userSessionProperties: pruned,\n };\n this._storeState();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MXLUserSessionManager.js","names":[],"sources":["../../../src/managers/MXLUserSessionManager/MXLUserSessionManager.ts"],"sourcesContent":["import type {\n Attributes,\n DiagLogger,\n Tracer,\n TracerProvider,\n} from '@opentelemetry/api';\nimport { diag, trace } from '@opentelemetry/api';\nimport {\n ATTR_SESSION_ID,\n ATTR_SESSION_PREVIOUS_ID,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport type {\n PropertyOptions,\n SessionPartEndReason,\n SessionPartStartReason,\n UserSessionEndReason,\n} from '../../api-sessions/manager/types';\nimport type { ExtendedSpan } from '../../api-traces/api/TraceAPI/types';\nimport type { VisibilityStateDocument } from '../../common/types';\nimport {\n KEY_MXL_COLD_START,\n KEY_MXL_EXPERIENCE_ID,\n KEY_MXL_IS_FINAL_SESSION_PART,\n KEY_MXL_NAVIGATION_SOURCE,\n KEY_MXL_REFERRER_URL,\n KEY_MXL_SDK_STARTUP_DURATION,\n KEY_MXL_SESSION_PART_END_REASON,\n KEY_MXL_SESSION_PART_ID,\n KEY_MXL_SESSION_PART_NUMBER,\n KEY_MXL_SESSION_PART_START_REASON,\n KEY_MXL_SOURCE_TAB_ID,\n KEY_MXL_STATE,\n KEY_MXL_TAB_ID,\n KEY_MXL_TYPE,\n KEY_MXL_USER_SESSION_ID,\n KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS,\n KEY_MXL_USER_SESSION_NUMBER,\n KEY_MXL_USER_SESSION_PART_INDEX,\n KEY_MXL_USER_SESSION_PREVIOUS_ID,\n KEY_MXL_USER_SESSION_START_TS,\n KEY_MXL_USER_SESSION_TERMINATION_REASON,\n KEY_PREFIX_MXL_PROPERTIES,\n MXL_STATES,\n MXL_TYPES,\n} from '../../constants/attributes';\nimport { clampNumber } from '../../utils/clampNumber';\nimport { generateUUID } from '../../utils/generateUUID';\nimport { getIncrementedCount } from '../../utils/getIncrementedCount';\nimport { getVisibilityState } from '../../utils/getVisibilityState';\nimport type { NamespacedStorage } from '../../utils/NamespacedStorage/NamespacedStorage';\nimport type { PerformanceManager } from '../../utils/PerformanceManager/types';\nimport { throttle } from '../../utils/throttle';\nimport type { ThrottledFunction } from '../../utils/throttle';\nimport type { TimeoutRef } from '../../utils/timeout/types';\nimport type { LimitManagerInternal } from '../MXLLimitManager/types';\nimport type { AnalyticsManagerInternal } from '../../api-analytics/manager/types';\nimport { MXLExtendedSpan } from '../MXLTraceManager/MXLExtendedSpan';\nimport {\n DEFAULT_ACTIVITY_EVENTS,\n DEFAULT_ACTIVITY_THROTTLE_MS,\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n END_USER_SESSION_COOLDOWN_MS,\n MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MAX_USER_SESSION_MAX_DURATION_SECONDS,\n MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n MIN_USER_SESSION_MAX_DURATION_SECONDS,\n MXL_LAST_END_USER_SESSION_TS_KEY,\n MXL_SESSION_PART_NUMBER_KEY,\n MXL_USER_SESSION_NUMBER_KEY,\n MXL_USER_SESSION_STATE_KEY,\n SESSION_PART_SPAN_NAME,\n} from './constants';\nimport type {\n MXLUserSessionManagerArgs,\n NavigationSource,\n Tab,\n UserSessionAttributes,\n UserSessionManagerInternal,\n UserSessionState,\n} from './types';\nimport {\n addActivityListeners,\n isTabEngaged,\n removeActivityListeners,\n} from './utils/activity';\nimport {\n createUserSessionState,\n isUserSessionExpired,\n readPermanentProperties,\n readUserSessionState,\n storePermanentProperties,\n} from './utils/state';\nimport { initTabContext, setupNewTabClickListeners } from './utils/tabTracking';\n\n/**\n * Parts are engagement-gated (visible AND focused), so only one part can\n * be active at a time. That mutex lets us treat storage as a\n * plain shared row read on engagement and written on changes.\n */\nexport class MXLUserSessionManager implements UserSessionManagerInternal {\n private static readonly _testInstances = new Set<MXLUserSessionManager>();\n\n /** @internal Test-only helper to tear down leaked managers between tests. */\n public static shutdownAllTestInstances(): void {\n for (const manager of MXLUserSessionManager._testInstances) {\n manager._shutdown();\n }\n MXLUserSessionManager._testInstances.clear();\n }\n\n private _state: UserSessionState | null = null;\n private _previousUserSessionId: string | null = null;\n private readonly _maxUserSessionDurationSeconds: number;\n private readonly _inactivityTimeoutSeconds: number;\n private _maxDurationTimeout: ReturnType<typeof setTimeout> | null = null;\n private _isShutdown = false;\n // Bare keys; the wire-format prefix is applied at stamp time.\n private _permanentProperties: Record<string, string> = {};\n // Distinguishes \"another tab wiped storage after we wrote\" from \"we\n // Never managed to write in the first place\"; see\n // _continueUserSessionAfterPartEnd.\n private _hasStoredState = false;\n\n private _activeSessionPartId: string | null = null;\n // Snapshotted at part start so a concurrent bump in another tab doesn't\n // Shift this part's value before its span ends.\n private _currentSessionPartNumber: number | null = null;\n private _sessionPartSpan: ExtendedSpan | null = null;\n private _activeSessionPartCounts: Record<string, number> | null = null;\n // Marks the first part of the page lifetime so it can be reported as a\n // Cold start.\n private _coldStart = true;\n private _nextSessionPartCounts: Record<string, number> = {};\n private _sdkStartupDuration = 0;\n private readonly _sessionPartStartedListeners: (() => void)[] = [];\n private readonly _sessionPartEndedListeners: (() => void)[] = [];\n private _tracer: Tracer;\n\n private readonly _diag: DiagLogger;\n private readonly _perf: PerformanceManager;\n private readonly _storage: NamespacedStorage;\n private readonly _visibilityDoc: VisibilityStateDocument;\n private readonly _limitManager: LimitManagerInternal;\n private readonly _target: EventTarget;\n private readonly _activityEvents: readonly string[];\n private readonly _onActivityThrottled: ThrottledFunction<\n (event: Event) => void\n >;\n private _sessionPartInactivityTimer: TimeoutRef | null = null;\n private readonly _tab: Tab;\n private readonly _navigationSource: NavigationSource;\n private readonly _referrerScrubbedUrl?: string;\n private _analyticsManager: AnalyticsManagerInternal | null = null;\n\n public constructor({\n config,\n diag: diagParam,\n perf,\n visibilityDoc,\n storage,\n limitManager,\n target = window,\n activityThrottleMs = DEFAULT_ACTIVITY_THROTTLE_MS,\n activityEvents = DEFAULT_ACTIVITY_EVENTS,\n tabStorage,\n referrer = typeof document !== 'undefined' ? document.referrer : '',\n navigationPerformance = typeof window !== 'undefined'\n ? window.performance\n : { getEntriesByType: () => [] },\n }: MXLUserSessionManagerArgs) {\n this._diag =\n diagParam ??\n diag.createComponentLogger({\n namespace: 'MXLUserSessionManager',\n });\n this._perf = perf;\n this._visibilityDoc = visibilityDoc;\n this._storage = storage;\n this._limitManager = limitManager;\n this._permanentProperties = readPermanentProperties(\n this._storage,\n this._diag,\n );\n this._tracer = trace.getTracer('mxl-web-sdk-session-parts');\n this._target = target;\n this._activityEvents = activityEvents;\n this._onActivityThrottled = throttle(this._onActivity, activityThrottleMs);\n\n const maxUserSessionDurationSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_MAX_DURATION_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_MAX_DURATION_SECONDS,\n min: MIN_USER_SESSION_MAX_DURATION_SECONDS,\n value: config?.maxUserSessionDurationSeconds,\n });\n const inactivityTimeoutSeconds = clampNumber({\n defaultValue: DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n diag: this._diag,\n max: MAX_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n min: MIN_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS,\n value: config?.inactivityTimeoutSeconds,\n });\n\n this._maxUserSessionDurationSeconds = maxUserSessionDurationSeconds;\n if (inactivityTimeoutSeconds <= maxUserSessionDurationSeconds) {\n this._inactivityTimeoutSeconds = inactivityTimeoutSeconds;\n } else {\n this._diag.warn(\n `inactivityTimeoutSeconds (${inactivityTimeoutSeconds.toString()}s) ` +\n `exceeds maxUserSessionDurationSeconds (${maxUserSessionDurationSeconds.toString()}s); ` +\n `falling back to default inactivity timeout (${DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS.toString()}s).`,\n );\n this._inactivityTimeoutSeconds =\n DEFAULT_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS;\n }\n\n const tabContext = initTabContext({\n diag: this._diag,\n localStorage: storage,\n navigationPerformance,\n referrer,\n sessionStorage: tabStorage,\n });\n this._tab = tabContext.tab;\n this._navigationSource = tabContext.navigationSource;\n this._referrerScrubbedUrl = tabContext.referrerScrubbedUrl;\n setupNewTabClickListeners(this._tab, storage, this._diag);\n MXLUserSessionManager._testInstances.add(this);\n }\n\n public setTracerProvider(tracerProvider: TracerProvider): void {\n this._tracer = tracerProvider.getTracer('mxl-web-sdk-session-parts');\n // Listeners attach here rather than in the constructor so that tests\n // That construct a manager without going through SDK init don't\n // Pollute window with listeners, and so that browser-activity-driven\n // Parts only start once a real tracer is wired.\n addActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n // Eager state init so getUserSessionId() returns a real id before the\n // First part starts, and so other tabs see the row when we create a\n // Fresh session here.\n const { state, created } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = state;\n if (created) {\n this._storeState();\n }\n }\n\n public recordSDKStartupDuration(duration: number): void {\n this._sdkStartupDuration = Math.ceil(duration);\n }\n\n public setAnalyticsManager(manager: AnalyticsManagerInternal | null): void {\n this._analyticsManager = manager;\n }\n\n public getUserSessionId(): string | null {\n return this._state?.userSessionId ?? null;\n }\n\n public getPreviousUserSessionId(): string | null {\n // Fall back to in-memory for the brief window during user-session end\n // Where storage is cleared but the just-ended id is still held.\n return this._state?.previousUserSessionId ?? this._previousUserSessionId;\n }\n\n public getUserSessionStartTime(): number | null {\n return this._state?.userSessionStartTs ?? null;\n }\n\n public getUserSessionAttributes(): UserSessionAttributes | null {\n if (!this._state) {\n return null;\n }\n const previousUserSessionId = this.getPreviousUserSessionId() ?? '';\n return {\n [KEY_MXL_USER_SESSION_ID]: this._state.userSessionId,\n [ATTR_SESSION_ID]: this._state.userSessionId,\n [KEY_MXL_USER_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [ATTR_SESSION_PREVIOUS_ID]: previousUserSessionId,\n [KEY_MXL_USER_SESSION_NUMBER]: this._state.userSessionNumber,\n [KEY_MXL_USER_SESSION_PART_INDEX]: this._state.userSessionPartIndex,\n [KEY_MXL_SESSION_PART_NUMBER]: this._currentSessionPartNumber ?? 0,\n [KEY_MXL_USER_SESSION_START_TS]: this._state.userSessionStartTs,\n [KEY_MXL_USER_SESSION_MAX_DURATION_SECONDS]:\n this._state.maxUserSessionDurationSeconds,\n [KEY_MXL_USER_SESSION_INACTIVITY_TIMEOUT_SECONDS]:\n this._state.inactivityTimeoutSeconds,\n };\n }\n\n public endUserSession(): void {\n if (!this._state) {\n this._diag.debug(\n 'Trying to end user session, but there is no active session. This is a no-op.',\n );\n return;\n }\n\n const now = this._perf.getNowMillis();\n const lastEndRaw = this._storage.getItem(MXL_LAST_END_USER_SESSION_TS_KEY);\n const lastEndTs = lastEndRaw === null ? NaN : Number(lastEndRaw);\n if (\n Number.isFinite(lastEndTs) &&\n now - lastEndTs < END_USER_SESSION_COOLDOWN_MS\n ) {\n this._diag.warn(\n 'endUserSession called within cooldown period, ignoring.',\n );\n return;\n }\n\n this._rolloverUserSession('manual');\n this._storage.setItem(MXL_LAST_END_USER_SESSION_TS_KEY, String(now));\n }\n\n public getSessionPartId(): string | null {\n return this._activeSessionPartId;\n }\n\n public getSessionPartSpan(): ExtendedSpan | null {\n return this._sessionPartSpan;\n }\n\n public startSessionPartInternal(reason: SessionPartStartReason): void {\n if (this._sessionPartSpan) {\n this._diag.warn(\n `startSessionPartInternal called while a part is active (reason: ${reason}); ignoring`,\n );\n return;\n }\n\n // Parts are foreground-only: a part corresponds to a tab that is both\n // Visible AND focused.\n if (\n getVisibilityState(this._visibilityDoc) === MXL_STATES.Background ||\n !this._visibilityDoc.hasFocus()\n ) {\n this._diag.debug(\n `skipping session part start (reason: ${reason}) because the tab is not engaged`,\n );\n return;\n }\n\n const activeSessionPartId = generateUUID();\n const previouslyRecordedCounts = this._nextSessionPartCounts;\n\n this._beginUserSessionForPartStart();\n\n const attributes: Attributes = {\n ...this.getUserSessionAttributes(),\n [KEY_MXL_TYPE]: MXL_TYPES.SessionPart,\n [KEY_MXL_STATE]: MXL_STATES.Foreground,\n [KEY_MXL_SESSION_PART_ID]: activeSessionPartId,\n [KEY_MXL_SESSION_PART_START_REASON]: reason,\n [KEY_MXL_COLD_START]: this._coldStart,\n [KEY_MXL_EXPERIENCE_ID]: this._tab.experienceId,\n [KEY_MXL_TAB_ID]: this._tab.tabId,\n [KEY_MXL_NAVIGATION_SOURCE]: this._navigationSource,\n ...previouslyRecordedCounts,\n };\n\n if (this._referrerScrubbedUrl) {\n attributes[KEY_MXL_REFERRER_URL] = this._referrerScrubbedUrl;\n }\n if (this._tab.sourceTabId) {\n attributes[KEY_MXL_SOURCE_TAB_ID] = this._tab.sourceTabId;\n }\n\n this._activeSessionPartId = activeSessionPartId;\n let span: MXLExtendedSpan;\n try {\n span = new MXLExtendedSpan(\n this._tracer.startSpan(SESSION_PART_SPAN_NAME, { attributes }),\n );\n } catch (error) {\n this._activeSessionPartId = null;\n this._diag.error('Error starting session part span', error);\n return;\n }\n\n this._activeSessionPartCounts = {};\n this._nextSessionPartCounts = {};\n this._sessionPartSpan = span;\n this._coldStart = false;\n\n this._startSessionPartInactivityTimer();\n\n this._fireListeners(this._sessionPartStartedListeners, 'started');\n }\n\n public endSessionPartInternal(\n reason: SessionPartEndReason,\n userSessionEndReason?: UserSessionEndReason | null,\n ): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to end a session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n this._clearSessionPartInactivityTimer();\n\n const isFinal = reason === 'user_session_ended' || reason === 'inactivity';\n\n // Capture the end stamp upfront. SpanProcessor.onEnd can run unbounded\n // And must not push it forward.\n const partEndTs = this._perf.getNowMillis();\n const span = this._sessionPartSpan;\n try {\n const endAttrs: Attributes = {\n [KEY_MXL_SESSION_PART_END_REASON]: reason,\n ...this._activeSessionPartCounts,\n ...this._limitManager.getDiagnosticCounts(),\n [KEY_MXL_SDK_STARTUP_DURATION]: this._sdkStartupDuration,\n };\n if (isFinal) {\n endAttrs[KEY_MXL_IS_FINAL_SESSION_PART] = 1;\n if (userSessionEndReason) {\n endAttrs[KEY_MXL_USER_SESSION_TERMINATION_REASON] =\n userSessionEndReason;\n }\n }\n\n if (this._analyticsManager) {\n Object.assign(\n endAttrs,\n this._analyticsManager.buildSessionPartAnalyticsAttributes(),\n );\n this._analyticsManager.finalizeSessionPartAnalytics();\n }\n\n const propertyAttrs: Attributes = {};\n for (const [bareKey, value] of Object.entries(\n this.getSessionPartProperties(),\n )) {\n propertyAttrs[KEY_PREFIX_MXL_PROPERTIES + bareKey] = value;\n }\n\n try {\n span.setAttributes({\n ...propertyAttrs,\n ...endAttrs,\n });\n } catch (error) {\n this._diag.warn(\n 'Error setting end attributes on session part span; ending span without them',\n error,\n );\n }\n } finally {\n // Fire listeners after end attributes are stamped (so subscribers can\n // Read them) and before span.end() (so anything they emit still\n // Attaches to the part that is conceptually still active).\n this._fireListeners(this._sessionPartEndedListeners, 'ended');\n try {\n span.end(partEndTs);\n } catch (error) {\n this._diag.warn('Error ending session part span', error);\n }\n this._sessionPartSpan = null;\n this._activeSessionPartId = null;\n this._activeSessionPartCounts = null;\n this._currentSessionPartNumber = null;\n this._limitManager.reset();\n }\n\n if (isFinal) {\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n } else {\n this._continueUserSessionAfterPartEnd(partEndTs);\n }\n }\n\n public addBreadcrumb(name: string): void {\n if (!this._sessionPartSpan) {\n this._diag.debug(\n 'trying to add breadcrumb, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n\n const limitedBreadcrumb = this._limitManager.limitBreadcrumb(name);\n if (limitedBreadcrumb === 'dropped') {\n return;\n }\n\n this._sessionPartSpan.addEvent(\n 'mxl-breadcrumb',\n {\n message: limitedBreadcrumb.name,\n },\n this._perf.getNowMillis(),\n );\n }\n\n public addProperty(\n propertyKey: string,\n value: string,\n options?: PropertyOptions,\n ): void {\n const limitedSessionProperty = this._limitManager.limitSessionProperty(\n propertyKey,\n value,\n );\n\n if (limitedSessionProperty === 'dropped') {\n return;\n }\n\n const bareKey = limitedSessionProperty.key;\n const bareValue = limitedSessionProperty.value;\n\n if (options?.lifespan === 'permanent') {\n const candidate = {\n ...this._permanentProperties,\n [bareKey]: bareValue,\n };\n // Reject the write if storage is unavailable: a property that can't\n // Persist would silently diverge from what other tabs (and the next\n // Page load) see, which is worse than no property at all.\n if (!storePermanentProperties(this._storage, candidate)) {\n this._diag.warn(\n 'Storage unavailable; rejecting permanent property write.',\n );\n return;\n }\n this._permanentProperties = candidate;\n this._removeFromUserSessionProperties(bareKey);\n return;\n }\n\n // Ensure a state row exists so the write has somewhere to land;\n // AddProperty can fire before any part has started.\n const { state } = this._loadOrCreateUserSessionState(\n this._perf.getNowMillis(),\n );\n this._state = {\n ...state,\n userSessionProperties: {\n ...state.userSessionProperties,\n [bareKey]: bareValue,\n },\n };\n if (!this._storeState()) {\n // Roll back so callers don't observe a value that won't persist.\n // The user session itself stays in memory.\n this._state = state;\n this._diag.warn(\n 'Storage unavailable; rejecting user-session property write.',\n );\n }\n }\n\n public removeProperty(propertyKey: string): void {\n const bareKey = this._limitManager.truncateString(\n 'session_property_key',\n propertyKey,\n );\n\n // Try both stores so a key that was flipped between scopes doesn't\n // Linger in the other one.\n this._removeFromPermanentProperties(bareKey);\n this._removeFromUserSessionProperties(bareKey);\n }\n\n /**\n * Bare-keyed view of properties for the active part. User-session-scoped\n * entries shadow permanent ones, matching the cross-scope flip rule\n * enforced in `addProperty`. Callers apply the wire-format prefix at\n * stamp time.\n */\n public getSessionPartProperties(): Record<string, string> {\n return {\n ...this._permanentProperties,\n ...this._state?.userSessionProperties,\n };\n }\n\n public incrSessionPartCountForKey(key: string): void {\n if (!this._sessionPartSpan || !this._activeSessionPartCounts) {\n this._diag.debug(\n 'trying to increment a count for the active session part, but there is no session part in progress. This is a no-op.',\n );\n return;\n }\n this._activeSessionPartCounts[key] =\n (this._activeSessionPartCounts[key] || 0) + 1;\n }\n\n public incrNextSessionPartCountForKey(key: string): void {\n this._nextSessionPartCounts[key] =\n (this._nextSessionPartCounts[key] || 0) + 1;\n }\n\n public addSessionPartStartedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartStartedListeners, listener);\n }\n\n public addSessionPartEndedListener(listener: () => void): () => void {\n return this._addListener(this._sessionPartEndedListeners, listener);\n }\n\n /**\n * Returns the persisted user-session state, rotating to a fresh one if\n * the persisted row is missing or expired. Arms the max-duration timer\n * when needed. The caller is responsible for assigning the result to\n * `_state` and for persisting (the helper does not write to storage).\n */\n private _loadOrCreateUserSessionState(now: number): {\n state: UserSessionState;\n created: boolean;\n } {\n let state = readUserSessionState(this._storage, this._diag);\n let created = false;\n if (!state || isUserSessionExpired(state, now)) {\n if (state) {\n this._previousUserSessionId = state.userSessionId;\n }\n const userSessionNumber = getIncrementedCount(\n this._storage,\n MXL_USER_SESSION_NUMBER_KEY,\n this._diag,\n );\n state = createUserSessionState({\n inactivityTimeoutSeconds: this._inactivityTimeoutSeconds,\n maxUserSessionDurationSeconds: this._maxUserSessionDurationSeconds,\n now,\n previousUserSessionId: this._previousUserSessionId,\n userSessionNumber,\n });\n created = true;\n this._analyticsManager?.resetSessionAnalyticsForNewUserSession();\n }\n // Arm on a freshly created state, and on the page-reload case where a\n // New manager loads existing state and has no timer running yet.\n // UserSessionMaxEndTs is fixed at creation, so re-arming the same value\n // On every load/start call is wasteful.\n if (created || this._maxDurationTimeout === null) {\n this._setupMaxDurationTimer(state, now);\n }\n return { created, state };\n }\n\n /**\n * Bumps the part counter and arms the max-duration timer. Relies on\n * `_loadOrCreateUserSessionState` to provide a non-null, non-expired state,\n * so `getUserSessionAttributes()` is guaranteed non-null after this.\n */\n private _beginUserSessionForPartStart(): void {\n const now = this._perf.getNowMillis();\n const { state } = this._loadOrCreateUserSessionState(now);\n\n this._currentSessionPartNumber = getIncrementedCount(\n this._storage,\n MXL_SESSION_PART_NUMBER_KEY,\n this._diag,\n );\n\n this._state = {\n ...state,\n userSessionPartIndex: state.userSessionPartIndex + 1,\n // A part is active, so any pending inactivity deadline no longer\n // Applies; it gets re-armed when the part ends.\n inactivityDeadlineTs: null,\n };\n this._storeState();\n }\n\n /**\n * Records the inactivity deadline on the user-session row so the next\n * part start can detect lazy expiry. The max-duration timer stays valid\n * because userSessionMaxEndTs doesn't change between parts.\n */\n private _continueUserSessionAfterPartEnd(partEndTs: number): void {\n if (!this._state) {\n this._clearMaxDurationTimer();\n return;\n }\n\n // If the state row was present at part start but is gone now (user\n // Wiped site data, quota eviction, sibling tab cleared), don't\n // Resurrect it from memory. Drop in-memory state so the next part\n // Start creates a fresh user session; carry the just-ended id\n // Forward so the next session can back-link to it.\n // _hasStoredState gates this: if we never persisted in the first\n // Place, the in-memory copy stays authoritative.\n if (\n this._hasStoredState &&\n this._storage.getItem(MXL_USER_SESSION_STATE_KEY) === null\n ) {\n this._previousUserSessionId = this._state.userSessionId;\n this._state = null;\n this._clearMaxDurationTimer();\n return;\n }\n\n this._state = {\n ...this._state,\n inactivityDeadlineTs:\n partEndTs + this._state.inactivityTimeoutSeconds * 1000,\n };\n this._storeState();\n }\n\n /**\n * Ends the active part as final and starts a fresh part for the next\n * user session. State clearing for the engaged path is handled by\n * endSessionPartInternal's isFinal branch. When no part is active\n * (tab disengaged), the same state-clearing is performed inline so\n * the next engagement creates a fresh user session rather than\n * resuming the just-ended one.\n */\n private _rolloverUserSession(\n userSessionEndReason: UserSessionEndReason,\n ): void {\n if (this._sessionPartSpan) {\n this.endSessionPartInternal('user_session_ended', userSessionEndReason);\n this.startSessionPartInternal('user_session_rollover');\n return;\n }\n\n this._previousUserSessionId = this._state?.userSessionId ?? null;\n this._state = null;\n this._storage.removeItem(MXL_USER_SESSION_STATE_KEY);\n this._clearMaxDurationTimer();\n }\n\n private _setupMaxDurationTimer(state: UserSessionState, now: number): void {\n this._clearMaxDurationTimer();\n\n const remaining = state.userSessionMaxEndTs - now;\n if (remaining <= 0) {\n return;\n }\n\n this._maxDurationTimeout = setTimeout(() => {\n this._maxDurationTimeout = null;\n this._rolloverUserSession('max_duration_reached');\n }, remaining);\n }\n\n /**\n * @internal Would be private but exposed for tests to simulate a page reload\n */\n public _clearMaxDurationTimer(): void {\n if (this._maxDurationTimeout !== null) {\n clearTimeout(this._maxDurationTimeout);\n this._maxDurationTimeout = null;\n }\n }\n\n /**\n * Detaches browser-activity listeners and clears the part-inactivity\n * timer. Intended for SDK teardown and tests; in production the manager\n * lives for the page's lifetime.\n */\n public _shutdown(): void {\n if (this._isShutdown) {\n return;\n }\n this._isShutdown = true;\n MXLUserSessionManager._testInstances.delete(this);\n this._onActivityThrottled.cancel();\n removeActivityListeners({\n activityEvents: this._activityEvents,\n onActivity: this._onActivityThrottled,\n onBlur: this._onBlur,\n onFocus: this._onFocus,\n onPageHide: this._onPageHide,\n onPageShow: this._onPageShow,\n onVisibilityChange: this._onVisibilityChange,\n target: this._target,\n visibilityDoc: this._visibilityDoc,\n });\n this._clearSessionPartInactivityTimer();\n this._clearMaxDurationTimer();\n }\n\n private readonly _onActivity = (): void => {\n try {\n if (!isTabEngaged(this._visibilityDoc)) {\n return;\n }\n if (this._activeSessionPartId === null) {\n this.startSessionPartInternal('web_activity');\n return;\n }\n this._startSessionPartInactivityTimer();\n } catch (error) {\n this._diag.warn('Error handling activity event', error);\n }\n };\n\n // Tab visibility flipped (switch tabs, minimize, OS app switch). Drives\n // The engagement transition off the current visibilityState/hasFocus pair.\n private readonly _onVisibilityChange = (): void => {\n this._handleEngagementTransition('visibilitychange');\n };\n\n // Window focus arrived (alt-tab back, clicked into the document). hasFocus\n // Is now true; engagement transition resolves whether to start a part.\n private readonly _onFocus = (): void => {\n this._handleEngagementTransition('focus');\n };\n\n // Window focus lost (alt-tab away, clicked into DevTools or another window).\n // HasFocus is now false; engagement transition ends the active part.\n private readonly _onBlur = (): void => {\n this._handleEngagementTransition('blur');\n };\n\n // Initial page load OR BFCache restore. event.persisted only affects the\n // Debug source string; routing is via _handleEngagementTransition, which\n // Keys off engagement state and whether a part is currently active.\n private readonly _onPageShow = (event: PageTransitionEvent): void => {\n this._handleEngagementTransition(\n event.persisted ? 'pageshow-bfcache' : 'pageshow-initial',\n );\n };\n\n // Navigation away (hard nav, tab close) OR BFCache freeze. Both signal the\n // Page is about to stop running, so we always end the active part. Ending\n // The part flushes its span (and the spans batched against it in\n // MXLSessionPartBatchedSpanProcessor) through the export pipeline while\n // The page can still issue a keepalive fetch. On BFCache restore, pageshow\n // Will start a fresh part.\n private readonly _onPageHide = (event: PageTransitionEvent): void => {\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n const reason: SessionPartEndReason = event.persisted\n ? 'web_background'\n : 'web_hard_navigation';\n this._diag.debug(\n `page hiding (persisted=${event.persisted}); ending current part as ${reason}`,\n );\n this.endSessionPartInternal(reason);\n } catch (error) {\n this._diag.error(\n `Error ending session part on pagehide (persisted=${event.persisted})`,\n error,\n );\n }\n };\n\n private _handleEngagementTransition(source: string): void {\n try {\n const engaged = isTabEngaged(this._visibilityDoc);\n const active = this._activeSessionPartId !== null;\n if (!engaged && active) {\n this._diag.debug(`tab disengaged via ${source}; ending current part`);\n this.endSessionPartInternal('web_background');\n return;\n }\n if (engaged && !active) {\n this._diag.debug(`tab engaged via ${source}; starting new part`);\n this.startSessionPartInternal('web_foreground');\n return;\n }\n if (engaged && active) {\n // Redundant engagement event while a part is already active (browser\n // Quirk: an extra focus/visibility fire that isn't a real transition).\n // Re-arm the inactivity timer since the event still implies presence.\n this._startSessionPartInactivityTimer();\n }\n } catch (error) {\n this._diag.warn('Error handling engagement change', error);\n }\n }\n\n private readonly _onSessionPartInactivity = (): void => {\n this._sessionPartInactivityTimer = null;\n try {\n if (this._activeSessionPartId === null) {\n return;\n }\n this._diag.debug(\n 'inactivity timer fired; ending current part and user session',\n );\n this.endSessionPartInternal('inactivity', 'inactivity');\n } catch (error) {\n this._diag.warn('Error handling inactivity timer', error);\n }\n };\n\n private _startSessionPartInactivityTimer(): void {\n this._clearSessionPartInactivityTimer();\n this._sessionPartInactivityTimer = setTimeout(\n this._onSessionPartInactivity,\n this._inactivityTimeoutSeconds * 1000,\n );\n }\n\n private _clearSessionPartInactivityTimer(): void {\n if (this._sessionPartInactivityTimer !== null) {\n clearTimeout(this._sessionPartInactivityTimer);\n this._sessionPartInactivityTimer = null;\n }\n }\n\n private _addListener(list: (() => void)[], listener: () => void): () => void {\n list.push(listener);\n return () => {\n const i = list.indexOf(listener);\n if (i !== -1) {\n list.splice(i, 1);\n }\n };\n }\n\n private _fireListeners(list: (() => void)[], kind: string): void {\n for (const listener of list) {\n try {\n listener();\n } catch (error) {\n this._diag.warn(\n `Error while executing session part ${kind} listener`,\n error,\n );\n }\n }\n }\n\n private _storeState(): boolean {\n if (!this._state) {\n return false;\n }\n const stored = this._storage.setItem(\n MXL_USER_SESSION_STATE_KEY,\n JSON.stringify(this._state),\n );\n if (stored) {\n this._hasStoredState = true;\n }\n return stored;\n }\n\n private _removeFromPermanentProperties(bareKey: string): void {\n if (!(bareKey in this._permanentProperties)) {\n return;\n }\n const pruned = { ...this._permanentProperties };\n delete pruned[bareKey];\n this._permanentProperties = pruned;\n storePermanentProperties(this._storage, pruned);\n }\n\n private _removeFromUserSessionProperties(bareKey: string): void {\n if (!this._state || !(bareKey in this._state.userSessionProperties)) {\n return;\n }\n const pruned = { ...this._state.userSessionProperties };\n delete pruned[bareKey];\n this._state = {\n ...this._state,\n userSessionProperties: pruned,\n };\n this._storeState();\n }\n}\n"],"mappings":"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"}