@kubesense/kubesense-browser-rum-core 1.8.0 → 2.0.0-beta.1

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 (922) hide show
  1. package/LICENSE +1 -1
  2. package/cjs/boot/preStartRum.d.ts +4 -3
  3. package/cjs/boot/preStartRum.js +229 -204
  4. package/cjs/boot/preStartRum.js.map +1 -1
  5. package/cjs/boot/rumPublicApi.d.ts +190 -51
  6. package/cjs/boot/rumPublicApi.js +267 -164
  7. package/cjs/boot/rumPublicApi.js.map +1 -1
  8. package/cjs/boot/startRum.d.ts +42 -31
  9. package/cjs/boot/startRum.js +157 -150
  10. package/cjs/boot/startRum.js.map +1 -1
  11. package/cjs/browser/cookieObservable.d.ts +1 -5
  12. package/cjs/browser/cookieObservable.js +30 -34
  13. package/cjs/browser/cookieObservable.js.map +1 -1
  14. package/cjs/browser/domMutationObservable.d.ts +3 -3
  15. package/cjs/browser/domMutationObservable.js +29 -53
  16. package/cjs/browser/domMutationObservable.js.map +1 -1
  17. package/cjs/browser/htmlDomUtils.d.ts +5 -0
  18. package/cjs/browser/htmlDomUtils.js +38 -28
  19. package/cjs/browser/htmlDomUtils.js.map +1 -1
  20. package/cjs/browser/locationChangeObservable.d.ts +1 -2
  21. package/cjs/browser/locationChangeObservable.js +44 -45
  22. package/cjs/browser/locationChangeObservable.js.map +1 -1
  23. package/cjs/browser/performanceObservable.d.ts +4 -4
  24. package/cjs/browser/performanceObservable.js +50 -114
  25. package/cjs/browser/performanceObservable.js.map +1 -1
  26. package/cjs/browser/performanceUtils.d.ts +13 -1
  27. package/cjs/browser/performanceUtils.js +63 -37
  28. package/cjs/browser/performanceUtils.js.map +1 -1
  29. package/cjs/browser/scroll.js +17 -28
  30. package/cjs/browser/scroll.js.map +1 -1
  31. package/cjs/browser/viewportObservable.d.ts +2 -3
  32. package/cjs/browser/viewportObservable.js +29 -31
  33. package/cjs/browser/viewportObservable.js.map +1 -1
  34. package/cjs/browser/windowOpenObservable.js +11 -7
  35. package/cjs/browser/windowOpenObservable.js.map +1 -1
  36. package/cjs/domain/action/actionCollection.d.ts +11 -12
  37. package/cjs/domain/action/actionCollection.js +82 -89
  38. package/cjs/domain/action/actionCollection.js.map +1 -1
  39. package/cjs/domain/action/actionNameConstants.js +10 -9
  40. package/cjs/domain/action/actionNameConstants.js.map +1 -1
  41. package/cjs/domain/action/clickChain.js +51 -54
  42. package/cjs/domain/action/clickChain.js.map +1 -1
  43. package/cjs/domain/action/computeFrustration.js +30 -62
  44. package/cjs/domain/action/computeFrustration.js.map +1 -1
  45. package/cjs/domain/action/frustrationIgnore.d.ts +9 -0
  46. package/cjs/domain/action/frustrationIgnore.js +32 -0
  47. package/cjs/domain/action/frustrationIgnore.js.map +1 -0
  48. package/cjs/domain/action/getActionNameFromElement.js +141 -217
  49. package/cjs/domain/action/getActionNameFromElement.js.map +1 -1
  50. package/cjs/domain/action/interactionSelectorCache.d.ts +1 -1
  51. package/cjs/domain/action/interactionSelectorCache.js +17 -18
  52. package/cjs/domain/action/interactionSelectorCache.js.map +1 -1
  53. package/cjs/domain/action/isActionChildEvent.d.ts +2 -0
  54. package/cjs/domain/action/isActionChildEvent.js +8 -0
  55. package/cjs/domain/action/isActionChildEvent.js.map +1 -0
  56. package/cjs/domain/action/listenActionEvents.d.ts +2 -3
  57. package/cjs/domain/action/listenActionEvents.js +51 -55
  58. package/cjs/domain/action/listenActionEvents.js.map +1 -1
  59. package/cjs/domain/action/trackClickActions.d.ts +15 -21
  60. package/cjs/domain/action/trackClickActions.js +188 -226
  61. package/cjs/domain/action/trackClickActions.js.map +1 -1
  62. package/cjs/domain/action/trackManualActions.d.ts +45 -0
  63. package/cjs/domain/action/trackManualActions.js +48 -0
  64. package/cjs/domain/action/trackManualActions.js.map +1 -0
  65. package/cjs/domain/assembly.d.ts +1 -2
  66. package/cjs/domain/assembly.js +80 -95
  67. package/cjs/domain/assembly.js.map +1 -1
  68. package/cjs/domain/configuration/configuration.d.ts +575 -81
  69. package/cjs/domain/configuration/configuration.js +464 -199
  70. package/cjs/domain/configuration/configuration.js.map +1 -1
  71. package/cjs/domain/configuration/index.d.ts +1 -0
  72. package/cjs/domain/configuration/index.js +27 -21
  73. package/cjs/domain/configuration/jsonPathParser.js +125 -139
  74. package/cjs/domain/configuration/jsonPathParser.js.map +1 -1
  75. package/cjs/domain/configuration/remoteConfiguration.d.ts +18 -5
  76. package/cjs/domain/configuration/remoteConfiguration.js +268 -226
  77. package/cjs/domain/configuration/remoteConfiguration.js.map +1 -1
  78. package/cjs/domain/configuration/remoteConfiguration.types.d.ts +49 -0
  79. package/cjs/domain/configuration/remoteConfigurationCache.d.ts +42 -0
  80. package/cjs/domain/configuration/remoteConfigurationCache.js +95 -0
  81. package/cjs/domain/configuration/remoteConfigurationCache.js.map +1 -0
  82. package/cjs/domain/configuration/remoteSdkConfiguration.d.ts +11 -2
  83. package/cjs/domain/configuration/remoteSdkConfiguration.js +185 -117
  84. package/cjs/domain/configuration/remoteSdkConfiguration.js.map +1 -1
  85. package/cjs/domain/configuration/sessionReplayRoutes.d.ts +1 -6
  86. package/cjs/domain/configuration/sessionReplayRoutes.js +20 -63
  87. package/cjs/domain/configuration/sessionReplayRoutes.js.map +1 -1
  88. package/cjs/domain/contexts/ciVisibilityContext.d.ts +2 -4
  89. package/cjs/domain/contexts/ciVisibilityContext.js +36 -32
  90. package/cjs/domain/contexts/ciVisibilityContext.js.map +1 -1
  91. package/cjs/domain/contexts/connectivityContext.d.ts +2 -2
  92. package/cjs/domain/contexts/connectivityContext.js +10 -9
  93. package/cjs/domain/contexts/connectivityContext.js.map +1 -1
  94. package/cjs/domain/contexts/defaultContext.d.ts +3 -3
  95. package/cjs/domain/contexts/defaultContext.js +28 -32
  96. package/cjs/domain/contexts/defaultContext.js.map +1 -1
  97. package/cjs/domain/contexts/displayContext.d.ts +2 -3
  98. package/cjs/domain/contexts/displayContext.js +22 -26
  99. package/cjs/domain/contexts/displayContext.js.map +1 -1
  100. package/cjs/domain/contexts/featureFlagContext.d.ts +2 -2
  101. package/cjs/domain/contexts/featureFlagContext.js +38 -50
  102. package/cjs/domain/contexts/featureFlagContext.js.map +1 -1
  103. package/cjs/domain/contexts/internalContext.d.ts +2 -3
  104. package/cjs/domain/contexts/internalContext.js +26 -22
  105. package/cjs/domain/contexts/internalContext.js.map +1 -1
  106. package/cjs/domain/contexts/pageStateHistory.d.ts +3 -4
  107. package/cjs/domain/contexts/pageStateHistory.js +76 -96
  108. package/cjs/domain/contexts/pageStateHistory.js.map +1 -1
  109. package/cjs/domain/contexts/sessionContext.d.ts +9 -3
  110. package/cjs/domain/contexts/sessionContext.js +31 -45
  111. package/cjs/domain/contexts/sessionContext.js.map +1 -1
  112. package/cjs/domain/contexts/sourceCodeMfeContext.d.ts +10 -0
  113. package/cjs/domain/contexts/sourceCodeMfeContext.js +35 -0
  114. package/cjs/domain/contexts/sourceCodeMfeContext.js.map +1 -0
  115. package/cjs/domain/contexts/syntheticsContext.d.ts +2 -2
  116. package/cjs/domain/contexts/syntheticsContext.js +19 -23
  117. package/cjs/domain/contexts/syntheticsContext.js.map +1 -1
  118. package/cjs/domain/contexts/trackingConsentContext.d.ts +2 -2
  119. package/cjs/domain/contexts/trackingConsentContext.js +10 -12
  120. package/cjs/domain/contexts/trackingConsentContext.js.map +1 -1
  121. package/cjs/domain/contexts/urlContexts.d.ts +4 -3
  122. package/cjs/domain/contexts/urlContexts.js +65 -61
  123. package/cjs/domain/contexts/urlContexts.js.map +1 -1
  124. package/cjs/domain/contexts/userAgentDataContext.d.ts +2 -2
  125. package/cjs/domain/contexts/userAgentDataContext.js +20 -29
  126. package/cjs/domain/contexts/userAgentDataContext.js.map +1 -1
  127. package/cjs/domain/contexts/viewHistory.d.ts +5 -2
  128. package/cjs/domain/contexts/viewHistory.js +41 -45
  129. package/cjs/domain/contexts/viewHistory.js.map +1 -1
  130. package/cjs/domain/discardNegativeDuration.d.ts +1 -1
  131. package/cjs/domain/discardNegativeDuration.js +6 -5
  132. package/cjs/domain/discardNegativeDuration.js.map +1 -1
  133. package/cjs/domain/error/errorCollection.d.ts +3 -3
  134. package/cjs/domain/error/errorCollection.js +67 -68
  135. package/cjs/domain/error/errorCollection.js.map +1 -1
  136. package/cjs/domain/error/trackReportError.d.ts +1 -2
  137. package/cjs/domain/error/trackReportError.js +10 -14
  138. package/cjs/domain/error/trackReportError.js.map +1 -1
  139. package/cjs/domain/event/eventCollection.d.ts +2 -1
  140. package/cjs/domain/event/eventCollection.js +21 -22
  141. package/cjs/domain/event/eventCollection.js.map +1 -1
  142. package/cjs/domain/eventTracker.d.ts +37 -0
  143. package/cjs/domain/eventTracker.js +94 -0
  144. package/cjs/domain/eventTracker.js.map +1 -0
  145. package/cjs/domain/extractRegexMatch.d.ts +5 -0
  146. package/cjs/domain/extractRegexMatch.js +16 -0
  147. package/cjs/domain/extractRegexMatch.js.map +1 -0
  148. package/cjs/domain/getComposedPathSelector.d.ts +22 -0
  149. package/cjs/domain/getComposedPathSelector.js +95 -0
  150. package/cjs/domain/getComposedPathSelector.js.map +1 -0
  151. package/cjs/domain/getSelectorFromElement.d.ts +18 -6
  152. package/cjs/domain/getSelectorFromElement.js +199 -191
  153. package/cjs/domain/getSelectorFromElement.js.map +1 -1
  154. package/cjs/domain/getSessionReplayUrl.d.ts +2 -2
  155. package/cjs/domain/getSessionReplayUrl.js +17 -30
  156. package/cjs/domain/getSessionReplayUrl.js.map +1 -1
  157. package/cjs/domain/hooks.d.ts +26 -17
  158. package/cjs/domain/hooks.js +12 -5
  159. package/cjs/domain/hooks.js.map +1 -1
  160. package/cjs/domain/lifeCycle.d.ts +26 -12
  161. package/cjs/domain/lifeCycle.js +28 -5
  162. package/cjs/domain/lifeCycle.js.map +1 -1
  163. package/cjs/domain/limitModification.d.ts +5 -1
  164. package/cjs/domain/limitModification.js +32 -36
  165. package/cjs/domain/limitModification.js.map +1 -1
  166. package/cjs/domain/longTask/longTaskCollection.d.ts +0 -13
  167. package/cjs/domain/longTask/longTaskCollection.js +75 -87
  168. package/cjs/domain/longTask/longTaskCollection.js.map +1 -1
  169. package/cjs/domain/plugins.d.ts +37 -14
  170. package/cjs/domain/plugins.js +22 -13
  171. package/cjs/domain/plugins.js.map +1 -1
  172. package/cjs/domain/privacy.d.ts +6 -1
  173. package/cjs/domain/privacy.js +143 -286
  174. package/cjs/domain/privacy.js.map +1 -1
  175. package/cjs/domain/privacyConstants.js +43 -34
  176. package/cjs/domain/privacyConstants.js.map +1 -1
  177. package/cjs/domain/requestCollection.d.ts +6 -5
  178. package/cjs/domain/requestCollection.js +82 -105
  179. package/cjs/domain/requestCollection.js.map +1 -1
  180. package/cjs/domain/resource/graphql.d.ts +1 -1
  181. package/cjs/domain/resource/graphql.js +85 -86
  182. package/cjs/domain/resource/graphql.js.map +1 -1
  183. package/cjs/domain/resource/requestRegistry.js +30 -38
  184. package/cjs/domain/resource/requestRegistry.js.map +1 -1
  185. package/cjs/domain/resource/resourceCollection.d.ts +5 -3
  186. package/cjs/domain/resource/resourceCollection.js +241 -175
  187. package/cjs/domain/resource/resourceCollection.js.map +1 -1
  188. package/cjs/domain/resource/resourceUtils.d.ts +13 -13
  189. package/cjs/domain/resource/resourceUtils.js +323 -221
  190. package/cjs/domain/resource/resourceUtils.js.map +1 -1
  191. package/cjs/domain/resource/trackManualResources.d.ts +55 -0
  192. package/cjs/domain/resource/trackManualResources.js +53 -0
  193. package/cjs/domain/resource/trackManualResources.js.map +1 -0
  194. package/cjs/domain/resource/webSocketCollection.d.ts +46 -0
  195. package/cjs/domain/resource/webSocketCollection.js +163 -0
  196. package/cjs/domain/resource/webSocketCollection.js.map +1 -0
  197. package/cjs/domain/session/session.types.d.ts +4 -0
  198. package/cjs/domain/sessionReplayState.d.ts +8 -0
  199. package/cjs/domain/sessionReplayState.js +19 -0
  200. package/cjs/domain/sessionReplayState.js.map +1 -0
  201. package/cjs/domain/startCustomerDataTelemetry.js +39 -43
  202. package/cjs/domain/startCustomerDataTelemetry.js.map +1 -1
  203. package/cjs/domain/tracing/getDocumentTraceId.d.ts +1 -1
  204. package/cjs/domain/tracing/getDocumentTraceId.js +42 -63
  205. package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -1
  206. package/cjs/domain/tracing/identifier.js +13 -46
  207. package/cjs/domain/tracing/identifier.js.map +1 -1
  208. package/cjs/domain/tracing/tracer.d.ts +2 -5
  209. package/cjs/domain/tracing/tracer.js +110 -150
  210. package/cjs/domain/tracing/tracer.js.map +1 -1
  211. package/cjs/domain/trackEventCounts.js +43 -48
  212. package/cjs/domain/trackEventCounts.js.map +1 -1
  213. package/cjs/domain/view/bfCacheSupport.d.ts +1 -2
  214. package/cjs/domain/view/bfCacheSupport.js +10 -11
  215. package/cjs/domain/view/bfCacheSupport.js.map +1 -1
  216. package/cjs/domain/view/trackViewEventCounts.js +14 -13
  217. package/cjs/domain/view/trackViewEventCounts.js.map +1 -1
  218. package/cjs/domain/view/trackViews.d.ts +8 -2
  219. package/cjs/domain/view/trackViews.js +221 -270
  220. package/cjs/domain/view/trackViews.js.map +1 -1
  221. package/cjs/domain/view/viewCollection.d.ts +4 -3
  222. package/cjs/domain/view/viewCollection.js +124 -148
  223. package/cjs/domain/view/viewCollection.js.map +1 -1
  224. package/cjs/domain/view/viewDiff.d.ts +22 -0
  225. package/cjs/domain/view/viewDiff.js +62 -0
  226. package/cjs/domain/view/viewDiff.js.map +1 -0
  227. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js +20 -22
  228. package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -1
  229. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.d.ts +1 -0
  230. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js +35 -33
  231. package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -1
  232. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +1 -1
  233. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js +14 -13
  234. package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -1
  235. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +4 -2
  236. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js +51 -34
  237. package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -1
  238. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +1 -1
  239. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js +106 -122
  240. package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -1
  241. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +2 -3
  242. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js +26 -34
  243. package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -1
  244. package/cjs/domain/view/viewMetrics/trackFirstHidden.d.ts +2 -3
  245. package/cjs/domain/view/viewMetrics/trackFirstHidden.js +31 -31
  246. package/cjs/domain/view/viewMetrics/trackFirstHidden.js.map +1 -1
  247. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +1 -3
  248. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js +33 -38
  249. package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -1
  250. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +10 -1
  251. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js +202 -144
  252. package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -1
  253. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +6 -1
  254. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js +65 -55
  255. package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -1
  256. package/cjs/domain/view/viewMetrics/trackLoadingTime.d.ts +2 -1
  257. package/cjs/domain/view/viewMetrics/trackLoadingTime.js +42 -46
  258. package/cjs/domain/view/viewMetrics/trackLoadingTime.js.map +1 -1
  259. package/cjs/domain/view/viewMetrics/trackNavigationTimings.d.ts +2 -3
  260. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js +28 -36
  261. package/cjs/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -1
  262. package/cjs/domain/view/viewMetrics/trackScrollMetrics.d.ts +3 -4
  263. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js +63 -72
  264. package/cjs/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -1
  265. package/cjs/domain/vital/vitalCollection.d.ts +44 -20
  266. package/cjs/domain/vital/vitalCollection.js +81 -109
  267. package/cjs/domain/vital/vitalCollection.js.map +1 -1
  268. package/cjs/domain/waitPageActivityEnd.d.ts +1 -4
  269. package/cjs/domain/waitPageActivityEnd.js +99 -119
  270. package/cjs/domain/waitPageActivityEnd.js.map +1 -1
  271. package/cjs/domainContext.types.d.ts +21 -13
  272. package/cjs/index.d.ts +11 -10
  273. package/cjs/index.js +84 -62
  274. package/cjs/rawRumEvent.types.d.ts +79 -13
  275. package/cjs/rawRumEvent.types.js +40 -27
  276. package/cjs/rawRumEvent.types.js.map +1 -1
  277. package/cjs/rumEvent.types.d.ts +906 -669
  278. package/cjs/transport/formDataTransport.js +43 -41
  279. package/cjs/transport/formDataTransport.js.map +1 -1
  280. package/cjs/transport/startRumBatch.d.ts +27 -3
  281. package/cjs/transport/startRumBatch.js +132 -31
  282. package/cjs/transport/startRumBatch.js.map +1 -1
  283. package/cjs/transport/startRumEventBridge.js +10 -8
  284. package/cjs/transport/startRumEventBridge.js.map +1 -1
  285. package/esm/boot/preStartRum.mjs +233 -0
  286. package/esm/boot/preStartRum.mjs.map +1 -0
  287. package/esm/boot/rumPublicApi.mjs +271 -0
  288. package/esm/boot/rumPublicApi.mjs.map +1 -0
  289. package/esm/boot/startRum.mjs +159 -0
  290. package/esm/boot/startRum.mjs.map +1 -0
  291. package/esm/browser/cookieObservable.mjs +34 -0
  292. package/esm/browser/cookieObservable.mjs.map +1 -0
  293. package/esm/browser/domMutationObservable.mjs +33 -0
  294. package/esm/browser/domMutationObservable.mjs.map +1 -0
  295. package/esm/browser/htmlDomUtils.mjs +48 -0
  296. package/esm/browser/htmlDomUtils.mjs.map +1 -0
  297. package/esm/browser/locationChangeObservable.mjs +50 -0
  298. package/esm/browser/locationChangeObservable.mjs.map +1 -0
  299. package/esm/browser/performanceObservable.mjs +60 -0
  300. package/esm/browser/performanceObservable.mjs.map +1 -0
  301. package/esm/browser/performanceUtils.mjs +64 -0
  302. package/esm/browser/performanceUtils.mjs.map +1 -0
  303. package/esm/browser/scroll.mjs +21 -0
  304. package/esm/browser/scroll.mjs.map +1 -0
  305. package/esm/browser/viewportObservable.mjs +33 -0
  306. package/esm/browser/viewportObservable.mjs.map +1 -0
  307. package/esm/browser/windowOpenObservable.mjs +14 -0
  308. package/esm/browser/windowOpenObservable.mjs.map +1 -0
  309. package/esm/domain/action/actionCollection.mjs +89 -0
  310. package/esm/domain/action/actionCollection.mjs.map +1 -0
  311. package/esm/domain/action/actionNameConstants.mjs +11 -0
  312. package/esm/domain/action/actionNameConstants.mjs.map +1 -0
  313. package/esm/domain/action/clickChain.mjs +57 -0
  314. package/esm/domain/action/clickChain.mjs.map +1 -0
  315. package/esm/domain/action/computeFrustration.mjs +36 -0
  316. package/esm/domain/action/computeFrustration.mjs.map +1 -0
  317. package/esm/domain/action/frustrationIgnore.mjs +31 -0
  318. package/esm/domain/action/frustrationIgnore.mjs.map +1 -0
  319. package/esm/domain/action/getActionNameFromElement.mjs +163 -0
  320. package/esm/domain/action/getActionNameFromElement.mjs.map +1 -0
  321. package/esm/domain/action/interactionSelectorCache.mjs +19 -0
  322. package/esm/domain/action/interactionSelectorCache.mjs.map +1 -0
  323. package/esm/domain/action/isActionChildEvent.mjs +8 -0
  324. package/esm/domain/action/isActionChildEvent.mjs.map +1 -0
  325. package/esm/domain/action/listenActionEvents.mjs +57 -0
  326. package/esm/domain/action/listenActionEvents.mjs.map +1 -0
  327. package/esm/domain/action/trackClickActions.mjs +198 -0
  328. package/esm/domain/action/trackClickActions.mjs.map +1 -0
  329. package/esm/domain/action/trackManualActions.mjs +48 -0
  330. package/esm/domain/action/trackManualActions.mjs.map +1 -0
  331. package/esm/domain/assembly.mjs +87 -0
  332. package/esm/domain/assembly.mjs.map +1 -0
  333. package/esm/domain/configuration/configuration.mjs +474 -0
  334. package/esm/domain/configuration/configuration.mjs.map +1 -0
  335. package/esm/domain/configuration/index.mjs +6 -0
  336. package/esm/domain/configuration/jsonPathParser.mjs +145 -0
  337. package/esm/domain/configuration/jsonPathParser.mjs.map +1 -0
  338. package/esm/domain/configuration/remoteConfiguration.mjs +279 -0
  339. package/esm/domain/configuration/remoteConfiguration.mjs.map +1 -0
  340. package/esm/domain/configuration/remoteConfigurationCache.mjs +92 -0
  341. package/esm/domain/configuration/remoteConfigurationCache.mjs.map +1 -0
  342. package/esm/domain/configuration/remoteSdkConfiguration.mjs +208 -0
  343. package/esm/domain/configuration/remoteSdkConfiguration.mjs.map +1 -0
  344. package/esm/domain/configuration/sessionReplayRoutes.mjs +26 -0
  345. package/esm/domain/configuration/sessionReplayRoutes.mjs.map +1 -0
  346. package/esm/domain/contexts/ciVisibilityContext.mjs +37 -0
  347. package/esm/domain/contexts/ciVisibilityContext.mjs.map +1 -0
  348. package/esm/domain/contexts/connectivityContext.mjs +12 -0
  349. package/esm/domain/contexts/connectivityContext.mjs.map +1 -0
  350. package/esm/domain/contexts/defaultContext.mjs +30 -0
  351. package/esm/domain/contexts/defaultContext.mjs.map +1 -0
  352. package/esm/domain/contexts/displayContext.mjs +24 -0
  353. package/esm/domain/contexts/displayContext.mjs.map +1 -0
  354. package/esm/domain/contexts/featureFlagContext.mjs +40 -0
  355. package/esm/domain/contexts/featureFlagContext.mjs.map +1 -0
  356. package/esm/domain/contexts/internalContext.mjs +30 -0
  357. package/esm/domain/contexts/internalContext.mjs.map +1 -0
  358. package/esm/domain/contexts/pageStateHistory.mjs +82 -0
  359. package/esm/domain/contexts/pageStateHistory.mjs.map +1 -0
  360. package/esm/domain/contexts/sessionContext.mjs +33 -0
  361. package/esm/domain/contexts/sessionContext.mjs.map +1 -0
  362. package/esm/domain/contexts/sourceCodeMfeContext.mjs +35 -0
  363. package/esm/domain/contexts/sourceCodeMfeContext.mjs.map +1 -0
  364. package/esm/domain/contexts/syntheticsContext.mjs +21 -0
  365. package/esm/domain/contexts/syntheticsContext.mjs.map +1 -0
  366. package/esm/domain/contexts/trackingConsentContext.mjs +12 -0
  367. package/esm/domain/contexts/trackingConsentContext.mjs.map +1 -0
  368. package/esm/domain/contexts/urlContexts.mjs +67 -0
  369. package/esm/domain/contexts/urlContexts.mjs.map +1 -0
  370. package/esm/domain/contexts/userAgentDataContext.mjs +22 -0
  371. package/esm/domain/contexts/userAgentDataContext.mjs.map +1 -0
  372. package/esm/domain/contexts/viewHistory.mjs +43 -0
  373. package/esm/domain/contexts/viewHistory.mjs.map +1 -0
  374. package/esm/domain/discardNegativeDuration.mjs +9 -0
  375. package/esm/domain/discardNegativeDuration.mjs.map +1 -0
  376. package/esm/domain/error/errorCollection.mjs +72 -0
  377. package/esm/domain/error/errorCollection.mjs.map +1 -0
  378. package/esm/domain/error/trackReportError.mjs +12 -0
  379. package/esm/domain/error/trackReportError.mjs.map +1 -0
  380. package/esm/domain/event/eventCollection.mjs +26 -0
  381. package/esm/domain/event/eventCollection.mjs.map +1 -0
  382. package/esm/domain/eventTracker.mjs +93 -0
  383. package/esm/domain/eventTracker.mjs.map +1 -0
  384. package/esm/domain/extractRegexMatch.mjs +16 -0
  385. package/esm/domain/extractRegexMatch.mjs.map +1 -0
  386. package/esm/domain/getComposedPathSelector.mjs +93 -0
  387. package/esm/domain/getComposedPathSelector.mjs.map +1 -0
  388. package/esm/domain/getSelectorFromElement.mjs +218 -0
  389. package/esm/domain/getSelectorFromElement.mjs.map +1 -0
  390. package/esm/domain/getSessionReplayUrl.mjs +20 -0
  391. package/esm/domain/getSessionReplayUrl.mjs.map +1 -0
  392. package/esm/domain/hooks.mjs +13 -0
  393. package/esm/domain/hooks.mjs.map +1 -0
  394. package/esm/domain/lifeCycle.mjs +28 -0
  395. package/esm/domain/lifeCycle.mjs.map +1 -0
  396. package/esm/domain/limitModification.mjs +42 -0
  397. package/esm/domain/limitModification.mjs.map +1 -0
  398. package/esm/domain/longTask/longTaskCollection.mjs +79 -0
  399. package/esm/domain/longTask/longTaskCollection.mjs.map +1 -0
  400. package/esm/domain/plugins.mjs +23 -0
  401. package/esm/domain/plugins.mjs.map +1 -0
  402. package/esm/domain/privacy.mjs +161 -0
  403. package/esm/domain/privacy.mjs.map +1 -0
  404. package/esm/domain/privacyConstants.mjs +36 -0
  405. package/esm/domain/privacyConstants.mjs.map +1 -0
  406. package/esm/domain/requestCollection.mjs +86 -0
  407. package/esm/domain/requestCollection.mjs.map +1 -0
  408. package/esm/domain/resource/graphql.mjs +93 -0
  409. package/esm/domain/resource/graphql.mjs.map +1 -0
  410. package/esm/domain/resource/requestRegistry.mjs +32 -0
  411. package/esm/domain/resource/requestRegistry.mjs.map +1 -0
  412. package/esm/domain/resource/resourceCollection.mjs +256 -0
  413. package/esm/domain/resource/resourceCollection.mjs.map +1 -0
  414. package/esm/domain/resource/resourceUtils.mjs +349 -0
  415. package/esm/domain/resource/resourceUtils.mjs.map +1 -0
  416. package/esm/domain/resource/trackManualResources.mjs +53 -0
  417. package/esm/domain/resource/trackManualResources.mjs.map +1 -0
  418. package/esm/domain/resource/webSocketCollection.mjs +160 -0
  419. package/esm/domain/resource/webSocketCollection.mjs.map +1 -0
  420. package/esm/domain/sessionReplayState.mjs +18 -0
  421. package/esm/domain/sessionReplayState.mjs.map +1 -0
  422. package/esm/domain/startCustomerDataTelemetry.mjs +51 -0
  423. package/esm/domain/startCustomerDataTelemetry.mjs.map +1 -0
  424. package/esm/domain/tracing/getDocumentTraceId.mjs +50 -0
  425. package/esm/domain/tracing/getDocumentTraceId.mjs.map +1 -0
  426. package/esm/domain/tracing/identifier.mjs +20 -0
  427. package/esm/domain/tracing/identifier.mjs.map +1 -0
  428. package/esm/domain/tracing/tracer.mjs +120 -0
  429. package/esm/domain/tracing/tracer.mjs.map +1 -0
  430. package/esm/domain/trackEventCounts.mjs +45 -0
  431. package/esm/domain/trackEventCounts.mjs.map +1 -0
  432. package/esm/domain/view/bfCacheSupport.mjs +12 -0
  433. package/esm/domain/view/bfCacheSupport.mjs.map +1 -0
  434. package/esm/domain/view/trackViewEventCounts.mjs +17 -0
  435. package/esm/domain/view/trackViewEventCounts.mjs.map +1 -0
  436. package/esm/domain/view/trackViews.mjs +230 -0
  437. package/esm/domain/view/trackViews.mjs.map +1 -0
  438. package/esm/domain/view/viewCollection.mjs +129 -0
  439. package/esm/domain/view/viewCollection.mjs.map +1 -0
  440. package/esm/domain/view/viewDiff.mjs +61 -0
  441. package/esm/domain/view/viewDiff.mjs.map +1 -0
  442. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs +30 -0
  443. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs.map +1 -0
  444. package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs +45 -0
  445. package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs.map +1 -0
  446. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs +18 -0
  447. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs.map +1 -0
  448. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs +54 -0
  449. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs.map +1 -0
  450. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs +117 -0
  451. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs.map +1 -0
  452. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs +29 -0
  453. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs.map +1 -0
  454. package/esm/domain/view/viewMetrics/trackFirstHidden.mjs +33 -0
  455. package/esm/domain/view/viewMetrics/trackFirstHidden.mjs.map +1 -0
  456. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs +36 -0
  457. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs.map +1 -0
  458. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs +210 -0
  459. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs.map +1 -0
  460. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs +70 -0
  461. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs.map +1 -0
  462. package/esm/domain/view/viewMetrics/trackLoadingTime.mjs +46 -0
  463. package/esm/domain/view/viewMetrics/trackLoadingTime.mjs.map +1 -0
  464. package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs +35 -0
  465. package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs.map +1 -0
  466. package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs +66 -0
  467. package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs.map +1 -0
  468. package/esm/domain/vital/vitalCollection.mjs +85 -0
  469. package/esm/domain/vital/vitalCollection.mjs.map +1 -0
  470. package/esm/domain/waitPageActivityEnd.mjs +107 -0
  471. package/esm/domain/waitPageActivityEnd.mjs.map +1 -0
  472. package/esm/index.mjs +23 -0
  473. package/esm/rawRumEvent.types.mjs +42 -0
  474. package/esm/rawRumEvent.types.mjs.map +1 -0
  475. package/esm/transport/formDataTransport.mjs +48 -0
  476. package/esm/transport/formDataTransport.mjs.map +1 -0
  477. package/esm/transport/startRumBatch.mjs +132 -0
  478. package/esm/transport/startRumBatch.mjs.map +1 -0
  479. package/esm/transport/startRumEventBridge.mjs +13 -0
  480. package/esm/transport/startRumEventBridge.mjs.map +1 -0
  481. package/package.json +19 -11
  482. package/src/boot/preStartRum.ts +216 -88
  483. package/src/boot/rumPublicApi.ts +358 -119
  484. package/src/boot/startRum.ts +88 -84
  485. package/src/browser/cookieObservable.ts +19 -28
  486. package/src/browser/domMutationObservable.ts +7 -12
  487. package/src/browser/htmlDomUtils.ts +15 -0
  488. package/src/browser/locationChangeObservable.ts +23 -12
  489. package/src/browser/performanceObservable.ts +23 -73
  490. package/src/browser/performanceUtils.ts +52 -4
  491. package/src/browser/viewportObservable.ts +4 -6
  492. package/src/domain/action/actionCollection.ts +94 -87
  493. package/src/domain/action/clickChain.ts +11 -10
  494. package/src/domain/action/computeFrustration.ts +19 -5
  495. package/src/domain/action/frustrationIgnore.ts +54 -0
  496. package/src/domain/action/getActionNameFromElement.ts +27 -61
  497. package/src/domain/action/interactionSelectorCache.ts +2 -2
  498. package/src/domain/action/isActionChildEvent.ts +6 -0
  499. package/src/domain/action/listenActionEvents.ts +2 -11
  500. package/src/domain/action/trackClickActions.ts +92 -82
  501. package/src/domain/action/trackManualActions.ts +104 -0
  502. package/src/domain/assembly.ts +57 -70
  503. package/src/domain/configuration/configuration.ts +587 -208
  504. package/src/domain/configuration/index.ts +1 -0
  505. package/src/domain/configuration/remoteConfiguration.ts +152 -29
  506. package/src/domain/configuration/remoteConfiguration.types.ts +51 -1
  507. package/src/domain/configuration/remoteConfigurationCache.ts +153 -0
  508. package/src/domain/configuration/remoteSdkConfiguration.ts +131 -13
  509. package/src/domain/configuration/sessionReplayRoutes.ts +2 -47
  510. package/src/domain/contexts/ciVisibilityContext.ts +23 -12
  511. package/src/domain/contexts/connectivityContext.ts +7 -10
  512. package/src/domain/contexts/defaultContext.ts +11 -14
  513. package/src/domain/contexts/displayContext.ts +8 -12
  514. package/src/domain/contexts/featureFlagContext.ts +5 -4
  515. package/src/domain/contexts/internalContext.ts +3 -3
  516. package/src/domain/contexts/pageStateHistory.ts +20 -31
  517. package/src/domain/contexts/sessionContext.ts +16 -22
  518. package/src/domain/contexts/sourceCodeMfeContext.ts +53 -0
  519. package/src/domain/contexts/syntheticsContext.ts +7 -17
  520. package/src/domain/contexts/trackingConsentContext.ts +7 -4
  521. package/src/domain/contexts/urlContexts.ts +13 -9
  522. package/src/domain/contexts/userAgentDataContext.ts +12 -13
  523. package/src/domain/contexts/viewHistory.ts +4 -3
  524. package/src/domain/discardNegativeDuration.ts +1 -1
  525. package/src/domain/error/errorCollection.ts +12 -22
  526. package/src/domain/error/trackReportError.ts +4 -7
  527. package/src/domain/event/eventCollection.ts +4 -2
  528. package/src/domain/eventTracker.ts +169 -0
  529. package/src/domain/extractRegexMatch.ts +15 -0
  530. package/src/domain/getComposedPathSelector.ts +130 -0
  531. package/src/domain/getSelectorFromElement.ts +125 -31
  532. package/src/domain/getSessionReplayUrl.ts +4 -13
  533. package/src/domain/hooks.ts +34 -21
  534. package/src/domain/lifeCycle.ts +21 -8
  535. package/src/domain/limitModification.ts +20 -4
  536. package/src/domain/longTask/longTaskCollection.ts +18 -47
  537. package/src/domain/plugins.ts +54 -25
  538. package/src/domain/privacy.ts +16 -24
  539. package/src/domain/requestCollection.ts +108 -97
  540. package/src/domain/resource/graphql.ts +71 -25
  541. package/src/domain/resource/requestRegistry.ts +1 -3
  542. package/src/domain/resource/resourceCollection.ts +319 -137
  543. package/src/domain/resource/resourceUtils.ts +24 -26
  544. package/src/domain/resource/trackManualResources.ts +121 -0
  545. package/src/domain/resource/webSocketCollection.ts +281 -0
  546. package/src/domain/session/session.types.ts +5 -0
  547. package/src/domain/sessionReplayState.ts +36 -0
  548. package/src/domain/startCustomerDataTelemetry.ts +2 -2
  549. package/src/domain/tracing/getDocumentTraceId.ts +5 -4
  550. package/src/domain/tracing/identifier.ts +6 -37
  551. package/src/domain/tracing/tracer.ts +22 -21
  552. package/src/domain/tracing/tracer.types.ts +3 -3
  553. package/src/domain/view/bfCacheSupport.ts +1 -6
  554. package/src/domain/view/trackViews.ts +40 -37
  555. package/src/domain/view/viewCollection.ts +29 -23
  556. package/src/domain/view/viewDiff.ts +115 -0
  557. package/src/domain/view/viewMetrics/interactionCountPolyfill.ts +13 -2
  558. package/src/domain/view/viewMetrics/trackBfcacheMetrics.ts +1 -1
  559. package/src/domain/view/viewMetrics/trackCommonViewMetrics.ts +27 -6
  560. package/src/domain/view/viewMetrics/trackCumulativeLayoutShift.ts +5 -3
  561. package/src/domain/view/viewMetrics/trackFirstContentfulPaint.ts +4 -9
  562. package/src/domain/view/viewMetrics/trackFirstHidden.ts +2 -8
  563. package/src/domain/view/viewMetrics/trackInitialViewMetrics.ts +4 -13
  564. package/src/domain/view/viewMetrics/trackInteractionToNextPaint.ts +180 -35
  565. package/src/domain/view/viewMetrics/trackLargestContentfulPaint.ts +47 -6
  566. package/src/domain/view/viewMetrics/trackLoadingTime.ts +4 -3
  567. package/src/domain/view/viewMetrics/trackNavigationTimings.ts +10 -18
  568. package/src/domain/view/viewMetrics/trackScrollMetrics.ts +23 -37
  569. package/src/domain/vital/vitalCollection.ts +83 -102
  570. package/src/domain/waitPageActivityEnd.ts +7 -11
  571. package/src/domainContext.types.ts +23 -15
  572. package/src/index.ts +17 -11
  573. package/src/rawRumEvent.types.ts +80 -26
  574. package/src/rumEvent.types.ts +730 -505
  575. package/src/transport/formDataTransport.ts +16 -6
  576. package/src/transport/startRumBatch.ts +181 -24
  577. package/cjs/browser/firstInputPolyfill.d.ts +0 -8
  578. package/cjs/browser/firstInputPolyfill.js +0 -68
  579. package/cjs/browser/firstInputPolyfill.js.map +0 -1
  580. package/cjs/domain/configuration/index.js.map +0 -1
  581. package/cjs/domain/configuration/remoteConfiguration.types.js +0 -7
  582. package/cjs/domain/configuration/remoteConfiguration.types.js.map +0 -1
  583. package/cjs/domain/error/trackConsoleError.d.ts +0 -4
  584. package/cjs/domain/error/trackConsoleError.js +0 -13
  585. package/cjs/domain/error/trackConsoleError.js.map +0 -1
  586. package/cjs/domain/resource/matchRequestResourceEntry.d.ts +0 -16
  587. package/cjs/domain/resource/matchRequestResourceEntry.js +0 -49
  588. package/cjs/domain/resource/matchRequestResourceEntry.js.map +0 -1
  589. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
  590. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -24
  591. package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
  592. package/cjs/domain/rumSessionManager.d.ts +0 -36
  593. package/cjs/domain/rumSessionManager.js +0 -77
  594. package/cjs/domain/rumSessionManager.js.map +0 -1
  595. package/cjs/domain/sampler/sampler.d.ts +0 -10
  596. package/cjs/domain/sampler/sampler.js +0 -63
  597. package/cjs/domain/sampler/sampler.js.map +0 -1
  598. package/cjs/domain/tracing/sampler.d.ts +0 -10
  599. package/cjs/domain/tracing/sampler.js +0 -69
  600. package/cjs/domain/tracing/sampler.js.map +0 -1
  601. package/cjs/domain/tracing/tracer.types.js +0 -3
  602. package/cjs/domain/tracing/tracer.types.js.map +0 -1
  603. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
  604. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -44
  605. package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
  606. package/cjs/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
  607. package/cjs/domain/view/viewMetrics/trackFirstInput.js +0 -43
  608. package/cjs/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
  609. package/cjs/domainContext.types.js +0 -6
  610. package/cjs/domainContext.types.js.map +0 -1
  611. package/cjs/index.js.map +0 -1
  612. package/cjs/rumEvent.types.js +0 -7
  613. package/cjs/rumEvent.types.js.map +0 -1
  614. package/esm/boot/preStartRum.d.ts +0 -7
  615. package/esm/boot/preStartRum.js +0 -205
  616. package/esm/boot/preStartRum.js.map +0 -1
  617. package/esm/boot/rumPublicApi.d.ts +0 -409
  618. package/esm/boot/rumPublicApi.js +0 -165
  619. package/esm/boot/rumPublicApi.js.map +0 -1
  620. package/esm/boot/startRum.d.ts +0 -109
  621. package/esm/boot/startRum.js +0 -149
  622. package/esm/boot/startRum.js.map +0 -1
  623. package/esm/browser/cookieObservable.d.ts +0 -8
  624. package/esm/browser/cookieObservable.js +0 -35
  625. package/esm/browser/cookieObservable.js.map +0 -1
  626. package/esm/browser/domMutationObservable.d.ts +0 -27
  627. package/esm/browser/domMutationObservable.js +0 -54
  628. package/esm/browser/domMutationObservable.js.map +0 -1
  629. package/esm/browser/firstInputPolyfill.d.ts +0 -8
  630. package/esm/browser/firstInputPolyfill.js +0 -65
  631. package/esm/browser/firstInputPolyfill.js.map +0 -1
  632. package/esm/browser/htmlDomUtils.d.ts +0 -13
  633. package/esm/browser/htmlDomUtils.js +0 -36
  634. package/esm/browser/htmlDomUtils.js.map +0 -1
  635. package/esm/browser/locationChangeObservable.d.ts +0 -7
  636. package/esm/browser/locationChangeObservable.js +0 -48
  637. package/esm/browser/locationChangeObservable.js.map +0 -1
  638. package/esm/browser/performanceObservable.d.ts +0 -174
  639. package/esm/browser/performanceObservable.js +0 -121
  640. package/esm/browser/performanceObservable.js.map +0 -1
  641. package/esm/browser/performanceUtils.d.ts +0 -7
  642. package/esm/browser/performanceUtils.js +0 -38
  643. package/esm/browser/performanceUtils.js.map +0 -1
  644. package/esm/browser/scroll.d.ts +0 -2
  645. package/esm/browser/scroll.js +0 -29
  646. package/esm/browser/scroll.js.map +0 -1
  647. package/esm/browser/viewportObservable.d.ts +0 -10
  648. package/esm/browser/viewportObservable.js +0 -32
  649. package/esm/browser/viewportObservable.js.map +0 -1
  650. package/esm/browser/windowOpenObservable.d.ts +0 -5
  651. package/esm/browser/windowOpenObservable.js +0 -7
  652. package/esm/browser/windowOpenObservable.js.map +0 -1
  653. package/esm/domain/action/actionCollection.d.ts +0 -21
  654. package/esm/domain/action/actionCollection.js +0 -93
  655. package/esm/domain/action/actionCollection.js.map +0 -1
  656. package/esm/domain/action/actionNameConstants.d.ts +0 -18
  657. package/esm/domain/action/actionNameConstants.js +0 -8
  658. package/esm/domain/action/actionNameConstants.js.map +0 -1
  659. package/esm/domain/action/clickChain.d.ts +0 -8
  660. package/esm/domain/action/clickChain.js +0 -57
  661. package/esm/domain/action/clickChain.js.map +0 -1
  662. package/esm/domain/action/computeFrustration.d.ts +0 -6
  663. package/esm/domain/action/computeFrustration.js +0 -65
  664. package/esm/domain/action/computeFrustration.js.map +0 -1
  665. package/esm/domain/action/getActionNameFromElement.d.ts +0 -4
  666. package/esm/domain/action/getActionNameFromElement.js +0 -236
  667. package/esm/domain/action/getActionNameFromElement.js.map +0 -1
  668. package/esm/domain/action/interactionSelectorCache.d.ts +0 -5
  669. package/esm/domain/action/interactionSelectorCache.js +0 -18
  670. package/esm/domain/action/interactionSelectorCache.js.map +0 -1
  671. package/esm/domain/action/listenActionEvents.d.ts +0 -19
  672. package/esm/domain/action/listenActionEvents.js +0 -58
  673. package/esm/domain/action/listenActionEvents.js.map +0 -1
  674. package/esm/domain/action/trackClickActions.d.ts +0 -81
  675. package/esm/domain/action/trackClickActions.js +0 -232
  676. package/esm/domain/action/trackClickActions.js.map +0 -1
  677. package/esm/domain/assembly.d.ts +0 -5
  678. package/esm/domain/assembly.js +0 -99
  679. package/esm/domain/assembly.js.map +0 -1
  680. package/esm/domain/configuration/configuration.d.ts +0 -358
  681. package/esm/domain/configuration/configuration.js +0 -209
  682. package/esm/domain/configuration/configuration.js.map +0 -1
  683. package/esm/domain/configuration/index.d.ts +0 -4
  684. package/esm/domain/configuration/index.js +0 -5
  685. package/esm/domain/configuration/index.js.map +0 -1
  686. package/esm/domain/configuration/jsonPathParser.d.ts +0 -28
  687. package/esm/domain/configuration/jsonPathParser.js +0 -156
  688. package/esm/domain/configuration/jsonPathParser.js.map +0 -1
  689. package/esm/domain/configuration/remoteConfiguration.d.ts +0 -39
  690. package/esm/domain/configuration/remoteConfiguration.js +0 -236
  691. package/esm/domain/configuration/remoteConfiguration.js.map +0 -1
  692. package/esm/domain/configuration/remoteConfiguration.types.d.ts +0 -138
  693. package/esm/domain/configuration/remoteConfiguration.types.js +0 -6
  694. package/esm/domain/configuration/remoteConfiguration.types.js.map +0 -1
  695. package/esm/domain/configuration/remoteSdkConfiguration.d.ts +0 -18
  696. package/esm/domain/configuration/remoteSdkConfiguration.js +0 -137
  697. package/esm/domain/configuration/remoteSdkConfiguration.js.map +0 -1
  698. package/esm/domain/configuration/sessionReplayRoutes.d.ts +0 -35
  699. package/esm/domain/configuration/sessionReplayRoutes.js +0 -65
  700. package/esm/domain/configuration/sessionReplayRoutes.js.map +0 -1
  701. package/esm/domain/contexts/ciVisibilityContext.d.ts +0 -12
  702. package/esm/domain/contexts/ciVisibilityContext.js +0 -30
  703. package/esm/domain/contexts/ciVisibilityContext.js.map +0 -1
  704. package/esm/domain/contexts/connectivityContext.d.ts +0 -2
  705. package/esm/domain/contexts/connectivityContext.js +0 -8
  706. package/esm/domain/contexts/connectivityContext.js.map +0 -1
  707. package/esm/domain/contexts/defaultContext.d.ts +0 -4
  708. package/esm/domain/contexts/defaultContext.js +0 -31
  709. package/esm/domain/contexts/defaultContext.js.map +0 -1
  710. package/esm/domain/contexts/displayContext.d.ts +0 -6
  711. package/esm/domain/contexts/displayContext.js +0 -25
  712. package/esm/domain/contexts/displayContext.js.map +0 -1
  713. package/esm/domain/contexts/featureFlagContext.d.ts +0 -19
  714. package/esm/domain/contexts/featureFlagContext.js +0 -49
  715. package/esm/domain/contexts/featureFlagContext.js.map +0 -1
  716. package/esm/domain/contexts/internalContext.d.ts +0 -12
  717. package/esm/domain/contexts/internalContext.js +0 -23
  718. package/esm/domain/contexts/internalContext.js.map +0 -1
  719. package/esm/domain/contexts/pageStateHistory.d.ts +0 -23
  720. package/esm/domain/contexts/pageStateHistory.js +0 -100
  721. package/esm/domain/contexts/pageStateHistory.js.map +0 -1
  722. package/esm/domain/contexts/sessionContext.d.ts +0 -5
  723. package/esm/domain/contexts/sessionContext.js +0 -44
  724. package/esm/domain/contexts/sessionContext.js.map +0 -1
  725. package/esm/domain/contexts/syntheticsContext.d.ts +0 -2
  726. package/esm/domain/contexts/syntheticsContext.js +0 -22
  727. package/esm/domain/contexts/syntheticsContext.js.map +0 -1
  728. package/esm/domain/contexts/trackingConsentContext.d.ts +0 -3
  729. package/esm/domain/contexts/trackingConsentContext.js +0 -11
  730. package/esm/domain/contexts/trackingConsentContext.js.map +0 -1
  731. package/esm/domain/contexts/urlContexts.d.ts +0 -22
  732. package/esm/domain/contexts/urlContexts.js +0 -60
  733. package/esm/domain/contexts/urlContexts.js.map +0 -1
  734. package/esm/domain/contexts/userAgentDataContext.d.ts +0 -2
  735. package/esm/domain/contexts/userAgentDataContext.js +0 -28
  736. package/esm/domain/contexts/userAgentDataContext.js.map +0 -1
  737. package/esm/domain/contexts/viewHistory.d.ts +0 -17
  738. package/esm/domain/contexts/viewHistory.js +0 -44
  739. package/esm/domain/contexts/viewHistory.js.map +0 -1
  740. package/esm/domain/discardNegativeDuration.d.ts +0 -2
  741. package/esm/domain/discardNegativeDuration.js +0 -5
  742. package/esm/domain/discardNegativeDuration.js.map +0 -1
  743. package/esm/domain/error/errorCollection.d.ts +0 -17
  744. package/esm/domain/error/errorCollection.js +0 -70
  745. package/esm/domain/error/errorCollection.js.map +0 -1
  746. package/esm/domain/error/trackConsoleError.d.ts +0 -4
  747. package/esm/domain/error/trackConsoleError.js +0 -10
  748. package/esm/domain/error/trackConsoleError.js.map +0 -1
  749. package/esm/domain/error/trackReportError.d.ts +0 -5
  750. package/esm/domain/error/trackReportError.js +0 -13
  751. package/esm/domain/error/trackReportError.js.map +0 -1
  752. package/esm/domain/event/eventCollection.d.ts +0 -10
  753. package/esm/domain/event/eventCollection.js +0 -24
  754. package/esm/domain/event/eventCollection.js.map +0 -1
  755. package/esm/domain/getSelectorFromElement.d.ts +0 -64
  756. package/esm/domain/getSelectorFromElement.js +0 -213
  757. package/esm/domain/getSelectorFromElement.js.map +0 -1
  758. package/esm/domain/getSessionReplayUrl.d.ts +0 -9
  759. package/esm/domain/getSessionReplayUrl.js +0 -30
  760. package/esm/domain/getSessionReplayUrl.js.map +0 -1
  761. package/esm/domain/hooks.d.ts +0 -23
  762. package/esm/domain/hooks.js +0 -3
  763. package/esm/domain/hooks.js.map +0 -1
  764. package/esm/domain/lifeCycle.d.ts +0 -73
  765. package/esm/domain/lifeCycle.js +0 -3
  766. package/esm/domain/lifeCycle.js.map +0 -1
  767. package/esm/domain/limitModification.d.ts +0 -8
  768. package/esm/domain/limitModification.js +0 -43
  769. package/esm/domain/limitModification.js.map +0 -1
  770. package/esm/domain/longTask/longTaskCollection.d.ts +0 -18
  771. package/esm/domain/longTask/longTaskCollection.js +0 -87
  772. package/esm/domain/longTask/longTaskCollection.js.map +0 -1
  773. package/esm/domain/plugins.d.ts +0 -40
  774. package/esm/domain/plugins.js +0 -12
  775. package/esm/domain/plugins.js.map +0 -1
  776. package/esm/domain/privacy.d.ts +0 -44
  777. package/esm/domain/privacy.js +0 -302
  778. package/esm/domain/privacy.js.map +0 -1
  779. package/esm/domain/privacyConstants.d.ts +0 -23
  780. package/esm/domain/privacyConstants.js +0 -35
  781. package/esm/domain/privacyConstants.js.map +0 -1
  782. package/esm/domain/requestCollection.d.ts +0 -54
  783. package/esm/domain/requestCollection.js +0 -106
  784. package/esm/domain/requestCollection.js.map +0 -1
  785. package/esm/domain/resource/graphql.d.ts +0 -23
  786. package/esm/domain/resource/graphql.js +0 -91
  787. package/esm/domain/resource/graphql.js.map +0 -1
  788. package/esm/domain/resource/matchRequestResourceEntry.d.ts +0 -16
  789. package/esm/domain/resource/matchRequestResourceEntry.js +0 -46
  790. package/esm/domain/resource/matchRequestResourceEntry.js.map +0 -1
  791. package/esm/domain/resource/requestRegistry.d.ts +0 -9
  792. package/esm/domain/resource/requestRegistry.js +0 -37
  793. package/esm/domain/resource/requestRegistry.js.map +0 -1
  794. package/esm/domain/resource/resourceCollection.d.ts +0 -7
  795. package/esm/domain/resource/resourceCollection.js +0 -187
  796. package/esm/domain/resource/resourceCollection.js.map +0 -1
  797. package/esm/domain/resource/resourceUtils.d.ts +0 -55
  798. package/esm/domain/resource/resourceUtils.js +0 -244
  799. package/esm/domain/resource/resourceUtils.js.map +0 -1
  800. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
  801. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -21
  802. package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
  803. package/esm/domain/rumSessionManager.d.ts +0 -36
  804. package/esm/domain/rumSessionManager.js +0 -72
  805. package/esm/domain/rumSessionManager.js.map +0 -1
  806. package/esm/domain/sampler/sampler.d.ts +0 -10
  807. package/esm/domain/sampler/sampler.js +0 -58
  808. package/esm/domain/sampler/sampler.js.map +0 -1
  809. package/esm/domain/startCustomerDataTelemetry.d.ts +0 -4
  810. package/esm/domain/startCustomerDataTelemetry.js +0 -52
  811. package/esm/domain/startCustomerDataTelemetry.js.map +0 -1
  812. package/esm/domain/tracing/getDocumentTraceId.d.ts +0 -12
  813. package/esm/domain/tracing/getDocumentTraceId.js +0 -68
  814. package/esm/domain/tracing/getDocumentTraceId.js.map +0 -1
  815. package/esm/domain/tracing/identifier.d.ts +0 -13
  816. package/esm/domain/tracing/identifier.js +0 -50
  817. package/esm/domain/tracing/identifier.js.map +0 -1
  818. package/esm/domain/tracing/sampler.d.ts +0 -10
  819. package/esm/domain/tracing/sampler.js +0 -64
  820. package/esm/domain/tracing/sampler.js.map +0 -1
  821. package/esm/domain/tracing/tracer.d.ts +0 -30
  822. package/esm/domain/tracing/tracer.js +0 -156
  823. package/esm/domain/tracing/tracer.js.map +0 -1
  824. package/esm/domain/tracing/tracer.types.d.ts +0 -12
  825. package/esm/domain/tracing/tracer.types.js +0 -2
  826. package/esm/domain/tracing/tracer.types.js.map +0 -1
  827. package/esm/domain/trackEventCounts.d.ts +0 -17
  828. package/esm/domain/trackEventCounts.js +0 -47
  829. package/esm/domain/trackEventCounts.js.map +0 -1
  830. package/esm/domain/view/bfCacheSupport.d.ts +0 -2
  831. package/esm/domain/view/bfCacheSupport.js +0 -10
  832. package/esm/domain/view/bfCacheSupport.js.map +0 -1
  833. package/esm/domain/view/trackViewEventCounts.d.ts +0 -5
  834. package/esm/domain/view/trackViewEventCounts.js +0 -13
  835. package/esm/domain/view/trackViewEventCounts.js.map +0 -1
  836. package/esm/domain/view/trackViews.d.ts +0 -65
  837. package/esm/domain/view/trackViews.js +0 -278
  838. package/esm/domain/view/trackViews.js.map +0 -1
  839. package/esm/domain/view/viewCollection.d.ts +0 -18
  840. package/esm/domain/view/viewCollection.js +0 -150
  841. package/esm/domain/view/viewCollection.js.map +0 -1
  842. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +0 -6
  843. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js +0 -28
  844. package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +0 -1
  845. package/esm/domain/view/viewMetrics/interactionCountPolyfill.d.ts +0 -18
  846. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js +0 -39
  847. package/esm/domain/view/viewMetrics/interactionCountPolyfill.js.map +0 -1
  848. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
  849. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -41
  850. package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
  851. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +0 -8
  852. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js +0 -14
  853. package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js.map +0 -1
  854. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +0 -21
  855. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js +0 -34
  856. package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js.map +0 -1
  857. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +0 -37
  858. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js +0 -130
  859. package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +0 -1
  860. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +0 -13
  861. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js +0 -34
  862. package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +0 -1
  863. package/esm/domain/view/viewMetrics/trackFirstHidden.d.ts +0 -10
  864. package/esm/domain/view/viewMetrics/trackFirstHidden.js +0 -30
  865. package/esm/domain/view/viewMetrics/trackFirstHidden.js.map +0 -1
  866. package/esm/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
  867. package/esm/domain/view/viewMetrics/trackFirstInput.js +0 -40
  868. package/esm/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
  869. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +0 -15
  870. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js +0 -38
  871. package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js.map +0 -1
  872. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +0 -25
  873. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js +0 -149
  874. package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +0 -1
  875. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +0 -18
  876. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js +0 -57
  877. package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +0 -1
  878. package/esm/domain/view/viewMetrics/trackLoadingTime.d.ts +0 -14
  879. package/esm/domain/view/viewMetrics/trackLoadingTime.js +0 -47
  880. package/esm/domain/view/viewMetrics/trackLoadingTime.js.map +0 -1
  881. package/esm/domain/view/viewMetrics/trackNavigationTimings.d.ts +0 -14
  882. package/esm/domain/view/viewMetrics/trackNavigationTimings.js +0 -40
  883. package/esm/domain/view/viewMetrics/trackNavigationTimings.js.map +0 -1
  884. package/esm/domain/view/viewMetrics/trackScrollMetrics.d.ts +0 -25
  885. package/esm/domain/view/viewMetrics/trackScrollMetrics.js +0 -72
  886. package/esm/domain/view/viewMetrics/trackScrollMetrics.js.map +0 -1
  887. package/esm/domain/vital/vitalCollection.d.ts +0 -55
  888. package/esm/domain/vital/vitalCollection.js +0 -107
  889. package/esm/domain/vital/vitalCollection.js.map +0 -1
  890. package/esm/domain/waitPageActivityEnd.d.ts +0 -54
  891. package/esm/domain/waitPageActivityEnd.js +0 -123
  892. package/esm/domain/waitPageActivityEnd.js.map +0 -1
  893. package/esm/domainContext.types.d.ts +0 -39
  894. package/esm/domainContext.types.js +0 -5
  895. package/esm/domainContext.types.js.map +0 -1
  896. package/esm/index.d.ts +0 -42
  897. package/esm/index.js +0 -22
  898. package/esm/index.js.map +0 -1
  899. package/esm/rawRumEvent.types.d.ts +0 -326
  900. package/esm/rawRumEvent.types.js +0 -31
  901. package/esm/rawRumEvent.types.js.map +0 -1
  902. package/esm/rumEvent.types.d.ts +0 -2038
  903. package/esm/rumEvent.types.js +0 -6
  904. package/esm/rumEvent.types.js.map +0 -1
  905. package/esm/transport/formDataTransport.d.ts +0 -16
  906. package/esm/transport/formDataTransport.js +0 -43
  907. package/esm/transport/formDataTransport.js.map +0 -1
  908. package/esm/transport/startRumBatch.d.ts +0 -5
  909. package/esm/transport/startRumBatch.js +0 -30
  910. package/esm/transport/startRumBatch.js.map +0 -1
  911. package/esm/transport/startRumEventBridge.d.ts +0 -2
  912. package/esm/transport/startRumEventBridge.js +0 -8
  913. package/esm/transport/startRumEventBridge.js.map +0 -1
  914. package/src/browser/firstInputPolyfill.ts +0 -87
  915. package/src/domain/error/trackConsoleError.ts +0 -14
  916. package/src/domain/resource/matchRequestResourceEntry.ts +0 -68
  917. package/src/domain/resource/retrieveInitialDocumentResourceTiming.ts +0 -27
  918. package/src/domain/rumSessionManager.ts +0 -134
  919. package/src/domain/sampler/sampler.ts +0 -63
  920. package/src/domain/tracing/sampler.ts +0 -69
  921. package/src/domain/view/viewMetrics/startInitialViewMetricsTelemetry.ts +0 -70
  922. package/src/domain/view/viewMetrics/trackFirstInput.ts +0 -59
@@ -0,0 +1,34 @@
1
+ import { ONE_SECOND } from "@kubesense/kubesense-js-core/time";
2
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
3
+ import { DOM_EVENT, Observable, addEventListener, clearInterval, getCookie, isCookieStoreSupported, setInterval } from "@kubesense/kubesense-browser-core";
4
+ //#region src/browser/cookieObservable.ts
5
+ function createCookieObservable(cookieName) {
6
+ const detectCookieChangeStrategy = isCookieStoreSupported() ? listenToCookieStoreChange() : watchCookieFallback;
7
+ return new Observable((observable) => detectCookieChangeStrategy(cookieName, (event) => observable.notify(event)));
8
+ }
9
+ function listenToCookieStoreChange() {
10
+ return (cookieName, callback) => {
11
+ return addEventListener(globalObject.cookieStore, DOM_EVENT.CHANGE, (event) => {
12
+ const changeEvent = event.changed.find((event) => event.name === cookieName) || event.deleted.find((event) => event.name === cookieName);
13
+ if (changeEvent) callback(changeEvent.value);
14
+ }).stop;
15
+ };
16
+ }
17
+ const WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND;
18
+ function watchCookieFallback(cookieName, callback) {
19
+ let previousCookieValue = getCookie(cookieName);
20
+ const watchCookieIntervalId = setInterval(() => {
21
+ const cookieValue = getCookie(cookieName);
22
+ if (cookieValue !== previousCookieValue) {
23
+ previousCookieValue = cookieValue;
24
+ callback(cookieValue);
25
+ }
26
+ }, WATCH_COOKIE_INTERVAL_DELAY);
27
+ return () => {
28
+ clearInterval(watchCookieIntervalId);
29
+ };
30
+ }
31
+ //#endregion
32
+ export { WATCH_COOKIE_INTERVAL_DELAY, createCookieObservable };
33
+
34
+ //# sourceMappingURL=cookieObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookieObservable.mjs","names":[],"sources":["../../src/browser/cookieObservable.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { ONE_SECOND } from '@kubesense/kubesense-js-core/time'\nimport {\n setInterval,\n clearInterval,\n Observable,\n addEventListener,\n DOM_EVENT,\n getCookie,\n isCookieStoreSupported,\n} from '@kubesense/kubesense-browser-core'\n\nexport type CookieObservable = ReturnType<typeof createCookieObservable>\n\nexport function createCookieObservable(cookieName: string) {\n const detectCookieChangeStrategy = isCookieStoreSupported() ? listenToCookieStoreChange() : watchCookieFallback\n\n return new Observable<string | undefined>((observable) =>\n detectCookieChangeStrategy(cookieName, (event) => observable.notify(event))\n )\n}\n\nfunction listenToCookieStoreChange() {\n return (cookieName: string, callback: (event: string | undefined) => void) => {\n const listener = addEventListener(globalObject.cookieStore!, DOM_EVENT.CHANGE, (event) => {\n // Based on our experimentation, we're assuming that entries for the same cookie cannot be in both the 'changed' and 'deleted' arrays.\n // However, due to ambiguity in the specification, we asked for clarification: https://github.com/WICG/cookie-store/issues/226\n const changeEvent =\n event.changed.find((event) => event.name === cookieName) ||\n event.deleted.find((event) => event.name === cookieName)\n if (changeEvent) {\n callback(changeEvent.value)\n }\n })\n return listener.stop\n }\n}\n\nexport const WATCH_COOKIE_INTERVAL_DELAY = ONE_SECOND\n\nfunction watchCookieFallback(cookieName: string, callback: (event: string | undefined) => void) {\n let previousCookieValue = getCookie(cookieName)\n const watchCookieIntervalId = setInterval(() => {\n const cookieValue = getCookie(cookieName)\n if (cookieValue !== previousCookieValue) {\n previousCookieValue = cookieValue\n callback(cookieValue)\n }\n }, WATCH_COOKIE_INTERVAL_DELAY)\n\n return () => {\n clearInterval(watchCookieIntervalId)\n }\n}\n"],"mappings":";;;;AAcA,SAAgB,uBAAuB,YAAoB;CACzD,MAAM,6BAA6B,uBAAuB,IAAI,0BAA0B,IAAI;CAE5F,OAAO,IAAI,YAAgC,eACzC,2BAA2B,aAAa,UAAU,WAAW,OAAO,KAAK,CAAC,CAC5E;AACF;AAEA,SAAS,4BAA4B;CACnC,QAAQ,YAAoB,aAAkD;EAW5E,OAViB,iBAAiB,aAAa,aAAc,UAAU,SAAS,UAAU;GAGxF,MAAM,cACJ,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU,KACvD,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,UAAU;GACzD,IAAI,aACF,SAAS,YAAY,KAAK;EAE9B,CACc,CAAC,CAAC;CAClB;AACF;AAEA,MAAa,8BAA8B;AAE3C,SAAS,oBAAoB,YAAoB,UAA+C;CAC9F,IAAI,sBAAsB,UAAU,UAAU;CAC9C,MAAM,wBAAwB,kBAAkB;EAC9C,MAAM,cAAc,UAAU,UAAU;EACxC,IAAI,gBAAgB,qBAAqB;GACvC,sBAAsB;GACtB,SAAS,WAAW;EACtB;CACF,GAAG,2BAA2B;CAE9B,aAAa;EACX,cAAc,qBAAqB;CACrC;AACF"}
@@ -0,0 +1,33 @@
1
+ import { Observable, getZoneJsOriginalValue, noop } from "@kubesense/kubesense-browser-core";
2
+ import { monitor } from "@kubesense/kubesense-js-core/monitor";
3
+ //#region src/browser/domMutationObservable.ts
4
+ function createDOMMutationObservable() {
5
+ const MutationObserver = getMutationObserverConstructor();
6
+ return new Observable((observable) => {
7
+ const observer = new MutationObserver(monitor((records) => observable.notify(records)));
8
+ observer.observe(document, {
9
+ attributes: true,
10
+ characterData: true,
11
+ childList: true,
12
+ subtree: true
13
+ });
14
+ return () => observer.disconnect();
15
+ });
16
+ }
17
+ function getMutationObserverConstructor() {
18
+ let constructor;
19
+ const browserWindow = window;
20
+ if (browserWindow.Zone) {
21
+ constructor = getZoneJsOriginalValue(browserWindow, "MutationObserver");
22
+ if (browserWindow.MutationObserver && constructor === browserWindow.MutationObserver) {
23
+ const patchedInstance = new browserWindow.MutationObserver(noop);
24
+ constructor = getZoneJsOriginalValue(patchedInstance, "originalInstance")?.constructor;
25
+ }
26
+ }
27
+ if (!constructor) constructor = browserWindow.MutationObserver;
28
+ return constructor;
29
+ }
30
+ //#endregion
31
+ export { createDOMMutationObservable, getMutationObserverConstructor };
32
+
33
+ //# sourceMappingURL=domMutationObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domMutationObservable.mjs","names":[],"sources":["../../src/browser/domMutationObservable.ts"],"sourcesContent":["import { monitor } from '@kubesense/kubesense-js-core/monitor'\nimport { noop, Observable, getZoneJsOriginalValue } from '@kubesense/kubesense-browser-core'\n\n// https://dom.spec.whatwg.org/#interface-mutationrecord\nexport interface RumCharacterDataMutationRecord {\n type: 'characterData'\n target: Node\n oldValue: string | null\n}\n\nexport interface RumAttributesMutationRecord {\n type: 'attributes'\n target: Element\n oldValue: string | null\n attributeName: string\n}\n\nexport interface RumChildListMutationRecord {\n type: 'childList'\n target: Node\n addedNodes: NodeList\n removedNodes: NodeList\n}\n\nexport type RumMutationRecord =\n RumCharacterDataMutationRecord | RumAttributesMutationRecord | RumChildListMutationRecord\n\nexport function createDOMMutationObservable() {\n const MutationObserver = getMutationObserverConstructor()\n\n return new Observable<RumMutationRecord[]>((observable) => {\n const observer = new MutationObserver(monitor((records) => observable.notify(records)))\n observer.observe(document, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true,\n })\n return () => observer.disconnect()\n })\n}\n\ntype MutationObserverConstructor = new (callback: (records: RumMutationRecord[]) => void) => MutationObserver\n\nexport interface BrowserWindow extends Window {\n MutationObserver: MutationObserverConstructor\n Zone?: unknown\n}\n\nexport function getMutationObserverConstructor(): MutationObserverConstructor {\n let constructor: MutationObserverConstructor | undefined\n const browserWindow = window as BrowserWindow\n\n // Angular uses Zone.js to provide a context persisting across async tasks. Zone.js replaces the\n // global MutationObserver constructor with a patched version to support the context propagation.\n // There is an ongoing issue[1][2] with this setup when using a MutationObserver within a Angular\n // component: on some occasions, the callback is being called in an infinite loop, causing the\n // page to freeze (even if the callback is completely empty).\n //\n // To work around this issue, we try to get the original MutationObserver constructor stored by\n // Zone.js.\n //\n // [1] https://github.com/angular/angular/issues/26948\n // [2] https://github.com/angular/angular/issues/31712\n if (browserWindow.Zone) {\n // Zone.js 0.8.6+ is storing original class constructors into the browser 'window' object[3].\n //\n // [3] https://github.com/angular/angular/blob/6375fa79875c0fe7b815efc45940a6e6f5c9c9eb/packages/zone.js/lib/common/utils.ts#L288\n constructor = getZoneJsOriginalValue(browserWindow, 'MutationObserver')\n\n if (browserWindow.MutationObserver && constructor === browserWindow.MutationObserver) {\n // Anterior Zone.js versions (used in Angular 2) does not expose the original MutationObserver\n // in the 'window' object. Luckily, the patched MutationObserver class is storing an original\n // instance in its properties[4]. Let's get the original MutationObserver constructor from\n // there.\n //\n // [4] https://github.com/angular/zone.js/blob/v0.8.5/lib/common/utils.ts#L412\n\n const patchedInstance = new browserWindow.MutationObserver(noop) as {\n originalInstance?: { constructor: MutationObserverConstructor }\n }\n\n const originalInstance = getZoneJsOriginalValue(patchedInstance, 'originalInstance')\n constructor = originalInstance?.constructor\n }\n }\n\n if (!constructor) {\n constructor = browserWindow.MutationObserver\n }\n\n return constructor\n}\n"],"mappings":";;;AA2BA,SAAgB,8BAA8B;CAC5C,MAAM,mBAAmB,+BAA+B;CAExD,OAAO,IAAI,YAAiC,eAAe;EACzD,MAAM,WAAW,IAAI,iBAAiB,SAAS,YAAY,WAAW,OAAO,OAAO,CAAC,CAAC;EACtF,SAAS,QAAQ,UAAU;GACzB,YAAY;GACZ,eAAe;GACf,WAAW;GACX,SAAS;EACX,CAAC;EACD,aAAa,SAAS,WAAW;CACnC,CAAC;AACH;AASA,SAAgB,iCAA8D;CAC5E,IAAI;CACJ,MAAM,gBAAgB;CAatB,IAAI,cAAc,MAAM;EAItB,cAAc,uBAAuB,eAAe,kBAAkB;EAEtE,IAAI,cAAc,oBAAoB,gBAAgB,cAAc,kBAAkB;GAQpF,MAAM,kBAAkB,IAAI,cAAc,iBAAiB,IAAI;GAK/D,cADyB,uBAAuB,iBAAiB,kBACpC,CAAC,EAAE;EAClC;CACF;CAEA,IAAI,CAAC,aACH,cAAc,cAAc;CAG9B,OAAO;AACT"}
@@ -0,0 +1,48 @@
1
+ //#region src/browser/htmlDomUtils.ts
2
+ function isTextNode(node) {
3
+ return node.nodeType === Node.TEXT_NODE;
4
+ }
5
+ function isCommentNode(node) {
6
+ return node.nodeType === Node.COMMENT_NODE;
7
+ }
8
+ function isElementNode(node) {
9
+ return node.nodeType === Node.ELEMENT_NODE;
10
+ }
11
+ function isNodeShadowHost(node) {
12
+ return isElementNode(node) && Boolean(node.shadowRoot);
13
+ }
14
+ function isNodeShadowRoot(node) {
15
+ const shadowRoot = node;
16
+ return !!shadowRoot.host && shadowRoot.nodeType === Node.DOCUMENT_FRAGMENT_NODE && isElementNode(shadowRoot.host);
17
+ }
18
+ function hasChildNodes(node) {
19
+ return node.childNodes.length > 0 || isNodeShadowHost(node);
20
+ }
21
+ function forEachChildNodes(node, callback) {
22
+ let child = node.firstChild;
23
+ while (child) {
24
+ callback(child);
25
+ child = child.nextSibling;
26
+ }
27
+ if (isNodeShadowHost(node)) callback(node.shadowRoot);
28
+ }
29
+ /**
30
+ * Return `host` in case if the current node is a shadow root otherwise will return the `parentNode`
31
+ */
32
+ function getParentNode(node) {
33
+ return isNodeShadowRoot(node) ? node.host : node.parentNode;
34
+ }
35
+ /**
36
+ * Return the parent element, crossing shadow DOM boundaries.
37
+ * If the element is a direct child of a shadow root, returns the shadow host.
38
+ */
39
+ function getParentElement(element) {
40
+ if (element.parentElement) return element.parentElement;
41
+ const parentNode = element.parentNode;
42
+ if (parentNode && isNodeShadowRoot(parentNode)) return parentNode.host;
43
+ return null;
44
+ }
45
+ //#endregion
46
+ export { forEachChildNodes, getParentElement, getParentNode, hasChildNodes, isCommentNode, isElementNode, isNodeShadowHost, isNodeShadowRoot, isTextNode };
47
+
48
+ //# sourceMappingURL=htmlDomUtils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlDomUtils.mjs","names":[],"sources":["../../src/browser/htmlDomUtils.ts"],"sourcesContent":["export function isTextNode(node: Node): node is Text {\n return node.nodeType === Node.TEXT_NODE\n}\n\nexport function isCommentNode(node: Node): node is Comment {\n return node.nodeType === Node.COMMENT_NODE\n}\n\nexport function isElementNode(node: Node): node is Element {\n return node.nodeType === Node.ELEMENT_NODE\n}\n\nexport function isNodeShadowHost(node: Node): node is Element & { shadowRoot: ShadowRoot } {\n return isElementNode(node) && Boolean(node.shadowRoot)\n}\n\nexport function isNodeShadowRoot(node: Node): node is ShadowRoot {\n const shadowRoot = node as ShadowRoot\n return !!shadowRoot.host && shadowRoot.nodeType === Node.DOCUMENT_FRAGMENT_NODE && isElementNode(shadowRoot.host)\n}\n\nexport function hasChildNodes(node: Node) {\n return node.childNodes.length > 0 || isNodeShadowHost(node)\n}\n\nexport function forEachChildNodes(node: Node, callback: (child: Node) => void) {\n let child = node.firstChild\n\n while (child) {\n callback(child)\n\n child = child.nextSibling\n }\n\n if (isNodeShadowHost(node)) {\n callback(node.shadowRoot)\n }\n}\n\n/**\n * Return `host` in case if the current node is a shadow root otherwise will return the `parentNode`\n */\nexport function getParentNode(node: Node): Node | null {\n return isNodeShadowRoot(node) ? node.host : node.parentNode\n}\n\n/**\n * Return the parent element, crossing shadow DOM boundaries.\n * If the element is a direct child of a shadow root, returns the shadow host.\n */\nexport function getParentElement(element: Element): Element | null {\n if (element.parentElement) {\n return element.parentElement\n }\n const parentNode = element.parentNode\n if (parentNode && isNodeShadowRoot(parentNode)) {\n return parentNode.host\n }\n return null\n}\n"],"mappings":";AAAA,SAAgB,WAAW,MAA0B;CACnD,OAAO,KAAK,aAAa,KAAK;AAChC;AAEA,SAAgB,cAAc,MAA6B;CACzD,OAAO,KAAK,aAAa,KAAK;AAChC;AAEA,SAAgB,cAAc,MAA6B;CACzD,OAAO,KAAK,aAAa,KAAK;AAChC;AAEA,SAAgB,iBAAiB,MAA0D;CACzF,OAAO,cAAc,IAAI,KAAK,QAAQ,KAAK,UAAU;AACvD;AAEA,SAAgB,iBAAiB,MAAgC;CAC/D,MAAM,aAAa;CACnB,OAAO,CAAC,CAAC,WAAW,QAAQ,WAAW,aAAa,KAAK,0BAA0B,cAAc,WAAW,IAAI;AAClH;AAEA,SAAgB,cAAc,MAAY;CACxC,OAAO,KAAK,WAAW,SAAS,KAAK,iBAAiB,IAAI;AAC5D;AAEA,SAAgB,kBAAkB,MAAY,UAAiC;CAC7E,IAAI,QAAQ,KAAK;CAEjB,OAAO,OAAO;EACZ,SAAS,KAAK;EAEd,QAAQ,MAAM;CAChB;CAEA,IAAI,iBAAiB,IAAI,GACvB,SAAS,KAAK,UAAU;AAE5B;;;;AAKA,SAAgB,cAAc,MAAyB;CACrD,OAAO,iBAAiB,IAAI,IAAI,KAAK,OAAO,KAAK;AACnD;;;;;AAMA,SAAgB,iBAAiB,SAAkC;CACjE,IAAI,QAAQ,eACV,OAAO,QAAQ;CAEjB,MAAM,aAAa,QAAQ;CAC3B,IAAI,cAAc,iBAAiB,UAAU,GAC3C,OAAO,WAAW;CAEpB,OAAO;AACT"}
@@ -0,0 +1,50 @@
1
+ import { globalObject } from "@kubesense/kubesense-js-core/util";
2
+ import { DOM_EVENT, Observable, addEventListener, instrumentMethod, mockable, shallowClone } from "@kubesense/kubesense-browser-core";
3
+ //#region src/browser/locationChangeObservable.ts
4
+ function createLocationChangeObservable() {
5
+ let currentLocation = shallowClone(getLocation());
6
+ return new Observable((observable) => {
7
+ const { stop: stopHistoryTracking } = trackHistory(onLocationChange);
8
+ const { stop: stopHashTracking } = trackHash(onLocationChange);
9
+ function onLocationChange() {
10
+ if (currentLocation.href === getLocation().href) return;
11
+ const newLocation = shallowClone(getLocation());
12
+ observable.notify({
13
+ newLocation,
14
+ oldLocation: currentLocation
15
+ });
16
+ currentLocation = newLocation;
17
+ }
18
+ return () => {
19
+ stopHistoryTracking();
20
+ stopHashTracking();
21
+ };
22
+ });
23
+ }
24
+ function getLocation() {
25
+ return mockable(globalObject.location);
26
+ }
27
+ function trackHistory(onHistoryChange) {
28
+ const { stop: stopInstrumentingPushState } = instrumentMethod(getHistoryInstrumentationTarget("pushState"), "pushState", ({ onPostCall }) => {
29
+ onPostCall(onHistoryChange);
30
+ });
31
+ const { stop: stopInstrumentingReplaceState } = instrumentMethod(getHistoryInstrumentationTarget("replaceState"), "replaceState", ({ onPostCall }) => {
32
+ onPostCall(onHistoryChange);
33
+ });
34
+ const { stop: removeListener } = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange);
35
+ return { stop: () => {
36
+ stopInstrumentingPushState();
37
+ stopInstrumentingReplaceState();
38
+ removeListener();
39
+ } };
40
+ }
41
+ function trackHash(onHashChange) {
42
+ return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange);
43
+ }
44
+ function getHistoryInstrumentationTarget(methodName) {
45
+ return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype;
46
+ }
47
+ //#endregion
48
+ export { createLocationChangeObservable };
49
+
50
+ //# sourceMappingURL=locationChangeObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locationChangeObservable.mjs","names":[],"sources":["../../src/browser/locationChangeObservable.ts"],"sourcesContent":["import { globalObject } from '@kubesense/kubesense-js-core/util'\nimport {\n addEventListener,\n DOM_EVENT,\n instrumentMethod,\n mockable,\n Observable,\n shallowClone,\n} from '@kubesense/kubesense-browser-core'\n\nexport interface LocationChange {\n oldLocation: Readonly<Location>\n newLocation: Readonly<Location>\n}\n\nexport function createLocationChangeObservable() {\n let currentLocation = shallowClone(getLocation())\n\n return new Observable<LocationChange>((observable) => {\n const { stop: stopHistoryTracking } = trackHistory(onLocationChange)\n const { stop: stopHashTracking } = trackHash(onLocationChange)\n\n function onLocationChange() {\n if (currentLocation.href === getLocation().href) {\n return\n }\n const newLocation = shallowClone(getLocation())\n observable.notify({\n newLocation,\n oldLocation: currentLocation,\n })\n currentLocation = newLocation\n }\n\n return () => {\n stopHistoryTracking()\n stopHashTracking()\n }\n })\n}\n\nfunction getLocation() {\n return mockable(globalObject.location)\n}\n\nfunction trackHistory(onHistoryChange: () => void) {\n const { stop: stopInstrumentingPushState } = instrumentMethod(\n getHistoryInstrumentationTarget('pushState'),\n 'pushState',\n ({ onPostCall }) => {\n onPostCall(onHistoryChange)\n }\n )\n const { stop: stopInstrumentingReplaceState } = instrumentMethod(\n getHistoryInstrumentationTarget('replaceState'),\n 'replaceState',\n ({ onPostCall }) => {\n onPostCall(onHistoryChange)\n }\n )\n const { stop: removeListener } = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange)\n\n return {\n stop: () => {\n stopInstrumentingPushState()\n stopInstrumentingReplaceState()\n removeListener()\n },\n }\n}\n\nfunction trackHash(onHashChange: () => void) {\n return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange)\n}\n\nfunction getHistoryInstrumentationTarget(methodName: 'pushState' | 'replaceState') {\n // Ideally we should always instument the method on the prototype, however some frameworks (e.g [Next.js](https://github.com/vercel/next.js/blob/d3f5532065f3e3bb84fb54bd2dfd1a16d0f03a21/packages/next/src/client/components/app-router.tsx#L429))\n // are wrapping the instance method. In that case we should also wrap the instance method.\n return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype\n}\n"],"mappings":";;;AAeA,SAAgB,iCAAiC;CAC/C,IAAI,kBAAkB,aAAa,YAAY,CAAC;CAEhD,OAAO,IAAI,YAA4B,eAAe;EACpD,MAAM,EAAE,MAAM,wBAAwB,aAAa,gBAAgB;EACnE,MAAM,EAAE,MAAM,qBAAqB,UAAU,gBAAgB;EAE7D,SAAS,mBAAmB;GAC1B,IAAI,gBAAgB,SAAS,YAAY,CAAC,CAAC,MACzC;GAEF,MAAM,cAAc,aAAa,YAAY,CAAC;GAC9C,WAAW,OAAO;IAChB;IACA,aAAa;GACf,CAAC;GACD,kBAAkB;EACpB;EAEA,aAAa;GACX,oBAAoB;GACpB,iBAAiB;EACnB;CACF,CAAC;AACH;AAEA,SAAS,cAAc;CACrB,OAAO,SAAS,aAAa,QAAQ;AACvC;AAEA,SAAS,aAAa,iBAA6B;CACjD,MAAM,EAAE,MAAM,+BAA+B,iBAC3C,gCAAgC,WAAW,GAC3C,cACC,EAAE,iBAAiB;EAClB,WAAW,eAAe;CAC5B,CACF;CACA,MAAM,EAAE,MAAM,kCAAkC,iBAC9C,gCAAgC,cAAc,GAC9C,iBACC,EAAE,iBAAiB;EAClB,WAAW,eAAe;CAC5B,CACF;CACA,MAAM,EAAE,MAAM,mBAAmB,iBAAiB,QAAQ,UAAU,WAAW,eAAe;CAE9F,OAAO,EACL,YAAY;EACV,2BAA2B;EAC3B,8BAA8B;EAC9B,eAAe;CACjB,EACF;AACF;AAEA,SAAS,UAAU,cAA0B;CAC3C,OAAO,iBAAiB,QAAQ,UAAU,aAAa,YAAY;AACrE;AAEA,SAAS,gCAAgC,YAA0C;CAGjF,OAAO,OAAO,UAAU,eAAe,KAAK,SAAS,UAAU,IAAI,UAAU,QAAQ;AACvF"}
@@ -0,0 +1,60 @@
1
+ import { hasValidResourceEntryDuration, isAllowedRequestUrl } from "../domain/resource/resourceUtils.mjs";
2
+ import { Observable, addEventListener, clearTimeout, setTimeout } from "@kubesense/kubesense-browser-core";
3
+ import { monitor } from "@kubesense/kubesense-js-core/monitor";
4
+ //#region src/browser/performanceObservable.ts
5
+ let RumPerformanceEntryType = /* @__PURE__ */ function(RumPerformanceEntryType) {
6
+ RumPerformanceEntryType["EVENT"] = "event";
7
+ RumPerformanceEntryType["FIRST_INPUT"] = "first-input";
8
+ RumPerformanceEntryType["LARGEST_CONTENTFUL_PAINT"] = "largest-contentful-paint";
9
+ RumPerformanceEntryType["LAYOUT_SHIFT"] = "layout-shift";
10
+ RumPerformanceEntryType["LONG_TASK"] = "longtask";
11
+ RumPerformanceEntryType["LONG_ANIMATION_FRAME"] = "long-animation-frame";
12
+ RumPerformanceEntryType["NAVIGATION"] = "navigation";
13
+ RumPerformanceEntryType["PAINT"] = "paint";
14
+ RumPerformanceEntryType["RESOURCE"] = "resource";
15
+ RumPerformanceEntryType["VISIBILITY_STATE"] = "visibility-state";
16
+ return RumPerformanceEntryType;
17
+ }({});
18
+ function createPerformanceObservable(options) {
19
+ return new Observable((observable) => {
20
+ const handlePerformanceEntries = (entries) => {
21
+ const rumPerformanceEntries = filterRumPerformanceEntries(entries);
22
+ if (rumPerformanceEntries.length > 0) observable.notify(rumPerformanceEntries);
23
+ };
24
+ let timeoutId;
25
+ let isObserverInitializing = true;
26
+ const observer = new PerformanceObserver(monitor((entries) => {
27
+ if (isObserverInitializing) timeoutId = setTimeout(() => handlePerformanceEntries(entries.getEntries()));
28
+ else handlePerformanceEntries(entries.getEntries());
29
+ }));
30
+ observer.observe(options);
31
+ isObserverInitializing = false;
32
+ manageResourceTimingBufferFull();
33
+ return () => {
34
+ observer.disconnect();
35
+ clearTimeout(timeoutId);
36
+ };
37
+ });
38
+ }
39
+ let resourceTimingBufferFullListener;
40
+ function manageResourceTimingBufferFull() {
41
+ if (!resourceTimingBufferFullListener && supportPerformanceObject() && "addEventListener" in performance) resourceTimingBufferFullListener = addEventListener(performance, "resourcetimingbufferfull", () => {
42
+ performance.clearResourceTimings();
43
+ });
44
+ }
45
+ function supportPerformanceObject() {
46
+ return window.performance !== void 0 && "getEntries" in performance;
47
+ }
48
+ function supportPerformanceTimingEvent(entryType) {
49
+ return PerformanceObserver.supportedEntryTypes.includes(entryType);
50
+ }
51
+ function filterRumPerformanceEntries(entries) {
52
+ return entries.filter((entry) => !isForbiddenResource(entry));
53
+ }
54
+ function isForbiddenResource(entry) {
55
+ return entry.entryType === "resource" && (!isAllowedRequestUrl(entry.name) || !hasValidResourceEntryDuration(entry));
56
+ }
57
+ //#endregion
58
+ export { RumPerformanceEntryType, createPerformanceObservable, supportPerformanceTimingEvent };
59
+
60
+ //# sourceMappingURL=performanceObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceObservable.mjs","names":[],"sources":["../../src/browser/performanceObservable.ts"],"sourcesContent":["import type { RelativeTime, Duration } from '@kubesense/kubesense-js-core/time'\nimport type { TimeoutId } from '@kubesense/kubesense-browser-core'\nimport { monitor } from '@kubesense/kubesense-js-core/monitor'\nimport { addEventListener, Observable, setTimeout, clearTimeout } from '@kubesense/kubesense-browser-core'\nimport { hasValidResourceEntryDuration, isAllowedRequestUrl } from '../domain/resource/resourceUtils'\n\ntype RumPerformanceObserverConstructor = new (callback: PerformanceObserverCallback) => RumPerformanceObserver\n\nexport interface BrowserWindow extends Window {\n PerformanceObserver: RumPerformanceObserverConstructor\n performance: Performance & { interactionCount?: number }\n}\n\nexport interface RumPerformanceObserver extends PerformanceObserver {\n observe(options?: PerformanceObserverInit & { durationThreshold?: number }): void\n}\n\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected performance entry\n// eslint-disable-next-line no-restricted-syntax\nexport enum RumPerformanceEntryType {\n EVENT = 'event',\n FIRST_INPUT = 'first-input',\n LARGEST_CONTENTFUL_PAINT = 'largest-contentful-paint',\n LAYOUT_SHIFT = 'layout-shift',\n LONG_TASK = 'longtask',\n LONG_ANIMATION_FRAME = 'long-animation-frame',\n NAVIGATION = 'navigation',\n PAINT = 'paint',\n RESOURCE = 'resource',\n VISIBILITY_STATE = 'visibility-state',\n}\n\nexport interface RumPerformanceLongTaskTiming {\n name: string\n entryType: RumPerformanceEntryType.LONG_TASK\n startTime: RelativeTime\n duration: Duration\n toJSON(): Omit<PerformanceEntry, 'toJSON'>\n}\n\nexport interface RumPerformanceResourceTiming {\n entryType: RumPerformanceEntryType.RESOURCE\n initiatorType: string\n responseStatus?: number\n name: string\n startTime: RelativeTime\n duration: Duration\n fetchStart: RelativeTime\n workerStart: RelativeTime\n domainLookupStart: RelativeTime\n domainLookupEnd: RelativeTime\n connectStart: RelativeTime\n secureConnectionStart: RelativeTime\n connectEnd: RelativeTime\n requestStart: RelativeTime\n responseStart: RelativeTime\n responseEnd: RelativeTime\n redirectStart: RelativeTime\n redirectEnd: RelativeTime\n decodedBodySize?: number\n encodedBodySize?: number\n transferSize?: number\n nextHopProtocol?: string\n renderBlockingStatus?: string\n deliveryType?: 'cache' | 'navigational-prefetch' | ''\n contentType?: string\n toJSON(): Omit<PerformanceEntry, 'toJSON'>\n}\n\nexport interface RumPerformancePaintTiming {\n entryType: RumPerformanceEntryType.PAINT\n name: 'first-paint' | 'first-contentful-paint'\n startTime: RelativeTime\n toJSON(): Omit<RumPerformancePaintTiming, 'toJSON'>\n}\n\nexport interface RumPerformanceNavigationTiming extends Omit<RumPerformanceResourceTiming, 'entryType'> {\n entryType: RumPerformanceEntryType.NAVIGATION\n initiatorType: 'navigation'\n name: string\n\n domComplete: RelativeTime\n domContentLoadedEventEnd: RelativeTime\n domInteractive: RelativeTime\n loadEventEnd: RelativeTime\n\n toJSON(): Omit<RumPerformanceNavigationTiming, 'toJSON'>\n}\n\nexport interface RumLargestContentfulPaintTiming {\n entryType: RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT\n startTime: RelativeTime\n size: number\n element?: Element\n url?: string\n toJSON(): Omit<RumLargestContentfulPaintTiming, 'toJSON'>\n}\n\nexport interface RumFirstInputTiming {\n entryType: RumPerformanceEntryType.FIRST_INPUT\n startTime: RelativeTime\n processingStart: RelativeTime\n processingEnd: RelativeTime\n duration: Duration\n target?: Node\n interactionId?: number\n toJSON(): Omit<RumFirstInputTiming, 'toJSON'>\n}\n\nexport interface RumPerformanceEventTiming {\n entryType: RumPerformanceEntryType.EVENT\n startTime: RelativeTime\n processingStart: RelativeTime\n processingEnd: RelativeTime\n duration: Duration\n interactionId?: number\n target?: Node\n name: string\n toJSON(): Omit<RumPerformanceEventTiming, 'toJSON'>\n}\n\nexport interface RumLayoutShiftAttribution {\n node: Node | null\n previousRect: DOMRectReadOnly\n currentRect: DOMRectReadOnly\n}\n\nexport interface RumLayoutShiftTiming {\n entryType: RumPerformanceEntryType.LAYOUT_SHIFT\n startTime: RelativeTime\n value: number\n hadRecentInput: boolean\n sources: RumLayoutShiftAttribution[]\n toJSON(): Omit<RumLayoutShiftTiming, 'toJSON'>\n}\n\n// Documentation https://developer.chrome.com/docs/web-platform/long-animation-frames#better-attribution\nexport interface RumPerformanceScriptTiming {\n duration: Duration\n entryType: 'script'\n executionStart: RelativeTime\n forcedStyleAndLayoutDuration: Duration\n invoker: string // e.g. \"https://static.kubesense.ai/static/c/93085/chunk-bc4db53278fd4c77a637.min.js\"\n invokerType:\n 'user-callback' | 'event-listener' | 'resolve-promise' | 'reject-promise' | 'classic-script' | 'module-script'\n name: 'script'\n pauseDuration: Duration\n sourceCharPosition: number\n sourceFunctionName: string\n sourceURL: string\n startTime: RelativeTime\n window: Window\n windowAttribution: string\n}\n\nexport interface RumPerformanceLongAnimationFrameTiming {\n blockingDuration: Duration\n duration: Duration\n entryType: RumPerformanceEntryType.LONG_ANIMATION_FRAME\n firstUIEventTimestamp: RelativeTime\n name: 'long-animation-frame'\n renderStart: RelativeTime\n scripts: RumPerformanceScriptTiming[]\n startTime: RelativeTime\n styleAndLayoutStart: RelativeTime\n toJSON(): Omit<RumPerformanceLongAnimationFrameTiming, 'toJSON'>\n}\n\nexport interface RumFirstHiddenTiming {\n entryType: RumPerformanceEntryType.VISIBILITY_STATE\n name: 'hidden' | 'visible'\n startTime: RelativeTime\n toJSON(): Omit<RumFirstHiddenTiming, 'toJSON'>\n}\n\nexport type RumPerformanceEntry =\n | RumPerformanceResourceTiming\n | RumPerformanceLongTaskTiming\n | RumPerformanceLongAnimationFrameTiming\n | RumPerformancePaintTiming\n | RumPerformanceNavigationTiming\n | RumLargestContentfulPaintTiming\n | RumFirstInputTiming\n | RumPerformanceEventTiming\n | RumLayoutShiftTiming\n | RumFirstHiddenTiming\n\nexport interface EntryTypeToReturnType {\n [RumPerformanceEntryType.EVENT]: RumPerformanceEventTiming\n [RumPerformanceEntryType.FIRST_INPUT]: RumFirstInputTiming\n [RumPerformanceEntryType.LARGEST_CONTENTFUL_PAINT]: RumLargestContentfulPaintTiming\n [RumPerformanceEntryType.LAYOUT_SHIFT]: RumLayoutShiftTiming\n [RumPerformanceEntryType.PAINT]: RumPerformancePaintTiming\n [RumPerformanceEntryType.LONG_TASK]: RumPerformanceLongTaskTiming\n [RumPerformanceEntryType.LONG_ANIMATION_FRAME]: RumPerformanceLongAnimationFrameTiming\n [RumPerformanceEntryType.NAVIGATION]: RumPerformanceNavigationTiming\n [RumPerformanceEntryType.RESOURCE]: RumPerformanceResourceTiming\n [RumPerformanceEntryType.VISIBILITY_STATE]: RumFirstHiddenTiming\n}\n\nexport function createPerformanceObservable<T extends RumPerformanceEntryType>(options: {\n type: T\n buffered?: boolean\n durationThreshold?: number\n}) {\n return new Observable<Array<EntryTypeToReturnType[T]>>((observable) => {\n const handlePerformanceEntries = (entries: PerformanceEntryList) => {\n const rumPerformanceEntries = filterRumPerformanceEntries(entries as Array<EntryTypeToReturnType[T]>)\n if (rumPerformanceEntries.length > 0) {\n observable.notify(rumPerformanceEntries)\n }\n }\n\n let timeoutId: TimeoutId | undefined\n let isObserverInitializing = true\n const observer = new PerformanceObserver(\n monitor((entries) => {\n // In Safari the performance observer callback is synchronous.\n // Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init\n if (isObserverInitializing) {\n timeoutId = setTimeout(() => handlePerformanceEntries(entries.getEntries()))\n } else {\n handlePerformanceEntries(entries.getEntries())\n }\n })\n )\n observer.observe(options)\n isObserverInitializing = false\n\n manageResourceTimingBufferFull()\n\n return () => {\n observer.disconnect()\n clearTimeout(timeoutId)\n }\n })\n}\n\nlet resourceTimingBufferFullListener: { stop: () => void } | undefined\nfunction manageResourceTimingBufferFull() {\n if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n resourceTimingBufferFullListener = addEventListener(performance, 'resourcetimingbufferfull', () => {\n performance.clearResourceTimings()\n })\n }\n}\n\nexport function resetManageResourceTimingBufferFull() {\n if (resourceTimingBufferFullListener) {\n resourceTimingBufferFullListener.stop()\n resourceTimingBufferFullListener = undefined\n }\n}\n\nfunction supportPerformanceObject() {\n return window.performance !== undefined && 'getEntries' in performance\n}\n\nexport function supportPerformanceTimingEvent(entryType: RumPerformanceEntryType) {\n return PerformanceObserver.supportedEntryTypes.includes(entryType)\n}\n\nfunction filterRumPerformanceEntries<T extends RumPerformanceEntryType>(entries: Array<EntryTypeToReturnType[T]>) {\n return entries.filter((entry) => !isForbiddenResource(entry))\n}\n\nfunction isForbiddenResource(entry: RumPerformanceEntry) {\n return (\n entry.entryType === RumPerformanceEntryType.RESOURCE &&\n (!isAllowedRequestUrl(entry.name) || !hasValidResourceEntryDuration(entry))\n )\n}\n"],"mappings":";;;;AAoBA,IAAY,0BAAL,yBAAA,yBAAA;CACL,wBAAA,WAAA;CACA,wBAAA,iBAAA;CACA,wBAAA,8BAAA;CACA,wBAAA,kBAAA;CACA,wBAAA,eAAA;CACA,wBAAA,0BAAA;CACA,wBAAA,gBAAA;CACA,wBAAA,WAAA;CACA,wBAAA,cAAA;CACA,wBAAA,sBAAA;;AACF,EAAA,CAAA,CAAA;AA0KA,SAAgB,4BAA+D,SAI5E;CACD,OAAO,IAAI,YAA6C,eAAe;EACrE,MAAM,4BAA4B,YAAkC;GAClE,MAAM,wBAAwB,4BAA4B,OAA0C;GACpG,IAAI,sBAAsB,SAAS,GACjC,WAAW,OAAO,qBAAqB;EAE3C;EAEA,IAAI;EACJ,IAAI,yBAAyB;EAC7B,MAAM,WAAW,IAAI,oBACnB,SAAS,YAAY;GAGnB,IAAI,wBACF,YAAY,iBAAiB,yBAAyB,QAAQ,WAAW,CAAC,CAAC;QAE3E,yBAAyB,QAAQ,WAAW,CAAC;EAEjD,CAAC,CACH;EACA,SAAS,QAAQ,OAAO;EACxB,yBAAyB;EAEzB,+BAA+B;EAE/B,aAAa;GACX,SAAS,WAAW;GACpB,aAAa,SAAS;EACxB;CACF,CAAC;AACH;AAEA,IAAI;AACJ,SAAS,iCAAiC;CACxC,IAAI,CAAC,oCAAoC,yBAAyB,KAAK,sBAAsB,aAE3F,mCAAmC,iBAAiB,aAAa,kCAAkC;EACjG,YAAY,qBAAqB;CACnC,CAAC;AAEL;AASA,SAAS,2BAA2B;CAClC,OAAO,OAAO,gBAAgB,KAAA,KAAa,gBAAgB;AAC7D;AAEA,SAAgB,8BAA8B,WAAoC;CAChF,OAAO,oBAAoB,oBAAoB,SAAS,SAAS;AACnE;AAEA,SAAS,4BAA+D,SAA0C;CAChH,OAAO,QAAQ,QAAQ,UAAU,CAAC,oBAAoB,KAAK,CAAC;AAC9D;AAEA,SAAS,oBAAoB,OAA4B;CACvD,OACE,MAAM,cAAA,eACL,CAAC,oBAAoB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK;AAE7E"}
@@ -0,0 +1,64 @@
1
+ import { supportPerformanceTimingEvent } from "./performanceObservable.mjs";
2
+ import { relativeNow, toRelativeTime } from "@kubesense/kubesense-js-core/time";
3
+ import { findLast, isNumber } from "@kubesense/kubesense-browser-core";
4
+ //#region src/browser/performanceUtils.ts
5
+ function isValidNavigationEntry(entry) {
6
+ return !(entry.loadEventEnd > 0 && entry.domComplete <= 0);
7
+ }
8
+ function getNavigationEntry() {
9
+ if (supportPerformanceTimingEvent("navigation")) {
10
+ const navigationEntry = performance.getEntriesByType("navigation")[0];
11
+ if (navigationEntry && isValidNavigationEntry(navigationEntry)) return navigationEntry;
12
+ }
13
+ const timings = computeTimingsFromDeprecatedPerformanceTiming();
14
+ const entry = {
15
+ entryType: "navigation",
16
+ initiatorType: "navigation",
17
+ name: window.location.href,
18
+ startTime: 0,
19
+ duration: timings.loadEventEnd,
20
+ decodedBodySize: 0,
21
+ encodedBodySize: 0,
22
+ transferSize: 0,
23
+ workerStart: 0,
24
+ toJSON: () => ({
25
+ ...entry,
26
+ toJSON: void 0
27
+ }),
28
+ ...timings
29
+ };
30
+ return entry;
31
+ }
32
+ function computeTimingsFromDeprecatedPerformanceTiming() {
33
+ const result = {};
34
+ const timing = performance.timing;
35
+ for (const key in timing) if (isNumber(timing[key])) {
36
+ const numberKey = key;
37
+ const timingElement = timing[numberKey];
38
+ result[numberKey] = timingElement === 0 ? 0 : toRelativeTime(timingElement);
39
+ }
40
+ return result;
41
+ }
42
+ function sanitizeFirstByte(entry) {
43
+ return entry.responseStart > 0 && entry.responseStart <= relativeNow() ? entry.responseStart : void 0;
44
+ }
45
+ function getResourceEntries() {
46
+ if (supportPerformanceTimingEvent("resource")) return performance.getEntriesByType("resource");
47
+ }
48
+ /**
49
+ * Find the most relevant resource entry for an LCP element.
50
+ *
51
+ * Resource entries persist for the entire page lifetime and can include multiple requests
52
+ * for the same URL (preloads, cache-busting reloads, SPA route changes, etc.).
53
+ * This function returns the most recent matching entry that started before the LCP time,
54
+ * which is most likely the one that triggered the LCP paint.
55
+ */
56
+ function findLcpResourceEntry(resourceUrl, lcpStartTime) {
57
+ const entries = getResourceEntries();
58
+ if (!entries) return;
59
+ return findLast(entries, (entry) => entry.name === resourceUrl && entry.startTime <= lcpStartTime);
60
+ }
61
+ //#endregion
62
+ export { computeTimingsFromDeprecatedPerformanceTiming, findLcpResourceEntry, getNavigationEntry, getResourceEntries, sanitizeFirstByte };
63
+
64
+ //# sourceMappingURL=performanceUtils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceUtils.mjs","names":[],"sources":["../../src/browser/performanceUtils.ts"],"sourcesContent":["import type { RelativeTime, TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport { toRelativeTime, relativeNow } from '@kubesense/kubesense-js-core/time'\nimport { findLast, isNumber } from '@kubesense/kubesense-browser-core'\nimport type { RelevantNavigationTiming } from '../domain/view/viewMetrics/trackNavigationTimings'\nimport type { RumPerformanceNavigationTiming } from './performanceObservable'\nimport { RumPerformanceEntryType, supportPerformanceTimingEvent } from './performanceObservable'\n\nfunction isValidNavigationEntry(entry: Pick<RumPerformanceNavigationTiming, 'loadEventEnd' | 'domComplete'>) {\n // WebKit 26.4 reports loadEventEnd/responseStart but leaves DOM timing fields at 0.\n // performance.timing still has the correct values.\n return !(entry.loadEventEnd > 0 && entry.domComplete <= 0)\n}\n\nexport function getNavigationEntry(): RumPerformanceNavigationTiming {\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n const navigationEntry = performance.getEntriesByType(\n RumPerformanceEntryType.NAVIGATION\n )[0] as unknown as RumPerformanceNavigationTiming\n if (navigationEntry && isValidNavigationEntry(navigationEntry)) {\n return navigationEntry\n }\n }\n\n const timings = computeTimingsFromDeprecatedPerformanceTiming()\n const entry: RumPerformanceNavigationTiming = {\n entryType: RumPerformanceEntryType.NAVIGATION as const,\n initiatorType: 'navigation' as const,\n name: window.location.href,\n startTime: 0 as RelativeTime,\n duration: timings.loadEventEnd,\n decodedBodySize: 0,\n encodedBodySize: 0,\n transferSize: 0,\n workerStart: 0 as RelativeTime,\n toJSON: () => ({ ...entry, toJSON: undefined }),\n ...timings,\n }\n\n return entry\n}\n\nexport type TimingsFromDeprecatedPerformanceTiming = {\n -readonly [key in keyof Omit<PerformanceTiming, 'toJSON'>]: RelativeTime\n}\n\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n const result: Partial<TimingsFromDeprecatedPerformanceTiming> = {}\n const timing = performance.timing\n\n for (const key in timing) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNumber(timing[key as keyof PerformanceTiming])) {\n const numberKey = key as keyof TimingsFromDeprecatedPerformanceTiming\n const timingElement = timing[numberKey] as TimeStamp\n result[numberKey] = timingElement === 0 ? (0 as RelativeTime) : toRelativeTime(timingElement)\n }\n }\n return result as TimingsFromDeprecatedPerformanceTiming\n}\n\nexport function sanitizeFirstByte(entry: RelevantNavigationTiming) {\n // In some cases the value reported is negative, zero (meaning unavailable, e.g. cross-origin\n // without Timing-Allow-Origin), or larger than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n return entry.responseStart > 0 && entry.responseStart <= relativeNow() ? entry.responseStart : undefined\n}\n\nexport function getResourceEntries() {\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.RESOURCE)) {\n return performance.getEntriesByType(RumPerformanceEntryType.RESOURCE)\n }\n\n return undefined\n}\n\n/**\n * Find the most relevant resource entry for an LCP element.\n *\n * Resource entries persist for the entire page lifetime and can include multiple requests\n * for the same URL (preloads, cache-busting reloads, SPA route changes, etc.).\n * This function returns the most recent matching entry that started before the LCP time,\n * which is most likely the one that triggered the LCP paint.\n */\nexport function findLcpResourceEntry(\n resourceUrl: string,\n lcpStartTime: RelativeTime\n): PerformanceResourceTiming | undefined {\n const entries = getResourceEntries()\n if (!entries) {\n return undefined\n }\n\n return findLast(\n entries,\n (entry): entry is PerformanceResourceTiming => entry.name === resourceUrl && entry.startTime <= lcpStartTime\n )\n}\n"],"mappings":";;;;AAOA,SAAS,uBAAuB,OAA6E;CAG3G,OAAO,EAAE,MAAM,eAAe,KAAK,MAAM,eAAe;AAC1D;AAEA,SAAgB,qBAAqD;CACnE,IAAI,8BAAA,YAAgE,GAAG;EACrE,MAAM,kBAAkB,YAAY,iBAAA,YAEpC,CAAC,CAAC;EACF,IAAI,mBAAmB,uBAAuB,eAAe,GAC3D,OAAO;CAEX;CAEA,MAAM,UAAU,8CAA8C;CAC9D,MAAM,QAAwC;EAC5C,WAAA;EACA,eAAe;EACf,MAAM,OAAO,SAAS;EACtB,WAAW;EACX,UAAU,QAAQ;EAClB,iBAAiB;EACjB,iBAAiB;EACjB,cAAc;EACd,aAAa;EACb,eAAe;GAAE,GAAG;GAAO,QAAQ,KAAA;EAAU;EAC7C,GAAG;CACL;CAEA,OAAO;AACT;AAMA,SAAgB,gDAAgD;CAC9D,MAAM,SAA0D,CAAC;CACjE,MAAM,SAAS,YAAY;CAE3B,KAAK,MAAM,OAAO,QAEhB,IAAI,SAAS,OAAO,IAA+B,GAAG;EACpD,MAAM,YAAY;EAClB,MAAM,gBAAgB,OAAO;EAC7B,OAAO,aAAa,kBAAkB,IAAK,IAAqB,eAAe,aAAa;CAC9F;CAEF,OAAO;AACT;AAEA,SAAgB,kBAAkB,OAAiC;CAKjE,OAAO,MAAM,gBAAgB,KAAK,MAAM,iBAAiB,YAAY,IAAI,MAAM,gBAAgB,KAAA;AACjG;AAEA,SAAgB,qBAAqB;CACnC,IAAI,8BAAA,UAA8D,GAChE,OAAO,YAAY,iBAAA,UAAiD;AAIxE;;;;;;;;;AAUA,SAAgB,qBACd,aACA,cACuC;CACvC,MAAM,UAAU,mBAAmB;CACnC,IAAI,CAAC,SACH;CAGF,OAAO,SACL,UACC,UAA8C,MAAM,SAAS,eAAe,MAAM,aAAa,YAClG;AACF"}
@@ -0,0 +1,21 @@
1
+ //#region src/browser/scroll.ts
2
+ function getScrollX() {
3
+ let scrollX;
4
+ const visual = window.visualViewport;
5
+ if (visual) scrollX = visual.pageLeft - visual.offsetLeft;
6
+ else if (window.scrollX !== void 0) scrollX = window.scrollX;
7
+ else scrollX = window.pageXOffset || 0;
8
+ return Math.round(scrollX);
9
+ }
10
+ function getScrollY() {
11
+ let scrollY;
12
+ const visual = window.visualViewport;
13
+ if (visual) scrollY = visual.pageTop - visual.offsetTop;
14
+ else if (window.scrollY !== void 0) scrollY = window.scrollY;
15
+ else scrollY = window.pageYOffset || 0;
16
+ return Math.round(scrollY);
17
+ }
18
+ //#endregion
19
+ export { getScrollX, getScrollY };
20
+
21
+ //# sourceMappingURL=scroll.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.mjs","names":[],"sources":["../../src/browser/scroll.ts"],"sourcesContent":["export function getScrollX() {\n let scrollX\n const visual = window.visualViewport\n if (visual) {\n scrollX = visual.pageLeft - visual.offsetLeft\n } else if (window.scrollX !== undefined) {\n scrollX = window.scrollX\n } else {\n scrollX = window.pageXOffset || 0\n }\n return Math.round(scrollX)\n}\n\nexport function getScrollY() {\n let scrollY\n const visual = window.visualViewport\n if (visual) {\n scrollY = visual.pageTop - visual.offsetTop\n } else if (window.scrollY !== undefined) {\n scrollY = window.scrollY\n } else {\n scrollY = window.pageYOffset || 0\n }\n return Math.round(scrollY)\n}\n"],"mappings":";AAAA,SAAgB,aAAa;CAC3B,IAAI;CACJ,MAAM,SAAS,OAAO;CACtB,IAAI,QACF,UAAU,OAAO,WAAW,OAAO;MAC9B,IAAI,OAAO,YAAY,KAAA,GAC5B,UAAU,OAAO;MAEjB,UAAU,OAAO,eAAe;CAElC,OAAO,KAAK,MAAM,OAAO;AAC3B;AAEA,SAAgB,aAAa;CAC3B,IAAI;CACJ,MAAM,SAAS,OAAO;CACtB,IAAI,QACF,UAAU,OAAO,UAAU,OAAO;MAC7B,IAAI,OAAO,YAAY,KAAA,GAC5B,UAAU,OAAO;MAEjB,UAAU,OAAO,eAAe;CAElC,OAAO,KAAK,MAAM,OAAO;AAC3B"}
@@ -0,0 +1,33 @@
1
+ import { DOM_EVENT, Observable, addEventListener, throttle } from "@kubesense/kubesense-browser-core";
2
+ //#region src/browser/viewportObservable.ts
3
+ let viewportObservable;
4
+ function initViewportObservable() {
5
+ if (!viewportObservable) viewportObservable = createViewportObservable();
6
+ return viewportObservable;
7
+ }
8
+ function createViewportObservable() {
9
+ return new Observable((observable) => {
10
+ const { throttled: updateDimension } = throttle(() => {
11
+ observable.notify(getViewportDimension());
12
+ }, 200);
13
+ return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, {
14
+ capture: true,
15
+ passive: true
16
+ }).stop;
17
+ });
18
+ }
19
+ function getViewportDimension() {
20
+ const visual = window.visualViewport;
21
+ if (visual) return {
22
+ width: Number(visual.width * visual.scale),
23
+ height: Number(visual.height * visual.scale)
24
+ };
25
+ return {
26
+ width: Number(window.innerWidth || 0),
27
+ height: Number(window.innerHeight || 0)
28
+ };
29
+ }
30
+ //#endregion
31
+ export { createViewportObservable, getViewportDimension, initViewportObservable };
32
+
33
+ //# sourceMappingURL=viewportObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewportObservable.mjs","names":[],"sources":["../../src/browser/viewportObservable.ts"],"sourcesContent":["import { Observable, throttle, addEventListener, DOM_EVENT } from '@kubesense/kubesense-browser-core'\n\nexport interface ViewportDimension {\n height: number\n width: number\n [k: string]: unknown\n}\n\nlet viewportObservable: Observable<ViewportDimension> | undefined\n\nexport function initViewportObservable() {\n if (!viewportObservable) {\n viewportObservable = createViewportObservable()\n }\n return viewportObservable\n}\n\nexport function createViewportObservable() {\n return new Observable<ViewportDimension>((observable) => {\n const { throttled: updateDimension } = throttle(() => {\n observable.notify(getViewportDimension())\n }, 200)\n\n return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, { capture: true, passive: true }).stop\n })\n}\n\n// excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport\nexport function getViewportDimension(): ViewportDimension {\n const visual = window.visualViewport\n if (visual) {\n return {\n width: Number(visual.width * visual.scale),\n height: Number(visual.height * visual.scale),\n }\n }\n\n return {\n width: Number(window.innerWidth || 0),\n height: Number(window.innerHeight || 0),\n }\n}\n"],"mappings":";;AAQA,IAAI;AAEJ,SAAgB,yBAAyB;CACvC,IAAI,CAAC,oBACH,qBAAqB,yBAAyB;CAEhD,OAAO;AACT;AAEA,SAAgB,2BAA2B;CACzC,OAAO,IAAI,YAA+B,eAAe;EACvD,MAAM,EAAE,WAAW,oBAAoB,eAAe;GACpD,WAAW,OAAO,qBAAqB,CAAC;EAC1C,GAAG,GAAG;EAEN,OAAO,iBAAiB,QAAQ,UAAU,QAAQ,iBAAiB;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC,CAAC,CAAC;CACvG,CAAC;AACH;AAGA,SAAgB,uBAA0C;CACxD,MAAM,SAAS,OAAO;CACtB,IAAI,QACF,OAAO;EACL,OAAO,OAAO,OAAO,QAAQ,OAAO,KAAK;EACzC,QAAQ,OAAO,OAAO,SAAS,OAAO,KAAK;CAC7C;CAGF,OAAO;EACL,OAAO,OAAO,OAAO,cAAc,CAAC;EACpC,QAAQ,OAAO,OAAO,eAAe,CAAC;CACxC;AACF"}
@@ -0,0 +1,14 @@
1
+ import { Observable, instrumentMethod } from "@kubesense/kubesense-browser-core";
2
+ //#region src/browser/windowOpenObservable.ts
3
+ function createWindowOpenObservable() {
4
+ const observable = new Observable();
5
+ const { stop } = instrumentMethod(window, "open", () => observable.notify());
6
+ return {
7
+ observable,
8
+ stop
9
+ };
10
+ }
11
+ //#endregion
12
+ export { createWindowOpenObservable };
13
+
14
+ //# sourceMappingURL=windowOpenObservable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windowOpenObservable.mjs","names":[],"sources":["../../src/browser/windowOpenObservable.ts"],"sourcesContent":["import { instrumentMethod, Observable } from '@kubesense/kubesense-browser-core'\n\nexport function createWindowOpenObservable() {\n const observable = new Observable<void>()\n const { stop } = instrumentMethod(window, 'open', () => observable.notify())\n return { observable, stop }\n}\n"],"mappings":";;AAEA,SAAgB,6BAA6B;CAC3C,MAAM,aAAa,IAAI,WAAiB;CACxC,MAAM,EAAE,SAAS,iBAAiB,QAAQ,cAAc,WAAW,OAAO,CAAC;CAC3E,OAAO;EAAE;EAAY;CAAK;AAC5B"}
@@ -0,0 +1,89 @@
1
+ import { RumEventType } from "../../rawRumEvent.types.mjs";
2
+ import "../lifeCycle.mjs";
3
+ import { discardNegativeDuration } from "../discardNegativeDuration.mjs";
4
+ import { trackClickActions } from "./trackClickActions.mjs";
5
+ import { trackManualActions } from "./trackManualActions.mjs";
6
+ import { addDuration, toServerDuration } from "@kubesense/kubesense-js-core/time";
7
+ import { noop } from "@kubesense/kubesense-browser-core";
8
+ import { SKIPPED } from "@kubesense/kubesense-js-core/assembly";
9
+ function startActionCollection(lifeCycle, hooks, domMutationObservable, windowOpenObservable, configuration) {
10
+ const { unsubscribe: unsubscribeAutoAction } = lifeCycle.subscribe(0, (action) => {
11
+ lifeCycle.notify(13, processAction(action));
12
+ });
13
+ const stopClickActions = noop;
14
+ let clickActions;
15
+ if (configuration.trackUserInteractions) clickActions = trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration);
16
+ const manualActions = trackManualActions(lifeCycle, (action) => {
17
+ lifeCycle.notify(13, processAction(action));
18
+ });
19
+ const actionContexts = { findActionId: (startTime) => {
20
+ const manualActionId = manualActions.findActionId(startTime);
21
+ const clickActionId = clickActions?.findActionId(startTime) ?? [];
22
+ return manualActionId.concat(clickActionId);
23
+ } };
24
+ hooks.assembleEventDefaults.register(({ startTime, eventType }) => {
25
+ if (eventType !== RumEventType.ERROR && eventType !== RumEventType.RESOURCE && eventType !== RumEventType.LONG_TASK) return SKIPPED;
26
+ const correctedStartTime = eventType === RumEventType.LONG_TASK ? addDuration(startTime, 1) : startTime;
27
+ const actionId = actionContexts.findActionId(correctedStartTime);
28
+ if (!actionId.length) return SKIPPED;
29
+ return {
30
+ type: eventType,
31
+ action: { id: actionId }
32
+ };
33
+ });
34
+ hooks.assembleTelemetry.register(({ startTime }) => ({ action: { id: actionContexts.findActionId(startTime) } }));
35
+ return {
36
+ addAction: manualActions.addAction,
37
+ startAction: manualActions.startAction,
38
+ stopAction: manualActions.stopAction,
39
+ actionContexts,
40
+ stop: () => {
41
+ unsubscribeAutoAction();
42
+ stopClickActions();
43
+ manualActions.stop();
44
+ clickActions?.stop();
45
+ }
46
+ };
47
+ }
48
+ function processAction(action) {
49
+ const isAuto = isAutoAction(action);
50
+ const loadingTime = discardNegativeDuration(toServerDuration(action.duration));
51
+ return {
52
+ rawRumEvent: {
53
+ type: RumEventType.ACTION,
54
+ date: action.startClocks.timeStamp,
55
+ action: {
56
+ id: action.id,
57
+ target: { name: action.name },
58
+ type: action.type,
59
+ ...loadingTime !== void 0 && { loading_time: loadingTime },
60
+ ...action.counts && {
61
+ error: { count: action.counts.errorCount },
62
+ long_task: { count: action.counts.longTaskCount },
63
+ resource: { count: action.counts.resourceCount }
64
+ },
65
+ frustration: { type: action.frustrationTypes }
66
+ },
67
+ ...isAuto ? { _kubesense: { action: {
68
+ target: {
69
+ selector: action.target?.selector || void 0,
70
+ width: action.target?.width || void 0,
71
+ height: action.target?.height || void 0,
72
+ composed_path_selector: action.target?.composedPathSelector
73
+ },
74
+ position: action.position,
75
+ name_source: action.nameSource
76
+ } } } : { context: action.context }
77
+ },
78
+ duration: action.duration,
79
+ startClocks: action.startClocks,
80
+ domainContext: isAuto ? { events: action.events } : { handlingStack: action.handlingStack }
81
+ };
82
+ }
83
+ function isAutoAction(action) {
84
+ return "events" in action;
85
+ }
86
+ //#endregion
87
+ export { startActionCollection };
88
+
89
+ //# sourceMappingURL=actionCollection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionCollection.mjs","names":[],"sources":["../../../src/domain/action/actionCollection.ts"],"sourcesContent":["import type { RelativeTime, Duration } from '@kubesense/kubesense-js-core/time'\nimport type { Observable } from '@kubesense/kubesense-browser-core'\nimport { toServerDuration, addDuration } from '@kubesense/kubesense-js-core/time'\nimport { noop } from '@kubesense/kubesense-browser-core'\nimport { SKIPPED } from '@kubesense/kubesense-js-core/assembly'\nimport { discardNegativeDuration } from '../discardNegativeDuration'\nimport type { RawRumActionEvent } from '../../rawRumEvent.types'\nimport { RumEventType } from '../../rawRumEvent.types'\nimport type { LifeCycle, RawRumEventCollectedData } from '../lifeCycle'\nimport { LifeCycleEventType } from '../lifeCycle'\nimport type { RumConfiguration } from '../configuration'\nimport type { DefaultRumEventAttributes, DefaultTelemetryEventAttributes, Hooks } from '../hooks'\nimport type { RumMutationRecord } from '../../browser/domMutationObservable'\nimport { trackClickActions } from './trackClickActions'\nimport type { ClickAction } from './trackClickActions'\nimport { trackManualActions } from './trackManualActions'\nimport type { ManualAction } from './trackManualActions'\n\nexport type AutoAction = ClickAction\n\nexport interface ActionContexts {\n findActionId: (startTime?: RelativeTime) => string[]\n}\n\nexport const LONG_TASK_START_TIME_CORRECTION = 1 as Duration\n\nexport function startActionCollection(\n lifeCycle: LifeCycle,\n hooks: Hooks,\n domMutationObservable: Observable<RumMutationRecord[]>,\n windowOpenObservable: Observable<void>,\n configuration: RumConfiguration\n) {\n const { unsubscribe: unsubscribeAutoAction } = lifeCycle.subscribe(\n LifeCycleEventType.AUTO_ACTION_COMPLETED,\n (action) => {\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action))\n }\n )\n\n const stopClickActions: () => void = noop\n let clickActions: ReturnType<typeof trackClickActions> | undefined\n\n if (configuration.trackUserInteractions) {\n clickActions = trackClickActions(lifeCycle, domMutationObservable, windowOpenObservable, configuration)\n }\n\n const manualActions = trackManualActions(lifeCycle, (action) => {\n lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action))\n })\n\n const actionContexts: ActionContexts = {\n findActionId: (startTime?: RelativeTime) => {\n const manualActionId = manualActions.findActionId(startTime)\n const clickActionId = clickActions?.findActionId(startTime) ?? []\n return manualActionId.concat(clickActionId)\n },\n }\n\n hooks.assembleEventDefaults.register(({ startTime, eventType }): DefaultRumEventAttributes | SKIPPED => {\n if (\n eventType !== RumEventType.ERROR &&\n eventType !== RumEventType.RESOURCE &&\n eventType !== RumEventType.LONG_TASK\n ) {\n return SKIPPED\n }\n\n // Long tasks triggered by interaction handlers (pointerup, click, etc.)\n // can have a start time slightly before the interaction timestamp (long_task.start_time < action.start_time).\n // This likely happens because the interaction timestamp is recorded during the event dispatch,\n // not at the beginning of the rendering frame. I observed a difference of < 1 ms in my tests.\n // Fixes flakiness in test: \"associates long tasks to interaction actions\"\n const correctedStartTime =\n eventType === RumEventType.LONG_TASK ? addDuration(startTime, LONG_TASK_START_TIME_CORRECTION) : startTime\n\n const actionId = actionContexts.findActionId(correctedStartTime)\n\n if (!actionId.length) {\n return SKIPPED\n }\n\n return {\n type: eventType,\n action: { id: actionId },\n }\n })\n\n hooks.assembleTelemetry.register(({ startTime }): DefaultTelemetryEventAttributes => ({\n // todo: fix telemetry event type\n action: { id: actionContexts.findActionId(startTime) as unknown as string },\n }))\n\n return {\n addAction: manualActions.addAction,\n startAction: manualActions.startAction,\n stopAction: manualActions.stopAction,\n actionContexts,\n stop: () => {\n unsubscribeAutoAction()\n stopClickActions()\n manualActions.stop()\n clickActions?.stop()\n },\n }\n}\n\nfunction processAction(action: AutoAction | ManualAction): RawRumEventCollectedData<RawRumActionEvent> {\n const isAuto = isAutoAction(action)\n const loadingTime = discardNegativeDuration(toServerDuration(action.duration))\n\n return {\n rawRumEvent: {\n type: RumEventType.ACTION,\n date: action.startClocks.timeStamp,\n action: {\n id: action.id,\n target: { name: action.name },\n type: action.type,\n ...(loadingTime !== undefined && { loading_time: loadingTime }),\n ...(action.counts && {\n error: { count: action.counts.errorCount },\n long_task: { count: action.counts.longTaskCount },\n resource: { count: action.counts.resourceCount },\n }),\n frustration: { type: action.frustrationTypes },\n },\n ...(isAuto\n ? {\n _kubesense: {\n action: {\n target: {\n selector: action.target?.selector || undefined,\n width: action.target?.width || undefined,\n height: action.target?.height || undefined,\n composed_path_selector: action.target?.composedPathSelector,\n },\n position: action.position,\n name_source: action.nameSource,\n },\n },\n }\n : { context: action.context }),\n },\n duration: action.duration,\n startClocks: action.startClocks,\n domainContext: isAuto ? { events: action.events } : { handlingStack: action.handlingStack },\n }\n}\n\nfunction isAutoAction(action: AutoAction | ManualAction): action is AutoAction {\n return 'events' in action\n}\n"],"mappings":";;;;;;;;AA0BA,SAAgB,sBACd,WACA,OACA,uBACA,sBACA,eACA;CACA,MAAM,EAAE,aAAa,0BAA0B,UAAU,UAAA,IAEtD,WAAW;EACV,UAAU,OAAA,IAAmD,cAAc,MAAM,CAAC;CACpF,CACF;CAEA,MAAM,mBAA+B;CACrC,IAAI;CAEJ,IAAI,cAAc,uBAChB,eAAe,kBAAkB,WAAW,uBAAuB,sBAAsB,aAAa;CAGxG,MAAM,gBAAgB,mBAAmB,YAAY,WAAW;EAC9D,UAAU,OAAA,IAAmD,cAAc,MAAM,CAAC;CACpF,CAAC;CAED,MAAM,iBAAiC,EACrC,eAAe,cAA6B;EAC1C,MAAM,iBAAiB,cAAc,aAAa,SAAS;EAC3D,MAAM,gBAAgB,cAAc,aAAa,SAAS,KAAK,CAAC;EAChE,OAAO,eAAe,OAAO,aAAa;CAC5C,EACF;CAEA,MAAM,sBAAsB,UAAU,EAAE,WAAW,gBAAqD;EACtG,IACE,cAAc,aAAa,SAC3B,cAAc,aAAa,YAC3B,cAAc,aAAa,WAE3B,OAAO;EAQT,MAAM,qBACJ,cAAc,aAAa,YAAY,YAAY,WAAA,CAA0C,IAAI;EAEnG,MAAM,WAAW,eAAe,aAAa,kBAAkB;EAE/D,IAAI,CAAC,SAAS,QACZ,OAAO;EAGT,OAAO;GACL,MAAM;GACN,QAAQ,EAAE,IAAI,SAAS;EACzB;CACF,CAAC;CAED,MAAM,kBAAkB,UAAU,EAAE,iBAAkD,EAEpF,QAAQ,EAAE,IAAI,eAAe,aAAa,SAAS,EAAuB,EAC5E,EAAE;CAEF,OAAO;EACL,WAAW,cAAc;EACzB,aAAa,cAAc;EAC3B,YAAY,cAAc;EAC1B;EACA,YAAY;GACV,sBAAsB;GACtB,iBAAiB;GACjB,cAAc,KAAK;GACnB,cAAc,KAAK;EACrB;CACF;AACF;AAEA,SAAS,cAAc,QAAgF;CACrG,MAAM,SAAS,aAAa,MAAM;CAClC,MAAM,cAAc,wBAAwB,iBAAiB,OAAO,QAAQ,CAAC;CAE7E,OAAO;EACL,aAAa;GACX,MAAM,aAAa;GACnB,MAAM,OAAO,YAAY;GACzB,QAAQ;IACN,IAAI,OAAO;IACX,QAAQ,EAAE,MAAM,OAAO,KAAK;IAC5B,MAAM,OAAO;IACb,GAAI,gBAAgB,KAAA,KAAa,EAAE,cAAc,YAAY;IAC7D,GAAI,OAAO,UAAU;KACnB,OAAO,EAAE,OAAO,OAAO,OAAO,WAAW;KACzC,WAAW,EAAE,OAAO,OAAO,OAAO,cAAc;KAChD,UAAU,EAAE,OAAO,OAAO,OAAO,cAAc;IACjD;IACA,aAAa,EAAE,MAAM,OAAO,iBAAiB;GAC/C;GACA,GAAI,SACA,EACE,YAAY,EACV,QAAQ;IACN,QAAQ;KACN,UAAU,OAAO,QAAQ,YAAY,KAAA;KACrC,OAAO,OAAO,QAAQ,SAAS,KAAA;KAC/B,QAAQ,OAAO,QAAQ,UAAU,KAAA;KACjC,wBAAwB,OAAO,QAAQ;IACzC;IACA,UAAU,OAAO;IACjB,aAAa,OAAO;GACtB,EACF,EACF,IACA,EAAE,SAAS,OAAO,QAAQ;EAChC;EACA,UAAU,OAAO;EACjB,aAAa,OAAO;EACpB,eAAe,SAAS,EAAE,QAAQ,OAAO,OAAO,IAAI,EAAE,eAAe,OAAO,cAAc;CAC5F;AACF;AAEA,SAAS,aAAa,QAAyD;CAC7E,OAAO,YAAY;AACrB"}
@@ -0,0 +1,11 @@
1
+ //#region src/domain/action/actionNameConstants.ts
2
+ /**
3
+ * Get the action name from the attribute 'data-kubesense-action-name' on the element or any of its parent.
4
+ * It can also be retrieved from a user defined attribute.
5
+ */
6
+ const DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE = "data-kubesense-action-name";
7
+ const ACTION_NAME_PLACEHOLDER = "Masked Element";
8
+ //#endregion
9
+ export { ACTION_NAME_PLACEHOLDER, DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE };
10
+
11
+ //# sourceMappingURL=actionNameConstants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionNameConstants.mjs","names":[],"sources":["../../../src/domain/action/actionNameConstants.ts"],"sourcesContent":["/**\n * Get the action name from the attribute 'data-kubesense-action-name' on the element or any of its parent.\n * It can also be retrieved from a user defined attribute.\n */\nexport const DEFAULT_PROGRAMMATIC_ACTION_NAME_ATTRIBUTE = 'data-kubesense-action-name'\nexport const ACTION_NAME_PLACEHOLDER = 'Masked Element'\nexport const ACTION_NAME_MASK = 'xxx'\n\nexport const enum ActionNameSource {\n CUSTOM_ATTRIBUTE = 'custom_attribute',\n MASK_PLACEHOLDER = 'mask_placeholder',\n TEXT_CONTENT = 'text_content',\n STANDARD_ATTRIBUTE = 'standard_attribute',\n BLANK = 'blank',\n}\n\nexport interface ActionName {\n name: string\n nameSource: ActionNameSource\n}\n"],"mappings":";;;;;AAIA,MAAa,6CAA6C;AAC1D,MAAa,0BAA0B"}