@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,36 @@
1
+ import { Observable, throttle, addEventListener, DOM_EVENT } from '@cloudcare/browser-core';
2
+ var viewportObservable;
3
+ export function initViewportObservable() {
4
+ if (!viewportObservable) {
5
+ viewportObservable = createViewportObservable();
6
+ }
7
+ return viewportObservable;
8
+ }
9
+ export function createViewportObservable() {
10
+ return new Observable(function (observable) {
11
+ var _throttledUpdateDimension = throttle(function () {
12
+ observable.notify(getViewportDimension());
13
+ }, 200);
14
+ var updateDimension = _throttledUpdateDimension.throttled;
15
+ return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, {
16
+ capture: true,
17
+ passive: true
18
+ }).stop;
19
+ });
20
+ }
21
+
22
+ // excludes the width and height of any rendered classic scrollbar that is fixed to the visual viewport
23
+ export function getViewportDimension() {
24
+ var visual = window.visualViewport;
25
+ if (visual) {
26
+ return {
27
+ width: Number(visual.width * visual.scale),
28
+ height: Number(visual.height * visual.scale)
29
+ };
30
+ }
31
+ return {
32
+ width: Number(window.innerWidth || 0),
33
+ height: Number(window.innerHeight || 0)
34
+ };
35
+ }
36
+ //# sourceMappingURL=initViewportObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initViewportObservable.js","names":["Observable","throttle","addEventListener","DOM_EVENT","viewportObservable","initViewportObservable","createViewportObservable","observable","_throttledUpdateDimension","notify","getViewportDimension","updateDimension","throttled","window","RESIZE","capture","passive","stop","visual","visualViewport","width","Number","scale","height","innerWidth","innerHeight"],"sources":["../../../rum/src/domain/initViewportObservable.js"],"sourcesContent":["import {\n Observable,\n throttle,\n addEventListener,\n DOM_EVENT\n} from '@cloudcare/browser-core'\n\nvar viewportObservable\n\nexport function initViewportObservable() {\n if (!viewportObservable) {\n viewportObservable = createViewportObservable()\n }\n return viewportObservable\n}\n\nexport function createViewportObservable() {\n return new Observable(function (observable) {\n var _throttledUpdateDimension = throttle(function () {\n observable.notify(getViewportDimension())\n }, 200)\n var updateDimension = _throttledUpdateDimension.throttled\n return addEventListener(window, DOM_EVENT.RESIZE, updateDimension, {\n capture: true,\n passive: true\n }).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() {\n var 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":"AAAA,SACEA,UAAU,EACVC,QAAQ,EACRC,gBAAgB,EAChBC,SAAS,QACJ,yBAAyB;AAEhC,IAAIC,kBAAkB;AAEtB,OAAO,SAASC,sBAAsBA,CAAA,EAAG;EACvC,IAAI,CAACD,kBAAkB,EAAE;IACvBA,kBAAkB,GAAGE,wBAAwB,CAAC,CAAC;EACjD;EACA,OAAOF,kBAAkB;AAC3B;AAEA,OAAO,SAASE,wBAAwBA,CAAA,EAAG;EACzC,OAAO,IAAIN,UAAU,CAAC,UAAUO,UAAU,EAAE;IAC1C,IAAIC,yBAAyB,GAAGP,QAAQ,CAAC,YAAY;MACnDM,UAAU,CAACE,MAAM,CAACC,oBAAoB,CAAC,CAAC,CAAC;IAC3C,CAAC,EAAE,GAAG,CAAC;IACP,IAAIC,eAAe,GAAGH,yBAAyB,CAACI,SAAS;IACzD,OAAOV,gBAAgB,CAACW,MAAM,EAAEV,SAAS,CAACW,MAAM,EAAEH,eAAe,EAAE;MACjEI,OAAO,EAAE,IAAI;MACbC,OAAO,EAAE;IACX,CAAC,CAAC,CAACC,IAAI;EACT,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASP,oBAAoBA,CAAA,EAAG;EACrC,IAAIQ,MAAM,GAAGL,MAAM,CAACM,cAAc;EAClC,IAAID,MAAM,EAAE;IACV,OAAO;MACLE,KAAK,EAAEC,MAAM,CAACH,MAAM,CAACE,KAAK,GAAGF,MAAM,CAACI,KAAK,CAAC;MAC1CC,MAAM,EAAEF,MAAM,CAACH,MAAM,CAACK,MAAM,GAAGL,MAAM,CAACI,KAAK;IAC7C,CAAC;EACH;EAEA,OAAO;IACLF,KAAK,EAAEC,MAAM,CAACR,MAAM,CAACW,UAAU,IAAI,CAAC,CAAC;IACrCD,MAAM,EAAEF,MAAM,CAACR,MAAM,CAACY,WAAW,IAAI,CAAC;EACxC,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ import { addEventListener, DOM_EVENT, Observable, shallowClone, instrumentMethod } from '@cloudcare/browser-core';
2
+ export function createLocationChangeObservable(location) {
3
+ var currentLocation = shallowClone(location);
4
+ return new Observable(function (observable) {
5
+ var _trackHistory = trackHistory(onLocationChange);
6
+ var _trackHash = trackHash(onLocationChange);
7
+ function onLocationChange() {
8
+ if (currentLocation.href === location.href) {
9
+ return;
10
+ }
11
+ var newLocation = shallowClone(location);
12
+ observable.notify({
13
+ newLocation: newLocation,
14
+ oldLocation: currentLocation
15
+ });
16
+ currentLocation = newLocation;
17
+ }
18
+ return function () {
19
+ _trackHistory.stop();
20
+ _trackHash.stop();
21
+ };
22
+ });
23
+ }
24
+ function trackHistory(onHistoryChange) {
25
+ // eslint-disable-next-line @typescript-eslint/unbound-method
26
+ var pushState = instrumentMethod(getHistoryInstrumentationTarget('pushState'), 'pushState', function (params) {
27
+ var onPostCall = params.onPostCall;
28
+ onPostCall(onHistoryChange);
29
+ });
30
+ var replaceState = instrumentMethod(getHistoryInstrumentationTarget('replaceState'), 'replaceState', function (params) {
31
+ var onPostCall = params.onPostCall;
32
+ onPostCall(onHistoryChange);
33
+ });
34
+ var popState = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange);
35
+ return {
36
+ stop: function stop() {
37
+ pushState.stop();
38
+ replaceState.stop();
39
+ popState.stop();
40
+ }
41
+ };
42
+ }
43
+ function trackHash(onHashChange) {
44
+ return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange);
45
+ }
46
+ function getHistoryInstrumentationTarget(methodName) {
47
+ // 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))
48
+ // are wrapping the instance method. In that case we should also wrap the instance method.
49
+ return Object.prototype.hasOwnProperty.call(history, methodName) ? history : History.prototype;
50
+ }
51
+ //# sourceMappingURL=locationChangeObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locationChangeObservable.js","names":["addEventListener","DOM_EVENT","Observable","shallowClone","instrumentMethod","createLocationChangeObservable","location","currentLocation","observable","_trackHistory","trackHistory","onLocationChange","_trackHash","trackHash","href","newLocation","notify","oldLocation","stop","onHistoryChange","pushState","getHistoryInstrumentationTarget","params","onPostCall","replaceState","popState","window","POP_STATE","onHashChange","HASH_CHANGE","methodName","Object","prototype","hasOwnProperty","call","history","History"],"sources":["../../../rum/src/domain/locationChangeObservable.js"],"sourcesContent":["import {\n addEventListener,\n DOM_EVENT,\n Observable,\n shallowClone,\n instrumentMethod\n} from '@cloudcare/browser-core'\n\nexport function createLocationChangeObservable(location) {\n var currentLocation = shallowClone(location)\n return new Observable(function (observable) {\n var _trackHistory = trackHistory(onLocationChange)\n var _trackHash = trackHash(onLocationChange)\n function onLocationChange() {\n if (currentLocation.href === location.href) {\n return\n }\n var newLocation = shallowClone(location)\n observable.notify({\n newLocation: newLocation,\n oldLocation: currentLocation\n })\n currentLocation = newLocation\n }\n return function () {\n _trackHistory.stop()\n _trackHash.stop()\n }\n })\n}\n\nfunction trackHistory(onHistoryChange) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var pushState = instrumentMethod(\n getHistoryInstrumentationTarget('pushState'),\n 'pushState',\n function (params) {\n var onPostCall = params.onPostCall\n onPostCall(onHistoryChange)\n }\n )\n var replaceState = instrumentMethod(\n getHistoryInstrumentationTarget('replaceState'),\n 'replaceState',\n function (params) {\n var onPostCall = params.onPostCall\n onPostCall(onHistoryChange)\n }\n )\n var popState = addEventListener(window, DOM_EVENT.POP_STATE, onHistoryChange)\n\n return {\n stop: function () {\n pushState.stop()\n replaceState.stop()\n popState.stop()\n }\n }\n}\n\nfunction trackHash(onHashChange) {\n return addEventListener(window, DOM_EVENT.HASH_CHANGE, onHashChange)\n}\nfunction getHistoryInstrumentationTarget(methodName) {\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)\n ? history\n : History.prototype\n}\n"],"mappings":"AAAA,SACEA,gBAAgB,EAChBC,SAAS,EACTC,UAAU,EACVC,YAAY,EACZC,gBAAgB,QACX,yBAAyB;AAEhC,OAAO,SAASC,8BAA8BA,CAACC,QAAQ,EAAE;EACvD,IAAIC,eAAe,GAAGJ,YAAY,CAACG,QAAQ,CAAC;EAC5C,OAAO,IAAIJ,UAAU,CAAC,UAAUM,UAAU,EAAE;IAC1C,IAAIC,aAAa,GAAGC,YAAY,CAACC,gBAAgB,CAAC;IAClD,IAAIC,UAAU,GAAGC,SAAS,CAACF,gBAAgB,CAAC;IAC5C,SAASA,gBAAgBA,CAAA,EAAG;MAC1B,IAAIJ,eAAe,CAACO,IAAI,KAAKR,QAAQ,CAACQ,IAAI,EAAE;QAC1C;MACF;MACA,IAAIC,WAAW,GAAGZ,YAAY,CAACG,QAAQ,CAAC;MACxCE,UAAU,CAACQ,MAAM,CAAC;QAChBD,WAAW,EAAEA,WAAW;QACxBE,WAAW,EAAEV;MACf,CAAC,CAAC;MACFA,eAAe,GAAGQ,WAAW;IAC/B;IACA,OAAO,YAAY;MACjBN,aAAa,CAACS,IAAI,CAAC,CAAC;MACpBN,UAAU,CAACM,IAAI,CAAC,CAAC;IACnB,CAAC;EACH,CAAC,CAAC;AACJ;AAEA,SAASR,YAAYA,CAACS,eAAe,EAAE;EACrC;EACA,IAAIC,SAAS,GAAGhB,gBAAgB,CAC9BiB,+BAA+B,CAAC,WAAW,CAAC,EAC5C,WAAW,EACX,UAAUC,MAAM,EAAE;IAChB,IAAIC,UAAU,GAAGD,MAAM,CAACC,UAAU;IAClCA,UAAU,CAACJ,eAAe,CAAC;EAC7B,CACF,CAAC;EACD,IAAIK,YAAY,GAAGpB,gBAAgB,CACjCiB,+BAA+B,CAAC,cAAc,CAAC,EAC/C,cAAc,EACd,UAAUC,MAAM,EAAE;IAChB,IAAIC,UAAU,GAAGD,MAAM,CAACC,UAAU;IAClCA,UAAU,CAACJ,eAAe,CAAC;EAC7B,CACF,CAAC;EACD,IAAIM,QAAQ,GAAGzB,gBAAgB,CAAC0B,MAAM,EAAEzB,SAAS,CAAC0B,SAAS,EAAER,eAAe,CAAC;EAE7E,OAAO;IACLD,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBE,SAAS,CAACF,IAAI,CAAC,CAAC;MAChBM,YAAY,CAACN,IAAI,CAAC,CAAC;MACnBO,QAAQ,CAACP,IAAI,CAAC,CAAC;IACjB;EACF,CAAC;AACH;AAEA,SAASL,SAASA,CAACe,YAAY,EAAE;EAC/B,OAAO5B,gBAAgB,CAAC0B,MAAM,EAAEzB,SAAS,CAAC4B,WAAW,EAAED,YAAY,CAAC;AACtE;AACA,SAASP,+BAA+BA,CAACS,UAAU,EAAE;EACnD;EACA;EACA,OAAOC,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACC,OAAO,EAAEL,UAAU,CAAC,GAC5DK,OAAO,GACPC,OAAO,CAACJ,SAAS;AACvB","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ import { addEventListener, Observable, setTimeout, clearTimeout, monitor, includes } from '@cloudcare/browser-core';
2
+ import { isAllowedRequestUrl, hasValidResourceEntryDuration } from './rumEventsCollection/resource/resourceUtils';
3
+ import { retrieveFirstInputTiming } from './firstInputPolyfill';
4
+ // We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary
5
+ // string is an expected performance entry
6
+ // eslint-disable-next-line no-restricted-syntax
7
+ export var RumPerformanceEntryType = {
8
+ EVENT: 'event',
9
+ FIRST_INPUT: 'first-input',
10
+ LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',
11
+ LAYOUT_SHIFT: 'layout-shift',
12
+ LONG_TASK: 'longtask',
13
+ LONG_ANIMATION_FRAME: 'long-animation-frame',
14
+ NAVIGATION: 'navigation',
15
+ PAINT: 'paint',
16
+ RESOURCE: 'resource',
17
+ VISIBILITY_STATE: 'visibility-state'
18
+ };
19
+ export function createPerformanceObservable(configuration, options) {
20
+ return new Observable(function (observable) {
21
+ if (!window.PerformanceObserver) {
22
+ return;
23
+ }
24
+ var handlePerformanceEntries = function handlePerformanceEntries(entries) {
25
+ var rumPerformanceEntries = filterRumPerformanceEntries(configuration, entries);
26
+ if (rumPerformanceEntries.length > 0) {
27
+ observable.notify(rumPerformanceEntries);
28
+ }
29
+ };
30
+ var timeoutId;
31
+ var isObserverInitializing = true;
32
+ var observer = new PerformanceObserver(monitor(function (entries) {
33
+ // In Safari the performance observer callback is synchronous.
34
+ // 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
35
+ if (isObserverInitializing) {
36
+ timeoutId = setTimeout(function () {
37
+ handlePerformanceEntries(entries.getEntries());
38
+ });
39
+ } else {
40
+ handlePerformanceEntries(entries.getEntries());
41
+ }
42
+ }));
43
+ try {
44
+ observer.observe(options);
45
+ } catch (_unused) {
46
+ // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options
47
+ // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes
48
+ // TODO: remove this fallback in the next major version
49
+ var fallbackSupportedEntryTypes = [RumPerformanceEntryType.RESOURCE, RumPerformanceEntryType.NAVIGATION, RumPerformanceEntryType.LONG_TASK, RumPerformanceEntryType.PAINT];
50
+ if (includes(fallbackSupportedEntryTypes, options.type)) {
51
+ if (options.buffered) {
52
+ timeoutId = setTimeout(function () {
53
+ handlePerformanceEntries(performance.getEntriesByType(options.type));
54
+ });
55
+ }
56
+ try {
57
+ observer.observe({
58
+ entryTypes: [options.type]
59
+ });
60
+ } catch (_unused2) {
61
+ // Old versions of Safari are throwing "entryTypes contained only unsupported types"
62
+ // errors when observing only unsupported entry types.
63
+ //
64
+ // We could use `supportPerformanceTimingEvent` to make sure we don't invoke
65
+ // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support
66
+ // `Performance.supportedEntryTypes`, so doing so would lose support for these versions
67
+ // even if they do support the entry type.
68
+ return;
69
+ }
70
+ }
71
+ }
72
+ isObserverInitializing = false;
73
+ manageResourceTimingBufferFull(configuration);
74
+ var stopFirstInputTiming;
75
+ if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) && options.type === RumPerformanceEntryType.FIRST_INPUT) {
76
+ var _retrieveFirstInputTiming = retrieveFirstInputTiming(configuration, function (timing) {
77
+ handlePerformanceEntries([timing]);
78
+ });
79
+ stopFirstInputTiming = _retrieveFirstInputTiming.stop;
80
+ }
81
+ return function () {
82
+ observer.disconnect();
83
+ if (stopFirstInputTiming) {
84
+ stopFirstInputTiming();
85
+ }
86
+ clearTimeout(timeoutId);
87
+ };
88
+ });
89
+ }
90
+ var resourceTimingBufferFullListener;
91
+ function manageResourceTimingBufferFull(configuration) {
92
+ if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {
93
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377
94
+ resourceTimingBufferFullListener = addEventListener(performance, 'resourcetimingbufferfull', function () {
95
+ performance.clearResourceTimings();
96
+ });
97
+ }
98
+ return function () {
99
+ resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop();
100
+ };
101
+ }
102
+ function supportPerformanceObject() {
103
+ return window.performance !== undefined && 'getEntries' in performance;
104
+ }
105
+ export function supportPerformanceTimingEvent(entryType) {
106
+ return window.PerformanceObserver && PerformanceObserver.supportedEntryTypes !== undefined && PerformanceObserver.supportedEntryTypes.includes(entryType);
107
+ }
108
+ function filterRumPerformanceEntries(configuration, entries) {
109
+ return entries.filter(function (entry) {
110
+ return !isForbiddenResource(configuration, entry);
111
+ });
112
+ }
113
+ function isForbiddenResource(configuration, entry) {
114
+ return entry.entryType === RumPerformanceEntryType.RESOURCE && (!isAllowedRequestUrl(configuration, entry.name) || !hasValidResourceEntryDuration(entry));
115
+ }
116
+ //# sourceMappingURL=performanceObservable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceObservable.js","names":["addEventListener","Observable","setTimeout","clearTimeout","monitor","includes","isAllowedRequestUrl","hasValidResourceEntryDuration","retrieveFirstInputTiming","RumPerformanceEntryType","EVENT","FIRST_INPUT","LARGEST_CONTENTFUL_PAINT","LAYOUT_SHIFT","LONG_TASK","LONG_ANIMATION_FRAME","NAVIGATION","PAINT","RESOURCE","VISIBILITY_STATE","createPerformanceObservable","configuration","options","observable","window","PerformanceObserver","handlePerformanceEntries","entries","rumPerformanceEntries","filterRumPerformanceEntries","length","notify","timeoutId","isObserverInitializing","observer","getEntries","observe","_unused","fallbackSupportedEntryTypes","type","buffered","performance","getEntriesByType","entryTypes","_unused2","manageResourceTimingBufferFull","stopFirstInputTiming","supportPerformanceTimingEvent","_retrieveFirstInputTiming","timing","stop","disconnect","resourceTimingBufferFullListener","supportPerformanceObject","clearResourceTimings","undefined","entryType","supportedEntryTypes","filter","entry","isForbiddenResource","name"],"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,40 @@
1
+ import { getRelativeTime, isNumber, assign } from '@cloudcare/browser-core';
2
+ import { supportPerformanceTimingEvent, RumPerformanceEntryType } from './performanceObservable';
3
+ export function getNavigationEntry() {
4
+ if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {
5
+ var navigationEntry = performance.getEntriesByType(RumPerformanceEntryType.NAVIGATION)[0];
6
+ if (navigationEntry) {
7
+ return navigationEntry;
8
+ }
9
+ }
10
+ var timings = computeTimingsFromDeprecatedPerformanceTiming();
11
+ var entry = assign({
12
+ entryType: RumPerformanceEntryType.NAVIGATION,
13
+ initiatorType: 'navigation',
14
+ name: window.location.href,
15
+ startTime: 0,
16
+ duration: timings.responseEnd,
17
+ decodedBodySize: 0,
18
+ encodedBodySize: 0,
19
+ transferSize: 0,
20
+ toJSON: function toJSON() {
21
+ return assign({}, entry, {
22
+ toJSON: undefined
23
+ });
24
+ }
25
+ }, timings);
26
+ return entry;
27
+ }
28
+ export function computeTimingsFromDeprecatedPerformanceTiming() {
29
+ var result = {};
30
+ var timing = performance.timing;
31
+ for (var key in timing) {
32
+ if (isNumber(timing[key])) {
33
+ var numberKey = key;
34
+ var timingElement = timing[numberKey];
35
+ result[numberKey] = timingElement === 0 ? 0 : getRelativeTime(timingElement);
36
+ }
37
+ }
38
+ return result;
39
+ }
40
+ //# sourceMappingURL=performanceUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceUtils.js","names":["getRelativeTime","isNumber","assign","supportPerformanceTimingEvent","RumPerformanceEntryType","getNavigationEntry","NAVIGATION","navigationEntry","performance","getEntriesByType","timings","computeTimingsFromDeprecatedPerformanceTiming","entry","entryType","initiatorType","name","window","location","href","startTime","duration","responseEnd","decodedBodySize","encodedBodySize","transferSize","toJSON","undefined","result","timing","key","numberKey","timingElement"],"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,SAASA,eAAe,EAAEC,QAAQ,EAAEC,MAAM,QAAQ,yBAAyB;AAC3E,SACEC,6BAA6B,EAC7BC,uBAAuB,QAClB,yBAAyB;AAEhC,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,IAAIF,6BAA6B,CAACC,uBAAuB,CAACE,UAAU,CAAC,EAAE;IACrE,IAAIC,eAAe,GAAGC,WAAW,CAACC,gBAAgB,CAChDL,uBAAuB,CAACE,UAC1B,CAAC,CAAC,CAAC,CAAC;IACJ,IAAIC,eAAe,EAAE;MACnB,OAAOA,eAAe;IACxB;EACF;EAEA,IAAIG,OAAO,GAAGC,6CAA6C,CAAC,CAAC;EAC7D,IAAIC,KAAK,GAAGV,MAAM,CAChB;IACEW,SAAS,EAAET,uBAAuB,CAACE,UAAU;IAC7CQ,aAAa,EAAE,YAAY;IAC3BC,IAAI,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI;IAC1BC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAEV,OAAO,CAACW,WAAW;IAC7BC,eAAe,EAAE,CAAC;IAClBC,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;MAClB,OAAOvB,MAAM,CAAC,CAAC,CAAC,EAAEU,KAAK,EAAE;QAAEa,MAAM,EAAEC;MAAU,CAAC,CAAC;IACjD;EACF,CAAC,EACDhB,OACF,CAAC;EACD,OAAOE,KAAK;AACd;AAEA,OAAO,SAASD,6CAA6CA,CAAA,EAAG;EAC9D,IAAIgB,MAAM,GAAG,CAAC,CAAC;EACf,IAAIC,MAAM,GAAGpB,WAAW,CAACoB,MAAM;EAE/B,KAAK,IAAIC,GAAG,IAAID,MAAM,EAAE;IACtB,IAAI3B,QAAQ,CAAC2B,MAAM,CAACC,GAAG,CAAC,CAAC,EAAE;MACzB,IAAIC,SAAS,GAAGD,GAAG;MACnB,IAAIE,aAAa,GAAGH,MAAM,CAACE,SAAS,CAAC;MACrCH,MAAM,CAACG,SAAS,CAAC,GACfC,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG/B,eAAe,CAAC+B,aAAa,CAAC;IAC5D;EACF;EACA,OAAOJ,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,119 @@
1
+ import { RequestType, initFetchObservable, initXhrObservable, LifeCycleEventType, tryToClone, readBytesFromStream, elapsed, timeStampNow } from '@cloudcare/browser-core';
2
+ import { isAllowedRequestUrl } from './rumEventsCollection/resource/resourceUtils';
3
+ import { startTracer } from './tracing/tracer';
4
+ var nextRequestIndex = 1;
5
+ export function startRequestCollection(lifeCycle, configuration, sessionManager) {
6
+ var tracer = startTracer(configuration, sessionManager);
7
+ trackXhr(lifeCycle, configuration, tracer);
8
+ trackFetch(lifeCycle, configuration, tracer);
9
+ }
10
+ export function trackXhr(lifeCycle, configuration, tracer) {
11
+ var subscription = initXhrObservable().subscribe(function (rawContext) {
12
+ var context = rawContext;
13
+ if (!isAllowedRequestUrl(configuration, context.url)) {
14
+ return;
15
+ }
16
+ switch (context.state) {
17
+ case 'start':
18
+ tracer.traceXhr(context, context.xhr);
19
+ context.requestIndex = getNextRequestIndex();
20
+ lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {
21
+ requestIndex: context.requestIndex,
22
+ url: context.url
23
+ });
24
+ break;
25
+ case 'complete':
26
+ tracer.clearTracingIfNeeded(context);
27
+ lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {
28
+ duration: context.duration,
29
+ method: context.method,
30
+ requestIndex: context.requestIndex,
31
+ spanId: context.spanId,
32
+ startClocks: context.startClocks,
33
+ status: context.status,
34
+ traceId: context.traceId,
35
+ traceSampled: context.traceSampled,
36
+ type: RequestType.XHR,
37
+ url: context.url,
38
+ xhr: context.xhr,
39
+ isAborted: context.isAborted,
40
+ requestHeaderContexts: context.requestHeaderContexts,
41
+ handlingStack: context.handlingStack
42
+ });
43
+ break;
44
+ }
45
+ });
46
+ return {
47
+ stop: function stop() {
48
+ return subscription.unsubscribe();
49
+ }
50
+ };
51
+ }
52
+ export function trackFetch(lifeCycle, configuration, tracer) {
53
+ var subscription = initFetchObservable().subscribe(function (rawContext) {
54
+ var context = rawContext;
55
+ if (!isAllowedRequestUrl(configuration, context.url)) {
56
+ return;
57
+ }
58
+ switch (context.state) {
59
+ case 'start':
60
+ tracer.traceFetch(context);
61
+ context.requestIndex = getNextRequestIndex();
62
+ lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {
63
+ requestIndex: context.requestIndex,
64
+ url: context.url
65
+ });
66
+ break;
67
+ case 'resolve':
68
+ waitForResponseToComplete(context, function (duration) {
69
+ var _context$init;
70
+ tracer.clearTracingIfNeeded(context);
71
+ lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {
72
+ duration: duration,
73
+ method: context.method,
74
+ requestIndex: context.requestIndex,
75
+ responseType: context.responseType,
76
+ spanId: context.spanId,
77
+ startClocks: context.startClocks,
78
+ status: context.status,
79
+ traceId: context.traceId,
80
+ traceSampled: context.traceSampled,
81
+ requestHeaderContexts: ((_context$init = context.init) === null || _context$init === void 0 ? void 0 : _context$init.headers) || (context.input instanceof Request ? context.input.headers : undefined),
82
+ type: RequestType.FETCH,
83
+ url: context.url,
84
+ response: context.response,
85
+ init: context.init,
86
+ input: context.input,
87
+ isAborted: context.isAborted,
88
+ handlingStack: context.handlingStack
89
+ });
90
+ });
91
+ break;
92
+ }
93
+ });
94
+ return {
95
+ stop: function stop() {
96
+ return subscription.unsubscribe();
97
+ }
98
+ };
99
+ }
100
+ function getNextRequestIndex() {
101
+ var result = nextRequestIndex;
102
+ nextRequestIndex += 1;
103
+ return result;
104
+ }
105
+ function waitForResponseToComplete(context, callback) {
106
+ var clonedResponse = context.response && tryToClone(context.response);
107
+ if (!clonedResponse || !clonedResponse.body) {
108
+ // do not try to wait for the response if the clone failed, fetch error or null body
109
+ callback(elapsed(context.startClocks.timeStamp, timeStampNow()));
110
+ } else {
111
+ readBytesFromStream(clonedResponse.body, function () {
112
+ callback(elapsed(context.startClocks.timeStamp, timeStampNow()));
113
+ }, {
114
+ bytesLimit: Number.POSITIVE_INFINITY,
115
+ collectStreamBody: false
116
+ });
117
+ }
118
+ }
119
+ //# sourceMappingURL=requestCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestCollection.js","names":["RequestType","initFetchObservable","initXhrObservable","LifeCycleEventType","tryToClone","readBytesFromStream","elapsed","timeStampNow","isAllowedRequestUrl","startTracer","nextRequestIndex","startRequestCollection","lifeCycle","configuration","sessionManager","tracer","trackXhr","trackFetch","subscription","subscribe","rawContext","context","url","state","traceXhr","xhr","requestIndex","getNextRequestIndex","notify","REQUEST_STARTED","clearTracingIfNeeded","REQUEST_COMPLETED","duration","method","spanId","startClocks","status","traceId","traceSampled","type","XHR","isAborted","requestHeaderContexts","handlingStack","stop","unsubscribe","traceFetch","waitForResponseToComplete","_context$init","responseType","init","headers","input","Request","undefined","FETCH","response","result","callback","clonedResponse","body","timeStamp","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,83 @@
1
+ import { toServerDuration, extend, extend2Lev, ActionType, RumEventType, LifeCycleEventType, UUID, noop, discardNegativeDuration } from '@cloudcare/browser-core';
2
+ import { trackClickActions } from './trackClickActions';
3
+ import { PageState } from '../../contexts/pageStateHistory';
4
+ export function startActionCollection(lifeCycle, domMutationObservable, configuration, pageStateHistory) {
5
+ lifeCycle.subscribe(LifeCycleEventType.AUTO_ACTION_COMPLETED, function (action) {
6
+ lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action, pageStateHistory));
7
+ });
8
+ var actionContexts = {
9
+ findActionId: noop,
10
+ findAllActionId: noop
11
+ };
12
+ if (configuration.trackUserInteractions) {
13
+ actionContexts = trackClickActions(lifeCycle, domMutationObservable, configuration).actionContexts;
14
+ }
15
+ return {
16
+ actionContexts: actionContexts,
17
+ addAction: function addAction(action, savedCommonContext) {
18
+ lifeCycle.notify(LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, extend({
19
+ savedCommonContext: savedCommonContext
20
+ }, processAction(action, pageStateHistory)));
21
+ }
22
+ };
23
+ }
24
+ function processAction(action, pageStateHistory) {
25
+ var _action$context;
26
+ var autoActionProperties = isAutoAction(action) ? {
27
+ action: {
28
+ error: {
29
+ count: action.counts.errorCount
30
+ },
31
+ id: action.id,
32
+ loadingTime: discardNegativeDuration(toServerDuration(action.duration)),
33
+ frustration: {
34
+ type: action.frustrationTypes
35
+ },
36
+ long_task: {
37
+ count: action.counts.longTaskCount
38
+ },
39
+ resource: {
40
+ count: action.counts.resourceCount
41
+ }
42
+ },
43
+ _gc: {
44
+ action: {
45
+ target: action.target,
46
+ position: action.position
47
+ }
48
+ }
49
+ } : {
50
+ action: {
51
+ loadingTime: ((_action$context = action.context) === null || _action$context === void 0 ? void 0 : _action$context.duration) || 0
52
+ }
53
+ };
54
+ var customerContext = !isAutoAction(action) ? action.context : undefined;
55
+ var actionEvent = extend2Lev({
56
+ action: {
57
+ id: UUID(),
58
+ target: {
59
+ name: action.name
60
+ },
61
+ type: action.type
62
+ },
63
+ date: action.startClocks.timeStamp,
64
+ type: RumEventType.ACTION,
65
+ view: {
66
+ in_foreground: pageStateHistory.wasInPageStateAt(PageState.ACTIVE, action.startClocks.relative)
67
+ }
68
+ }, autoActionProperties);
69
+ return {
70
+ customerContext: customerContext,
71
+ rawRumEvent: actionEvent,
72
+ startTime: action.startClocks.relative,
73
+ domainContext: isAutoAction(action) ? {
74
+ event: action.event,
75
+ events: action.events
76
+ } : {}
77
+ };
78
+ }
79
+ function isAutoAction(action) {
80
+ return action.type === ActionType.CLICK;
81
+ // return action.type !== ActionType.CUSTOM
82
+ }
83
+ //# sourceMappingURL=actionCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actionCollection.js","names":["toServerDuration","extend","extend2Lev","ActionType","RumEventType","LifeCycleEventType","UUID","noop","discardNegativeDuration","trackClickActions","PageState","startActionCollection","lifeCycle","domMutationObservable","configuration","pageStateHistory","subscribe","AUTO_ACTION_COMPLETED","action","notify","RAW_RUM_EVENT_COLLECTED","processAction","actionContexts","findActionId","findAllActionId","trackUserInteractions","addAction","savedCommonContext","_action$context","autoActionProperties","isAutoAction","error","count","counts","errorCount","id","loadingTime","duration","frustration","type","frustrationTypes","long_task","longTaskCount","resource","resourceCount","_gc","target","position","context","customerContext","undefined","actionEvent","name","date","startClocks","timeStamp","ACTION","view","in_foreground","wasInPageStateAt","ACTIVE","relative","rawRumEvent","startTime","domainContext","event","events","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,62 @@
1
+ import { ONE_SECOND, every, setTimeout, clearTimeout } from '@cloudcare/browser-core';
2
+ export var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND;
3
+ export var MAX_DISTANCE_BETWEEN_CLICKS = 100;
4
+ var ClickChainStatus = {
5
+ WaitingForMoreClicks: 0,
6
+ WaitingForClicksToStop: 1,
7
+ Finalized: 2
8
+ };
9
+ export function createClickChain(firstClick, onFinalize) {
10
+ var bufferedClicks = [];
11
+ var status = ClickChainStatus.WaitingForMoreClicks;
12
+ var maxDurationBetweenClicksTimeout;
13
+ appendClick(firstClick);
14
+ function appendClick(click) {
15
+ click.stopObservable.subscribe(tryFinalize);
16
+ bufferedClicks.push(click);
17
+ clearTimeout(maxDurationBetweenClicksTimeout);
18
+ maxDurationBetweenClicksTimeout = setTimeout(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);
19
+ }
20
+ function tryFinalize() {
21
+ if (status === ClickChainStatus.WaitingForClicksToStop && every(bufferedClicks, function (click) {
22
+ return click.isStopped();
23
+ })) {
24
+ status = ClickChainStatus.Finalized;
25
+ onFinalize(bufferedClicks);
26
+ }
27
+ }
28
+ function dontAcceptMoreClick() {
29
+ clearTimeout(maxDurationBetweenClicksTimeout);
30
+ if (status === ClickChainStatus.WaitingForMoreClicks) {
31
+ status = ClickChainStatus.WaitingForClicksToStop;
32
+ tryFinalize();
33
+ }
34
+ }
35
+ return {
36
+ tryAppend: function tryAppend(click) {
37
+ if (status !== ClickChainStatus.WaitingForMoreClicks) {
38
+ return false;
39
+ }
40
+ if (bufferedClicks.length > 0 && !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {
41
+ dontAcceptMoreClick();
42
+ return false;
43
+ }
44
+ appendClick(click);
45
+ return true;
46
+ },
47
+ stop: function stop() {
48
+ dontAcceptMoreClick();
49
+ }
50
+ };
51
+ }
52
+
53
+ /**
54
+ * Checks whether two events are similar by comparing their target, position and timestamp
55
+ */
56
+ function areEventsSimilar(first, second) {
57
+ return first.target === second.target && mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS && second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS;
58
+ }
59
+ function mouseEventDistance(origin, other) {
60
+ return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));
61
+ }
62
+ //# sourceMappingURL=clickChain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clickChain.js","names":["ONE_SECOND","every","setTimeout","clearTimeout","MAX_DURATION_BETWEEN_CLICKS","MAX_DISTANCE_BETWEEN_CLICKS","ClickChainStatus","WaitingForMoreClicks","WaitingForClicksToStop","Finalized","createClickChain","firstClick","onFinalize","bufferedClicks","status","maxDurationBetweenClicksTimeout","appendClick","click","stopObservable","subscribe","tryFinalize","push","dontAcceptMoreClick","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":"AAAA,SACEA,UAAU,EACVC,KAAK,EACLC,UAAU,EACVC,YAAY,QACP,yBAAyB;AAEhC,OAAO,IAAIC,2BAA2B,GAAGJ,UAAU;AACnD,OAAO,IAAIK,2BAA2B,GAAG,GAAG;AAE5C,IAAIC,gBAAgB,GAAG;EACrBC,oBAAoB,EAAE,CAAC;EACvBC,sBAAsB,EAAE,CAAC;EACzBC,SAAS,EAAE;AACb,CAAC;AAED,OAAO,SAASC,gBAAgBA,CAACC,UAAU,EAAEC,UAAU,EAAE;EACvD,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIC,MAAM,GAAGR,gBAAgB,CAACC,oBAAoB;EAClD,IAAIQ,+BAA+B;EACnCC,WAAW,CAACL,UAAU,CAAC;EAEvB,SAASK,WAAWA,CAACC,KAAK,EAAE;IAC1BA,KAAK,CAACC,cAAc,CAACC,SAAS,CAACC,WAAW,CAAC;IAC3CP,cAAc,CAACQ,IAAI,CAACJ,KAAK,CAAC;IAC1Bd,YAAY,CAACY,+BAA+B,CAAC;IAC7CA,+BAA+B,GAAGb,UAAU,CAC1CoB,mBAAmB,EACnBlB,2BACF,CAAC;EACH;EAEA,SAASgB,WAAWA,CAAA,EAAG;IACrB,IACEN,MAAM,KAAKR,gBAAgB,CAACE,sBAAsB,IAClDP,KAAK,CAACY,cAAc,EAAE,UAAUI,KAAK,EAAE;MACrC,OAAOA,KAAK,CAACM,SAAS,CAAC,CAAC;IAC1B,CAAC,CAAC,EACF;MACAT,MAAM,GAAGR,gBAAgB,CAACG,SAAS;MACnCG,UAAU,CAACC,cAAc,CAAC;IAC5B;EACF;EAEA,SAASS,mBAAmBA,CAAA,EAAG;IAC7BnB,YAAY,CAACY,+BAA+B,CAAC;IAC7C,IAAID,MAAM,KAAKR,gBAAgB,CAACC,oBAAoB,EAAE;MACpDO,MAAM,GAAGR,gBAAgB,CAACE,sBAAsB;MAChDY,WAAW,CAAC,CAAC;IACf;EACF;EAEA,OAAO;IACLI,SAAS,EAAE,SAAXA,SAASA,CAAYP,KAAK,EAAE;MAC1B,IAAIH,MAAM,KAAKR,gBAAgB,CAACC,oBAAoB,EAAE;QACpD,OAAO,KAAK;MACd;MAEA,IACEM,cAAc,CAACY,MAAM,GAAG,CAAC,IACzB,CAACC,gBAAgB,CACfb,cAAc,CAACA,cAAc,CAACY,MAAM,GAAG,CAAC,CAAC,CAACE,KAAK,EAC/CV,KAAK,CAACU,KACR,CAAC,EACD;QACAL,mBAAmB,CAAC,CAAC;QACrB,OAAO,KAAK;MACd;MAEAN,WAAW,CAACC,KAAK,CAAC;MAClB,OAAO,IAAI;IACb,CAAC;IACDW,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;MAChBN,mBAAmB,CAAC,CAAC;IACvB;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA,SAASI,gBAAgBA,CAACG,KAAK,EAAEC,MAAM,EAAE;EACvC,OACED,KAAK,CAACE,MAAM,KAAKD,MAAM,CAACC,MAAM,IAC9BC,kBAAkB,CAACH,KAAK,EAAEC,MAAM,CAAC,IAAIzB,2BAA2B,IAChEyB,MAAM,CAACG,SAAS,GAAGJ,KAAK,CAACI,SAAS,IAAI7B,2BAA2B;AAErE;AAEA,SAAS4B,kBAAkBA,CAACE,MAAM,EAAEC,KAAK,EAAE;EACzC,OAAOC,IAAI,CAACC,IAAI,CACdD,IAAI,CAACE,GAAG,CAACJ,MAAM,CAACK,OAAO,GAAGJ,KAAK,CAACI,OAAO,EAAE,CAAC,CAAC,GACzCH,IAAI,CAACE,GAAG,CAACJ,MAAM,CAACM,OAAO,GAAGL,KAAK,CAACK,OAAO,EAAE,CAAC,CAC9C,CAAC;AACH","ignoreList":[]}