@kubesense/kubesense-browser-rum-core 1.0.0

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 (689) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +3 -0
  3. package/cjs/boot/preStartRum.d.ts +7 -0
  4. package/cjs/boot/preStartRum.js +190 -0
  5. package/cjs/boot/preStartRum.js.map +1 -0
  6. package/cjs/boot/rumPublicApi.d.ts +409 -0
  7. package/cjs/boot/rumPublicApi.js +168 -0
  8. package/cjs/boot/rumPublicApi.js.map +1 -0
  9. package/cjs/boot/startRum.d.ts +109 -0
  10. package/cjs/boot/startRum.js +153 -0
  11. package/cjs/boot/startRum.js.map +1 -0
  12. package/cjs/browser/cookieObservable.d.ts +8 -0
  13. package/cjs/browser/cookieObservable.js +39 -0
  14. package/cjs/browser/cookieObservable.js.map +1 -0
  15. package/cjs/browser/domMutationObservable.d.ts +27 -0
  16. package/cjs/browser/domMutationObservable.js +58 -0
  17. package/cjs/browser/domMutationObservable.js.map +1 -0
  18. package/cjs/browser/firstInputPolyfill.d.ts +8 -0
  19. package/cjs/browser/firstInputPolyfill.js +68 -0
  20. package/cjs/browser/firstInputPolyfill.js.map +1 -0
  21. package/cjs/browser/htmlDomUtils.d.ts +13 -0
  22. package/cjs/browser/htmlDomUtils.js +46 -0
  23. package/cjs/browser/htmlDomUtils.js.map +1 -0
  24. package/cjs/browser/locationChangeObservable.d.ts +7 -0
  25. package/cjs/browser/locationChangeObservable.js +51 -0
  26. package/cjs/browser/locationChangeObservable.js.map +1 -0
  27. package/cjs/browser/performanceObservable.d.ts +174 -0
  28. package/cjs/browser/performanceObservable.js +126 -0
  29. package/cjs/browser/performanceObservable.js.map +1 -0
  30. package/cjs/browser/performanceUtils.d.ts +7 -0
  31. package/cjs/browser/performanceUtils.js +42 -0
  32. package/cjs/browser/performanceUtils.js.map +1 -0
  33. package/cjs/browser/scroll.d.ts +2 -0
  34. package/cjs/browser/scroll.js +33 -0
  35. package/cjs/browser/scroll.js.map +1 -0
  36. package/cjs/browser/viewportObservable.d.ts +10 -0
  37. package/cjs/browser/viewportObservable.js +37 -0
  38. package/cjs/browser/viewportObservable.js.map +1 -0
  39. package/cjs/browser/windowOpenObservable.d.ts +5 -0
  40. package/cjs/browser/windowOpenObservable.js +10 -0
  41. package/cjs/browser/windowOpenObservable.js.map +1 -0
  42. package/cjs/domain/action/actionCollection.d.ts +21 -0
  43. package/cjs/domain/action/actionCollection.js +96 -0
  44. package/cjs/domain/action/actionCollection.js.map +1 -0
  45. package/cjs/domain/action/actionNameConstants.d.ts +18 -0
  46. package/cjs/domain/action/actionNameConstants.js +11 -0
  47. package/cjs/domain/action/actionNameConstants.js.map +1 -0
  48. package/cjs/domain/action/clickChain.d.ts +8 -0
  49. package/cjs/domain/action/clickChain.js +61 -0
  50. package/cjs/domain/action/clickChain.js.map +1 -0
  51. package/cjs/domain/action/computeFrustration.d.ts +6 -0
  52. package/cjs/domain/action/computeFrustration.js +70 -0
  53. package/cjs/domain/action/computeFrustration.js.map +1 -0
  54. package/cjs/domain/action/getActionNameFromElement.d.ts +4 -0
  55. package/cjs/domain/action/getActionNameFromElement.js +239 -0
  56. package/cjs/domain/action/getActionNameFromElement.js.map +1 -0
  57. package/cjs/domain/action/interactionSelectorCache.d.ts +5 -0
  58. package/cjs/domain/action/interactionSelectorCache.js +23 -0
  59. package/cjs/domain/action/interactionSelectorCache.js.map +1 -0
  60. package/cjs/domain/action/listenActionEvents.d.ts +19 -0
  61. package/cjs/domain/action/listenActionEvents.js +61 -0
  62. package/cjs/domain/action/listenActionEvents.js.map +1 -0
  63. package/cjs/domain/action/trackClickActions.d.ts +81 -0
  64. package/cjs/domain/action/trackClickActions.js +237 -0
  65. package/cjs/domain/action/trackClickActions.js.map +1 -0
  66. package/cjs/domain/assembly.d.ts +5 -0
  67. package/cjs/domain/assembly.js +102 -0
  68. package/cjs/domain/assembly.js.map +1 -0
  69. package/cjs/domain/configuration/configuration.d.ts +325 -0
  70. package/cjs/domain/configuration/configuration.js +205 -0
  71. package/cjs/domain/configuration/configuration.js.map +1 -0
  72. package/cjs/domain/configuration/index.d.ts +2 -0
  73. package/cjs/domain/configuration/index.js +19 -0
  74. package/cjs/domain/configuration/index.js.map +1 -0
  75. package/cjs/domain/configuration/jsonPathParser.d.ts +28 -0
  76. package/cjs/domain/configuration/jsonPathParser.js +159 -0
  77. package/cjs/domain/configuration/jsonPathParser.js.map +1 -0
  78. package/cjs/domain/configuration/remoteConfiguration.d.ts +39 -0
  79. package/cjs/domain/configuration/remoteConfiguration.js +243 -0
  80. package/cjs/domain/configuration/remoteConfiguration.js.map +1 -0
  81. package/cjs/domain/configuration/remoteConfiguration.types.d.ts +138 -0
  82. package/cjs/domain/configuration/remoteConfiguration.types.js +7 -0
  83. package/cjs/domain/configuration/remoteConfiguration.types.js.map +1 -0
  84. package/cjs/domain/contexts/ciVisibilityContext.d.ts +12 -0
  85. package/cjs/domain/contexts/ciVisibilityContext.js +34 -0
  86. package/cjs/domain/contexts/ciVisibilityContext.js.map +1 -0
  87. package/cjs/domain/contexts/connectivityContext.d.ts +2 -0
  88. package/cjs/domain/contexts/connectivityContext.js +11 -0
  89. package/cjs/domain/contexts/connectivityContext.js.map +1 -0
  90. package/cjs/domain/contexts/defaultContext.d.ts +4 -0
  91. package/cjs/domain/contexts/defaultContext.js +34 -0
  92. package/cjs/domain/contexts/defaultContext.js.map +1 -0
  93. package/cjs/domain/contexts/displayContext.d.ts +6 -0
  94. package/cjs/domain/contexts/displayContext.js +28 -0
  95. package/cjs/domain/contexts/displayContext.js.map +1 -0
  96. package/cjs/domain/contexts/featureFlagContext.d.ts +19 -0
  97. package/cjs/domain/contexts/featureFlagContext.js +53 -0
  98. package/cjs/domain/contexts/featureFlagContext.js.map +1 -0
  99. package/cjs/domain/contexts/internalContext.d.ts +12 -0
  100. package/cjs/domain/contexts/internalContext.js +26 -0
  101. package/cjs/domain/contexts/internalContext.js.map +1 -0
  102. package/cjs/domain/contexts/pageStateHistory.d.ts +23 -0
  103. package/cjs/domain/contexts/pageStateHistory.js +104 -0
  104. package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
  105. package/cjs/domain/contexts/sessionContext.d.ts +5 -0
  106. package/cjs/domain/contexts/sessionContext.js +47 -0
  107. package/cjs/domain/contexts/sessionContext.js.map +1 -0
  108. package/cjs/domain/contexts/syntheticsContext.d.ts +2 -0
  109. package/cjs/domain/contexts/syntheticsContext.js +25 -0
  110. package/cjs/domain/contexts/syntheticsContext.js.map +1 -0
  111. package/cjs/domain/contexts/trackingConsentContext.d.ts +3 -0
  112. package/cjs/domain/contexts/trackingConsentContext.js +14 -0
  113. package/cjs/domain/contexts/trackingConsentContext.js.map +1 -0
  114. package/cjs/domain/contexts/urlContexts.d.ts +22 -0
  115. package/cjs/domain/contexts/urlContexts.js +64 -0
  116. package/cjs/domain/contexts/urlContexts.js.map +1 -0
  117. package/cjs/domain/contexts/userAgentDataContext.d.ts +2 -0
  118. package/cjs/domain/contexts/userAgentDataContext.js +31 -0
  119. package/cjs/domain/contexts/userAgentDataContext.js.map +1 -0
  120. package/cjs/domain/contexts/viewHistory.d.ts +17 -0
  121. package/cjs/domain/contexts/viewHistory.js +48 -0
  122. package/cjs/domain/contexts/viewHistory.js.map +1 -0
  123. package/cjs/domain/discardNegativeDuration.d.ts +2 -0
  124. package/cjs/domain/discardNegativeDuration.js +8 -0
  125. package/cjs/domain/discardNegativeDuration.js.map +1 -0
  126. package/cjs/domain/error/errorCollection.d.ts +17 -0
  127. package/cjs/domain/error/errorCollection.js +74 -0
  128. package/cjs/domain/error/errorCollection.js.map +1 -0
  129. package/cjs/domain/error/trackConsoleError.d.ts +4 -0
  130. package/cjs/domain/error/trackConsoleError.js +13 -0
  131. package/cjs/domain/error/trackConsoleError.js.map +1 -0
  132. package/cjs/domain/error/trackReportError.d.ts +5 -0
  133. package/cjs/domain/error/trackReportError.js +16 -0
  134. package/cjs/domain/error/trackReportError.js.map +1 -0
  135. package/cjs/domain/event/eventCollection.d.ts +10 -0
  136. package/cjs/domain/event/eventCollection.js +27 -0
  137. package/cjs/domain/event/eventCollection.js.map +1 -0
  138. package/cjs/domain/getSelectorFromElement.d.ts +64 -0
  139. package/cjs/domain/getSelectorFromElement.js +218 -0
  140. package/cjs/domain/getSelectorFromElement.js.map +1 -0
  141. package/cjs/domain/getSessionReplayUrl.d.ts +9 -0
  142. package/cjs/domain/getSessionReplayUrl.js +34 -0
  143. package/cjs/domain/getSessionReplayUrl.js.map +1 -0
  144. package/cjs/domain/hooks.d.ts +23 -0
  145. package/cjs/domain/hooks.js +6 -0
  146. package/cjs/domain/hooks.js.map +1 -0
  147. package/cjs/domain/lifeCycle.d.ts +73 -0
  148. package/cjs/domain/lifeCycle.js +6 -0
  149. package/cjs/domain/lifeCycle.js.map +1 -0
  150. package/cjs/domain/limitModification.d.ts +8 -0
  151. package/cjs/domain/limitModification.js +46 -0
  152. package/cjs/domain/limitModification.js.map +1 -0
  153. package/cjs/domain/longTask/longTaskCollection.d.ts +18 -0
  154. package/cjs/domain/longTask/longTaskCollection.js +91 -0
  155. package/cjs/domain/longTask/longTaskCollection.js.map +1 -0
  156. package/cjs/domain/plugins.d.ts +40 -0
  157. package/cjs/domain/plugins.js +15 -0
  158. package/cjs/domain/plugins.js.map +1 -0
  159. package/cjs/domain/privacy.d.ts +44 -0
  160. package/cjs/domain/privacy.js +313 -0
  161. package/cjs/domain/privacy.js.map +1 -0
  162. package/cjs/domain/privacyConstants.d.ts +23 -0
  163. package/cjs/domain/privacyConstants.js +39 -0
  164. package/cjs/domain/privacyConstants.js.map +1 -0
  165. package/cjs/domain/requestCollection.d.ts +54 -0
  166. package/cjs/domain/requestCollection.js +111 -0
  167. package/cjs/domain/requestCollection.js.map +1 -0
  168. package/cjs/domain/resource/graphql.d.ts +23 -0
  169. package/cjs/domain/resource/graphql.js +97 -0
  170. package/cjs/domain/resource/graphql.js.map +1 -0
  171. package/cjs/domain/resource/matchRequestResourceEntry.d.ts +16 -0
  172. package/cjs/domain/resource/matchRequestResourceEntry.js +49 -0
  173. package/cjs/domain/resource/matchRequestResourceEntry.js.map +1 -0
  174. package/cjs/domain/resource/requestRegistry.d.ts +9 -0
  175. package/cjs/domain/resource/requestRegistry.js +41 -0
  176. package/cjs/domain/resource/requestRegistry.js.map +1 -0
  177. package/cjs/domain/resource/resourceCollection.d.ts +7 -0
  178. package/cjs/domain/resource/resourceCollection.js +190 -0
  179. package/cjs/domain/resource/resourceCollection.js.map +1 -0
  180. package/cjs/domain/resource/resourceUtils.d.ts +55 -0
  181. package/cjs/domain/resource/resourceUtils.js +259 -0
  182. package/cjs/domain/resource/resourceUtils.js.map +1 -0
  183. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +4 -0
  184. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js +24 -0
  185. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  186. package/cjs/domain/rumSessionManager.d.ts +36 -0
  187. package/cjs/domain/rumSessionManager.js +77 -0
  188. package/cjs/domain/rumSessionManager.js.map +1 -0
  189. package/cjs/domain/sampler/sampler.d.ts +10 -0
  190. package/cjs/domain/sampler/sampler.js +63 -0
  191. package/cjs/domain/sampler/sampler.js.map +1 -0
  192. package/cjs/domain/startCustomerDataTelemetry.d.ts +4 -0
  193. package/cjs/domain/startCustomerDataTelemetry.js +56 -0
  194. package/cjs/domain/startCustomerDataTelemetry.js.map +1 -0
  195. package/cjs/domain/tracing/getDocumentTraceId.d.ts +12 -0
  196. package/cjs/domain/tracing/getDocumentTraceId.js +76 -0
  197. package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
  198. package/cjs/domain/tracing/identifier.d.ts +13 -0
  199. package/cjs/domain/tracing/identifier.js +55 -0
  200. package/cjs/domain/tracing/identifier.js.map +1 -0
  201. package/cjs/domain/tracing/sampler.d.ts +10 -0
  202. package/cjs/domain/tracing/sampler.js +69 -0
  203. package/cjs/domain/tracing/sampler.js.map +1 -0
  204. package/cjs/domain/tracing/tracer.d.ts +30 -0
  205. package/cjs/domain/tracing/tracer.js +161 -0
  206. package/cjs/domain/tracing/tracer.js.map +1 -0
  207. package/cjs/domain/tracing/tracer.types.d.ts +12 -0
  208. package/cjs/domain/tracing/tracer.types.js +3 -0
  209. package/cjs/domain/tracing/tracer.types.js.map +1 -0
  210. package/cjs/domain/trackEventCounts.d.ts +17 -0
  211. package/cjs/domain/trackEventCounts.js +50 -0
  212. package/cjs/domain/trackEventCounts.js.map +1 -0
  213. package/cjs/domain/view/bfCacheSupport.d.ts +2 -0
  214. package/cjs/domain/view/bfCacheSupport.js +13 -0
  215. package/cjs/domain/view/bfCacheSupport.js.map +1 -0
  216. package/cjs/domain/view/trackViewEventCounts.d.ts +5 -0
  217. package/cjs/domain/view/trackViewEventCounts.js +16 -0
  218. package/cjs/domain/view/trackViewEventCounts.js.map +1 -0
  219. package/cjs/domain/view/trackViews.d.ts +65 -0
  220. package/cjs/domain/view/trackViews.js +275 -0
  221. package/cjs/domain/view/trackViews.js.map +1 -0
  222. package/cjs/domain/view/viewCollection.d.ts +18 -0
  223. package/cjs/domain/view/viewCollection.js +153 -0
  224. package/cjs/domain/view/viewCollection.js.map +1 -0
  225. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +6 -0
  226. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js +32 -0
  227. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -0
  228. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.d.ts +18 -0
  229. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js +44 -0
  230. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -0
  231. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +6 -0
  232. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +44 -0
  233. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +1 -0
  234. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +8 -0
  235. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js +17 -0
  236. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -0
  237. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +21 -0
  238. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js +37 -0
  239. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -0
  240. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +37 -0
  241. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js +135 -0
  242. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -0
  243. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +13 -0
  244. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js +39 -0
  245. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -0
  246. package/cjs/domain/view/viewMetrics/trackFirstHidden.d.ts +10 -0
  247. package/cjs/domain/view/viewMetrics/trackFirstHidden.js +33 -0
  248. package/cjs/domain/view/viewMetrics/trackFirstHidden.js.map +1 -0
  249. package/cjs/domain/view/viewMetrics/trackFirstInput.d.ts +19 -0
  250. package/cjs/domain/view/viewMetrics/trackFirstInput.js +43 -0
  251. package/cjs/domain/view/viewMetrics/trackFirstInput.js.map +1 -0
  252. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +15 -0
  253. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js +41 -0
  254. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -0
  255. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +25 -0
  256. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js +155 -0
  257. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -0
  258. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +18 -0
  259. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js +61 -0
  260. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -0
  261. package/cjs/domain/view/viewMetrics/trackLoadingTime.d.ts +14 -0
  262. package/cjs/domain/view/viewMetrics/trackLoadingTime.js +50 -0
  263. package/cjs/domain/view/viewMetrics/trackLoadingTime.js.map +1 -0
  264. package/cjs/domain/view/viewMetrics/trackNavigationTimings.d.ts +14 -0
  265. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js +43 -0
  266. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -0
  267. package/cjs/domain/view/viewMetrics/trackScrollMetrics.d.ts +25 -0
  268. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js +78 -0
  269. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -0
  270. package/cjs/domain/vital/vitalCollection.d.ts +55 -0
  271. package/cjs/domain/vital/vitalCollection.js +113 -0
  272. package/cjs/domain/vital/vitalCollection.js.map +1 -0
  273. package/cjs/domain/waitPageActivityEnd.d.ts +54 -0
  274. package/cjs/domain/waitPageActivityEnd.js +129 -0
  275. package/cjs/domain/waitPageActivityEnd.js.map +1 -0
  276. package/cjs/domainContext.types.d.ts +39 -0
  277. package/cjs/domainContext.types.js +6 -0
  278. package/cjs/domainContext.types.js.map +1 -0
  279. package/cjs/index.d.ts +41 -0
  280. package/cjs/index.js +59 -0
  281. package/cjs/index.js.map +1 -0
  282. package/cjs/rawRumEvent.types.d.ts +326 -0
  283. package/cjs/rawRumEvent.types.js +34 -0
  284. package/cjs/rawRumEvent.types.js.map +1 -0
  285. package/cjs/rumEvent.types.d.ts +2026 -0
  286. package/cjs/rumEvent.types.js +7 -0
  287. package/cjs/rumEvent.types.js.map +1 -0
  288. package/cjs/transport/formDataTransport.d.ts +16 -0
  289. package/cjs/transport/formDataTransport.js +46 -0
  290. package/cjs/transport/formDataTransport.js.map +1 -0
  291. package/cjs/transport/startRumBatch.d.ts +5 -0
  292. package/cjs/transport/startRumBatch.js +33 -0
  293. package/cjs/transport/startRumBatch.js.map +1 -0
  294. package/cjs/transport/startRumEventBridge.d.ts +2 -0
  295. package/cjs/transport/startRumEventBridge.js +11 -0
  296. package/cjs/transport/startRumEventBridge.js.map +1 -0
  297. package/esm/boot/preStartRum.d.ts +7 -0
  298. package/esm/boot/preStartRum.js +187 -0
  299. package/esm/boot/preStartRum.js.map +1 -0
  300. package/esm/boot/rumPublicApi.d.ts +409 -0
  301. package/esm/boot/rumPublicApi.js +165 -0
  302. package/esm/boot/rumPublicApi.js.map +1 -0
  303. package/esm/boot/startRum.d.ts +109 -0
  304. package/esm/boot/startRum.js +149 -0
  305. package/esm/boot/startRum.js.map +1 -0
  306. package/esm/browser/cookieObservable.d.ts +8 -0
  307. package/esm/browser/cookieObservable.js +35 -0
  308. package/esm/browser/cookieObservable.js.map +1 -0
  309. package/esm/browser/domMutationObservable.d.ts +27 -0
  310. package/esm/browser/domMutationObservable.js +54 -0
  311. package/esm/browser/domMutationObservable.js.map +1 -0
  312. package/esm/browser/firstInputPolyfill.d.ts +8 -0
  313. package/esm/browser/firstInputPolyfill.js +65 -0
  314. package/esm/browser/firstInputPolyfill.js.map +1 -0
  315. package/esm/browser/htmlDomUtils.d.ts +13 -0
  316. package/esm/browser/htmlDomUtils.js +36 -0
  317. package/esm/browser/htmlDomUtils.js.map +1 -0
  318. package/esm/browser/locationChangeObservable.d.ts +7 -0
  319. package/esm/browser/locationChangeObservable.js +48 -0
  320. package/esm/browser/locationChangeObservable.js.map +1 -0
  321. package/esm/browser/performanceObservable.d.ts +174 -0
  322. package/esm/browser/performanceObservable.js +121 -0
  323. package/esm/browser/performanceObservable.js.map +1 -0
  324. package/esm/browser/performanceUtils.d.ts +7 -0
  325. package/esm/browser/performanceUtils.js +38 -0
  326. package/esm/browser/performanceUtils.js.map +1 -0
  327. package/esm/browser/scroll.d.ts +2 -0
  328. package/esm/browser/scroll.js +29 -0
  329. package/esm/browser/scroll.js.map +1 -0
  330. package/esm/browser/viewportObservable.d.ts +10 -0
  331. package/esm/browser/viewportObservable.js +32 -0
  332. package/esm/browser/viewportObservable.js.map +1 -0
  333. package/esm/browser/windowOpenObservable.d.ts +5 -0
  334. package/esm/browser/windowOpenObservable.js +7 -0
  335. package/esm/browser/windowOpenObservable.js.map +1 -0
  336. package/esm/domain/action/actionCollection.d.ts +21 -0
  337. package/esm/domain/action/actionCollection.js +93 -0
  338. package/esm/domain/action/actionCollection.js.map +1 -0
  339. package/esm/domain/action/actionNameConstants.d.ts +18 -0
  340. package/esm/domain/action/actionNameConstants.js +8 -0
  341. package/esm/domain/action/actionNameConstants.js.map +1 -0
  342. package/esm/domain/action/clickChain.d.ts +8 -0
  343. package/esm/domain/action/clickChain.js +57 -0
  344. package/esm/domain/action/clickChain.js.map +1 -0
  345. package/esm/domain/action/computeFrustration.d.ts +6 -0
  346. package/esm/domain/action/computeFrustration.js +65 -0
  347. package/esm/domain/action/computeFrustration.js.map +1 -0
  348. package/esm/domain/action/getActionNameFromElement.d.ts +4 -0
  349. package/esm/domain/action/getActionNameFromElement.js +236 -0
  350. package/esm/domain/action/getActionNameFromElement.js.map +1 -0
  351. package/esm/domain/action/interactionSelectorCache.d.ts +5 -0
  352. package/esm/domain/action/interactionSelectorCache.js +18 -0
  353. package/esm/domain/action/interactionSelectorCache.js.map +1 -0
  354. package/esm/domain/action/listenActionEvents.d.ts +19 -0
  355. package/esm/domain/action/listenActionEvents.js +58 -0
  356. package/esm/domain/action/listenActionEvents.js.map +1 -0
  357. package/esm/domain/action/trackClickActions.d.ts +81 -0
  358. package/esm/domain/action/trackClickActions.js +232 -0
  359. package/esm/domain/action/trackClickActions.js.map +1 -0
  360. package/esm/domain/assembly.d.ts +5 -0
  361. package/esm/domain/assembly.js +99 -0
  362. package/esm/domain/assembly.js.map +1 -0
  363. package/esm/domain/configuration/configuration.d.ts +325 -0
  364. package/esm/domain/configuration/configuration.js +200 -0
  365. package/esm/domain/configuration/configuration.js.map +1 -0
  366. package/esm/domain/configuration/index.d.ts +2 -0
  367. package/esm/domain/configuration/index.js +3 -0
  368. package/esm/domain/configuration/index.js.map +1 -0
  369. package/esm/domain/configuration/jsonPathParser.d.ts +28 -0
  370. package/esm/domain/configuration/jsonPathParser.js +156 -0
  371. package/esm/domain/configuration/jsonPathParser.js.map +1 -0
  372. package/esm/domain/configuration/remoteConfiguration.d.ts +39 -0
  373. package/esm/domain/configuration/remoteConfiguration.js +236 -0
  374. package/esm/domain/configuration/remoteConfiguration.js.map +1 -0
  375. package/esm/domain/configuration/remoteConfiguration.types.d.ts +138 -0
  376. package/esm/domain/configuration/remoteConfiguration.types.js +6 -0
  377. package/esm/domain/configuration/remoteConfiguration.types.js.map +1 -0
  378. package/esm/domain/contexts/ciVisibilityContext.d.ts +12 -0
  379. package/esm/domain/contexts/ciVisibilityContext.js +30 -0
  380. package/esm/domain/contexts/ciVisibilityContext.js.map +1 -0
  381. package/esm/domain/contexts/connectivityContext.d.ts +2 -0
  382. package/esm/domain/contexts/connectivityContext.js +8 -0
  383. package/esm/domain/contexts/connectivityContext.js.map +1 -0
  384. package/esm/domain/contexts/defaultContext.d.ts +4 -0
  385. package/esm/domain/contexts/defaultContext.js +31 -0
  386. package/esm/domain/contexts/defaultContext.js.map +1 -0
  387. package/esm/domain/contexts/displayContext.d.ts +6 -0
  388. package/esm/domain/contexts/displayContext.js +25 -0
  389. package/esm/domain/contexts/displayContext.js.map +1 -0
  390. package/esm/domain/contexts/featureFlagContext.d.ts +19 -0
  391. package/esm/domain/contexts/featureFlagContext.js +49 -0
  392. package/esm/domain/contexts/featureFlagContext.js.map +1 -0
  393. package/esm/domain/contexts/internalContext.d.ts +12 -0
  394. package/esm/domain/contexts/internalContext.js +23 -0
  395. package/esm/domain/contexts/internalContext.js.map +1 -0
  396. package/esm/domain/contexts/pageStateHistory.d.ts +23 -0
  397. package/esm/domain/contexts/pageStateHistory.js +100 -0
  398. package/esm/domain/contexts/pageStateHistory.js.map +1 -0
  399. package/esm/domain/contexts/sessionContext.d.ts +5 -0
  400. package/esm/domain/contexts/sessionContext.js +44 -0
  401. package/esm/domain/contexts/sessionContext.js.map +1 -0
  402. package/esm/domain/contexts/syntheticsContext.d.ts +2 -0
  403. package/esm/domain/contexts/syntheticsContext.js +22 -0
  404. package/esm/domain/contexts/syntheticsContext.js.map +1 -0
  405. package/esm/domain/contexts/trackingConsentContext.d.ts +3 -0
  406. package/esm/domain/contexts/trackingConsentContext.js +11 -0
  407. package/esm/domain/contexts/trackingConsentContext.js.map +1 -0
  408. package/esm/domain/contexts/urlContexts.d.ts +22 -0
  409. package/esm/domain/contexts/urlContexts.js +60 -0
  410. package/esm/domain/contexts/urlContexts.js.map +1 -0
  411. package/esm/domain/contexts/userAgentDataContext.d.ts +2 -0
  412. package/esm/domain/contexts/userAgentDataContext.js +28 -0
  413. package/esm/domain/contexts/userAgentDataContext.js.map +1 -0
  414. package/esm/domain/contexts/viewHistory.d.ts +17 -0
  415. package/esm/domain/contexts/viewHistory.js +44 -0
  416. package/esm/domain/contexts/viewHistory.js.map +1 -0
  417. package/esm/domain/discardNegativeDuration.d.ts +2 -0
  418. package/esm/domain/discardNegativeDuration.js +5 -0
  419. package/esm/domain/discardNegativeDuration.js.map +1 -0
  420. package/esm/domain/error/errorCollection.d.ts +17 -0
  421. package/esm/domain/error/errorCollection.js +70 -0
  422. package/esm/domain/error/errorCollection.js.map +1 -0
  423. package/esm/domain/error/trackConsoleError.d.ts +4 -0
  424. package/esm/domain/error/trackConsoleError.js +10 -0
  425. package/esm/domain/error/trackConsoleError.js.map +1 -0
  426. package/esm/domain/error/trackReportError.d.ts +5 -0
  427. package/esm/domain/error/trackReportError.js +13 -0
  428. package/esm/domain/error/trackReportError.js.map +1 -0
  429. package/esm/domain/event/eventCollection.d.ts +10 -0
  430. package/esm/domain/event/eventCollection.js +24 -0
  431. package/esm/domain/event/eventCollection.js.map +1 -0
  432. package/esm/domain/getSelectorFromElement.d.ts +64 -0
  433. package/esm/domain/getSelectorFromElement.js +213 -0
  434. package/esm/domain/getSelectorFromElement.js.map +1 -0
  435. package/esm/domain/getSessionReplayUrl.d.ts +9 -0
  436. package/esm/domain/getSessionReplayUrl.js +30 -0
  437. package/esm/domain/getSessionReplayUrl.js.map +1 -0
  438. package/esm/domain/hooks.d.ts +23 -0
  439. package/esm/domain/hooks.js +3 -0
  440. package/esm/domain/hooks.js.map +1 -0
  441. package/esm/domain/lifeCycle.d.ts +73 -0
  442. package/esm/domain/lifeCycle.js +3 -0
  443. package/esm/domain/lifeCycle.js.map +1 -0
  444. package/esm/domain/limitModification.d.ts +8 -0
  445. package/esm/domain/limitModification.js +43 -0
  446. package/esm/domain/limitModification.js.map +1 -0
  447. package/esm/domain/longTask/longTaskCollection.d.ts +18 -0
  448. package/esm/domain/longTask/longTaskCollection.js +87 -0
  449. package/esm/domain/longTask/longTaskCollection.js.map +1 -0
  450. package/esm/domain/plugins.d.ts +40 -0
  451. package/esm/domain/plugins.js +12 -0
  452. package/esm/domain/plugins.js.map +1 -0
  453. package/esm/domain/privacy.d.ts +44 -0
  454. package/esm/domain/privacy.js +302 -0
  455. package/esm/domain/privacy.js.map +1 -0
  456. package/esm/domain/privacyConstants.d.ts +23 -0
  457. package/esm/domain/privacyConstants.js +35 -0
  458. package/esm/domain/privacyConstants.js.map +1 -0
  459. package/esm/domain/requestCollection.d.ts +54 -0
  460. package/esm/domain/requestCollection.js +106 -0
  461. package/esm/domain/requestCollection.js.map +1 -0
  462. package/esm/domain/resource/graphql.d.ts +23 -0
  463. package/esm/domain/resource/graphql.js +91 -0
  464. package/esm/domain/resource/graphql.js.map +1 -0
  465. package/esm/domain/resource/matchRequestResourceEntry.d.ts +16 -0
  466. package/esm/domain/resource/matchRequestResourceEntry.js +46 -0
  467. package/esm/domain/resource/matchRequestResourceEntry.js.map +1 -0
  468. package/esm/domain/resource/requestRegistry.d.ts +9 -0
  469. package/esm/domain/resource/requestRegistry.js +37 -0
  470. package/esm/domain/resource/requestRegistry.js.map +1 -0
  471. package/esm/domain/resource/resourceCollection.d.ts +7 -0
  472. package/esm/domain/resource/resourceCollection.js +187 -0
  473. package/esm/domain/resource/resourceCollection.js.map +1 -0
  474. package/esm/domain/resource/resourceUtils.d.ts +55 -0
  475. package/esm/domain/resource/resourceUtils.js +244 -0
  476. package/esm/domain/resource/resourceUtils.js.map +1 -0
  477. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +4 -0
  478. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js +21 -0
  479. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  480. package/esm/domain/rumSessionManager.d.ts +36 -0
  481. package/esm/domain/rumSessionManager.js +72 -0
  482. package/esm/domain/rumSessionManager.js.map +1 -0
  483. package/esm/domain/sampler/sampler.d.ts +10 -0
  484. package/esm/domain/sampler/sampler.js +58 -0
  485. package/esm/domain/sampler/sampler.js.map +1 -0
  486. package/esm/domain/startCustomerDataTelemetry.d.ts +4 -0
  487. package/esm/domain/startCustomerDataTelemetry.js +52 -0
  488. package/esm/domain/startCustomerDataTelemetry.js.map +1 -0
  489. package/esm/domain/tracing/getDocumentTraceId.d.ts +12 -0
  490. package/esm/domain/tracing/getDocumentTraceId.js +68 -0
  491. package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
  492. package/esm/domain/tracing/identifier.d.ts +13 -0
  493. package/esm/domain/tracing/identifier.js +50 -0
  494. package/esm/domain/tracing/identifier.js.map +1 -0
  495. package/esm/domain/tracing/sampler.d.ts +10 -0
  496. package/esm/domain/tracing/sampler.js +64 -0
  497. package/esm/domain/tracing/sampler.js.map +1 -0
  498. package/esm/domain/tracing/tracer.d.ts +30 -0
  499. package/esm/domain/tracing/tracer.js +156 -0
  500. package/esm/domain/tracing/tracer.js.map +1 -0
  501. package/esm/domain/tracing/tracer.types.d.ts +12 -0
  502. package/esm/domain/tracing/tracer.types.js +2 -0
  503. package/esm/domain/tracing/tracer.types.js.map +1 -0
  504. package/esm/domain/trackEventCounts.d.ts +17 -0
  505. package/esm/domain/trackEventCounts.js +47 -0
  506. package/esm/domain/trackEventCounts.js.map +1 -0
  507. package/esm/domain/view/bfCacheSupport.d.ts +2 -0
  508. package/esm/domain/view/bfCacheSupport.js +10 -0
  509. package/esm/domain/view/bfCacheSupport.js.map +1 -0
  510. package/esm/domain/view/trackViewEventCounts.d.ts +5 -0
  511. package/esm/domain/view/trackViewEventCounts.js +13 -0
  512. package/esm/domain/view/trackViewEventCounts.js.map +1 -0
  513. package/esm/domain/view/trackViews.d.ts +65 -0
  514. package/esm/domain/view/trackViews.js +271 -0
  515. package/esm/domain/view/trackViews.js.map +1 -0
  516. package/esm/domain/view/viewCollection.d.ts +18 -0
  517. package/esm/domain/view/viewCollection.js +150 -0
  518. package/esm/domain/view/viewCollection.js.map +1 -0
  519. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +6 -0
  520. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js +28 -0
  521. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -0
  522. package/esm/domain/view/viewMetrics/interactionCountPolyfill.d.ts +18 -0
  523. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js +39 -0
  524. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -0
  525. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +6 -0
  526. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +41 -0
  527. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +1 -0
  528. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +8 -0
  529. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js +14 -0
  530. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -0
  531. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +21 -0
  532. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js +34 -0
  533. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -0
  534. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +37 -0
  535. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js +130 -0
  536. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -0
  537. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +13 -0
  538. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js +34 -0
  539. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -0
  540. package/esm/domain/view/viewMetrics/trackFirstHidden.d.ts +10 -0
  541. package/esm/domain/view/viewMetrics/trackFirstHidden.js +30 -0
  542. package/esm/domain/view/viewMetrics/trackFirstHidden.js.map +1 -0
  543. package/esm/domain/view/viewMetrics/trackFirstInput.d.ts +19 -0
  544. package/esm/domain/view/viewMetrics/trackFirstInput.js +40 -0
  545. package/esm/domain/view/viewMetrics/trackFirstInput.js.map +1 -0
  546. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +15 -0
  547. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js +38 -0
  548. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -0
  549. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +25 -0
  550. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js +149 -0
  551. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -0
  552. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +18 -0
  553. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js +57 -0
  554. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -0
  555. package/esm/domain/view/viewMetrics/trackLoadingTime.d.ts +14 -0
  556. package/esm/domain/view/viewMetrics/trackLoadingTime.js +47 -0
  557. package/esm/domain/view/viewMetrics/trackLoadingTime.js.map +1 -0
  558. package/esm/domain/view/viewMetrics/trackNavigationTimings.d.ts +14 -0
  559. package/esm/domain/view/viewMetrics/trackNavigationTimings.js +40 -0
  560. package/esm/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -0
  561. package/esm/domain/view/viewMetrics/trackScrollMetrics.d.ts +25 -0
  562. package/esm/domain/view/viewMetrics/trackScrollMetrics.js +72 -0
  563. package/esm/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -0
  564. package/esm/domain/vital/vitalCollection.d.ts +55 -0
  565. package/esm/domain/vital/vitalCollection.js +107 -0
  566. package/esm/domain/vital/vitalCollection.js.map +1 -0
  567. package/esm/domain/waitPageActivityEnd.d.ts +54 -0
  568. package/esm/domain/waitPageActivityEnd.js +123 -0
  569. package/esm/domain/waitPageActivityEnd.js.map +1 -0
  570. package/esm/domainContext.types.d.ts +39 -0
  571. package/esm/domainContext.types.js +5 -0
  572. package/esm/domainContext.types.js.map +1 -0
  573. package/esm/index.d.ts +41 -0
  574. package/esm/index.js +21 -0
  575. package/esm/index.js.map +1 -0
  576. package/esm/rawRumEvent.types.d.ts +326 -0
  577. package/esm/rawRumEvent.types.js +31 -0
  578. package/esm/rawRumEvent.types.js.map +1 -0
  579. package/esm/rumEvent.types.d.ts +2026 -0
  580. package/esm/rumEvent.types.js +6 -0
  581. package/esm/rumEvent.types.js.map +1 -0
  582. package/esm/transport/formDataTransport.d.ts +16 -0
  583. package/esm/transport/formDataTransport.js +43 -0
  584. package/esm/transport/formDataTransport.js.map +1 -0
  585. package/esm/transport/startRumBatch.d.ts +5 -0
  586. package/esm/transport/startRumBatch.js +30 -0
  587. package/esm/transport/startRumBatch.js.map +1 -0
  588. package/esm/transport/startRumEventBridge.d.ts +2 -0
  589. package/esm/transport/startRumEventBridge.js +8 -0
  590. package/esm/transport/startRumEventBridge.js.map +1 -0
  591. package/package.json +29 -0
  592. package/src/boot/preStartRum.ts +298 -0
  593. package/src/boot/rumPublicApi.ts +830 -0
  594. package/src/boot/startRum.ts +280 -0
  595. package/src/browser/cookieObservable.ts +63 -0
  596. package/src/browser/domMutationObservable.ts +98 -0
  597. package/src/browser/firstInputPolyfill.ts +87 -0
  598. package/src/browser/htmlDomUtils.ts +45 -0
  599. package/src/browser/locationChangeObservable.ts +69 -0
  600. package/src/browser/performanceObservable.ts +324 -0
  601. package/src/browser/performanceUtils.ts +50 -0
  602. package/src/browser/scroll.ts +25 -0
  603. package/src/browser/viewportObservable.ts +44 -0
  604. package/src/browser/windowOpenObservable.ts +7 -0
  605. package/src/domain/action/actionCollection.ts +146 -0
  606. package/src/domain/action/actionNameConstants.ts +20 -0
  607. package/src/domain/action/clickChain.ts +83 -0
  608. package/src/domain/action/computeFrustration.ts +77 -0
  609. package/src/domain/action/getActionNameFromElement.ts +337 -0
  610. package/src/domain/action/interactionSelectorCache.ts +21 -0
  611. package/src/domain/action/listenActionEvents.ts +119 -0
  612. package/src/domain/action/trackClickActions.ts +388 -0
  613. package/src/domain/assembly.ts +141 -0
  614. package/src/domain/configuration/configuration.ts +548 -0
  615. package/src/domain/configuration/index.ts +2 -0
  616. package/src/domain/configuration/jsonPathParser.ts +214 -0
  617. package/src/domain/configuration/remoteConfiguration.ts +304 -0
  618. package/src/domain/configuration/remoteConfiguration.types.ts +147 -0
  619. package/src/domain/contexts/ciVisibilityContext.ts +50 -0
  620. package/src/domain/contexts/connectivityContext.ts +12 -0
  621. package/src/domain/contexts/defaultContext.ts +43 -0
  622. package/src/domain/contexts/displayContext.ts +38 -0
  623. package/src/domain/contexts/featureFlagContext.ts +71 -0
  624. package/src/domain/contexts/internalContext.ts +34 -0
  625. package/src/domain/contexts/pageStateHistory.ts +171 -0
  626. package/src/domain/contexts/sessionContext.ts +59 -0
  627. package/src/domain/contexts/syntheticsContext.ts +33 -0
  628. package/src/domain/contexts/trackingConsentContext.ts +15 -0
  629. package/src/domain/contexts/urlContexts.ts +97 -0
  630. package/src/domain/contexts/userAgentDataContext.ts +36 -0
  631. package/src/domain/contexts/viewHistory.ts +70 -0
  632. package/src/domain/discardNegativeDuration.ts +6 -0
  633. package/src/domain/error/errorCollection.ts +107 -0
  634. package/src/domain/error/trackConsoleError.ts +14 -0
  635. package/src/domain/error/trackReportError.ts +16 -0
  636. package/src/domain/event/eventCollection.ts +53 -0
  637. package/src/domain/getSelectorFromElement.ts +268 -0
  638. package/src/domain/getSessionReplayUrl.ts +47 -0
  639. package/src/domain/hooks.ts +31 -0
  640. package/src/domain/lifeCycle.ts +103 -0
  641. package/src/domain/limitModification.ts +66 -0
  642. package/src/domain/longTask/longTaskCollection.ts +133 -0
  643. package/src/domain/plugins.ts +59 -0
  644. package/src/domain/privacy.ts +355 -0
  645. package/src/domain/privacyConstants.ts +43 -0
  646. package/src/domain/requestCollection.ts +179 -0
  647. package/src/domain/resource/graphql.ts +135 -0
  648. package/src/domain/resource/matchRequestResourceEntry.ts +68 -0
  649. package/src/domain/resource/requestRegistry.ts +52 -0
  650. package/src/domain/resource/resourceCollection.ts +273 -0
  651. package/src/domain/resource/resourceUtils.ts +355 -0
  652. package/src/domain/resource/retrieveInitialDocumentResourceTiming.ts +27 -0
  653. package/src/domain/rumSessionManager.ts +134 -0
  654. package/src/domain/sampler/sampler.ts +63 -0
  655. package/src/domain/startCustomerDataTelemetry.ts +83 -0
  656. package/src/domain/tracing/getDocumentTraceId.ts +90 -0
  657. package/src/domain/tracing/identifier.ts +69 -0
  658. package/src/domain/tracing/sampler.ts +69 -0
  659. package/src/domain/tracing/tracer.ts +248 -0
  660. package/src/domain/tracing/tracer.types.ts +13 -0
  661. package/src/domain/trackEventCounts.ts +67 -0
  662. package/src/domain/view/bfCacheSupport.ts +20 -0
  663. package/src/domain/view/trackViewEventCounts.ts +15 -0
  664. package/src/domain/view/trackViews.ts +431 -0
  665. package/src/domain/view/viewCollection.ts +203 -0
  666. package/src/domain/view/viewMetrics/getClsAttributionImpactedArea.ts +34 -0
  667. package/src/domain/view/viewMetrics/interactionCountPolyfill.ts +55 -0
  668. package/src/domain/view/viewMetrics/startInitialViewMetricsTelemetry.ts +70 -0
  669. package/src/domain/view/viewMetrics/trackBfcacheMetrics.ts +20 -0
  670. package/src/domain/view/viewMetrics/trackCommonViewMetrics.ts +78 -0
  671. package/src/domain/view/viewMetrics/trackCumulativeLayoutShift.ts +180 -0
  672. package/src/domain/view/viewMetrics/trackFirstContentfulPaint.ts +47 -0
  673. package/src/domain/view/viewMetrics/trackFirstHidden.ts +53 -0
  674. package/src/domain/view/viewMetrics/trackFirstInput.ts +59 -0
  675. package/src/domain/view/viewMetrics/trackInitialViewMetrics.ts +66 -0
  676. package/src/domain/view/viewMetrics/trackInteractionToNextPaint.ts +193 -0
  677. package/src/domain/view/viewMetrics/trackLargestContentfulPaint.ts +87 -0
  678. package/src/domain/view/viewMetrics/trackLoadingTime.ts +69 -0
  679. package/src/domain/view/viewMetrics/trackNavigationTimings.ts +66 -0
  680. package/src/domain/view/viewMetrics/trackScrollMetrics.ts +119 -0
  681. package/src/domain/vital/vitalCollection.ts +207 -0
  682. package/src/domain/waitPageActivityEnd.ts +189 -0
  683. package/src/domainContext.types.ts +61 -0
  684. package/src/index.ts +76 -0
  685. package/src/rawRumEvent.types.ts +409 -0
  686. package/src/rumEvent.types.ts +2151 -0
  687. package/src/transport/formDataTransport.ts +85 -0
  688. package/src/transport/startRumBatch.ts +46 -0
  689. package/src/transport/startRumEventBridge.ts +12 -0
@@ -0,0 +1,355 @@
1
+ import type { Duration, RelativeTime } from '@kubesense/kubesense-browser-core'
2
+ import {
3
+ elapsed,
4
+ getPathName,
5
+ isValidUrl,
6
+ buildUrl,
7
+ matchList,
8
+ ResourceType,
9
+ toServerDuration,
10
+ isIntakeUrl,
11
+ isExperimentalFeatureEnabled,
12
+ ExperimentalFeature,
13
+ } from '@kubesense/kubesense-browser-core'
14
+ import type { MatchOption } from '@kubesense/kubesense-browser-core'
15
+
16
+ import type { RumPerformanceResourceTiming } from '../../browser/performanceObservable'
17
+
18
+ import type { ResourceEntryDetailsElement, DeliveryType } from '../../rawRumEvent.types'
19
+
20
+ export interface ResourceEntryDetails {
21
+ worker?: ResourceEntryDetailsElement
22
+ redirect?: ResourceEntryDetailsElement
23
+ dns?: ResourceEntryDetailsElement
24
+ connect?: ResourceEntryDetailsElement
25
+ ssl?: ResourceEntryDetailsElement
26
+ first_byte?: ResourceEntryDetailsElement
27
+ download?: ResourceEntryDetailsElement
28
+ }
29
+
30
+ export const FAKE_INITIAL_DOCUMENT = 'initial_document'
31
+
32
+ const RESOURCE_TYPES: Array<[ResourceType, (initiatorType: string, path: string) => boolean]> = [
33
+ [ResourceType.DOCUMENT, (initiatorType: string) => FAKE_INITIAL_DOCUMENT === initiatorType],
34
+ [ResourceType.XHR, (initiatorType: string) => 'xmlhttprequest' === initiatorType],
35
+ [ResourceType.FETCH, (initiatorType: string) => 'fetch' === initiatorType],
36
+ [ResourceType.BEACON, (initiatorType: string) => 'beacon' === initiatorType],
37
+ [ResourceType.CSS, (_: string, path: string) => /\.css$/i.test(path)],
38
+ [ResourceType.JS, (_: string, path: string) => /\.js$/i.test(path)],
39
+ [
40
+ ResourceType.IMAGE,
41
+ (initiatorType: string, path: string) =>
42
+ ['image', 'img', 'icon'].includes(initiatorType) || /\.(gif|jpg|jpeg|tiff|png|svg|ico)$/i.exec(path) !== null,
43
+ ],
44
+ [ResourceType.FONT, (_: string, path: string) => /\.(woff|eot|woff2|ttf)$/i.exec(path) !== null],
45
+ [
46
+ ResourceType.MEDIA,
47
+ (initiatorType: string, path: string) =>
48
+ ['audio', 'video'].includes(initiatorType) || /\.(mp3|mp4)$/i.exec(path) !== null,
49
+ ],
50
+ ]
51
+
52
+ export function computeResourceEntryType(entry: RumPerformanceResourceTiming) {
53
+ const url = entry.name
54
+ if (!isValidUrl(url)) {
55
+ return ResourceType.OTHER
56
+ }
57
+ const path = getPathName(url)
58
+ for (const [type, isType] of RESOURCE_TYPES) {
59
+ if (isType(entry.initiatorType, path)) {
60
+ return type
61
+ }
62
+ }
63
+ return ResourceType.OTHER
64
+ }
65
+
66
+ function areInOrder(...numbers: number[]) {
67
+ for (let i = 1; i < numbers.length; i += 1) {
68
+ if (numbers[i - 1] > numbers[i]) {
69
+ return false
70
+ }
71
+ }
72
+ return true
73
+ }
74
+
75
+ export function isResourceEntryRequestType(entry: RumPerformanceResourceTiming) {
76
+ return entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch'
77
+ }
78
+
79
+ export function computeResourceEntryDuration(entry: RumPerformanceResourceTiming): Duration {
80
+ const { duration, startTime, responseEnd } = entry
81
+
82
+ // Safari duration is always 0 on timings blocked by cross origin policies.
83
+ if (duration === 0 && startTime < responseEnd) {
84
+ return elapsed(startTime, responseEnd)
85
+ }
86
+
87
+ return duration
88
+ }
89
+
90
+ export function computeResourceEntryDetails(entry: RumPerformanceResourceTiming): ResourceEntryDetails | undefined {
91
+ if (!hasValidResourceEntryTimings(entry)) {
92
+ return undefined
93
+ }
94
+ const {
95
+ startTime,
96
+ fetchStart,
97
+ workerStart,
98
+ redirectStart,
99
+ redirectEnd,
100
+ domainLookupStart,
101
+ domainLookupEnd,
102
+ connectStart,
103
+ secureConnectionStart,
104
+ connectEnd,
105
+ requestStart,
106
+ responseStart,
107
+ responseEnd,
108
+ } = entry
109
+
110
+ const details: ResourceEntryDetails = {
111
+ download: formatTiming(startTime, responseStart, responseEnd),
112
+ first_byte: formatTiming(startTime, requestStart, responseStart),
113
+ }
114
+
115
+ // Make sure a worker processing time is recorded
116
+ if (0 < workerStart && workerStart < fetchStart) {
117
+ details.worker = formatTiming(startTime, workerStart, fetchStart)
118
+ }
119
+
120
+ // Make sure a connection occurred
121
+ if (fetchStart < connectEnd) {
122
+ details.connect = formatTiming(startTime, connectStart, connectEnd)
123
+
124
+ // Make sure a secure connection occurred
125
+ if (connectStart <= secureConnectionStart && secureConnectionStart <= connectEnd) {
126
+ details.ssl = formatTiming(startTime, secureConnectionStart, connectEnd)
127
+ }
128
+ }
129
+
130
+ // Make sure a domain lookup occurred
131
+ if (fetchStart < domainLookupEnd) {
132
+ details.dns = formatTiming(startTime, domainLookupStart, domainLookupEnd)
133
+ }
134
+
135
+ // Make sure a redirection occurred
136
+ if (startTime < redirectEnd) {
137
+ details.redirect = formatTiming(startTime, redirectStart, redirectEnd)
138
+ }
139
+
140
+ return details
141
+ }
142
+
143
+ /**
144
+ * Entries with negative duration are unexpected and should be dismissed. The intake will ignore RUM
145
+ * Resource events with negative durations anyway.
146
+ * Since Chromium 128, more entries have unexpected negative durations, see
147
+ * https://issues.chromium.org/issues/363031537
148
+ */
149
+ export function hasValidResourceEntryDuration(entry: RumPerformanceResourceTiming) {
150
+ return entry.duration >= 0
151
+ }
152
+
153
+ export function hasValidResourceEntryTimings(entry: RumPerformanceResourceTiming) {
154
+ // Ensure timings are in the right order. On top of filtering out potential invalid
155
+ // RumPerformanceResourceTiming, it will ignore entries from requests where timings cannot be
156
+ // collected, for example cross origin requests without a "Timing-Allow-Origin" header allowing
157
+ // it.
158
+ const areCommonTimingsInOrder = areInOrder(
159
+ entry.startTime,
160
+ entry.fetchStart,
161
+ entry.domainLookupStart,
162
+ entry.domainLookupEnd,
163
+ entry.connectStart,
164
+ entry.connectEnd,
165
+ entry.requestStart,
166
+ entry.responseStart,
167
+ entry.responseEnd
168
+ )
169
+
170
+ const areRedirectionTimingsInOrder = hasRedirection(entry)
171
+ ? areInOrder(entry.startTime, entry.redirectStart, entry.redirectEnd, entry.fetchStart)
172
+ : true
173
+
174
+ return areCommonTimingsInOrder && areRedirectionTimingsInOrder
175
+ }
176
+
177
+ function hasRedirection(entry: RumPerformanceResourceTiming) {
178
+ return entry.redirectEnd > entry.startTime
179
+ }
180
+ function formatTiming(origin: RelativeTime, start: RelativeTime, end: RelativeTime) {
181
+ if (origin <= start && start <= end) {
182
+ return {
183
+ duration: toServerDuration(elapsed(start, end)),
184
+ start: toServerDuration(elapsed(origin, start)),
185
+ }
186
+ }
187
+ }
188
+
189
+ /**
190
+ * The 'nextHopProtocol' is an empty string for cross-origin resources without CORS headers,
191
+ * meaning the protocol is unknown, and we shouldn't report it.
192
+ * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/nextHopProtocol#cross-origin_resources
193
+ */
194
+ export function computeResourceEntryProtocol(entry: RumPerformanceResourceTiming) {
195
+ return entry.nextHopProtocol === '' ? undefined : entry.nextHopProtocol
196
+ }
197
+
198
+ /**
199
+ * Handles the 'deliveryType' property to distinguish between supported values ('cache', 'navigational-prefetch'),
200
+ * undefined (unsupported in some browsers), and other cases ('other' for unknown or unrecognized values).
201
+ * see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType
202
+ */
203
+ export function computeResourceEntryDeliveryType(entry: RumPerformanceResourceTiming): DeliveryType | undefined {
204
+ return entry.deliveryType === '' ? 'other' : entry.deliveryType
205
+ }
206
+
207
+ export function computeResourceEntrySize(entry: RumPerformanceResourceTiming) {
208
+ const { encodedBodySize, decodedBodySize, transferSize } = entry
209
+
210
+ // Report sizes when:
211
+ // 1. Timing data is valid (same-origin, non-cached) — timings in order confirms sizes are real
212
+ // 2. Body sizes are non-zero even without valid timings — happens for memory/disk-cached
213
+ // resources where browsers zero out responseStart but still expose body sizes
214
+ //
215
+ // We skip reporting when all sizes are 0 AND timings are invalid (cross-origin resources
216
+ // where the browser zeros everything out as a security restriction).
217
+ if (hasValidResourceEntryTimings(entry) || (decodedBodySize ?? 0) > 0 || (encodedBodySize ?? 0) > 0) {
218
+ return {
219
+ size: decodedBodySize,
220
+ encoded_body_size: encodedBodySize,
221
+ decoded_body_size: decodedBodySize,
222
+ transfer_size: transferSize,
223
+ }
224
+ }
225
+ return {
226
+ size: undefined,
227
+ encoded_body_size: undefined,
228
+ decoded_body_size: undefined,
229
+ transfer_size: undefined,
230
+ }
231
+ }
232
+
233
+ export function isAllowedRequestUrl(url: string) {
234
+ return url && (!isIntakeUrl(url) || isExperimentalFeatureEnabled(ExperimentalFeature.TRACK_INTAKE_REQUESTS))
235
+ }
236
+
237
+ type ProviderType =
238
+ | 'ad'
239
+ | 'advertising'
240
+ | 'analytics'
241
+ | 'cdn'
242
+ | 'content'
243
+ | 'customer-success'
244
+ | 'first party'
245
+ | 'hosting'
246
+ | 'marketing'
247
+ | 'other'
248
+ | 'social'
249
+ | 'tag-manager'
250
+ | 'utility'
251
+ | 'video'
252
+
253
+ interface KnownProvider {
254
+ domains: string[]
255
+ name: string
256
+ type: ProviderType
257
+ }
258
+
259
+ const KNOWN_PROVIDERS: KnownProvider[] = [
260
+ // Analytics
261
+ { domains: ['google-analytics.com', 'analytics.google.com'], name: 'Google Analytics', type: 'analytics' },
262
+ { domains: ['segment.com', 'segment.io', 'cdn.segment.com'], name: 'Segment', type: 'analytics' },
263
+ { domains: ['amplitude.com'], name: 'Amplitude', type: 'analytics' },
264
+ { domains: ['mixpanel.com'], name: 'Mixpanel', type: 'analytics' },
265
+ { domains: ['hotjar.com'], name: 'Hotjar', type: 'analytics' },
266
+ { domains: ['fullstory.com'], name: 'FullStory', type: 'analytics' },
267
+ { domains: ['heap.io'], name: 'Heap', type: 'analytics' },
268
+ // Tag Manager
269
+ { domains: ['googletagmanager.com'], name: 'Google Tag Manager', type: 'tag-manager' },
270
+ { domains: ['tealiumiq.com'], name: 'Tealium', type: 'tag-manager' },
271
+ // CDN
272
+ { domains: ['cloudfront.net'], name: 'Amazon CloudFront', type: 'cdn' },
273
+ { domains: ['fastly.net'], name: 'Fastly', type: 'cdn' },
274
+ { domains: ['akamaiedge.net', 'akamaistream.net', 'akamai.net'], name: 'Akamai', type: 'cdn' },
275
+ { domains: ['jsdelivr.net'], name: 'jsDelivr', type: 'cdn' },
276
+ { domains: ['unpkg.com'], name: 'unpkg', type: 'cdn' },
277
+ { domains: ['bootstrapcdn.com'], name: 'Bootstrap CDN', type: 'cdn' },
278
+ // Advertising
279
+ { domains: ['doubleclick.net'], name: 'Google DoubleClick', type: 'advertising' },
280
+ { domains: ['googlesyndication.com'], name: 'Google AdSense', type: 'advertising' },
281
+ { domains: ['adnxs.com'], name: 'AppNexus', type: 'advertising' },
282
+ { domains: ['criteo.com', 'criteo.net'], name: 'Criteo', type: 'advertising' },
283
+ // Social
284
+ { domains: ['facebook.com', 'fbcdn.net', 'connect.facebook.net'], name: 'Facebook', type: 'social' },
285
+ { domains: ['twitter.com', 'twimg.com', 'platform.twitter.com'], name: 'Twitter', type: 'social' },
286
+ { domains: ['linkedin.com'], name: 'LinkedIn', type: 'social' },
287
+ { domains: ['instagram.com', 'cdninstagram.com'], name: 'Instagram', type: 'social' },
288
+ { domains: ['pinterest.com'], name: 'Pinterest', type: 'social' },
289
+ // Video
290
+ { domains: ['youtube.com', 'youtu.be', 'ytimg.com', 'googlevideo.com'], name: 'YouTube', type: 'video' },
291
+ { domains: ['vimeo.com', 'vimeocdn.com'], name: 'Vimeo', type: 'video' },
292
+ { domains: ['wistia.com'], name: 'Wistia', type: 'video' },
293
+ // Marketing
294
+ { domains: ['hubspot.com', 'hs-scripts.com', 'hsforms.com'], name: 'HubSpot', type: 'marketing' },
295
+ { domains: ['marketo.com', 'mktoresp.com'], name: 'Marketo', type: 'marketing' },
296
+ { domains: ['mailchimp.com'], name: 'Mailchimp', type: 'marketing' },
297
+ // Customer Success
298
+ { domains: ['intercom.io', 'intercomcdn.com'], name: 'Intercom', type: 'customer-success' },
299
+ { domains: ['zendesk.com', 'zdassets.com'], name: 'Zendesk', type: 'customer-success' },
300
+ // Utility
301
+ { domains: ['stripe.com', 'js.stripe.com'], name: 'Stripe', type: 'utility' },
302
+ { domains: ['code.jquery.com'], name: 'jQuery', type: 'utility' },
303
+ { domains: ['recaptcha.net'], name: 'reCAPTCHA', type: 'utility' },
304
+ ]
305
+
306
+ export function computeResourceProvider(
307
+ url: string,
308
+ firstPartyDomains: MatchOption[] = []
309
+ ): { domain?: string; name?: string; type?: ProviderType } | undefined {
310
+ if (!isValidUrl(url)) {
311
+ return undefined
312
+ }
313
+
314
+ let hostname: string
315
+ try {
316
+ hostname = buildUrl(url).hostname
317
+ } catch {
318
+ return undefined
319
+ }
320
+
321
+ if (!hostname) {
322
+ return undefined
323
+ }
324
+
325
+ // First-party: same hostname as the page, or matches configured firstPartyDomains
326
+ if (hostname === location.hostname || (firstPartyDomains.length > 0 && matchList(firstPartyDomains, hostname))) {
327
+ return { domain: hostname, type: 'first party' }
328
+ }
329
+
330
+ for (const provider of KNOWN_PROVIDERS) {
331
+ for (const domain of provider.domains) {
332
+ if (hostname === domain || hostname.endsWith(`.${domain}`)) {
333
+ return { domain: hostname, name: provider.name, type: provider.type }
334
+ }
335
+ }
336
+ }
337
+
338
+ // Unknown third-party
339
+ return { domain: hostname, type: 'other' }
340
+ }
341
+
342
+ const DATA_URL_REGEX = /data:(.+)?(;base64)?,/g
343
+ export const MAX_RESOURCE_VALUE_CHAR_LENGTH = 24_000
344
+
345
+ export function sanitizeIfLongDataUrl(url: string, lengthLimit: number = MAX_RESOURCE_VALUE_CHAR_LENGTH): string {
346
+ if (url.length <= lengthLimit || !url.startsWith('data:')) {
347
+ return url
348
+ }
349
+ // truncate url first to a random length to prevent match error when the url is too long
350
+ const dataUrlMatchArray = url.substring(0, 100).match(DATA_URL_REGEX)
351
+ if (!dataUrlMatchArray) {
352
+ return url
353
+ }
354
+ return `${dataUrlMatchArray[0]}[...]`
355
+ }
@@ -0,0 +1,27 @@
1
+ import { runOnReadyState } from '@kubesense/kubesense-browser-core'
2
+ import { RumPerformanceEntryType } from '../../browser/performanceObservable'
3
+ import type { RumPerformanceResourceTiming } from '../../browser/performanceObservable'
4
+ import type { RumConfiguration } from '../configuration'
5
+ import { getDocumentTraceId } from '../tracing/getDocumentTraceId'
6
+ import { getNavigationEntry } from '../../browser/performanceUtils'
7
+ import { FAKE_INITIAL_DOCUMENT } from './resourceUtils'
8
+
9
+ export function retrieveInitialDocumentResourceTiming(
10
+ configuration: RumConfiguration,
11
+ callback: (timing: RumPerformanceResourceTiming) => void,
12
+ getNavigationEntryImpl = getNavigationEntry
13
+ ) {
14
+ runOnReadyState(configuration, 'interactive', () => {
15
+ const navigationEntry = getNavigationEntryImpl()
16
+ const entry: RumPerformanceResourceTiming = Object.assign(navigationEntry.toJSON(), {
17
+ entryType: RumPerformanceEntryType.RESOURCE as const,
18
+ initiatorType: FAKE_INITIAL_DOCUMENT,
19
+ // The ResourceTiming duration entry should be `responseEnd - startTime`. With
20
+ // NavigationTiming entries, `startTime` is always 0, so set it to `responseEnd`.
21
+ duration: navigationEntry.responseEnd,
22
+ traceId: getDocumentTraceId(document),
23
+ toJSON: () => ({ ...entry, toJSON: undefined }),
24
+ })
25
+ callback(entry)
26
+ })
27
+ }
@@ -0,0 +1,134 @@
1
+ import type { RelativeTime, TrackingConsentState } from '@kubesense/kubesense-browser-core'
2
+ import {
3
+ BridgeCapability,
4
+ Observable,
5
+ SESSION_NOT_TRACKED,
6
+ bridgeSupports,
7
+ noop,
8
+ performDraw,
9
+ startSessionManager,
10
+ } from '@kubesense/kubesense-browser-core'
11
+ import type { RumConfiguration } from './configuration'
12
+ import type { LifeCycle } from './lifeCycle'
13
+ import { LifeCycleEventType } from './lifeCycle'
14
+
15
+ export const enum SessionType {
16
+ SYNTHETICS = 'synthetics',
17
+ USER = 'user',
18
+ CI_TEST = 'ci_test',
19
+ }
20
+
21
+ export const RUM_SESSION_KEY = 'rum'
22
+
23
+ export interface RumSessionManager {
24
+ findTrackedSession: (startTime?: RelativeTime) => RumSession | undefined
25
+ expire: () => void
26
+ expireObservable: Observable<void>
27
+ setForcedReplay: () => void
28
+ }
29
+
30
+ export interface RumSession {
31
+ id: string
32
+ sessionReplay: SessionReplayState
33
+ anonymousId?: string
34
+ }
35
+
36
+ export const enum RumTrackingType {
37
+ NOT_TRACKED = SESSION_NOT_TRACKED,
38
+ TRACKED_WITH_SESSION_REPLAY = '1',
39
+ TRACKED_WITHOUT_SESSION_REPLAY = '2',
40
+ }
41
+
42
+ export const enum SessionReplayState {
43
+ OFF,
44
+ SAMPLED,
45
+ FORCED,
46
+ }
47
+
48
+ export function startRumSessionManager(
49
+ configuration: RumConfiguration,
50
+ lifeCycle: LifeCycle,
51
+ trackingConsentState: TrackingConsentState
52
+ ): RumSessionManager {
53
+ const sessionManager = startSessionManager(
54
+ configuration,
55
+ RUM_SESSION_KEY,
56
+ (rawTrackingType) => computeTrackingType(configuration, rawTrackingType),
57
+ trackingConsentState
58
+ )
59
+
60
+ sessionManager.expireObservable.subscribe(() => {
61
+ lifeCycle.notify(LifeCycleEventType.SESSION_EXPIRED)
62
+ })
63
+
64
+ sessionManager.renewObservable.subscribe(() => {
65
+ lifeCycle.notify(LifeCycleEventType.SESSION_RENEWED)
66
+ })
67
+
68
+ sessionManager.sessionStateUpdateObservable.subscribe(({ previousState, newState }) => {
69
+ if (!previousState.forcedReplay && newState.forcedReplay) {
70
+ const sessionEntity = sessionManager.findSession()
71
+ if (sessionEntity) {
72
+ sessionEntity.isReplayForced = true
73
+ }
74
+ }
75
+ })
76
+ return {
77
+ findTrackedSession: (startTime) => {
78
+ const session = sessionManager.findSession(startTime)
79
+ if (!session || session.trackingType === RumTrackingType.NOT_TRACKED) {
80
+ return
81
+ }
82
+ return {
83
+ id: session.id,
84
+ sessionReplay:
85
+ session.trackingType === RumTrackingType.TRACKED_WITH_SESSION_REPLAY
86
+ ? SessionReplayState.SAMPLED
87
+ : session.isReplayForced
88
+ ? SessionReplayState.FORCED
89
+ : SessionReplayState.OFF,
90
+ anonymousId: session.anonymousId,
91
+ }
92
+ },
93
+ expire: sessionManager.expire,
94
+ expireObservable: sessionManager.expireObservable,
95
+ setForcedReplay: () => sessionManager.updateSessionState({ forcedReplay: '1' }),
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Start a tracked replay session stub
101
+ */
102
+ export function startRumSessionManagerStub(): RumSessionManager {
103
+ const session: RumSession = {
104
+ id: '00000000-aaaa-0000-aaaa-000000000000',
105
+ sessionReplay: bridgeSupports(BridgeCapability.RECORDS) ? SessionReplayState.SAMPLED : SessionReplayState.OFF,
106
+ }
107
+ return {
108
+ findTrackedSession: () => session,
109
+ expire: noop,
110
+ expireObservable: new Observable(),
111
+ setForcedReplay: noop,
112
+ }
113
+ }
114
+
115
+ function computeTrackingType(configuration: RumConfiguration, rawTrackingType?: string) {
116
+ if (hasValidRumSession(rawTrackingType)) {
117
+ return rawTrackingType
118
+ }
119
+ if (!performDraw(configuration.sessionSampleRate)) {
120
+ return RumTrackingType.NOT_TRACKED
121
+ }
122
+ if (!performDraw(configuration.sessionReplaySampleRate)) {
123
+ return RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY
124
+ }
125
+ return RumTrackingType.TRACKED_WITH_SESSION_REPLAY
126
+ }
127
+
128
+ function hasValidRumSession(trackingType?: string): trackingType is RumTrackingType {
129
+ return (
130
+ trackingType === RumTrackingType.NOT_TRACKED ||
131
+ trackingType === RumTrackingType.TRACKED_WITH_SESSION_REPLAY ||
132
+ trackingType === RumTrackingType.TRACKED_WITHOUT_SESSION_REPLAY
133
+ )
134
+ }
@@ -0,0 +1,63 @@
1
+ import { performDraw } from '@kubesense/kubesense-browser-core'
2
+
3
+ const sampleDecisionCache: Map<number, { sessionId: string; decision: boolean }> = new Map()
4
+
5
+ export function isSampled(sessionId: string, sampleRate: number) {
6
+ // Shortcuts for common cases. This is not strictly necessary, but it makes the code faster for
7
+ // customers willing to ingest all traces.
8
+ if (sampleRate === 100) {
9
+ return true
10
+ }
11
+
12
+ if (sampleRate === 0) {
13
+ return false
14
+ }
15
+
16
+ const cachedDecision = sampleDecisionCache.get(sampleRate)
17
+ if (cachedDecision && sessionId === cachedDecision.sessionId) {
18
+ return cachedDecision.decision
19
+ }
20
+
21
+ let decision: boolean
22
+ // @ts-expect-error BigInt might not be defined in every browser we support
23
+ if (window.BigInt) {
24
+ decision = sampleUsingKnuthFactor(BigInt(`0x${sessionId.split('-')[4]}`), sampleRate)
25
+ } else {
26
+ // For simplicity, we don't use consistent sampling for browser without BigInt support
27
+ // TODO: remove this when all browser we support have BigInt support
28
+ decision = performDraw(sampleRate)
29
+ }
30
+ sampleDecisionCache.set(sampleRate, { sessionId, decision })
31
+ return decision
32
+ }
33
+
34
+ // Exported for tests
35
+ export function resetSampleDecisionCache() {
36
+ sampleDecisionCache.clear()
37
+ }
38
+
39
+ /**
40
+ * Perform sampling using the Knuth factor method. This method offer consistent sampling result
41
+ * based on the provided identifier.
42
+ *
43
+ * @param identifier - The identifier to use for sampling.
44
+ * @param sampleRate - The sample rate in percentage between 0 and 100.
45
+ */
46
+ export function sampleUsingKnuthFactor(identifier: bigint, sampleRate: number) {
47
+ // The formula is:
48
+ //
49
+ // (identifier * knuthFactor) % 2^64 < sampleRate * 2^64
50
+ //
51
+ // Because JavaScript numbers are 64-bit floats, we can't represent 64-bit integers, and the
52
+ // modulo would be incorrect. Thus, we are using BigInts here.
53
+ //
54
+ // Note: All implementations have slight variations. Some of them use '<=' instead of '<', and
55
+ // use `sampleRate * 2^64 - 1` instead of `sampleRate * 2^64`. The following implementation
56
+ // should adhere to the spec and is a bit simpler than using a 2^64-1 limit as there are less
57
+ // BigInt arithmetic to write. In practice this does not matter, as we are using floating point
58
+ // numbers in the end, and Number(2n**64n-1n) === Number(2n**64n).
59
+ const knuthFactor = BigInt('1111111111111111111')
60
+ const twoPow64 = BigInt('0x10000000000000000') // 2n ** 64n
61
+ const hash = (identifier * knuthFactor) % twoPow64
62
+ return Number(hash) <= (sampleRate / 100) * Number(twoPow64)
63
+ }
@@ -0,0 +1,83 @@
1
+ import type { Context, FlushEvent, Observable, Telemetry } from '@kubesense/kubesense-browser-core'
2
+ import { ONE_SECOND, addTelemetryMetrics, setInterval, TelemetryMetrics } from '@kubesense/kubesense-browser-core'
3
+ import type { RumConfiguration } from './configuration'
4
+ import type { LifeCycle } from './lifeCycle'
5
+ import { LifeCycleEventType } from './lifeCycle'
6
+
7
+ export const MEASURES_PERIOD_DURATION = 10 * ONE_SECOND
8
+
9
+ interface Measure extends Context {
10
+ min: number
11
+ max: number
12
+ sum: number
13
+ }
14
+
15
+ interface CurrentPeriodMeasures extends Context {
16
+ batchCount: number
17
+ batchBytesCount: Measure
18
+ batchMessagesCount: Measure
19
+ }
20
+
21
+ let currentPeriodMeasures: CurrentPeriodMeasures
22
+ let batchHasRumEvent: boolean
23
+
24
+ export function startCustomerDataTelemetry(
25
+ telemetry: Telemetry,
26
+ lifeCycle: LifeCycle,
27
+ batchFlushObservable: Observable<FlushEvent>
28
+ ) {
29
+ if (!telemetry.metricsEnabled) {
30
+ return
31
+ }
32
+
33
+ initCurrentPeriodMeasures()
34
+ batchHasRumEvent = false
35
+ // We measure the data of every view updates even if there could only be one per batch due to the upsert
36
+ // It means that contexts bytes count sums can be higher than it really is
37
+ lifeCycle.subscribe(LifeCycleEventType.RUM_EVENT_COLLECTED, () => {
38
+ batchHasRumEvent = true
39
+ })
40
+
41
+ batchFlushObservable.subscribe(({ bytesCount, messagesCount }) => {
42
+ // Don't measure batch that only contains telemetry events to avoid batch sending loop
43
+ // It could happen because after each batch we are adding a customer data measures telemetry event to the next one
44
+ if (!batchHasRumEvent) {
45
+ return
46
+ }
47
+ batchHasRumEvent = false
48
+
49
+ currentPeriodMeasures.batchCount += 1
50
+ updateMeasure(currentPeriodMeasures.batchBytesCount, bytesCount)
51
+ updateMeasure(currentPeriodMeasures.batchMessagesCount, messagesCount)
52
+ })
53
+
54
+ setInterval(sendCurrentPeriodMeasures, MEASURES_PERIOD_DURATION)
55
+ }
56
+
57
+ function sendCurrentPeriodMeasures() {
58
+ if (currentPeriodMeasures.batchCount === 0) {
59
+ return
60
+ }
61
+
62
+ // monitor-until: forever
63
+ addTelemetryMetrics(TelemetryMetrics.CUSTOMER_DATA_METRIC_NAME, currentPeriodMeasures)
64
+ initCurrentPeriodMeasures()
65
+ }
66
+
67
+ function createMeasure(): Measure {
68
+ return { min: Infinity, max: 0, sum: 0 }
69
+ }
70
+
71
+ function updateMeasure(measure: Measure, value: number) {
72
+ measure.sum += value
73
+ measure.min = Math.min(measure.min, value)
74
+ measure.max = Math.max(measure.max, value)
75
+ }
76
+
77
+ function initCurrentPeriodMeasures() {
78
+ currentPeriodMeasures = {
79
+ batchCount: 0,
80
+ batchBytesCount: createMeasure(),
81
+ batchMessagesCount: createMeasure(),
82
+ }
83
+ }