@cloudcare/browser-rum-slim 3.3.3

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 (309) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/bundle/dataflux-rum-slim.js +1 -0
  4. package/cjs/boot/buildEnv.js +11 -0
  5. package/cjs/boot/buildEnv.js.map +1 -0
  6. package/cjs/boot/perStartRum.js +227 -0
  7. package/cjs/boot/perStartRum.js.map +1 -0
  8. package/cjs/boot/rum.js +180 -0
  9. package/cjs/boot/rum.js.map +1 -0
  10. package/cjs/boot/rum.slim.entry.js +13 -0
  11. package/cjs/boot/rum.slim.entry.js.map +1 -0
  12. package/cjs/boot/rumEntryFactory.js +15 -0
  13. package/cjs/boot/rumEntryFactory.js.map +1 -0
  14. package/cjs/boot/rumPublicApi.js +285 -0
  15. package/cjs/boot/rumPublicApi.js.map +1 -0
  16. package/cjs/boot/rumRecorderApiStub.js +19 -0
  17. package/cjs/boot/rumRecorderApiStub.js.map +1 -0
  18. package/cjs/boot/rumSlimConfiguration.js +16 -0
  19. package/cjs/boot/rumSlimConfiguration.js.map +1 -0
  20. package/cjs/constants.js +41 -0
  21. package/cjs/constants.js.map +1 -0
  22. package/cjs/domain/assembly.js +172 -0
  23. package/cjs/domain/assembly.js.map +1 -0
  24. package/cjs/domain/configuration.js +272 -0
  25. package/cjs/domain/configuration.js.map +1 -0
  26. package/cjs/domain/contexts/commonContext.js +14 -0
  27. package/cjs/domain/contexts/commonContext.js.map +1 -0
  28. package/cjs/domain/contexts/displayContext.js +22 -0
  29. package/cjs/domain/contexts/displayContext.js.map +1 -0
  30. package/cjs/domain/contexts/foregroundContexts.js +111 -0
  31. package/cjs/domain/contexts/foregroundContexts.js.map +1 -0
  32. package/cjs/domain/contexts/internalContext.js +47 -0
  33. package/cjs/domain/contexts/internalContext.js.map +1 -0
  34. package/cjs/domain/contexts/pageStateHistory.js +111 -0
  35. package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
  36. package/cjs/domain/contexts/urlContexts.js +73 -0
  37. package/cjs/domain/contexts/urlContexts.js.map +1 -0
  38. package/cjs/domain/contexts/viewContexts.js +51 -0
  39. package/cjs/domain/contexts/viewContexts.js.map +1 -0
  40. package/cjs/domain/domMutationObservable.js +69 -0
  41. package/cjs/domain/domMutationObservable.js.map +1 -0
  42. package/cjs/domain/encoderStreamId.js +11 -0
  43. package/cjs/domain/encoderStreamId.js.map +1 -0
  44. package/cjs/domain/firstInputPolyfill.js +83 -0
  45. package/cjs/domain/firstInputPolyfill.js.map +1 -0
  46. package/cjs/domain/initViewportObservable.js +44 -0
  47. package/cjs/domain/initViewportObservable.js.map +1 -0
  48. package/cjs/domain/locationChangeObservable.js +57 -0
  49. package/cjs/domain/locationChangeObservable.js.map +1 -0
  50. package/cjs/domain/performanceObservable.js +124 -0
  51. package/cjs/domain/performanceObservable.js.map +1 -0
  52. package/cjs/domain/performanceUtils.js +47 -0
  53. package/cjs/domain/performanceUtils.js.map +1 -0
  54. package/cjs/domain/requestCollection.js +127 -0
  55. package/cjs/domain/requestCollection.js.map +1 -0
  56. package/cjs/domain/rumEventsCollection/actions/actionCollection.js +89 -0
  57. package/cjs/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
  58. package/cjs/domain/rumEventsCollection/actions/clickChain.js +69 -0
  59. package/cjs/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
  60. package/cjs/domain/rumEventsCollection/actions/computeFrustration.js +75 -0
  61. package/cjs/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
  62. package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js +232 -0
  63. package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
  64. package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js +220 -0
  65. package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
  66. package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js +28 -0
  67. package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
  68. package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js +73 -0
  69. package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
  70. package/cjs/domain/rumEventsCollection/actions/trackClickActions.js +253 -0
  71. package/cjs/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
  72. package/cjs/domain/rumEventsCollection/error/errorCollection.js +90 -0
  73. package/cjs/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
  74. package/cjs/domain/rumEventsCollection/error/trackConsoleError.js +18 -0
  75. package/cjs/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
  76. package/cjs/domain/rumEventsCollection/error/trackReportError.js +25 -0
  77. package/cjs/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
  78. package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +61 -0
  79. package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
  80. package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js +44 -0
  81. package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
  82. package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +74 -0
  83. package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
  84. package/cjs/domain/rumEventsCollection/resource/resourceCollection.js +239 -0
  85. package/cjs/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
  86. package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js +237 -0
  87. package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
  88. package/cjs/domain/rumEventsCollection/resource/resourceUtils.js +240 -0
  89. package/cjs/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
  90. package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +25 -0
  91. package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  92. package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js +54 -0
  93. package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
  94. package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js +48 -0
  95. package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
  96. package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +125 -0
  97. package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
  98. package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +27 -0
  99. package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
  100. package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js +55 -0
  101. package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
  102. package/cjs/domain/rumEventsCollection/view/trackFirstInput.js +47 -0
  103. package/cjs/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
  104. package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js +51 -0
  105. package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
  106. package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +162 -0
  107. package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
  108. package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +61 -0
  109. package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
  110. package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js +51 -0
  111. package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
  112. package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js +57 -0
  113. package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
  114. package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js +92 -0
  115. package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
  116. package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js +21 -0
  117. package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
  118. package/cjs/domain/rumEventsCollection/view/trackViews.js +269 -0
  119. package/cjs/domain/rumEventsCollection/view/trackViews.js.map +1 -0
  120. package/cjs/domain/rumEventsCollection/view/viewCollection.js +131 -0
  121. package/cjs/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
  122. package/cjs/domain/rumSessionManager.js +187 -0
  123. package/cjs/domain/rumSessionManager.js.map +1 -0
  124. package/cjs/domain/tracing/ddtraceTracer.js +46 -0
  125. package/cjs/domain/tracing/ddtraceTracer.js.map +1 -0
  126. package/cjs/domain/tracing/getDocumentTraceId.js +80 -0
  127. package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
  128. package/cjs/domain/tracing/jaegerTracer.js +48 -0
  129. package/cjs/domain/tracing/jaegerTracer.js.map +1 -0
  130. package/cjs/domain/tracing/sampler.js +69 -0
  131. package/cjs/domain/tracing/sampler.js.map +1 -0
  132. package/cjs/domain/tracing/skywalkingTracer.js +96 -0
  133. package/cjs/domain/tracing/skywalkingTracer.js.map +1 -0
  134. package/cjs/domain/tracing/traceIdentifier.js +66 -0
  135. package/cjs/domain/tracing/traceIdentifier.js.map +1 -0
  136. package/cjs/domain/tracing/tracer.js +133 -0
  137. package/cjs/domain/tracing/tracer.js.map +1 -0
  138. package/cjs/domain/tracing/w3cTraceParentTracer.js +74 -0
  139. package/cjs/domain/tracing/w3cTraceParentTracer.js.map +1 -0
  140. package/cjs/domain/tracing/zipkinMultiTracer.js +48 -0
  141. package/cjs/domain/tracing/zipkinMultiTracer.js.map +1 -0
  142. package/cjs/domain/tracing/zipkinSingleTracer.js +47 -0
  143. package/cjs/domain/tracing/zipkinSingleTracer.js.map +1 -0
  144. package/cjs/domain/trackEventCounts.js +55 -0
  145. package/cjs/domain/trackEventCounts.js.map +1 -0
  146. package/cjs/domain/usr/index.js +44 -0
  147. package/cjs/domain/usr/index.js.map +1 -0
  148. package/cjs/domain/waitPageActivityEnd.js +151 -0
  149. package/cjs/domain/waitPageActivityEnd.js.map +1 -0
  150. package/cjs/index.js +13 -0
  151. package/cjs/index.js.map +1 -0
  152. package/cjs/transport/startRumBatch.js +26 -0
  153. package/cjs/transport/startRumBatch.js.map +1 -0
  154. package/cjs/transport/startRumEventBridge.js +15 -0
  155. package/cjs/transport/startRumEventBridge.js.map +1 -0
  156. package/esm/boot/buildEnv.js +5 -0
  157. package/esm/boot/buildEnv.js.map +1 -0
  158. package/esm/boot/perStartRum.js +221 -0
  159. package/esm/boot/perStartRum.js.map +1 -0
  160. package/esm/boot/rum.js +173 -0
  161. package/esm/boot/rum.js.map +1 -0
  162. package/esm/boot/rum.slim.entry.js +7 -0
  163. package/esm/boot/rum.slim.entry.js.map +1 -0
  164. package/esm/boot/rumEntryFactory.js +9 -0
  165. package/esm/boot/rumEntryFactory.js.map +1 -0
  166. package/esm/boot/rumPublicApi.js +279 -0
  167. package/esm/boot/rumPublicApi.js.map +1 -0
  168. package/esm/boot/rumRecorderApiStub.js +13 -0
  169. package/esm/boot/rumRecorderApiStub.js.map +1 -0
  170. package/esm/boot/rumSlimConfiguration.js +10 -0
  171. package/esm/boot/rumSlimConfiguration.js.map +1 -0
  172. package/esm/constants.js +35 -0
  173. package/esm/constants.js.map +1 -0
  174. package/esm/domain/assembly.js +166 -0
  175. package/esm/domain/assembly.js.map +1 -0
  176. package/esm/domain/configuration.js +266 -0
  177. package/esm/domain/configuration.js.map +1 -0
  178. package/esm/domain/contexts/commonContext.js +8 -0
  179. package/esm/domain/contexts/commonContext.js.map +1 -0
  180. package/esm/domain/contexts/displayContext.js +16 -0
  181. package/esm/domain/contexts/displayContext.js.map +1 -0
  182. package/esm/domain/contexts/foregroundContexts.js +103 -0
  183. package/esm/domain/contexts/foregroundContexts.js.map +1 -0
  184. package/esm/domain/contexts/internalContext.js +41 -0
  185. package/esm/domain/contexts/internalContext.js.map +1 -0
  186. package/esm/domain/contexts/pageStateHistory.js +104 -0
  187. package/esm/domain/contexts/pageStateHistory.js.map +1 -0
  188. package/esm/domain/contexts/urlContexts.js +67 -0
  189. package/esm/domain/contexts/urlContexts.js.map +1 -0
  190. package/esm/domain/contexts/viewContexts.js +44 -0
  191. package/esm/domain/contexts/viewContexts.js.map +1 -0
  192. package/esm/domain/domMutationObservable.js +62 -0
  193. package/esm/domain/domMutationObservable.js.map +1 -0
  194. package/esm/domain/encoderStreamId.js +5 -0
  195. package/esm/domain/encoderStreamId.js.map +1 -0
  196. package/esm/domain/firstInputPolyfill.js +77 -0
  197. package/esm/domain/firstInputPolyfill.js.map +1 -0
  198. package/esm/domain/initViewportObservable.js +36 -0
  199. package/esm/domain/initViewportObservable.js.map +1 -0
  200. package/esm/domain/locationChangeObservable.js +51 -0
  201. package/esm/domain/locationChangeObservable.js.map +1 -0
  202. package/esm/domain/performanceObservable.js +116 -0
  203. package/esm/domain/performanceObservable.js.map +1 -0
  204. package/esm/domain/performanceUtils.js +40 -0
  205. package/esm/domain/performanceUtils.js.map +1 -0
  206. package/esm/domain/requestCollection.js +119 -0
  207. package/esm/domain/requestCollection.js.map +1 -0
  208. package/esm/domain/rumEventsCollection/actions/actionCollection.js +83 -0
  209. package/esm/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
  210. package/esm/domain/rumEventsCollection/actions/clickChain.js +62 -0
  211. package/esm/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
  212. package/esm/domain/rumEventsCollection/actions/computeFrustration.js +67 -0
  213. package/esm/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
  214. package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js +225 -0
  215. package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
  216. package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js +212 -0
  217. package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
  218. package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js +20 -0
  219. package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
  220. package/esm/domain/rumEventsCollection/actions/listenActionEvents.js +67 -0
  221. package/esm/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
  222. package/esm/domain/rumEventsCollection/actions/trackClickActions.js +244 -0
  223. package/esm/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
  224. package/esm/domain/rumEventsCollection/error/errorCollection.js +83 -0
  225. package/esm/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
  226. package/esm/domain/rumEventsCollection/error/trackConsoleError.js +12 -0
  227. package/esm/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
  228. package/esm/domain/rumEventsCollection/error/trackReportError.js +19 -0
  229. package/esm/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
  230. package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +55 -0
  231. package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
  232. package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js +38 -0
  233. package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
  234. package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +69 -0
  235. package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
  236. package/esm/domain/rumEventsCollection/resource/resourceCollection.js +233 -0
  237. package/esm/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
  238. package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js +231 -0
  239. package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
  240. package/esm/domain/rumEventsCollection/resource/resourceUtils.js +218 -0
  241. package/esm/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
  242. package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +19 -0
  243. package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
  244. package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js +47 -0
  245. package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
  246. package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js +42 -0
  247. package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
  248. package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +117 -0
  249. package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
  250. package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +20 -0
  251. package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
  252. package/esm/domain/rumEventsCollection/view/trackFirstHidden.js +49 -0
  253. package/esm/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
  254. package/esm/domain/rumEventsCollection/view/trackFirstInput.js +41 -0
  255. package/esm/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
  256. package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js +44 -0
  257. package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
  258. package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +153 -0
  259. package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
  260. package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +54 -0
  261. package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
  262. package/esm/domain/rumEventsCollection/view/trackLoadingTime.js +45 -0
  263. package/esm/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
  264. package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js +51 -0
  265. package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
  266. package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js +84 -0
  267. package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
  268. package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js +15 -0
  269. package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
  270. package/esm/domain/rumEventsCollection/view/trackViews.js +262 -0
  271. package/esm/domain/rumEventsCollection/view/trackViews.js.map +1 -0
  272. package/esm/domain/rumEventsCollection/view/viewCollection.js +125 -0
  273. package/esm/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
  274. package/esm/domain/rumSessionManager.js +179 -0
  275. package/esm/domain/rumSessionManager.js.map +1 -0
  276. package/esm/domain/tracing/ddtraceTracer.js +40 -0
  277. package/esm/domain/tracing/ddtraceTracer.js.map +1 -0
  278. package/esm/domain/tracing/getDocumentTraceId.js +69 -0
  279. package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
  280. package/esm/domain/tracing/jaegerTracer.js +42 -0
  281. package/esm/domain/tracing/jaegerTracer.js.map +1 -0
  282. package/esm/domain/tracing/sampler.js +61 -0
  283. package/esm/domain/tracing/sampler.js.map +1 -0
  284. package/esm/domain/tracing/skywalkingTracer.js +90 -0
  285. package/esm/domain/tracing/skywalkingTracer.js.map +1 -0
  286. package/esm/domain/tracing/traceIdentifier.js +57 -0
  287. package/esm/domain/tracing/traceIdentifier.js.map +1 -0
  288. package/esm/domain/tracing/tracer.js +124 -0
  289. package/esm/domain/tracing/tracer.js.map +1 -0
  290. package/esm/domain/tracing/w3cTraceParentTracer.js +69 -0
  291. package/esm/domain/tracing/w3cTraceParentTracer.js.map +1 -0
  292. package/esm/domain/tracing/zipkinMultiTracer.js +42 -0
  293. package/esm/domain/tracing/zipkinMultiTracer.js.map +1 -0
  294. package/esm/domain/tracing/zipkinSingleTracer.js +41 -0
  295. package/esm/domain/tracing/zipkinSingleTracer.js.map +1 -0
  296. package/esm/domain/trackEventCounts.js +49 -0
  297. package/esm/domain/trackEventCounts.js.map +1 -0
  298. package/esm/domain/usr/index.js +38 -0
  299. package/esm/domain/usr/index.js.map +1 -0
  300. package/esm/domain/waitPageActivityEnd.js +142 -0
  301. package/esm/domain/waitPageActivityEnd.js.map +1 -0
  302. package/esm/index.js +3 -0
  303. package/esm/index.js.map +1 -0
  304. package/esm/transport/startRumBatch.js +20 -0
  305. package/esm/transport/startRumBatch.js.map +1 -0
  306. package/esm/transport/startRumEventBridge.js +9 -0
  307. package/esm/transport/startRumEventBridge.js.map +1 -0
  308. package/package.json +39 -0
  309. package/types/index.d.ts +134 -0
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RumPerformanceEntryType = void 0;
7
+ exports.createPerformanceObservable = createPerformanceObservable;
8
+ exports.supportPerformanceTimingEvent = supportPerformanceTimingEvent;
9
+ var _browserCore = require("@cloudcare/browser-core");
10
+ var _resourceUtils = require("./rumEventsCollection/resource/resourceUtils");
11
+ var _firstInputPolyfill = require("./firstInputPolyfill");
12
+ // We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary
13
+ // string is an expected performance entry
14
+ // eslint-disable-next-line no-restricted-syntax
15
+ var RumPerformanceEntryType = exports.RumPerformanceEntryType = {
16
+ EVENT: 'event',
17
+ FIRST_INPUT: 'first-input',
18
+ LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',
19
+ LAYOUT_SHIFT: 'layout-shift',
20
+ LONG_TASK: 'longtask',
21
+ LONG_ANIMATION_FRAME: 'long-animation-frame',
22
+ NAVIGATION: 'navigation',
23
+ PAINT: 'paint',
24
+ RESOURCE: 'resource',
25
+ VISIBILITY_STATE: 'visibility-state'
26
+ };
27
+ function createPerformanceObservable(configuration, options) {
28
+ return new _browserCore.Observable(function (observable) {
29
+ if (!window.PerformanceObserver) {
30
+ return;
31
+ }
32
+ var handlePerformanceEntries = function handlePerformanceEntries(entries) {
33
+ var rumPerformanceEntries = filterRumPerformanceEntries(configuration, entries);
34
+ if (rumPerformanceEntries.length > 0) {
35
+ observable.notify(rumPerformanceEntries);
36
+ }
37
+ };
38
+ var timeoutId;
39
+ var isObserverInitializing = true;
40
+ var observer = new PerformanceObserver((0, _browserCore.monitor)(function (entries) {
41
+ // In Safari the performance observer callback is synchronous.
42
+ // 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
43
+ if (isObserverInitializing) {
44
+ timeoutId = (0, _browserCore.setTimeout)(function () {
45
+ handlePerformanceEntries(entries.getEntries());
46
+ });
47
+ } else {
48
+ handlePerformanceEntries(entries.getEntries());
49
+ }
50
+ }));
51
+ try {
52
+ observer.observe(options);
53
+ } catch (_unused) {
54
+ // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options
55
+ // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes
56
+ // TODO: remove this fallback in the next major version
57
+ var fallbackSupportedEntryTypes = [RumPerformanceEntryType.RESOURCE, RumPerformanceEntryType.NAVIGATION, RumPerformanceEntryType.LONG_TASK, RumPerformanceEntryType.PAINT];
58
+ if ((0, _browserCore.includes)(fallbackSupportedEntryTypes, options.type)) {
59
+ if (options.buffered) {
60
+ timeoutId = (0, _browserCore.setTimeout)(function () {
61
+ handlePerformanceEntries(performance.getEntriesByType(options.type));
62
+ });
63
+ }
64
+ try {
65
+ observer.observe({
66
+ entryTypes: [options.type]
67
+ });
68
+ } catch (_unused2) {
69
+ // Old versions of Safari are throwing "entryTypes contained only unsupported types"
70
+ // errors when observing only unsupported entry types.
71
+ //
72
+ // We could use `supportPerformanceTimingEvent` to make sure we don't invoke
73
+ // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support
74
+ // `Performance.supportedEntryTypes`, so doing so would lose support for these versions
75
+ // even if they do support the entry type.
76
+ return;
77
+ }
78
+ }
79
+ }
80
+ isObserverInitializing = false;
81
+ manageResourceTimingBufferFull(configuration);
82
+ var stopFirstInputTiming;
83
+ if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) && options.type === RumPerformanceEntryType.FIRST_INPUT) {
84
+ var _retrieveFirstInputTiming = (0, _firstInputPolyfill.retrieveFirstInputTiming)(configuration, function (timing) {
85
+ handlePerformanceEntries([timing]);
86
+ });
87
+ stopFirstInputTiming = _retrieveFirstInputTiming.stop;
88
+ }
89
+ return function () {
90
+ observer.disconnect();
91
+ if (stopFirstInputTiming) {
92
+ stopFirstInputTiming();
93
+ }
94
+ (0, _browserCore.clearTimeout)(timeoutId);
95
+ };
96
+ });
97
+ }
98
+ var resourceTimingBufferFullListener;
99
+ function manageResourceTimingBufferFull(configuration) {
100
+ if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {
101
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377
102
+ resourceTimingBufferFullListener = (0, _browserCore.addEventListener)(performance, 'resourcetimingbufferfull', function () {
103
+ performance.clearResourceTimings();
104
+ });
105
+ }
106
+ return function () {
107
+ resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop();
108
+ };
109
+ }
110
+ function supportPerformanceObject() {
111
+ return window.performance !== undefined && 'getEntries' in performance;
112
+ }
113
+ function supportPerformanceTimingEvent(entryType) {
114
+ return window.PerformanceObserver && PerformanceObserver.supportedEntryTypes !== undefined && PerformanceObserver.supportedEntryTypes.includes(entryType);
115
+ }
116
+ function filterRumPerformanceEntries(configuration, entries) {
117
+ return entries.filter(function (entry) {
118
+ return !isForbiddenResource(configuration, entry);
119
+ });
120
+ }
121
+ function isForbiddenResource(configuration, entry) {
122
+ return entry.entryType === RumPerformanceEntryType.RESOURCE && (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, entry.name) || !(0, _resourceUtils.hasValidResourceEntryDuration)(entry));
123
+ }
124
+ //# sourceMappingURL=performanceObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceObservable.js","names":["_browserCore","require","_resourceUtils","_firstInputPolyfill","RumPerformanceEntryType","exports","EVENT","FIRST_INPUT","LARGEST_CONTENTFUL_PAINT","LAYOUT_SHIFT","LONG_TASK","LONG_ANIMATION_FRAME","NAVIGATION","PAINT","RESOURCE","VISIBILITY_STATE","createPerformanceObservable","configuration","options","Observable","observable","window","PerformanceObserver","handlePerformanceEntries","entries","rumPerformanceEntries","filterRumPerformanceEntries","length","notify","timeoutId","isObserverInitializing","observer","monitor","setTimeout","getEntries","observe","_unused","fallbackSupportedEntryTypes","includes","type","buffered","performance","getEntriesByType","entryTypes","_unused2","manageResourceTimingBufferFull","stopFirstInputTiming","supportPerformanceTimingEvent","_retrieveFirstInputTiming","retrieveFirstInputTiming","timing","stop","disconnect","clearTimeout","resourceTimingBufferFullListener","supportPerformanceObject","addEventListener","clearResourceTimings","undefined","entryType","supportedEntryTypes","filter","entry","isForbiddenResource","isAllowedRequestUrl","name","hasValidResourceEntryDuration"],"sources":["../../../rum/src/domain/performanceObservable.js"],"sourcesContent":["import {\n addEventListener,\n Observable,\n setTimeout,\n clearTimeout,\n monitor,\n includes\n} from '@cloudcare/browser-core'\nimport {\n isAllowedRequestUrl,\n hasValidResourceEntryDuration\n} from './rumEventsCollection/resource/resourceUtils'\nimport { retrieveFirstInputTiming } from './firstInputPolyfill'\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 var 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 function createPerformanceObservable(configuration, options) {\n return new Observable(function (observable) {\n if (!window.PerformanceObserver) {\n return\n }\n var handlePerformanceEntries = function (entries) {\n var rumPerformanceEntries = filterRumPerformanceEntries(\n configuration,\n entries\n )\n if (rumPerformanceEntries.length > 0) {\n observable.notify(rumPerformanceEntries)\n }\n }\n\n var timeoutId\n var isObserverInitializing = true\n\n const observer = new PerformanceObserver(\n monitor(function (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(function () {\n handlePerformanceEntries(entries.getEntries())\n })\n } else {\n handlePerformanceEntries(entries.getEntries())\n }\n })\n )\n\n try {\n observer.observe(options)\n } catch {\n // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options\n // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes\n // TODO: remove this fallback in the next major version\n var fallbackSupportedEntryTypes = [\n RumPerformanceEntryType.RESOURCE,\n RumPerformanceEntryType.NAVIGATION,\n RumPerformanceEntryType.LONG_TASK,\n RumPerformanceEntryType.PAINT\n ]\n if (includes(fallbackSupportedEntryTypes, options.type)) {\n if (options.buffered) {\n timeoutId = setTimeout(function () {\n handlePerformanceEntries(performance.getEntriesByType(options.type))\n })\n }\n try {\n observer.observe({ entryTypes: [options.type] })\n } catch {\n // Old versions of Safari are throwing \"entryTypes contained only unsupported types\"\n // errors when observing only unsupported entry types.\n //\n // We could use `supportPerformanceTimingEvent` to make sure we don't invoke\n // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support\n // `Performance.supportedEntryTypes`, so doing so would lose support for these versions\n // even if they do support the entry type.\n return\n }\n }\n }\n isObserverInitializing = false\n\n manageResourceTimingBufferFull(configuration)\n var stopFirstInputTiming\n if (\n !supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) &&\n options.type === RumPerformanceEntryType.FIRST_INPUT\n ) {\n var _retrieveFirstInputTiming = retrieveFirstInputTiming(\n configuration,\n function (timing) {\n handlePerformanceEntries([timing])\n }\n )\n stopFirstInputTiming = _retrieveFirstInputTiming.stop\n }\n return function () {\n observer.disconnect()\n if (stopFirstInputTiming) {\n stopFirstInputTiming()\n }\n clearTimeout(timeoutId)\n }\n })\n}\n\nvar resourceTimingBufferFullListener\nfunction manageResourceTimingBufferFull(configuration) {\n if (\n !resourceTimingBufferFullListener &&\n supportPerformanceObject() &&\n 'addEventListener' in performance\n ) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n resourceTimingBufferFullListener = addEventListener(\n performance,\n 'resourcetimingbufferfull',\n function () {\n performance.clearResourceTimings()\n }\n )\n }\n return function () {\n resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop()\n }\n}\n\nfunction supportPerformanceObject() {\n return window.performance !== undefined && 'getEntries' in performance\n}\n\nexport function supportPerformanceTimingEvent(entryType) {\n return (\n window.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes !== undefined &&\n PerformanceObserver.supportedEntryTypes.includes(entryType)\n )\n}\n\nfunction filterRumPerformanceEntries(configuration, entries) {\n return entries.filter(function (entry) {\n return !isForbiddenResource(configuration, entry)\n })\n}\n\nfunction isForbiddenResource(configuration, entry) {\n return (\n entry.entryType === RumPerformanceEntryType.RESOURCE &&\n (!isAllowedRequestUrl(configuration, entry.name) ||\n !hasValidResourceEntryDuration(entry))\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.computeTimingsFromDeprecatedPerformanceTiming = computeTimingsFromDeprecatedPerformanceTiming;
7
+ exports.getNavigationEntry = getNavigationEntry;
8
+ var _browserCore = require("@cloudcare/browser-core");
9
+ var _performanceObservable = require("./performanceObservable");
10
+ function getNavigationEntry() {
11
+ if ((0, _performanceObservable.supportPerformanceTimingEvent)(_performanceObservable.RumPerformanceEntryType.NAVIGATION)) {
12
+ var navigationEntry = performance.getEntriesByType(_performanceObservable.RumPerformanceEntryType.NAVIGATION)[0];
13
+ if (navigationEntry) {
14
+ return navigationEntry;
15
+ }
16
+ }
17
+ var timings = computeTimingsFromDeprecatedPerformanceTiming();
18
+ var entry = (0, _browserCore.assign)({
19
+ entryType: _performanceObservable.RumPerformanceEntryType.NAVIGATION,
20
+ initiatorType: 'navigation',
21
+ name: window.location.href,
22
+ startTime: 0,
23
+ duration: timings.responseEnd,
24
+ decodedBodySize: 0,
25
+ encodedBodySize: 0,
26
+ transferSize: 0,
27
+ toJSON: function toJSON() {
28
+ return (0, _browserCore.assign)({}, entry, {
29
+ toJSON: undefined
30
+ });
31
+ }
32
+ }, timings);
33
+ return entry;
34
+ }
35
+ function computeTimingsFromDeprecatedPerformanceTiming() {
36
+ var result = {};
37
+ var timing = performance.timing;
38
+ for (var key in timing) {
39
+ if ((0, _browserCore.isNumber)(timing[key])) {
40
+ var numberKey = key;
41
+ var timingElement = timing[numberKey];
42
+ result[numberKey] = timingElement === 0 ? 0 : (0, _browserCore.getRelativeTime)(timingElement);
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ //# sourceMappingURL=performanceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceUtils.js","names":["_browserCore","require","_performanceObservable","getNavigationEntry","supportPerformanceTimingEvent","RumPerformanceEntryType","NAVIGATION","navigationEntry","performance","getEntriesByType","timings","computeTimingsFromDeprecatedPerformanceTiming","entry","assign","entryType","initiatorType","name","window","location","href","startTime","duration","responseEnd","decodedBodySize","encodedBodySize","transferSize","toJSON","undefined","result","timing","key","isNumber","numberKey","timingElement","getRelativeTime"],"sources":["../../../rum/src/domain/performanceUtils.js"],"sourcesContent":["import { getRelativeTime, isNumber, assign } from '@cloudcare/browser-core'\nimport {\n supportPerformanceTimingEvent,\n RumPerformanceEntryType\n} from './performanceObservable'\n\nexport function getNavigationEntry() {\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n var navigationEntry = performance.getEntriesByType(\n RumPerformanceEntryType.NAVIGATION\n )[0]\n if (navigationEntry) {\n return navigationEntry\n }\n }\n\n var timings = computeTimingsFromDeprecatedPerformanceTiming()\n var entry = assign(\n {\n entryType: RumPerformanceEntryType.NAVIGATION,\n initiatorType: 'navigation',\n name: window.location.href,\n startTime: 0,\n duration: timings.responseEnd,\n decodedBodySize: 0,\n encodedBodySize: 0,\n transferSize: 0,\n toJSON: function () {\n return assign({}, entry, { toJSON: undefined })\n }\n },\n timings\n )\n return entry\n}\n\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n var result = {}\n var timing = performance.timing\n\n for (var key in timing) {\n if (isNumber(timing[key])) {\n var numberKey = key\n var timingElement = timing[numberKey]\n result[numberKey] =\n timingElement === 0 ? 0 : getRelativeTime(timingElement)\n }\n }\n return result\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAKO,SAASE,kBAAkBA,CAAA,EAAG;EACnC,IAAI,IAAAC,oDAA6B,EAACC,8CAAuB,CAACC,UAAU,CAAC,EAAE;IACrE,IAAIC,eAAe,GAAGC,WAAW,CAACC,gBAAgB,CAChDJ,8CAAuB,CAACC,UAC1B,CAAC,CAAC,CAAC,CAAC;IACJ,IAAIC,eAAe,EAAE;MACnB,OAAOA,eAAe;IACxB;EACF;EAEA,IAAIG,OAAO,GAAGC,6CAA6C,CAAC,CAAC;EAC7D,IAAIC,KAAK,GAAG,IAAAC,mBAAM,EAChB;IACEC,SAAS,EAAET,8CAAuB,CAACC,UAAU;IAC7CS,aAAa,EAAE,YAAY;IAC3BC,IAAI,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI;IAC1BC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAEX,OAAO,CAACY,WAAW;IAC7BC,eAAe,EAAE,CAAC;IAClBC,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;MAClB,OAAO,IAAAb,mBAAM,EAAC,CAAC,CAAC,EAAED,KAAK,EAAE;QAAEc,MAAM,EAAEC;MAAU,CAAC,CAAC;IACjD;EACF,CAAC,EACDjB,OACF,CAAC;EACD,OAAOE,KAAK;AACd;AAEO,SAASD,6CAA6CA,CAAA,EAAG;EAC9D,IAAIiB,MAAM,GAAG,CAAC,CAAC;EACf,IAAIC,MAAM,GAAGrB,WAAW,CAACqB,MAAM;EAE/B,KAAK,IAAIC,GAAG,IAAID,MAAM,EAAE;IACtB,IAAI,IAAAE,qBAAQ,EAACF,MAAM,CAACC,GAAG,CAAC,CAAC,EAAE;MACzB,IAAIE,SAAS,GAAGF,GAAG;MACnB,IAAIG,aAAa,GAAGJ,MAAM,CAACG,SAAS,CAAC;MACrCJ,MAAM,CAACI,SAAS,CAAC,GACfC,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG,IAAAC,4BAAe,EAACD,aAAa,CAAC;IAC5D;EACF;EACA,OAAOL,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.startRequestCollection = startRequestCollection;
7
+ exports.trackFetch = trackFetch;
8
+ exports.trackXhr = trackXhr;
9
+ var _browserCore = require("@cloudcare/browser-core");
10
+ var _resourceUtils = require("./rumEventsCollection/resource/resourceUtils");
11
+ var _tracer = require("./tracing/tracer");
12
+ var nextRequestIndex = 1;
13
+ function startRequestCollection(lifeCycle, configuration, sessionManager) {
14
+ var tracer = (0, _tracer.startTracer)(configuration, sessionManager);
15
+ trackXhr(lifeCycle, configuration, tracer);
16
+ trackFetch(lifeCycle, configuration, tracer);
17
+ }
18
+ function trackXhr(lifeCycle, configuration, tracer) {
19
+ var subscription = (0, _browserCore.initXhrObservable)().subscribe(function (rawContext) {
20
+ var context = rawContext;
21
+ if (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, context.url)) {
22
+ return;
23
+ }
24
+ switch (context.state) {
25
+ case 'start':
26
+ tracer.traceXhr(context, context.xhr);
27
+ context.requestIndex = getNextRequestIndex();
28
+ lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_STARTED, {
29
+ requestIndex: context.requestIndex,
30
+ url: context.url
31
+ });
32
+ break;
33
+ case 'complete':
34
+ tracer.clearTracingIfNeeded(context);
35
+ lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, {
36
+ duration: context.duration,
37
+ method: context.method,
38
+ requestIndex: context.requestIndex,
39
+ spanId: context.spanId,
40
+ startClocks: context.startClocks,
41
+ status: context.status,
42
+ traceId: context.traceId,
43
+ traceSampled: context.traceSampled,
44
+ type: _browserCore.RequestType.XHR,
45
+ url: context.url,
46
+ xhr: context.xhr,
47
+ isAborted: context.isAborted,
48
+ requestHeaderContexts: context.requestHeaderContexts,
49
+ handlingStack: context.handlingStack
50
+ });
51
+ break;
52
+ }
53
+ });
54
+ return {
55
+ stop: function stop() {
56
+ return subscription.unsubscribe();
57
+ }
58
+ };
59
+ }
60
+ function trackFetch(lifeCycle, configuration, tracer) {
61
+ var subscription = (0, _browserCore.initFetchObservable)().subscribe(function (rawContext) {
62
+ var context = rawContext;
63
+ if (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, context.url)) {
64
+ return;
65
+ }
66
+ switch (context.state) {
67
+ case 'start':
68
+ tracer.traceFetch(context);
69
+ context.requestIndex = getNextRequestIndex();
70
+ lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_STARTED, {
71
+ requestIndex: context.requestIndex,
72
+ url: context.url
73
+ });
74
+ break;
75
+ case 'resolve':
76
+ waitForResponseToComplete(context, function (duration) {
77
+ var _context$init;
78
+ tracer.clearTracingIfNeeded(context);
79
+ lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, {
80
+ duration: duration,
81
+ method: context.method,
82
+ requestIndex: context.requestIndex,
83
+ responseType: context.responseType,
84
+ spanId: context.spanId,
85
+ startClocks: context.startClocks,
86
+ status: context.status,
87
+ traceId: context.traceId,
88
+ traceSampled: context.traceSampled,
89
+ requestHeaderContexts: ((_context$init = context.init) === null || _context$init === void 0 ? void 0 : _context$init.headers) || (context.input instanceof Request ? context.input.headers : undefined),
90
+ type: _browserCore.RequestType.FETCH,
91
+ url: context.url,
92
+ response: context.response,
93
+ init: context.init,
94
+ input: context.input,
95
+ isAborted: context.isAborted,
96
+ handlingStack: context.handlingStack
97
+ });
98
+ });
99
+ break;
100
+ }
101
+ });
102
+ return {
103
+ stop: function stop() {
104
+ return subscription.unsubscribe();
105
+ }
106
+ };
107
+ }
108
+ function getNextRequestIndex() {
109
+ var result = nextRequestIndex;
110
+ nextRequestIndex += 1;
111
+ return result;
112
+ }
113
+ function waitForResponseToComplete(context, callback) {
114
+ var clonedResponse = context.response && (0, _browserCore.tryToClone)(context.response);
115
+ if (!clonedResponse || !clonedResponse.body) {
116
+ // do not try to wait for the response if the clone failed, fetch error or null body
117
+ callback((0, _browserCore.elapsed)(context.startClocks.timeStamp, (0, _browserCore.timeStampNow)()));
118
+ } else {
119
+ (0, _browserCore.readBytesFromStream)(clonedResponse.body, function () {
120
+ callback((0, _browserCore.elapsed)(context.startClocks.timeStamp, (0, _browserCore.timeStampNow)()));
121
+ }, {
122
+ bytesLimit: Number.POSITIVE_INFINITY,
123
+ collectStreamBody: false
124
+ });
125
+ }
126
+ }
127
+ //# sourceMappingURL=requestCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestCollection.js","names":["_browserCore","require","_resourceUtils","_tracer","nextRequestIndex","startRequestCollection","lifeCycle","configuration","sessionManager","tracer","startTracer","trackXhr","trackFetch","subscription","initXhrObservable","subscribe","rawContext","context","isAllowedRequestUrl","url","state","traceXhr","xhr","requestIndex","getNextRequestIndex","notify","LifeCycleEventType","REQUEST_STARTED","clearTracingIfNeeded","REQUEST_COMPLETED","duration","method","spanId","startClocks","status","traceId","traceSampled","type","RequestType","XHR","isAborted","requestHeaderContexts","handlingStack","stop","unsubscribe","initFetchObservable","traceFetch","waitForResponseToComplete","_context$init","responseType","init","headers","input","Request","undefined","FETCH","response","result","callback","clonedResponse","tryToClone","body","elapsed","timeStamp","timeStampNow","readBytesFromStream","bytesLimit","Number","POSITIVE_INFINITY","collectStreamBody"],"sources":["../../../rum/src/domain/requestCollection.js"],"sourcesContent":["import {\n RequestType,\n initFetchObservable,\n initXhrObservable,\n LifeCycleEventType,\n tryToClone,\n readBytesFromStream,\n elapsed,\n timeStampNow\n} from '@cloudcare/browser-core'\nimport { isAllowedRequestUrl } from './rumEventsCollection/resource/resourceUtils'\nimport { startTracer } from './tracing/tracer'\n\nvar nextRequestIndex = 1\n\nexport function startRequestCollection(\n lifeCycle,\n configuration,\n sessionManager\n) {\n var tracer = startTracer(configuration, sessionManager)\n trackXhr(lifeCycle, configuration, tracer)\n trackFetch(lifeCycle, configuration, tracer)\n}\n\nexport function trackXhr(lifeCycle, configuration, tracer) {\n var subscription = initXhrObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceXhr(context, context.xhr)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'complete':\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: context.duration,\n method: context.method,\n requestIndex: context.requestIndex,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n type: RequestType.XHR,\n url: context.url,\n xhr: context.xhr,\n isAborted: context.isAborted,\n requestHeaderContexts: context.requestHeaderContexts,\n handlingStack: context.handlingStack\n })\n break\n }\n })\n\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nexport function trackFetch(lifeCycle, configuration, tracer) {\n var subscription = initFetchObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceFetch(context)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'resolve':\n waitForResponseToComplete(context, function (duration) {\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: duration,\n method: context.method,\n requestIndex: context.requestIndex,\n responseType: context.responseType,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n requestHeaderContexts:\n context.init?.headers ||\n (context.input instanceof Request\n ? context.input.headers\n : undefined),\n type: RequestType.FETCH,\n url: context.url,\n response: context.response,\n init: context.init,\n input: context.input,\n isAborted: context.isAborted,\n handlingStack: context.handlingStack\n })\n })\n break\n }\n })\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nfunction getNextRequestIndex() {\n var result = nextRequestIndex\n nextRequestIndex += 1\n return result\n}\n\nfunction waitForResponseToComplete(context, callback) {\n var clonedResponse = context.response && tryToClone(context.response)\n if (!clonedResponse || !clonedResponse.body) {\n // do not try to wait for the response if the clone failed, fetch error or null body\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n } else {\n readBytesFromStream(\n clonedResponse.body,\n function () {\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n },\n {\n bytesLimit: Number.POSITIVE_INFINITY,\n collectStreamBody: false\n }\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.startActionCollection = startActionCollection;
7
+ var _browserCore = require("@cloudcare/browser-core");
8
+ var _trackClickActions = require("./trackClickActions");
9
+ var _pageStateHistory = require("../../contexts/pageStateHistory");
10
+ function startActionCollection(lifeCycle, domMutationObservable, configuration, pageStateHistory) {
11
+ lifeCycle.subscribe(_browserCore.LifeCycleEventType.AUTO_ACTION_COMPLETED, function (action) {
12
+ lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action, pageStateHistory));
13
+ });
14
+ var actionContexts = {
15
+ findActionId: _browserCore.noop,
16
+ findAllActionId: _browserCore.noop
17
+ };
18
+ if (configuration.trackUserInteractions) {
19
+ actionContexts = (0, _trackClickActions.trackClickActions)(lifeCycle, domMutationObservable, configuration).actionContexts;
20
+ }
21
+ return {
22
+ actionContexts: actionContexts,
23
+ addAction: function addAction(action, savedCommonContext) {
24
+ lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, (0, _browserCore.extend)({
25
+ savedCommonContext: savedCommonContext
26
+ }, processAction(action, pageStateHistory)));
27
+ }
28
+ };
29
+ }
30
+ function processAction(action, pageStateHistory) {
31
+ var _action$context;
32
+ var autoActionProperties = isAutoAction(action) ? {
33
+ action: {
34
+ error: {
35
+ count: action.counts.errorCount
36
+ },
37
+ id: action.id,
38
+ loadingTime: (0, _browserCore.discardNegativeDuration)((0, _browserCore.toServerDuration)(action.duration)),
39
+ frustration: {
40
+ type: action.frustrationTypes
41
+ },
42
+ long_task: {
43
+ count: action.counts.longTaskCount
44
+ },
45
+ resource: {
46
+ count: action.counts.resourceCount
47
+ }
48
+ },
49
+ _gc: {
50
+ action: {
51
+ target: action.target,
52
+ position: action.position
53
+ }
54
+ }
55
+ } : {
56
+ action: {
57
+ loadingTime: ((_action$context = action.context) === null || _action$context === void 0 ? void 0 : _action$context.duration) || 0
58
+ }
59
+ };
60
+ var customerContext = !isAutoAction(action) ? action.context : undefined;
61
+ var actionEvent = (0, _browserCore.extend2Lev)({
62
+ action: {
63
+ id: (0, _browserCore.UUID)(),
64
+ target: {
65
+ name: action.name
66
+ },
67
+ type: action.type
68
+ },
69
+ date: action.startClocks.timeStamp,
70
+ type: _browserCore.RumEventType.ACTION,
71
+ view: {
72
+ in_foreground: pageStateHistory.wasInPageStateAt(_pageStateHistory.PageState.ACTIVE, action.startClocks.relative)
73
+ }
74
+ }, autoActionProperties);
75
+ return {
76
+ customerContext: customerContext,
77
+ rawRumEvent: actionEvent,
78
+ startTime: action.startClocks.relative,
79
+ domainContext: isAutoAction(action) ? {
80
+ event: action.event,
81
+ events: action.events
82
+ } : {}
83
+ };
84
+ }
85
+ function isAutoAction(action) {
86
+ return action.type === _browserCore.ActionType.CLICK;
87
+ // return action.type !== ActionType.CUSTOM
88
+ }
89
+ //# sourceMappingURL=actionCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionCollection.js","names":["_browserCore","require","_trackClickActions","_pageStateHistory","startActionCollection","lifeCycle","domMutationObservable","configuration","pageStateHistory","subscribe","LifeCycleEventType","AUTO_ACTION_COMPLETED","action","notify","RAW_RUM_EVENT_COLLECTED","processAction","actionContexts","findActionId","noop","findAllActionId","trackUserInteractions","trackClickActions","addAction","savedCommonContext","extend","_action$context","autoActionProperties","isAutoAction","error","count","counts","errorCount","id","loadingTime","discardNegativeDuration","toServerDuration","duration","frustration","type","frustrationTypes","long_task","longTaskCount","resource","resourceCount","_gc","target","position","context","customerContext","undefined","actionEvent","extend2Lev","UUID","name","date","startClocks","timeStamp","RumEventType","ACTION","view","in_foreground","wasInPageStateAt","PageState","ACTIVE","relative","rawRumEvent","startTime","domainContext","event","events","ActionType","CLICK"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/actionCollection.js"],"sourcesContent":["import {\n toServerDuration,\n extend,\n extend2Lev,\n ActionType,\n RumEventType,\n LifeCycleEventType,\n UUID,\n noop,\n discardNegativeDuration\n} from '@cloudcare/browser-core'\nimport { trackClickActions } from './trackClickActions'\nimport { PageState } from '../../contexts/pageStateHistory'\nexport function startActionCollection(\n lifeCycle,\n domMutationObservable,\n configuration,\n pageStateHistory\n) {\n lifeCycle.subscribe(\n LifeCycleEventType.AUTO_ACTION_COMPLETED,\n function (action) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n processAction(action, pageStateHistory)\n )\n }\n )\n\n var actionContexts = { findActionId: noop, findAllActionId: noop }\n if (configuration.trackUserInteractions) {\n actionContexts = trackClickActions(\n lifeCycle,\n domMutationObservable,\n configuration\n ).actionContexts\n }\n return {\n actionContexts: actionContexts,\n addAction: function (action, savedCommonContext) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n extend(\n { savedCommonContext: savedCommonContext },\n processAction(action, pageStateHistory)\n )\n )\n }\n }\n}\n\nfunction processAction(action, pageStateHistory) {\n var autoActionProperties = isAutoAction(action)\n ? {\n action: {\n error: {\n count: action.counts.errorCount\n },\n id: action.id,\n loadingTime: discardNegativeDuration(\n toServerDuration(action.duration)\n ),\n frustration: {\n type: action.frustrationTypes\n },\n long_task: {\n count: action.counts.longTaskCount\n },\n resource: {\n count: action.counts.resourceCount\n }\n },\n _gc: {\n action: {\n target: action.target,\n position: action.position\n }\n }\n }\n : {\n action: {\n loadingTime: action.context?.duration || 0\n }\n }\n var customerContext = !isAutoAction(action) ? action.context : undefined\n var actionEvent = extend2Lev(\n {\n action: {\n id: UUID(),\n target: {\n name: action.name\n },\n type: action.type\n },\n date: action.startClocks.timeStamp,\n type: RumEventType.ACTION,\n view: {\n in_foreground: pageStateHistory.wasInPageStateAt(\n PageState.ACTIVE,\n action.startClocks.relative\n )\n }\n },\n autoActionProperties\n )\n\n return {\n customerContext: customerContext,\n rawRumEvent: actionEvent,\n startTime: action.startClocks.relative,\n domainContext: isAutoAction(action)\n ? { event: action.event, events: action.events }\n : {}\n }\n}\n\nfunction isAutoAction(action) {\n return action.type === ActionType.CLICK\n // return action.type !== ActionType.CUSTOM\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MAX_DURATION_BETWEEN_CLICKS = exports.MAX_DISTANCE_BETWEEN_CLICKS = void 0;
7
+ exports.createClickChain = createClickChain;
8
+ var _browserCore = require("@cloudcare/browser-core");
9
+ var MAX_DURATION_BETWEEN_CLICKS = exports.MAX_DURATION_BETWEEN_CLICKS = _browserCore.ONE_SECOND;
10
+ var MAX_DISTANCE_BETWEEN_CLICKS = exports.MAX_DISTANCE_BETWEEN_CLICKS = 100;
11
+ var ClickChainStatus = {
12
+ WaitingForMoreClicks: 0,
13
+ WaitingForClicksToStop: 1,
14
+ Finalized: 2
15
+ };
16
+ function createClickChain(firstClick, onFinalize) {
17
+ var bufferedClicks = [];
18
+ var status = ClickChainStatus.WaitingForMoreClicks;
19
+ var maxDurationBetweenClicksTimeout;
20
+ appendClick(firstClick);
21
+ function appendClick(click) {
22
+ click.stopObservable.subscribe(tryFinalize);
23
+ bufferedClicks.push(click);
24
+ (0, _browserCore.clearTimeout)(maxDurationBetweenClicksTimeout);
25
+ maxDurationBetweenClicksTimeout = (0, _browserCore.setTimeout)(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);
26
+ }
27
+ function tryFinalize() {
28
+ if (status === ClickChainStatus.WaitingForClicksToStop && (0, _browserCore.every)(bufferedClicks, function (click) {
29
+ return click.isStopped();
30
+ })) {
31
+ status = ClickChainStatus.Finalized;
32
+ onFinalize(bufferedClicks);
33
+ }
34
+ }
35
+ function dontAcceptMoreClick() {
36
+ (0, _browserCore.clearTimeout)(maxDurationBetweenClicksTimeout);
37
+ if (status === ClickChainStatus.WaitingForMoreClicks) {
38
+ status = ClickChainStatus.WaitingForClicksToStop;
39
+ tryFinalize();
40
+ }
41
+ }
42
+ return {
43
+ tryAppend: function tryAppend(click) {
44
+ if (status !== ClickChainStatus.WaitingForMoreClicks) {
45
+ return false;
46
+ }
47
+ if (bufferedClicks.length > 0 && !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {
48
+ dontAcceptMoreClick();
49
+ return false;
50
+ }
51
+ appendClick(click);
52
+ return true;
53
+ },
54
+ stop: function stop() {
55
+ dontAcceptMoreClick();
56
+ }
57
+ };
58
+ }
59
+
60
+ /**
61
+ * Checks whether two events are similar by comparing their target, position and timestamp
62
+ */
63
+ function areEventsSimilar(first, second) {
64
+ return first.target === second.target && mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS && second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS;
65
+ }
66
+ function mouseEventDistance(origin, other) {
67
+ return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));
68
+ }
69
+ //# sourceMappingURL=clickChain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickChain.js","names":["_browserCore","require","MAX_DURATION_BETWEEN_CLICKS","exports","ONE_SECOND","MAX_DISTANCE_BETWEEN_CLICKS","ClickChainStatus","WaitingForMoreClicks","WaitingForClicksToStop","Finalized","createClickChain","firstClick","onFinalize","bufferedClicks","status","maxDurationBetweenClicksTimeout","appendClick","click","stopObservable","subscribe","tryFinalize","push","clearTimeout","setTimeout","dontAcceptMoreClick","every","isStopped","tryAppend","length","areEventsSimilar","event","stop","first","second","target","mouseEventDistance","timeStamp","origin","other","Math","sqrt","pow","clientX","clientY"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/clickChain.js"],"sourcesContent":["import {\n ONE_SECOND,\n every,\n setTimeout,\n clearTimeout\n} from '@cloudcare/browser-core'\n\nexport var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND\nexport var MAX_DISTANCE_BETWEEN_CLICKS = 100\n\nvar ClickChainStatus = {\n WaitingForMoreClicks: 0,\n WaitingForClicksToStop: 1,\n Finalized: 2\n}\n\nexport function createClickChain(firstClick, onFinalize) {\n var bufferedClicks = []\n var status = ClickChainStatus.WaitingForMoreClicks\n var maxDurationBetweenClicksTimeout\n appendClick(firstClick)\n\n function appendClick(click) {\n click.stopObservable.subscribe(tryFinalize)\n bufferedClicks.push(click)\n clearTimeout(maxDurationBetweenClicksTimeout)\n maxDurationBetweenClicksTimeout = setTimeout(\n dontAcceptMoreClick,\n MAX_DURATION_BETWEEN_CLICKS\n )\n }\n\n function tryFinalize() {\n if (\n status === ClickChainStatus.WaitingForClicksToStop &&\n every(bufferedClicks, function (click) {\n return click.isStopped()\n })\n ) {\n status = ClickChainStatus.Finalized\n onFinalize(bufferedClicks)\n }\n }\n\n function dontAcceptMoreClick() {\n clearTimeout(maxDurationBetweenClicksTimeout)\n if (status === ClickChainStatus.WaitingForMoreClicks) {\n status = ClickChainStatus.WaitingForClicksToStop\n tryFinalize()\n }\n }\n\n return {\n tryAppend: function (click) {\n if (status !== ClickChainStatus.WaitingForMoreClicks) {\n return false\n }\n\n if (\n bufferedClicks.length > 0 &&\n !areEventsSimilar(\n bufferedClicks[bufferedClicks.length - 1].event,\n click.event\n )\n ) {\n dontAcceptMoreClick()\n return false\n }\n\n appendClick(click)\n return true\n },\n stop: function () {\n dontAcceptMoreClick()\n }\n }\n}\n\n/**\n * Checks whether two events are similar by comparing their target, position and timestamp\n */\nfunction areEventsSimilar(first, second) {\n return (\n first.target === second.target &&\n mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS &&\n second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS\n )\n}\n\nfunction mouseEventDistance(origin, other) {\n return Math.sqrt(\n Math.pow(origin.clientX - other.clientX, 2) +\n Math.pow(origin.clientY - other.clientY, 2)\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.computeFrustration = computeFrustration;
7
+ exports.isDead = isDead;
8
+ exports.isRage = isRage;
9
+ var _browserCore = require("@cloudcare/browser-core");
10
+ var MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3;
11
+ function computeFrustration(clicks, rageClick) {
12
+ if (isRage(clicks)) {
13
+ rageClick.addFrustration(_browserCore.FrustrationType.RAGE_CLICK);
14
+ if ((0, _browserCore.some)(clicks, isDead)) {
15
+ rageClick.addFrustration(_browserCore.FrustrationType.DEAD_CLICK);
16
+ }
17
+ if (rageClick.hasError()) {
18
+ rageClick.addFrustration(_browserCore.FrustrationType.ERROR_CLICK);
19
+ }
20
+ return {
21
+ isRage: true
22
+ };
23
+ }
24
+ var hasSelectionChanged = (0, _browserCore.some)(clicks, function (click) {
25
+ return click.getUserActivity().selection;
26
+ });
27
+ (0, _browserCore.each)(clicks, function (click) {
28
+ if (click.hasError()) {
29
+ click.addFrustration(_browserCore.FrustrationType.ERROR_CLICK);
30
+ }
31
+ if (isDead(click) &&
32
+ // Avoid considering clicks part of a double-click or triple-click selections as dead clicks
33
+ !hasSelectionChanged) {
34
+ click.addFrustration(_browserCore.FrustrationType.DEAD_CLICK);
35
+ }
36
+ });
37
+ return {
38
+ isRage: false
39
+ };
40
+ }
41
+ function isRage(clicks) {
42
+ if ((0, _browserCore.some)(clicks, function (click) {
43
+ return click.getUserActivity().selection || click.getUserActivity().scroll;
44
+ })) {
45
+ return false;
46
+ }
47
+ for (var i = 0; i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1); i += 1) {
48
+ if (clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp - clicks[i].event.timeStamp <= _browserCore.ONE_SECOND) {
49
+ return true;
50
+ }
51
+ }
52
+ return false;
53
+ }
54
+ var DEAD_CLICK_EXCLUDE_SELECTOR =
55
+ // inputs that don't trigger a meaningful event like "input" when clicked, including textual
56
+ // inputs (using a negative selector is shorter here)
57
+ 'input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="range"]),' + 'textarea,' + 'select,' +
58
+ // contenteditable and their descendants don't always trigger meaningful changes when manipulated
59
+ '[contenteditable],' + '[contenteditable] *,' +
60
+ // canvas, as there is no good way to detect activity occurring on them
61
+ 'canvas,' +
62
+ // links that are interactive (have an href attribute) or any of their descendants, as they can
63
+ // open a new tab or navigate to a hash without triggering a meaningful event
64
+ 'a[href],' + 'a[href] *';
65
+ function isDead(click) {
66
+ if (click.hasPageActivity() || click.getUserActivity().input || click.getUserActivity().scroll) {
67
+ return false;
68
+ }
69
+ var target = click.event.target;
70
+ if (target.tagName === 'LABEL' && target.hasAttribute('for')) {
71
+ target = document.getElementById(target.getAttribute('for'));
72
+ }
73
+ return !target || !(0, _browserCore.elementMatches)(target, DEAD_CLICK_EXCLUDE_SELECTOR);
74
+ }
75
+ //# sourceMappingURL=computeFrustration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeFrustration.js","names":["_browserCore","require","MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE","computeFrustration","clicks","rageClick","isRage","addFrustration","FrustrationType","RAGE_CLICK","some","isDead","DEAD_CLICK","hasError","ERROR_CLICK","hasSelectionChanged","click","getUserActivity","selection","each","scroll","i","length","event","timeStamp","ONE_SECOND","DEAD_CLICK_EXCLUDE_SELECTOR","hasPageActivity","input","target","tagName","hasAttribute","document","getElementById","getAttribute","elementMatches"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/computeFrustration.js"],"sourcesContent":["import {\n elementMatches,\n ONE_SECOND,\n FrustrationType,\n some,\n each\n} from '@cloudcare/browser-core'\n\nvar MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3\n\nexport function computeFrustration(clicks, rageClick) {\n if (isRage(clicks)) {\n rageClick.addFrustration(FrustrationType.RAGE_CLICK)\n if (some(clicks, isDead)) {\n rageClick.addFrustration(FrustrationType.DEAD_CLICK)\n }\n if (rageClick.hasError()) {\n rageClick.addFrustration(FrustrationType.ERROR_CLICK)\n }\n return { isRage: true }\n }\n\n var hasSelectionChanged = some(clicks, function (click) {\n return click.getUserActivity().selection\n })\n each(clicks, function (click) {\n if (click.hasError()) {\n click.addFrustration(FrustrationType.ERROR_CLICK)\n }\n if (\n isDead(click) &&\n // Avoid considering clicks part of a double-click or triple-click selections as dead clicks\n !hasSelectionChanged\n ) {\n click.addFrustration(FrustrationType.DEAD_CLICK)\n }\n })\n\n return { isRage: false }\n}\n\nexport function isRage(clicks) {\n if (\n some(clicks, function (click) {\n return click.getUserActivity().selection || click.getUserActivity().scroll\n })\n ) {\n return false\n }\n for (\n var i = 0;\n i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1);\n i += 1\n ) {\n if (\n clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp -\n clicks[i].event.timeStamp <=\n ONE_SECOND\n ) {\n return true\n }\n }\n return false\n}\n\nvar DEAD_CLICK_EXCLUDE_SELECTOR =\n // inputs that don't trigger a meaningful event like \"input\" when clicked, including textual\n // inputs (using a negative selector is shorter here)\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]):not([type=\"range\"]),' +\n 'textarea,' +\n 'select,' +\n // contenteditable and their descendants don't always trigger meaningful changes when manipulated\n '[contenteditable],' +\n '[contenteditable] *,' +\n // canvas, as there is no good way to detect activity occurring on them\n 'canvas,' +\n // links that are interactive (have an href attribute) or any of their descendants, as they can\n // open a new tab or navigate to a hash without triggering a meaningful event\n 'a[href],' +\n 'a[href] *'\n\nexport function isDead(click) {\n if (\n click.hasPageActivity() ||\n click.getUserActivity().input ||\n click.getUserActivity().scroll\n ) {\n return false\n }\n let target = click.event.target\n\n if (target.tagName === 'LABEL' && target.hasAttribute('for')) {\n target = document.getElementById(target.getAttribute('for'))\n }\n\n return !target || !elementMatches(target, DEAD_CLICK_EXCLUDE_SELECTOR)\n}\n"],"mappings":"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","ignoreList":[]}